Re: [PATCH v2 13/20] drm/edid: convert drm_parse_cea_ext() to use cea db iter

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, May 03, 2022 at 12:23:58PM +0300, Jani Nikula wrote:
> Iterate through all CTA data blocks across all CTA Extensions and
> DisplayID data blocks.
> 
> Cc: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx>
> Signed-off-by: Jani Nikula <jani.nikula@xxxxxxxxx>
> ---
>  drivers/gpu/drm/drm_edid.c | 25 +++++++++++++------------
>  1 file changed, 13 insertions(+), 12 deletions(-)
> 
> diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
> index 3433d9fa4799..98b2e6164468 100644
> --- a/drivers/gpu/drm/drm_edid.c
> +++ b/drivers/gpu/drm/drm_edid.c
> @@ -5497,8 +5497,9 @@ static void drm_parse_cea_ext(struct drm_connector *connector,
>  			      const struct edid *edid)
>  {
>  	struct drm_display_info *info = &connector->display_info;
> +	const struct cea_db *db;
> +	struct cea_db_iter iter;
>  	const u8 *edid_ext;
> -	int i, start, end;
>  
>  	edid_ext = drm_find_cea_extension(edid);
>  	if (!edid_ext)
> @@ -5517,26 +5518,26 @@ static void drm_parse_cea_ext(struct drm_connector *connector,
>  			info->color_formats |= DRM_COLOR_FORMAT_YCBCR422;
>  	}
>  
> -	if (cea_db_offsets(edid_ext, &start, &end))
> -		return;
> -
> -	for_each_cea_db(edid_ext, i, start, end) {
> -		const u8 *db = &edid_ext[i];
> +	cea_db_iter_edid_begin(edid, &iter);
> +	cea_db_iter_for_each(db, &iter) {
> +		/* FIXME: convert parsers to use struct cea_db */
> +		const u8 *data = (const u8 *)db;
>  
>  		if (cea_db_is_hdmi_vsdb(db))
> -			drm_parse_hdmi_vsdb_video(connector, db);
> +			drm_parse_hdmi_vsdb_video(connector, data);
>  		if (cea_db_is_hdmi_forum_vsdb(db) ||
>  		    cea_db_is_hdmi_forum_scdb(db))

BTW looks like all of these could be 'else if'. Dunno if that actually
affects the generated code though, or if the compiler is smart enough
to see only one condition can by true.

Reviewed-by: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx>

> -			drm_parse_hdmi_forum_scds(connector, db);
> +			drm_parse_hdmi_forum_scds(connector, data);
>  		if (cea_db_is_microsoft_vsdb(db))
> -			drm_parse_microsoft_vsdb(connector, db);
> +			drm_parse_microsoft_vsdb(connector, data);
>  		if (cea_db_is_y420cmdb(db))
> -			drm_parse_y420cmdb_bitmap(connector, db);
> +			drm_parse_y420cmdb_bitmap(connector, data);
>  		if (cea_db_is_vcdb(db))
> -			drm_parse_vcdb(connector, db);
> +			drm_parse_vcdb(connector, data);
>  		if (cea_db_is_hdmi_hdr_metadata_block(db))
> -			drm_parse_hdr_metadata_block(connector, db);
> +			drm_parse_hdr_metadata_block(connector, data);
>  	}
> +	cea_db_iter_end(&iter);
>  }
>  
>  static
> -- 
> 2.30.2

-- 
Ville Syrjälä
Intel



[Index of Archives]     [AMD Graphics]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux