Commit 9975af04 authored by Jani Nikula's avatar Jani Nikula
Browse files

drm/edid: convert drm_detect_monitor_audio() to use cea db iter



Iterate through all CEA data blocks.

Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: default avatarJani Nikula <jani.nikula@intel.com>
Reviewed-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/a7f0c380da9526f8dd6f758d7a748bca7b4da6ce.1651569697.git.jani.nikula@intel.com
parent 4ce08703
Loading
Loading
Loading
Loading
+13 −10
Original line number Diff line number Diff line
@@ -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;
}