When the platform support HDCP2.2, HDCP2.2 capability is probed
on panel from late_init. If platform and panel support HDCP2.2,
DRM_HDCP2_SUPPORTED bit of HDCP property will be set.

Signed-off-by: Ramalingam C <ramalinga...@intel.com>
---
 drivers/gpu/drm/drm_hdcp.c | 41 ++++++++++++++++++++++++++++++++++++++---
 1 file changed, 38 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/drm_hdcp.c b/drivers/gpu/drm/drm_hdcp.c
index 5441b55..cb20cc9 100644
--- a/drivers/gpu/drm/drm_hdcp.c
+++ b/drivers/gpu/drm/drm_hdcp.c
@@ -162,6 +162,42 @@ int drm_hdcp_set_property(struct drm_connector *connector,
        return 0;
 }
 
+static void drm_hdcp_2_2_late_init(struct drm_hdcp *hdcp)
+{
+       uint8_t hdcp2version;
+       void *buf;
+       ssize_t receiv, size;
+       unsigned int offset;
+
+       if (hdcp->protocol == WIRED_PROTOCOL_HDMI) {
+               offset = HDMI_HDCP2_REG_VER_OFFSET;
+               buf = (void *)&hdcp2version;
+               size = sizeof(hdcp2version);
+       } else {
+               DRM_ERROR("Unsupported Protocol\n");
+               return;
+       }
+
+       receiv = hdcp->hdcp_funcs->link_read(hdcp, offset, buf, size);
+       if (receiv == size) {
+               mutex_lock(&hdcp->mutex);
+               if (hdcp2version & HDMI_HDCP_2_2_SUPPORT_MASK) {
+                       hdcp->ver_support_on_panel |= HDCP_2_2_SUPPORT;
+                       hdcp->connector->hdcp_state |= DRM_HDCP2_SUPPORTED;
+
+                       DRM_DEBUG("HDMI with HDCP 2.2\n");
+               } else {
+                       hdcp->ver_support_on_panel &= ~HDCP_2_2_SUPPORT;
+                       hdcp->connector->hdcp_state &= ~DRM_HDCP2_SUPPORTED;
+
+                       DRM_DEBUG("HDMI without HDCP 2.2\n");
+               }
+               mutex_unlock(&hdcp->mutex);
+       } else {
+               DRM_ERROR("HDCP Link read failed. Error: %d\n", (int)receiv);
+       }
+}
+
 void drm_hdcp_late_init(struct drm_connector *connector)
 {
        struct drm_hdcp *hdcp = connector->hdcp;
@@ -169,9 +205,8 @@ void drm_hdcp_late_init(struct drm_connector *connector)
        if (hdcp->hdcp_funcs->late_init)
                hdcp->hdcp_funcs->late_init(hdcp);
 
-       /*
-        * TODO: Invoke the Version specific late_init
-        */
+       if (hdcp->ver_support_on_plat & HDCP_2_2_SUPPORT)
+               drm_hdcp_2_2_late_init(hdcp);
 }
 
 /**
-- 
2.7.4

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

Reply via email to