新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > AM335x(TQ335x)學(xué)習(xí)筆記——LCD驅(qū)動移植

AM335x(TQ335x)學(xué)習(xí)筆記——LCD驅(qū)動移植

作者: 時間:2016-11-28 來源:網(wǎng)絡(luò) 收藏

(3)backlight節(jié)點分析及配置

本文引用地址:http://m.butianyuan.cn/article/201611/322821.htm

從backlight節(jié)點中可以獲得如下信息:

  1. 1.匹配內(nèi)核驅(qū)動的關(guān)鍵詞是"pwm-backlight"。
  2. 2.使用的ECAP0進行PWM輸出。
  3. 3.有8個亮度等級。
  4. 4.默認的亮度等級是8,也就是最亮。
了解以上信息后需要查閱TQ335x手冊,弄清楚backlight控制管腳是如何連接的。通過分析TQ335x的原理圖可知,TQ335x的背光控制也是使用PWM方式控制,且該引腳接到AM335x的ECAP2_IN_PWM2_OUT管腳上,而evm開發(fā)板是接在ECAP0_IN_PWM0_OUT管腳上的,因此,需要修改DTS配置才能正常使用TQ335x的背光功能。思路是將DTS中的背光配置由EACP0改為EACP2,下面是修改的步驟:
  1. Step1.將backlight節(jié)點中&eacp0改為&eacp2。
  2. Step2.將&epwmss0改為&epwmss2,并將該節(jié)點內(nèi)的ecap0:ecap@48304100改成ecap0:ecap@48304100,然后將該節(jié)點中的&ecap0_pins改成&ecap2_pins。
  3. Step3.將ecap0_pins節(jié)點改名為ecap2_pins,然后將pinctrl-single,pins內(nèi)的內(nèi)容改為:0x19cMUX_MODE4。
最后修改后的DTS相關(guān)部分如下:
  1. backlight{
  2. compatible="pwm-backlight";
  3. pwms=<&ecap20500000>;
  4. brightness-levels=<05153566275101152255>;
  5. default-brightness-level=<8>;
  6. };
  7. &epwmss2{
  8. status="okay";
  9. ecap2:ecap@48304100{
  10. status="okay";
  11. pinctrl-names="default";
  12. pinctrl-0=<&ecap2_pins>;
  13. };
  14. };
  15. ecap2_pins:backlight_pins{
  16. pinctrl-single,pins=<
  17. 0x19cMUX_MODE4/*MCASP0_AHCLKR.eCAP2_in_PWM2_outMODE4*/
  18. >;
  19. };
這樣就完成了背光功能的DTS配置。
(4)配置內(nèi)核驅(qū)動
由于evm開發(fā)板的代碼是使用ATAGS方式啟動的,沒有配置pwm-backlight和基于TI LCD控制器的通用panel驅(qū)動,需要通過menuconfig開啟相應(yīng)的配置項。通過DTS中的compatible屬性可以找到pwm-backlight驅(qū)動是在drivers/video/backlight/pwm-bl.c中實現(xiàn)的,而panel驅(qū)動則是在drivers/gpu/drm/tilcdc/tilcdc_panel.c中實現(xiàn)的,閱讀相應(yīng)目錄下的Makefile和Kconfig就可以確定出如何配置menuconfig。Makefile和Kconfig的分析過程很簡單,我就不多寫了,下面是通過menuconfig開啟相應(yīng)功能的步驟。
Step1. 執(zhí)行menuconfig指令:
  1. makeARCH=armmenuconfig
Step2. 開啟通用pwm-backlight驅(qū)動和基于TI LCD控制器的通用panel驅(qū)動,配置內(nèi)容如下:
  1. Graphicssupport--->
  2. [*]Pulse-WidthModulation(PWM)Support--->
  3. <*>ECAPPWMsupport
  4. <*>EHRPWMPWMsupport
  5. -*-Backlight&LCDdevicesupport--->
  6. <*>GenericPWMbasedBacklightDriver
  7. Graphicssupport--->
  8. DirectRenderingManager--->
  9. <*>DirectRenderingManager(XFree864.1.0andhigherDRIsupport)--->
  10. <*>DRMSupportforTILCDCDisplayController
(5)編譯DTB和內(nèi)核
執(zhí)行DTB編譯指令:
  1. makeARCH=armCROSS_COMPILE=arm-linux-gnueabi-tq335x.dtb
