[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