]> git.baikalelectronics.ru Git - kernel.git/commitdiff
drm/edid: convert drm_detect_monitor_audio() to use cea db iter
authorJani Nikula <jani.nikula@intel.com>
Tue, 3 May 2022 09:23:57 +0000 (12:23 +0300)
committerJani Nikula <jani.nikula@intel.com>
Thu, 5 May 2022 17:28:20 +0000 (20:28 +0300)
Iterate through all CEA data blocks.

Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/a7f0c380da9526f8dd6f758d7a748bca7b4da6ce.1651569697.git.jani.nikula@intel.com
drivers/gpu/drm/drm_edid.c

index ca594d502941ff2148513dcd8df434c1336f4b64..3433d9fa4799f55a8ef8047498376b3ac5decde4 100644 (file)
@@ -5166,10 +5166,10 @@ EXPORT_SYMBOL(drm_detect_hdmi_monitor);
  */
 bool drm_detect_monitor_audio(const struct edid *edid)
 {
+       const struct cea_db *db;
+       struct cea_db_iter iter;
        const u8 *edid_ext;
-       int i, j;
        bool has_audio = false;
-       int start_offset, end_offset;
 
        edid_ext = drm_find_cea_extension(edid);
        if (!edid_ext)
@@ -5183,18 +5183,21 @@ bool drm_detect_monitor_audio(const struct edid *edid)
                goto end;
        }
 
-       if (cea_db_offsets(edid_ext, &start_offset, &end_offset))
-               goto end;
+       cea_db_iter_edid_begin(edid, &iter);
+       cea_db_iter_for_each(db, &iter) {
+               if (cea_db_tag(db) == CTA_DB_AUDIO) {
+                       const u8 *data = cea_db_data(db);
+                       int i;
 
-       for_each_cea_db(edid_ext, i, start_offset, end_offset) {
-               if (cea_db_tag(&edid_ext[i]) == CTA_DB_AUDIO) {
-                       has_audio = true;
-                       for (j = 1; j < cea_db_payload_len(&edid_ext[i]) + 1; j += 3)
+                       for (i = 0; i < cea_db_payload_len(db); i += 3)
                                DRM_DEBUG_KMS("CEA audio format %d\n",
-                                             (edid_ext[i + j] >> 3) & 0xf);
-                       goto end;
+                                             (data[i] >> 3) & 0xf);
+                       has_audio = true;
+                       break;
                }
        }
+       cea_db_iter_end(&iter);
+
 end:
        return has_audio;
 }