On Sat, 11 Oct 2014, Vladimir Zapolskiy wrote: > If PWM device is requested by means of legacy API pwm_request(), its > resources are not freed on module unbind, which may cause an oops on > access, e.g. by reading /sys/kernel/debug/pwm. > > Reported-by: Dmitry Eremin-Solenikov <dmitry_eremin@xxxxxxxxxx> > Signed-off-by: Vladimir Zapolskiy <vladimir_zapolskiy@xxxxxxxxxx> > --- > drivers/video/backlight/pwm_bl.c | 4 ++++ > 1 file changed, 4 insertions(+) Applied with Thierry's Ack. > diff --git a/drivers/video/backlight/pwm_bl.c b/drivers/video/backlight/pwm_bl.c > index dd7aaf7..40770dd 100644 > --- a/drivers/video/backlight/pwm_bl.c > +++ b/drivers/video/backlight/pwm_bl.c > @@ -34,6 +34,7 @@ struct pwm_bl_data { > struct regulator *power_supply; > struct gpio_desc *enable_gpio; > unsigned int scale; > + bool legacy; > int (*notify)(struct device *, > int brightness); > void (*notify_after)(struct device *, > @@ -274,6 +275,7 @@ static int pwm_backlight_probe(struct platform_device *pdev) > pb->pwm = devm_pwm_get(&pdev->dev, NULL); > if (IS_ERR(pb->pwm) && !pdev->dev.of_node) { > dev_err(&pdev->dev, "unable to request PWM, trying legacy API\n"); > + pb->legacy = true; > pb->pwm = pwm_request(data->pwm_id, "pwm-backlight"); > } > > @@ -339,6 +341,8 @@ static int pwm_backlight_remove(struct platform_device *pdev) > > if (pb->exit) > pb->exit(&pdev->dev); > + if (pb->legacy) > + pwm_free(pb->pwm); > > return 0; > } -- Lee Jones Linaro STMicroelectronics Landing Team Lead Linaro.org │ Open source software for ARM SoCs Follow Linaro: Facebook | Twitter | Blog -- To unsubscribe from this list: send the line "unsubscribe stable" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html