diff options
| -rw-r--r-- | drivers/video/fbdev/msm/mdss_hdmi_hdcp.c | 10 | ||||
| -rw-r--r-- | drivers/video/fbdev/msm/mdss_hdmi_tx.c | 6 |
2 files changed, 15 insertions, 1 deletions
diff --git a/drivers/video/fbdev/msm/mdss_hdmi_hdcp.c b/drivers/video/fbdev/msm/mdss_hdmi_hdcp.c index 1666b6643cd5..bcd5f28b2ad0 100644 --- a/drivers/video/fbdev/msm/mdss_hdmi_hdcp.c +++ b/drivers/video/fbdev/msm/mdss_hdmi_hdcp.c @@ -895,6 +895,7 @@ static void hdmi_hdcp_auth_work(struct work_struct *work) struct delayed_work *dw = to_delayed_work(work); struct hdmi_hdcp_ctrl *hdcp_ctrl = container_of(dw, struct hdmi_hdcp_ctrl, hdcp_auth_work); + struct dss_io_data *io; if (!hdcp_ctrl) { DEV_ERR("%s: invalid input\n", __func__); @@ -907,6 +908,11 @@ static void hdmi_hdcp_auth_work(struct work_struct *work) return; } + io = hdcp_ctrl->init_data.core_io; + /* Enabling Software DDC */ + DSS_REG_W_ND(io, HDMI_DDC_ARBITRATION , DSS_REG_R(io, + HDMI_DDC_ARBITRATION) & ~(BIT(4))); + rc = hdmi_hdcp_authentication_part1(hdcp_ctrl); if (rc) { DEV_DBG("%s: %s: HDCP Auth Part I failed\n", __func__, @@ -920,6 +926,10 @@ static void hdmi_hdcp_auth_work(struct work_struct *work) HDCP_STATE_NAME); goto error; } + /* Disabling software DDC before going into part3 to make sure + * there is no Arbitratioon between software and hardware for DDC */ + DSS_REG_W_ND(io, HDMI_DDC_ARBITRATION , DSS_REG_R(io, + HDMI_DDC_ARBITRATION) | (BIT(4))); error: /* diff --git a/drivers/video/fbdev/msm/mdss_hdmi_tx.c b/drivers/video/fbdev/msm/mdss_hdmi_tx.c index 6af4690af551..60618ab0bdb6 100644 --- a/drivers/video/fbdev/msm/mdss_hdmi_tx.c +++ b/drivers/video/fbdev/msm/mdss_hdmi_tx.c @@ -866,13 +866,14 @@ error: static void hdmi_tx_hpd_int_work(struct work_struct *work) { struct hdmi_tx_ctrl *hdmi_ctrl = NULL; + struct dss_io_data *io; hdmi_ctrl = container_of(work, struct hdmi_tx_ctrl, hpd_int_work); if (!hdmi_ctrl || !hdmi_ctrl->hpd_initialized) { DEV_DBG("%s: invalid input\n", __func__); return; } - + io = &hdmi_ctrl->pdata.io[HDMI_TX_CORE_IO]; DEV_DBG("%s: Got HPD interrupt\n", __func__); if (hdmi_ctrl->hpd_state) { @@ -880,6 +881,9 @@ static void hdmi_tx_hpd_int_work(struct work_struct *work) DEV_ERR("%s: Failed to enable ddc power\n", __func__); return; } + /* Enable SW DDC before EDID read */ + DSS_REG_W_ND(io, HDMI_DDC_ARBITRATION , + DSS_REG_R(io, HDMI_DDC_ARBITRATION) & ~(BIT(4))); hdmi_tx_read_sink_info(hdmi_ctrl); hdmi_tx_send_cable_notification(hdmi_ctrl, 1); |
