blob: af9c0f0752e2d3ecf69782c6cdb04839a694c9f7 [file] [log] [blame]
// Copyright 2021 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef SRC_LIB_ELD_ELD_H_
#define SRC_LIB_ELD_ELD_H_
#include <hwreg/bitfields.h>
#include "src/graphics/display/lib/edid/edid.h"
namespace hda {
// From HDA Specification 1.0a, section 7.3.3.34.1.
// The ELD (EDID Like Data) buffer is composed of 3 blocks, the header, baseline and vendor.
// 1. The header has a fixed length and is defined below.
// 2. The baseline block can be divided into 3 parts, part 1 is defined below.
// Part 2 is the monitor_name_string extracted from from 16 byte product description of the
// Source Product Description Info Frame.
// Part 3 is an array of ShortAudioDescriptors.
// 3. The vendor block is defined bytes starting from:
// 4 + baseline_eld_len * 4 to the ELD buffer size - 1.
struct EldHeader {
uint32_t header;
DEF_SUBFIELD(header, 31, 27, eld_ver);
DEF_SUBFIELD(header, 15, 8, baseline_eld_len);
};
struct EldBaselinePart1 {
uint8_t byte1;
DEF_SUBFIELD(byte1, 7, 5, cea_edid_ver);
DEF_SUBFIELD(byte1, 4, 0, mnl);
uint8_t byte2;
DEF_SUBFIELD(byte2, 7, 4, sad_count);
DEF_SUBFIELD(byte2, 3, 2, conn_type);
DEF_SUBBIT(byte2, 1, s_ai);
DEF_SUBBIT(byte2, 0, hdcp);
uint8_t aud_synch_delay;
uint8_t byte4;
DEF_SUBBIT(byte4, 6, rlrc);
DEF_SUBBIT(byte4, 5, flrc);
DEF_SUBBIT(byte4, 4, rc);
DEF_SUBBIT(byte4, 3, rlr);
DEF_SUBBIT(byte4, 2, fc);
DEF_SUBBIT(byte4, 1, lfe);
DEF_SUBBIT(byte4, 0, lfr);
uint64_t port_id;
uint16_t manufacturer_name;
uint16_t product_code;
} __PACKED;
} // namespace hda
#endif // SRC_LIB_ELD_ELD_H_