int
ddc_read_edid(
i2c_tag_t tag
uint8_t *dest
size_t len
)
)
reads a VESA Extended Display Identification Data block (EDID) via
VESA Display Data Channel (DDCv2). DDCv2 is a protocol for data exchange
between display devices (such as monitors and flat panels) and host
machines using an I2C bus.
The
tag
argument is a machine-dependent tag used to specify the I2C
bus on which the DDCv2 device is located.
The
dest
argument is a pointer to a buffer where the EDID data will be stored.
The
len
argument is the amount of data to read into the buffer. (The buffer must be
large enough.) Typically, this value will be 128, which is the size of a
normal EDID data block.
Normally the EDID data block will be post-processed with the
edid_parse()
function.
)
function returns zero on success, and non-zero otherwise.
)
function is part of the
ddc(4)
driver, and is only included in the kernel if that driver is also included.
)
to retrieve and print information about a monitor:
...
/* initialize i2c tag... */
...
if ((ddc_read_edid(tag, buffer, 128) == 0) &&
(edid_parse(buffer, &info) == 0))
edid_print(info);
...
struct edid_info info;
i2c_tag_t tag;
char buffer[128];
Note that this must be called before the PCI bus is attached during autoconfiguration.