触摸驱动集成参考
1、kernel driver适配¶
本文举例适配的是gt911 IC,是基于kernel原生的goodix代码进行客制化修改来直接用的。经过确认主要需要修改的点有以下几点:
1、在sstar平台没有适配kernel的gpio controller,因此无法用API devm_gpiod_get_optional进行dts中的GPIO直接进行获取,目前的方式是通过配置宏直接拿到GPIO的硬件号,因此是以DTS属性值方式获取的GPIO 的ID。
2、在sstar平台gt911 IC一般电源都是常开的,所以对于电源的相关操作可以直接忽略。
2、config 宏开启¶
正常而言需要开启触摸屏相关的config宏,但是同时需要确认SSTAR平台的I2C config宏是否也正常开启了,否则driver虽然会被编译到,但是由于没有I2C Adapter,驱动仍然跑不起来。具体的宏配置可以参考如下。
goodix.ko依赖firmware_class.ko,firmware_class.ko对应的config是CONFIG_FW_LOADER
3、DTS适配¶
对于一个触摸屏来说,需要配置的主要有三个点:
1、I2C adapter相关配置;
2、触摸屏的电源配置(可选);
3、触摸屏的中断脚和复位脚配置。
3.1 I2C adapter相关配置¶
一般而言,I2C adapter的相关配置都是默认在平台的DTS中配置好的,配置如下:
同时需要注意I2C的SDA和SCL引脚是否在padmux中配置成I2C模式,如果不是配置成I2C的功能引脚,需要对应修改成正确的I2C引脚模式,参考如下:
其中PAD_SAR_ADC0_08和PAD_SAR_ADC0_09引脚名称可以在原理图中获取:
找到引脚名称之后就可以在pcupid-ssm001a-s01a-padmux文件中进行配置。
3.2 触摸屏的中断脚和复位脚配置¶
触摸屏的中断脚和复位脚配置可以参考如下,因为没有gpio controller,所以没有以标准的gpio管脚配置的形式来配置,但是可以用属性值方式直接获取。
中断脚和复位脚的GPIO值获取也是通过原理图获取,具体如下:
TP_RESET
对应reset PAD_SAR_ADC0_01
MIPI_TE
对应irq PAD_SAR_ADC0_02
对于中断的控制可以分解成如下:
interrupts-extended = <&sstar_gpi_intc INT_GPI_FIQ_PAD_SAR_ADC0_02>;
sstar_gpi_intc:
对应的中断控制器
INT_GPI_FIQ_PAD_SAR_ADC0_02:
中断控制器的对应的ID,一般都是INT_GPI_FIQ_前缀加上后面的gpio的ID
interrupt-names = "goodix_int" ;
goodix_int:
中断名字,可以随意取
3.3 触摸驱动demo¶
demo的位置路径:
sdk/verify/sample_code/source/pcupid/tp/tp_demo
使用方法和介绍可以参考:sdk/verify/sample_code/source/pcupid/tp/tp_demo/Readme.md
4、TP driver调试常见问题¶
4.1 insmod goodix.ko时报I2C通讯异常¶
err: i2c-4 err dma write transform len:0 != para_len:2 err:i2c-4 xfer error: -7 Goodix-TS 4-005d: i2c test failed attempt 1: -1 err: i2c-4 err dma write transform len:0 != para_len:2 err:i2c-4 xfer error: -7 Goodix-TS 4-005d: i2c test failed attempt 2: -1 Goodix-TS 4-005d: I2C communication failure: -1
检查从设备有没有接上,板端硬件状态确认是否正确。
4.1 insmod goodix.ko时报缺少symbol¶
insmod: can't insert 'goodix.ko': unknown symbol in module or invalid parameter
检查是否没有先insmod firmware_class.ko,就直接insmod goodix.ko