Do calculation of vsync and hsync from range limits
EDID block according to the spec. EDID 1.4.

Signed-off-by: Vitaly Prosyak <vitaly.prosyak at amd.com>
---
 drivers/gpu/drm/drm_edid.c | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
index 7e49962..601152b 100644
--- a/drivers/gpu/drm/drm_edid.c
+++ b/drivers/gpu/drm/drm_edid.c
@@ -1977,11 +1977,11 @@ mode_in_hsync_range(const struct drm_display_mode *mode,
        int hsync, hmin, hmax;

        hmin = t[7];
-       if (edid->revision >= 4)
-           hmin += ((t[4] & 0x04) ? 255 : 0);
+       if (edid->revision >= 4 && ((t[4] & 0x0c) == 0x0c))
+           hmin += 255 ;
        hmax = t[8];
-       if (edid->revision >= 4)
-           hmax += ((t[4] & 0x08) ? 255 : 0);
+       if (edid->revision >= 4 && (t[4] & 0x08))
+           hmax += 255;
        hsync = drm_mode_hsync(mode);

        return (hsync <= hmax && hsync >= hmin);
@@ -1994,11 +1994,11 @@ mode_in_vsync_range(const struct drm_display_mode *mode,
        int vsync, vmin, vmax;

        vmin = t[5];
-       if (edid->revision >= 4)
-           vmin += ((t[4] & 0x01) ? 255 : 0);
+       if (edid->revision >= 4 && ((t[4] & 0x03) == 0x03))
+           vmin += 255;
        vmax = t[6];
-       if (edid->revision >= 4)
-           vmax += ((t[4] & 0x02) ? 255 : 0);
+       if (edid->revision >= 4 && (t[4] & 0x02))
+           vmax += 255;
        vsync = drm_mode_vrefresh(mode);

        return (vsync <= vmax && vsync >= vmin);
-- 
1.9.1

Reply via email to