在内核中添加背光驱动

gedit drivers/video/mini2440_backlight.c
 #include
 #include
 #include
 #include
 #include
 #include
 #include
 #include
 #include
 #include
 #include
 #include
 #include
 #include
 #include
 #include
 #include
 #include

 #undef DEBUG
 #ifdef DEBUG
 #define DPRINTK(x...) {printk(__FUNCTION__"(%d): ",__LINE__);printk(##x);}
 #else
 #define DPRINTK(x...) (void)(0)
 #endif

 #define DEVICE_NAME "backlight"
 static unsigned int bl_state;

 static inline void set_bl(int state)
 {
       bl_state = !!state;
       s3c2410_gpio_setpin(S3C2410_GPB(1), bl_state);
 }

 static inline unsigned int get_bl(void)
 {
       return bl_state;
 }

 static ssize_t dev_write(struct file *file, const char *buffer, size_t count, loff_t * ppos)
 {
       unsigned char ch;
       int ret;
       if (count == 0) {
      return count;
        }
       ret = copy_from_user(&ch, buffer, sizeof ch) ? -EFAULT : 0;
       if (ret) {
      return ret;
        }
       ch &= 0x01;
  set_bl(ch);
  return count;
 }

 static ssize_t dev_read(struct file *filp, char *buffer, size_t count, loff_t *ppos)
 {
       int ret;
       unsigned char str[] = {'0', '1' };
       if (count == 0) {
      return 0;
        }
       ret = copy_to_user(buffer, str + get_bl(), sizeof(unsigned char) ) ? -EFAULT : 0;
       if (ret) {
      return ret;
        }
       return sizeof(unsigned char);
 }

 static struct file_operations dev_fops = {
       owner:  THIS_MODULE,
       read:  dev_read,
       write: dev_write,
 };

 static struct miscdevice misc = {
       .minor = MISC_DYNAMIC_MINOR,
       .name = DEVICE_NAME,
       .fops = &dev_fops,
 };

 static int __init dev_init(void)
 {
    int ret;
    ret = misc_register(&misc);
    printk (DEVICE_NAME"\tinitialized\n");
    s3c2410_gpio_cfgpin(S3C2410_GPB(1), S3C2410_GPIO_OUTPUT);
    set_bl(1);
    return ret;
 }

 static void __exit dev_exit(void)
 {
       misc_deregister(&misc);
 }

 module_init(dev_init);
 module_exit(dev_exit);
 MODULE_LICENSE("GPL");
 MODULE_AUTHOR("FriendlyARM Inc.");
保存退出
 
gedit drivers/video/Kconfig
 在1929行下添加
 config BACKLIGHT_MINI2440
      tristate "Backlight support for mini2440 from FriendlyARM"
      depends on MACH_MINI2440 && FB_S3C2410
      help
        backlight driver for MINI2440 from FriendlyARM

gedit drivers/video/Makefile
 在最后一行添加
 obj-$(CONFIG_BACKLIGHT_MINI2440) += mini2440_backlight.o

make menuconfig
Device Drivers --->
   Graphics support --->
       <*> Support for frame buffer devices --->
      <*> Backlight support for mini2440 from FriendlyARM

make zImage
下载,启动系统
ls /dev 
 就会看见有backlight设备
在命令行种输入
 echo 0 > /dev/backlight 可以关闭 LCD 背光
 echo 1 > /dev/backlight 可以打开 LCD 背光

你可能感兴趣的:(linux)