#ifndef _AUDIO_IOCTL_H_ #define _AUDIO_IOCTL_H_ #include #include #define TVFE_TRUE 1 #define TVFE_FALSE 0 typedef enum _TVFE_Audio_Status_e { /* common status values */ TVFE_AUDIO_SUCCESS, /* successful outcome */ TVFE_AUDIO_ERR_INVALID_PARAM, /* invalid parameter */ TVFE_AUDIO_ERR_INVALID_OP, /* requested operation is invalid */ TVFE_AUDIO_ERR_MEMORY_ALLOC, /* problem allocating memory */ TVFE_AUDIO_ERR_BUFFER_UNDERFLOW, /* not enough stream data is available to decode the next video frame */ TVFE_AUDIO_ERR_RESOURCE_UNAVAILABLE, /* hardware resource is in use or otherwise unavailable */ TVFE_AUDIO_ERR_FAILURE, TVFE_AUDIO_WARN_NO_ACTION, /* the function completed successfully, but no action was taken */ TVFE_AUDIO_WARN_PARAM_CLIPPED, /* the function completed successfully, though a parameter was clipped to within a valid range.*/ TVFE_AUDIO_WARN_BUFFER_EMPTY, /* buffer became empty before the requested amount of data could be read */ TVFE_AUDIO_WARN_BUFFER_FULL, /* buffer became full before the requested amount of data could be written */ } TVFE_Audio_Status_e; typedef enum _TVFE_Audio_SPDIF_Output_Config_e { TVFE_AUDIO_SPDIF_OFF = 0, TVFE_AUDIO_SPDIF_PCM, TVFE_AUDIO_SPDIF_BITSTREAM, TVFE_AUDIO_SPDIF_ONLY_AUTO, //HDMI ARC ONLY SPDIF OUTPUT (NO I2S OUT) , DOLBY WILL RAW OUTPUT, OTHERS WILL BE PCM TVFE_AUDIO_SPDIF_ONLY_PCM, //HDMI ARC ONLY SPDIF OUTPUT (NO I2S OUT) , ALL AUDIO TYPE WILL BE PCM OUTPUT (FLAG = DECODEING) TVFE_AUDIO_SPDIF_INIT, //TVFE_AUDIO_SPDIF_REENC, //TVFE_AUDIO_SPDIF_IECRX, } TVFE_Audio_SPDIF_Output_Config_e; // Effect mode: basic self surround, SRSTSHD typedef enum _TVFE_Audio_Effect_e { TVFE_AUDIO_EFFECT_MODE_NORMAL = 0, /*only one effect can be chosen at one time*/ TVFE_AUDIO_EFFECT_MODE_SRS_TRUSURROUND_HD, TVFE_AUDIO_EFFECT_MODE_BASIC_SURROUND, TVFE_AUDIO_EFFECT_MODE_MAXIMUS_SURROUND, TVFE_AUDIO_EFFECT_MODE_TITOI_SURROUND, } TVFE_Audio_Effect_e; typedef enum _TVFE_Audio_Channel_Number_e { TVFE_Audio_Channel_Stereo = 0, //mono or 2ch TVFE_Audio_Channel_Multi, //2.1ch or up } TVFE_Audio_Channel_Number_e; //SRS TRUVOL Parameters typedef enum { TVFE_Audio_SRSTVOL_Mode_Normal = 0, TVFE_Audio_SRSTVOL_Mode_Light } TVFE_Audio_SRSTVol_Mode_e; typedef enum { TVFE_Audio_SRSTVOL_SpeakerSize_20Hz = 0, TVFE_Audio_SRSTVOL_SpeakerSize_40Hz, TVFE_Audio_SRSTVOL_SpeakerSize_110Hz, TVFE_Audio_SRSTVOL_SpeakerSize_200Hz, TVFE_Audio_SRSTVOL_SpeakerSize_315Hz, TVFE_Audio_SRSTVOL_SpeakerSize_410Hz, } TVFE_Audio_SRSTVOL_SpeakerSize_e; //~SRS TRUVOL typedef enum { TVFE_Audio_MUTE_status_sd0 = 1<<0, TVFE_Audio_MUTE_status_sd1 = 1<<1, TVFE_Audio_MUTE_status_spdif = 1<<2, TVFE_Audio_MUTE_status_speaker = 1<<3, TVFE_Audio_MUTE_status_headphone = 1<<4, TVFE_Audio_MUTE_status_lineout = 1<<5, TVFE_Audio_APP_MUTE_status_sd0 = 1<<16, TVFE_Audio_APP_MUTE_status_sd1 = 1<<17, TVFE_Audio_APP_MUTE_status_spdif = 1<<18, TVFE_Audio_APP_MUTE_status_speaker = 1<<19, TVFE_Audio_APP_MUTE_status_headphone = 1<<20, TVFE_Audio_APP_MUTE_status_lineout = 1<<21, }TVFE_Audio_MUTE_STATUS_e; typedef struct _TVFE_AUDIO_SOURCE_SELECT_t { AudioSrc_e audio_src; // audio source unsigned char scart_enable; // 0:scart disable 1:scart enable }TVFE_AUDIO_SOURCE_SELECT_t, *pTVFE_AUDIO_SOURCE_SELECT_t; typedef struct _TVFE_Audio_SetDualMode_t { OUTPUT_CHANNEL_MODE_e mode; }TVFE_Audio_SetDualMode_t, *pTVFE_Audio_SetDualMode_t; typedef struct _TVFE_Audio_Lip_Sync_Config_t { BOOLEAN Enable; INT16 Delay; //-200(0 ms) ~ 200(200 ms) } TVFE_Audio_Lip_Sync_Config_t; typedef struct { TVFE_Audio_Effect_e eSurroundMode; } TVFE_AudioSurroundMode_t; // S+ surround parameters typedef struct { UINT8 ambiance_gain; UINT8 reverb_gain; UINT8 direct_gain; UINT8 sf_exp_en; //Sound field expansion enable } TVFE_Audio_SUNSUR_Param_t; // MS surround parameters typedef struct { UINT8 Maximus_Surround_gain; UINT8 Maximus_Surround_lv; UINT8 Maximus_Surround_delay; UINT8 Maximus_Bass_frequency; UINT8 Maximus_Bass_gain; //Sound field expansion enable UINT8 Maximus_Voice_level; UINT8 Maximus_Definition_gain; } TVFE_Audio_MSSUR_Param_t; typedef enum _TVFE_Audio_SUNSUR_Gain_e { TVFE_Audio_SUNSUR_GAIN_0P0, TVFE_Audio_SUNSUR_GAIN_0P1, TVFE_Audio_SUNSUR_GAIN_0P2, TVFE_Audio_SUNSUR_GAIN_0P3, TVFE_Audio_SUNSUR_GAIN_0P4, TVFE_Audio_SUNSUR_GAIN_0P5, TVFE_Audio_SUNSUR_GAIN_0P6, TVFE_Audio_SUNSUR_GAIN_0P7, TVFE_Audio_SUNSUR_GAIN_0P8, TVFE_Audio_SUNSUR_GAIN_0P9, TVFE_Audio_SUNSUR_GAIN_1P0, } TVFE_Audio_SUNSUR_Gain_e; // SRS True Surround HD parameters typedef enum _TVFE_Audio_SRSTSHD_MODE_e { TVFE_SRSTSHD_MODE_OFF = 0, //SRS disable TVFE_SRSTSHD_MODE_TSXT_ON, //Enable SRS TSXT (Surround, DC, TB) TVFE_SRSTSHD_MODE_TSHD_ON, //Enable SRS TSHD (Surround, DC, TB, Def) TVFE_SRSTSHD_MODE_TSHD_BYPASS, //SRS TSHD BYPASS Mode TVFE_SRSTSHD_MODE_TSHD_CERTIFICATION, //SRS TOOL TVFE_SRSTSHD_MODE_TSHD_USERDEFINE, //reserved for user define whic feature will be enable TVFE_SRSTSHD_MODE_TSHD_MAX, } TVFE_Audio_SRSTSHD_MODE_e; typedef struct { TVFE_Audio_SRSTSHD_MODE_e SRSTSHD_SRSTSHD_MODE; //0: OFF, 1: Lt/Rt mode 2:bypass 3:user define UINT8 SRSTSHD_TruBass_spksize; // TruBass speaker size, 0~7 40Hz~400Hz UINT8 SRSTSHD_InputGain; //0~100 -> 0.0~1.00 UINT8 SRSTSHD_OutputGain; //0~100 -> 0.0~1.00 UINT8 SRSTSHD_SurroundLevel; // 0~ 100 -> 0.0~ 1.00 UINT8 SRSTSHD_DialogClarityLevel; // 0~ 100 -> 0.0~ 1.00 UINT8 SRSTSHD_TruBassFrontLevel; // 0~ 100 -> 0.0~ 1.00 UINT8 SRSTSHD_DefinitionFrontLevel; // 0~ 100 -> 0.0~ 1.00 } TVFE_Audio_SRSTSHD_Param_t; // SRS TrueVolume parameters typedef struct { UINT8 SRSTVOL_Enable; // 0: disable, 1: enable UINT8 SRSTVOL_tv; // process enable, 0: bypass, 1:enable UINT8 SRSTVOL_tvnoise; // noise management, 0: disable, 1:enable UINT8 SRSTVOL_noisethreshold; // 0~ 100 -> 0.0~ 1.00 TVFE_Audio_SRSTVol_Mode_e SRSTVOL_tvmode; // Normal/Light TVFE_Audio_SRSTVOL_SpeakerSize_e SRSTVOL_tvspksize; // 20/40/110/200/315/410Hz UINT16 SRSTVOL_inputgain; // 0~ 320 -> 0.0~ 32.0 UINT8 SRSTVOL_outputgain; // 0~ 40 -> 0.0~ 4.0 UINT8 SRSTVOL_bypassgain; // 0~ 100 -> 0.0~ 1.00 UINT8 SRSTVOL_referencelevel; // 0~ 100 -> 0.0~ 1.00 UINT16 SRSTVOL_maxgain; // 1~ 256 } TVFE_Audio_SRSTVOL_Param_t; // EQ paramters typedef struct { UINT16 bEQ_fq[9]; INT8 bQfactor[9]; } TVFE_Audio_Equalizer_Init_t; typedef enum _TVFE_Audio_EQ_Qfactor_e { TVFE_Audio_Qfactor_1p0 = 0, //1.0 TVFE_Audio_Qfactor_1p5, //1.5 TVFE_Audio_Qfactor_2p0, //2.0 TVFE_Audio_Qfactor_2p5, //2.5 } TVFE_Audio_EQ_Qfactor_e; typedef struct _TVFE_Audio_Equalizer_Config_t { BOOLEAN Enable_Bypass; INT8 Band1; INT8 Band2; INT8 Band3; INT8 Band4; INT8 Band5; INT8 Band6; INT8 Band7; INT8 Band8; INT8 Band9; } TVFE_Audio_Equalizer_Config_t; // AVL parameters typedef struct { UINT8 enable; // 0: disable, 1:enable UINT8 limiter_level; //unit -1dB, 0: 0: 0.dB(default), 1: -1dB, 2: -2dB.... Max: 30 : -30dB UINT8 pullup_gain; //unit: +1dB, 0: 0.dB(default), 1: 1 dB... max:18(+18 dB) UINT8 attack_rate; //attack/release rate , 0: 1/4 , 1: 1/8, 2: 1/16, 3: 1/32, 4: 1/64 , 5: 1/128 6: 1/256 , 7: 1/512 , 8: 1/1024 9: 1/2048, 10: 1/4096 UINT8 active_time; //unit 10ms, 0: 10ms, 1: 20ms .... 15: 160ms } TVFE_Audio_AVL_Param_t; typedef struct { UINT8 enable; UINT8 timer; //control attack time , unit 1ms, min : 10ms (default) range: 10ms ~ 200ms UINT8 attack_release_ratio; //control atack : release ratio , to avoid audio output unsmooth issue. INT32 SP_attack; // PLC Setting for Speaker 0: 0dB, -1 : -0.125dB , 2 : -0.25dB Min = -240(-30dB) INT32 HP_attack; // PLC Setting for headphone 0: 0dB, -1 : -0.125dB , 2 : -0.25dB Min = -240(-30dB) INT32 LO_attack; // PLC Setting for line out 0: 0dB, -1 : -0.125dB , 2 : -0.25dB Min = -240(-30dB) } TVFE_Audio_PLC_Param_t; typedef struct { UINT8 enable; UINT8 freq_index; } TVFE_Audio_Cuf_off_Param_t; typedef struct { INT8 enable; INT8 Q; double freq_index; } TVFE_Audio_HIGHPASS_Param_t; typedef struct { INT8 enable; INT8 Q; double freq_index; } TVFE_Audio_LOWPASS_Param_t; // Noise Reduce parameters typedef struct { UINT8 enable; // 0: disable, gain = 0db, 1: enable NR , decrease gain when input level is smaller UINT8 noiselevel; //if input level < noise level, reduce gain , if input > noise level, increase gain , max = 0db //<0:-40dB,1:-46dB,2:-52dB,3:-58db,4:-64db,5:-70db,6:-76db,7:-82dB,8:-88dB> UINT8 max_reduce_gain; // if input < noise level, max reduce gain, <0:-6dB,1:-8db,2:-10db,3:-12db,4:-14db,5:-16db,6:-18db,7:-20dB,8:-24db,9:-30dB,10:-36db> UINT8 rate; //NR adjust gain step } TVFE_Audio_NoiseReduce_Param_t; // PEQ parameters #ifdef CONFIG_SUPPORT_PROJECT_ID typedef struct { UINT8 enable[5]; // 0: disable, 1:enable UINT16 eq_fq[5]; // 20~20000 UINT8 Qfactor[5]; // 1(0.1)~30(3.0) INT8 gain[5]; // -50~+50, each step is 0.24dB } TVFE_Audio_Parametric_Equalizer_Config_t; #else typedef struct { UINT8 enable[3]; // 0: disable, 1:enable UINT16 eq_fq[3]; // 20~20000 UINT8 Qfactor[3]; // 1(0.1)~30(3.0) INT8 gain[3]; // -50~+50, each step is 0.24dB } TVFE_Audio_Parametric_Equalizer_Config_t; #endif INT32 OpenAudioRxDev(void); void CloseAudioRxDev(void); TVFE_Audio_Status_e TVFE_Audio_DevInit(void); TVFE_Audio_Status_e TVFE_Audio_DevExit(void); TVFE_Audio_Status_e _tvfe_Audio_Adjust_ioctl(AUDIO_ADJUST adj); TVFE_Audio_Status_e TVFE_Audio_Source_Disable(void); TVFE_Audio_Status_e TVFE_Audio_Source_Enable(TVFE_AUDIO_SOURCE_SELECT_t TVFE_ASS); TVFE_Audio_Status_e TVFE_Audio_Set_Source(TVFE_AUDIO_SOURCE_SELECT_t TVFE_ASS); TVFE_Audio_Status_e TVFE_Audio_SPDIF_Output_Config(TVFE_Audio_SPDIF_Output_Config_e SPDIF_Output_Config); TVFE_Audio_Status_e TVFE_Audio_Set_ADC_Linein_Pin(unsigned char line_in_num); TVFE_Audio_Status_e TVFE_Audio_Set_ADC_GAIN(UINT32 adc_pga_gain, UINT32 adc_dpga_gain); TVFE_Audio_Status_e TVFE_Audio_Set_Volume(TVFE_Audio_Volume_t *pVolume_Config, INT32 OffsetStep); TVFE_Audio_Status_e TVFE_Audio_Set_Balance(INT32 LeftValue, INT32 RightValue); TVFE_Audio_Status_e TVFE_Audio_Set_Cuf_off_Config(TVFE_Audio_Cuf_off_Param_t * pCut_off_parm); TVFE_Audio_Status_e TVFE_Audio_Set_Mute_Config(TVFE_Audio_Mute_t *pMute_Config); TVFE_Audio_Status_e TVFE_Audio_Get_Mute_Status(unsigned int *pMute_status); TVFE_Audio_Status_e TVFE_Audio_Lip_Sync_Config(TVFE_Audio_Lip_Sync_Config_t Lip_Sync_Config); TVFE_Audio_Status_e TVFE_Audio_Set_AD_Volume(UINT16 gain); TVFE_Audio_Status_e TVFE_Audio_SetDualMode(TVFE_Audio_SetDualMode_t dualmode); TVFE_Audio_Status_e TVFE_Audio_Get_MPEGChannelStatus(INT32* pmode); TVFE_Audio_Status_e TVFE_Audio_Get_ChannelNum(INT32* pNumber); TVFE_Audio_Status_e TVFE_Audio_Set_Scart_OnOff(unsigned char ONOFF); TVFE_Audio_Status_e TVFE_Audio_Get_HP_Status(UINT8 *php_status); TVFE_Audio_Status_e TVFE_Audio_SetDevicePower(AUDIO_DEVICE_POWERCTRL *pPowerConfig); TVFE_Audio_Status_e TVFE_Audio_Send_AudioInfo(TVFE_Audio_INFO_t* pAudioInfo); TVFE_Audio_Status_e TVFE_Audio_GET_IC_STATUS(pTVFE_Audio_ICSTS_t pStatus); TVFE_Audio_Status_e TVFE_Audio_Project_Init(TVFE_Audio_Project_Info_t *pProject_Init); #ifdef CONFIG_SUPPORT_BOOT_MUSIC TVFE_Audio_Status_e TVFE_Audio_Melody_Init(INT32 m_volume); #endif #ifdef CONFIG_SUPPORT_BURN_MUSIC TVFE_Audio_Status_e TVFE_Audio_Burn_Melody_Init(INT32 m_volume); TVFE_Audio_Status_e TVFE_Audio_Burn_Melody_Exit(INT32 m_volume); #endif TVFE_Audio_Status_e TVFE_Audio_Set_IO_MUX(pTVFE_Audio_IO_SELECT_t pIO); #ifdef CONFIG_SUPPORT_AUDIO_CODEC_OVERLAY TVFE_Audio_Status_e TVFE_Audio_Load_Codec(pTVFE_Audio_LOAD_CODEC_t pConfig); #endif TVFE_Audio_Status_e TVFE_Auio_Get_ADCDAC_poweron_ready(void); TVFE_Audio_Status_e TVFE_Auio_Set_RX_LR_CHANNEL(UINT8 Onoff); // Audio Effect //TVFE_Audio_Status_e TVFE_Audio_Initial_Main_Equalizer(TVFE_Audio_Equalizer_Init_t* pEQ); //TVFE_Audio_Status_e TVFE_Audio_Set_Main_Equalizer_Config(TVFE_Audio_Equalizer_Config_t *pEQ); //TVFE_Audio_Status_e TVFE_Audio_Get_Main_Equalizer_Config(TVFE_Audio_Equalizer_Config_t *pEQ); TVFE_Audio_Status_e TVFE_Audio_Initial_SRSTSHD(TVFE_Audio_SRSTSHD_Param_t *ptSRS_Parameter); TVFE_Audio_Status_e TVFE_Audio_Set_SRSTSHD(UINT8 bOnOff, TVFE_Audio_SRSTSHD_Param_t* ptSRS_Parameter); TVFE_Audio_Status_e TVFE_Audio_Initial_SUNSUR(TVFE_Audio_SUNSUR_Param_t *ptSUNSUR_Param); TVFE_Audio_Status_e TVFE_Audio_Initial_MSAE(TVFE_Audio_MSSUR_Param_t *ptMSSUR_Param); TVFE_Audio_Status_e TVFE_Audio_Set_SUNSUR(UINT8 bOnOff, TVFE_Audio_SUNSUR_Param_t* ptSUNSUR_Param); TVFE_Audio_Status_e TVFE_Audio_Set_MS_SUR(UINT8 bOnOff, TVFE_Audio_MSSUR_Param_t* ptMSSUR_Param); TVFE_Audio_Status_e TVFE_Audio_Set_Effect_Mode(TVFE_AudioSurroundMode_t* Effect_Mode); #ifdef CONFIG_AUDIO_PARAMETRIC_SHELVING TVFE_Audio_Status_e TVFE_Audio_Set_Bass(INT8 gain, UINT32 freuency); TVFE_Audio_Status_e TVFE_Audio_Set_Treble(INT8 gain, UINT32 freuency); #else TVFE_Audio_Status_e TVFE_Audio_Set_Bass(INT8 param); TVFE_Audio_Status_e TVFE_Audio_Set_Treble(INT8 param); #endif TVFE_Audio_Status_e TVFE_Audio_Set_AVL_Config(TVFE_Audio_AVL_Param_t* pAVL); TVFE_Audio_Status_e TVFE_Audio_Set_Noise_Reduce_Config(TVFE_Audio_NoiseReduce_Param_t *pNR); //TVFE_Audio_Status_e TVFE_Audio_Set_Parametric_Equalizer_Config(TVFE_Audio_Parametric_Equalizer_Config_t *pEQ); TVFE_Audio_Status_e TVFE_Audio_Set_Parametric_Equalizer_Config(PEQ_SET * pEQ); #ifdef CONFIG_SUPPORT_HIGHLOW_PASS TVFE_Audio_Status_e TVFE_Audio_Set_HighPass_Config(TVFE_Audio_HIGHPASS_Param_t * phigh_pass); TVFE_Audio_Status_e TVFE_Audio_Set_LowPass_Config(TVFE_Audio_LOWPASS_Param_t * plow_pass); #endif TVFE_Audio_Status_e TVFE_Audio_Set_PLC_Config(TVFE_Audio_PLC_Param_t *pPLC_parm); TVFE_Audio_Status_e TVFE_Audio_Set_SRSTVOL_Config(TVFE_Audio_SRSTVOL_Param_t *ptSRS_Parameter); #ifdef CONFIG_SUPPORT_DBX TVFE_Audio_Status_e TVFE_Audio_DBXTV_SetMode(DBXTV_TotSonMode TotSonMode, DBXTV_TotVolMode TotVolMode, DBXTV_TotSurMode TotSurMode, UINT32 Enable); TVFE_Audio_Status_e TVFE_Audio_DBXTV_LoadPresetsFile(char *filename); TVFE_Audio_Status_e TVFE_Audio_DBXTV_GetParamCoeff(UINT32 ParamCoeff, UINT32 ParamCoeffOffset, UINT32 *ParamCoeffValue); TVFE_Audio_Status_e TVFE_Audio_DBXTV_SetParamCoeff(UINT32 ParamCoeff, UINT32 ParamCoeffOffset, UINT32 ParamCoeffValue); #endif //SIF function TVFE_Audio_Status_e TVFE_Audio_SetSIFPowerCtl(ATVPOWSTS_t ATVStatus); TVFE_Audio_Status_e TVFE_Audio_GetSIFInfo(pTVFE_AudioFrontEndStatus_t pGET_SIFinfo); TVFE_Audio_Status_e TVFE_Audio_SetATVDetect(pTVSYS_CONFIG pTVSystem); TVFE_Audio_Status_e TVFE_Audio_SetATVSystem(TVFE_AudioSIFStandard_t TVSystem); TVFE_Audio_Status_e TVFE_Audio_SetSIFCurrentMode(TVFE_AudioSIFMode_e eSifMode); TVFE_Audio_Status_e TVFE_Audio_SetSIFAutoMute(SIFAAOSASD_STSFLAG Enable_Auto_Mute); TVFE_Audio_Status_e TVFE_Audio_SetSIFThreshold(pTVFE_AudioSIF_TH pSifThreshold); TVFE_Audio_Status_e TVFE_Audio_RFLineCTL(UINT8 plugin); TVFE_Audio_Status_e TVFE_Audio_SetSIFGAIN(pSET_SIF_GAIN pADJ_SIF_GAIN); TVFE_Audio_Status_e TVFE_Audio_SetSIFAGC_Reset(UINT32 Enable); TVFE_Audio_Status_e TVFE_Audio_SetSIFAAOS_OnOff(UINT8 Enable); //~sif TVFE_Audio_Status_e TVFE_Audio_Get_Channel_Number(TVFE_Audio_Channel_Number_e *channel_number); TVFE_Audio_Status_e TVFE_Audio_Headphone_Init(TVFE_Audio_Headphone_t *pHP_Init); TVFE_Audio_Status_e TVFE_Audio_SetATVDetect(pTVSYS_CONFIG pTVSystem ); TVFE_Audio_Status_e TVFE_Audio_Set_Dolby_Delay(INT32 value); #endif