summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorLloyd Atkinson <latkinso@codeaurora.org>2016-07-13 17:27:14 -0400
committerDhaval Patel <pdhaval@codeaurora.org>2016-08-01 12:35:44 -0700
commit034f48db2c7b129d15fbd05edc24759a31425fa3 (patch)
tree2a3d3ac01196c64e777dad6bf002c60524fb051b /drivers
parent1213804c01fd10915c1396e595897a7f776fd031 (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.c23
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);