应用dts在am335x上移植LCD(二)

转载 2015年11月17日 17:39:06

TI的LCD控制器驱动是非常完善的,共通的地方已经由驱动封装好了,与按键一样,我们可以通过DTS配置完成LCD的显示。下面,我们来讨论下使用DTS方式配置内核完成LCD驱动的思路。

  (4)配置内核驱动

  由于evm开发板的代码是使用ATAGS方式启动的,没有配置pwm-backlight和基于TI LCD控制器的通用panel驱动,需要通过menuconfig开启相应的配置项。通过DTS中的compatible属性可以找到pwm-backlight驱动是在drivers/video/backlight/pwm-bl.c中实现的,而panel驱动则是在drivers/gpu/drm/tilcdc/tilcdc_panel.c中实现的,阅读相应目录下的Makefile和Kconfig就可以确定出如何配置menuconfig。Makefile和Kconfig的分析过程很简单,我就不多写了,下面是通过menuconfig开启相应功能的步骤。

  Step1. 执行menuconfig指令:

  make ARCH=arm menuconfig

  Step2. 开启通用pwm-backlight驱动和基于TI LCD控制器的通用panel驱动,配置内容如下:

  Graphics support --->

  Pulse-Width Modulation (PWM) Support --->

  <*> ECAP PWM support

  <*> EHRPWM PWM support

  -*- Backlight & LCD device support --->

  <*> Generic PWM based Backlight Driver

  Graphics support --->

  Direct Rendering Manager --->

  <*> Direct Rendering Manager (XFree86 4.1.0 and higher DRI support) --->

  <*> DRM Support for TI LCDC Display Controller

  (5)编译DTB和内核

  执行DTB编译指令:

  make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- tq335x.dtb

  执行内核编译指令:

  make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- -j8

  (6)用新内核启动开发板

  将新编译好的tq335x.dtb和zImage拷贝到SD卡的boot目录下,然后用SD启动开发板到u-boot命令行模式,通过u-boot指令启动内核(每次都这样启动会比较麻烦,可以通过设置u-boot的bootcmd环境变量并保存来简化此动作),启动内核的指令与前一篇文章的命令是相同的:

  load mmc 0 0x88000000 /boot/tq335x.dtb

  load mmc 0 0x82000000 /boot/zImage

  load mmc 0 0x88080000 /boot/ramdisk.img

  bootz 0x82000000 0x88080000 0x88000000

  这时,可以看到开发板正常启动并且能看到熟悉的Linux小企鹅Logo,至此,就完成了am335x的LCD驱动移植,实际上是不需要我们写代码的,但需要了解内核的组织方式和DTS配置的方法。

  (7)pinmux配置参数的确定方法

  相信有些人看完这几篇文章之后有个疑问,就是配置pinmux的时候offset是如何确定的。配置GPIO管脚复用功能时经常用到pinctrl-single,pins =

  讲offset的确定方法之前需要指出的是,TI的GPIO控制与三星的芯片不同,三星的芯片管脚复用功能是放在GPIO寄存器中的,而TI的芯片则有个专门的控制模块叫Control Module,该模块可以控制所有的GPIO管脚功能复用;另外,与三星芯片的另外一个不同是TI的芯片分为技术参考手册和数据手册,技术参考手册非常详细的讲述同family的芯片功能及使用方法,数据手册则用来讲述同family中不同芯片特有的属性。因此,调试TI芯片时需要结合技术参考手册和数据手册,而配置GPIO则需要阅读技术手册的GPIO、Control Module两章和数据手册中相关的部分。

  从am33xx.dtsi中可以看到pinmux的基地址是0x44e10800,我们先来看这个地址是怎么来的。从技术参考手册的内存映射表可以确定该地址位于L4_WKUP段内,如下图:

  

 

  点击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应该是0x19c,这样就确定出了offset。

  pinctrl-single,pins的第二项是function,用来指定GPIO管脚是输入还是输出,当前处于哪种模式。输入输出很容易配置,但是AM335x技术参考手册中只提到每个管脚有8中模式,即MODE0~MODE7,其中,MODE0是主模式,但是没有具体讲每个引脚的每个MODE是什么功能,这时,就需要查阅AM335x数据手册了。在AM335x数据手册MCASP0_AHCLKR的八种模式的含义,如下图:

  

 

  由于我们使用的是eCAP2_in_PWM2_out功能,故使用MUX_MODE4。这就是backlight的pinmux配置时使用pinctrl-single,pins = <0x19c MUX_MODE4>的原因。

  (8)效果展示

  到这里LCD的移植工作就算完成了,下面是TQ335x驱动LCD后的效果图:

  

 

  (9)总结

  使用DTB方式配置内核驱动一般需要以下几个步骤:

  Step1. 设置pinmux,配置的GPIO为相应的功能。

  Step2. 设置相应的节点,关联对应的驱动。

  Step3. 检查内核配置项,确保开启对应的驱动选项。

  相关产品:

  http://www.embedsky.com/index.php?s=/Product/show/id/49.html

  http://www.embedsky.com/index.php?s=/Product/show/id/86.html

