diff options
Diffstat (limited to 'drivers/leds')
| -rw-r--r-- | drivers/leds/led-class.c | 21 | ||||
| -rw-r--r-- | drivers/leds/ledtrig-timer.c | 40 | 
2 files changed, 24 insertions, 37 deletions
diff --git a/drivers/leds/led-class.c b/drivers/leds/led-class.c index 5bff8439dc6..8ee92c81aec 100644 --- a/drivers/leds/led-class.c +++ b/drivers/leds/led-class.c @@ -44,23 +44,18 @@ static ssize_t led_brightness_store(struct device *dev,  		struct device_attribute *attr, const char *buf, size_t size)  {  	struct led_classdev *led_cdev = dev_get_drvdata(dev); +	unsigned long state;  	ssize_t ret = -EINVAL; -	char *after; -	unsigned long state = simple_strtoul(buf, &after, 10); -	size_t count = after - buf; -	if (isspace(*after)) -		count++; +	ret = kstrtoul(buf, 10, &state); +	if (ret) +		return ret; -	if (count == size) { -		ret = count; +	if (state == LED_OFF) +		led_trigger_remove(led_cdev); +	led_set_brightness(led_cdev, state); -		if (state == LED_OFF) -			led_trigger_remove(led_cdev); -		led_set_brightness(led_cdev, state); -	} - -	return ret; +	return size;  }  static ssize_t led_max_brightness_show(struct device *dev, diff --git a/drivers/leds/ledtrig-timer.c b/drivers/leds/ledtrig-timer.c index 328c64c0841..b32d5eae822 100644 --- a/drivers/leds/ledtrig-timer.c +++ b/drivers/leds/ledtrig-timer.c @@ -31,21 +31,17 @@ static ssize_t led_delay_on_store(struct device *dev,  		struct device_attribute *attr, const char *buf, size_t size)  {  	struct led_classdev *led_cdev = dev_get_drvdata(dev); -	int ret = -EINVAL; -	char *after; -	unsigned long state = simple_strtoul(buf, &after, 10); -	size_t count = after - buf; +	unsigned long state; +	ssize_t ret = -EINVAL; -	if (isspace(*after)) -		count++; +	ret = kstrtoul(buf, 10, &state); +	if (ret) +		return ret; -	if (count == size) { -		led_blink_set(led_cdev, &state, &led_cdev->blink_delay_off); -		led_cdev->blink_delay_on = state; -		ret = count; -	} +	led_blink_set(led_cdev, &state, &led_cdev->blink_delay_off); +	led_cdev->blink_delay_on = state; -	return ret; +	return size;  }  static ssize_t led_delay_off_show(struct device *dev, @@ -60,21 +56,17 @@ static ssize_t led_delay_off_store(struct device *dev,  		struct device_attribute *attr, const char *buf, size_t size)  {  	struct led_classdev *led_cdev = dev_get_drvdata(dev); -	int ret = -EINVAL; -	char *after; -	unsigned long state = simple_strtoul(buf, &after, 10); -	size_t count = after - buf; +	unsigned long state; +	ssize_t ret = -EINVAL; -	if (isspace(*after)) -		count++; +	ret = kstrtoul(buf, 10, &state); +	if (ret) +		return ret; -	if (count == size) { -		led_blink_set(led_cdev, &led_cdev->blink_delay_on, &state); -		led_cdev->blink_delay_off = state; -		ret = count; -	} +	led_blink_set(led_cdev, &led_cdev->blink_delay_on, &state); +	led_cdev->blink_delay_off = state; -	return ret; +	return size;  }  static DEVICE_ATTR(delay_on, 0644, led_delay_on_show, led_delay_on_store);  |