123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241 |
- #include "drv_types.h"
- #include "hdmi_cfg.h"
- #include "hdmi_dbg.h"
- #include "hdmi_notice.h"
- #include "hdmi_audio.h"
- #include "hdmi_processing.h"
- #include "hdmi_hpd.h"
- #include "hdmi_hw.h"
- #include "hdmi_infoframe_api.h"
- #include <drv_vip_internal.h>
- #include <drv2kmf.h>
- #include <drv_event.h>
- #include "drv_audio_internal.h"
- #include "../audio/drv_audio_common.h"
- #include "hdmi.h"
- static UINT8 Screen_Mode = 0xff;
- extern UINT8 HScalerDownFlag;
- UINT32 HDMI_GetNoticedScreenMode()
- {
- return Screen_Mode;
- }
- void HDMI_NoticeHandler(HDMI_NOTICE_TYPE_e status, const INT8* src)
- {
- INT32 Screen = NormalScreen;
- static InputPathStatus_t is = {0};
- UINT8 value = 0;
- hdmidbg("%s: %s %d\n", __FUNCTION__, src, status);
- is.msgfromVIP = false;
- is.path = INPUTPATH_HDMI;
-
- switch (status)
- {
- default:
- case HDMINOTICE_INITSTATE:
- Screen_Mode = 0xff;
- is.bActive = false;
- is.bNotSupport = false;
- return;
- #ifdef CONFIG_HDMI_DELAY_START_5V_DETECTION
- case HDMINOTICE_NOSIGNAL_DELAY_5V:
- Screen = BlueScreen;
- is.bActive = false;
- is.bNotSupport = false;
- noticekmf(KMF2UMF_EVID_DRV, KMF2UMF_EVTYPE_DRV_INFORM_SIGNALSTATUS, (UINT8 *)&is, sizeof(InputPathStatus_t));
- hdmidbg("Support ScartOut when HDMI no signal\n");
- ScartOut_HDMI_NOSIGNAL();
- break;
- #endif
- case HDMINOTICE_NOSIGNAL:
- Screen = BlueScreen;
- is.bActive = false;
- is.bNotSupport = false;
- noticekmf(KMF2UMF_EVID_DRV, KMF2UMF_EVTYPE_DRV_INFORM_SIGNALSTATUS, (UINT8 *)&is, sizeof(InputPathStatus_t));
- #ifdef HDMI_DDC5V_WORKAROUND
- if(!((MHL_CABLE_IN == TRUE)&&( DrvHDMIPortSelectBitsGet() == CONFIG_HDMI_MHL_PORT)))
- {
- #ifdef CONFIG_HDMI_GPIO_DETECT
- if(
- #ifdef CONFIG_HDMI_GPIO_DETECT_PORT_A
- (hdmi_get_cur_port() != HDMI_PORT_A) &&
- #endif
- #ifdef CONFIG_HDMI_GPIO_DETECT_PORT_B
- (hdmi_get_cur_port() != HDMI_PORT_B) &&
- #endif
- #ifdef CONFIG_HDMI_GPIO_DETECT_PORT_C
- (hdmi_get_cur_port() != HDMI_PORT_C) &&
- #endif
- (TRUE))
- #endif
- HDMI_TurnOff_SW_5V_schedule(0, hdmi_get_cur_port()); //restart HW DDC 5V detection after no signal
- }
- #endif
- hdmidbg("Support ScartOut when HDMI no signal\n");
- ScartOut_HDMI_NOSIGNAL();
-
- break;
- case HDMINOTICE_HAVESIGNAL:
- Screen = NormalScreen;
- is.bActive = true;
- is.bNotSupport = false;
- is.bHscalerDown = false;
- if(TRUE == HScalerDownFlag)
- {
- is.bHscalerDown = true;
- }
- noticekmf(KMF2UMF_EVID_DRV, KMF2UMF_EVTYPE_DRV_INFORM_SIGNALSTATUS, (UINT8 *)&is, sizeof(InputPathStatus_t));
- break;
- case HDMINOTICE_NOTSUPPORT:
- Screen = BlueScreen;
- is.bActive = false;
- is.bNotSupport = true;
- noticekmf(KMF2UMF_EVID_DRV, KMF2UMF_EVTYPE_DRV_INFORM_SIGNALSTATUS, (UINT8 *)&is, sizeof(InputPathStatus_t));
- break;
- case HDMINOTICE_PROCESSING_IN:
- Screen = BlackScreen;
- value = 1;
- noticekmf(KMF2UMF_EVID_HDMI, KMF2UMF_EVTYPE_HDMI_PROCESSING, (UINT8 *)&value, 1);
- break;
- case HDMINOTICE_PROCESSING_OUT:
- Screen = BlackScreen;
- value = 0;
- noticekmf(KMF2UMF_EVID_HDMI, KMF2UMF_EVTYPE_HDMI_PROCESSING, (UINT8 *)&value, 1);
- break;
- /*
- case HDMINOTICE_AVMUTE:
- Screen = BlackScreen;
- noticekmf(KMF2UMF_EVID_HDMI, KMF2UMF_EVTYPE_HDMI_AVMUTE, (UINT8 *)&value, 1);
- break;
- case HDMINOTICE_AVUNMUTE:
- Screen = NormalScreen;
- break;
- */
- case HDMINOTICE_INACTIVE:
- Screen = BlueScreen;
- is.bActive = STATUS_SIGNALWEAK;
- is.bNotSupport = false;
- noticekmf(KMF2UMF_EVID_DRV, KMF2UMF_EVTYPE_DRV_INFORM_SIGNALSTATUS, (UINT8 *)&is, sizeof(InputPathStatus_t));
- break;
- case HDMINOTICE_HDMIMODE:
- value = 1;
- noticekmf(KMF2UMF_EVID_HDMI, KMF2UMF_EVTYPE_HDMI_HDMIMODE, (UINT8 *)&value, 1);
- break;
- case HDMINOTICE_DVIMODE:
- value = 0;
- noticekmf(KMF2UMF_EVID_HDMI, KMF2UMF_EVTYPE_HDMI_HDMIMODE, (UINT8 *)&value, 1);
- break;
- case HDMINOTICE_SPD_INFOFRAME_UPDATE:
- {
- union hdmi_infoframe infoframe;
- //struct hdmi_spd_infoframe frame;
- infoframe.any.type = HDMI_INFOFRAME_TYPE_SPD;
- HDMI_Get_SPD_INFOFRAME(&infoframe.spd);
- hdmi_infoframe_log(0, 0, (union hdmi_infoframe*) &infoframe);
- noticekmf(KMF2UMF_EVID_HDMI, KMF2UMF_EVTYPE_HDMI_SPD_INFOFRAME_UPDATE, (UINT8 *)&infoframe.spd, sizeof(struct hdmi_spd_infoframe));
- break;
- }
- #ifdef CONFIG_HDMI_SUPPORT_MHL
- case HDMINOTICE_MHL_CONTENT_OFF:
- Screen = BlackScreen;
- value = 0;
- break;
- case HDMINOTICE_MHL_CONTENT_ON:
- if((is.bActive == true)&&(is.bNotSupport == false))
- {
- Screen = NormalScreen;
- VIP_UnmuteScreen();
- DRV_HDMI_AudioEnable(); //for MHL CTS 4.2.7.1
- }
- else
- {
- Screen = BlackScreen;
- }
- break;
- #endif
- }
- #ifdef CONFIG_HDMI_SUPPORT_MHL
- if ((Screen_Mode != Screen) && ((status == HDMINOTICE_PROCESSING_IN)||(status == HDMINOTICE_PROCESSING_OUT)//||(status == HDMINOTICE_AVMUTE)
- ||(status == HDMINOTICE_INACTIVE)||(status == HDMINOTICE_MHL_CONTENT_OFF)))
- #else
- if ((Screen_Mode != Screen) && ((status == HDMINOTICE_PROCESSING_IN)||(status == HDMINOTICE_PROCESSING_OUT)//||(status == HDMINOTICE_AVMUTE)
- ||(status == HDMINOTICE_INACTIVE)))
- #endif
- {
- hdmidbg("%s: %d Screen\n", __FUNCTION__, Screen);
- VIP_MuteScreenDirectly(); // VIP_MuteScreen_ISR(); might be pending until the next V sync ISR
- DRV_HDMI_AudioDisable();
- }
- Screen_Mode = Screen;
- }
- void HDMI_NoticeHotPlug(UINT32 hpd_status)
- {
- hdmidbg("%s: 0x%08x\n", __FUNCTION__, hpd_status);
- noticekmf(KMF2UMF_EVID_HDMI, KMF2UMF_EVTYPE_HDMI_PORTSTATUS, (UINT8 *)&hpd_status, 4);
- }
- void HDMI_NoticeAudioACP(ACP_PKT_T type)
- {
- hdmidbg("%s: %d\n", __FUNCTION__, type);
- // if (type != ACP_GENERIC_AUDIO &&
- // type != ACP_IEC60958_IDENTIFIED)
- {
- noticekmf(KMF2UMF_EVID_HDMI, KMF2UMF_EVTYPE_HDMI_HDMIAUDIOACP, (UINT8 *)&type, 1);
- }
- }
- //void HDMI_NoticeAudioTypeSupport(BOOL bSupport)
- //{
- // hdmidbg("%s: %s\n", __FUNCTION__, bSupport ? "Support" : "Not Supported");
- //noticekmf(NOTICEMSG_HDMI_AUDIOTYPE, &bSupport);
- //}
- void HDMI_NoticeAudioMode(HDMI_VIDEO_MODE mode)
- {
- hdmidbg("%s: %d\n", __FUNCTION__, mode);
- switch (mode)
- {
- case HDMI_MODE:
- HDMI_NoticeHandler(HDMINOTICE_HDMIMODE, __FUNCTION__);
- break;
- case DVI_MODE:
- HDMI_NoticeHandler(HDMINOTICE_DVIMODE, __FUNCTION__);
- //AI_change_hdmi_mode(HMODE_DVI);
- break;
- case NO_HDMI_AUDIO:
- //ADD MUTE PROTECT TO AVOID UNSMOOTH AUDIO OUTPUT
- {
- TVFE_Audio_Mute_t MC;
- MC.Enable = 1;
- MC.Mute_Delay= 0;
- MC.Mute_TXSpeed= 0;
- MC.Mute_Path = TVFE_AUDIO_MUTE_DRV_ALL_PATH;
- DRV_AUDIO_DC_SetMute(&MC);
- }
- //~MUTE PROTECT
- break;
- };
- }
|