FT觸屏驅動除錯
以前調過一些驅動是基於kernel 2.6的,imx的kernel是3.0的,在驅動分佈的程式碼有了非常大的變化,以前我們在做驅動裝置匹配的時候回修改一些arch/arm/plat-xxx和arch/arm/mach-xxx中的程式碼,而現在kernel3.0,這些檔案都沒有了,取而代之的是裝置數(dts),這帶來的問題是dts對我來說比較陌生,所以先來了解下dts的語法,
這裡推薦看這個https://wenku.baidu.com/view/9ac0c94d376baf1ffc4fad84.html 。
作業系統:android 7.1
開發板:imx6 solox
TP:敦泰FT5426
首先我做的是讓螢幕亮起來,編譯安卓並設定下uboot引數
setenv bootcmd boota mmc2
setenv bootargs console=ttymxc0,115200 init=/init androidboot.console=ttymxc0 consoleblank=0 androidboot.hardware=freescale vmalloc=128M cma=448M androidboot.selinux=permissive androidboot.dm_verity=disable video=mxcfb3:dev=ldb,if=RGB24
saveenv
因為我看到我們lvds資料線有4組,所以修改dtsi中的引數data-width = 24,解析度我們的1024*600
結果花屏了,於是找了下硬體的兄弟核實下,結果4組只用了其中的三組,所以把資料寬度設定成data-width = 18
就這樣螢幕順利的亮了。我到uboot中吧啟動時列印的螢幕資訊也修改了一下,這樣螢幕顯示就沒問題了,下面就是觸控的問題了。
拿到觸屏的驅動時,驅動分別提供了高通, MTK,展訊三家的仔細比對之後發現這三家驅動主要還是針對kernel 2.6的,移植文件也是移植在修改arch/arm/plat-xxx和arch/arm/mach-xxx中的程式碼,高通提供的的驅動相容性好一些,最後提到了dts,所以我果斷選擇了高通的程式碼,修修改改編譯過去就ok啦(這裡我說一下個人觀點,對於移植,我覺得對於需要移植的程式碼如果需要你修改的程式碼太多,說明這個東西可移植性很差,或者說基本不能移植),我的這分程式碼可移植性還算不錯,沒有花多少工夫就編譯過了。
然後在dts新增裝置節點資訊,我的tp模組使用的i2c通訊,所以在i2c匯流排下新增子裝置,最初的時候我只添加了下圖最上面7行,並且將status設為okay,但是我最初的時候沒有很好地理解@之後的地址的意思(切記這裡的地址不是你I2C匯流排的基地址,而是和你通訊的裝置的地址)。
地址設定錯了,驅動和裝置沒有正確匹配,導致我加的列印資訊,沒有出現,然後有嘗試了其他的地址(我根本就沒有在TP資料中找到這個地址),有的地址竟然匹配成功了,在這個過程中我把高通驅動提供的其他的dts設定修改一些也放上去了,因為不放的話驅動中在of_property_read_bool等這一類函式讀取dts中屬性的時候會報錯。但是i2c無法正確通訊。然後學習使用示波器看了下i2c通訊的波形,發現只發了開始位,所以懷疑還是地址有問題,終於找到了這個地址,I2C通訊正常,列印下觸控座標。TIM圖片20170523161223
然後歡樂的去測試一下,納尼,盡然不靈,我指東他打西,進過多個點的觸控找規律,發現xy軸好像反了,我知道安卓機有時要橫屏,但是我的這分程式碼中沒有我在網上看到的程式碼那樣有xy互換的巨集定義。所以最後我把程式碼上報時x y對調上報,並把dts中display-coords和panel-coords屬性最後的兩個引數都對調後,觸屏完全可以了。
下面還有一個問題,就是螢幕的亮度太低,我已經修改了這裡的default-level,卻變化很小,然後嘗試使用echo 100 >/sys/class/backligt/brightness,亮度變化還是很小,並且使用安卓上的亮度調節變化基本沒有。然後使用示波器測量pwm那個背光線,發現頻率是20k HZ,我們手冊上的額定頻率是600-1000HZ,於是調節pwm頻率到額定範圍,
發現安卓上可以控制亮度了,但是亮度還是不夠,於是換了小一點的電阻,到此,螢幕完全可以了。