hdmi_notice.c 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
  1. #include "drv_types.h"
  2. #include "hdmi_cfg.h"
  3. #include "hdmi_dbg.h"
  4. #include "hdmi_notice.h"
  5. #include "hdmi_audio.h"
  6. #include "hdmi_processing.h"
  7. #include "hdmi_hpd.h"
  8. #include "hdmi_hw.h"
  9. #include "hdmi_infoframe_api.h"
  10. #include <drv_vip_internal.h>
  11. #include <drv2kmf.h>
  12. #include <drv_event.h>
  13. #include "drv_audio_internal.h"
  14. #include "../audio/drv_audio_common.h"
  15. static UINT8 Screen_Mode = 0xff;
  16. extern UINT8 HScalerDownFlag;
  17. void HDMI_NoticeHandler(HDMI_NOTICE_TYPE_e status, const INT8* src)
  18. {
  19. INT32 Screen = NormalScreen;
  20. static InputPathStatus_t is = {0};
  21. UINT8 value = 0;
  22. hdmidbg("%s: %s %d\n", __FUNCTION__, src, status);
  23. is.msgfromVIP = false;
  24. is.path = INPUTPATH_HDMI;
  25. switch (status)
  26. {
  27. default:
  28. case HDMINOTICE_INITSTATE:
  29. Screen_Mode = 0xff;
  30. is.bActive = false;
  31. is.bNotSupport = false;
  32. return;
  33. case HDMINOTICE_NOSIGNAL:
  34. Screen = BlueScreen;
  35. is.bActive = false;
  36. is.bNotSupport = false;
  37. noticekmf(KMF2UMF_EVID_DRV, KMF2UMF_EVTYPE_DRV_INFORM_SIGNALSTATUS, (UINT8 *)&is, sizeof(InputPathStatus_t));
  38. #ifdef HDMI_DDC5V_WORKAROUND
  39. HDMI_TurnOff_SW_5V_schedule(0, hdmi_get_cur_port()); //restart HW DDC 5V detection after no signal
  40. #endif
  41. hdmidbg("Support ScartOut when HDMI no signal\n");
  42. ScartOut_HDMI_NOSIGNAL();
  43. break;
  44. case HDMINOTICE_HAVESIGNAL:
  45. Screen = NormalScreen;
  46. is.bActive = true;
  47. is.bNotSupport = false;
  48. is.bHscalerDown = false;
  49. if(TRUE == HScalerDownFlag)
  50. {
  51. is.bHscalerDown = true;
  52. }
  53. noticekmf(KMF2UMF_EVID_DRV, KMF2UMF_EVTYPE_DRV_INFORM_SIGNALSTATUS, (UINT8 *)&is, sizeof(InputPathStatus_t));
  54. break;
  55. case HDMINOTICE_NOTSUPPORT:
  56. Screen = BlueScreen;
  57. is.bActive = false;
  58. is.bNotSupport = true;
  59. noticekmf(KMF2UMF_EVID_DRV, KMF2UMF_EVTYPE_DRV_INFORM_SIGNALSTATUS, (UINT8 *)&is, sizeof(InputPathStatus_t));
  60. break;
  61. case HDMINOTICE_PROCESSING_IN:
  62. Screen = BlackScreen;
  63. value = 1;
  64. noticekmf(KMF2UMF_EVID_HDMI, KMF2UMF_EVTYPE_HDMI_PROCESSING, (UINT8 *)&value, 1);
  65. break;
  66. case HDMINOTICE_PROCESSING_OUT:
  67. Screen = BlackScreen;
  68. value = 0;
  69. noticekmf(KMF2UMF_EVID_HDMI, KMF2UMF_EVTYPE_HDMI_PROCESSING, (UINT8 *)&value, 1);
  70. break;
  71. /*
  72. case HDMINOTICE_AVMUTE:
  73. Screen = BlackScreen;
  74. noticekmf(KMF2UMF_EVID_HDMI, KMF2UMF_EVTYPE_HDMI_AVMUTE, (UINT8 *)&value, 1);
  75. break;
  76. case HDMINOTICE_AVUNMUTE:
  77. Screen = NormalScreen;
  78. break;
  79. */
  80. case HDMINOTICE_INACTIVE:
  81. Screen = BlueScreen;
  82. is.bActive = false;
  83. is.bNotSupport = false;
  84. noticekmf(KMF2UMF_EVID_DRV, KMF2UMF_EVTYPE_DRV_INFORM_SIGNALSTATUS, (UINT8 *)&is, sizeof(InputPathStatus_t));
  85. break;
  86. case HDMINOTICE_HDMIMODE:
  87. value = 1;
  88. noticekmf(KMF2UMF_EVID_HDMI, KMF2UMF_EVTYPE_HDMI_HDMIMODE, (UINT8 *)&value, 1);
  89. break;
  90. case HDMINOTICE_DVIMODE:
  91. value = 0;
  92. noticekmf(KMF2UMF_EVID_HDMI, KMF2UMF_EVTYPE_HDMI_HDMIMODE, (UINT8 *)&value, 1);
  93. break;
  94. case HDMINOTICE_SPD_INFOFRAME_UPDATE:
  95. {
  96. union hdmi_infoframe infoframe;
  97. //struct hdmi_spd_infoframe frame;
  98. infoframe.any.type = HDMI_INFOFRAME_TYPE_SPD;
  99. HDMI_Get_SPD_INFOFRAME(&infoframe.spd);
  100. hdmi_infoframe_log(0, 0, (union hdmi_infoframe*) &infoframe);
  101. noticekmf(KMF2UMF_EVID_HDMI, KMF2UMF_EVTYPE_HDMI_SPD_INFOFRAME_UPDATE, (UINT8 *)&infoframe.spd, sizeof(struct hdmi_spd_infoframe));
  102. break;
  103. }
  104. #ifdef CONFIG_HDMI_SUPPORT_MHL
  105. case HDMINOTICE_MHL_CONTENT_OFF:
  106. Screen = BlackScreen;
  107. value = 0;
  108. break;
  109. case HDMINOTICE_MHL_CONTENT_ON:
  110. if((is.bActive == true)&&(is.bNotSupport == false))
  111. {
  112. Screen = NormalScreen;
  113. VIP_UnmuteScreen();
  114. DRV_HDMI_AudioEnable(); //for MHL CTS 4.2.7.1
  115. }
  116. else
  117. {
  118. Screen = BlackScreen;
  119. }
  120. break;
  121. #endif
  122. }
  123. #ifdef CONFIG_HDMI_SUPPORT_MHL
  124. if ((Screen_Mode != Screen) && ((status == HDMINOTICE_PROCESSING_IN)||(status == HDMINOTICE_PROCESSING_OUT)//||(status == HDMINOTICE_AVMUTE)
  125. ||(status == HDMINOTICE_INACTIVE)||(status == HDMINOTICE_MHL_CONTENT_OFF)))
  126. #else
  127. if ((Screen_Mode != Screen) && ((status == HDMINOTICE_PROCESSING_IN)||(status == HDMINOTICE_PROCESSING_OUT)//||(status == HDMINOTICE_AVMUTE)
  128. ||(status == HDMINOTICE_INACTIVE)))
  129. #endif
  130. {
  131. hdmidbg("%s: %d Screen\n", __FUNCTION__, Screen);
  132. VIP_MuteScreen_ISR();
  133. DRV_HDMI_AudioDisable();
  134. }
  135. Screen_Mode = Screen;
  136. }
  137. void HDMI_NoticeHotPlug(UINT32 hpd_status)
  138. {
  139. hdmidbg("%s: 0x%08x\n", __FUNCTION__, hpd_status);
  140. noticekmf(KMF2UMF_EVID_HDMI, KMF2UMF_EVTYPE_HDMI_PORTSTATUS, (UINT8 *)&hpd_status, 4);
  141. }
  142. void HDMI_NoticeAudioACP(ACP_PKT_T type)
  143. {
  144. hdmidbg("%s: %d\n", __FUNCTION__, type);
  145. // if (type != ACP_GENERIC_AUDIO &&
  146. // type != ACP_IEC60958_IDENTIFIED)
  147. {
  148. noticekmf(KMF2UMF_EVID_HDMI, KMF2UMF_EVTYPE_HDMI_HDMIAUDIOACP, (UINT8 *)&type, 1);
  149. }
  150. }
  151. //void HDMI_NoticeAudioTypeSupport(BOOL bSupport)
  152. //{
  153. // hdmidbg("%s: %s\n", __FUNCTION__, bSupport ? "Support" : "Not Supported");
  154. //noticekmf(NOTICEMSG_HDMI_AUDIOTYPE, &bSupport);
  155. //}
  156. void HDMI_NoticeAudioMode(HDMI_VIDEO_MODE mode)
  157. {
  158. hdmidbg("%s: %d\n", __FUNCTION__, mode);
  159. switch (mode)
  160. {
  161. case HDMI_MODE:
  162. HDMI_NoticeHandler(HDMINOTICE_HDMIMODE, __FUNCTION__);
  163. break;
  164. case DVI_MODE:
  165. HDMI_NoticeHandler(HDMINOTICE_DVIMODE, __FUNCTION__);
  166. //AI_change_hdmi_mode(HMODE_DVI);
  167. break;
  168. case NO_HDMI_AUDIO:
  169. //ADD MUTE PROTECT TO AVOID UNSMOOTH AUDIO OUTPUT
  170. {
  171. TVFE_Audio_Mute_t MC;
  172. MC.Enable = 1;
  173. MC.Mute_Delay= 0;
  174. MC.Mute_TXSpeed= 0;
  175. MC.Mute_Path = TVFE_AUDIO_MUTE_DRV_ALL_PATH;
  176. DRV_AUDIO_DC_SetMute(&MC);
  177. }
  178. //~MUTE PROTECT
  179. break;
  180. };
  181. }