| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- /*
- SiI8348 Linux Driver
- Copyright (C) 2013 Silicon Image, Inc.
- This program is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation version 2.
- This program is distributed AS-IS WITHOUT ANY WARRANTY of any
- kind, whether express or implied; INCLUDING without the implied warranty
- of MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE or NON-INFRINGEMENT. See
- the GNU General Public License for more details at http://www.gnu.org/licenses/gpl-2.0.html.
- */
- #define EDID_BLOCK_SIZE 128
- #define BIT_EDID_FIELD_FORMAT_HDMI_TO_RGB 0x00
- #define BIT_EDID_FIELD_FORMAT_YCbCr422 0x01
- #define BIT_EDID_FIELD_FORMAT_YCbCr444 0x02
- #define BIT_EDID_FIELD_FORMAT_DVI_TO_RGB 0x03
- typedef struct
- {
- unsigned parse_3d_in_progress :1;
- unsigned FLAGS_SENT_3D_REQ :1;
- unsigned FLAGS_BURST_3D_VIC_DONE :1;
- unsigned FLAGS_BURST_3D_DTD_DONE :1;
- unsigned FLAGS_BURST_3D_DTD_VESA_DONE :1;
- unsigned FLAGS_BURST_3D_DONE :1;
- unsigned FLAGS_EDID_READ_DONE :1;
- unsigned reserved :1;
- }edid_3d_flags_t,*edid_3d_flags_p;
- #define MAX_V_DESCRIPTORS 21
- #define MAX_A_DESCRIPTORS 10
- #define MAX_SPEAKER_CONFIGURATIONS 4
- #define AUDIO_DESCR_SIZE 3
- #define NUM_VIDEO_DATA_BLOCKS_LIMIT 3
- typedef struct _edid_parse_data_t
- {
- edid_3d_flags_t flags;
- P_vsdb_t p_HDMI_vsdb;
- p_video_data_block_t p_video_data_blocks_2d[NUM_VIDEO_DATA_BLOCKS_LIMIT];
- Pvideo_capability_data_block_t p_video_capability_data_block;
- PVSDB_byte_13_through_byte_15_t p_byte_13_through_byte_15;
- P_3D_mask_t p_3d_mask;
- P_3D_structure_and_detail_entry_u p_three_d;
- uint8_t *p_3d_limit;
- uint8_t num_video_data_blocks; /* counter for initial EDID parsing, persists afterwards */
- uint8_t video_data_block_index; /* counter for 3D write burst parsing. */
- uint8_t burst_entry_count_3d_vic;
- uint8_t vic_2d_index;
- uint8_t vic_3d_index;
- uint8_t burst_entry_count_3d_dtd;
- uint8_t vesa_dtd_index;
- uint8_t cea_861_dtd_index;
- CEA_short_audio_descriptor_t audio_descriptors[MAX_A_DESCRIPTORS]; /* maximum number of audio descriptors */
- uint8_t speaker_alloc[MAX_SPEAKER_CONFIGURATIONS]; /* maximum number of speaker configurations */
- bool underscan; /* "1" if DTV monitor underscans IT video formats by default */
- bool basic_audio; /* Sink supports Basic Audio */
- bool YCbCr_4_4_4; /* Sink supports YCbCr 4:4:4 */
- bool YCbCr_4_2_2; /* Sink supports YCbCr 4:2:2 */
- bool HDMI_sink; /* "1" if HDMI signature found */
- uint8_t CEC_A_B; /* CEC Physical address. See HDMI 1.3 Table 8-6 */
- uint8_t CEC_C_D;
- uint8_t video_capability_flags;
- uint8_t colorimetry_support_flags; /* IEC 61966-2-4 colorimetry support: 1 - xvYCC601; 2 - xvYCC709 */
- uint8_t meta_data_profile;
- bool _3D_supported;
- uint8_t num_EDID_extensions;
- }edid_parse_data_t;
- struct mhl_dev_context;
- typedef struct
- {
- struct mhl_dev_context *dev_context;
- void *drv_context;
- edid_parse_data_t parse_data;
- uint8_t EDID_block_data [4*EDID_BLOCK_SIZE];
- }edid_3d_data_t,*edid_3d_data_p;
- void *si_edid_create_context(void *dev_context,void *drv_context);
- void si_edid_destroy_context(void *context);
- void si_mhl_tx_initiate_edid_sequence(void *context);
- //void si_mhl_tx_send_3d_req(void *context);
- void si_mhl_tx_process_3d_vic_burst(void *context, PMHL2_video_format_data_t pWriteBurstData );
- void si_mhl_tx_process_3d_dtd_burst(void *context,PMHL2_video_format_data_t pWriteBurstData);
- uint32_t si_mhl_tx_find_timings_from_totals(edid_3d_data_p mhl_edid_3d_data);
- int si_edid_sink_is_hdmi(void *context);
- int si_edid_quantization_range_selectable(void *context);
- int si_edid_sink_supports_YCbCr422(void *context);
- int si_edid_sink_supports_YCbCr444(void *context);
- int si_edid_find_pixel_clock_from_HDMI_VIC(void *context,uint8_t vic);
- int si_edid_find_pixel_clock_from_AVI_VIC(void *context,uint8_t vic);
- typedef enum
- {
- ne_NO_HPD = -4
- ,ne_BAD_DATA = -3
- ,ne_BAD_CHECKSUM = ne_BAD_DATA
- ,ne_BAD_HEADER = -2
- ,ne_BAD_HEADER_OFFSET_BY_1 = -1
- ,ne_SUCCESS = 0
- }NumExtensions_e;
- int si_mhl_tx_get_num_cea_861_extensions(void *context,
- uint8_t block_number);
- int si_edid_read_done(void *context);
- void si_edid_reset(edid_3d_data_p mhl_edid_3d_data);
- uint8_t qualify_pixel_clock_for_mhl(edid_3d_data_p mhl_edid_3d_data,
- uint32_t pixel_clock_frequency,
- uint8_t bits_per_pixel);
- uint8_t calculate_generic_checksum(uint8_t *infoFrameData,uint8_t checkSum,uint8_t length);
|