[igt-dev] [PATCH i-g-t 3/5] lib/igt_edid: add support for native DTDs in CEA extension blocks

Simon Ser
2019-07-02T12:50:42Z

Native Detailed Timing Descriptors follow the Data Block Collection in the CEA
extension.

Signed-off-by: Simon Ser <simon.ser@intel.com>
---
lib/igt_edid.c | 6 ++++--
lib/igt_edid.h | 2 +-
lib/igt_kms.c | 3 +--
3 files changed, 6 insertions(+), 5 deletions(-)

diff --git a/lib/igt_edid.c b/lib/igt_edid.c
index c93d8fa8bca0..93202c138161 100644
--- a/lib/igt_edid.c
+++ b/lib/igt_edid.c
@@ -408,15 +408,17 @@ size_t edid_cea_data_block_set_speaker_alloc(struct edid_cea_data_block *block,
}

void edid_ext_set_cea(struct edid_ext *ext, size_t data_blocks_size,
- uint8_t flags)
+ size_t native_dtds_len, uint8_t flags)
{
struct edid_cea *cea = &ext->data.cea;

ext->tag = EDID_EXT_CEA;

+ assert(native_dtds_len <= 0x0F);
+ assert((flags & 0x0F) == 0);
cea->revision = 3;
cea->dtd_start = 4 + data_blocks_size;
- cea->misc = flags; /* just flags, no DTD */
+ cea->misc = flags | native_dtds_len;
}

void edid_ext_update_cea_checksum(struct edid_ext *ext)
diff --git a/lib/igt_edid.h b/lib/igt_edid.h
index 0ac851c0d74a..702c14c54b5e 100644
--- a/lib/igt_edid.h
+++ b/lib/igt_edid.h
@@ -359,6 +359,6 @@ size_t edid_cea_data_block_set_hdmi_vsd(struct edid_cea_data_block *block,
size_t edid_cea_data_block_set_speaker_alloc(struct edid_cea_data_block *block,
const struct cea_speaker_alloc *speakers);
void edid_ext_set_cea(struct edid_ext *ext, size_t data_blocks_size,
- uint8_t flags);
+ size_t native_dtds_len, uint8_t flags);

#endif
diff --git a/lib/igt_kms.c b/lib/igt_kms.c
index f8185edf6e8b..45c79a380daf 100644
--- a/lib/igt_kms.c
+++ b/lib/igt_kms.c
@@ -226,8 +226,7 @@ generate_audio_edid(unsigned char raw_edid[static AUDIO_EDID_LENGTH],

assert(cea_data_size <= sizeof(edid_cea->data));

- edid_ext_set_cea(edid_ext, cea_data_size,
- EDID_CEA_BASIC_AUDIO);
+ edid_ext_set_cea(edid_ext, cea_data_size, 0, EDID_CEA_BASIC_AUDIO);

edid_update_checksum(edid);
edid_ext_update_cea_checksum(edid_ext);
--
2.22.0