ilitek ili2130触摸屏调试记录

环境:RK3566 Android 11,触摸屏型号ilitek ili2130,I2C接口。

收到驱动文件和规格书等资料,粗略看了下驱动文件居然有dts配置参考和驱动的中文说明,属于相对成熟的方案调试会比较容易。

一、代码合并与编译

1、首先将驱动解压到drivers/input/touchscreen/目录下

这个没啥说的直接放进去就行,我们的目录名称为"ilitek_linux_i2c",注意这个名字后面要用。

2、修改dts配置

参考配置

ilitek@41 {
	compatible = "tchip,ilitek";
	reg = <0x41>;
	interrupt-parent = <&msm_gpio>;
	interrupts = <13 0x0>;
	vdd-supply = <&pm8916_l17>;
	vcc_i2c-supply = <&pm8916_l6>;
	ilitek,irq-gpio = <&msm_gpio 13 0x0>;
	ilitek,reset-gpio = <&msm_gpio 12 0x0>;
	ilitek,vbus = "vcc_i2c";
	ilitek,vdd = "vdd";
	ilitek,name = "ilitek_i2c";
};

根据我们自己的主板修改下

&i2c1 {
        status = "okay";

        ilitek:ilitek@41 {
                compatible = "tchip,ilitek";
                reg = <0x41>;
                vdd-supply = <&vcc3v3_lcd0_n>;
                vcc_i2c-supply = <&vcc_3v3>;
                pinctrl-0 = <&ili213x_gpio>;
                ilitek,irq-gpio = <&gpio0 RK_PB5 IRQ_TYPE_LEVEL_HIGH>; 
                ilitek,reset-gpio = <&gpio0 RK_PC8 GPIO_ACTIVE_HIGH>;
                ilitek,vbus = "vcc_i2c";
                ilitek,vdd = "vdd";
                ilitek,name = "ilitek_i2c";
                status = "okay";
        };
};

这里的i2c1是我们主板的配置,还有ilitek,irq-gpio和ilitek,reset-gpio对应的GPIO0 RK_PB5和gpio0 RK_PC8要看原理图根据自己的主板进行修改。

3、修改Kconfig配置和Makefile

修改drivers/input/touchscreen/Makefile,增加如下内容

obj-$(CONFIG_TOUCHSCREEN_ILITEK_LINUX_I2C)   += ilitek_linux_i2c/

注意这里的ilitek_linux_i2c就是第一步解压的驱动目录名,CONFIG_TOUCHSCREEN_ILITEK_LINUX_I2C和后面的 TOUCHSCREEN_ILITEK_LINUX_I2C是关联的,不要填错了。

修改drivers/input/touchscreen/Kconfig,增加如下内容

config TOUCHSCREEN_ILITEK_LINUX_I2C
        tristate "ILItek linux i2c support for rockchip platform"
        depends on I2C && ARCH_ROCKCHIP
        help
          Say Y here if you have a touchscreen interface using the ili2130
          on Rockchip platform, and your board-specific initialization
          code includes that in its table of IIC devices.
          If unsure, say N.

至此该触摸屏驱动已合并到内核,但是尚未打开编译开关。可以通过make menuconfig或者直接修改配置文件的方式打开。这里我们直接修改配置文件rockchip_defconfig

4、修改rockchip_defconfig打开编译开关

修改arch/arm64/configs/rockchip_defconfig,增加如下内容

CONFIG_TOUCHSCREEN_ILITEK_LINUX_I2C=y

注意这个CONFIG_TOUCHSCREEN_ILITEK_LINUX_I2C和Kconfig中的配置是关联的,不要填错了。

5、编译

前面四步做完就做好了驱动的合并,技术上讲可以开始编译了;但是先别急着启动,文档显示驱动针对rockchip平台上有适配的,在文件ilitek_ts.h中有宏定义ILITEK_PLAT,修改为

#define ILITEK_PLAT            ILITEK_PLAT_ROCKCHIP

再检查下TOUCH_SCREEN_X_MAX和TOUCH_SCREEN_Y_MAX定义是否与自己的触摸屏一致

#define TOUCH_SCREEN_X_MAX                      600     //LCD_WIDTH
#define TOUCH_SCREEN_Y_MAX                      1024    //LCD_HEIGHT

现在开始编译--编译指令根据自己的情况修改,参考:

make ARCH=arm64 rockchip_defconfig rk356x_evb.config android-11.config rk356x.config
make ARCH=arm64 rk3566-evb5-lp4x-v10.img -j12

驱动明显针对rockchip做了适配,编译一次通过,可以调试了。

二、调试

1、烧录与初步检查

烧录之后检查触摸屏--没有反应;进adb shell用getevent查看,发现驱动正常加载了,划过触摸屏的时候有报点事件;内核日志发现发现大量的i2c通讯错误从开机就出现,伴随着触摸增加,提示---校验和错误;

