TP驱动调试笔记

前言:    

     以在mtk6737平台移植汇顶的GT910举例,建议正式调试的前一天把代码完整编译一遍,假如时间来不及,至少

要先编译内核,编译eng或者userdebug版本。一般要提前准备:主板、TP模组、串口线、硬件原理图,供应商提供

芯片手册、规格书、驱动代码和cfg参数等。调试最开始首先要了解TP芯片的型号、屏幕分辨率、主板上面TP座子位

置、供电方式、中断和复位脚的GPIO号、用到哪组i2c总线核对主板座子和规格书里面排线线序是否一致。接下来第

一个小目标就是调通i2c,读到正确的ID值。

 

     TP(触摸屏)的大致工作流程是:主控芯片与TP芯片通过i2c总线通讯,它们之间一般有6个引脚相连接,分别是VDD、

RESET、SCL、SDA、INT、GND。开机过程中系统会对TP芯片进行上电初始化,之后TP处于待命状态。当TP模组

表面有触摸时,会产生中断,接着在中断处理函数中唤醒触摸事件的线程,在线程里面通过i2c读取点坐标信息上报给

系统层。

 

1、移植芯片driver驱动代码

把厂家提供的GT910的代码复制到以下目录,有时候要把另外提供的CFG参数替换到gt9xx_config.h的CTP_CFG

_GROUP1中

kernel-3.18/drivers/input/touchscreen/mediatek/

 

驱动代码gt9xx_driver.c中需要重点关注的一些函数:

  static int __init tpd_driver_init(void); /*一般阅读驱动的代码是从最下面的module_init里面的函数开始*/

  void tpd_get_dts_info(void); /*读取设备树touch节点的属性*/

  static int tpd_local_init(void); /*在这里添加i2c driver*/

  static s32 tpd_i2c_probe(struct i2c_client *client, const struct i2c_device_id *id); /*匹配成功才调用这个函数*/

  static int tpd_power_on(struct i2c_client *client); /*上电和复位*/

  s32 gtp_read_version(struct i2c_client *client, u16 *version); /*读取版本号,在这里可以确认i2c通讯是否成功*/

  static s32 gtp_init_panel(struct i2c_client *client); /*TP芯片的初始化*/

  static int touch_event_handler(void *unused); /*触摸事件处理线程,中断产生时会唤醒这个线程*/

  static void tpd_down(s32 x, s32 y, s32 size, s32 id); /*上报点坐标*/

 

如果感兴趣,可以等驱动调通后再更加仔细地阅读代码,在内核中用dump_stack(); 函数可以查看当前函数被

哪些函数调用,对跟读代码很有帮助。

 

a、供电方面要注意,主板上是采用pmic输出2.8V,还是外部独立的LDO供电,根据硬件原理图来定。

     //pmic输出2.8V的部分控制代码

     tpd->reg = regulator_get(tpd->tpd_dev, "vtouch");

     ret = regulator_set_voltage(tpd->reg, 2800000, 2800000); /*set 2.8v*/

     if (ret) {

         printk("regulator_set_voltage(%d) failed!\n", ret);

         return -1;

      }

      ret = regulator_enable(tpd->reg); /*使能电源*/

 

     //独立的LDO供电方式,则是控制某个gpio输出高、低电平

     #define GTP_POWER_PORT  (GPIO22 | 0x80000000) 

     /*MTK旧的平台可以直接这样调用GPIO,Android7.0及以后建议改用从dts里面读取*/

 

     mt_set_gpio_mode(GTP_POWER_PORT, GPIO_MODE_00);

     mt_set_gpio_dir(GTP_POWER_PORT, GPIO_DIR_OUT);

     mt_set_gpio_out (GTP_POWER_PORT, 1); //输出高电平,使能LDO的2.8V

 

b、检查一下的复位时序

      void gtp_reset_guitar(struct i2c_client *client, s32 ms);

      

c、看看申请中断的部分,少数时候要修改compatible匹配名称

  

d、针对这个芯片,不需要固件升级

  • 7
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值