linux背光子系统(backlight)

来源:岁月联盟 编辑:exp 时间:2011-12-28

 

(linux2.6.34)

 

  概述

=====

linux的背光(backlight)子系统用于在/sys目录下提供用户空间控制LCD或者其他显示设备的背光亮度的接口。这里的亮度并不是亮和灭两个状态,可有很多个等级的亮度,便于用户空间根据节能、可视范围等需求调节背光的亮度。

 

相关代码

======

背光子系统的代码在/driver/video/backlight目录中。

其中重要的文件是:generic_bl.c  backlight.c  lcd.c

 

为了支持背光子系统需要在内核中使用以下配置:

Device Drives  --->

     Graphics Support --->

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

               <*>Platform LCD controls

               <*>Lowlevel Backlight controls

 

 

重要的数据结构

==========

include/linux/backlight.h

----------------------------

/* 单词解释:来自星际译王

<--- 简明英汉袖珍辞典--->

intensity

[in'tensiti]

n.强烈,剧烈,强度 亮度

*/

struct generic_bl_info {

     const char *name;                         //名字字符指针,这个名字会出现在/sys/class/backlight/中

     int max_intensity;                            //最大亮度

     int default_intensity;                         //默认亮度

     int limit_mask;                                  //亮度值的掩码,如0xff

     void (*set_bl_intensity)(int intensity);     //设置亮度的函数

     void (*kick_battery)(void);                    //设置亮度之后调用的函数,与电池相关,可以不定义

};

 

 

如何使用背光子系统

=================

这是一个例子

http://lxr.linux.no/linux+v3.1.6/arch/arm/mach-imx/eukrea_mbimx27-baseboard.c#L205 

static void eukrea_mbimx27_bl_set_intensity(int intensity)

{

     /*在这个函数中根据参数intensity的值设置背光,具体通过PWM还是其它手段,要根据硬件了*/

}

 

 static struct generic_bl_info eukrea_mbimx27_bl_info = {

        .name                      = "eukrea_mbimx27-bl",

        .max_intensity          = 0xff,

        .default_intensity      = 0xff,

        .set_bl_intensity       = eukrea_mbimx27_bl_set_intensity,

};

 

static struct platform_device eukrea_mbimx27_bl_dev = {

        .name                   = "generic-bl", //这个名字必须是"generic-bl"

        .id                          = 1,

        .dev = {

                .platform_data  = &eukrea_mbimx27_bl_info,

        },

};

注册eukrea_mbimx27_bl_dev 之后就可以在/sys/class/backlight/eukrea_mbimx27-bl/下看到背光的属性文件了。

 

sys文件属性说明

==============

背光子系统的文件在/sys/class/backlight/XXX/中,其中XXX是背光设备的名字,这个名字是注册的时候指定的.

 

/sys/class/backlight/XXX/下的属性文件有:

actual_brightness  brightness         max_brightness     subsystem@

bl_power           device@            power/             uevent

 

重要的文件有两个:

max_brightness :最大亮度值

brightness:当前实际的亮度值(内核中记录的值)

 

可以使用"cat /sys/class/backlight/XXX/brightness"查看当前背光亮度,使用"echo  _数字_  >>  /sys/class/backlight/XXX/brightness"设置背光亮度。

如:

[root@M3250 zhiyuan_backlight]# pwd

/sys/class/backlight/zhiyuan_backlight

[root@M3250 zhiyuan_backlight]# ls

actual_brightness  brightness         max_brightness     subsystem@

bl_power           device@            power/             uevent

[root@M3250 zhiyuan_backlight]# cat brightness

200

[root@M3250 zhiyuan_backlight]# echo 255 >> brightness

[root@M3250 zhiyuan_backlight]# cat brightness

255

[root@M3250 zhiyuan_backlight]# cat max_brightness

255

[root@M3250 zhiyuan_backlight]#

 

摘自 yuanlulu的博客