[PATCH resend 2/2] drm: Parse color format information in CEA blocks

Jesse Barnes jbarnes at virtuousgeek.org
Tue Feb 28 10:06:05 PST 2012


On Tue, 28 Feb 2012 10:21:45 +0100
Lars-Peter Clausen <lars at metafoo.de> wrote:

> The CEA extension block has a field which describes which YCbCr modes are
> supported by the device, use it to fill the drm_display_info color_formats
> fields. Also the existence of a CEA extension block is used as indication
> that the device supports RGB.
> 
> Signed-off-by: Lars-Peter Clausen <lars at metafoo.de>
> ---
>  drivers/gpu/drm/drm_edid.c |   31 +++++++++++++++++++++----------
>  1 files changed, 21 insertions(+), 10 deletions(-)
> 
> diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
> index a6bb2f5..390aeca 100644
> --- a/drivers/gpu/drm/drm_edid.c
> +++ b/drivers/gpu/drm/drm_edid.c
> @@ -1313,6 +1313,8 @@ add_detailed_modes(struct drm_connector *connector, struct edid *edid,
>  #define VENDOR_BLOCK    0x03
>  #define SPEAKER_BLOCK	0x04
>  #define EDID_BASIC_AUDIO	(1 << 6)
> +#define EDID_CEA_YCRCB444	(1 << 5)
> +#define EDID_CEA_YCRCB422	(1 << 4)
>  
>  /**
>   * Search EDID for CEA extension block.
> @@ -1667,13 +1669,29 @@ static void drm_add_display_info(struct edid *edid,
>  	info->bpc = 0;
>  	info->color_formats = 0;
>  
> -	/* Only defined for 1.4 with digital displays */
> -	if (edid->revision < 4)
> +	if (edid->revision < 3)
>  		return;
>  
>  	if (!(edid->input & DRM_EDID_INPUT_DIGITAL))
>  		return;
>  
> +	/* Get data from CEA blocks if present */
> +	edid_ext = drm_find_cea_extension(edid);
> +	if (edid_ext) {
> +		info->cea_rev = edid_ext[1];
> +
> +		/* The existence of a CEA block should imply RGB support */
> +		info->color_formats = DRM_COLOR_FORMAT_RGB444;
> +		if (edid_ext[3] & EDID_CEA_YCRCB444)
> +			info->color_formats |= DRM_COLOR_FORMAT_YCRCB444;
> +		if (edid_ext[3] & EDID_CEA_YCRCB422)
> +			info->color_formats |= DRM_COLOR_FORMAT_YCRCB422;
> +	}
> +
> +	/* Only defined for 1.4 with digital displays */
> +	if (edid->revision < 4)
> +		return;
> +
>  	switch (edid->input & DRM_EDID_DIGITAL_DEPTH_MASK) {
>  	case DRM_EDID_DIGITAL_DEPTH_6:
>  		info->bpc = 6;
> @@ -1699,18 +1717,11 @@ static void drm_add_display_info(struct edid *edid,
>  		break;
>  	}
>  
> -	info->color_formats = DRM_COLOR_FORMAT_RGB444;
> +	info->color_formats |= DRM_COLOR_FORMAT_RGB444;
>  	if (edid->features & DRM_EDID_FEATURE_RGB_YCRCB444)
>  		info->color_formats |= DRM_COLOR_FORMAT_YCRCB444;
>  	if (edid->features & DRM_EDID_FEATURE_RGB_YCRCB422)
>  		info->color_formats |= DRM_COLOR_FORMAT_YCRCB422;
> -
> -	/* Get data from CEA blocks if present */
> -	edid_ext = drm_find_cea_extension(edid);
> -	if (!edid_ext)
> -		return;
> -
> -	info->cea_rev = edid_ext[1];
>  }
>  
>  /**

Reviewed-by: Jesse Barnes <jbarnes at virtuousgeek.org>

-- 
Jesse Barnes, Intel Open Source Technology Center
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 836 bytes
Desc: not available
URL: <http://lists.freedesktop.org/archives/dri-devel/attachments/20120228/e9744cb9/attachment.pgp>


More information about the dri-devel mailing list