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

转载 2015年11月17日 17:36:34

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

  (1)初步分析

  由于TQ335x使用的芯片是AM335x,故仍然可以参考am335x-evm.dts。当然,am335x-evmsk.dts、am335x-beagbone.dts都可以。本文以am335x-evm.dts为例。大体上浏览下DTS文件,可以发现两个醒目的节点:一个是panel,一个是backlight。接下来我们逐个分析。

  (2)panel节点信息分析及配置

  从panel节点可以获得如下信息:

  1. 匹配内核驱动的关键词是:"ti,tilcdc,panel",可以通过这个关键字找到相应的驱动。

  2. 管脚配置在节点lcd_pins_s0内

  3. panel-info中可以配置LCD的硬件信息,如LCD的分辨率等

  4. display-times中记录了LCD刷屏的相关时序。

  其中,panel-info和display-times需要去LCD手册中查找,管脚配置需要根据AM335x的芯片手册、数据手册及TQ335x的原理图确定,驱动则需要去内核的driver目录下查找。下面,我一一解决上述几个问题:

  首先是设置panel-info和display-times。我的TQ335x是用的我调试TQ210时使用的触摸屏,型号是TN92,这个屏是800*480的分辨率,因此,panel-info与evm开发板的配置是相同的,可以不做任何修改。但是,不同屏幕的display-times一般是不相同的,因此,需要查阅触摸屏的手册来确认display-times。

  TN92的水平扫描时序如下表:

  

 

  垂直扫描时序如下图:

  

 

  但是,如果对LCD各参数不怎么熟悉的话,很难建立这两个表与DTS中display-times的关系,这时应该去查阅一下linux内核的文档和芯片手册。在内核文档:”Documentation/devicetree/bindings/video/display-timing.txt"有相关的记载,该文件中有形象的描述,具体如下:

  +----------+-------------------------------------+----------+-------+

  | | ↑ | | |

  | | |vback_porch | | |

  | | ↓ | | |

  +----------#######################################----------+-------+

  | # ↑ # | |

  | # | # | |

  | hback # | # hfront | hsync |

  | porch # | hactive # porch | len |

  |<-------->#<-------+--------------------------->#<-------->|<----->|

  | # | # | |

  | # |vactive # | |

  | # | # | |

  | # ↓ # | |

  +----------#######################################----------+-------+

  | | ↑ | | |

  | | |vfront_porch | | |

  | | ↓ | | |

  +----------+-------------------------------------+----------+-------+

  | | ↑ | | |

  | | |vsync_len | | |

  | | ↓ | | |

  +----------+-------------------------------------+----------+-------+

  AM335x的技术参考手册中可以找到相关的寄存器解释,如下:

  

 

  综合这三份资料,很容易确定下LCD的屏的时序参数的范围(需要强调的是,上述参数不一定精确,还需要使用图片实机测下效果),经过多次实验,最终确定下了LCD的时序参数,详情如下:

  panel {

  compatible = "ti,tilcdc,panel";

  status = "okay";

  pinctrl-names = "default";

  pinctrl-0 = <&lcd_pins_s0>;

  panel-info {

  ac-bias = <255>;

  ac-bias-intrpt = <0>;

  dma-burst-sz = <16>;

  bpp = <32>;

  fdd = <0x80>;

  sync-edge = <0>;

  sync-ctrl = <1>;

  raster-order = <0>;

  fifo-th = <0>;

  };

  display-timings {

  800x480p62 {

  clock-frequency = <30000000>;

  hactive = <800>;

  vactive = <480>;

  hfront-porch = <214>;

  hback-porch = <40>;

  hsync-len = <4>;

  vback-porch = <20>;

  vfront-porch = <23>;

  vsync-len = <4>;

  hsync-active = <0>;

  vsync-active = <0>;

  };

  };

  };

  时序确定下来之后需要关注的就是管脚配置,由于am335x集成了LCD控制,该控制器与LCD的连接方式是通过GPIO管脚复用实现的,而evm开发板与TQ335x的LCD都接在了同一个LCD控制器上,因此,直接使用原有的管脚配置即可。这一点也可以通过阅读TQ335x的原理图确认,这里我就不再分析了。

  (3)backlight节点分析及配置

  从backlight节点中可以获得如下信息:

  1. 匹配内核驱动的关键词是"pwm-backlight"。

  2. 使用的ECAP0进行PWM输出。

  3. 有8个亮度等级。

  4. 默认的亮度等级是8,也就是最亮。

  了解以上信息后需要查阅TQ335x手册,弄清楚backlight控制管脚是如何连接的。通过分析TQ335x的原理图可知,TQ335x的背光控制也是使用PWM方式控制,且该引脚接到AM335x的ECAP2_IN_PWM2_OUT管脚上,而evm开发板是接在ECAP0_IN_PWM0_OUT管脚上的,因此,需要修改DTS配置才能正常使用TQ335x的背光功能。思路是将DTS中的背光配置由EACP0改为EACP2,下面是修改的步骤:

  Step1. 将backlight节点中&eacp0改为&eacp2。

  Step2. 将&epwmss0改为&epwmss2,并将该节点内的ecap0: ecap@48304100改成ecap0:ecap@48304100,然后将该节点中的&ecap0_pins改成&ecap2_pins。

  Step3. 将ecap0_pins节点改名为ecap2_pins,然后将pinctrl-single,pins内的内容改为:0x19c MUX_MODE4。

  最后修改后的DTS相关部分如下:

  backlight {

  compatible = "pwm-backlight";

  pwms = <&ecap2 0 50000 0>;

  brightness-levels = <0 51 53 56 62 75 101 152 255>;

  default-brightness-level = <8>;

  };

  &epwmss2 {

  status = "okay";

  ecap2: ecap@48304100 {

  status = "okay";

  pinctrl-names = "default";

  pinctrl-0 = <&ecap2_pins>;

  };

  };

  ecap2_pins: backlight_pins {

  pinctrl-single,pins = <

  0x19c MUX_MODE4 /* MCASP0_AHCLKR.eCAP2_in_PWM2_out MODE4 */

  >;

  };

  这样就完成了背光功能的DTS配置。

