Skip to content

Commit da05a5a

Browse files
jbarnes993airlied
authored andcommitted
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: Jesse Barnes <jbarnes@virtuousgeek.org> Reviewed-by: Alex Deucher <alexdeucher@gmail.com> Signed-off-by: Dave Airlie <airlied@redhat.com>
1 parent 3b11228 commit da05a5a

File tree

3 files changed

+19
-1
lines changed

3 files changed

+19
-1
lines changed

drivers/gpu/drm/drm_edid.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1429,6 +1429,7 @@ static void drm_add_display_info(struct edid *edid,
14291429

14301430
/* driver figures it out in this case */
14311431
info->bpc = 0;
1432+
info->color_formats = 0;
14321433

14331434
/* Only defined for 1.4 with digital displays */
14341435
if (edid->revision < 4)
@@ -1461,6 +1462,12 @@ static void drm_add_display_info(struct edid *edid,
14611462
info->bpc = 0;
14621463
break;
14631464
}
1465+
1466+
info->color_formats = DRM_COLOR_FORMAT_RGB444;
1467+
if (info->color_formats & DRM_EDID_FEATURE_RGB_YCRCB444)
1468+
info->color_formats = DRM_COLOR_FORMAT_YCRCB444;
1469+
if (info->color_formats & DRM_EDID_FEATURE_RGB_YCRCB422)
1470+
info->color_formats = DRM_COLOR_FORMAT_YCRCB422;
14641471
}
14651472

14661473
/**

include/drm/drm_crtc.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,9 @@ enum subpixel_order {
183183
SubPixelNone,
184184
};
185185

186-
186+
#define DRM_COLOR_FORMAT_RGB444 (1<<0)
187+
#define DRM_COLOR_FORMAT_YCRCB444 (1<<1)
188+
#define DRM_COLOR_FORMAT_YCRCB422 (1<<2)
187189
/*
188190
* Describes a given display (e.g. CRT or flat panel) and its limitations.
189191
*/
@@ -201,6 +203,7 @@ struct drm_display_info {
201203
unsigned int bpc;
202204

203205
enum subpixel_order subpixel_order;
206+
u32 color_formats;
204207

205208
char *raw_edid; /* if any */
206209
};

include/drm/drm_edid.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,15 @@ struct detailed_timing {
175175
#define DRM_EDID_FEATURE_DEFAULT_GTF (1 << 0)
176176
#define DRM_EDID_FEATURE_PREFERRED_TIMING (1 << 1)
177177
#define DRM_EDID_FEATURE_STANDARD_COLOR (1 << 2)
178+
/* If analog */
178179
#define DRM_EDID_FEATURE_DISPLAY_TYPE (3 << 3) /* 00=mono, 01=rgb, 10=non-rgb, 11=unknown */
180+
/* If digital */
181+
#define DRM_EDID_FEATURE_COLOR_MASK (3 << 3)
182+
#define DRM_EDID_FEATURE_RGB (0 << 3)
183+
#define DRM_EDID_FEATURE_RGB_YCRCB444 (1 << 3)
184+
#define DRM_EDID_FEATURE_RGB_YCRCB422 (2 << 3)
185+
#define DRM_EDID_FEATURE_RGB_YCRCB (3 << 3) /* both 4:4:4 and 4:2:2 */
186+
179187
#define DRM_EDID_FEATURE_PM_ACTIVE_OFF (1 << 5)
180188
#define DRM_EDID_FEATURE_PM_SUSPEND (1 << 6)
181189
#define DRM_EDID_FEATURE_PM_STANDBY (1 << 7)

0 commit comments

Comments
 (0)