diff options
| author | Lloyd Atkinson <latkinso@codeaurora.org> | 2016-07-13 17:27:14 -0400 |
|---|---|---|
| committer | Dhaval Patel <pdhaval@codeaurora.org> | 2016-08-01 12:35:44 -0700 |
| commit | 034f48db2c7b129d15fbd05edc24759a31425fa3 (patch) | |
| tree | 2a3d3ac01196c64e777dad6bf002c60524fb051b /drivers | |
| parent | 1213804c01fd10915c1396e595897a7f776fd031 (diff) | |
drm/msm/dsi-staging: turn gpio off if panel reset fails
Fix error path to undo gpio changes if panel reset fails.
Change-Id: I753215fb10651dbe2adbef730d8ef31ee5f32eac
Signed-off-by: Lloyd Atkinson <latkinso@codeaurora.org>
Diffstat (limited to 'drivers')
| -rw-r--r-- | drivers/gpu/drm/msm/dsi-staging/dsi_panel.c | 23 |
1 files changed, 14 insertions, 9 deletions
diff --git a/drivers/gpu/drm/msm/dsi-staging/dsi_panel.c b/drivers/gpu/drm/msm/dsi-staging/dsi_panel.c index a06086167f7a..fbe6f1b22a29 100644 --- a/drivers/gpu/drm/msm/dsi-staging/dsi_panel.c +++ b/drivers/gpu/drm/msm/dsi-staging/dsi_panel.c @@ -185,7 +185,7 @@ static int dsi_panel_power_on(struct dsi_panel *panel) rc = dsi_pwr_enable_regulator(&panel->power_info, true); if (rc) { pr_err("[%s] failed to enable vregs, rc=%d\n", panel->name, rc); - goto error; + goto exit; } rc = dsi_panel_set_pinctrl_state(panel, true); @@ -197,16 +197,24 @@ static int dsi_panel_power_on(struct dsi_panel *panel) rc = dsi_panel_reset(panel); if (rc) { pr_err("[%s] failed to reset panel, rc=%d\n", panel->name, rc); - goto error_disable_pinctrl; + goto error_disable_gpio; } - /* TODO: backlight */ - goto error; -error_disable_pinctrl: + goto exit; + +error_disable_gpio: + if (gpio_is_valid(panel->reset_config.disp_en_gpio)) + gpio_set_value(panel->reset_config.disp_en_gpio, 0); + + if (gpio_is_valid(panel->bl_config.en_gpio)) + gpio_set_value(panel->bl_config.en_gpio, 0); + (void)dsi_panel_set_pinctrl_state(panel, false); + error_disable_vregs: (void)dsi_pwr_enable_regulator(&panel->power_info, false); -error: + +exit: return rc; } @@ -217,9 +225,6 @@ static int dsi_panel_power_off(struct dsi_panel *panel) if (gpio_is_valid(panel->reset_config.disp_en_gpio)) gpio_set_value(panel->reset_config.disp_en_gpio, 0); - if (gpio_is_valid(panel->reset_config.disp_en_gpio)) - gpio_set_value(panel->reset_config.disp_en_gpio, 0); - if (gpio_is_valid(panel->reset_config.reset_gpio)) gpio_set_value(panel->reset_config.reset_gpio, 0); |
