1. kernel-3.18/drivers/input/touchscreen/mediatek/tpd_common_probe.c

  1. static int __init tpd_probe_init(void)
  2. {
  3. tpd_device_init();
  4. return ;
  5. }

2. kernel-3.18/drivers/input/touchscreen/mediatek/mtk_tpd.c

  1. int tpd_device_init(void)
  2. {
  3. int res = ;
  4.  
  5. tpd_init_workqueue = create_singlethread_workqueue("mtk-tpd");
  6. INIT_WORK(&tpd_init_work, tpd_init_work_callback);
  7.  
  8. res = queue_work(tpd_init_workqueue, &tpd_init_work);
  9. if (!res)
  10. pr_err("tpd : touch device init failed res:%d\n", res);
  11. return ;
  12. }

3. kernel-3.18/drivers/input/touchscreen/mediatek/mtk_tpd.c

  1. /* called when loaded into kernel */
  2. static void tpd_init_work_callback(struct work_struct *work)
  3. {
  4. TPD_DEBUG("MediaTek touch panel driver init\n");
  5.  
  6. if (platform_driver_register(&tpd_driver) != )
  7. TPD_DMESG("unable to register touch panel driver.\n");
  8. }

platform_device 和 platform_driver 匹配后,调用tpd_probe

  1. static struct platform_driver tpd_driver = {
  2. .remove = tpd_remove,
  3. .shutdown = NULL,
  4. .probe = tpd_probe,
  5. .driver = {
  6. .name = TPD_DEVICE,
  7. .pm = &tpd_pm_ops,
  8. .owner = THIS_MODULE,
  9. .of_match_table = touch_of_match,
  10. },
  11. };
  1. /* touch panel probe */
  2. static int tpd_probe(struct platform_device *pdev)
  3. {
  4. int touch_type = ; /* 0:R-touch, 1: Cap-touch */
  5. int i = ;
  6. #ifndef CONFIG_CUSTOM_LCM_X
  7. #ifdef CONFIG_LCM_WIDTH
  8. unsigned long tpd_res_x = , tpd_res_y = ;
  9. int ret = ;
  10. #endif
  11. #endif
  12.  
  13. TPD_DMESG("enter %s, %d\n", __func__, __LINE__);
  14.  
  15. if (misc_register(&tpd_misc_device))
  16. pr_err("mtk_tpd: tpd_misc_device register failed\n");
  17. tpd_get_gpio_info(pdev);
  18. tpd = kmalloc(sizeof(struct tpd_device), GFP_KERNEL);
  19. if (tpd == NULL)
  20. return -ENOMEM;
  21. memset(tpd, , sizeof(struct tpd_device));
  22.  
  23. /* allocate input device */
  24. tpd->dev = input_allocate_device();
  25. if (tpd->dev == NULL) {
  26. kfree(tpd);
  27. return -ENOMEM;
  28. }
  29. /* TPD_RES_X = simple_strtoul(LCM_WIDTH, NULL, 0); */
  30. /* TPD_RES_Y = simple_strtoul(LCM_HEIGHT, NULL, 0); */
  31.  
  32. #ifdef CONFIG_MTK_LCM_PHYSICAL_ROTATION
  33. if ( == strncmp(CONFIG_MTK_LCM_PHYSICAL_ROTATION, "", )
  34. || == strncmp(CONFIG_MTK_LCM_PHYSICAL_ROTATION, "", )) {
  35. #ifdef CONFIG_MTK_FB /*Fix build errors,as some projects cannot support these apis while bring up*/
  36. TPD_RES_Y = DISP_GetScreenWidth();
  37. TPD_RES_X = DISP_GetScreenHeight();
  38. #endif
  39. } else
  40. #endif
  41. {
  42. #ifdef CONFIG_CUSTOM_LCM_X
  43. #ifndef CONFIG_MTK_FPGA
  44. #ifdef CONFIG_MTK_FB /*Fix build errors,as some projects cannot support these apis while bring up*/
  45. TPD_RES_X = DISP_GetScreenWidth();
  46. TPD_RES_Y = DISP_GetScreenHeight();
  47. #else/*for some projects, we do not use mtk framebuffer*/
  48. TPD_RES_X = tpd_dts_data.tpd_resolution[];
  49. TPD_RES_Y = tpd_dts_data.tpd_resolution[];
  50. #endif
  51. #endif
  52. #else
  53. #ifdef CONFIG_LCM_WIDTH
  54. ret = kstrtoul(CONFIG_LCM_WIDTH, , &tpd_res_x);
  55. if (ret < ) {
  56. pr_err("Touch down get lcm_x failed");
  57. return ret;
  58. }
  59. TPD_RES_X = tpd_res_x;
  60. ret = kstrtoul(CONFIG_LCM_HEIGHT, , &tpd_res_y);
  61. if (ret < ) {
  62. pr_err("Touch down get lcm_y failed");
  63. return ret;
  64. }
  65. TPD_RES_Y = tpd_res_y;
  66. #endif
  67. #endif
  68. }
  69.  
  70. if ( == TPD_RES_X)
  71. TPD_RES_X = ;
  72. if ( == TPD_RES_Y)
  73. TPD_RES_Y = ;
  74. pr_debug("mtk_tpd: TPD_RES_X = %lu, TPD_RES_Y = %lu\n", TPD_RES_X, TPD_RES_Y);
  75.  
  76. tpd_mode = TPD_MODE_NORMAL;
  77. tpd_mode_axis = ;
  78. tpd_mode_min = TPD_RES_Y / ;
  79. tpd_mode_max = TPD_RES_Y;
  80. tpd_mode_keypad_tolerance = TPD_RES_X * TPD_RES_X / ;
  81. /* struct input_dev dev initialization and registration */
  82. tpd->dev->name = TPD_DEVICE;
  83. set_bit(EV_ABS, tpd->dev->evbit);
  84. set_bit(EV_KEY, tpd->dev->evbit);
  85. set_bit(ABS_X, tpd->dev->absbit);
  86. set_bit(ABS_Y, tpd->dev->absbit);
  87. set_bit(ABS_PRESSURE, tpd->dev->absbit);
  88. #if !defined(CONFIG_MTK_S3320) && !defined(CONFIG_MTK_S3320_47)\
  89. && !defined(CONFIG_MTK_S3320_50) && !defined(CONFIG_MTK_MIT200) \
  90. && !defined(CONFIG_TOUCHSCREEN_SYNAPTICS_S3528) && !defined(CONFIG_MTK_S7020) \
  91. && !defined(CONFIG_TOUCHSCREEN_MTK_SYNAPTICS_3320_50)
  92. set_bit(BTN_TOUCH, tpd->dev->keybit);
  93. #endif /* CONFIG_MTK_S3320 */
  94. set_bit(INPUT_PROP_DIRECT, tpd->dev->propbit);
  95.  
  96. /* save dev for regulator_get() before tpd_local_init() */
  97. tpd->tpd_dev = &pdev->dev;
  98. for (i = ; i < TP_DRV_MAX_COUNT; i++) {
  99. /* add tpd driver into list */
  100. if (tpd_driver_list[i].tpd_device_name != NULL) {
  101. tpd_driver_list[i].tpd_local_init();
  102. /* msleep(1); */
  103. if (tpd_load_status == ) {
  104. TPD_DMESG("[mtk-tpd]tpd_probe, tpd_driver_name=%s\n",
  105. tpd_driver_list[i].tpd_device_name);
  106. g_tpd_drv = &tpd_driver_list[i];
  107. break;
  108. }
  109. }
  110. }
  111. if (g_tpd_drv == NULL) {
  112. if (tpd_driver_list[].tpd_device_name != NULL) {
  113. g_tpd_drv = &tpd_driver_list[];
  114. /* touch_type:0: r-touch, 1: C-touch */
  115. touch_type = ;
  116. g_tpd_drv->tpd_local_init();
  117. TPD_DMESG("[mtk-tpd]Generic touch panel driver\n");
  118. } else {
  119. TPD_DMESG("[mtk-tpd]cap touch and Generic touch both are not loaded!!\n");
  120. return ;
  121. }
  122. }
  123. touch_resume_workqueue = create_singlethread_workqueue("touch_resume");
  124. INIT_WORK(&touch_resume_work, touch_resume_workqueue_callback);
  125. /* use fb_notifier */
  126. tpd_fb_notifier.notifier_call = tpd_fb_notifier_callback;
  127. if (fb_register_client(&tpd_fb_notifier))
  128. TPD_DMESG("register fb_notifier fail!\n");
  129. /* TPD_TYPE_CAPACITIVE handle */
  130. if (touch_type == ) {
  131.  
  132. set_bit(ABS_MT_TRACKING_ID, tpd->dev->absbit);
  133. set_bit(ABS_MT_TOUCH_MAJOR, tpd->dev->absbit);
  134. set_bit(ABS_MT_TOUCH_MINOR, tpd->dev->absbit);
  135. set_bit(ABS_MT_POSITION_X, tpd->dev->absbit);
  136. set_bit(ABS_MT_POSITION_Y, tpd->dev->absbit);
  137. input_set_abs_params(tpd->dev, ABS_MT_POSITION_X, , TPD_RES_X, , );
  138. input_set_abs_params(tpd->dev, ABS_MT_POSITION_Y, , TPD_RES_Y, , );
  139. #if defined(CONFIG_MTK_S3320) || defined(CONFIG_MTK_S3320_47) \
  140. || defined(CONFIG_MTK_S3320_50) || defined(CONFIG_MTK_MIT200) \
  141. || defined(CONFIG_TOUCHSCREEN_SYNAPTICS_S3528) || defined(CONFIG_MTK_S7020) \
  142. || defined(CONFIG_TOUCHSCREEN_MTK_SYNAPTICS_3320_50)
  143. input_set_abs_params(tpd->dev, ABS_MT_PRESSURE, , , , );
  144. input_set_abs_params(tpd->dev, ABS_MT_WIDTH_MAJOR, , , , );
  145. input_set_abs_params(tpd->dev, ABS_MT_WIDTH_MINOR, , , , );
  146. input_mt_init_slots(tpd->dev, , );
  147. #else
  148. input_set_abs_params(tpd->dev, ABS_MT_TOUCH_MAJOR, , , , );
  149. input_set_abs_params(tpd->dev, ABS_MT_TOUCH_MINOR, , , , );
  150. #endif /* CONFIG_MTK_S3320 */
  151. TPD_DMESG("Cap touch panel driver\n");
  152. }
  153. input_set_abs_params(tpd->dev, ABS_X, , TPD_RES_X, , );
  154. input_set_abs_params(tpd->dev, ABS_Y, , TPD_RES_Y, , );
  155. input_abs_set_res(tpd->dev, ABS_X, TPD_RES_X);
  156. input_abs_set_res(tpd->dev, ABS_Y, TPD_RES_Y);
  157. input_set_abs_params(tpd->dev, ABS_PRESSURE, , , , );
  158. input_set_abs_params(tpd->dev, ABS_MT_TRACKING_ID, , , , );
  159.  
  160. if (input_register_device(tpd->dev))
  161. TPD_DMESG("input_register_device failed.(tpd)\n");
  162. else
  163. tpd_register_flag = ;
  164. if (g_tpd_drv->tpd_have_button)
  165. tpd_button_init();
  166.  
  167. if (g_tpd_drv->attrs.num)
  168. tpd_create_attributes(&pdev->dev, &g_tpd_drv->attrs);
  169.  
  170. return ;
  171. }

