]> git.proxmox.com Git - mirror_ubuntu-kernels.git/commitdiff
drm/bridge: tfp410: fix de-skew value retrieval from DT
authorRicardo Cañuelo <ricardo.canuelo@collabora.com>
Wed, 17 Jun 2020 09:46:32 +0000 (11:46 +0200)
committerSam Ravnborg <sam@ravnborg.org>
Sat, 20 Jun 2020 18:43:33 +0000 (20:43 +0200)
The tfp410 has a data de-skew feature that allows the user to compensate
the skew between IDCK and the pixel data and control signals.

In the driver, the setup and hold times are calculated from the de-skew
value. This retrieves the deskew value from the DT using the proper
datatype and range check as described by the binding (u32 from 0 to 7).

This fix results from a change in the ti,tfp410 DT binding.

Signed-off-by: Ricardo Cañuelo <ricardo.canuelo@collabora.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
Link: https://patchwork.freedesktop.org/patch/msgid/20200617094633.19663-4-ricardo.canuelo@collabora.com
drivers/gpu/drm/bridge/ti-tfp410.c

index e3eb6364c0f707d9f6c256c5d4526df581769097..dfde811f3411a08ea4465a3839f88d38d427826e 100644 (file)
@@ -220,7 +220,7 @@ static int tfp410_parse_timings(struct tfp410 *dvi, bool i2c)
        struct device_node *ep;
        u32 pclk_sample = 0;
        u32 bus_width = 24;
-       s32 deskew = 0;
+       u32 deskew = 0;
 
        /* Start with defaults. */
        *timings = tfp410_default_timings;
@@ -274,12 +274,12 @@ static int tfp410_parse_timings(struct tfp410 *dvi, bool i2c)
        }
 
        /* Get the setup and hold time from vendor-specific properties. */
-       of_property_read_u32(dvi->dev->of_node, "ti,deskew", (u32 *)&deskew);
-       if (deskew < -4 || deskew > 3)
+       of_property_read_u32(dvi->dev->of_node, "ti,deskew", &deskew);
+       if (deskew > 7)
                return -EINVAL;
 
-       timings->setup_time_ps = min(0, 1200 - 350 * deskew);
-       timings->hold_time_ps = min(0, 1300 + 350 * deskew);
+       timings->setup_time_ps = min(0, 1200 - 350 * ((s32)deskew - 4));
+       timings->hold_time_ps = min(0, 1300 + 350 * ((s32)deskew - 4));
 
        return 0;
 }