From: Andrew Morton Cc: Richard Purdie Cc: Russell King Signed-off-by: Andrew Morton --- drivers/leds/ledtrig-timer.c | 35 +++++++++++++++++++-------------- 1 files changed, 21 insertions(+), 14 deletions(-) diff -puN drivers/leds/ledtrig-timer.c~led-add-led-timer-trigger-tidy drivers/leds/ledtrig-timer.c --- devel/drivers/leds/ledtrig-timer.c~led-add-led-timer-trigger-tidy 2006-02-06 23:28:52.000000000 -0800 +++ devel-akpm/drivers/leds/ledtrig-timer.c 2006-02-06 23:28:52.000000000 -0800 @@ -24,10 +24,10 @@ #include "leds.h" struct timer_trig_data { - unsigned long duty; /* duty cycle, as a percentage */ - unsigned long frequency; /* frequency of blinking, in Hz */ - unsigned long delay_on; /* milliseconds on */ - unsigned long delay_off; /* milliseconds off */ + unsigned long duty; /* duty cycle, as a percentage */ + unsigned long frequency; /* frequency of blinking, in Hz */ + unsigned long delay_on; /* milliseconds on */ + unsigned long delay_off; /* milliseconds off */ struct timer_list timer; }; @@ -58,7 +58,8 @@ static void led_timer_function(unsigned } /* led_cdev write lock needs to be held */ -static int led_timer_setdata(struct led_classdev *led_cdev, unsigned long duty, unsigned long frequency) +static int led_timer_setdata(struct led_classdev *led_cdev, unsigned long duty, + unsigned long frequency) { struct timer_trig_data *timer_data = led_cdev->trigger_data; @@ -72,7 +73,7 @@ static int led_timer_setdata(struct led_ timer_data->frequency = frequency; if (frequency != 0) { timer_data->delay_on = duty * 1000 / 50 / frequency / 2; - timer_data->delay_off = (100 - duty) * 1000 / 50 / frequency / 2; + timer_data->delay_off = (100 - duty)*1000 / 50 / frequency / 2; } mod_timer(&timer_data->timer, jiffies + 1); @@ -93,7 +94,8 @@ static ssize_t led_duty_show(struct clas return strlen(buf) + 1; } -static ssize_t led_duty_store(struct class_device *dev, const char *buf, size_t size) +static ssize_t led_duty_store(struct class_device *dev, const char *buf, + size_t size) { struct led_classdev *led_cdev = dev->class_data; struct timer_trig_data *timer_data; @@ -113,7 +115,6 @@ static ssize_t led_duty_store(struct cla return ret; } - static ssize_t led_frequency_show(struct class_device *dev, char *buf) { struct led_classdev *led_cdev = dev->class_data; @@ -127,14 +128,15 @@ static ssize_t led_frequency_show(struct return strlen(buf) + 1; } -static ssize_t led_frequency_store(struct class_device *dev, const char *buf, size_t size) +static ssize_t led_frequency_store(struct class_device *dev, const char *buf, + size_t size) { struct led_classdev *led_cdev = dev->class_data; struct timer_trig_data *timer_data; int ret = -EINVAL; char *after; - unsigned long state = simple_strtoul(buf, &after, 10); + if (after - buf > 0) { write_lock(&led_cdev->lock); timer_data = led_cdev->trigger_data; @@ -148,7 +150,8 @@ static ssize_t led_frequency_store(struc } static CLASS_DEVICE_ATTR(duty, 0644, led_duty_show, led_duty_store); -static CLASS_DEVICE_ATTR(frequency, 0644, led_frequency_show, led_frequency_store); +static CLASS_DEVICE_ATTR(frequency, 0644, led_frequency_show, + led_frequency_store); static void timer_trig_activate(struct led_classdev *led_cdev) { @@ -167,15 +170,19 @@ static void timer_trig_activate(struct l timer_data->duty = 50; class_device_create_file(led_cdev->class_dev, &class_device_attr_duty); - class_device_create_file(led_cdev->class_dev, &class_device_attr_frequency); + class_device_create_file(led_cdev->class_dev, + &class_device_attr_frequency); } static void timer_trig_deactivate(struct led_classdev *led_cdev) { struct timer_trig_data *timer_data = led_cdev->trigger_data; + if (timer_data) { - class_device_remove_file(led_cdev->class_dev, &class_device_attr_duty); - class_device_remove_file(led_cdev->class_dev, &class_device_attr_frequency); + class_device_remove_file(led_cdev->class_dev, + &class_device_attr_duty); + class_device_remove_file(led_cdev->class_dev, + &class_device_attr_frequency); del_timer_sync(&timer_data->timer); kfree(timer_data); } _