基於Dragonboard 410c的觸摸屏調試

準備給Dragonboard 410c接一個mtch6102觸摸板,但在調試過程中遇到了幾個問題,花費了較多時間,記錄下來爲以後碰到類似問題可以得到快速解決,也把調試經驗分享給大家。

mtch6102是一款比較簡單的觸摸IC,沒有太複雜的軟硬件需求。

這裏寫圖片描述

這裏寫圖片描述

它的驅動直接按照linux驅動框架就很容易編寫出來了。

在kernel中正確配置相關dtsi文件,驅動成功運行後,操作觸摸板發現兩個問題:

1、驅動中能接收到TP觸摸中斷,但通過input子系統上報後,在應用端無法接收到相應的鍵值和座標。

這裏寫圖片描述

發現這個問題時真是覺得很奇怪,用adb shell getevent查看明顯是有數據上報上來的,跟蹤log也發現在hal層是已經收到數據的,但在應用層確實收不到相關座標值。

後面分析了一下代碼,發現只上報了TP的按壓動作,但沒有上報鬆開動作,這會導致上層認爲這次事件不是一個完整的觸摸事件,從而不會把座標分發給相應的應用 。

只要修改一下代碼就OK了

這裏寫圖片描述

2、mtch6102的驅動我編寫的是中斷方式上報的,可是後面發現即使不按壓TP,上報數據的中斷處理函數也會被一直觸發調用,也就是一直有檢測到有中斷信號。

這裏寫圖片描述

檢查硬件是正常的,相關的dtsi配置也是正常的,驅動裏對寄存器的配置也都是對的。

這個問題困擾了好長時間,後面通過把TP的中斷線飛線出來連接示波器抓波形查看,確認中斷信號是從TP IC端主動生成。

最終分析發現,在每次觸摸中斷觸發後,讀取TP座標相關的寄存器時,必須全部讀全,如果有些寄存器沒有讀取數據,TP IC會認爲此次的觸摸數據還沒有被讀取從而一直產生中斷。

修改中斷處理函數中的讀取寄存器值相關代碼後,TP正常工作,不會在沒有觸摸的情況下再繼續產生中斷。

這裏寫圖片描述

發佈了31 篇原創文章 · 獲贊 10 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章