diff options
Diffstat (limited to 'arch/arm/plat-omap/include/plat/edid.h')
-rw-r--r-- | arch/arm/plat-omap/include/plat/edid.h | 387 |
1 files changed, 189 insertions, 198 deletions
diff --git a/arch/arm/plat-omap/include/plat/edid.h b/arch/arm/plat-omap/include/plat/edid.h index 21d8459cbfdc..0358bfd4cb8e 100644 --- a/arch/arm/plat-omap/include/plat/edid.h +++ b/arch/arm/plat-omap/include/plat/edid.h @@ -3,7 +3,7 @@ * * Copyright (C) 2009 Texas Instruments * Author: Mythri P K <mythripk@ti.com> - * with some of the ENUM's and structure derived from Yong Zhi's + * with some of the ENUM's and structure derived from Yong Zhi's * hdmi.h(Now obsolete) * * EDID.c to read the EDID content , given the 256 Bytes EDID. @@ -20,7 +20,6 @@ * You should have received a copy of the GNU General Public License along with * this program. If not, see <http://www.gnu.org/licenses/>. * History: - * */ #ifndef _EDID_H_ @@ -29,96 +28,97 @@ #include <plat/display.h> /* HDMI EDID Extension Data Block Tags */ -#define HDMI_EDID_EX_DATABLOCK_TAG_MASK 0xE0 -#define HDMI_EDID_EX_DATABLOCK_LEN_MASK 0x1F - - -#define EDID_TIMING_DESCRIPTOR_SIZE 0x12 -#define EDID_DESCRIPTOR_BLOCK0_ADDRESS 0x36 -#define EDID_DESCRIPTOR_BLOCK1_ADDRESS 0x80 -#define EDID_SIZE_BLOCK0_TIMING_DESCRIPTOR 4 -#define EDID_SIZE_BLOCK1_TIMING_DESCRIPTOR 4 - - -#define HDMI_EDID_DETAILED_TIMING_OFFSET 0x36 /*EDID Detailed Timing - Info 0 begin offset*/ -#define HDMI_EDID_PIX_CLK_OFFSET 0 -#define HDMI_EDID_H_ACTIVE_OFFSET 2 -#define HDMI_EDID_H_BLANKING_OFFSET 3 -#define HDMI_EDID_V_ACTIVE_OFFSET 5 -#define HDMI_EDID_V_BLANKING_OFFSET 6 -#define HDMI_EDID_H_SYNC_OFFSET 8 -#define HDMI_EDID_H_SYNC_PW_OFFSET 9 -#define HDMI_EDID_V_SYNC_OFFSET 10 -#define HDMI_EDID_V_SYNC_PW_OFFSET 10 -#define HDMI_EDID_H_IMAGE_SIZE_OFFSET 12 -#define HDMI_EDID_V_IMAGE_SIZE_OFFSET 13 -#define HDMI_EDID_H_BORDER_OFFSET 15 -#define HDMI_EDID_V_BORDER_OFFSET 16 -#define HDMI_EDID_FLAGS_OFFSET 17 - -/* HDMI Connected States */ -#define HDMI_STATE_NOMONITOR 0 /* No HDMI monitor connected*/ -#define HDMI_STATE_CONNECTED 1 /* HDMI monitor connected but powered off*/ -#define HDMI_STATE_ON 2 /* HDMI monitor connected and powered on*/ - - -/* HDMI EDID Length */ -#define HDMI_EDID_MAX_LENGTH 512 - -/* HDMI EDID DTDs */ -#define HDMI_EDID_MAX_DTDS 4 - -/* HDMI EDID DTD Tags */ -#define HDMI_EDID_DTD_TAG_MONITOR_NAME 0xFC -#define HDMI_EDID_DTD_TAG_MONITOR_SERIALNUM 0xFF -#define HDMI_EDID_DTD_TAG_MONITOR_LIMITS 0xFD -#define HDMI_EDID_DTD_TAG_STANDARD_TIMING_DATA 0xFA -#define HDMI_EDID_DTD_TAG_COLOR_POINT_DATA 0xFB -#define HDMI_EDID_DTD_TAG_ASCII_STRING 0xFE - -#define HDMI_IMG_FORMAT_MAX_LENGTH 20 -#define HDMI_AUDIO_FORMAT_MAX_LENGTH 10 - -/* HDMI EDID Extenion Data Block Values: Video */ -#define HDMI_EDID_EX_VIDEO_NATIVE 0x80 -#define HDMI_EDID_EX_VIDEO_MASK 0x7F -#define HDMI_EDID_EX_VIDEO_MAX 35 - -#define HDMI_EDID_EX_VIDEO_640x480p_60Hz_4_3 1 -#define HDMI_EDID_EX_VIDEO_720x480p_60Hz_4_3 2 -#define HDMI_EDID_EX_VIDEO_720x480p_60Hz_16_9 3 -#define HDMI_EDID_EX_VIDEO_1280x720p_60Hz_16_9 4 -#define HDMI_EDID_EX_VIDEO_1920x1080i_60Hz_16_9 5 -#define HDMI_EDID_EX_VIDEO_720x480i_60Hz_4_3 6 -#define HDMI_EDID_EX_VIDEO_720x480i_60Hz_16_9 7 -#define HDMI_EDID_EX_VIDEO_720x240p_60Hz_4_3 8 -#define HDMI_EDID_EX_VIDEO_720x240p_60Hz_16_9 9 -#define HDMI_EDID_EX_VIDEO_2880x480i_60Hz_4_3 10 -#define HDMI_EDID_EX_VIDEO_2880x480i_60Hz_16_9 11 -#define HDMI_EDID_EX_VIDEO_2880x480p_60Hz_4_3 12 -#define HDMI_EDID_EX_VIDEO_2880x480p_60Hz_16_9 13 -#define HDMI_EDID_EX_VIDEO_1440x480p_60Hz_4_3 14 -#define HDMI_EDID_EX_VIDEO_1440x480p_60Hz_16_9 15 -#define HDMI_EDID_EX_VIDEO_1920x1080p_60Hz_16_9 16 -#define HDMI_EDID_EX_VIDEO_720x576p_50Hz_4_3 17 -#define HDMI_EDID_EX_VIDEO_720x576p_50Hz_16_9 18 -#define HDMI_EDID_EX_VIDEO_1280x720p_50Hz_16_9 19 -#define HDMI_EDID_EX_VIDEO_1920x1080i_50Hz_16_9 20 -#define HDMI_EDID_EX_VIDEO_720x576i_50Hz_4_3 21 -#define HDMI_EDID_EX_VIDEO_720x576i_50Hz_16_9 22 -#define HDMI_EDID_EX_VIDEO_720x288p_50Hz_4_3 23 -#define HDMI_EDID_EX_VIDEO_720x288p_50Hz_16_9 24 -#define HDMI_EDID_EX_VIDEO_2880x576i_50Hz_4_3 25 -#define HDMI_EDID_EX_VIDEO_2880x576i_50Hz_16_9 26 -#define HDMI_EDID_EX_VIDEO_2880x288p_50Hz_4_3 27 -#define HDMI_EDID_EX_VIDEO_2880x288p_50Hz_16_9 28 -#define HDMI_EDID_EX_VIDEO_1440x576p_50Hz_4_3 29 -#define HDMI_EDID_EX_VIDEO_1440x576p_50Hz_16_9 30 -#define HDMI_EDID_EX_VIDEO_1920x1080p_50Hz_16_9 31 -#define HDMI_EDID_EX_VIDEO_1920x1080p_24Hz_16_9 32 -#define HDMI_EDID_EX_VIDEO_1920x1080p_25Hz_16_9 33 -#define HDMI_EDID_EX_VIDEO_1920x1080p_30Hz_16_9 34 +#define HDMI_EDID_EX_DATABLOCK_TAG_MASK 0xE0 +#define HDMI_EDID_EX_DATABLOCK_LEN_MASK 0x1F + +#define EDID_TIMING_DESCRIPTOR_SIZE 0x12 +#define EDID_DESCRIPTOR_BLOCK0_ADDRESS 0x36 +#define EDID_DESCRIPTOR_BLOCK1_ADDRESS 0x80 +#define EDID_SIZE_BLOCK0_TIMING_DESCRIPTOR 4 +#define EDID_SIZE_BLOCK1_TIMING_DESCRIPTOR 4 + +/* EDID Detailed Timing Info 0 begin offset */ +#define HDMI_EDID_DETAILED_TIMING_OFFSET 0x36 + +#define HDMI_EDID_PIX_CLK_OFFSET 0 +#define HDMI_EDID_H_ACTIVE_OFFSET 2 +#define HDMI_EDID_H_BLANKING_OFFSET 3 +#define HDMI_EDID_V_ACTIVE_OFFSET 5 +#define HDMI_EDID_V_BLANKING_OFFSET 6 +#define HDMI_EDID_H_SYNC_OFFSET 8 +#define HDMI_EDID_H_SYNC_PW_OFFSET 9 +#define HDMI_EDID_V_SYNC_OFFSET 10 +#define HDMI_EDID_V_SYNC_PW_OFFSET 11 +#define HDMI_EDID_H_IMAGE_SIZE_OFFSET 12 +#define HDMI_EDID_V_IMAGE_SIZE_OFFSET 13 +#define HDMI_EDID_H_BORDER_OFFSET 15 +#define HDMI_EDID_V_BORDER_OFFSET 16 +#define HDMI_EDID_FLAGS_OFFSET 17 + +/* HDMI Connected States */ +#define HDMI_STATE_NOMONITOR 0 /* No HDMI monitor connected*/ +#define HDMI_STATE_CONNECTED 1 /* HDMI monitor connected but powered off */ +#define HDMI_STATE_ON 2 /* HDMI monitor connected and powered on*/ + +/* HDMI EDID Length */ +#define HDMI_EDID_MAX_LENGTH 512 + +/* HDMI EDID DTDs */ +#define HDMI_EDID_MAX_DTDS 4 + +/* HDMI EDID DTD Tags */ +#define HDMI_EDID_DTD_TAG_MONITOR_NAME 0xFC +#define HDMI_EDID_DTD_TAG_MONITOR_SERIALNUM 0xFF +#define HDMI_EDID_DTD_TAG_MONITOR_LIMITS 0xFD +#define HDMI_EDID_DTD_TAG_STANDARD_TIMING_DATA 0xFA +#define HDMI_EDID_DTD_TAG_COLOR_POINT_DATA 0xFB +#define HDMI_EDID_DTD_TAG_ASCII_STRING 0xFE + +#define HDMI_IMG_FORMAT_MAX_LENGTH 20 +#define HDMI_AUDIO_FORMAT_MAX_LENGTH 10 + +/* HDMI EDID Extenion Data Block Values: Video */ +#define HDMI_EDID_EX_VIDEO_NATIVE 0x80 +#define HDMI_EDID_EX_VIDEO_MASK 0x7F +#define HDMI_EDID_EX_VIDEO_MAX 35 + +#define HDMI_EDID_EX_VIDEO_640x480p_60Hz_4_3 1 +#define HDMI_EDID_EX_VIDEO_720x480p_60Hz_4_3 2 +#define HDMI_EDID_EX_VIDEO_720x480p_60Hz_16_9 3 +#define HDMI_EDID_EX_VIDEO_1280x720p_60Hz_16_9 4 +#define HDMI_EDID_EX_VIDEO_1920x1080i_60Hz_16_9 5 +#define HDMI_EDID_EX_VIDEO_720x480i_60Hz_4_3 6 +#define HDMI_EDID_EX_VIDEO_720x480i_60Hz_16_9 7 +#define HDMI_EDID_EX_VIDEO_720x240p_60Hz_4_3 8 +#define HDMI_EDID_EX_VIDEO_720x240p_60Hz_16_9 9 +#define HDMI_EDID_EX_VIDEO_2880x480i_60Hz_4_3 10 +#define HDMI_EDID_EX_VIDEO_2880x480i_60Hz_16_9 11 +#define HDMI_EDID_EX_VIDEO_2880x480p_60Hz_4_3 12 +#define HDMI_EDID_EX_VIDEO_2880x480p_60Hz_16_9 13 +#define HDMI_EDID_EX_VIDEO_1440x480p_60Hz_4_3 14 +#define HDMI_EDID_EX_VIDEO_1440x480p_60Hz_16_9 15 +#define HDMI_EDID_EX_VIDEO_1920x1080p_60Hz_16_9 16 +#define HDMI_EDID_EX_VIDEO_720x576p_50Hz_4_3 17 +#define HDMI_EDID_EX_VIDEO_720x576p_50Hz_16_9 18 +#define HDMI_EDID_EX_VIDEO_1280x720p_50Hz_16_9 19 +#define HDMI_EDID_EX_VIDEO_1920x1080i_50Hz_16_9 20 +#define HDMI_EDID_EX_VIDEO_720x576i_50Hz_4_3 21 +#define HDMI_EDID_EX_VIDEO_720x576i_50Hz_16_9 22 +#define HDMI_EDID_EX_VIDEO_720x288p_50Hz_4_3 23 +#define HDMI_EDID_EX_VIDEO_720x288p_50Hz_16_9 24 +#define HDMI_EDID_EX_VIDEO_2880x576i_50Hz_4_3 25 +#define HDMI_EDID_EX_VIDEO_2880x576i_50Hz_16_9 26 +#define HDMI_EDID_EX_VIDEO_2880x288p_50Hz_4_3 27 +#define HDMI_EDID_EX_VIDEO_2880x288p_50Hz_16_9 28 +#define HDMI_EDID_EX_VIDEO_1440x576p_50Hz_4_3 29 +#define HDMI_EDID_EX_VIDEO_1440x576p_50Hz_16_9 30 +#define HDMI_EDID_EX_VIDEO_1920x1080p_50Hz_16_9 31 +#define HDMI_EDID_EX_VIDEO_1920x1080p_24Hz_16_9 32 +#define HDMI_EDID_EX_VIDEO_1920x1080p_25Hz_16_9 33 +#define HDMI_EDID_EX_VIDEO_1920x1080p_30Hz_16_9 34 + +#define OMAP_HDMI_TIMINGS_NB 34 +#define OMAP_HDMI_TIMINGS_VESA_START 15 #ifdef __cplusplus extern "C" { @@ -132,149 +132,141 @@ enum extension_edid_db { }; struct img_edid { -bool pref; -int code; + bool pref; + int code; }; struct image_format { -int length; -struct img_edid fmt[HDMI_IMG_FORMAT_MAX_LENGTH]; + int length; + struct img_edid fmt[HDMI_IMG_FORMAT_MAX_LENGTH]; }; struct audio_edid { -int num_of_ch; -int format; + int num_of_ch; + int format; }; struct audio_format { -int length; -struct audio_edid fmt[HDMI_AUDIO_FORMAT_MAX_LENGTH]; + int length; + struct audio_edid fmt[HDMI_AUDIO_FORMAT_MAX_LENGTH]; }; struct latency { -int vid_latency; /*Video Latency (if indicated, value=1+ms/2 with a max of 251 meaning 500ms)*/ -int aud_latency; -int int_vid_latency; -int int_aud_latency; + /* vid: if indicated, value=1+ms/2 with a max of 251 meaning 500ms */ + int vid_latency; + + int aud_latency; + int int_vid_latency; + int int_aud_latency; }; struct deep_color { -bool bit_30; -bool bit_36; -int max_tmds_freq; + bool bit_30; + bool bit_36; + int max_tmds_freq; }; /* Video Descriptor Block */ - struct HDMI_EDID_DTD_VIDEO { - - u16 pixel_clock; /* 54-55 */ - u8 horiz_active; /* 56 */ - u8 horiz_blanking; /* 57 */ - u8 horiz_high; /* 58 */ - u8 vert_active; /* 59 */ - u8 vert_blanking; /* 60 */ - u8 vert_high; /* 61 */ - u8 horiz_sync_offset; /* 62 */ - u8 horiz_sync_pulse; /* 63 */ - u8 vert_sync_pulse; /* 64 */ - u8 sync_pulse_high; /* 65 */ - u8 horiz_image_size; /* 66 */ - u8 vert_image_size; /* 67 */ - u8 image_size_high; /* 68 */ - u8 horiz_border; /* 69 */ - u8 vert_border; /* 70 */ - u8 misc_settings; /* 71 */ + u16 pixel_clock; /* 54-55 */ + u8 horiz_active; /* 56 */ + u8 horiz_blanking; /* 57 */ + u8 horiz_high; /* 58 */ + u8 vert_active; /* 59 */ + u8 vert_blanking; /* 60 */ + u8 vert_high; /* 61 */ + u8 horiz_sync_offset; /* 62 */ + u8 horiz_sync_pulse; /* 63 */ + u8 vert_sync_pulse; /* 64 */ + u8 sync_pulse_high; /* 65 */ + u8 horiz_image_size; /* 66 */ + u8 vert_image_size; /* 67 */ + u8 image_size_high; /* 68 */ + u8 horiz_border; /* 69 */ + u8 vert_border; /* 70 */ + u8 misc_settings; /* 71 */ }; - -/* Monitor Limits Descriptor Block */ - +/* Monitor Limits Descriptor Block */ struct HDMI_EDID_DTD_MONITOR { - u16 pixel_clock; /* 54-55*/ - u8 _reserved1; /* 56 */ - u8 block_type; /* 57 */ - u8 _reserved2; /* 58 */ - u8 min_vert_freq; /* 59 */ - u8 max_vert_freq; /* 60 */ - u8 min_horiz_freq; /* 61 */ - u8 max_horiz_freq; /* 62 */ - u8 pixel_clock_mhz; /* 63 */ - u8 GTF[2]; /* 64 -65 */ - u8 start_horiz_freq; /* 66 */ - u8 C; /* 67 */ - u8 M[2]; /* 68-69 */ - u8 K; /* 70 */ - u8 J; /* 71 */ + u16 pixel_clock; /* 54-55*/ + u8 _reserved1; /* 56 */ + u8 block_type; /* 57 */ + u8 _reserved2; /* 58 */ + u8 min_vert_freq; /* 59 */ + u8 max_vert_freq; /* 60 */ + u8 min_horiz_freq; /* 61 */ + u8 max_horiz_freq; /* 62 */ + u8 pixel_clock_mhz; /* 63 */ + u8 GTF[2]; /* 64 -65 */ + u8 start_horiz_freq; /* 66 */ + u8 C; /* 67 */ + u8 M[2]; /* 68-69 */ + u8 K; /* 70 */ + u8 J; /* 71 */ } __attribute__ ((packed)); -/* Text Descriptor Block */ +/* Text Descriptor Block */ struct HDMI_EDID_DTD_TEXT { - - u16 pixel_clock; /* 54-55 */ - u8 _reserved1; /* 56 */ - u8 block_type; /* 57 */ - u8 _reserved2; /* 58 */ - u8 text[13]; /* 59-71 */ - + u16 pixel_clock; /* 54-55 */ + u8 _reserved1; /* 56 */ + u8 block_type; /* 57 */ + u8 _reserved2; /* 58 */ + u8 text[13]; /* 59-71 */ } __attribute__ ((packed)); - -/* DTD Union */ +/* DTD Union */ union HDMI_EDID_DTD { - struct HDMI_EDID_DTD_VIDEO video; - struct HDMI_EDID_DTD_TEXT monitor_name; - struct HDMI_EDID_DTD_TEXT monitor_serial_number; - struct HDMI_EDID_DTD_TEXT ascii; - struct HDMI_EDID_DTD_MONITOR monitor_limits; - + struct HDMI_EDID_DTD_VIDEO video; + struct HDMI_EDID_DTD_TEXT monitor_name; + struct HDMI_EDID_DTD_TEXT monitor_serial_number; + struct HDMI_EDID_DTD_TEXT ascii; + struct HDMI_EDID_DTD_MONITOR monitor_limits; } __attribute__ ((packed)); -/* EDID struct */ +/* EDID struct */ struct HDMI_EDID { - u8 header[8]; /* 00-07 */ - u16 manufacturerID; /* 08-09 */ - u16 product_id; /* 10-11 */ - u32 serial_number; /* 12-15 */ - u8 week_manufactured; /* 16 */ - u8 year_manufactured; /* 17 */ - u8 edid_version; /* 18 */ - u8 edid_revision; /* 19 */ - u8 video_in_definition; /* 20 */ - u8 max_horiz_image_size; /* 21 */ - u8 max_vert_image_size; /* 22 */ - u8 display_gamma; /* 23 */ - u8 power_features; /* 24 */ - u8 chroma_info[10]; /* 25-34 */ - u8 timing_1; /* 35 */ - u8 timing_2; /* 36 */ - u8 timing_3; /* 37 */ - u8 std_timings[16]; /* 38-53 */ - - union HDMI_EDID_DTD DTD[4]; /* 54-125 */ - - u8 extension_edid; /* 126 */ - u8 checksum; /* 127 */ - u8 extension_tag; /* 00 (extensions follow EDID) */ - u8 extention_rev; /* 01 */ - u8 offset_dtd; /* 02 */ - u8 num_dtd; /* 03 */ - - u8 data_block[123]; /* 04 - 126 */ - u8 extension_checksum; /* 127 */ - - u8 ext_datablock[256]; - + u8 header[8]; /* 00-07 */ + u16 manufacturerID; /* 08-09 */ + u16 product_id; /* 10-11 */ + u32 serial_number; /* 12-15 */ + u8 week_manufactured; /* 16 */ + u8 year_manufactured; /* 17 */ + u8 edid_version; /* 18 */ + u8 edid_revision; /* 19 */ + u8 video_in_definition; /* 20 */ + u8 max_horiz_image_size; /* 21 */ + u8 max_vert_image_size; /* 22 */ + u8 display_gamma; /* 23 */ + u8 power_features; /* 24 */ + u8 chroma_info[10]; /* 25-34 */ + u8 timing_1; /* 35 */ + u8 timing_2; /* 36 */ + u8 timing_3; /* 37 */ + u8 std_timings[16]; /* 38-53 */ + + union HDMI_EDID_DTD DTD[4]; /* 54-125 */ + + u8 extension_edid; /* 126 */ + u8 checksum; /* 127 */ + u8 extension_tag; /* 00 (extensions follow EDID) */ + u8 extention_rev; /* 01 */ + u8 offset_dtd; /* 02 */ + u8 num_dtd; /* 03 */ + + u8 data_block[123]; /* 04 - 126 */ + u8 extension_checksum; /* 127 */ + + u8 ext_datablock[256]; } __attribute__ ((packed)); - - int get_edid_timing_info(union HDMI_EDID_DTD *edid_dtd, struct omap_video_timings *timings); void get_eedid_timing_info(int current_descriptor_addrs, u8 *edid , struct omap_video_timings *timings); -int hdmi_get_datablock_offset(u8 *edid, enum extension_edid_db datablock, int *offset); +int hdmi_get_datablock_offset(u8 *edid, enum extension_edid_db datablock, + int *offset); int hdmi_get_image_format(u8 *edid, struct image_format *format); int hdmi_get_audio_format(u8 *edid, struct audio_format *format); void hdmi_get_av_delay(u8 *edid, struct latency *lat); @@ -286,4 +278,3 @@ int hdmi_tv_yuv_supported(u8 *edid); #endif #endif - |