Update HDCP content_protection to DRM_MODE_CONTENT_PROTECTION_UNDESIRED
in bridge .atomic_disable().

Signed-off-by: Xin Ji <x...@analogixsemi.com>
---
 drivers/gpu/drm/bridge/analogix/anx7625.c | 25 ++++++++++++++++++-----
 1 file changed, 20 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/bridge/analogix/anx7625.c 
b/drivers/gpu/drm/bridge/analogix/anx7625.c
index a2675b121fe4..a75f519ddcb8 100644
--- a/drivers/gpu/drm/bridge/analogix/anx7625.c
+++ b/drivers/gpu/drm/bridge/analogix/anx7625.c
@@ -861,6 +861,22 @@ static int anx7625_hdcp_disable(struct anx7625_data *ctx)
                                 TX_HDCP_CTRL0, ~HARD_AUTH_EN & 0xFF);
 }
 
+static void anx7625_hdcp_disable_and_update_cp(struct anx7625_data *ctx)
+{
+       struct device *dev = ctx->dev;
+
+       if (!ctx->connector)
+               return;
+
+       anx7625_hdcp_disable(ctx);
+
+       ctx->hdcp_cp = DRM_MODE_CONTENT_PROTECTION_UNDESIRED;
+       drm_hdcp_update_content_protection(ctx->connector,
+                                          ctx->hdcp_cp);
+
+       dev_dbg(dev, "update CP to UNDESIRE\n");
+}
+
 static int anx7625_hdcp_enable(struct anx7625_data *ctx)
 {
        u8 bcap;
@@ -2165,11 +2181,8 @@ static int anx7625_connector_atomic_check(struct 
anx7625_data *ctx,
                        dev_err(dev, "current CP is not ENABLED\n");
                        return -EINVAL;
                }
-               anx7625_hdcp_disable(ctx);
-               ctx->hdcp_cp = DRM_MODE_CONTENT_PROTECTION_UNDESIRED;
-               drm_hdcp_update_content_protection(ctx->connector,
-                                                  ctx->hdcp_cp);
-               dev_dbg(dev, "update CP to UNDESIRE\n");
+
+               anx7625_hdcp_disable_and_update_cp(ctx);
        }
 
        if (cp == DRM_MODE_CONTENT_PROTECTION_ENABLED) {
@@ -2449,6 +2462,8 @@ static void anx7625_bridge_atomic_disable(struct 
drm_bridge *bridge,
 
        dev_dbg(dev, "drm atomic disable\n");
 
+       anx7625_hdcp_disable_and_update_cp(ctx);
+
        ctx->connector = NULL;
        anx7625_dp_stop(ctx);
 
-- 
2.25.1

Reply via email to