]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
video: tegra20: dsi: add reset support
authorSvyatoslav Ryhel <clamor95@gmail.com>
Tue, 23 Jan 2024 17:16:30 +0000 (19:16 +0200)
committerAnatolij Gustschin <agust@denx.de>
Sun, 21 Apr 2024 07:07:01 +0000 (09:07 +0200)
Implement reset use to discard any changes which could have been
applied to DSI before and can interfere with current configuration.

Tested-by: Ion Agorria <ion@agorria.com> # HTC One X
Tested-by: Svyatoslav Ryhel <clamor95@gmail.com> # Nvidia Tegratab T114
Signed-off-by: Svyatoslav Ryhel <clamor95@gmail.com>
drivers/video/tegra20/tegra-dsi.c

index 25a629535ec6c34b7aa128cd7cf0daa0da9db992..fc9ca1310a44f14faff8c4226300958725570a95 100644 (file)
@@ -12,6 +12,7 @@
 #include <mipi_dsi.h>
 #include <backlight.h>
 #include <panel.h>
+#include <reset.h>
 #include <linux/delay.h>
 #include <linux/err.h>
 #include <linux/time.h>
@@ -863,6 +864,7 @@ static int tegra_dsi_bridge_probe(struct udevice *dev)
        struct tegra_dsi_priv *priv = dev_get_priv(dev);
        struct mipi_dsi_device *device = &priv->device;
        struct mipi_dsi_panel_plat *mipi_plat;
+       struct reset_ctl reset_ctl;
        int ret;
 
        priv->version = dev_get_driver_data(dev);
@@ -876,6 +878,13 @@ static int tegra_dsi_bridge_probe(struct udevice *dev)
        priv->video_fifo_depth = 480;
        priv->host_fifo_depth = 64;
 
+       ret = reset_get_by_name(dev, "dsi", &reset_ctl);
+       if (ret) {
+               log_debug("%s: reset_get_by_name() failed: %d\n",
+                         __func__, ret);
+               return ret;
+       }
+
        ret = uclass_get_device_by_phandle(UCLASS_REGULATOR, dev,
                                           "avdd-dsi-csi-supply", &priv->avdd);
        if (ret)
@@ -914,12 +923,17 @@ static int tegra_dsi_bridge_probe(struct udevice *dev)
 
        tegra_dsi_get_format(device->format, &priv->format);
 
+       reset_assert(&reset_ctl);
+
        ret = regulator_set_enable_if_allowed(priv->avdd, true);
        if (ret && ret != -ENOSYS)
                return ret;
 
        tegra_dsi_init_clocks(dev);
 
+       mdelay(2);
+       reset_deassert(&reset_ctl);
+
        return 0;
 }