summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--drivers/gpu/drm/msm/hdmi-staging/sde_hdmi_bridge.c6
-rw-r--r--drivers/gpu/drm/msm/hdmi-staging/sde_hdmi_hdcp2p2.c10
2 files changed, 11 insertions, 5 deletions
diff --git a/drivers/gpu/drm/msm/hdmi-staging/sde_hdmi_bridge.c b/drivers/gpu/drm/msm/hdmi-staging/sde_hdmi_bridge.c
index 0c143059b749..b8aa29c13edf 100644
--- a/drivers/gpu/drm/msm/hdmi-staging/sde_hdmi_bridge.c
+++ b/drivers/gpu/drm/msm/hdmi-staging/sde_hdmi_bridge.c
@@ -578,6 +578,9 @@ static void _sde_hdmi_bridge_disable(struct drm_bridge *bridge)
display->sink_hdcp_ver = SDE_HDMI_HDCP_NONE;
display->sink_hdcp22_support = false;
+ if (sde_hdmi_tx_is_hdcp_enabled(display))
+ sde_hdmi_hdcp_off(display);
+
sde_hdmi_clear_hdr_info(bridge);
mutex_unlock(&display->display_lock);
}
@@ -592,9 +595,6 @@ static void _sde_hdmi_bridge_post_disable(struct drm_bridge *bridge)
sde_hdmi_notify_clients(display, display->connected);
- if (sde_hdmi_tx_is_hdcp_enabled(display))
- sde_hdmi_hdcp_off(display);
-
sde_hdmi_audio_off(hdmi);
DRM_DEBUG("power down");
diff --git a/drivers/gpu/drm/msm/hdmi-staging/sde_hdmi_hdcp2p2.c b/drivers/gpu/drm/msm/hdmi-staging/sde_hdmi_hdcp2p2.c
index 51f5c8d8dde6..a4f47756ad9b 100644
--- a/drivers/gpu/drm/msm/hdmi-staging/sde_hdmi_hdcp2p2.c
+++ b/drivers/gpu/drm/msm/hdmi-staging/sde_hdmi_hdcp2p2.c
@@ -234,10 +234,16 @@ static void sde_hdmi_hdcp2p2_off(void *input)
flush_kthread_worker(&ctrl->worker);
- sde_hdmi_hdcp2p2_ddc_disable((void *)ctrl->init_data.cb_data);
-
cdata.context = input;
sde_hdmi_hdcp2p2_wakeup(&cdata);
+
+ /* There could be upto one frame delay
+ * between the time encryption disable is
+ * requested till the time we get encryption
+ * disabled interrupt
+ */
+ msleep(20);
+ sde_hdmi_hdcp2p2_ddc_disable((void *)ctrl->init_data.cb_data);
}
static int sde_hdmi_hdcp2p2_authenticate(void *input)