msm: mdss: fix to update the configuration for display related GPIOs
After commit dbe80b7cc96a1f3f23246552fbd2352f334fa857 ("ARM: dts: msm: remove gpio output settings in dsi pinctrl") driver is no longer defining in the pinctrl the gpios as output high configuration; so driver now has to explicitly configure gpio output direction. This change add the settings in the driver to configure the gpio as output pin, fixing panel issues when booting-up with continuous splash disabled. Change-Id: I1ac3c5dd07cff4a30cce9de3c340f071dd84d49a Signed-off-by: Ingrid Gallardo <ingridg@codeaurora.org>
This commit is contained in:
parent
d5d9af1ba9
commit
88e3bbd091
1 changed files with 41 additions and 6 deletions
|
@ -313,8 +313,25 @@ int mdss_dsi_panel_reset(struct mdss_panel_data *pdata, int enable)
|
|||
return rc;
|
||||
}
|
||||
if (!pinfo->cont_splash_enabled) {
|
||||
if (gpio_is_valid(ctrl_pdata->disp_en_gpio))
|
||||
gpio_set_value((ctrl_pdata->disp_en_gpio), 1);
|
||||
if (gpio_is_valid(ctrl_pdata->disp_en_gpio)) {
|
||||
rc = gpio_direction_output(
|
||||
ctrl_pdata->disp_en_gpio, 1);
|
||||
if (rc) {
|
||||
pr_err("%s: unable to set dir for en gpio\n",
|
||||
__func__);
|
||||
goto exit;
|
||||
}
|
||||
}
|
||||
|
||||
if (pdata->panel_info.rst_seq_len) {
|
||||
rc = gpio_direction_output(ctrl_pdata->rst_gpio,
|
||||
pdata->panel_info.rst_seq[0]);
|
||||
if (rc) {
|
||||
pr_err("%s: unable to set dir for rst gpio\n",
|
||||
__func__);
|
||||
goto exit;
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; i < pdata->panel_info.rst_seq_len; ++i) {
|
||||
gpio_set_value((ctrl_pdata->rst_gpio),
|
||||
|
@ -323,15 +340,31 @@ int mdss_dsi_panel_reset(struct mdss_panel_data *pdata, int enable)
|
|||
usleep_range(pinfo->rst_seq[i] * 1000, pinfo->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)) {
|
||||
rc = gpio_direction_output(
|
||||
ctrl_pdata->bklt_en_gpio, 1);
|
||||
if (rc) {
|
||||
pr_err("%s: unable to set dir for bklt gpio\n",
|
||||
__func__);
|
||||
goto exit;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (gpio_is_valid(ctrl_pdata->mode_gpio)) {
|
||||
bool out;
|
||||
|
||||
if (pinfo->mode_gpio_state == MODE_GPIO_HIGH)
|
||||
gpio_set_value((ctrl_pdata->mode_gpio), 1);
|
||||
out = true;
|
||||
else if (pinfo->mode_gpio_state == MODE_GPIO_LOW)
|
||||
gpio_set_value((ctrl_pdata->mode_gpio), 0);
|
||||
out = false;
|
||||
|
||||
rc = gpio_direction_output(ctrl_pdata->mode_gpio, out);
|
||||
if (rc) {
|
||||
pr_err("%s: unable to set dir for mode gpio\n",
|
||||
__func__);
|
||||
goto exit;
|
||||
}
|
||||
}
|
||||
if (ctrl_pdata->ctrl_state & CTRL_STATE_PANEL_INIT) {
|
||||
pr_debug("%s: Panel Not properly turned OFF\n",
|
||||
|
@ -353,6 +386,8 @@ int mdss_dsi_panel_reset(struct mdss_panel_data *pdata, int enable)
|
|||
if (gpio_is_valid(ctrl_pdata->mode_gpio))
|
||||
gpio_free(ctrl_pdata->mode_gpio);
|
||||
}
|
||||
|
||||
exit:
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue