diff options
| author | blogic <blogic@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2008-05-14 13:43:18 +0000 | 
|---|---|---|
| committer | blogic <blogic@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2008-05-14 13:43:18 +0000 | 
| commit | 11770b809e2f230ab4caf36ab0ea573a3efbd75d (patch) | |
| tree | b00c19ad87173dc1eda8d100f0c044d0479b684a | |
| parent | 8cbfca3491ce6a3944aff63c110649c518f9b5af (diff) | |
add proper led support to ifxmips
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@11137 3c298f89-4303-0410-b956-a3cf2f4a3e73
| -rw-r--r-- | target/linux/ifxmips/files/drivers/char/ifxmips_led.c | 93 | 
1 files changed, 30 insertions, 63 deletions
diff --git a/target/linux/ifxmips/files/drivers/char/ifxmips_led.c b/target/linux/ifxmips/files/drivers/char/ifxmips_led.c index 15c173b08..0e87fd2c4 100644 --- a/target/linux/ifxmips/files/drivers/char/ifxmips_led.c +++ b/target/linux/ifxmips/files/drivers/char/ifxmips_led.c @@ -31,8 +31,10 @@  #include <asm/ifxmips/ifxmips.h>  #include <asm/ifxmips/ifxmips_gpio.h>  #include <asm/ifxmips/ifxmips_pmu.h> +#include <linux/leds.h> +#include <linux/delay.h> -#define DRVNAME							"ifxmips_led"  +#define DRVNAME							"ifxmips_led"  #define IFXMIPS_LED_CLK_EDGE			IFXMIPS_LED_FALLING  //#define IFXMIPS_LED_CLK_EDGE			IFXMIPS_LED_RISING @@ -41,7 +43,12 @@  #define IFXMIPS_LED_GPIO_PORT			0 -static int ifxmips_led_major; +#define IFXMIPS_MAX_LED					24 + +struct ifxmips_led { +	struct led_classdev cdev; +	u8 bit; +};  void  ifxmips_led_set (unsigned int led) @@ -76,6 +83,17 @@ ifxmips_led_blink_clear (unsigned int led)  EXPORT_SYMBOL(ifxmips_led_blink_clear);  void +ifxmips_ledapi_set(struct led_classdev *led_cdev, enum led_brightness value) +{ +	struct ifxmips_led *led_dev = container_of(led_cdev, struct ifxmips_led, cdev); + +	if(value) +		ifxmips_led_set(1 << led_dev->bit); +	else +		ifxmips_led_clear(1 << led_dev->bit); +} + +void  ifxmips_led_setup_gpio (void)  {  	int i = 0; @@ -91,40 +109,9 @@ ifxmips_led_setup_gpio (void)  }  static int -led_ioctl (struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg) -{ -	int ret = -EINVAL; - -	switch ( cmd ) -	{ -	} - -	return ret; -} - -static int -led_open (struct inode *inode, struct file *file) -{ -	return 0; -} - -static int -led_release (struct inode *inode, struct file *file) -{ -	return 0; -} - -static struct file_operations ifxmips_led_fops = { -	.owner = THIS_MODULE, -	.ioctl = led_ioctl, -	.open = led_open, -	.release = led_release -}; - -static int  ifxmips_led_probe(struct platform_device *dev)  { -	int ret = 0; +	int i = 0;  	ifxmips_led_setup_gpio(); @@ -155,26 +142,23 @@ ifxmips_led_probe(struct platform_device *dev)  	/* per default, the leds are turned on */  	ifxmips_pmu_enable(IFXMIPS_PMU_PWDCR_LED); -	ifxmips_led_major = register_chrdev(0, "ifxmips_led", &ifxmips_led_fops); - -	if (!ifxmips_led_major) +	for(i = 0; i < IFXMIPS_MAX_LED; i++)  	{ -		printk("ifxmips_led: Error! Could not register device. %d\n", ifxmips_led_major); -		ret = -EINVAL; - -		goto out; +		struct ifxmips_led *tmp = kzalloc(sizeof(struct ifxmips_led), GFP_KERNEL); +		tmp->cdev.brightness_set = ifxmips_ledapi_set; +		tmp->cdev.name = kmalloc(sizeof("ifxmips:led:00"), GFP_KERNEL); +		sprintf(tmp->cdev.name, "ifxmips:led:%02d", i); +		tmp->cdev.default_trigger = NULL; +		tmp->bit = i; +		led_classdev_register(&dev->dev, &tmp->cdev);  	} -	printk(KERN_INFO "ifxmips_led: device successfully initialized #%d.\n", ifxmips_led_major); - -out: -	return ret; +	return 0;  }  static int  ifxmips_led_remove(struct platform_device *pdev)  { -	unregister_chrdev(ifxmips_led_major, "ifxmips_led");  	return 0;  } @@ -188,23 +172,6 @@ platform_driver ifxmips_led_driver = {  	},  }; -/* -Map for LED on reference board -	WLAN_READ     LED11   OUT1    15 -	WARNING       LED12   OUT2    14 -	FXS1_LINK     LED13   OUT3    13 -	FXS2_LINK     LED14   OUT4    12 -	FXO_ACT       LED15   OUT5    11 -	USB_LINK      LED16   OUT6    10 -	ADSL2_LINK    LED19   OUT7    9 -	BT_LINK       LED17   OUT8    8 -	SD_LINK       LED20   OUT9    7 -	ADSL2_TRAFFIC LED31   OUT16   0 -Map for hardware relay on reference board -	USB Power On          OUT11   5 -	RELAY                 OUT12   4 -*/ -  int __init  ifxmips_led_init (void)  {  | 
