On Wed, Mar 02, 2022 at 05:35:08PM +0800, Lee Shawn C wrote:
Try to find and parse more CEA ext blocks if edid->extensions is greater than one.
v2: split prvious patch to two. And do CEA block parsing in this one. v3: simplify this patch based on previous change.
Cc: Jani Nikula jani.nikula@linux.intel.com Cc: Ville Syrjala ville.syrjala@linux.intel.com Cc: Ankit Nautiyal ankit.k.nautiyal@intel.com Signed-off-by: Lee Shawn C shawn.c.lee@intel.com
drivers/gpu/drm/drm_edid.c | 36 ++++++++++++++++++++++-------------- 1 file changed, 22 insertions(+), 14 deletions(-)
diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c index 375e70d9de86..c4a47465ba76 100644 --- a/drivers/gpu/drm/drm_edid.c +++ b/drivers/gpu/drm/drm_edid.c @@ -4319,16 +4319,24 @@ static void drm_parse_y420cmdb_bitmap(struct drm_connector *connector, static int add_cea_modes(struct drm_connector *connector, struct edid *edid) {
- const u8 *cea, *db, *hdmi = NULL, *video = NULL;
- u8 dbl, hdmi_len, video_len = 0;
- const u8 *cea, *db;
- u8 dbl, hdmi_len; int modes = 0, ext_index = 0;
- int i, start, end;
I think everything here apart from modes and ext_index can be moved into the loop.
Apart from that 1-2 look fine to me. intel-gfx wasn't cc:d however so we have no ci results for any of this.
- cea = drm_find_cea_extension(edid, &ext_index);
- if (cea && cea_revision(cea) >= 3) {
int i, start, end;
for (;;) {
const u8 *hdmi = NULL, *video = NULL;
u8 video_len = 0;
cea = drm_find_cea_extension(edid, &ext_index);
if (!cea)
break;
if (cea_revision(cea) < 3)
continue;
if (cea_db_offsets(cea, &start, &end))
return 0;
continue;
for_each_cea_db(cea, i, start, end) { db = &cea[i];
@@ -4350,15 +4358,15 @@ add_cea_modes(struct drm_connector *connector, struct edid *edid) dbl - 1); } }
}
/*
* We parse the HDMI VSDB after having added the cea modes as we will
* be patching their flags when the sink supports stereo 3D.
*/
if (hdmi)
modes += do_hdmi_vsdb_modes(connector, hdmi, hdmi_len, video,
video_len);
/*
* We parse the HDMI VSDB after having added the cea modes as we will
* be patching their flags when the sink supports stereo 3D.
*/
if (hdmi)
modes += do_hdmi_vsdb_modes(connector, hdmi, hdmi_len, video,
video_len);
}
return modes;
}
2.17.1