[    2.599142] [ILITEK][ERR] [data] ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff, len: [64/64]
[    2.599173] [ILITEK][ERR] checksum : 3f/ff not matched
[    2.605205] [ILITEK][ERR] [data] ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff, len: [64/64]
[    2.605237] [ILITEK][ERR] checksum : 3f/ff not matched
[    2.611268] [ILITEK][ERR] [data] ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff-ff, len: [64/64]
[    2.611302] [ILITEK][ERR] checksum : 3f/ff not matched

疑惑:数据包解析是驱动的基本工作,正式发布的驱动不太可能犯这么低级的错误;判断应该是dts配置、中断、干扰或者接线错误导致数据包本身出错了;

2、故障排查

检查触摸屏的dts配置--没有发现错误;检查上电时序--没发现问题,增加上电过程中的延时--错误依旧;用i2cdetect检查---正常;

查看中断:

cat /proc/interrupts | grep ilitek

发现中断一直在增加,不管是否按触摸屏都会一直增加,结合内核日志里报数据包错误(触摸屏驱动),猜测可能是中断被错误触发了;

参考下几位同仁的方法尝试修改中断配置--改上升沿触发,问题依旧;

询问硬件--坚持任务电压、接线都没问题,一时陷入僵局;

3、发现故障原因

找供应商--结果对方压根就是个外行,还得靠自己,各种方法都尝试了还找不到原因一时有点懵逼,咋办呢?

上示波器,测量了供电电压,正常;测量中断----发现一个规律的方波信号,拔掉触摸屏信号扔在;看来就是这个方波信号导致中断被异常触发,导致驱动读取了错误的数据包;

4、查找方波来源解决问题

观察方波发现是很规律的32K信号,烧录之前的固件没有这个32K信号,一般认为是这次修改导致的,就感觉很冤--没改到32K信号相关的呀;

然后意识到——这不就是给无线模块准备的32k外部输入信号嘛,怎么串到这里了?查看原理图--发现中断脚的确有个32k信号复用;深入查dts配置,发现32K的引脚的确也配置了该gpio,关闭后中断脚终于没有这个32K信号了,触摸直接可用了;

还有个问题没搞明白——同样的配置为啥之前的板子没有这个32K信号干扰?有懂的朋友请不吝指教。

  • 27
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ilitek2510 是一款常见的 USB 触摸屏控制器芯片,Linux 平台下可以使用 HID 触摸屏驱动来支持 ilitek2510 触摸屏。 以下是步骤: 1. 确保系统已经加载了 hid-multitouch 驱动,可以使用以下命令来检查: ``` lsmod | grep hid_multitouch ``` 如果没有输出,则需要加载该驱动: ``` sudo modprobe hid-multitouch ``` 2. 连接 ilitek2510 触摸屏,并用以下命令来检测是否能够识别: ``` dmesg | grep input ``` 如果能够识别,则会输出如下信息: ``` input: ILITEK ILITEK-TP as /devices/pci0000:00/0000:00:14.0/usb1/1-3/1-3:1.0/0003:22B8:2E82.0001/input/input3 hid-generic 0003:22B8:2E82.0001: input,hidraw0: USB HID v1.10 Pointer [ILITEK ILITEK-TP] on usb-0000:00:14.0-3/input0 ``` 其中,hidraw0 就是触摸屏的设备号。 3. 安装 xinput 工具,可以使用以下命令进行安装: ``` sudo apt-get install xinput ``` 4. 使用以下命令来调整触摸屏的参数: ``` xinput set-prop <device id> "Device Accel Velocity Scaling" <value> ``` 其中,device id 就是之前获取到的 hidraw 设备号,value 是一个浮点数,代表加速度的值。可以根据实际情况进行调整。 5. 如果需要在系统启动时自动加载 hid-multitouch 驱动和设置触摸屏参数,可以将以下脚本保存为 /etc/init.d/touchscreen,并授予可执行权限: ``` #!/bin/bash ### BEGIN INIT INFO # Provides: touchscreen # Required-Start: $local_fs $remote_fs $syslog # Required-Stop: $local_fs $remote_fs $syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Start touchscreen # Description: Enable support for ilitek2510 touchscreen on boot ### END INIT INFO case "$1" in start) modprobe hid-multitouch xinput set-prop <device id> "Device Accel Velocity Scaling" <value> ;; stop) ;; *) echo "Usage: $0 {start|stop}" exit 1 esac exit 0 ``` 然后使用以下命令将脚本添加到启动项中: ``` sudo update-rc.d touchscreen defaults ``` 以上就是在 Linux 平台下使用 ilitek2510 触摸屏驱动方法。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值