tp驱动移植

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驱动问题会持续更新··········

  • 3
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值