|
LCD背光驱动基于PWM1(timer1),因为使用的是GPB1这个IO口来控制,由它输出的PWM来控制背光的亮暗程度。
内核中通用的驱动文件为:drivers/video/backlight/pwm_bl.c
调光原理:PWM输出的频率固定,改变PWM的占空比即可改变LCD背光的亮度
在mach-xc2440.c中添加LCD背光驱动的支持:
加入必要的头文件:
#include
#include
在xc2440_devices[ ]结构体中加入:
&xc2440_backlight_device,
构建LCD背光设备的platform_device结构体:
- /* LCD Backlight */
- static int xc2440_backlight_init(struct device *dev)
- {
- gpio_request(S3C2410_GPB(1), "Backlight");
- gpio_direction_output(S3C2410_GPB(1), 0);
- s3c_gpio_setpull(S3C2410_GPB(1), S3C_GPIO_PULL_NONE);
- s3c_gpio_cfgpin(S3C2410_GPB(1), S3C2410_GPB1_TOUT1);
- return 0;
- }
- static void xc2440_backlight_exit(struct device *dev)
- {
- gpio_direction_output(S3C2410_GPB(1), 1);
- }
- static struct platform_pwm_backlight_data xc2440_backlight_data = {
- .pwm_id = 1,
- .max_brightness = 100,
- .dft_brightness = 40,
- .pwm_period_ns = 800000,
- .init = xc2440_backlight_init,
- .exit = xc2440_backlight_exit,
- };
- static struct platform_device xc2440_backlight_device = {
- .name = "pwm-backlight",
- .dev = {
- .parent = &s3c_device_timer[1].dev,
- .platform_data = &xc2440_backlight_data,
- },
- .id = 1,
- };
说明:
platform_device的name是pwm-backlight,这个和driver中的name一致,dev的parent是s3c_device_timer[1],也就是上一节移植的PWM1设备
platform_data中max_brightness是最大背光亮度值,dft_brightness是初始值,pwm_period_ns是PWM的输出频率,这个要在driver中转成频率值
我这个配置中:背光调节范围是(0~100),初始值是40,频率是1KHz左右
在init函数中将GPB1管脚设置为TOUT1模式,在exit函数中禁止GPB1输出
查看drivers/video/backlight目录下的Kconifg文件,定义了pwm bl的配置:
- config BACKLIGHT_PWM
- tristate "Generic PWM based Backlight Driver"
- depends on HAVE_PWM
配置内核,支持LCD背光驱动:
- Device Drivers --->
- Graphics support --->
- [*] Backlight & LCD device support --->
- Lowlevel Backlight control
- Generic PWM based Backlight Driver
查看设备:
/sys/class/backlight/pwm-backlight.1/brightness
操作设备:
#cat /sys/class/backlight/pwm-backlight.1/max_brightness (查看背光最大值)
#echo 15 > /sys/class/backlight/pwm-backlight.1/brightness (设置背光亮度)
|
|
|