基于Linux 3.18.y
概述
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.hdriver/video/backlight/genrtic_bl.c/* 通用的背光控制代码,driver已经注册好了,只需要注册device就能使用 */struct generic_bl_info {const char *name;//名字字符指针,这个名字会出现在/sys/class/backlight/中int max_intensity; //最大亮度int default_intensity;//默认亮度int limit_mask; //亮度值的掩码,如0xffvoid (*set_bl_intensity)(int intensity);//设置亮度的函数void (*kick_battery)(void);//设置亮度之后调用的函数,与电池相关,可以不定义};
如何使用背光子系统
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,},};platform_device_register(&eukrea_mbimx27_bl_dev);
注册 eukrea_mbimx27_bl_dev 之后就可以在/sys/class/backlight/eukrea_mbimx27-bl/下看到背光的属性文件了。
sys文件属性说明
背光子系统的文件在/sys/class/backlight/XXX/中,其中XXX是背光设备的名字,这个名字是注册的时候指定的.
/sys/class/backlight/XXX/下的属性文件有:actual_brightness brightness max_brightnesssubsystem@bl_power device@ power/ uevent重要的文件有两个:max_brightness :最大亮度值brightness:当前实际的亮度值(内核中记录的值)可以使用 "cat /sys/class/backlight/XXX/brightness"查看当前背光亮度,使用 "echo _数字_ >> /sys/class/backlight/XXX/brightness"设置背光亮度。