Jiri Slaby ef7db2
From: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Jiri Slaby ef7db2
Date: Wed, 18 Jan 2023 10:16:47 +0200
Jiri Slaby ef7db2
Subject: [PATCH] drm/bridge: lt9611: fix HPD reenablement
Jiri Slaby ef7db2
References: bsc#1012628
Jiri Slaby ef7db2
Patch-mainline: 6.2.3
Jiri Slaby ef7db2
Git-commit: a7790f6bd38f3642b60ae3504a2c749135b89451
Jiri Slaby ef7db2
Jiri Slaby ef7db2
[ Upstream commit a7790f6bd38f3642b60ae3504a2c749135b89451 ]
Jiri Slaby ef7db2
Jiri Slaby ef7db2
The driver will reset the bridge in the atomic_pre_enable(). However
Jiri Slaby ef7db2
this will also drop the HPD interrupt state. Instead of resetting the
Jiri Slaby ef7db2
bridge, properly wake it up. This fixes the HPD interrupt delivery after
Jiri Slaby ef7db2
the disable/enable cycle.
Jiri Slaby ef7db2
Jiri Slaby ef7db2
Fixes: 23278bf54afe ("drm/bridge: Introduce LT9611 DSI to HDMI bridge")
Jiri Slaby ef7db2
Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org>
Jiri Slaby ef7db2
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Jiri Slaby ef7db2
Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org>
Jiri Slaby ef7db2
Link: https://patchwork.freedesktop.org/patch/msgid/20230118081658.2198520-3-dmitry.baryshkov@linaro.org
Jiri Slaby ef7db2
Signed-off-by: Sasha Levin <sashal@kernel.org>
Jiri Slaby ef7db2
Signed-off-by: Jiri Slaby <jslaby@suse.cz>
Jiri Slaby ef7db2
---
Jiri Slaby ef7db2
 drivers/gpu/drm/bridge/lontium-lt9611.c | 10 ++++++++--
Jiri Slaby ef7db2
 1 file changed, 8 insertions(+), 2 deletions(-)
Jiri Slaby ef7db2
Jiri Slaby ef7db2
diff --git a/drivers/gpu/drm/bridge/lontium-lt9611.c b/drivers/gpu/drm/bridge/lontium-lt9611.c
Jiri Slaby ef7db2
index 2714184c..58f39b27 100644
Jiri Slaby ef7db2
--- a/drivers/gpu/drm/bridge/lontium-lt9611.c
Jiri Slaby ef7db2
+++ b/drivers/gpu/drm/bridge/lontium-lt9611.c
Jiri Slaby ef7db2
@@ -856,12 +856,18 @@ static enum drm_mode_status lt9611_bridge_mode_valid(struct drm_bridge *bridge,
Jiri Slaby ef7db2
 static void lt9611_bridge_pre_enable(struct drm_bridge *bridge)
Jiri Slaby ef7db2
 {
Jiri Slaby ef7db2
 	struct lt9611 *lt9611 = bridge_to_lt9611(bridge);
Jiri Slaby ef7db2
+	static const struct reg_sequence reg_cfg[] = {
Jiri Slaby ef7db2
+		{ 0x8102, 0x12 },
Jiri Slaby ef7db2
+		{ 0x8123, 0x40 },
Jiri Slaby ef7db2
+		{ 0x8130, 0xea },
Jiri Slaby ef7db2
+		{ 0x8011, 0xfa },
Jiri Slaby ef7db2
+	};
Jiri Slaby ef7db2
 
Jiri Slaby ef7db2
 	if (!lt9611->sleep)
Jiri Slaby ef7db2
 		return;
Jiri Slaby ef7db2
 
Jiri Slaby ef7db2
-	lt9611_reset(lt9611);
Jiri Slaby ef7db2
-	regmap_write(lt9611->regmap, 0x80ee, 0x01);
Jiri Slaby ef7db2
+	regmap_multi_reg_write(lt9611->regmap,
Jiri Slaby ef7db2
+			       reg_cfg, ARRAY_SIZE(reg_cfg));
Jiri Slaby ef7db2
 
Jiri Slaby ef7db2
 	lt9611->sleep = false;
Jiri Slaby ef7db2
 }
Jiri Slaby ef7db2
-- 
Jiri Slaby ef7db2
2.35.3
Jiri Slaby ef7db2