X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=include%2Fedid.h;h=2562733061c0a4e2103ad0557c80047882ce16cf;hb=1c1ed441b0d1d7d5fbf02cf89a390c04b18f8ba3;hp=18ec1d5ab0cfb38345905b681e760daba60df112;hpb=ab77f24119e80257de4ab017b877f92f96980562;p=oweals%2Fu-boot.git diff --git a/include/edid.h b/include/edid.h index 18ec1d5ab0..2562733061 100644 --- a/include/edid.h +++ b/include/edid.h @@ -1,11 +1,10 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ /* * Copyright (c) 2012 The Chromium OS Authors. * * (C) Copyright 2010 * Petr Stetiar * - * SPDX-License-Identifier: GPL-2.0+ - * * Contains stolen code from ddcprobe project which is: * Copyright (C) Nalin Dahyabhai */ @@ -15,6 +14,13 @@ #include +/* Size of the EDID data */ +#define EDID_SIZE 128 +#define EDID_EXT_SIZE 256 + +/* OUI of HDMI vendor specific data block */ +#define HDMI_IEEE_OUI 0x000c03 + #define GET_BIT(_x, _pos) \ (((_x) >> (_pos)) & 1) #define GET_BITS(_x, _pos_msb, _pos_lsb) \ @@ -230,6 +236,13 @@ struct edid1_info { unsigned char checksum; } __attribute__ ((__packed__)); +enum edid_cea861_db_types { + EDID_CEA861_DB_AUDIO = 0x01, + EDID_CEA861_DB_VIDEO = 0x02, + EDID_CEA861_DB_VENDOR = 0x03, + EDID_CEA861_DB_SPEAKER = 0x04, +}; + struct edid_cea861_info { unsigned char extension_tag; #define EDID_CEA861_EXTENSION_TAG 0x02 @@ -247,6 +260,10 @@ struct edid_cea861_info { #define EDID_CEA861_DTD_COUNT(_x) \ GET_BITS(((_x).dtd_count), 3, 0) unsigned char data[124]; +#define EDID_CEA861_DB_TYPE(_x, offset) \ + GET_BITS((_x).data[offset], 7, 5) +#define EDID_CEA861_DB_LEN(_x, offset) \ + GET_BITS((_x).data[offset], 4, 0) } __attribute__ ((__packed__)); /** @@ -287,4 +304,42 @@ int edid_get_ranges(struct edid1_info *edid, unsigned int *hmin, unsigned int *hmax, unsigned int *vmin, unsigned int *vmax); +struct display_timing; + +/** + * edid_get_timing_validate() - Get basic digital display parameters with + * mode selection callback + * + * @param buf Buffer containing EDID data + * @param buf_size Size of buffer in bytes + * @param timing Place to put preferring timing information + * @param panel_bits_per_colourp Place to put the number of bits per + * colour supported by the panel. This will be set to + * -1 if not available + * @param mode_valid Callback validating mode, returning true is mode is + * supported, false otherwise. + * @parem valid_priv Pointer to private data for mode_valid callback + * @return 0 if timings are OK, -ve on error + */ +int edid_get_timing_validate(u8 *buf, int buf_size, + struct display_timing *timing, + int *panel_bits_per_colourp, + bool (*mode_valid)(void *priv, + const struct display_timing *timing), + void *mode_valid_priv); + +/** + * edid_get_timing() - Get basic digital display parameters + * + * @param buf Buffer containing EDID data + * @param buf_size Size of buffer in bytes + * @param timing Place to put preferring timing information + * @param panel_bits_per_colourp Place to put the number of bits per + * colour supported by the panel. This will be set to + * -1 if not available + * @return 0 if timings are OK, -ve on error + */ +int edid_get_timing(u8 *buf, int buf_size, struct display_timing *timing, + int *panel_bits_per_colourp); + #endif /* __EDID_H_ */