触摸驱动集成参考


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