2019-05-08
關鍵詞:rk3128觸摸屏適配、goodix gt911 適配、goodix gt9xx 觸摸屏適配、gt9xx.c、rk平台觸摸屏適配
本篇文章記錄了筆者在運行着 Android 4.4 的 rk3128 開發板上適配 goodix gt911 觸摸屏的過程。
1、GT911 觸摸屏簡介
這款觸摸屏是分辨率為 1024*600 的橫向式電容觸摸屏。
它的接口類型為 I2C ,供電電壓和通訊電壓均為 3.3V 。這款觸摸屏內置了上拉電阻,這意味着我們的開發板上與該觸摸屏的接口處不需要設置上拉電阻。
關於線序,同樣是 GT911 ,不同批次的器件都有不同的線序。具體的要自行與廠家確認。這里我們必須要注意,即使是廠家發給我們的規格書,也有可能是錯誤的!當我們遇到莫名其妙的問題時,就得懷疑是否廠家給錯資料了。
2、DTS 配置
dts 文件配置這邊配置的主要是 CPU 與觸摸屏之間 I2C 通信的信息。那這里就必須得查看您的開發板原理圖,看看與觸摸屏相連的 I2C 是接到 CPU 的哪塊 I2C 模塊里。筆者這邊是接到了 rk3128 的 I2C2 里,如下原理圖所示

那這里,直接在您使用到的 dts 中作如下配置即可
&i2c2 { // touch pannel status = "okay"; ts@5d { compatible = "goodix,gt9xx"; reg = <0x5d>; irq-gpio = <&gpio1 GPIO_B0 IRQ_TYPE_LEVEL_LOW>; rst-gpio = <&gpio0 GPIO_D1 GPIO_ACTIVE_HIGH>; pwr-gpio = <&gpio1 GPIO_A4 GPIO_ACTIVE_HIGH>; max-x = <1024>; max-y = <600>; gt-type = <911>; }; };
這里來簡單解釋一下上面的配置信息。
compatible 照着填就好了。
reg 是 I2C 通信地址。這個地址是固定的,百度一下 goodix gt911 的 datasheet 里能看到它的地址。要么填 0x14 要么填 0x5d 。
接下來三個 irq-gpio , rst-gpio , pwr-gpio 也是對照着原理圖來填即可。
再下面兩個 max-x , max-y 就是分辨率了。
最后一個 gt-type 填的是觸摸屏型號。這個型號是用於后面驅動用來區分觸摸屏類型進而加載不同的配置程序用的。
3、驅動文件配置
驅動相關的文件主要的就 3 個文件
1、gt9xx.c
2、gt9xx.h
3、cfg 文件
當然這些文件的根源都來自於觸摸屏廠家,不過筆者這邊已經修改了一下這些文件,使其更符合筆者這邊的情況。文末會附上這些文件以及部分相關參考資料。
1、gt9xx.c
我們首先來看一下這個這個 gt9xx.c 文件。這里需要再次聲明,下面所分析的代碼是經過筆者這邊修改過的代碼。它的入口函數可以認為就是
static int goodix_ts_probe(struct i2c_client *client, const struct i2c_device_id *id)
在這個函數中,可以看到讀取了前面 dts 中配置的信息


從上面代碼我們就知道,前面 dts 中的配置名,必須要與這份代碼里的一致,不然會導致讀不出配置信息來的。
關於這份 C 代碼,需要注意的也就這一點了。
還有就是可以關注一下 gt9xx.h 文件。
頭文件里有幾個宏,是關乎調試打印的,在我們適配過程中打開這些打印可以幫助我們定位一些問題。
#define DEBUG_SWITCH 0 #define GTP_DEBUG_ON 0 #define GTP_DEBUG_FUNC_ON 0
這幾個打印默認都是關閉的,可以將它們置 1 打開。
2、cfg 文件
cfg 文件是觸摸屏的初始化指令,它在上電后由 CPU 將這些指令通過 I2C 寫到觸摸屏的芯片中。筆者這邊提供的文件名稱是 " 6399_GT911_04.cfg " 也會一並在文末附上下載鏈接。
這份 cfg 文件是在 gt9xx.h 中配置的。

在這份頭文件中還有好幾處地方可以填寫這些 cfg 文件,而驅動程序具體引用了哪一份數組,您可以自行查看 gt9xx.c 確定。筆者這邊使用的就是上圖所示的 gtp_dat_gt11 數組。
3、驅動移植
將我附件中的 gt9xx 目錄整個拷貝到以下目錄
./kernel/drivers/input/touchscreen
然后修改 touchscreen 目錄下的 Makefile 文件。
這個 Makefile 中定義的就是要編譯哪個平台的觸摸屏驅動的。筆者這邊因為總共就只適配一種觸摸屏,即 goodix gt911 的。所以直接將這份 Makefile 中的 obj-y 修改為如下形式的
obj-y += gt9xx/
基本上,做到這一步以后,就可以直接編譯的了。
4、調試
調試首先可以看上電時的內核打印日志。和觸摸屏相關的打印都是以下列關鍵字開頭的
<<-GTP-INFO->> <<-GTP-DEBUG->> <<-GTP-ERROR->>
您介時留心一下看是否有錯誤信息。
另一種查看工作狀態的方式是看中斷統計信息
cat /proc/interrupts
驅動順利加載的話,可以看到列出來的信息里有
1、i2c2
2、gt9xx
的統計信息。這些信息記錄的就是這些中斷發生的次數,通常我們與觸摸屏交互,都能產生好多次中斷的。
還有一種方式是查看觸摸屏驅動在 proc 中注冊的信息
cat /proc/gt9xx_config
這條指令會列出兩段指令信息。
第 2 段指令即是從觸摸屏芯片中讀出來的值,如果讀出來的值是全 0 ,那么說明 I2C 通信不成功,我們所配置的 cfg 沒有寫入到觸摸屏中。
附件:
鏈接:https://pan.baidu.com/s/1N4uYEbZ6H6ktSy4c_lxBaw 提取碼:44mo
