diff options
| author | Padmanabhan Komanduru <pkomandu@codeaurora.org> | 2014-02-05 00:26:01 +0530 |
|---|---|---|
| committer | David Keitel <dkeitel@codeaurora.org> | 2016-03-23 20:26:49 -0700 |
| commit | b65461bb89d872f86f120366a198cba57c331d7a (patch) | |
| tree | cd63ab309da8c19c5f8352808d32a9f034c67dfd /drivers/video/fbdev | |
| parent | a7b17493b6c9d9ca7fa18e3862febb530b66c934 (diff) | |
msm: mdss: Avoid GPIO warnings during boot up
During continuous splash screen handoff, we see GPIO
warnings since we try to free the GPIOs without
requesting them before. This change takes care of avoiding
these warnings.
Change-Id: I574bcf0bd28e3c33dca618103cf0285675917189
Signed-off-by: Padmanabhan Komanduru <pkomandu@codeaurora.org>
Diffstat (limited to 'drivers/video/fbdev')
| -rw-r--r-- | drivers/video/fbdev/msm/dsi_host_v2.c | 7 | ||||
| -rw-r--r-- | drivers/video/fbdev/msm/dsi_v2.c | 2 | ||||
| -rw-r--r-- | drivers/video/fbdev/msm/mdss_dsi.c | 20 | ||||
| -rw-r--r-- | drivers/video/fbdev/msm/mdss_dsi.h | 4 | ||||
| -rw-r--r-- | drivers/video/fbdev/msm/mdss_dsi_panel.c | 30 |
5 files changed, 31 insertions, 32 deletions
diff --git a/drivers/video/fbdev/msm/dsi_host_v2.c b/drivers/video/fbdev/msm/dsi_host_v2.c index 5949ebe50b17..962bf78bf316 100644 --- a/drivers/video/fbdev/msm/dsi_host_v2.c +++ b/drivers/video/fbdev/msm/dsi_host_v2.c @@ -1216,6 +1216,13 @@ static int msm_dsi_cont_on(struct mdss_panel_data *pdata) mutex_unlock(&ctrl_pdata->mutex); return ret; } + pinfo->panel_power_on = 1; + ret = mdss_dsi_panel_reset(pdata, 1); + if (ret) { + pr_err("%s: Panel reset failed\n", __func__); + mutex_unlock(&ctrl_pdata->mutex); + return ret; + } msm_dsi_ahb_ctrl(1); msm_dsi_prepare_clocks(); diff --git a/drivers/video/fbdev/msm/dsi_v2.c b/drivers/video/fbdev/msm/dsi_v2.c index d31ed044a698..41b7e0db8a4c 100644 --- a/drivers/video/fbdev/msm/dsi_v2.c +++ b/drivers/video/fbdev/msm/dsi_v2.c @@ -66,6 +66,7 @@ static int dsi_panel_handler(struct mdss_panel_data *pdata, int enable) if (enable) { dsi_ctrl_gpio_request(ctrl_pdata); mdss_dsi_panel_reset(pdata, 1); + pdata->panel_info.panel_power_on = 1; rc = ctrl_pdata->on(pdata); if (rc) pr_err("dsi_panel_handler panel on failed %d\n", rc); @@ -73,6 +74,7 @@ static int dsi_panel_handler(struct mdss_panel_data *pdata, int enable) if (dsi_intf.op_mode_config) dsi_intf.op_mode_config(DSI_CMD_MODE, pdata); rc = ctrl_pdata->off(pdata); + pdata->panel_info.panel_power_on = 0; mdss_dsi_panel_reset(pdata, 0); dsi_ctrl_gpio_free(ctrl_pdata); } diff --git a/drivers/video/fbdev/msm/mdss_dsi.c b/drivers/video/fbdev/msm/mdss_dsi.c index e141bef2db41..4c2879a1cbf2 100644 --- a/drivers/video/fbdev/msm/mdss_dsi.c +++ b/drivers/video/fbdev/msm/mdss_dsi.c @@ -74,17 +74,15 @@ static int mdss_dsi_panel_power_on(struct mdss_panel_data *pdata, int enable) goto error; } - if (pdata->panel_info.panel_power_on == 0) { - ret = mdss_dsi_panel_reset(pdata, 1); - if (ret) { - pr_err("%s: Panel reset failed. rc=%d\n", - __func__, ret); - if (msm_dss_enable_vreg( - ctrl_pdata->power_data.vreg_config, - ctrl_pdata->power_data.num_vreg, 0)) - pr_err("Disable vregs failed\n"); - goto error; - } + ret = mdss_dsi_panel_reset(pdata, 1); + if (ret) { + pr_err("%s: Panel reset failed. rc=%d\n", + __func__, ret); + if (msm_dss_enable_vreg( + ctrl_pdata->power_data.vreg_config, + ctrl_pdata->power_data.num_vreg, 0)) + pr_err("Disable vregs failed\n"); + goto error; } } else { diff --git a/drivers/video/fbdev/msm/mdss_dsi.h b/drivers/video/fbdev/msm/mdss_dsi.h index fe4393d76c29..89a2178b49ef 100644 --- a/drivers/video/fbdev/msm/mdss_dsi.h +++ b/drivers/video/fbdev/msm/mdss_dsi.h @@ -253,11 +253,7 @@ struct mdss_dsi_ctrl_pdata { int disp_te_gpio; int bklt_en_gpio; int mode_gpio; - int rst_gpio_requested; - int disp_en_gpio_requested; int disp_te_gpio_requested; - int mode_gpio_requested; - int bklt_en_gpio_requested; int bklt_ctrl; /* backlight ctrl */ int pwm_period; int pwm_pmic_gpio; diff --git a/drivers/video/fbdev/msm/mdss_dsi_panel.c b/drivers/video/fbdev/msm/mdss_dsi_panel.c index 79c4fd1c5e08..368b822fad4d 100644 --- a/drivers/video/fbdev/msm/mdss_dsi_panel.c +++ b/drivers/video/fbdev/msm/mdss_dsi_panel.c @@ -207,7 +207,6 @@ int mdss_dsi_panel_reset(struct mdss_panel_data *pdata, int enable) { struct mdss_dsi_ctrl_pdata *ctrl_pdata = NULL; struct mdss_panel_info *pinfo = NULL; - static bool gpio_request_done; int i, rc = 0; if (pdata == NULL) { @@ -232,29 +231,27 @@ int mdss_dsi_panel_reset(struct mdss_panel_data *pdata, int enable) pr_debug("%s: enable = %d\n", __func__, enable); pinfo = &(ctrl_pdata->panel_data.panel_info); - if (!gpio_request_done && enable) { + if (enable) { rc = mdss_dsi_request_gpios(ctrl_pdata); if (rc) { pr_err("gpio request failed\n"); return rc; } - gpio_request_done = true; - } + if (!pinfo->panel_power_on) { + if (gpio_is_valid(ctrl_pdata->disp_en_gpio)) + gpio_set_value((ctrl_pdata->disp_en_gpio), 1); + + for (i = 0; i < pdata->panel_info.rst_seq_len; ++i) { + gpio_set_value((ctrl_pdata->rst_gpio), + pdata->panel_info.rst_seq[i]); + if (pdata->panel_info.rst_seq[++i]) + usleep(pinfo->rst_seq[i] * 1000); + } - if (enable) { - if (gpio_is_valid(ctrl_pdata->disp_en_gpio)) - gpio_set_value((ctrl_pdata->disp_en_gpio), 1); - - for (i = 0; i < pdata->panel_info.rst_seq_len; ++i) { - gpio_set_value((ctrl_pdata->rst_gpio), - pdata->panel_info.rst_seq[i]); - if (pdata->panel_info.rst_seq[++i]) - usleep(pdata->panel_info.rst_seq[i] * 1000); + if (gpio_is_valid(ctrl_pdata->bklt_en_gpio)) + gpio_set_value((ctrl_pdata->bklt_en_gpio), 1); } - if (gpio_is_valid(ctrl_pdata->bklt_en_gpio)) - gpio_set_value((ctrl_pdata->bklt_en_gpio), 1); - if (gpio_is_valid(ctrl_pdata->mode_gpio)) { if (pinfo->mode_gpio_state == MODE_GPIO_HIGH) gpio_set_value((ctrl_pdata->mode_gpio), 1); @@ -280,7 +277,6 @@ int mdss_dsi_panel_reset(struct mdss_panel_data *pdata, int enable) gpio_free(ctrl_pdata->rst_gpio); if (gpio_is_valid(ctrl_pdata->mode_gpio)) gpio_free(ctrl_pdata->mode_gpio); - gpio_request_done = false; } return rc; } |
