TP移植和除錯思路
一,硬體管腳
VCC
GND
I2C_SCL
I2C_SDA
INT
RST
二,TP驅動中input子系統和i2c driver知識點描述
input子系統註冊流程:
1.分配一個input_dev結構體input_dev = input_allocate_device()
2.使用set_bit函式設定input_dev
3.註冊input_register_device(input_dev結構體);
i2c driver註冊流程:
1.定義一個i2c_driver的結構體
2.實現i2c_driver結構體中的probe、remove等函式和driver結構體,結構體例子如下
static struct i2c_driver gsl_ts_driver = { .driver = { .name = GSLX680_I2C_NAME, .owner = THIS_MODULE, .of_match_table = GSLX_match_table, }, .probe = gsl_ts_probe, .remove = gsl_ts_remove, };
關於上述結構體中driver成員的of_match_table 的實現如下:
static const struct of_device_id GSLX_match_table[] = { {.compatible = "gslx,gl680",}, {}, };
3.module_i2c_driver(gsl_ts_driver );註冊i2c_driver 結構體。
完成上述3個步驟當驅動載入時會比對.compatible = "gslx,gl680"這一項跟DTS中的這一項字串是否相同,如果相同 probe函式就會被呼叫。
在TP驅動中包含了input子系統和i2c driver,他們之間的關係是在i2c driver的probe函式中實現的input子系統。input子系統和i2c driver 在TP的driver中都已經實現,在這裡主要是瞭解input和i2c driver的基本流程。
三、TP移植思路
上述已經說過input是在i2c driver的probe裡面來實現,所以說TP drvier就是一個i2c架構的driver,要按照i2c driver的架構新增進核心。
1.在DTS中實現device裝置節點資訊。主要包括:
i2c 裝置地址
i2c的硬體管腳要配置正確
2.將DTS中的device節點和driver連線到一起。
需要把compatible這一項的字串設定為和driver中這一項的字串相同
3.修改Makefile和config檔案把driver編譯進核心
四、除錯思路
1.如果i2c driver載入成功i2c管腳上會有訊號輸出,可通過示波器來抓取波形分析i2c的資料,第一個資料為i2c device地址左移一位+0/1(表示i2c是寫資料還是讀資料),依次來判斷i2c是否調通。如果沒有訊號建議把i2c硬體管腳和device斷開來除錯,然後先保證i2c管腳的配置是否正確,再確定i2c driver被正確載入。
2.i2c 可以傳送資料之後,TP driver初始化是否正確,因為使用TP不同所以這裡建議從probe函式中一步一步來除錯。
3.TP初始化完成點選螢幕應該有中斷訊號產生,如果沒有中斷產生,請斷開TP進行除錯先確保平臺端gpio能正常產生中斷。
4.TP可以工作之後可能會有報點不正確等問題,請確保你解析度和螢幕解析度相同,排查是否是x、y反向等問題。