[PATCH 1/3] led-class: change back LEDS_CLASS to tristate instead of bool
From: Bryan Wu <hidden>
Date: 2012-03-12 02:32:48
Also in:
lkml
On Sun, Mar 11, 2012 at 9:13 PM, Richard Purdie [off-list ref] wrote:
On Thu, 2012-03-08 at 17:11 +0800, Bryan Wu wrote:quoted
After moving some core functions to led-core.c, led-class.c can be built as module again. Signed-off-by: Bryan Wu <redacted>I'd prefer to have less code being required in led-core.c but this is better than many of the alternatives. I'm happy to see it becoming modular again, thanks! Acked-by: Richard Purdie <redacted>
Great, Thank you very much. -Bryan
quoted
--- ?drivers/leds/Kconfig ? ? | ? ?2 +- ?drivers/leds/led-class.c | ? 70 ---------------------------------------------- ?drivers/leds/led-core.c ?| ? 70 ++++++++++++++++++++++++++++++++++++++++++++++ ?3 files changed, 71 insertions(+), 71 deletions(-)diff --git a/drivers/leds/Kconfig b/drivers/leds/Kconfig index 9ca28fc..3f17f0d 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 0c8739c..5bff843 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 016d19f..d686004 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);
-- Bryan Wu [off-list ref] Kernel Developer ? ?+86.138-1617-6545 Mobile Canonical Ltd. ? ? ?www.canonical.com Ubuntu - Linux for human beings | www.ubuntu.com