si_mhl2_edid_3d_api.h 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. /*
  2. SiI8348 Linux Driver
  3. Copyright (C) 2013 Silicon Image, Inc.
  4. This program is free software; you can redistribute it and/or
  5. modify it under the terms of the GNU General Public License as
  6. published by the Free Software Foundation version 2.
  7. This program is distributed AS-IS WITHOUT ANY WARRANTY of any
  8. kind, whether express or implied; INCLUDING without the implied warranty
  9. of MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE or NON-INFRINGEMENT. See
  10. the GNU General Public License for more details at http://www.gnu.org/licenses/gpl-2.0.html.
  11. */
  12. #define EDID_BLOCK_SIZE 128
  13. #define BIT_EDID_FIELD_FORMAT_HDMI_TO_RGB 0x00
  14. #define BIT_EDID_FIELD_FORMAT_YCbCr422 0x01
  15. #define BIT_EDID_FIELD_FORMAT_YCbCr444 0x02
  16. #define BIT_EDID_FIELD_FORMAT_DVI_TO_RGB 0x03
  17. typedef struct
  18. {
  19. unsigned parse_3d_in_progress :1;
  20. unsigned FLAGS_SENT_3D_REQ :1;
  21. unsigned FLAGS_BURST_3D_VIC_DONE :1;
  22. unsigned FLAGS_BURST_3D_DTD_DONE :1;
  23. unsigned FLAGS_BURST_3D_DTD_VESA_DONE :1;
  24. unsigned FLAGS_BURST_3D_DONE :1;
  25. unsigned FLAGS_EDID_READ_DONE :1;
  26. unsigned reserved :1;
  27. }edid_3d_flags_t,*edid_3d_flags_p;
  28. #define MAX_V_DESCRIPTORS 21
  29. #define MAX_A_DESCRIPTORS 10
  30. #define MAX_SPEAKER_CONFIGURATIONS 4
  31. #define AUDIO_DESCR_SIZE 3
  32. #define NUM_VIDEO_DATA_BLOCKS_LIMIT 3
  33. typedef struct _edid_parse_data_t
  34. {
  35. edid_3d_flags_t flags;
  36. P_vsdb_t p_HDMI_vsdb;
  37. p_video_data_block_t p_video_data_blocks_2d[NUM_VIDEO_DATA_BLOCKS_LIMIT];
  38. Pvideo_capability_data_block_t p_video_capability_data_block;
  39. PVSDB_byte_13_through_byte_15_t p_byte_13_through_byte_15;
  40. P_3D_mask_t p_3d_mask;
  41. P_3D_structure_and_detail_entry_u p_three_d;
  42. uint8_t *p_3d_limit;
  43. uint8_t num_video_data_blocks; /* counter for initial EDID parsing, persists afterwards */
  44. uint8_t video_data_block_index; /* counter for 3D write burst parsing. */
  45. uint8_t burst_entry_count_3d_vic;
  46. uint8_t vic_2d_index;
  47. uint8_t vic_3d_index;
  48. uint8_t burst_entry_count_3d_dtd;
  49. uint8_t vesa_dtd_index;
  50. uint8_t cea_861_dtd_index;
  51. CEA_short_audio_descriptor_t audio_descriptors[MAX_A_DESCRIPTORS]; /* maximum number of audio descriptors */
  52. uint8_t speaker_alloc[MAX_SPEAKER_CONFIGURATIONS]; /* maximum number of speaker configurations */
  53. bool underscan; /* "1" if DTV monitor underscans IT video formats by default */
  54. bool basic_audio; /* Sink supports Basic Audio */
  55. bool YCbCr_4_4_4; /* Sink supports YCbCr 4:4:4 */
  56. bool YCbCr_4_2_2; /* Sink supports YCbCr 4:2:2 */
  57. bool HDMI_sink; /* "1" if HDMI signature found */
  58. uint8_t CEC_A_B; /* CEC Physical address. See HDMI 1.3 Table 8-6 */
  59. uint8_t CEC_C_D;
  60. uint8_t video_capability_flags;
  61. uint8_t colorimetry_support_flags; /* IEC 61966-2-4 colorimetry support: 1 - xvYCC601; 2 - xvYCC709 */
  62. uint8_t meta_data_profile;
  63. bool _3D_supported;
  64. uint8_t num_EDID_extensions;
  65. }edid_parse_data_t;
  66. struct mhl_dev_context;
  67. typedef struct
  68. {
  69. struct mhl_dev_context *dev_context;
  70. void *drv_context;
  71. edid_parse_data_t parse_data;
  72. uint8_t EDID_block_data [4*EDID_BLOCK_SIZE];
  73. }edid_3d_data_t,*edid_3d_data_p;
  74. void *si_edid_create_context(void *dev_context,void *drv_context);
  75. void si_edid_destroy_context(void *context);
  76. void si_mhl_tx_initiate_edid_sequence(void *context);
  77. //void si_mhl_tx_send_3d_req(void *context);
  78. void si_mhl_tx_process_3d_vic_burst(void *context, PMHL2_video_format_data_t pWriteBurstData );
  79. void si_mhl_tx_process_3d_dtd_burst(void *context,PMHL2_video_format_data_t pWriteBurstData);
  80. uint32_t si_mhl_tx_find_timings_from_totals(edid_3d_data_p mhl_edid_3d_data);
  81. int si_edid_sink_is_hdmi(void *context);
  82. int si_edid_quantization_range_selectable(void *context);
  83. int si_edid_sink_supports_YCbCr422(void *context);
  84. int si_edid_sink_supports_YCbCr444(void *context);
  85. int si_edid_find_pixel_clock_from_HDMI_VIC(void *context,uint8_t vic);
  86. int si_edid_find_pixel_clock_from_AVI_VIC(void *context,uint8_t vic);
  87. typedef enum
  88. {
  89. ne_NO_HPD = -4
  90. ,ne_BAD_DATA = -3
  91. ,ne_BAD_CHECKSUM = ne_BAD_DATA
  92. ,ne_BAD_HEADER = -2
  93. ,ne_BAD_HEADER_OFFSET_BY_1 = -1
  94. ,ne_SUCCESS = 0
  95. }NumExtensions_e;
  96. int si_mhl_tx_get_num_cea_861_extensions(void *context,
  97. uint8_t block_number);
  98. int si_edid_read_done(void *context);
  99. void si_edid_reset(edid_3d_data_p mhl_edid_3d_data);
  100. uint8_t qualify_pixel_clock_for_mhl(edid_3d_data_p mhl_edid_3d_data,
  101. uint32_t pixel_clock_frequency,
  102. uint8_t bits_per_pixel);
  103. uint8_t calculate_generic_checksum(uint8_t *infoFrameData,uint8_t checkSum,uint8_t length);