From 65c8a35800bcd61ee5287a4c723380cae7a1d105 Mon Sep 17 00:00:00 2001 From: Jun Yan Date: Thu, 25 Jul 2013 13:35:27 -0700 Subject: driver: led: Avoid calling pwm_disable and pwm_enable These two routines use semaphore to protect pwm resource. However they can be called via led timer ISR, thus causing linux BUG. Remove the call to these two functions and use pwm_config instead Bug 1333079 Change-Id: I6db788218f74c030956272ee0fcb9c7ec8a0652f Signed-off-by: Jun Yan Reviewed-on: http://git-master/r/253619 Reviewed-by: Automatic_Commit_Validation_User Reviewed-by: Tao Xie Reviewed-by: Anshul Jain (SW) --- drivers/leds/leds-pwm.c | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/drivers/leds/leds-pwm.c b/drivers/leds/leds-pwm.c index 2733ddbf4dda..c2cd410debf9 100644 --- a/drivers/leds/leds-pwm.c +++ b/drivers/leds/leds-pwm.c @@ -41,14 +41,7 @@ static void led_pwm_set(struct led_classdev *led_cdev, container_of(led_cdev, struct led_pwm_data, cdev); unsigned int max = led_dat->cdev.max_brightness; unsigned int period = led_dat->period; - - if (brightness == 0) { - pwm_config(led_dat->pwm, 0, period); - pwm_disable(led_dat->pwm); - } else { - pwm_config(led_dat->pwm, brightness * period / max, period); - pwm_enable(led_dat->pwm); - } + pwm_config(led_dat->pwm, brightness * period / max, period); } static void led_pwm_enable(struct led_classdev *led_cdev, @@ -125,6 +118,8 @@ static int led_pwm_probe(struct platform_device *pdev) ret = gpio_direction_output(pdata->OE_gpio, 1); if (ret) pr_err("OE gpio set output failed: %d", ret); + pwm_enable(led_dat->pwm); + return 0; err: -- cgit v1.2.3