转自: https://blog.csdn.net/liuyingyanhuo/article/details/81294787

RK3288下tp驱动移植

一、修改DTS,添加新的I2C设备

&i2c4 {
    status = "okay";
    clock-frequency = <400000>;

    gslX680@40 {
        compatible = "gslX680";   
        reg = <0x40>;
        touch-gpio = <&gpio7 6 IRQ_TYPE_LEVEL_LOW>;
        reset-gpio = <&gpio7 5 GPIO_ACTIVE_HIGH>;
        i2c_sda_gpios = <&gpio7 17 IRQ_TYPE_LEVEL_LOW>;
        i2c_scl_gpios = <&gpio7 18 IRQ_TYPE_LEVEL_LOW>;
        status = "okay";
    };
};

1.&i2c4表明该设备挂载在i2c4下,我们添加设备节点时可根据硬件原理图看设备挂载在哪个I2C下,然后再到对应的节点上修改; 2.gslX680@40表示此I2C设备是触摸屏,设备名gsl680,设备地址为0x40; 3.compatible = “gslX680” 用于驱动和设备的绑定,表示特定的设备名(此处一定要正确,否则设备不能绑定);compatible优先匹配驱动中的id.table; 4.reg = <0x40> 表示此设备的地址为0x40,可以根据原理图找出设备地址,如果该地址错误,会导致I2C通讯失败; 5.touch-gpio = <&gpio7 6 IRQ_TYPE_LEVEL_LOW>; 表示中断引脚使用的是GPIO7中的GPIO_A6引脚,低电平触发; reset-gpio = <&gpio7 5 GPIO_ACTIVE_HIGH>; 表示复位引脚使用的是GPIO7中的GPIO_A5,高电平有效; 6.i2c_sda_gpios i2c_scl_gpios这两个分别是数据线和时钟线,看具体情况是否需要添加到代码;

二、修改Makefile,Kconfig

1.在drivers/input/touchscreen/Makefile中添加驱动:

obj-$(CONFIG_TOUCHSCREEN_GSLX680)  += GSL1680F/

注:看具体情况是否需要释掉Makefile里面其他GSLX680的编译信息,以及要看自己具体文件夹来配置,只有配置了CONFIG_TOUCHSCREEN_GSLX680选项,才会去编译GSL1680F文件夹下的文件; 2.修改Kconfigt添加驱动配置描述:

config TOUCHSCREEN_GSLX680
    tristate "GSL touch screen GSL1680 support for rockchip based platform"
    default y
    help
        Say Y here if you have a touchscreen interface using the
        two GSL gsl1680 , and your board-specific initialization
        code includes that in its table of IIC devices.
        If unsure, say N.

config后面的参数需要和驱动对应文件夹相匹配;

3.修改makefile以及Kconfig文件后,若发现还是没有编译驱动,可修改驱动配置文件

kernel/arch/arm/rockchip_defconfig

修改rockchip_defconfig文件使驱动强制编译进内核。

三、驱动移植时遇到的问题

1.驱动已经匹配上,但还是出现i2c读取不到address或device,有可能是硬件上接线有问题; 2.tp驱动移植成功后,发现tp反向,需要修改驱动中上报的x、y坐标,参考代码如下:

if (gtp_x_reverse)
            x = ts->abs_x_max - x;
if (gtp_y_reverse)
            y = ts->abs_y_max - y;

3.屏幕比列不匹配,可能需要原厂进行修改;

四、tp调试时的问题排查

1.当我们调试出现问题时,首先检查电压; 2.在porbe 函数里面加一句打印,确认驱动已经正常注册进系统了; 3.确认中断是否注册上了,可以adb shell cat /proc/interrupters,如果没有就查下打印,一般申请中断失败,都是IO 口被其他驱动或虚拟设备占用; 4.如果注册上了,但是触摸没中断.就用示波器勾下中断脚是否有波形,如果没有就代表触摸屏本身有问题,换一个试一下; 5.如果有波形,但是adb shell cat /proc/interrupters,中断号对应的中断数没有增加,一般都是中断脚被复用为其他作用,比如PWM; 6.一般这时候上层都会有点出来,大致分为三种情况:   1)出现鼠标,或者只有一个圆圈出来,这个是属于input 创建时候的有问题,可以参考正 常的驱动;   2)出现上下或左右反了,这个是要改驱动里面的上报函数;   3)如果上下左右正常了,但是会出现无法画到四个边的情况,这个是属于TP 里面的软 件问题,需要联系TP 厂的FAE,进行修改;

关于tp驱动问题会持续更新··········

标签: aosp

添加新评论