本文档以展锐平台SC9863A1为基础,屏幕以FT8057S为基础,调试屏幕的TP。

一、原理图

屏幕接口原理图
以上图片主要关注TP的int、reset、接口方式(I2C或SPI)

二、GPIO口配置

2.1使用工具配置初始化

LogicTools-pinmap_V1.2工具截图
使用以上工具设置GPIO,主要配置:gpio属性
根据以上原理图可知需要配置以下IO
SPI(I2C):SPI1
TP_RESET:EXTINT1(GPIO145)
TP_INIT:EXTINT0(GPIO144)

{REG_PIN_SD2_CLK,                       BITS_PIN_AF(1)},
{REG_MISC_PIN_SD2_CLK,                  BITS_PIN_DS(1)|BIT_PIN_NULL|BIT_PIN_WPD|BIT_PIN_SLP_AP|BIT_PIN_SLP_WPD|BIT_PIN_SLP_Z},//TP_SPI_CLK
...
{REG_PIN_SD2_D0,                        BITS_PIN_AF(1)},
{REG_MISC_PIN_SD2_D0,                   BITS_PIN_DS(1)|BIT_PIN_NULL|BIT_PIN_WPD|BIT_PIN_SLP_AP|BIT_PIN_SLP_WPD|BIT_PIN_SLP_Z},//TP_SPI_MOSI
{REG_PIN_SD2_CMD,                       BITS_PIN_AF(1)},
{REG_MISC_PIN_SD2_CMD,                  BITS_PIN_DS(1)|BIT_PIN_NULL|BIT_PIN_WPD|BIT_PIN_SLP_AP|BIT_PIN_SLP_WPD|BIT_PIN_SLP_Z},//TP_SPI_MISO
{REG_PIN_SD2_D3,                        BITS_PIN_AF(1)},
{REG_MISC_PIN_SD2_D3,                   BITS_PIN_DS(1)|BIT_PIN_NULL|BIT_PIN_WPD|BIT_PIN_SLP_AP|BIT_PIN_SLP_WPD|BIT_PIN_SLP_Z},//TP_SPI_CSN

2.2将IO口信息配置到代码中

在kernel阶段使用GPIO,linux都是需要在dts内配置信息,然后在驱动代码内去申请IO故需要在以下文件内配置bsp\kernel5.15\kernel5.15\arch\arm64\boot\dts\sprd\touchscreen\sp9863a-spi1-gpio144-145-tp.dtsi
以下为原厂给的示例代码

Example of qualcomm platform: 
I2C Interface:
	i2c@f9927000 { 
		focaltech@38{ 
			compatible = "focaltech,fts";	
			reg = <0x38>;  					
			interrupt-parent = <&msm_gpio>;				
			interrupts = <13 0x02>;
            //vdd-supply = <&pm8916_l15>;
            //vcc_i2c-supply = <&pm8916_l16>;
			focaltech,reset-gpio = <&msm_gpio 12 0x01>; 
			focaltech,irq-gpio = <&msm_gpio 13 0x02>; 	
			focaltech,max-touch-number = <10>;			
			focaltech,display-coords =  <0 0 1079 1919>;	 
			
			pinctrl-names = "pmx_ts_active","pmx_ts_suspend","pmx_ts_release";
			pinctrl-0 = <&ts_int_active &ts_reset_active>;
			pinctrl-1 = <&ts_int_suspend &ts_reset_suspend>;
			pinctrl-2 = <&ts_release>;

			/*
			focaltech,have-key;
			focaltech,key-number = <3>;	
			focaltech,keys = <139 102 158>; 	
			focaltech,key-x-coords = <200 600 800>;
			focaltech,key-y-coords = <2000 2000 2000>; 
			*/
		};
	}; 
	
	
SPI Interface:
	spi@78b9000 {
		focaltech@0 { 
			compatible = "focaltech,fts";
			reg = <0x0>;
			spi-max-frequency = <6000000>;
			interrupt-parent = <&msm_gpio>;
			interrupts = <13 0x2>;
			focaltech,reset-gpio = <&msm_gpio 12 0x01>; 
			focaltech,irq-gpio = <&msm_gpio 13 0x02>; 	
			focaltech,max-touch-number = <10>;			
			focaltech,display-coords =  <0 0 1079 1919>;
			
			pinctrl-names = "pmx_ts_active","pmx_ts_suspend","pmx_ts_release";
			pinctrl-0 = <&ts_int_active &ts_reset_active>;
			pinctrl-1 = <&ts_int_suspend &ts_reset_suspend>;
			pinctrl-2 = <&ts_release>;
		};
	};

我们根据以上代码,修改为sprd格式的代码如下

&spi1 {
	status = "ok";
	#address-cells = <1>;
	#size-cells = <0>;

	/* Novatek device tree node */
	touchpanel@0 {
		power-dependency = <&dpu>;
		compatible = "focaltech,fts";
		reg = <0>; //Same as CS ID
		status = "ok";
		spi-max-frequency = <8000000>;	//4800000,9600000,15000000,19200000

		/*------------------ FT8057S_spi ------------------*/
		focaltech,irq-gpio = <&ap_gpio 144 GPIO_ACTIVE_HIGH>;
		focaltech,reset-gpio = <&ap_gpio 145 GPIO_ACTIVE_HIGH>;
		focaltech,max-touch-number = <10>;
		focaltech,display-coords =  <0 0 720 1612>;
	};
};

三、将文件合入代码编译

在文件夹(vendor\bsp\modules\kernel5.15\touchscreen)添加驱动文件夹(focaltech_ft8057s)修改文件名为focaltech_ft8057s_spi
修改Kbuild和Makefile文件,去掉I2C部分,或者修改makefile为只编译SPI部分文件(该处的驱动文件可能需要反复修改)

在文件
device\sprd\vnd_mpool\module\vnd_others\bsp\mfeature\kernel\kernel5.15\msoc\sharkl3\ko\arm64\km.mk

$(BSP_KERNEL_MODULES_OUT)/focaltech_ft8057s_ts.ko \

device\sprd\vnd_mpool\module\vnd_others\bsp\mfeature\kernel\kernel5.15\msoc\sharkl3\ko\modules.load

focaltech_ft8057s_ts.ko

bsp\kernel5.15\kernel5.15\build.config\build.config.gki.aarch64.s9863a_user
bsp\kernel5.15\kernel5.15\build.config\build.config.gki.aarch64.s9863a_userdebug

../modules/kernel5.15/touchscreen/focaltech_ft8057s_spi

内添加编译的ko文件

在文件夹device\sprd\vnd_mpool\module\vendor\ts\firmware内添加TP固件FT8057S_firmware.bin

并在文件device\sprd\sharkl3\s9863a1h10\module\ts\md.mk内添加

PRODUCT_COPY_FILES += \
    $(VND_MPOOL)/module/vendor/ts/firmware/FT8057S_firmware.bin:$(TARGET_COPY_OUT_ODM)/firmware/focaltech_ts_fw_.bin

其中focaltech_ts_fw_.bin名称与驱动代码内的名称相关。

完整编译后下载调试

参考文献

103455《LCD-TP客制化指导V1.0.mp4》
29887《Touch Panel客制化指导手册V1.8.pdf》
104594《dts介绍.MP4》
103652《Linux DTS介绍V1.0.pdf》
fae提供的:FT8057S-SPI驱动.zip

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