執(zhí)行內(nèi)核編譯指令:
  1. makeARCH=armCROSS_COMPILE=arm-linux-gnueabi--j8
(6)用新內(nèi)核啟動開發(fā)板
將新編譯好的tq335x.dtb和zImage拷貝到SD卡的boot目錄下,然后用SD啟動開發(fā)板到u-boot命令行模式,通過u-boot指令啟動內(nèi)核(每次都這樣啟動會比較麻煩,可以通過設(shè)置u-boot的bootcmd環(huán)境變量并保存來簡化此動作),啟動內(nèi)核的指令與前一篇文章的命令是相同的:
  1. loadmmc00x88000000/boot/tq335x.dtb
  2. loadmmc00x82000000/boot/zImage
  3. loadmmc00x88080000/boot/ramdisk.img
  4. bootz0x820000000x880800000x88000000
這時,可以看到開發(fā)板正常啟動并且能看到熟悉的Linux小企鵝Logo,至此,就完成了am335x的LCD驅(qū)動移植,實際上是不需要我們寫代碼的,但需要了解內(nèi)核的組織方式和DTS配置的方法。

(7)pinmux配置參數(shù)的確定方法

相信有些人看完這幾篇文章之后有個疑問,就是配置pinmux的時候offset是如何確定的。配置GPIO管腳復(fù)用功能時經(jīng)常用到pinctrl-single,pins = 屬性,內(nèi)核解析該屬性后根據(jù)offset和function配置對應(yīng)的寄存器,是GPIO管腳配置為指定的復(fù)用功能。

講offset的確定方法之前需要指出的是,TI的GPIO控制與三星的芯片不同,三星的芯片管腳復(fù)用功能是放在GPIO寄存器中的,而TI的芯片則有個專門的控制模塊叫Control Module,該模塊可以控制所有的GPIO管腳功能復(fù)用;另外,與三星芯片的另外一個不同是TI的芯片分為技術(shù)參考手冊和數(shù)據(jù)手冊,技術(shù)參考手冊非常詳細的講述同family的芯片功能及使用方法,數(shù)據(jù)手冊則用來講述同family中不同芯片特有的屬性。因此,調(diào)試TI芯片時需要結(jié)合技術(shù)參考手冊和數(shù)據(jù)手冊,而配置GPIO則需要閱讀技術(shù)手冊的GPIO、Control Module兩章和數(shù)據(jù)手冊中相關(guān)的部分。

從am33xx.dtsi中可以看到pinmux的基地址是0x44e10800,我們先來看這個地址是怎么來的。從技術(shù)參考手冊的內(nèi)存映射表可以確定該地址位于L4_WKUP段內(nèi),如下圖:

點擊L4_WKUP超鏈接,可以切換到L4_WKUP的地址映射表,從該表中可以確定,該地址位于Control Module,如下圖:

點擊Control Module的超鏈接,可以切換到Control Module的地址映射表,從該表中可以找到0x44e10800地址,實際上就是conf_gpmc_ad0控制寄存器的地址,也就是說,pinmux配置時的offset都基于這個地址的。

以PWM背光控制為例。該功能引腳是接在ECAP2_IN_PWM_OUT上的,實際上就是AM335x的MCASP0_AHCLKR管腳,該管腳的地址也可以在Control Module的地址映射表中找到,該管腳的地址是0x44e1099c(表中是基于Control Module的offset,這個值是計算之后的),因此,在pinmux中配置該引腳時使用的offset應(yīng)該是0x19c,這樣就確定出了offset。
pinctrl-single,pins的第二項是function,用來指定GPIO管腳是輸入還是輸出,當前處于哪種模式。輸入輸出很容易配置,但是AM335x技術(shù)參考手冊中只提到每個管腳有8中模式,即MODE0~MODE7,其中,MODE0是主模式,但是沒有具體講每個引腳的每個MODE是什么功能,這時,就需要查閱AM335x數(shù)據(jù)手冊了。在AM335x數(shù)據(jù)手冊MCASP0_AHCLKR的八種模式的含義,如下圖:
由于我們使用的是eCAP2_in_PWM2_out功能,故使用MUX_MODE4。這就是backlight的pinmux配置時使用pinctrl-single,pins = <0x19c MUX_MODE4>的原因。

關(guān)鍵詞: AM335xTQ335xLCD驅(qū)動移

評論


技術(shù)專區(qū)

關(guān)閉