diff options
| author | Ezequiel Garcia <ezequiel@vanguardiasur.com.ar> | 2014-09-02 08:51:20 -0400 |
|---|---|---|
| committer | Dave Airlie <airlied@redhat.com> | 2014-09-16 20:55:10 -0400 |
| commit | 18c44db8cafe9bda4fcb51bfc05c1f1d7cefc44c (patch) | |
| tree | 11e9acff4f78b2edee93676925a52122460c5788 /drivers/gpu/drm/tilcdc/tilcdc_panel.c | |
| parent | 971645d1fd734b8098a5113d61ab9ea93ce83921 (diff) | |
drm/tilcdc: panel: Fix backlight devicetree support
The current backlight support is broken; the driver expects a backlight-class
in the panel devicetree node. Fix this by implementing it properly, getting
an optional backlight from a phandle.
This shouldn't cause any backward-compatibility DT issue because the current
implementation doesn't work and is not even documented.
Tested-by: Darren Etheridge <detheridge@ti.com>
Tested-by: Johannes Pointner <johannes.pointner@br-automation.com>
Signed-off-by: Ezequiel Garcia <ezequiel@vanguardiasur.com.ar>
Signed-off-by: Dave Airlie <airlied@redhat.com>
Diffstat (limited to 'drivers/gpu/drm/tilcdc/tilcdc_panel.c')
| -rw-r--r-- | drivers/gpu/drm/tilcdc/tilcdc_panel.c | 23 |
1 files changed, 18 insertions, 5 deletions
diff --git a/drivers/gpu/drm/tilcdc/tilcdc_panel.c b/drivers/gpu/drm/tilcdc/tilcdc_panel.c index c716c128ded2..3dcf08e4dc91 100644 --- a/drivers/gpu/drm/tilcdc/tilcdc_panel.c +++ b/drivers/gpu/drm/tilcdc/tilcdc_panel.c | |||
| @@ -342,7 +342,7 @@ static struct tilcdc_panel_info *of_get_panel_info(struct device_node *np) | |||
| 342 | 342 | ||
| 343 | static int panel_probe(struct platform_device *pdev) | 343 | static int panel_probe(struct platform_device *pdev) |
| 344 | { | 344 | { |
| 345 | struct device_node *node = pdev->dev.of_node; | 345 | struct device_node *bl_node, *node = pdev->dev.of_node; |
| 346 | struct panel_module *panel_mod; | 346 | struct panel_module *panel_mod; |
| 347 | struct tilcdc_module *mod; | 347 | struct tilcdc_module *mod; |
| 348 | struct pinctrl *pinctrl; | 348 | struct pinctrl *pinctrl; |
| @@ -358,6 +358,17 @@ static int panel_probe(struct platform_device *pdev) | |||
| 358 | if (!panel_mod) | 358 | if (!panel_mod) |
| 359 | return -ENOMEM; | 359 | return -ENOMEM; |
| 360 | 360 | ||
| 361 | bl_node = of_parse_phandle(node, "backlight", 0); | ||
| 362 | if (bl_node) { | ||
| 363 | panel_mod->backlight = of_find_backlight_by_node(bl_node); | ||
| 364 | of_node_put(bl_node); | ||
| 365 | |||
| 366 | if (!panel_mod->backlight) | ||
| 367 | return -EPROBE_DEFER; | ||
| 368 | |||
| 369 | dev_info(&pdev->dev, "found backlight\n"); | ||
| 370 | } | ||
| 371 | |||
| 361 | mod = &panel_mod->base; | 372 | mod = &panel_mod->base; |
| 362 | pdev->dev.platform_data = mod; | 373 | pdev->dev.platform_data = mod; |
| 363 | 374 | ||
| @@ -381,10 +392,6 @@ static int panel_probe(struct platform_device *pdev) | |||
| 381 | 392 | ||
| 382 | mod->preferred_bpp = panel_mod->info->bpp; | 393 | mod->preferred_bpp = panel_mod->info->bpp; |
| 383 | 394 | ||
| 384 | panel_mod->backlight = of_find_backlight_by_node(node); | ||
| 385 | if (panel_mod->backlight) | ||
| 386 | dev_info(&pdev->dev, "found backlight\n"); | ||
| 387 | |||
| 388 | return 0; | 395 | return 0; |
| 389 | 396 | ||
| 390 | fail_timings: | 397 | fail_timings: |
| @@ -392,6 +399,8 @@ fail_timings: | |||
| 392 | 399 | ||
| 393 | fail_free: | 400 | fail_free: |
| 394 | tilcdc_module_cleanup(mod); | 401 | tilcdc_module_cleanup(mod); |
| 402 | if (panel_mod->backlight) | ||
| 403 | put_device(&panel_mod->backlight->dev); | ||
| 395 | return ret; | 404 | return ret; |
| 396 | } | 405 | } |
| 397 | 406 | ||
| @@ -399,6 +408,10 @@ static int panel_remove(struct platform_device *pdev) | |||
| 399 | { | 408 | { |
| 400 | struct tilcdc_module *mod = dev_get_platdata(&pdev->dev); | 409 | struct tilcdc_module *mod = dev_get_platdata(&pdev->dev); |
| 401 | struct panel_module *panel_mod = to_panel_module(mod); | 410 | struct panel_module *panel_mod = to_panel_module(mod); |
| 411 | struct backlight_device *backlight = panel_mod->backlight; | ||
| 412 | |||
| 413 | if (backlight) | ||
| 414 | put_device(&backlight->dev); | ||
| 402 | 415 | ||
| 403 | display_timings_release(panel_mod->timings); | 416 | display_timings_release(panel_mod->timings); |
| 404 | 417 | ||
