Merge branch '2020-05-15-kconfig-migrations'
[oweals/u-boot.git] / common / edid.c
index 3d0809ad11c2d2e1ca615a9cac681233cb1e6dd5..f99f42dc406743495b2317b270f05f7623a2f26b 100644 (file)
@@ -1,11 +1,10 @@
+// SPDX-License-Identifier: GPL-2.0+
 /*
  * Copyright (c) 2012 The Chromium OS Authors.
  *
  * (C) Copyright 2010
  * Petr Stetiar <ynezz@true.cz>
  *
- * SPDX-License-Identifier:    GPL-2.0+
- *
  * Contains stolen code from ddcprobe project which is:
  * Copyright (C) Nalin Dahyabhai <bigfun@pobox.com>
  */
@@ -169,8 +168,12 @@ static bool cea_is_hdmi_vsdb_present(struct edid_cea861_info *info)
        return false;
 }
 
-int edid_get_timing(u8 *buf, int buf_size, struct display_timing *timing,
-                   int *panel_bits_per_colourp)
+int edid_get_timing_validate(u8 *buf, int buf_size,
+                            struct display_timing *timing,
+                            int *panel_bits_per_colourp,
+                            bool (*mode_valid)(void *priv,
+                                       const struct display_timing *timing),
+                            void *mode_valid_priv)
 {
        struct edid1_info *edid = (struct edid1_info *)buf;
        bool timing_done;
@@ -194,8 +197,14 @@ int edid_get_timing(u8 *buf, int buf_size, struct display_timing *timing,
                desc = &edid->monitor_details.descriptor[i];
                if (desc->zero_flag_1 != 0) {
                        decode_timing((u8 *)desc, timing);
-                       timing_done = true;
-                       break;
+                       if (mode_valid)
+                               timing_done = mode_valid(mode_valid_priv,
+                                                        timing);
+                       else
+                               timing_done = true;
+
+                       if (timing_done)
+                               break;
                }
        }
        if (!timing_done)
@@ -226,6 +235,14 @@ int edid_get_timing(u8 *buf, int buf_size, struct display_timing *timing,
        return 0;
 }
 
+int edid_get_timing(u8 *buf, int buf_size, struct display_timing *timing,
+                   int *panel_bits_per_colourp)
+{
+       return edid_get_timing_validate(buf, buf_size, timing,
+                                       panel_bits_per_colourp, NULL, NULL);
+}
+
+
 /**
  * Snip the tailing whitespace/return of a string.
  *