diff options
| -rw-r--r-- | drivers/leds/Kconfig | 2 | ||||
| -rw-r--r-- | drivers/leds/led-class.c | 70 | ||||
| -rw-r--r-- | drivers/leds/led-core.c | 70 | 
3 files changed, 71 insertions, 71 deletions
diff --git a/drivers/leds/Kconfig b/drivers/leds/Kconfig index e2ac190df52..589ba02d65a 100644 --- a/drivers/leds/Kconfig +++ b/drivers/leds/Kconfig @@ -17,7 +17,7 @@ menuconfig NEW_LEDS  if NEW_LEDS  config LEDS_CLASS -	bool "LED Class Support" +	tristate "LED Class Support"  	help  	  This option enables the led sysfs class in /sys/class/leds.  You'll  	  need this to do anything useful with LEDs.  If unsure, say N. diff --git a/drivers/leds/led-class.c b/drivers/leds/led-class.c index 0c8739c448b..5bff8439dc6 100644 --- a/drivers/leds/led-class.c +++ b/drivers/leds/led-class.c @@ -110,50 +110,6 @@ static void led_timer_function(unsigned long data)  	mod_timer(&led_cdev->blink_timer, jiffies + msecs_to_jiffies(delay));  } -static void led_stop_software_blink(struct led_classdev *led_cdev) -{ -	/* deactivate previous settings */ -	del_timer_sync(&led_cdev->blink_timer); -	led_cdev->blink_delay_on = 0; -	led_cdev->blink_delay_off = 0; -} - -static void led_set_software_blink(struct led_classdev *led_cdev, -				   unsigned long delay_on, -				   unsigned long delay_off) -{ -	int current_brightness; - -	current_brightness = led_get_brightness(led_cdev); -	if (current_brightness) -		led_cdev->blink_brightness = current_brightness; -	if (!led_cdev->blink_brightness) -		led_cdev->blink_brightness = led_cdev->max_brightness; - -	if (led_get_trigger_data(led_cdev) && -	    delay_on == led_cdev->blink_delay_on && -	    delay_off == led_cdev->blink_delay_off) -		return; - -	led_stop_software_blink(led_cdev); - -	led_cdev->blink_delay_on = delay_on; -	led_cdev->blink_delay_off = delay_off; - -	/* never on - don't blink */ -	if (!delay_on) -		return; - -	/* never off - just set to brightness */ -	if (!delay_off) { -		led_set_brightness(led_cdev, led_cdev->blink_brightness); -		return; -	} - -	mod_timer(&led_cdev->blink_timer, jiffies + 1); -} - -  /**   * led_classdev_suspend - suspend an led_classdev.   * @led_cdev: the led_classdev to suspend. @@ -262,32 +218,6 @@ void led_classdev_unregister(struct led_classdev *led_cdev)  }  EXPORT_SYMBOL_GPL(led_classdev_unregister); -void led_blink_set(struct led_classdev *led_cdev, -		   unsigned long *delay_on, -		   unsigned long *delay_off) -{ -	del_timer_sync(&led_cdev->blink_timer); - -	if (led_cdev->blink_set && -	    !led_cdev->blink_set(led_cdev, delay_on, delay_off)) -		return; - -	/* blink with 1 Hz as default if nothing specified */ -	if (!*delay_on && !*delay_off) -		*delay_on = *delay_off = 500; - -	led_set_software_blink(led_cdev, *delay_on, *delay_off); -} -EXPORT_SYMBOL(led_blink_set); - -void led_brightness_set(struct led_classdev *led_cdev, -			enum led_brightness brightness) -{ -	led_stop_software_blink(led_cdev); -	led_cdev->brightness_set(led_cdev, brightness); -} -EXPORT_SYMBOL(led_brightness_set); -  static int __init leds_init(void)  {  	leds_class = class_create(THIS_MODULE, "leds"); diff --git a/drivers/leds/led-core.c b/drivers/leds/led-core.c index 016d19f5486..d6860043f6f 100644 --- a/drivers/leds/led-core.c +++ b/drivers/leds/led-core.c @@ -23,3 +23,73 @@ EXPORT_SYMBOL_GPL(leds_list_lock);  LIST_HEAD(leds_list);  EXPORT_SYMBOL_GPL(leds_list); + +static void led_stop_software_blink(struct led_classdev *led_cdev) +{ +	/* deactivate previous settings */ +	del_timer_sync(&led_cdev->blink_timer); +	led_cdev->blink_delay_on = 0; +	led_cdev->blink_delay_off = 0; +} + +static void led_set_software_blink(struct led_classdev *led_cdev, +				   unsigned long delay_on, +				   unsigned long delay_off) +{ +	int current_brightness; + +	current_brightness = led_get_brightness(led_cdev); +	if (current_brightness) +		led_cdev->blink_brightness = current_brightness; +	if (!led_cdev->blink_brightness) +		led_cdev->blink_brightness = led_cdev->max_brightness; + +	if (led_get_trigger_data(led_cdev) && +	    delay_on == led_cdev->blink_delay_on && +	    delay_off == led_cdev->blink_delay_off) +		return; + +	led_stop_software_blink(led_cdev); + +	led_cdev->blink_delay_on = delay_on; +	led_cdev->blink_delay_off = delay_off; + +	/* never on - don't blink */ +	if (!delay_on) +		return; + +	/* never off - just set to brightness */ +	if (!delay_off) { +		led_set_brightness(led_cdev, led_cdev->blink_brightness); +		return; +	} + +	mod_timer(&led_cdev->blink_timer, jiffies + 1); +} + + +void led_blink_set(struct led_classdev *led_cdev, +		   unsigned long *delay_on, +		   unsigned long *delay_off) +{ +	del_timer_sync(&led_cdev->blink_timer); + +	if (led_cdev->blink_set && +	    !led_cdev->blink_set(led_cdev, delay_on, delay_off)) +		return; + +	/* blink with 1 Hz as default if nothing specified */ +	if (!*delay_on && !*delay_off) +		*delay_on = *delay_off = 500; + +	led_set_software_blink(led_cdev, *delay_on, *delay_off); +} +EXPORT_SYMBOL(led_blink_set); + +void led_brightness_set(struct led_classdev *led_cdev, +			enum led_brightness brightness) +{ +	led_stop_software_blink(led_cdev); +	led_cdev->brightness_set(led_cdev, brightness); +} +EXPORT_SYMBOL(led_brightness_set);  |