RK3399 GT1X觸摸屏驅動調試筆記

硬件環境

1.Firefly AIO-3399(AI)開發版;

2.恆智的5寸電容觸摸屏800X480,I2C驅動支持GT5688。

操作系統

Android 7.2 for rockship

Step-1 查閱AIO-3399(AI)原理圖,確定I2C的Slave Device Addr地址長度

通過RK3399的原理圖可以瞭解到I2C的Slave Addr地址長度爲7Bita,這個地址長度十分關鍵,確定了在DTS配置文件中應該配置哪個地址作爲Slave Device的Addr,如圖1所示。
圖1 I2C Map
圖1 I2C Map

Step-2 查閱觸摸芯片GT5688 數據手冊,確定驅動地址

  • GT5688芯片上電時序圖,如圖2所示。
    圖2 上電時序圖
    圖2 上電時序圖
  • 主控復位時序圖,如圖3所示。
    圖3 復位時序圖
    圖3 復位時序圖
    1.通過上電時序圖確定地址
    使用示波器,測試在上電前-上電中-上電後管腳INT和RES的波形情況,根據下圖判斷設備使用的地址,如圖4所示。
    圖4 地址位與使用地址對應關係表
    圖4 地址位與使用地址對應關係表
  • 波形如圖5所示,則設定地址:0x14(7bit),0x28/0x29(8bit)
    圖5 地址爲0x14波形
    圖5 地址爲0x14波形
  • 波形如圖6所示,則設定地址:0x5D(7bit),0xBA/0xBB(8bit)
    圖6  地址爲0x5D波形
    圖6 地址爲0x5D波形
    2.聯繫Step-1 確定採用的是7Bita的地址,還是8Bita的地址
    本案採用的是7bit的地址,因此在驅動DTS文件中配置I2C時,應配置爲0x14地址。

Step-3 查閱AIO-3399(AI)原理圖,確定REST和INT的I2C管腳

該步驟確定觸摸屏REST和INT管腳接入的GPIO,從而確定在DTS文件配置時GPIO的數字,詳情請了解Firefly 官網關於AIO-3399(AI)WIKI章節(驅動開發-GPIO使用)。
如圖7所示,TP_RST是接入GPIO4_C5管腳的,TP_INT是接入GPIO4_D4管腳的。此處只需要記住即可,下一步配置DTS文件時會使用到。
圖7 TP管腳接入原理圖
圖7 TP管腳接入原理圖

Step-4 配置驅動文件

驅動文件路徑爲:"kernel/arch/arm64/boot/dts/rockship"
本案新建文件名爲:"rk3399-firefly-aioc-ai-lvds-HSX5H30C.dts",關於觸摸驅動的配置內容如下所示。由於GT5688使用的是GT1X的驅動,所示在配置是compatible賦值爲:"goodix,gt1x"

&i2c4 {
	status = "okay";
	gt1x:goodix_ts@14{                                                                      		
		compatible = "goodix,gt1x";
        reg = <0x14>;  //該地址爲Step-2確定的地址
		interrupt-parent = <&gpio4>;  //從Step-3瞭解到的信息
		interrupts = <28 IRQ_TYPE_EDGE_FALLING>; //數字28與irq-gpio保持一致
		goodix,rst-gpio = <&gpio4 21 GPIO_ACTIVE_LOW>; //數字"21“的確定,如備註所述。
		goodix,irq-gpio = <&gpio4 28 GPIO_ACTIVE_HIGH>; //數字"28“的確定,如備註所述。
        };
};

備註:
GPIO4_C5 被描述爲: <&gpio4 21 GPIO_ACTIVE_LOW>,這裏的 21來源於:16+5=21,其中 16 是因爲 GPIO4_C5 是屬於 GPIO4 的 C 組,如果是 A 組的話則爲 0,如果是 C 組則爲 16,如果是 D 組則爲 24,以此遞推,而 5是因爲C5 後面的 5,以此判斷GPIO4_D4描述爲:<&gpio4 28 GPIO_ACTIVE_HIGH>

Step-5 修改驅動源碼

