| .. | .. |
|---|
| 91 | 91 | u8 str[13]; |
|---|
| 92 | 92 | } __attribute__((packed)); |
|---|
| 93 | 93 | |
|---|
| 94 | +#define DRM_EDID_DEFAULT_GTF_SUPPORT_FLAG 0x00 |
|---|
| 95 | +#define DRM_EDID_RANGE_LIMITS_ONLY_FLAG 0x01 |
|---|
| 96 | +#define DRM_EDID_SECONDARY_GTF_SUPPORT_FLAG 0x02 |
|---|
| 97 | +#define DRM_EDID_CVT_SUPPORT_FLAG 0x04 |
|---|
| 98 | + |
|---|
| 94 | 99 | struct detailed_data_monitor_range { |
|---|
| 95 | 100 | u8 min_vfreq; |
|---|
| 96 | 101 | u8 max_vfreq; |
|---|
| .. | .. |
|---|
| 177 | 182 | #define DRM_EDID_INPUT_BLANK_TO_BLACK (1 << 4) |
|---|
| 178 | 183 | #define DRM_EDID_INPUT_VIDEO_LEVEL (3 << 5) |
|---|
| 179 | 184 | #define DRM_EDID_INPUT_DIGITAL (1 << 7) |
|---|
| 180 | | -#define DRM_EDID_DIGITAL_DEPTH_MASK (7 << 4) |
|---|
| 181 | | -#define DRM_EDID_DIGITAL_DEPTH_UNDEF (0 << 4) |
|---|
| 182 | | -#define DRM_EDID_DIGITAL_DEPTH_6 (1 << 4) |
|---|
| 183 | | -#define DRM_EDID_DIGITAL_DEPTH_8 (2 << 4) |
|---|
| 184 | | -#define DRM_EDID_DIGITAL_DEPTH_10 (3 << 4) |
|---|
| 185 | | -#define DRM_EDID_DIGITAL_DEPTH_12 (4 << 4) |
|---|
| 186 | | -#define DRM_EDID_DIGITAL_DEPTH_14 (5 << 4) |
|---|
| 187 | | -#define DRM_EDID_DIGITAL_DEPTH_16 (6 << 4) |
|---|
| 188 | | -#define DRM_EDID_DIGITAL_DEPTH_RSVD (7 << 4) |
|---|
| 189 | | -#define DRM_EDID_DIGITAL_TYPE_UNDEF (0) |
|---|
| 190 | | -#define DRM_EDID_DIGITAL_TYPE_DVI (1) |
|---|
| 191 | | -#define DRM_EDID_DIGITAL_TYPE_HDMI_A (2) |
|---|
| 192 | | -#define DRM_EDID_DIGITAL_TYPE_HDMI_B (3) |
|---|
| 193 | | -#define DRM_EDID_DIGITAL_TYPE_MDDI (4) |
|---|
| 194 | | -#define DRM_EDID_DIGITAL_TYPE_DP (5) |
|---|
| 185 | +#define DRM_EDID_DIGITAL_DEPTH_MASK (7 << 4) /* 1.4 */ |
|---|
| 186 | +#define DRM_EDID_DIGITAL_DEPTH_UNDEF (0 << 4) /* 1.4 */ |
|---|
| 187 | +#define DRM_EDID_DIGITAL_DEPTH_6 (1 << 4) /* 1.4 */ |
|---|
| 188 | +#define DRM_EDID_DIGITAL_DEPTH_8 (2 << 4) /* 1.4 */ |
|---|
| 189 | +#define DRM_EDID_DIGITAL_DEPTH_10 (3 << 4) /* 1.4 */ |
|---|
| 190 | +#define DRM_EDID_DIGITAL_DEPTH_12 (4 << 4) /* 1.4 */ |
|---|
| 191 | +#define DRM_EDID_DIGITAL_DEPTH_14 (5 << 4) /* 1.4 */ |
|---|
| 192 | +#define DRM_EDID_DIGITAL_DEPTH_16 (6 << 4) /* 1.4 */ |
|---|
| 193 | +#define DRM_EDID_DIGITAL_DEPTH_RSVD (7 << 4) /* 1.4 */ |
|---|
| 194 | +#define DRM_EDID_DIGITAL_TYPE_MASK (7 << 0) /* 1.4 */ |
|---|
| 195 | +#define DRM_EDID_DIGITAL_TYPE_UNDEF (0 << 0) /* 1.4 */ |
|---|
| 196 | +#define DRM_EDID_DIGITAL_TYPE_DVI (1 << 0) /* 1.4 */ |
|---|
| 197 | +#define DRM_EDID_DIGITAL_TYPE_HDMI_A (2 << 0) /* 1.4 */ |
|---|
| 198 | +#define DRM_EDID_DIGITAL_TYPE_HDMI_B (3 << 0) /* 1.4 */ |
|---|
| 199 | +#define DRM_EDID_DIGITAL_TYPE_MDDI (4 << 0) /* 1.4 */ |
|---|
| 200 | +#define DRM_EDID_DIGITAL_TYPE_DP (5 << 0) /* 1.4 */ |
|---|
| 201 | +#define DRM_EDID_DIGITAL_DFP_1_X (1 << 0) /* 1.3 */ |
|---|
| 195 | 202 | |
|---|
| 196 | 203 | #define DRM_EDID_FEATURE_DEFAULT_GTF (1 << 0) |
|---|
| 197 | 204 | #define DRM_EDID_FEATURE_PREFERRED_TIMING (1 << 1) |
|---|
| .. | .. |
|---|
| 222 | 229 | DRM_EDID_YCBCR420_DC_36 | \ |
|---|
| 223 | 230 | DRM_EDID_YCBCR420_DC_30) |
|---|
| 224 | 231 | |
|---|
| 225 | | -#define DRM_EDID_CLRMETRY_xvYCC_601 (1 << 0) |
|---|
| 226 | | -#define DRM_EDID_CLRMETRY_xvYCC_709 (1 << 1) |
|---|
| 227 | | -#define DRM_EDID_CLRMETRY_sYCC_601 (1 << 2) |
|---|
| 228 | | -#define DRM_EDID_CLRMETRY_ADBYCC_601 (1 << 3) |
|---|
| 229 | | -#define DRM_EDID_CLRMETRY_ADB_RGB (1 << 4) |
|---|
| 230 | | -#define DRM_EDID_CLRMETRY_BT2020_CYCC (1 << 5) |
|---|
| 231 | | -#define DRM_EDID_CLRMETRY_BT2020_YCC (1 << 6) |
|---|
| 232 | | -#define DRM_EDID_CLRMETRY_BT2020_RGB (1 << 7) |
|---|
| 233 | | -#define DRM_EDID_CLRMETRY_DCI_P3 (1 << 15) |
|---|
| 234 | | - |
|---|
| 232 | +#ifdef CONFIG_NO_GKI |
|---|
| 235 | 233 | /* HDMI 2.1 additional fields */ |
|---|
| 236 | 234 | #define DRM_EDID_MAX_FRL_RATE_MASK 0xf0 |
|---|
| 237 | 235 | #define DRM_EDID_FAPA_START_LOCATION (1 << 0) |
|---|
| .. | .. |
|---|
| 261 | 259 | #define DRM_EDID_DSC_MAX_FRL_RATE_MASK 0xf0 |
|---|
| 262 | 260 | #define DRM_EDID_DSC_MAX_SLICES 0xf |
|---|
| 263 | 261 | #define DRM_EDID_DSC_TOTAL_CHUNK_KBYTES 0x3f |
|---|
| 262 | +#endif |
|---|
| 264 | 263 | |
|---|
| 265 | 264 | /* ELD Header Block */ |
|---|
| 266 | 265 | #define DRM_ELD_HEADER_BLOCK_SIZE 4 |
|---|
| .. | .. |
|---|
| 319 | 318 | #define DRM_ELD_MONITOR_NAME_STRING 20 /* offsets 20..(20+mnl-1) inclusive */ |
|---|
| 320 | 319 | |
|---|
| 321 | 320 | #define DRM_ELD_CEA_SAD(mnl, sad) (20 + (mnl) + 3 * (sad)) |
|---|
| 322 | | - |
|---|
| 323 | | -/* HDMI 2.0 */ |
|---|
| 324 | | -#define DRM_EDID_3D_INDEPENDENT_VIEW (1 << 2) |
|---|
| 325 | | -#define DRM_EDID_3D_DUAL_VIEW (1 << 1) |
|---|
| 326 | | -#define DRM_EDID_3D_OSD_DISPARITY (1 << 0) |
|---|
| 327 | 321 | |
|---|
| 328 | 322 | struct edid { |
|---|
| 329 | 323 | u8 header[8]; |
|---|
| .. | .. |
|---|
| 399 | 393 | |
|---|
| 400 | 394 | int |
|---|
| 401 | 395 | drm_hdmi_avi_infoframe_from_display_mode(struct hdmi_avi_infoframe *frame, |
|---|
| 402 | | - const struct drm_display_mode *mode, |
|---|
| 403 | | - bool is_hdmi2_sink); |
|---|
| 396 | + const struct drm_connector *connector, |
|---|
| 397 | + const struct drm_display_mode *mode); |
|---|
| 404 | 398 | int |
|---|
| 405 | 399 | drm_hdmi_vendor_infoframe_from_display_mode(struct hdmi_vendor_infoframe *frame, |
|---|
| 406 | | - struct drm_connector *connector, |
|---|
| 400 | + const struct drm_connector *connector, |
|---|
| 407 | 401 | const struct drm_display_mode *mode); |
|---|
| 402 | + |
|---|
| 403 | +void |
|---|
| 404 | +drm_hdmi_avi_infoframe_colorspace(struct hdmi_avi_infoframe *frame, |
|---|
| 405 | + const struct drm_connector_state *conn_state); |
|---|
| 406 | + |
|---|
| 407 | +void |
|---|
| 408 | +drm_hdmi_avi_infoframe_bars(struct hdmi_avi_infoframe *frame, |
|---|
| 409 | + const struct drm_connector_state *conn_state); |
|---|
| 410 | + |
|---|
| 408 | 411 | void |
|---|
| 409 | 412 | drm_hdmi_avi_infoframe_quant_range(struct hdmi_avi_infoframe *frame, |
|---|
| 413 | + const struct drm_connector *connector, |
|---|
| 410 | 414 | const struct drm_display_mode *mode, |
|---|
| 411 | | - enum hdmi_quantization_range rgb_quant_range, |
|---|
| 412 | | - bool rgb_quant_range_selectable, |
|---|
| 413 | | - bool is_hdmi2_sink); |
|---|
| 415 | + enum hdmi_quantization_range rgb_quant_range); |
|---|
| 414 | 416 | |
|---|
| 415 | 417 | int |
|---|
| 416 | 418 | drm_hdmi_infoframe_set_hdr_metadata(struct hdmi_drm_infoframe *frame, |
|---|
| .. | .. |
|---|
| 514 | 516 | struct edid *drm_get_edid_switcheroo(struct drm_connector *connector, |
|---|
| 515 | 517 | struct i2c_adapter *adapter); |
|---|
| 516 | 518 | |
|---|
| 517 | | -enum hdmi_picture_aspect drm_get_cea_aspect_ratio(const u8 video_code); |
|---|
| 518 | 519 | bool drm_detect_hdmi_monitor(struct edid *edid); |
|---|
| 519 | | -bool drm_rgb_quant_range_selectable(struct edid *edid); |
|---|
| 520 | 520 | enum hdmi_quantization_range |
|---|
| 521 | 521 | drm_default_rgb_quant_range(const struct drm_display_mode *mode); |
|---|
| 522 | 522 | void drm_set_preferred_mode(struct drm_connector *connector, |
|---|
| .. | .. |
|---|
| 525 | 525 | int drm_edid_header_is_valid(const u8 *raw_edid); |
|---|
| 526 | 526 | bool drm_edid_block_valid(u8 *raw_edid, int block, bool print_bad_edid, |
|---|
| 527 | 527 | bool *edid_corrupt); |
|---|
| 528 | | -bool drm_edid_is_valid(struct edid *edid); |
|---|
| 529 | | -struct drm_display_mode *drm_mode_find_dmt(struct drm_device *dev, |
|---|
| 530 | | - int hsize, int vsize, int fresh, |
|---|
| 531 | | - bool rb); |
|---|
| 528 | +struct drm_display_mode * |
|---|
| 529 | +drm_display_mode_from_cea_vic(struct drm_device *dev, |
|---|
| 530 | + u8 video_code); |
|---|
| 531 | + |
|---|
| 532 | 532 | #ifdef CONFIG_DRM_EDID |
|---|
| 533 | 533 | struct edid *drm_get_edid(struct drm_connector *connector, |
|---|
| 534 | 534 | struct i2c_adapter *adapter); |
|---|
| .. | .. |
|---|
| 541 | 541 | bool drm_detect_monitor_audio(struct edid *edid); |
|---|
| 542 | 542 | void drm_edid_get_monitor_name(struct edid *edid, char *name, |
|---|
| 543 | 543 | int buflen); |
|---|
| 544 | +bool drm_edid_is_valid(struct edid *edid); |
|---|
| 545 | +bool drm_edid_are_equal(const struct edid *edid1, const struct edid *edid2); |
|---|
| 546 | +struct drm_display_mode *drm_mode_find_dmt(struct drm_device *dev, |
|---|
| 547 | + int hsize, int vsize, int fresh, |
|---|
| 548 | + bool rb); |
|---|
| 544 | 549 | #else |
|---|
| 545 | 550 | static inline struct edid *drm_get_edid(struct drm_connector *connector, |
|---|
| 546 | 551 | struct i2c_adapter *adapter) |
|---|
| .. | .. |
|---|
| 584 | 589 | int buflen) |
|---|
| 585 | 590 | { |
|---|
| 586 | 591 | } |
|---|
| 592 | + |
|---|
| 593 | +static inline bool drm_edid_is_valid(struct edid *edid) |
|---|
| 594 | +{ |
|---|
| 595 | + return false; |
|---|
| 596 | +} |
|---|
| 597 | + |
|---|
| 598 | +static inline bool drm_edid_are_equal(const struct edid *edid1, const struct edid *edid2) |
|---|
| 599 | +{ |
|---|
| 600 | + return false; |
|---|
| 601 | +} |
|---|
| 602 | + |
|---|
| 603 | +static inline struct drm_display_mode *drm_mode_find_dmt(struct drm_device *dev, |
|---|
| 604 | + int hsize, int vsize, int fresh, |
|---|
| 605 | + bool rb) |
|---|
| 606 | +{ |
|---|
| 607 | + return NULL; |
|---|
| 608 | +} |
|---|
| 587 | 609 | #endif |
|---|
| 588 | 610 | |
|---|
| 589 | 611 | #endif /* __DRM_EDID_H__ */ |
|---|