msm: mdss: fix issue with DSI probe deferral

If, for some reason, DSI probe gets deferred, then WB/HDMI gets
FB0. Userspace operates thinking FB0 as primary and gets stuck
in bad state. Fix this by deferring the probes for WFD/HDMI also
in case of DSI Probe deferral.

Change-Id: If793ce22aeffafc64df5e56b76a0f27c38e6240d
Signed-off-by: Vineet Bajaj <vbajaj@codeaurora.org>
This commit is contained in:
Vineet Bajaj 2014-12-10 20:12:34 +05:30
parent 7417499a95
commit 5a919cc529
2 changed files with 14 additions and 1 deletions

View file

@ -123,6 +123,7 @@ static int mdss_dsi_regulator_init(struct platform_device *pdev)
struct mdss_dsi_ctrl_pdata *ctrl_pdata = NULL;
int i = 0;
int j = 0;
if (!pdev) {
pr_err("%s: invalid input\n", __func__);
@ -139,9 +140,15 @@ static int mdss_dsi_regulator_init(struct platform_device *pdev)
rc = msm_dss_config_vreg(&pdev->dev,
ctrl_pdata->power_data[i].vreg_config,
ctrl_pdata->power_data[i].num_vreg, 1);
if (rc)
if (rc) {
pr_err("%s: failed to init vregs for %s\n",
__func__, __mdss_dsi_pm_name(i));
for (j = i-1; j >= 0; j--) {
msm_dss_config_vreg(&pdev->dev,
ctrl_pdata->power_data[j].vreg_config,
ctrl_pdata->power_data[j].num_vreg, 0);
}
}
}
mdss_dsi_labibb_vreg_init(pdev);

View file

@ -699,6 +699,7 @@ static int mdss_fb_probe(struct platform_device *pdev)
struct mdss_panel_data *pdata;
struct fb_info *fbi;
int rc;
u32 cell_index = 0;
if (fbi_list_index >= MAX_FBI_LIST)
return -ENOMEM;
@ -707,6 +708,11 @@ static int mdss_fb_probe(struct platform_device *pdev)
if (!pdata)
return -EPROBE_DEFER;
of_property_read_u32(pdev->dev.of_node, "cell-index", &cell_index);
if (cell_index > fbi_list_index)
return -EPROBE_DEFER;
/*
* alloc framebuffer info + par data
*/