MTK touchscreen 流程的更多相关文章

  1. MTK HDMI 流程

    一.HDMI初始化 1. kernel-3.18/drivers/misc/mediatek/ext_disp/mtk_extd_mgr.c static int __init mtk_extd_mg ...

  2. MTK OTG 流程

    一.注册mt_usb驱动 kernel-3.18/drivers/misc/mediatek/usb20/mt6735/usb20.c static int __init usb20_init(voi ...

  3. android MTK驱动背光唤醒流程

    在标准的android驱动中,睡眠唤醒流程非常清晰,能够较方便的更改lcd唤醒时间和led背光的点亮时间,但是也很容易出现问题,比如说闪屏,唤醒慢! 出现闪屏有两个原因 1. 开背光时间在唤醒lcd前 ...

  4. MTK Camera 开机启动流程(转载)

    一.MTK平台Camera框架 MTK平台的Camera的架构见下图, 这里主要介绍kernel部分和HAL层部分. 1.Kernel 部分主要有两块: 1.1.image sensordriver, ...

  5. andorid之摄像头驱动流程--MTK平台

    原文地址:andorid之摄像头驱动流程--MTK平台 作者:守候心田 camera成像原理: 景物通过镜头生产光学图像投射到sensor表面上,然后转为模拟电信号,经过数模变成数字图像信号,在经过D ...

  6. 居于mtk芯片安卓车机系统具体流程

    一:车机系统框架  MCU 功能  电源控制  Radio 控制(RDS)  按键检测(Panel/Remote/SW)  常见信号检查(倒车/大灯/刹车)  CAN 模块通讯  ARM- ...

  7. MTK camera 闪光灯Flashlight驱动调试流程

    MTK camera 闪光灯Flashlight驱动调试流程 分类: MtkDev  |  作者: topicdev 相关  |  发布日期 : 2014-09-26  |  热度 : 153°   ...

  8. mtk lcm驱动加载流程 (转载)

    平台:mt6582 + Android 4.4 前面就说过,在mtk代码中支持屏是可兼容的,通过调用驱动中的compare_id函数来匹配驱动和屏,这里来细看一下代码. 1. LK部分(mediate ...

  9. mtk 的conferrence call建立流程

    (重点看main_log与) 抓mtk log: 1.*#*#82533284#*#*      进入抓log UI 2.*#*#825364#*#*      进入工程模式 3.进入"Lo ...

随机推荐

  1. java 发送微信客服消息

    package com.baosight.wechat.service; import net.sf.json.JSONObject; import org.apache.commons.httpcl ...

  2. poj 1651 Multiplication Puzzle【区间DP】

    题目链接:http://poj.org/problem? id=1651 题意:初使ans=0,每次消去一个值,位置在pos(pos!=1 && pos !=n) 同一时候ans+=a ...

  3. [笔记] sed and awk

    / awk程序的典型示例是将数据转换成格式化的报表,当数据拥有某种结构时就能最好的体现awk的好处:可以使用awk脚本对数据的列重新排序,甚至可以将列变成行以及将行变成列:awk的功能将文本编辑的思想 ...

  4. 宜信开源|分布式任务调度平台SIA-TASK的架构设计与运行流程

    一.分布式任务调度的背景 无论是互联网应用或者企业级应用,都充斥着大量的批处理任务.我们常常需要一些任务调度系统来帮助解决问题.随着微服务化架构的逐步演进,单体架构逐渐演变为分布式.微服务架构.在此背 ...

  5. ORACLE 36进制和10进制,互相转换函数

    第一部分 --36转10进制 create or replace function f_36to10 (str varchar) return int  is returnValue int;   s ...

  6. 关于TCP通信程序中数据的传递格式

    前言 在之前的回射程序中,实现了字符串的传递与回射.幸运的是,字符串的传递不用担心不同计算机类型的大小端匹配问题,然而,如果传递二进制数据,这就是一个要好好考虑的问题.在客户端和服务器使用不同的字节序 ...

  7. MongoDB 操作手冊CRUD 事务 两步提交

    运行两步提交 概述 这部分提供了多记录更新或者多记录事务.使用两步提交来完毕多记录写入的模板. 另外.能够扩展此方法来提供rollback-like功能. 背景 MongoDB对于单条记录的操作是原子 ...

  8. iOS进程间通信之CFMessagePort

    本文转载至 http://www.cocoachina.com/industry/20140606/8701.html iOS系统是出了名的封闭,每个应用的活动范围被严格地限制在各自的沙盒中.尽管如此 ...

  9. 2016/07/11 PHP接口的介绍与实现

        接口定义了实现某种服务的一般规范,声明了所需的函数和常量,但不指定如何实现.之所以不给出实现的细节,是因为不同的实体可能需要用不同的方式来实现公共的方法定义.关键是要建立必须实现的一组一般原则 ...

  10. Node 文件上传,ZIP

    上传文件: 很多人会使用第三包进行文件的上传,例如formidable. 我也研究过,可是与Express3.x框架一起使用时,发现上传的文件总是找不到.结果原因是下面这句导致: app.use(ex ...