NAME
ddc —
VESA Display Data Channel
V2
SYNOPSIS
#include <dev/i2c/ddcvar.h>
int
ddc_read_edid(
i2c_tag_t tag,
uint8_t *dest,
size_t len);
DESCRIPTION
The
ddc_read_edid() 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.
RETURN VALUES
The
ddc_read_edid() function returns zero on success, and
non-zero otherwise.
ENVIRONMENT
The
ddc_read_edid() function is part of the
ddc(4) driver, and is only included
in the kernel if that driver is also included.
EXAMPLES
The following code uses
ddc_read_edid() to retrieve and print
information about a monitor:
struct edid_info info;
i2c_tag_t tag;
char buffer[128];
...
/* initialize i2c tag... */
...
if ((ddc_read_edid(tag, buffer, 128) == 0) &&
(edid_parse(buffer, &info) == 0))
edid_print(info);
...
Note that this must be called before the PCI bus is attached during
autoconfiguration.
SEE ALSO
ddc(4),
edid(9),
iic(9)
HISTORY
DDCv2 support was added in
NetBSD 4.0.
AUTHORS
Garrett D'Amore
<
gdamore@NetBSD.org>