Some PWM drivers enable the clock of the PWM peripheral in pwm_enable(). Hence, for these drivers, a call to pwm_config() does not have any effect before pwm_enable() has been called. This patch fixes the PWM users to make sure that they call pwm_enable() before pwm_config(). This fixes the first setting of brightness through sysfs that had no effect with leds-pwm and the i.MX PWM driver. Cc: Thierry Reding <thierry.reding@xxxxxxxxxxxxxxxxx> Cc: <linux-kernel@xxxxxxxxxxxxxxx> Cc: Sascha Hauer <kernel@xxxxxxxxxxxxxx> Cc: <linux-arm-kernel@xxxxxxxxxxxxxxxxxxx> Cc: Dmitry Torokhov <dmitry.torokhov@xxxxxxxxx> Cc: <linux-input@xxxxxxxxxxxxxxx> Cc: Bryan Wu <bryan.wu@xxxxxxxxxxxxx> Cc: Richard Purdie <rpurdie@xxxxxxxxx> Cc: <linux-leds@xxxxxxxxxxxxxxx> Cc: Florian Tobias Schandinat <FlorianSchandinat@xxxxxx> Cc: <linux-fbdev@xxxxxxxxxxxxxxx> Cc: Benoît Thébaudeau <benoit.thebaudeau@xxxxxxxxxxxx> Signed-off-by: Benoît Thébaudeau <benoit.thebaudeau@xxxxxxxxxxxx> --- .../drivers/input/misc/pwm-beeper.c | 6 +++--- .../drivers/leds/leds-pwm.c | 2 +- .../drivers/video/backlight/pwm_bl.c | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git linux-next-c94456b.orig/drivers/input/misc/pwm-beeper.c linux-next-c94456b/drivers/input/misc/pwm-beeper.c index fc84c8a..97d322b 100644 --- linux-next-c94456b.orig/drivers/input/misc/pwm-beeper.c +++ linux-next-c94456b/drivers/input/misc/pwm-beeper.c @@ -53,10 +53,10 @@ static int pwm_beeper_event(struct input_dev *input, pwm_disable(beeper->pwm); } else { period = HZ_TO_NANOSECONDS(value); - ret = pwm_config(beeper->pwm, period / 2, period); + ret = pwm_enable(beeper->pwm); if (ret) return ret; - ret = pwm_enable(beeper->pwm); + ret = pwm_config(beeper->pwm, period / 2, period); if (ret) return ret; beeper->period = period; @@ -156,8 +156,8 @@ static int pwm_beeper_resume(struct device *dev) struct pwm_beeper *beeper = dev_get_drvdata(dev); if (beeper->period) { - pwm_config(beeper->pwm, beeper->period / 2, beeper->period); pwm_enable(beeper->pwm); + pwm_config(beeper->pwm, beeper->period / 2, beeper->period); } return 0; diff --git linux-next-c94456b.orig/drivers/leds/leds-pwm.c linux-next-c94456b/drivers/leds/leds-pwm.c index f2e44c7..c2e0c22 100644 --- linux-next-c94456b.orig/drivers/leds/leds-pwm.c +++ linux-next-c94456b/drivers/leds/leds-pwm.c @@ -42,8 +42,8 @@ static void led_pwm_set(struct led_classdev *led_cdev, 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); } } diff --git linux-next-c94456b.orig/drivers/video/backlight/pwm_bl.c linux-next-c94456b/drivers/video/backlight/pwm_bl.c index 995f016..a4bb95c 100644 --- linux-next-c94456b.orig/drivers/video/backlight/pwm_bl.c +++ linux-next-c94456b/drivers/video/backlight/pwm_bl.c @@ -65,8 +65,8 @@ static int pwm_backlight_update_status(struct backlight_device *bl) duty_cycle = pb->lth_brightness + (duty_cycle * (pb->period - pb->lth_brightness) / max); - pwm_config(pb->pwm, duty_cycle, pb->period); pwm_enable(pb->pwm); + pwm_config(pb->pwm, duty_cycle, pb->period); } if (pb->notify_after) -- To unsubscribe from this list: send the line "unsubscribe linux-input" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html