]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
video: tegra20: dc: add powergate
authorSvyatoslav Ryhel <clamor95@gmail.com>
Tue, 23 Jan 2024 17:16:22 +0000 (19:16 +0200)
committerAnatolij Gustschin <agust@denx.de>
Sun, 21 Apr 2024 07:07:01 +0000 (09:07 +0200)
Add powergate use on T114 to complete resetting of DC.

Signed-off-by: Svyatoslav Ryhel <clamor95@gmail.com>
Reviewed-by: Thierry Reding <treding@nvidia.com>
drivers/video/tegra20/tegra-dc.c

index 56a23b3c97975425996a9c209365ea98a72f2d4e..cc4b5b70015037969ef42cdcb2699573f5a6c015 100644 (file)
@@ -20,6 +20,7 @@
 #include <asm/arch/clock.h>
 #include <asm/arch/funcmux.h>
 #include <asm/arch/pinmux.h>
+#include <asm/arch/powergate.h>
 #include <asm/arch/pwm.h>
 
 #include "tegra-dc.h"
@@ -30,6 +31,7 @@ DECLARE_GLOBAL_DATA_PTR;
 struct tegra_dc_soc_info {
        bool has_timer;
        bool has_rgb;
+       bool has_pgate;
 };
 
 /* Information about the display controller */
@@ -349,6 +351,28 @@ static int tegra_lcd_probe(struct udevice *dev)
        funcmux_select(PERIPH_ID_DISP1, FUNCMUX_DEFAULT);
 #endif
 
+       if (priv->soc->has_pgate) {
+               uint powergate;
+
+               if (priv->pipe)
+                       powergate = TEGRA_POWERGATE_DISB;
+               else
+                       powergate = TEGRA_POWERGATE_DIS;
+
+               ret = tegra_powergate_power_off(powergate);
+               if (ret < 0) {
+                       log_err("failed to power off DISP gate: %d", ret);
+                       return ret;
+               }
+
+               ret = tegra_powergate_sequence_power_up(powergate,
+                                                       priv->dc_clk[0]);
+               if (ret < 0) {
+                       log_err("failed to power up DISP gate: %d", ret);
+                       return ret;
+               }
+       }
+
        if (tegra_display_probe(priv, (void *)plat->base)) {
                debug("%s: Failed to probe display driver\n", __func__);
                return -1;
@@ -493,16 +517,19 @@ static const struct video_ops tegra_lcd_ops = {
 static const struct tegra_dc_soc_info tegra20_dc_soc_info = {
        .has_timer = true,
        .has_rgb = true,
+       .has_pgate = false,
 };
 
 static const struct tegra_dc_soc_info tegra30_dc_soc_info = {
        .has_timer = false,
        .has_rgb = true,
+       .has_pgate = false,
 };
 
 static const struct tegra_dc_soc_info tegra114_dc_soc_info = {
        .has_timer = false,
        .has_rgb = false,
+       .has_pgate = true,
 };
 
 static const struct udevice_id tegra_lcd_ids[] = {