drm/edid: Match edid quirks with identity
authorHsin-Yi Wang <hsinyi@chromium.org>
Thu, 7 Mar 2024 22:57:43 +0000 (14:57 -0800)
committerDouglas Anderson <dianders@chromium.org>
Thu, 14 Mar 2024 15:23:27 +0000 (08:23 -0700)
Currently edid quirks are matched by panel id only.

Modify it to match with identity so it's easier to be extended
for more complex matching if required.

Signed-off-by: Hsin-Yi Wang <hsinyi@chromium.org>
Reviewed-by: Jani Nikula <jani.nikula@intel.com>
Reviewed-by: Douglas Anderson <dianders@chromium.org>
Signed-off-by: Douglas Anderson <dianders@chromium.org>
Link: https://patchwork.freedesktop.org/patch/msgid/20240307230653.1807557-4-hsinyi@chromium.org
drivers/gpu/drm/drm_edid.c

index 8fed2131f424134e9e1653072f367d7b1b67aea8..ea77577a37864080912bfac7699db6b738cafe4d 100644 (file)
@@ -114,13 +114,15 @@ struct drm_edid_match_closure {
 
 #define EDID_QUIRK(vend_chr_0, vend_chr_1, vend_chr_2, product_id, _quirks) \
 { \
-       .panel_id = drm_edid_encode_panel_id(vend_chr_0, vend_chr_1, vend_chr_2, \
-                                            product_id), \
+       .ident = { \
+               .panel_id = drm_edid_encode_panel_id(vend_chr_0, vend_chr_1, \
+                                                    vend_chr_2, product_id), \
+       }, \
        .quirks = _quirks \
 }
 
 static const struct edid_quirk {
-       u32 panel_id;
+       const struct drm_edid_ident ident;
        u32 quirks;
 } edid_quirk_list[] = {
        /* Acer AL1706 */
@@ -2921,16 +2923,17 @@ EXPORT_SYMBOL(drm_edid_duplicate);
  * @drm_edid: EDID to process
  *
  * This tells subsequent routines what fixes they need to apply.
+ *
+ * Return: A u32 represents the quirks to apply.
  */
 static u32 edid_get_quirks(const struct drm_edid *drm_edid)
 {
-       u32 panel_id = drm_edid_get_panel_id(drm_edid);
        const struct edid_quirk *quirk;
        int i;
 
        for (i = 0; i < ARRAY_SIZE(edid_quirk_list); i++) {
                quirk = &edid_quirk_list[i];
-               if (quirk->panel_id == panel_id)
+               if (drm_edid_match(drm_edid, &quirk->ident))
                        return quirk->quirks;
        }