summaryrefslogtreecommitdiff
path: root/drivers/video/fbdev
diff options
context:
space:
mode:
authorPadmanabhan Komanduru <pkomandu@codeaurora.org>2014-02-05 00:26:01 +0530
committerDavid Keitel <dkeitel@codeaurora.org>2016-03-23 20:26:49 -0700
commitb65461bb89d872f86f120366a198cba57c331d7a (patch)
treecd63ab309da8c19c5f8352808d32a9f034c67dfd /drivers/video/fbdev
parenta7b17493b6c9d9ca7fa18e3862febb530b66c934 (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.c7
-rw-r--r--drivers/video/fbdev/msm/dsi_v2.c2
-rw-r--r--drivers/video/fbdev/msm/mdss_dsi.c20
-rw-r--r--drivers/video/fbdev/msm/mdss_dsi.h4
-rw-r--r--drivers/video/fbdev/msm/mdss_dsi_panel.c30
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;
}