应用dts在am335x上移植LCD(一)

TI的LCD控制器驱动是非常完善的,共通的地方已经由驱动封装好了,与按键一样,我们可以通过DTS配置完成LCD的显示。下面,我们来讨论下使用DTS方式配置内核完成LCD驱动的思路。   (1)初...
  • xiaojiezuo123
  • xiaojiezuo123
  • 2015年11月17日 17:36
  • 1140

关于LCD调整背光的问题

·关于MTK6572平台上的LCD屏幕背光问题已经折腾了好几天了,从上周开始看底层代码开始一直到现在,还是没有正确解决问题,目前的状态是找到问题所在,但是由于从来没有学习过Linux只是,所以无从下手...
  • zhaoqi2617
  • zhaoqi2617
  • 2016年09月13日 10:12
  • 910

内核配置与裁剪浅析

Linux内核裁减  (1)安装新内核: i)将新内核copy到/usr/src下, #tar xzvf linux-2.6.38.4.tar.gz -----解压缩. ii) 将名为linux的符...
  • wh8_2011
  • wh8_2011
  • 2015年10月24日 11:10
  • 1231

Gentoo HOWTO ATI Drivers

Introduction This guide should help you install and configure the proprietry graphics drivers from A...
  • bekars
  • bekars
  • 2006年01月09日 22:54
  • 2333

LCD背光,功耗,电池总结

问题:屏半亮,出现闪屏  解决方案:背光驱动中使用spin_lock_irqsave和spin_unlock_irqrestore防止多cpu竞争。...
  • ldinvicible
  • ldinvicible
  • 2014年11月19日 10:34
  • 940

TI am335x系列(am3352)LCD驱动修改移植

1、/arch/arm/mach-omap2/board-am335xevm.c/lcdc_init(){得到LCD硬件参数struct da8xx_lcdc_platform_data} -> am...
  • tangdichao
  • tangdichao
  • 2015年11月05日 15:37
  • 1042

Linux framebuffer显示bmp图片

帧缓冲(framebuffer)是Linux为显示设备提供的一个接口,把显存抽象后的一种设备,他允许上层应用程序在图形模式下直接对显示缓冲区进行读写操作。  framebuffer是LCD对应的一种H...
  • XscKernel
  • XscKernel
  • 2015年11月23日 12:35
  • 4328

FC5-(linux)内核编译,新手艰辛的历程

  用LINUX开发也有段时间了,一直没对内核进行
  • zht_sir
  • zht_sir
  • 2007年08月02日 21:32
  • 2236

android lcd 背光控制流程 .

此文章是网上看到的,在MTK平台基础上的背光控制流程的分析。个人觉得写得比较详细,于是截取部分内容转载出来。 不过话说在前头,对于lcd而言,决定显示效果的有几个因素:pwm,gama(屏幕灰度...
  • u013951778
  • u013951778
  • 2016年08月17日 20:15
  • 626

高通LCD之背光

背光控制的两种方式: 1、LCD控制IC支持动态背光控制功能(CABC)通过解析图像的直方图动态改变输出PWM的占空比从而动态调节LCD的背光,在不改变图像显示效果的情况下降低功耗,PMIC根据CA...
  • liwei16611
  • liwei16611
  • 2016年11月06日 21:01
  • 1304
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:应用dts在am335x上移植LCD(二)
举报原因:
原因补充:

(最多只允许输入30个字)