drm/tegra: dsi: Clear enable register if powered by bootloader
authorDiogo Ivo <diogo.ivo@tecnico.ulisboa.pt>
Mon, 28 Nov 2022 16:28:49 +0000 (16:28 +0000)
committerThierry Reding <treding@nvidia.com>
Tue, 4 Apr 2023 16:04:58 +0000 (18:04 +0200)
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 <diogo.ivo@tecnico.ulisboa.pt>
Signed-off-by: Thierry Reding <treding@nvidia.com>
drivers/gpu/drm/tegra/dsi.c

index 49f0bc270e1471415d6d98ba4897117b697a7167..a9870c828374991c6ce3d112b31c22f8f8dfbe86 100644 (file)
@@ -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);