diff options
| author | Dhaval Patel <pdhaval@codeaurora.org> | 2016-09-28 10:39:12 -0700 |
|---|---|---|
| committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2016-09-28 10:39:12 -0700 |
| commit | 5b39929427534e5e12d91d42a81146ae724ffc5b (patch) | |
| tree | d41456830658ed71873701d48a216e853c214639 /drivers/gpu | |
| parent | 04ea852bdbc42281cafca4ffbd2f5254a459e6fb (diff) | |
| parent | 6bc663767401923c737a766965c4a82807922521 (diff) | |
Merge "drm/msm/dsi-staging: keep backlight api under LED config" into dev/msm-4.4-drm_kms
Diffstat (limited to 'drivers/gpu')
| -rw-r--r-- | drivers/gpu/drm/msm/dsi-staging/dsi_panel.c | 68 |
1 files changed, 42 insertions, 26 deletions
diff --git a/drivers/gpu/drm/msm/dsi-staging/dsi_panel.c b/drivers/gpu/drm/msm/dsi-staging/dsi_panel.c index 2335c308551b..6e753f08a77e 100644 --- a/drivers/gpu/drm/msm/dsi-staging/dsi_panel.c +++ b/drivers/gpu/drm/msm/dsi-staging/dsi_panel.c @@ -317,6 +317,47 @@ error: return rc; } +#ifdef CONFIG_LEDS_TRIGGERS +static int dsi_panel_led_bl_register(struct dsi_panel *panel, + struct dsi_backlight_config *bl) +{ + int rc = 0; + + led_trigger_register_simple("bkl-trigger", &bl->wled); + + /* LED APIs don't tell us directly whether a classdev has yet + * been registered to service this trigger. Until classdev is + * registered, calling led_trigger has no effect, and doesn't + * fail. Classdevs are associated with any registered triggers + * when they do register, but that is too late for FBCon. + * Check the cdev list directly and defer if appropriate. + */ + if (!bl->wled) { + pr_err("[%s] backlight registration failed\n", panel->name); + rc = -EINVAL; + } else { + read_lock(&bl->wled->leddev_list_lock); + if (list_empty(&bl->wled->led_cdevs)) + rc = -EPROBE_DEFER; + read_unlock(&bl->wled->leddev_list_lock); + + if (rc) { + pr_info("[%s] backlight %s not ready, defer probe\n", + panel->name, bl->wled->name); + led_trigger_unregister_simple(bl->wled); + } + } + + return rc; +} +#else +static int dsi_panel_led_bl_register(struct dsi_panel *panel, + struct dsi_backlight_config *bl) +{ + return 0; +} +#endif + static int dsi_panel_bl_register(struct dsi_panel *panel) { int rc = 0; @@ -324,32 +365,7 @@ static int dsi_panel_bl_register(struct dsi_panel *panel) switch (bl->type) { case DSI_BACKLIGHT_WLED: - led_trigger_register_simple("bkl-trigger", &bl->wled); - - /* LED APIs don't tell us directly whether a classdev has yet - * been registered to service this trigger. Until classdev is - * registered, calling led_trigger has no effect, and doesn't - * fail. Classdevs are associated with any registered triggers - * when they do register, but that is too late for FBCon. - * Check the cdev list directly and defer if appropriate. - */ - if (!bl->wled) { - pr_err("[%s] backlight registration failed\n", - panel->name); - rc = -EINVAL; - } else { - read_lock(&bl->wled->leddev_list_lock); - if (list_empty(&bl->wled->led_cdevs)) - rc = -EPROBE_DEFER; - read_unlock(&bl->wled->leddev_list_lock); - - if (rc) { - pr_info("[%s] backlight %s not ready, defer probe\n", - panel->name, bl->wled->name); - led_trigger_unregister_simple(bl->wled); - } - } - + rc = dsi_panel_led_bl_register(panel, bl); break; default: pr_err("Backlight type(%d) not supported\n", bl->type); |
