新聞中心

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

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

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

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

本文引用地址:http://2s4d.com/article/201611/322821.htm

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

  1. 1.匹配內(nèi)核驅(qū)動(dòng)的關(guān)鍵詞是"pwm-backlight"。
  2. 2.使用的ECAP0進(jìn)行PWM輸出。
  3. 3.有8個(gè)亮度等級(jí)。
  4. 4.默認(rèn)的亮度等級(jí)是8,也就是最亮。
了解以上信息后需要查閱TQ335x手冊(cè),弄清楚backlight控制管腳是如何連接的。通過(guò)分析TQ335x的原理圖可知,TQ335x的背光控制也是使用PWM方式控制,且該引腳接到AM335x的ECAP2_IN_PWM2_OUT管腳上,而evm開(kāi)發(fā)板是接在ECAP0_IN_PWM0_OUT管腳上的,因此,需要修改DTS配置才能正常使用TQ335x的背光功能。思路是將DTS中的背光配置由EACP0改為EACP2,下面是修改的步驟:
  1. Step1.將backlight節(jié)點(diǎn)中&eacp0改為&eacp2。
  2. Step2.將&epwmss0改為&epwmss2,并將該節(jié)點(diǎn)內(nèi)的ecap0:ecap@48304100改成ecap0:ecap@48304100,然后將該節(jié)點(diǎn)中的&ecap0_pins改成&ecap2_pins。
  3. Step3.將ecap0_pins節(jié)點(diǎn)改名為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ū)動(dòng)
由于evm開(kāi)發(fā)板的代碼是使用ATAGS方式啟動(dòng)的,沒(méi)有配置pwm-backlight和基于TI LCD控制器的通用panel驅(qū)動(dòng),需要通過(guò)menuconfig開(kāi)啟相應(yīng)的配置項(xiàng)。通過(guò)DTS中的compatible屬性可以找到pwm-backlight驅(qū)動(dòng)是在drivers/video/backlight/pwm-bl.c中實(shí)現(xiàn)的,而panel驅(qū)動(dòng)則是在drivers/gpu/drm/tilcdc/tilcdc_panel.c中實(shí)現(xiàn)的,閱讀相應(yīng)目錄下的Makefile和Kconfig就可以確定出如何配置menuconfig。Makefile和Kconfig的分析過(guò)程很簡(jiǎn)單,我就不多寫(xiě)了,下面是通過(guò)menuconfig開(kāi)啟相應(yīng)功能的步驟。
Step1. 執(zhí)行menuconfig指令:
  1. makeARCH=armmenuconfig
Step2. 開(kāi)啟通用pwm-backlight驅(qū)動(dòng)和基于TI LCD控制器的通用panel驅(qū)動(dòng),配置內(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)核啟動(dòng)開(kāi)發(fā)板
將新編譯好的tq335x.dtb和zImage拷貝到SD卡的boot目錄下,然后用SD啟動(dòng)開(kāi)發(fā)板到u-boot命令行模式,通過(guò)u-boot指令啟動(dòng)內(nèi)核(每次都這樣啟動(dòng)會(huì)比較麻煩,可以通過(guò)設(shè)置u-boot的bootcmd環(huán)境變量并保存來(lái)簡(jiǎn)化此動(dòng)作),啟動(dòng)內(nèi)核的指令與前一篇文章的命令是相同的:
  1. loadmmc00x88000000/boot/tq335x.dtb
  2. loadmmc00x82000000/boot/zImage
  3. loadmmc00x88080000/boot/ramdisk.img
  4. bootz0x820000000x880800000x88000000
這時(shí),可以看到開(kāi)發(fā)板正常啟動(dòng)并且能看到熟悉的Linux小企鵝Logo,至此,就完成了am335x的LCD驅(qū)動(dòng)移植,實(shí)際上是不需要我們寫(xiě)代碼的,但需要了解內(nèi)核的組織方式和DTS配置的方法。

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

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

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

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

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

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

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

評(píng)論


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

關(guān)閉
×

Digikey let's do
· 2025年第1期限时报名开启,5月8日截止
· Digikey助力,提供一站式免费器件支持
· 跟大佬一起 【DIY 功率监测与控制系统】