相关文章推荐

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

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

AM335x设备树DTS移值

============================================= 问题一:以前的Linux Kernel如何描述硬件,现在又如何描述呢? 在以前的内核版本中: 1)...

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

AM335x开发板   红色为注释了的   蓝色为添加上的   PATH 表示当前修改文件的路径   line 表示要修改的代码在当前文件的开始行   在原来的开发板上   修改 LCD ...

设备树(二)linux内核顶层am335x-evm.dts

摘自:http://blog.csdn.net/xiaojiezuo123/article/details/49890507 了解基本的dts知识之后,就可以为编写自己的dts文件了。For...

bring up LCD

一、kernel相关: 移植kernel之前需要准备好该panel的dtsi文件,因为这直接关系到屏能否快速被点亮,需要timing和上电命令序列。 kernel/arch/arm/boot/dt...

[IMX6Q]LCD参数匹配过程分析

Platform: IMX6Q OS: Android 4.4 本文只讨论lvds接口的是lcd参数匹配的过程,mipi dsi以及其他接口部分会有一点差异。 核心函数fb_...
  • dddxxxx
  • dddxxxx
  • 2016年10月29日 09:29
  • 1373

imx6sx-sdb.dtb imx6sx-sdb.dts 设备树 (d:\swwork\solo\linux-3.14.28\arch\arm\boot\dts)

/*  * Copyright (C) 2014-2015 Freescale Semiconductor, Inc.  *  * This program is free software; you...

基于tiny4412的Linux内核移植(支持device tree)(三)

转自:http://www.cnblogs.com/pengdonglin137/p/5146791.html 阅读目录(Content) 作者信息平台简介注意 一、设备树反...

基于framebuffer的驱动分析

基于framebuffer的驱动分析 framebuffer帧缓冲(简称fb)是linux内核中虚拟出的一个设备,是一个platform类型设备,设备文件位于/dev/fb* frameb...

设备树学习之(十二)LCD驱动

开发板:tiny4412SDK + S702 + 4GB Flash 要移植的内核版本:Linux-4.4.0 (支持device tree) u-boot版本:友善之臂自带的 U-Boo...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:应用dts在am335x上移植LCD(一)
举报原因:
原因补充:

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