文档介绍:IMX233下的LCD背光设备原理
       第一次做驱动开发,开发前期阅读了不少驱动开发相关的书籍和文章,整体的驱动开发思路分成三个部分:设备驱动原理、设备驱动框架和设备驱动硬件相关。下文主要讲述背光设备的原理,后面两部分将在后续的文章中做详细的介绍。
       本次背光驱动开发对应的是IMX233下LCD背光灯设备,主要由三个部分组成:PWM、RT9284B15PJ6芯片和LCD背光灯。PWM(Pulse-Width Modulator,脉冲宽度调制)是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。RT9284B15PJ6芯片是一个高效高度集成的LED驱动器,相当于一个LED开关。LCD背光灯电路原理图如图一,LCD背光灯连接到RT9284B15PJ6芯片的两个引脚,而芯片的其中一个引脚连接到PWM。我们主要通过PWM的相关寄存器来产生不同效果的波形从而间接控制背光灯的亮度,所以下面我们会主要介绍下PWM。
图一 LCD背光灯电路图
         脉冲宽度调制(PWM)是利用微处理器的数字输出来对模拟电路进行控制,简而言之,PWM是一种对模拟信号电平进行数字编码的方法,这种通过以数字方式控制模拟电路的方法,可以大幅度降低系统的成本和功耗,所以广泛应用在从测量、通信到功率控制与变换的许多领域中。
         在一个连接有电池(电压5V)、白炽灯泡和开关的简单电路当中,如果开关闭合50ms,灯泡将得到5V的电压,接着将开关断开50ms,接着灯泡将得到0V的电压。如果在1分钟内,将上述的过程重复10次,灯泡将会被点亮,,这种实验情况下,占空比为50%,调制频率为10Hz。图二是两种不同的PWM信号以及其对应的不同的模拟信号值,电压为5V,占空比分别为10%和50%,。
图二两种不同的PWM信号和对应模拟信号
图三电路图
      图三为RT9284B15PJ6芯片的电路图,我们关心的是EN引脚。它的输入是PWM信号,从而芯片能控制LED输出与PWM信号相对应的亮度。在做背光驱动开发的时候涉及到硬件相关的部分主要是与LCD背光灯相对应的PWM寄存器,后面将做详细介绍。
IMX233下的LCD背光设备的驱动框架
         本文分成两个部分,先对LCD背光设备的驱动开发进行整体的了解,把握其中重点的部分,为后面的驱动开发奠定理论的基础,然后就是对背光驱动的框架进行下分析。
背光设备驱动开发概述
         要想了解驱动的开发,必须先了解Linux的sysfs文件系统。Linux ,随着技术的不断进步,系统的拓扑结构越来越复杂,对智能电源管理、热插拔等支持要求也越来越高,。为适应这种形势的需要,。
图一 LInux设备模型
         Linux 内核引入了Sysfs文件系统,Sysfs文件系统是一个类似于proc文件系统的特殊文件系统,用于将系统中的设备组织成层次结构,并向用户模式程序提供详细的内核数据结构信息。其顶层目录主要有:block、devices、bus、drivers、class、power和firmware等。其中:block目录包含所有的块设备;devices目录包含系统所有的设备,并根据设备挂接的总线类型组织成层次结构;bus目录包含系统中所有的总线类型;drivers目录包括内核中所有已注册的设备驱动程序;class目录包含系统中的设备类型(如网卡设备,声卡设备等)。在/sys/bus的pci目录下又会再分出drivers和devices目录,而devices目录中的文件是对/sys/devices目录中文件的符号链接。同样的,/sys/class目录下包含许多对/sys/devices下文件的链接,如图一,、类、设备和驱动的层级关系,也符合LINUX 。
         当前多开发的背光设备文件对应于/sys/class/backlight/目录下的文件。前面已将说过,在/sys/class/目录下的文件对应的都是系统中对应的不同设备类型,/sys/class/backlight就是注册的背光设备类型,而在/sys/class/backlight/目录下的文件就是所注册的背光设备。对于背光设备类型的注册一般系统都完成了,代码如下:
static struct class *backlight_class;
static int __init backligh