summaryrefslogtreecommitdiff
path: root/drivers/video/fbdev/msm
diff options
context:
space:
mode:
authorLinux Build Service Account <lnxbuild@localhost>2017-01-13 17:02:59 -0800
committerGerrit - the friendly Code Review server <code-review@localhost>2017-01-13 17:02:58 -0800
commit74f63af013161d05f689cb856c6ffe3baefbe632 (patch)
tree59f07d1dc3c3f21acb13367c16888bae7248f7b5 /drivers/video/fbdev/msm
parent719eabd0a10f10a22393d0f7f922c1d99c7e00a3 (diff)
parent1a71e5ed0c887d12226d5f4557b4ad8c83b6f3a0 (diff)
Merge "msm: mdss: enable pll regulator during phy on sequence"
Diffstat (limited to 'drivers/video/fbdev/msm')
-rw-r--r--drivers/video/fbdev/msm/mdss_hdmi_tx.c9
-rw-r--r--drivers/video/fbdev/msm/msm_mdss_io_8974.c11
2 files changed, 17 insertions, 3 deletions
diff --git a/drivers/video/fbdev/msm/mdss_hdmi_tx.c b/drivers/video/fbdev/msm/mdss_hdmi_tx.c
index ae6246f2ca27..67813ca9cd37 100644
--- a/drivers/video/fbdev/msm/mdss_hdmi_tx.c
+++ b/drivers/video/fbdev/msm/mdss_hdmi_tx.c
@@ -1773,7 +1773,7 @@ static int hdmi_tx_read_edid(struct hdmi_tx_ctrl *hdmi_ctrl)
check_sum += ebuf[ndx];
if (check_sum & 0xFF) {
- DEV_ERR("%s: checksome mismatch\n", __func__);
+ DEV_ERR("%s: checksum mismatch\n", __func__);
ret = -EINVAL;
goto end;
}
@@ -2328,6 +2328,8 @@ static void hdmi_tx_update_deep_color(struct hdmi_tx_ctrl *hdmi_ctrl)
static void hdmi_tx_hpd_int_work(struct work_struct *work)
{
struct hdmi_tx_ctrl *hdmi_ctrl = NULL;
+ int rc = -EINVAL;
+ int retry = MAX_EDID_READ_RETRY;
hdmi_ctrl = container_of(work, struct hdmi_tx_ctrl, hpd_int_work);
if (!hdmi_ctrl) {
@@ -2346,7 +2348,10 @@ static void hdmi_tx_hpd_int_work(struct work_struct *work)
hdmi_ctrl->hpd_state ? "CONNECT" : "DISCONNECT");
if (hdmi_ctrl->hpd_state) {
- hdmi_tx_read_sink_info(hdmi_ctrl);
+ while (rc && retry--)
+ rc = hdmi_tx_read_sink_info(hdmi_ctrl);
+ if (!retry && rc)
+ pr_warn_ratelimited("%s: EDID read failed\n", __func__);
hdmi_tx_update_deep_color(hdmi_ctrl);
hdmi_tx_send_cable_notification(hdmi_ctrl, true);
diff --git a/drivers/video/fbdev/msm/msm_mdss_io_8974.c b/drivers/video/fbdev/msm/msm_mdss_io_8974.c
index 3dc2e952b5dd..e6151b4c75a1 100644
--- a/drivers/video/fbdev/msm/msm_mdss_io_8974.c
+++ b/drivers/video/fbdev/msm/msm_mdss_io_8974.c
@@ -947,8 +947,11 @@ static void mdss_dsi_8996_phy_power_off(
{
int ln;
void __iomem *base;
+ u32 data;
- MIPI_OUTP(ctrl->phy_io.base + DSIPHY_CMN_CTRL_0, 0x7f);
+ /* Turn off PLL power */
+ data = MIPI_INP(ctrl->phy_io.base + DSIPHY_CMN_CTRL_0);
+ MIPI_OUTP(ctrl->phy_io.base + DSIPHY_CMN_CTRL_0, data & ~BIT(7));
/* 4 lanes + clk lane configuration */
for (ln = 0; ln < 5; ln++) {
@@ -1004,6 +1007,7 @@ static void mdss_dsi_8996_phy_power_on(
void __iomem *base;
struct mdss_dsi_phy_ctrl *pd;
char *ip;
+ u32 data;
pd = &(((ctrl->panel_data).panel_info.mipi).dsi_phy_db);
@@ -1023,6 +1027,10 @@ static void mdss_dsi_8996_phy_power_on(
}
mdss_dsi_8996_phy_regulator_enable(ctrl);
+
+ /* Turn on PLL power */
+ data = MIPI_INP(ctrl->phy_io.base + DSIPHY_CMN_CTRL_0);
+ MIPI_OUTP(ctrl->phy_io.base + DSIPHY_CMN_CTRL_0, data | BIT(7));
}
static void mdss_dsi_phy_power_on(
@@ -1126,6 +1134,7 @@ static void mdss_dsi_8996_phy_config(struct mdss_dsi_ctrl_pdata *ctrl)
mdss_dsi_8996_pll_source_standalone(ctrl);
}
+ MIPI_OUTP(ctrl->phy_io.base + DSIPHY_CMN_CTRL_0, 0x7f);
wmb(); /* make sure registers committed */
}