1.修改gt1x_generic.h(文件路徑:"kernel/drivers/input/touchscreen/gt1x"
(1)修改CFG參數,更改爲廠家提供的CFG參數,其餘的GTP_CFG_GROUP1,GTP_CFG_GROUP2,GTP_CFG_GROUP3,GTP_CFG_GROUP4,GTP_CFG_GROUP5均清空。

#define GTP_CFG_GROUP0 {\
    0x43,0x20,0x03,0xE0,0x01,0x05,0x3D,0x10,0x01,0x00,\
    0x08,0x08,0x50,0x3C,0x53,0x11,0x01,0x01,0x00,0x00,\
    0x14,0x14,0x14,0x22,0x08,0x04,0x00,0x00,0x00,0x00,\
    0x3C,0x00,0x53,0x00,0x14,0x00,0x00,0x84,0x00,0x00,\
    0x00,0x00,0x00,0x64,0x1E,0x1E,0x8A,0x2A,0x0C,0x3C,\
    0x3E,0xF8,0x0A,0x20,0x33,0x60,0x12,0x02,0x24,0x00,\
    0x00,0x32,0x64,0x80,0x14,0x02,0x00,0x00,0x54,0x80,\
    0x35,0x7F,0x3D,0x7F,0x46,0x7F,0x51,0x7F,0x5D,0x7F,\
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
    0x32,0x20,0x50,0x3C,0x3C,0x00,0x00,0x00,0x00,0x00,\
    0x0D,0x06,0x0C,0x05,0x0B,0x04,0x0A,0x03,0x09,0x02,\
    0x08,0x01,0xFF,0xFF,0x00,0x01,0x02,0x03,0x04,0x05,\
    0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,\
    0x10,0x11,0x12,0x13,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
    0x00,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0x00,0x00,\
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
    0x00,0x00,0x00,0x00,0x00,0x00,0xC8,0xF5,0x01\
}

(2)設置GTP_CUSTOM_CFG1,加載自定義配置;GTP_DEBUG_ON1,方便調試輸出信息。

#define GTP_CUSTOM_CFG        1	// customize resolution & interrupt trigger mode

#define GTP_DEBUG_ON          1	// enable log printed by GTP_DEBUG(...)

(3)修改自定義CFG

#if GTP_CUSTOM_CFG
#define GTP_MAX_HEIGHT   800  	//根據屏幕尺寸修改
#define GTP_MAX_WIDTH    480	//根據屏幕尺寸修改
#define GTP_INT_TRIGGER  1	//0:Rising 1:Falling
#define GTP_WAKEUP_LEVEL 1
#else
#define GTP_MAX_HEIGHT   4096
#define GTP_MAX_WIDTH    4096
#define GTP_INT_TRIGGER  1
#define GTP_WAKEUP_LEVEL 1
#endif

2.修改“kernel/arch/arm64/configs/rockship_deconfig",打開指定的tp,關閉其他的*

CONFIG_TABLET_USB_KBTAB=y
CONFIG_INPUT_TOUCHSCREEN=y
#CONFIG_TOUCHSCREEN_GSLX680_PAD=y
#CONFIG_TOUCHSCREEN_GSLX680_VR=y
#CONFIG_TOUCHSCREEN_GSL3673=y
#CONFIG_TOUCHSCREEN_GSL3673_800X1280=y
#CONFIG_TOUCHSCREEN_GT9XX=y
CONFIG_TOUCHSCREEN_GT1X=y  //打開指定的tp,
CONFIG_ROCKCHIP_REMOTECTL=y
CONFIG_ROCKCHIP_REMOTECTL_PWM=y

3.修改"kernel/drivers/input/touchscreen/Kconfig"

config TOUCHSCREEN_GT1X
        bool "GT1X for gt1x pakage"
        default n

Step-6 編譯並安裝系統

Step-7 如何Debug?

1.獲取設備聯網IP地址

可通過局域網內掃描方式獲得,前提是要知道MAC地址。

2.連接設備

  • 通過網線連接AIO-3399C設備,獲取得到IP地址[192.168.1.171],此IP爲路由分配,沒有設置固定。

  • 通過adb調試

$> adb connect 192.168.1.171

$> adb shell

rk3399_firefly_aioc_ai_lvds:/ $  dmesg

  • 查看goodix_ts加載是否成功
    在這裏插入圖片描述
    明顯,此處顯示:i2c i2c-4:of_i2c:invalid addr=ba on /i2cff3d0000/goodix_ts@ba,即地址錯誤。

3.查看系統開機信息顯示

$> adb shell dmesg > dmesg.log

在這裏插入圖片描述
在這裏插入圖片描述

參考文獻

[1] tp調試日誌
[2] RK3399-Android7.1 調試筆記 GT9XX觸摸屏驅動詳解

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章