Commit da05a5a7 authored by Jesse Barnes's avatar Jesse Barnes Committed by Dave Airlie

drm: parse color format support for digital displays

EDID 1.4 digital displays report the color spaces they support in the
features block.  Add support for grabbing this data and stuffing it into
the display_info struct for driver use.
Signed-off-by: default avatarJesse Barnes <jbarnes@virtuousgeek.org>
Reviewed-by: default avatarAlex Deucher <alexdeucher@gmail.com>
Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
parent 3b11228b
...@@ -1429,6 +1429,7 @@ static void drm_add_display_info(struct edid *edid, ...@@ -1429,6 +1429,7 @@ static void drm_add_display_info(struct edid *edid,
/* driver figures it out in this case */ /* driver figures it out in this case */
info->bpc = 0; info->bpc = 0;
info->color_formats = 0;
/* Only defined for 1.4 with digital displays */ /* Only defined for 1.4 with digital displays */
if (edid->revision < 4) if (edid->revision < 4)
...@@ -1461,6 +1462,12 @@ static void drm_add_display_info(struct edid *edid, ...@@ -1461,6 +1462,12 @@ static void drm_add_display_info(struct edid *edid,
info->bpc = 0; info->bpc = 0;
break; break;
} }
info->color_formats = DRM_COLOR_FORMAT_RGB444;
if (info->color_formats & DRM_EDID_FEATURE_RGB_YCRCB444)
info->color_formats = DRM_COLOR_FORMAT_YCRCB444;
if (info->color_formats & DRM_EDID_FEATURE_RGB_YCRCB422)
info->color_formats = DRM_COLOR_FORMAT_YCRCB422;
} }
/** /**
......
...@@ -183,7 +183,9 @@ enum subpixel_order { ...@@ -183,7 +183,9 @@ enum subpixel_order {
SubPixelNone, SubPixelNone,
}; };
#define DRM_COLOR_FORMAT_RGB444 (1<<0)
#define DRM_COLOR_FORMAT_YCRCB444 (1<<1)
#define DRM_COLOR_FORMAT_YCRCB422 (1<<2)
/* /*
* Describes a given display (e.g. CRT or flat panel) and its limitations. * Describes a given display (e.g. CRT or flat panel) and its limitations.
*/ */
...@@ -201,6 +203,7 @@ struct drm_display_info { ...@@ -201,6 +203,7 @@ struct drm_display_info {
unsigned int bpc; unsigned int bpc;
enum subpixel_order subpixel_order; enum subpixel_order subpixel_order;
u32 color_formats;
char *raw_edid; /* if any */ char *raw_edid; /* if any */
}; };
......
...@@ -175,7 +175,15 @@ struct detailed_timing { ...@@ -175,7 +175,15 @@ struct detailed_timing {
#define DRM_EDID_FEATURE_DEFAULT_GTF (1 << 0) #define DRM_EDID_FEATURE_DEFAULT_GTF (1 << 0)
#define DRM_EDID_FEATURE_PREFERRED_TIMING (1 << 1) #define DRM_EDID_FEATURE_PREFERRED_TIMING (1 << 1)
#define DRM_EDID_FEATURE_STANDARD_COLOR (1 << 2) #define DRM_EDID_FEATURE_STANDARD_COLOR (1 << 2)
/* If analog */
#define DRM_EDID_FEATURE_DISPLAY_TYPE (3 << 3) /* 00=mono, 01=rgb, 10=non-rgb, 11=unknown */ #define DRM_EDID_FEATURE_DISPLAY_TYPE (3 << 3) /* 00=mono, 01=rgb, 10=non-rgb, 11=unknown */
/* If digital */
#define DRM_EDID_FEATURE_COLOR_MASK (3 << 3)
#define DRM_EDID_FEATURE_RGB (0 << 3)
#define DRM_EDID_FEATURE_RGB_YCRCB444 (1 << 3)
#define DRM_EDID_FEATURE_RGB_YCRCB422 (2 << 3)
#define DRM_EDID_FEATURE_RGB_YCRCB (3 << 3) /* both 4:4:4 and 4:2:2 */
#define DRM_EDID_FEATURE_PM_ACTIVE_OFF (1 << 5) #define DRM_EDID_FEATURE_PM_ACTIVE_OFF (1 << 5)
#define DRM_EDID_FEATURE_PM_SUSPEND (1 << 6) #define DRM_EDID_FEATURE_PM_SUSPEND (1 << 6)
#define DRM_EDID_FEATURE_PM_STANDBY (1 << 7) #define DRM_EDID_FEATURE_PM_STANDBY (1 << 7)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment