diff options
| -rw-r--r-- | target/linux/adm5120-2.6/files/drivers/char/adm5120_gpio.c | 56 | 
1 files changed, 25 insertions, 31 deletions
| diff --git a/target/linux/adm5120-2.6/files/drivers/char/adm5120_gpio.c b/target/linux/adm5120-2.6/files/drivers/char/adm5120_gpio.c index 6fccfb029..090c53a25 100644 --- a/target/linux/adm5120-2.6/files/drivers/char/adm5120_gpio.c +++ b/target/linux/adm5120-2.6/files/drivers/char/adm5120_gpio.c @@ -2,57 +2,51 @@   *	ADM5120 LED (GPIO) driver   *   *	Copyright (C) Jeroen Vreeken (pe1rxq@amsat.org), 2005 + *	Copyright (C) OpenWrt.org, Florian Fainelli <florian@openwrt.org>, 2007 + * + *	This program is free software; you can redistribute it and/or modify + *	it under the terms of the GNU General Public License version 2 as + *	published by the Free Software Foundation.   */ -#include <linux/autoconf.h> -#include <linux/module.h>  #include <linux/kernel.h> -#include <linux/miscdevice.h> -#include <linux/fs.h> +#include <linux/init.h> +#include <linux/platform_device.h> +#include <linux/leds.h> -#define LED_MINOR 151  #define GPIO_IO        ((unsigned long *)0xb20000b8) -static ssize_t adm5120_led_write(struct file *file, const char __user *data, -	size_t len, loff_t *ppos) +static void adm5120_led_set(struct led_classdev *led_cdev, enum led_brightness brightness)  { -	unsigned char val; - -	if (!len || get_user(val, data)) -		return -EFAULT; -	*GPIO_IO=(*GPIO_IO & 0x00ffffff) | (val<<24); -	return 1; +	if (brightness) +		*GPIO_IO=(*GPIO_IO & 0x00ffffff) | (brightness << 24); +	else +		*GPIO_IO=(*GPIO_IO & 0x00ffffff) | (0 << 24);  } -static struct file_operations adm5120_led_fops = { -	.owner	= THIS_MODULE, -	.write	= adm5120_led_write, -}; - -static struct miscdevice adm5120_led_device = { -	LED_MINOR, -	"led", -	&adm5120_led_fops, +static struct led_classdev adm5120_gpio_led = { +	.name 		= "adm5120:led", +	.brightness_set = adm5120_led_set,  };  static int __init adm5120_led_init(void)  { -	printk(KERN_INFO "ADM5120 LED & GPIO driver\n"); -	if (misc_register(&adm5120_led_device)) { -		printk(KERN_WARNING "Couldn't register device %d\n", LED_MINOR); -		return -EBUSY; -	} -	return 0; +	int ret = led_classdev_register(NULL, &adm5120_gpio_led); + +	if (ret < 0) +		printk(KERN_WARNING "adm5120: unable to register LED device\n"); + +	return ret;  }  static void __exit adm5120_led_exit(void)  { -	misc_deregister(&adm5120_led_device); +	led_classdev_unregister(&adm5120_gpio_led);  }  module_init(adm5120_led_init);  module_exit(adm5120_led_exit); -MODULE_DESCRIPTION("ADM5120 LED and GPIO driver"); -MODULE_AUTHOR("Jeroen Vreeken"); +MODULE_DESCRIPTION("ADM5120 LED driver"); +MODULE_AUTHOR("Jeroen Vreeken, OpenWrt.org");  MODULE_LICENSE("GPL"); | 
