Commit da05a5a71ad8fc7c51d526151be193b7ef6e6c95

Authored by Jesse Barnes
Committed by Dave Airlie
1 parent 3b11228b54

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>

Showing 3 changed files with 19 additions and 1 deletions Side-by-side Diff

drivers/gpu/drm/drm_edid.c
... ... @@ -1429,6 +1429,7 @@
1429 1429  
1430 1430 /* driver figures it out in this case */
1431 1431 info->bpc = 0;
  1432 + info->color_formats = 0;
1432 1433  
1433 1434 /* Only defined for 1.4 with digital displays */
1434 1435 if (edid->revision < 4)
... ... @@ -1461,6 +1462,12 @@
1461 1462 info->bpc = 0;
1462 1463 break;
1463 1464 }
  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;
1464 1471 }
1465 1472  
1466 1473 /**
include/drm/drm_crtc.h
... ... @@ -183,7 +183,9 @@
183 183 SubPixelNone,
184 184 };
185 185  
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)
187 189 /*
188 190 * Describes a given display (e.g. CRT or flat panel) and its limitations.
189 191 */
... ... @@ -201,6 +203,7 @@
201 203 unsigned int bpc;
202 204  
203 205 enum subpixel_order subpixel_order;
  206 + u32 color_formats;
204 207  
205 208 char *raw_edid; /* if any */
206 209 };
include/drm/drm_edid.h
... ... @@ -175,7 +175,15 @@
175 175 #define DRM_EDID_FEATURE_DEFAULT_GTF (1 << 0)
176 176 #define DRM_EDID_FEATURE_PREFERRED_TIMING (1 << 1)
177 177 #define DRM_EDID_FEATURE_STANDARD_COLOR (1 << 2)
  178 +/* If analog */
178 179 #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 +
179 187 #define DRM_EDID_FEATURE_PM_ACTIVE_OFF (1 << 5)
180 188 #define DRM_EDID_FEATURE_PM_SUSPEND (1 << 6)
181 189 #define DRM_EDID_FEATURE_PM_STANDBY (1 << 7)