From 034f48db2c7b129d15fbd05edc24759a31425fa3 Mon Sep 17 00:00:00 2001 From: Lloyd Atkinson Date: Wed, 13 Jul 2016 17:27:14 -0400 Subject: 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 --- drivers/gpu/drm/msm/dsi-staging/dsi_panel.c | 23 ++++++++++++++--------- 1 file 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; } @@ -214,9 +222,6 @@ static int dsi_panel_power_off(struct dsi_panel *panel) { int rc = 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.disp_en_gpio)) gpio_set_value(panel->reset_config.disp_en_gpio, 0); -- cgit v1.2.3