基於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.h
driver/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; //亮度值的掩碼,如0xff
void (*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_brightness subsystem@
bl_power device@ power/ uevent
重要的文件有兩個:
max_brightness :最大亮度值
brightness:當前實際的亮度值(內核中記錄的值)
可以使用 "cat /sys/class/backlight/XXX/brightness"查看當前背光亮度,使用 "echo _數字_ >> /sys/class/backlight/XXX/brightness"設置背光亮度。