aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDiogo Ivo <[email protected]>2022-11-28 16:28:49 +0000
committerThierry Reding <[email protected]>2023-04-04 18:04:58 +0200
commitb22fd0b9639ed61e379b3b9bba00629ebf8e6946 (patch)
treea0caca9d36b80022820bf78cbb39537393d36930
parente752eef028c363445f3fc06221ed479e71a0e971 (diff)
drm/tegra: dsi: Clear enable register if powered by bootloader
In cases where the DSI module is left on by the bootloader some panels may fail to initialize if the enable register is not cleared before the panel's initialization sequence is sent, so clear it if that is the case. Signed-off-by: Diogo Ivo <[email protected]> Signed-off-by: Thierry Reding <[email protected]>
-rw-r--r--drivers/gpu/drm/tegra/dsi.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/drivers/gpu/drm/tegra/dsi.c b/drivers/gpu/drm/tegra/dsi.c
index 49f0bc270e14..a9870c828374 100644
--- a/drivers/gpu/drm/tegra/dsi.c
+++ b/drivers/gpu/drm/tegra/dsi.c
@@ -912,6 +912,15 @@ static void tegra_dsi_encoder_enable(struct drm_encoder *encoder)
u32 value;
int err;
+ /* If the bootloader enabled DSI it needs to be disabled
+ * in order for the panel initialization commands to be
+ * properly sent.
+ */
+ value = tegra_dsi_readl(dsi, DSI_POWER_CONTROL);
+
+ if (value & DSI_POWER_CONTROL_ENABLE)
+ tegra_dsi_disable(dsi);
+
err = tegra_dsi_prepare(dsi);
if (err < 0) {
dev_err(dsi->dev, "failed to prepare: %d\n", err);