diff options
author | Vladimir Zapolskiy <vladimir_zapolskiy@mentor.com> | 2015-10-12 08:29:03 -0400 |
---|---|---|
committer | Lee Jones <lee.jones@linaro.org> | 2015-10-15 07:06:28 -0400 |
commit | dc881123aa1aeff02ce2dc94c2b810d37173aa90 (patch) | |
tree | e89785cb92f8cb8eb05b40f8d9ba977fa354e212 | |
parent | f85de2d9e24ee0b286ae54434f405d4a22f565f0 (diff) |
backlight: pwm: Reject legacy PWM request for device defined in DT
Platform PWM backlight data provided by board's device tree should be
complete enough to successfully request a pwm device using pwm_get()
API. This change fixes a bug, when an arbitrary (first found) PWM is
connected to a "pwm-backlight" compatible device, when explicit PWM
device reference is not given.
Documentation/devicetree/bindings/video/backlight/pwm-backlight.txt
already describes "pwms" as a required property, instead of blind
selection of a potentially wrong PWM reject legacy PWM device
registration request, leave legacy API only for non-dt cases.
Based on initial implementation done by Dmitry Eremin-Solenikov.
Reported-by: Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>
Signed-off-by: Vladimir Zapolskiy <vladimir_zapolskiy@mentor.com>
Acked-by: Thierry Reding <thierry.reding@gmail.com>
Acked-by: Nicolas Ferre <nicolas.ferre@atmel.com>
Tested-by: Robert Jarzmik <robert.jarzmik@free.fr>
Signed-off-by: Lee Jones <lee.jones@linaro.org>
-rw-r--r-- | drivers/video/backlight/pwm_bl.c | 19 |
1 files changed, 9 insertions, 10 deletions
diff --git a/drivers/video/backlight/pwm_bl.c b/drivers/video/backlight/pwm_bl.c index eff379b234cc..ae3c6b6fd5db 100644 --- a/drivers/video/backlight/pwm_bl.c +++ b/drivers/video/backlight/pwm_bl.c | |||
@@ -271,19 +271,18 @@ static int pwm_backlight_probe(struct platform_device *pdev) | |||
271 | } | 271 | } |
272 | 272 | ||
273 | pb->pwm = devm_pwm_get(&pdev->dev, NULL); | 273 | pb->pwm = devm_pwm_get(&pdev->dev, NULL); |
274 | if (IS_ERR(pb->pwm)) { | 274 | if (IS_ERR(pb->pwm) && PTR_ERR(pb->pwm) != -EPROBE_DEFER |
275 | ret = PTR_ERR(pb->pwm); | 275 | && !pdev->dev.of_node) { |
276 | if (ret == -EPROBE_DEFER) | ||
277 | goto err_alloc; | ||
278 | |||
279 | dev_err(&pdev->dev, "unable to request PWM, trying legacy API\n"); | 276 | dev_err(&pdev->dev, "unable to request PWM, trying legacy API\n"); |
280 | pb->legacy = true; | 277 | pb->legacy = true; |
281 | pb->pwm = pwm_request(data->pwm_id, "pwm-backlight"); | 278 | pb->pwm = pwm_request(data->pwm_id, "pwm-backlight"); |
282 | if (IS_ERR(pb->pwm)) { | 279 | } |
283 | dev_err(&pdev->dev, "unable to request legacy PWM\n"); | 280 | |
284 | ret = PTR_ERR(pb->pwm); | 281 | if (IS_ERR(pb->pwm)) { |
285 | goto err_alloc; | 282 | ret = PTR_ERR(pb->pwm); |
286 | } | 283 | if (ret != -EPROBE_DEFER) |
284 | dev_err(&pdev->dev, "unable to request PWM\n"); | ||
285 | goto err_alloc; | ||
287 | } | 286 | } |
288 | 287 | ||
289 | dev_dbg(&pdev->dev, "got pwm for backlight\n"); | 288 | dev_dbg(&pdev->dev, "got pwm for backlight\n"); |