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

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

 



On Tue, 28 Feb 2012 10:21:45 +0100
Lars-Peter Clausen <lars@xxxxxxxxxx> 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@xxxxxxxxxx>
> ---
>  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@xxxxxxxxxxxxxxxx>

-- 
Jesse Barnes, Intel Open Source Technology Center

Attachment: signature.asc
Description: PGP signature

_______________________________________________
dri-devel mailing list
dri-devel@xxxxxxxxxxxxxxxxxxxxx
http://lists.freedesktop.org/mailman/listinfo/dri-devel

[Index of Archives]     [Linux DRI Users]     [Linux Intel Graphics]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux