Check if panel driver has display timings and get those.
If panel driver does not pass timing, try to find timing
under rgb node for backwards compatibility.

Tested-by: Robert Eckelmann <longnose...@gmail.com> # ASUS TF101 T20
Tested-by: Nicolas Chauvet <kwiz...@gmail.com> # Paz00
Tested-by: Andreas Westman Dorcsak <hed...@yahoo.com> # ASUS TF T30
Tested-by: Svyatoslav Ryhel <clamo...@gmail.com> # LG P895 T30
Signed-off-by: Svyatoslav Ryhel <clamo...@gmail.com>
---
 drivers/video/tegra20/tegra-dc.c | 29 +++++++++++++++++------------
 1 file changed, 17 insertions(+), 12 deletions(-)

diff --git a/drivers/video/tegra20/tegra-dc.c b/drivers/video/tegra20/tegra-dc.c
index ff67cc8989..91298b7b7f 100644
--- a/drivers/video/tegra20/tegra-dc.c
+++ b/drivers/video/tegra20/tegra-dc.c
@@ -380,18 +380,6 @@ static int tegra_lcd_of_to_plat(struct udevice *dev)
                return -EINVAL;
        }
 
-       ret = fdtdec_decode_display_timing(blob, rgb, 0, &priv->timing);
-       if (ret) {
-               debug("%s: Cannot read display timing for '%s' (ret=%d)\n",
-                     __func__, dev->name, ret);
-               return -EINVAL;
-       }
-       timing = &priv->timing;
-       priv->width = timing->hactive.typ;
-       priv->height = timing->vactive.typ;
-       priv->pixel_clock = timing->pixelclock.typ;
-       priv->log2_bpp = VIDEO_BPP16;
-
        /*
         * Sadly the panel phandle is in an rgb subnode so we cannot use
         * uclass_get_device_by_phandle().
@@ -401,6 +389,7 @@ static int tegra_lcd_of_to_plat(struct udevice *dev)
                debug("%s: Cannot find panel information\n", __func__);
                return -EINVAL;
        }
+
        ret = uclass_get_device_by_of_offset(UCLASS_PANEL, panel_node,
                                             &priv->panel);
        if (ret) {
@@ -409,6 +398,22 @@ static int tegra_lcd_of_to_plat(struct udevice *dev)
                return ret;
        }
 
+       ret = panel_get_display_timing(priv->panel, &priv->timing);
+       if (ret) {
+               ret = fdtdec_decode_display_timing(blob, rgb, 0, &priv->timing);
+               if (ret) {
+                       debug("%s: Cannot read display timing for '%s' 
(ret=%d)\n",
+                             __func__, dev->name, ret);
+                       return -EINVAL;
+               }
+       }
+
+       timing = &priv->timing;
+       priv->width = timing->hactive.typ;
+       priv->height = timing->vactive.typ;
+       priv->pixel_clock = timing->pixelclock.typ;
+       priv->log2_bpp = VIDEO_BPP16;
+
        return 0;
 }
 
-- 
2.37.2

Reply via email to