从调试TP开始进入android驱动

1、什么是TP

TP的全称叫touchpanel,字面意思就是触摸屏。常见触摸屏有电阻触摸屏和电容式触摸屏,现在我们使用的手持设备基本都是电容屏。触摸IC会计算出触摸坐标,然后通过i2c传送给平台,响应触摸事件。

2、怎么调试TP的驱动?

调试前我们需要了解的基本的硬件知识。我们调试的是什么IC?有没有规格书,有的话看一下,找到这颗ic的设备地址。只有找到正确的设备地址I2C总线才知道要跟哪个设备通信,就像我们给某某打电话,首先要输入正确的电话号码。平台有多条i2c总线,是挂载哪呢?系统通过什么来通知需要上报触摸坐标?需要中断脚来识别中断出发。触摸IC要正常工作,需要系统供电吧,VDD一般是2.8v。还有一个reset脚。

了解了TP硬件后,开始说TP的驱动。TP的驱动放在哪里?触摸屏的驱动都在Kernel/drivers/input/touchscreen/目录下,目录下有各种触控ic的驱动。这里找一个常用的ic ——gt9xx。(这里选用高通平台)。

(1) 、dtsi的配置

i2c_5: i2c@78b9000{

......

.......

};

i2c@78b9000 { /* BLSP1 QUP5 */           

     goodix@5d {

                        compatible = "goodix,gt9xx";

                        reg = <0x5d>;

                        interrupt-parent = <&msm_gpio>;

                        interrupts = <13 0x2008>;

                        reset-gpios = <&msm_gpio 12 0x0>;

                        interrupt-gpios = <&msm_gpio 13 0x2008>;

                        vcc-i2c-supply = <&pm8909_l6>;

                        vdd-supply = <&pm8909_l17>;

                        goodix,panel-coords = <0 0 800 1280>;

                        goodix,display-coords = <0 0 800 1280>;

                        goodix,enable-power-off;

                        goodix,fw_name = "gtp_fw.bin";

                        pinctrl-names = "pmx_ts_active","pmx_ts_suspend";

                        pinctrl-0 = <&ts_int_active &ts_reset_active>;

                        pinctrl-1 = <&ts_int_suspend &ts_reset_suspend>;

};

};

Ic的器件地址是0x5d,这是一个7为地址。硬件上gt9xx是挂载在I2c5上,中断脚是gpio 13,reset脚是gpio 12,VDD是LDO17,触摸屏的分辨是800 x 1280。这里还有两个pinctrl-0和pinctrl-1,用来配置中断gpio 13和reset gpio 12的上拉和下拉,即active状态时是gpio上拉,suspend时是下拉。

(2) 、configs中添加编译项

在kernel/arch/arm/configs/目录下找到对应的defconfig添加两个编译选项。

CONFIG_TOUCHSCREEN_GT9XX=y

CONFIG_GT9XX_TOUCHPANEL_DRIVER=y

(3) 、Kconfig和Makefile

这两个文件在Kernel/drivers/input/touchscreen/目录下,

Kconfig是内核配置文件,在Kconfig中添加如下:

config TOUCHSCREEN_GT9XX

        bool "Goodix touchpanel GT9xx series"

        depends on I2C

        help

          Say Y here if you have a Goodix GT9xx touchscreen.

          Gt9xx controllers are multi touch controllers which can

          report 5 touches at a time.


          If unsure, say N.


source "drivers/input/touchscreen/gt9xx/Kconfig"

Makefile编译配置文件,Makefile中添加:

obj-$(CONFIG_TOUCHSCREEN_GT9XX)         += gt9xx/

到这里驱动相关的配置就添加完成,接下来开始编译内核,编译命令用

Make bootimage或者 make  kernel。

怎么查看是否编译到我们添加的驱动?在out目录下面可以查看到我们编译出来的.o文件。

3、怎么debug?

如果编译正确烧录后,TP没反应怎么排查问题?调试的时候不可能都一帆风顺,遇到问题,才能更深入的去了解驱动,以及工作原理。首先我们确保TP的连接是正常的,电源是正常,gpio控制是正常。这些都正常后,我们可以抓取启动时候的Log,有两种方法,第一种抓取串口log,第二种,用adb命令, adb  root , 再adb dmesg 。I2c没有应答,我们除了看log和驱动代码,还可以通过示波器抓取i2c波形,看波形是否正常。

4、驱动代码流程

��

你可能感兴趣的:(从调试TP开始进入android驱动)