基于S3C2440的Linux-3.6.6移植——LCD背光的控制
在我的开发板上,通过S3C2440的GPG4引脚可以控制LCD的背光,即置1时LCD点亮,清零时LCD关闭。 Linux系统把LCD背光定义成LED平台设备。在Mach-zhaocj2440.c文件内,它的定义为:static struct s3c24xx_led_platdata zhaocj2440_led_backlight_pdata = { .name
在我的开发板上,通过S3C2440的GPG4引脚可以控制LCD的背光,即置1时LCD点亮,清零时LCD关闭。
Linux系统把LCD背光定义成LED平台设备。在Mach-zhaocj2440.c文件内,它的定义为:
static struct s3c24xx_led_platdata zhaocj2440_led_backlight_pdata = {
.name = "backlight",
.gpio = S3C2410_GPG(4),
.def_trigger = "backlight",
};
static struct platform_device zhaocj2440_led_backlight= {
.name = "s3c24xx_led",
.id = 5,
.dev = {
.platform_data = &zhaocj2440_led_backlight_pdata,
},
};
如果要为系统添加控制LCD背光的功能,只需要在zhaocj2440_features_str数组内添加一个"b"字段(b表示背光)即可,即:
static char zhaocj2440_features_str[12]__initdata = "4tb";
系统通过zhaocj2440_parse_features函数,把zhaocj2440_features_str数组内给出的各个设备逐一放入到features结构中,然后再通过zhaocj2440_init函数中的下列语句把上述设备添加到平台总线上:
if (features.count) /* the optional features */
platform_add_devices(features.optional,features.count);
由于系统是把LCD背光看成是LED设备,因此它的平台驱动也和LED的平台驱动一样,即:
static struct platform_driver s3c24xx_led_driver = {
.probe = s3c24xx_led_probe,
.remove = s3c24xx_led_remove,
.driver = {
.name = "s3c24xx_led",
.owner = THIS_MODULE,
},
};
关于LED的驱动,我在前面的文章中比较详细的介绍过,这里就不再赘述。
还有一点需要注意的是,系统初始化时,对控制LED的引脚设置是低电平的,因此系统启动后LED是不亮的。同样的,控制背光的GPG4引脚默认也是低电平,所以启动系统的时候,LCD也是不亮的。这样的设置对LED没什么不妥,但对LCD就不适合了。因此我们要改变对背光引脚的默认设置,让它为高电平。为了实现上述功能,只需要在Leds-s3c24xx.c文件内(drivers/leds目录下)的s3c24xx_led_probe函数中的适当位置(大约在第107行附件)添加下列语句即可:
if(pdata->name == "backlight")
gpio_set_value(pdata->gpio,1);
下面我们写一段应用程序来控制LCD的背光:
/****************
****backlight.c****
*****************/
#include<stdint.h>
#include<string.h>
#include<fcntl.h>
#include<unistd.h>
#include<stdio.h>
#include<linux/input.h>
#include<unistd.h>
int main(int argc, char *argv[])
{
int fd;
fd =open("/sys/class/leds/backlight/brightness", O_RDWR);
if(fd<0)
{
printf("can not open file.\n");
return -1;
}
if(!strcmp(argv[1], "on"))
write(fd, “1”,1);
else if(!strcmp(argv[1], "off"))
write(fd, “0”, 1);
close(fd);
return 0;
}
把程序编译好后下载到temp目录下,运行:
[root@zhaocj /temp]# ./backlight on
打开背光,LCD可以显示
[root@zhaocj /temp]# ./backlight off
关闭背光,LCD不能显示
更多推荐
所有评论(0)