#ifndef _DRV_AUDIO_INTERFACE_H #define _DRV_AUDIO_INTERFACE_H #include #if LINUX_VERSION_CODE == KERNEL_VERSION(2,6,16) #include #elif LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27) #else # error Linux kernel version not supported! #endif #include "drv_types.h" /******************************************************************************************************** DEFINE FOR AUDIO IOCTL FLAG *********************************************************************************************************/ #ifndef IRQ_AUDIORX #define IRQ_AUDIORX 62 #endif #define RX_MAGIC 'q' #define RX_BASE 861 //BASIC IOCTL #define RX_AUDIOOUTPUTSELECT _IOWR(RX_MAGIC, RX_BASE+0x01, INT32) #define RX_AUDIOSOURCEENABLE _IOWR(RX_MAGIC, RX_BASE+0x02, INT32) #define RX_AUDIOSOURCEDISABLE _IOWR(RX_MAGIC, RX_BASE+0x03, INT32) #define RX_AUDIOADJUST _IOWR(RX_MAGIC, RX_BASE+0x04, INT32) #define RX_AUDIO_GET_HPSTATUS _IOWR(RX_MAGIC, RX_BASE+0x05, INT32) #define RX_AUDIO_GET_MUTESTATUS _IOWR(RX_MAGIC, RX_BASE+0x06, INT32) #define RX_AUDIO_SET_VOLUME _IOWR(RX_MAGIC, RX_BASE+0x07, INT32) #define RX_AUDIO_SET_BALANCE _IOWR(RX_MAGIC, RX_BASE+0x08, INT32) #define RX_AUDIO_SET_MUTE _IOWR(RX_MAGIC, RX_BASE+0x09, INT32) #define RX_AUDIO_SET_ADCPIN _IOWR(RX_MAGIC, RX_BASE+0x0a, INT32) #define RX_AUDIO_SET_AUDIOPATH _IOWR(RX_MAGIC, RX_BASE+0x0b, INT32) #define RX_AUDIO_HEADPHONE_INIT _IOWR(RX_MAGIC, RX_BASE+0x0c, INT32) #define RX_AUDIO_DEVICE_POWERCTR _IOWR(RX_MAGIC, RX_BASE+0x0d, INT32) #define RX_AUDIO_GET_ICBONDING _IOWR(RX_MAGIC, RX_BASE+0x0e, INT32) #define RX_AUDIO_PROJECT_INIT _IOWR(RX_MAGIC, RX_BASE+0x0f, INT32) #define RX_AUDIO_IO_SELECT _IOWR(RX_MAGIC, RX_BASE+0x10, INT32) #define RX_AUDIO_LOAD_CODEC _IOWR(RX_MAGIC, RX_BASE+0x11, INT32) #define RX_AUDIO_GET_ADCDACST _IOWR(RX_MAGIC, RX_BASE+0x12, INT32) #define RX_AUDIO_SWAP_RX_LR_CH _IOWR(RX_MAGIC, RX_BASE+0x13, INT32) //POSTPROCESSOR #define RX_SETPOSTPROCESSOR _IOWR(RX_MAGIC, RX_BASE+0x20, INT32) #ifdef CONFIG_SUPPORT_DBX #define RX_GET_DBX_TABLE _IOWR(RX_MAGIC, RX_BASE+0x21, INT32) #define RX_DBX_CTL _IOWR(RX_MAGIC, RX_BASE+0x22, INT32) #endif //SIF SETTING #define RX_TVSYSTEM _IOWR(RX_MAGIC, RX_BASE+0x40, INT32) #define RX_SETATVSYSTEM _IOWR(RX_MAGIC, RX_BASE+0x41, INT32) #define RX_SIFINFO_GET _IOWR(RX_MAGIC, RX_BASE+0x42, INT32) #define RX_AUDIOSIFCTL _IOWR(RX_MAGIC, RX_BASE+0x43, INT32) #define RX_SetStopFlagforSIF _IOWR(RX_MAGIC, RX_BASE+0X44, INT32) //ava@20130613 will be remove later //MISC SETTING #define RX_SETAUDIODEVICE _IOWR(RX_MAGIC, RX_BASE+0x60, INT32) // john@20110907 add new interface for setting external device(ex: DAMP) #define RX_SET_DTV_AD_VOL _IOWR(RX_MAGIC, RX_BASE+0x63, INT32) #define RX_GET_MPEG_CHANNELSTATUS _IOWR(RX_MAGIC, RX_BASE+0x64, INT32) #define RX_GET_AUDIO_CHANNELNUM _IOWR(RX_MAGIC, RX_BASE+0x65, INT32) #define RX_SEND_AUDIOINFO _IOWR(RX_MAGIC, RX_BASE+0x66, INT32) #ifdef CONFIG_SUPPORT_BOOT_MUSIC #define RX_AUDIO_MELODY_INIT _IOWR(RX_MAGIC, RX_BASE+0x67, INT32) #endif #ifdef CONFIG_SUPPORT_BURN_MUSIC #define RX_AUDIO_BURN_MELODY_INIT _IOWR(RX_MAGIC, RX_BASE+0x68, INT32) #define RX_AUDIO_BURN_MELODY_EXIT _IOWR(RX_MAGIC, RX_BASE+0x69, INT32) #endif // AUDIO TOOL #define RX_GET_AUDIO_SETTINGS _IOWR(RX_MAGIC, RX_BASE+0x80, INT32) #define RX_GET_AUDIO_REC_PARAM _IOWR(RX_MAGIC, RX_BASE+0x81, INT32) /******************************************************************************************************** DEFINE FOR SUPPORTED AUDIO CODEC & EFFECT *********************************************************************************************************/ #define AUDIO_FEATURE_MP3 0x00000001 #define AUDIO_FEATURE_AAC 0x00000002 #define AUDIO_FEATURE_EAC3 0x00000004 #define AUDIO_FEATURE_REAL 0x00000008 //COOK #define AUDIO_FEATURE_AC3 0x00000010 #define AUDIO_FEATURE_WMASTD 0x00000020 #define AUDIO_FEATURE_WMAPRO 0x00000040 #define AUDIO_FEATURE_VORBIS 0x00000080 #define AUDIO_FEATURE_AMR 0x00000100 #define AUDIO_FEATURE_APE 0x00000200 //FFMPEG SUPPORT #define AUDIO_FEATURE_FLAC 0x00000400 //FFMPEG SUPPORT #define AUDIO_FEATURE_SILK 0x00000800 #define AUDIO_FEATURE_AC3_ENCODE 0x00001000 #define AUDIO_FEATURE_AAC_MAIN 0x00002000 #define AUDIO_FEATURE_DTS 0x00004000 #define AUDIO_FEATURE_DRA 0x00008000 //AUDIO EFFECT #define AUDIO_FEATURE_SRSTSXT 0x00010000 #define AUDIO_FEATURE_SRSTSHD 0x00010000 #define AUDIO_FEATURE_SRSTVOL 0x00020000 #define AUDIO_FEATURE_DBX 0x00040000 #define AUDIO_FEATURE_SP_SUR 0x00080000 #define AUDIO_FEATURE_MS_SUR 0x00100000 #ifndef CONFIG_AUDIO_FEATURE #define CONFIG_AUDIO_FEATURE 0x00000000 // IF NOT DEFINE CONFIG_AUDIO_FEATURE, USE THIS SETTING FOR DEFAULT #endif #if (CONFIG_AUDIO_FEATURE & AUDIO_FEATURE_MP3) #define AUDIO_CODEC_MP3 //support MP3 codec #endif #if (CONFIG_AUDIO_FEATURE & AUDIO_FEATURE_AAC) #define AUDIO_CODEC_AAC //support AAC codec #endif #if (CONFIG_AUDIO_FEATURE & AUDIO_FEATURE_EAC3) #define AUDIO_CODEC_EAC3 //support EAC3 codec #endif #if (CONFIG_AUDIO_FEATURE & AUDIO_FEATURE_REAL) #define AUDIO_CODEC_REAL //support REAL codec #endif #if (CONFIG_AUDIO_FEATURE & AUDIO_FEATURE_AC3) #define AUDIO_CODEC_AC3 //support AC3 codec #endif #if (CONFIG_AUDIO_FEATURE & AUDIO_FEATURE_WMASTD) #define AUDIO_CODEC_WMASTD //support WMA2 (STD) codec #endif #if (CONFIG_AUDIO_FEATURE & AUDIO_FEATURE_WMAPRO) #define AUDIO_CODEC_WMAPRO //support WMA3(PRO) codec #endif #if (CONFIG_AUDIO_FEATURE & AUDIO_FEATURE_VORBIS) #define AUDIO_CODEC_VORBIS //support VORBIS codec #endif #if (CONFIG_AUDIO_FEATURE & AUDIO_FEATURE_AMR) #define AUDIO_CODEC_AMR //support AMR NB/WB codec #endif #if (CONFIG_AUDIO_FEATURE & AUDIO_FEATURE_APE) #define AUDIO_CODEC_APE //support APE codec #endif #if (CONFIG_AUDIO_FEATURE & AUDIO_FEATURE_FLAC) #define AUDIO_CODEC_FLAC //support FLAC codec #endif #if (CONFIG_AUDIO_FEATURE & AUDIO_FEATURE_DRA) #define AUDIO_CODEC_DRA //support DRA codec #endif #if (CONFIG_AUDIO_FEATURE & AUDIO_FEATURE_SRSTSXT) #define AUDIO_EFFECT_SRSTSXT //support SRSTSXT audio effect #endif #if (CONFIG_AUDIO_FEATURE & AUDIO_FEATURE_SRSTVOL) #define AUDIO_EFFECT_SRSTVOL //support SRSTVOL audio effect #endif #if (CONFIG_AUDIO_FEATURE & AUDIO_FEATURE_MS_SUR) #define AUDIO_EFFECT_MS_SUR //Maximus Surround #endif #if (CONFIG_AUDIO_FEATURE & AUDIO_FEATURE_DBX) #define AUDIO_EFFECT_DBX #endif /******************************************************************************************************** AUDIO ENUM FOR MISC SETTING *********************************************************************************************************/ //typedef enum _audio_op enum { //BASIC AUDIO SETTING AUDIO_OP_SLIPSYNC = 0, // Add for user adjust Audio delay time unit: 1ms Range +200 ~-200(ms) AUDIO_OP_UFRC_DELAY_TIME, AUDIO_OP_DOLBY_AUDIO_EXTDELAY, // add for Dolby audio add ext pts offset delay time unit: 1ms Range +200ms ~-200ms //MISC SETTING AUDIO_OP_DD_DRC_MODE = 10, AUDIO_OP_OUTPUT_CHANNEL_MODE, AUDIO_OP_TXHW_MUTE_ENABLE, //Use to control AUDIO TX HW mute enable register, normal mute control don't control this register AUDIO_OP_DTV_ADVOL, // NO USED NOW AUDIO_OP_ADVOL, AUDIO_OP_SCARTONOFF, //USE TO CONTROL SCART BYPASS SIF FEATURE ON/OFF AUDIO_OP_ADC_DPGA_GAIN, //FOR APP CONTROL AUDIO ADC HW DPGA GAIN AUDIO_OP_ADC_PGA_GAIN, //FOR APP CONTROL AUDIO ADC HW PGA GAIN //SIF SETTING AUDIO_OP_STVMTS = 30, // SET TV MULTI SOUND AUDIO_OP_SIFFILBW, //set SIF filter bandwidth AUDIO_OP_UNDEF }; //}AUDIO_OP_t, *pAUDIO_OP_t; #ifndef DEF_AUDIO_MENU_PATH #define DEF_AUDIO_MENU_PATH enum { AUDIO_MENU_INTERNAL, AUDIO_MENU_EXTERNAL, AUDIO_MENU_SPDIF_OUTPUT, //ONLY SPDIF OUTPUT (NO I2S OUT) , DOLBY WILL RAW OUTPUT, OTHERS WILL BE PCM AUDIO_MENU_PARALLEL_SPDIF_NONLINEAR, AUDIO_MENU_PARALLEL_SPDIF_LINEAR, AUDIO_MENU_SPDIF_OUTPUT_PCM, //ONLY SPDIF OUTPUT (NO I2S OUT) , ALL AUDIO TYPE WILL BE PCM OUTPUT (FLAG = DECODEING) AUDIO_MENU_MUTE, AUDIO_MENU_DISABLE, AUDIO_MENU_UNDEFINED, }; #define AUDIO_MENU_PARALLEL_OUTPUT AUDIO_MENU_PARALLEL_SPDIF_NONLINEAR // reserved for backward compatible #endif // TruSurround XT modes enum { MIPS_SAI_TSXT_1_0, // C MIPS_SAI_TSXT_2_0, // L/R MIPS_SAI_TSXT_2_1, // L/R/Cs MIPS_SAI_TSXT_2_2, // L/R/Ls/Rs MIPS_SAI_TSXT_3_0, // L/C/R MIPS_SAI_TSXT_3_1, // L/C/R/Cs MIPS_SAI_TSXT_3_2, // L/C/R/Ls/Rs MIPS_SAI_TSXT_3_3, // L/C/R/Ls/Cs/Rs MIPS_SAI_TSXT_PASSIVEMATRIX, // Lt/Rt directly into L/R channels MIPS_SAI_TSXT_3_2_BSDIGITAL, // L/C/R/Ls/Rs compatible with BS Digital AAC content MIPS_SAI_TSXT_PL2_MUSIC, // L/C/R/Ls/Rs (PLII decoded in Music mode) MIPS_SAI_TSXT_CSII, // CSII decoded material MIPS_SAI_TSXT_TS_NUM_MODES }; // TruSurround XT TruBass speaker sizes enum { MIPS_SAI_TSXT_SPK_40_HZ, // 40 Hz low-frequency response MIPS_SAI_TSXT_SPK_60_HZ, // 60 Hz low-frequency response MIPS_SAI_TSXT_SPK_100_HZ, // 100 Hz low-frequency response MIPS_SAI_TSXT_SPK_150_HZ, // 150 Hz low-frequency response MIPS_SAI_TSXT_SPK_200_HZ, // 200 Hz low-frequency response MIPS_SAI_TSXT_SPK_250_HZ, // 250 Hz low-frequency response MIPS_SAI_TSXT_SPK_300_HZ, // 300 Hz low-frequency response MIPS_SAI_TSXT_SPK_400_HZ, // 400 Hz low-frequency response MIPS_SAI_TSXT_NUM_SPK_SIZES }; // Dolby Digital dynamic range compression modes enum { MIPS_SAI_DDCD_COMP_CA, // custom mode, analog dialnorm MIPS_SAI_DDCD_COMP_CD, // custom mode, digital dialnorm MIPS_SAI_DDCD_COMP_LO, // line out mode //standard MIPS_SAI_DDCD_COMP_RF, // RF remod mode //compressed MIPS_SAI_DDCD_NUM_COMP_MODES }; //hauchuen@20110831 add for SRS TSHD PostProcessor interface typedef enum _SRS_TSHD_MODE_t{ SRS_OFF = 0, //SRS disable SRS_TSXT_ON, //Enable SRS TSXT (Surround, DC, TB) SRS_TSHD_ON, //Enable SRS TSHD (Surround, DC, TB, Def) SRS_TSHD_BYPASS, //SRS TSHD BYPASS Mode SRS_TSHD_CERTIFICATION, //SRS TOOL SRS_TSHD_USERDEFINE, //reserved for user define whic feature will be enable SRS_TSHD_MAX, }SRS_TSHD_MODE_t; //typedef enum _audio_op enum { Fail, Success, Connecting }; typedef enum _OUTPUT_CHANNEL_MODE_e { OUTPUT_CHANNEL_AUTO, OUTPUT_CHANNEL_STEREO, OUTPUT_CHANNEL_LEFT, OUTPUT_CHANNEL_RIGHT, OUTPUT_CHANNEL_MIX, OUTPUT_CHANNEL_MODE_NUM, }OUTPUT_CHANNEL_MODE_e; typedef enum _AudioSrc_e { AUDIOSRC_ATV, AUDIOSRC_DTV, AUDIOSRC_AV, AUDIOSRC_SV, AUDIOSRC_COMPONENT, AUDIOSRC_HDMI, //5 AUDIOSRC_PC, AUDIOSRC_USB, AUDIOSRC_SCART, AUDIOSRC_MUSIC, AUDIOSRC_DVI, // 10 AUDIOSRC_KOK, // 11 AUDIOSRC_MOVIE, // 12 AUDIOSRC_ANDROID, // 13 AUDIOSRC_ALSA, // Super@20101026 AUDIOSRC_DVD, //15 jovi@20120720 add #ifdef CONFIG_BLUETOOTH_SUPPORT AUDIOSRC_BLUETOOTH, #endif AUDIOSRC_NotDefine, }AudioSrc_e; enum { I2S, RF, }; enum { // SPDIF 60958-3 page17, take care bit order in spec // bits 15 to 8 SPDIF_CATEGORY_CODE_GENERAL = 0x0, // USA= 1100 100 SPDIF_CATEGORY_CODE_DIGITAL_BROADCAST_USA = 0x64, // EUROPE= 0001 100 SPDIF_CATEGORY_CODE_DIGITAL_BROADCAST_EUROPE = 0x0c, // JAPAN= 0000 100 SPDIF_CATEGORY_CODE_DIGITAL_BROADCAST_JAPAN = 0x04, }; enum// _SISAUDIO_DEV_MINOR { SISAUDIO_DEV_AUDIORX, SISAUDIO_DEV_REAL, SISAUDIO_DEV_DCT, SISAUDIO_DEV_MP, SISAUDIO_DEV_AAC, SISAUDIO_DEV_MP3, SISAUDIO_DEV_UNDEF, }; //SRS TRUVOL typedef enum { VIQ_kSrsNormal, VIQ_kSrsLight, VIQ_kSrsVolumeModeSize } SRSVolumeIQMode; typedef enum { VIQ_kSrs20Hz, VIQ_kSrs40Hz, VIQ_kSrs110Hz, VIQ_kSrs200Hz, VIQ_kSrs315Hz, VIQ_kSrs410Hz, VIQ_kSrsVolumeSpeakerSize } SRSVolumeIQSpeakerSize; //~SRS TRUVOL typedef enum _POSTPROCESSOR_TYPE_t{ PPTYPE_AUDIOEFFECT = 0, PPTYPE_SRS_TSXT = 1, PPTYPE_SRS_TRUEVOL = 2, PPTYPE_SRS_TSHD = 3, PPTYPE_PEQ = 4, PPYPE_MAXIMUS_SURROUND = 5, #if 0 PPTYPE_SIS_EQ_INIT = 5, // new EQ: fc and Q setting PPTYPE_SIS_EQ_SET = 6, // new EQ: gain setting #endif PPTYPE_NR = 7, // Line in noise reduce PPTYPE_AGC = 8, // Audio Gain control (audiorom function) PPTYPE_TREBLE = 9, PPTYPE_BASS = 10, PPTYPE_PLC= 11, // Power Limiter Control PPTYPE_CUT_OFF= 12, PPTYPE_DBX= 13, // DBXAUDIO PPTYPE_HIGHPASS=14, PPTYPE_LOWPASS=15, PPTYPE_TITOI = 16, PPTYPTE_MAX_NUM, }POSTPROCESSOR_TYPE_t; #if 0 enum { EQ_BAND1 = 0, EQ_BAND2, EQ_BAND3, EQ_BAND4, EQ_BAND5, EQ_BAND6, EQ_BAND7, EQ_BAND8, EQ_BAND9, EQ_BAND_MAX,// 9 }; enum { PEQ_BAND1 = 0, PEQ_BAND2, PEQ_BAND3, PEQ_BAND_MAX,// 3 }; #endif /** Total Sonics modes for DBXTV_SetMode() */ typedef enum _DBXTV_TotSonMode { TOTSON_ON = 0, TOTSON_OFF } DBXTV_TotSonMode; /** Total Volume modes for DBXTV_SetMode() */ typedef enum _DBXTV_TotVolMode { TOTVOL_NORMAL = 0, TOTVOL_NIGHT, TOTVOL_OFF } DBXTV_TotVolMode; /** Total Surround modes for DBXTV_SetMode() */ typedef enum _DBXTV_TotSurMode { TOTSUR_ON = 0, TOTSUR_OFF } DBXTV_TotSurMode; enum { PEQ_BAND1 = 0, PEQ_BAND2, PEQ_BAND3, PEQ_BAND4, PEQ_BAND5, PEQ_BAND6, PEQ_BAND7, PEQ_BAND8, PEQ_BAND9, PEQ_BAND10, PEQ_BAND11, PEQ_BAND12, PEQ_BAND_MAX,// 12 }; typedef enum{ SISAE_SURMODE_3DMONO = 0, SISAE_SURMODE_STEREO = 1, SISAE_SURMODE_VS3 = 2, SISAE_SURMODE_STEREO_MIX = 3, SISAE_SP_SURROUND = 4, //Reserved SISAE_SURMODE_MAX = 8, }SISAE_SURMODE; typedef enum { PLAYBACK_NORMAL = 0, PLAYBACK_FAST_2X, PLAYBACK_FAST_4X, PLAYBACK_SLOW_2X, PLAYBACK_SLOW_4X, PLAYBACK_SLOW_8X, PLAYBACK_SLOW_16X, PLAYBACK_SLOW_32X } AUDIO_PLAYBACK; //ava@20120530 for EU scart output typedef enum _SCART_STATUS { SCART_DISABLE= 0, SCART_ENABLE, } SCART_STATUS; //~ava //HW output path SDx->I2Sx->DACx typedef enum _TVFE_Audio_MUTE_Path_e { TVFE_AUDIO_MUTE_PATH_INVALID = 0, TVFE_AUDIO_MUTE_MAIN_SD0_PATH = 1, //TX HW AVC SD0 mute TVFE_AUDIO_MUTE_AUXI_SD1_PATH = 2, //TX HW AVC SD1 mute TVFE_AUDIO_MUTE_SPDIF_PATH = 3, //TX HW AVC SPDIF soft mute TVFE_AUDIO_MUTE_DAC_SPEAKER_PATH = 4, //TX HW DAC1 speaker mute TVFE_AUDIO_MUTE_DAC_HEADPHONE_PATH = 5, //TX HW DAC1 HP mute TVFE_AUDIO_MUTE_DAC_LINEOUT_PATH = 6, //TX HW DAC2 lineout mute TVFE_AUDIO_MUTE_I2S0_PATH = 7, //TX HW output IS20 mute TVFE_AUDIO_MUTE_I2S1_PATH = 8, //TX HW output IS21 mute TVFE_AUDIO_MUTE_I2S3_PATH = 9, //TX HW output IS23 mute TVFE_AUDIO_MUTE_DRV_ALL_PATH = 10, //FOR DRV TEMP MUTE CONTROL TVFE_AUDIO_MUTE_MAIN_SD0_L_PATH = 11, //TX HW AVC SD0 mute TVFE_AUDIO_MUTE_MAIN_SD0_R_PATH = 12, //TX HW AVC SD0 mute TVFE_AUDIO_MUTE_PATH_NR } TVFE_Audio_MUTE_Path_e; typedef enum _TVFE_Audio_VOLUME_Path_e { TVFE_AUDIO_VOL_PATH_INVALID = 0, TVFE_AUDIO_VOL_MAIN_SD0_PATH, TVFE_AUDIO_VOL_AUXI_SD1_PATH, TVFE_AUDIO_VOL_SPDIF_PATH, TVFE_AUDIO_VOL_PATH_NR } TVFE_Audio_VOLUME_Path_e; typedef enum _TVFE_Audio_Output_e { TVFE_AUDIO_OUTPUT_INVALID = 0, TVFE_AUDIO_OUTPUT_DAC0, TVFE_AUDIO_OUTPUT_DAC1, TVFE_AUDIO_OUTPUT_I2S0, TVFE_AUDIO_OUTPUT_I2S1, TVFE_AUDIO_OUTPUT_SPDIF, TVFE_AUDIO_OUTPUT_NR } TVFE_Audio_Output_e; typedef enum _TVFE_Audio_Data_e { TVFE_AUDIO_DATA_INVALID = 0, TVFE_AUDIO_DATA_SD0, //With PostProcess TVFE_AUDIO_DATA_SD1, //No PostProcess TVFE_AUDIO_DATA_NR } TVFE_Audio_Data_e; typedef enum _TVFE_Audio_Headphone_Status_e { TVFE_Audio_Headphone_PlugOut = 0, TVFE_Audio_Headphone_PlugIn, } TVFE_Audio_Headphone_Status_e; typedef enum _TVFE_Audio_GPIO_Status_e { TVFE_Audio_Low_Active = 0, TVFE_Audio_High_Active, } TVFE_Audio_GPIO_Status_e; typedef enum _AUDIO_SETTINGS_TYPE_e { AUDIO_SETTINGS_TYPE_BASS = 0, AUDIO_SETTINGS_TYPE_TREBLE, // AUDIO_SETTINGS_TYPE_EQ, AUDIO_SETTINGS_TYPE_BALANCE, AUDIO_SETTINGS_TYPE_VOLUME, AUDIO_SETTINGS_TYPE_VOL_OSD, AUDIO_SETTINGS_TYPE_VOL_OFFSET, AUDIO_SETTINGS_TYPE_SUN_SURROUND, AUDIO_SETTINGS_TYPE_SRS_TSHD, AUDIO_SETTINGS_TYPE_SRS_TVOL, AUDIO_SETTINGS_TYPE_AVL, AUDIO_SETTINGS_TYPE_PLC, } AUDIO_SETTINGS_TYPE_e; typedef enum _MPEGHEADER_CHANNEL_MODE_e { MPEG_STEREO_MODE, MPEG_JOINT_MODE, MPEG_DUAL_MODE, MPEG_SINGLE_MODE, MPEG_MODE_TOTAL_NUMBER, MPEG_MODE_ERROR, // NON MPEG AUDIO , RETURN ERROR. }MPEGHEADER_CHANNEL_MODE_e; typedef enum _TVFE_Audio_INFO_FLAG_e { SEND_INFO_UNKNOW = 0, SEND_INFO_HDMI_CEC = 1, //RESERVED }TVFE_Audio_INFO_FLAG_e; typedef enum _TVFE_Audio_ICSTS_Flag_e { ICSTS_FLAG_BONDING = 0, ICSTS_FLAG_BOOTMUSIC_PLAYING = 1, ICSTS_FLAG_QUERY_AUDIO_DATA_TYPE = 2, ICSTS_FLAG_MAX }TVFE_Audio_ICSTS_Flag_e; typedef enum _TVFE_Audio_Data_Type_e { AUDIO_CODEC_DATA_PCM = 0, AUDIO_CODEC_DATA_MPEG, AUDIO_CODEC_DATA_AC3, // 2 AUDIO_CODEC_DATA_DTS, AUDIO_CODEC_DATA_AAC, AUDIO_CODEC_DATA_MP3, AUDIO_CODEC_DATA_REAL, AUDIO_CODEC_DATA_EAC3, //7 AUDIO_CODEC_DATA_WMA, AUDIO_CODEC_DATA_COOK, AUDIO_CODEC_DATA_AMRNB, AUDIO_CODEC_DATA_AMRWB, AUDIO_CODEC_DATA_VORBIS, AUDIO_CODEC_DATA_SILK, AUDIO_CODEC_DATA_ISAC, AUDIO_CODEC_DATA_DRA, AUDIO_CODEC_DATA_FLAC, //16 AUDIO_CODEC_DATA_MAX, }TVFE_Audio_Data_Type_e; typedef enum _TVFE_DOLBY_REGION_e { DOLBY_REGION_EU = 0, DOLBY_REGION_ATSC = 1, DOLBY_REGION_OTHERS = 2, }TVFE_DOLBY_REGION_e; typedef enum _TVFE_Audio_IOMUX_e { TVFE_AUDIO_IOMUX_INVALID = 0, TVFE_AUDIO_IOMUX_SD0, //no used now TVFE_AUDIO_IOMUX_SD1, //no used now TVFE_AUDIO_IOMUX_I2S_OUT_ENABLE, //enable I2S chip output TVFE_AUDIO_IOMUX_I2S_INIT, //init I2S chip out setting TVFE_AUDIO_IOMUX_DAC1_SRC, //Select Audio DAC1 SRC from I2S0 OR I2S1 , DEFAULT I2S0 TVFE_AUDIO_IOMUX_DAC2_SRC, //Select Audio DAC2 SRC I2S0 OR I2S1 , DEFAULT I2S1 TVFE_AUDIO_IOMUX_I2S0_SRC, //Select Audio I2S output from I2S0 OR I2S1 , DEFAULT I2S0 , CHIP ONLY ONE I2S OUTPUT TVFE_AUDIO_IOMUX_TX_AVC_I2S0_SRC, //TX input I2S0 SRC SELECT, Audio_I2S_SRC_t TVFE_AUDIO_IOMUX_TX_AVC_I2S1_SRC, //Tx input I2S1 SRC SELECT, Audio_I2S_SRC_t TVFE_AUDIO_IOMUX_SD0_CH_MUX, //select SD0 channel MUX // TVFE_Audio_CHMUX_e TVFE_AUDIO_IOMUX_SD1_CH_MUX, //select SD1 channel MUX // TVFE_Audio_CHMUX_e TVFE_AUDIO_IOMUX_MAX, } TVFE_Audio_IOMUX_e; typedef enum _TVFE_Audio_CHMUX_e { TVFE_Audio_TXCHMUX_LR=0, TVFE_Audio_TXCHMUX_LL=1, TVFE_Audio_TXCHMUX_RR=2, TVFE_Audio_TXCHMUX_RL=3, }TVFE_Audio_CHMUX_e; typedef enum { I2S0=0, I2S1, I2S2, I2S3, SPDIF, Audio_kNbOfI2S_DEVICE } AudioTX_OUT_DEVICE_t; typedef enum { I2S_SRC_SD0=0, //with audio effect I2S_SRC_SD1, //without audio effect I2S_SRC_SD2, //no used I2S_SRC_SD3, //no used I2S_SRC_WAVGEN, Audio_kNbOfI2S_SRC } Audio_I2S_SRC_t; typedef enum _TVFE_Audio_CODEC_TYPE_e { TVFE_AUDIO_CODEC_PCM = 0, TVFE_AUDIO_CODEC_MPEG = 1, TVFE_AUDIO_CODEC_DOLBY= 2, TVFE_AUDIO_CODEC_DTS = 3, TVFE_AUDIO_CODEC_AAC = 4, TVFE_AUDIO_CODEC_AACMAIN = 5, TVFE_AUDIO_CODEC_WMA2 = 6, TVFE_AUDIO_CODEC_COOK = 7, TVFE_AUDIO_CODEC_VORBIS = 8, TVFE_AUDIO_CODEC_DRA = 9, TVFE_AUDIO_CODEC_FLAC = 10, TVFE_AUDIO_CODEC_AMR = 11, }TVFE_Audio_CODEC_TYPE_e; typedef enum _TVFE_Audio_CODEC_FLAG_e { TVFE_AUDIO_CODEC_FLAG_SET = 0, TVFE_AUDIO_CODEC_FLAG_STOP = 1, TVFE_AUDIO_CODEC_FLAG_QUERY = 2, // TVFE_AUDIO_CODEC_FLAG_QUERY_TYPE = 3, }TVFE_Audio_CODEC_FLAG_e; typedef enum _TVFE_Audio_CODEC_STATUS_e { TVFE_AUDIO_CODEC_STATUS_COMPLETE = 0, //LOAD CODEC COMPLETE, CAN SEND CMD TO DECODE TVFE_AUDIO_CODEC_STATUS_THESAMECODEC = 1, //THE SAME CODEC TVFE_AUDIO_CODEC_STATUS_SCHEDULE = 2, //SCHEDULE LOAD CODEC SUCESSFULLY, APP TVFE_AUDIO_CODEC_STATUS_WAIT = 3, //WQ IS RUNNING, PLEASE WAIT 20ms TO CHECK AGAIN TVFE_AUDIO_CODEC_STATUS_ERROR = 4, //FAIL, NOT SUPPORT CODEC. OR SRC }TVFE_Audio_CODEC_STATUS_e; typedef enum _TVFE_Audio_ADCDAC_e { TVFE_AUDIO_ADCDAC_NOT_READY = 0, TVFE_AUDIO_ADCDAC_READY = 1, }TVFE_Audio_ADCDAC_e; /******************************************************************************************************** AUDIO STRUCTURE FOR MISC SETTING *********************************************************************************************************/ #pragma pack(push,1) typedef struct _AUDIO_RANGE { INT32 min[AUDIO_OP_UNDEF]; INT32 max[AUDIO_OP_UNDEF]; INT32 cur[AUDIO_OP_UNDEF]; }AUDIO_RANGE, *pAUDIO_RANGE; typedef struct _TVFE_Audio_Output_Config_t { TVFE_Audio_Output_e Output_Port; TVFE_Audio_Data_e data_type; } TVFE_Audio_Output_Config_t,*pTVFE_Audio_Output_Config_t; typedef struct _AUDIO_OUTPUT_SELECT { INT32 audio_opt; // audio output path }AUDIO_OUTPUT_SELECT, *pAUDIO_OUTPUT_SELECT; typedef struct _AUDIO_SOURCE_SELECT { INT32 audio_src; // audio source INT32 audio_srcno; // audio source number UINT8 scart_enable; // 0:scart disable 1:scart enable //ava@20120530 for EU scart output }AUDIO_SOURCE_SELECT, *pAUDIO_SOURCE_SELECT; typedef struct _AUDIO_ADJUST { INT32 flag; INT32 value; union { UINT32 state : 32; struct { UINT32 FromOSD : 1; // 1: user mute 0: temp mute UINT32 LinkStatus : 2; //20080908 Kai add for pair function UINT32 FromMP3 : 1; //1: driver use temp mute status, it will not be , 0: UMF/KMF mute status UINT32 DisableAAMP : 1; // some audio amp has white noise issue when amp mute, so kmf will set disableamp=1, when no signal mute UINT32 TXMuteCTL: 1; UINT32 reserved : 26; }; //HC modify New Adjust structure . struct { //mute control status UINT32 FlowMuteStatus : 3; // 0: temp mute, 1: user mute UINT32 NoKeepMuteStatus : 1; // 1: audio driver will not save mute status, it doesnt affect UMF mute status , 0: Flow mute control UINT32 NoSignalMute : 1; // 1: mute will disable audio amp , use from no siganl mute that may has white noise issue UINT32 MutePriority: 3; // 0: UMF/FLOW Control, 1: Drv temp mute .... others lower priority //others setting UINT32 reserved1_b8_b31 : 24; }; //~HC }; }AUDIO_ADJUST, *pAUDIO_ADJUST; // Nonlinear Audio Structure definition typedef struct _AUDIO_AC3HEADERDATA { union { struct { UINT32 ec3_dummy : 19; UINT32 bsid_dummy : 5; UINT32 ec3_lfeon : 1; UINT32 ec3_acmod : 3; UINT32 ec3_fscod2_numblkscod : 2; UINT32 ec3_fscod : 2; }; struct { /* E-AC3 Case */ UINT32 no_use02:26; UINT32 ec3_byte5bit23:2; //5[3:2] UINT32 ec3_byte5bit45:2; //5[5:4] UINT32 ec3_byte5bit76:2; //5[7:6] }; struct { UINT32 dummy:13; UINT32 acmod:3; //7[7:5] UINT32 bsmod:3; //6[2:0] UINT32 bsid:5; //6[7:3] UINT32 frmsizecod:6; //5[5:0] UINT32 fscod:2; //5[7:6] }; UINT32 dw2; }; union { struct { /* E-AC3 Case */ UINT32 ec3_frmsize:11; UINT32 substreamid:3; UINT32 strmtyp:2; UINT32 no_use01:16; }; struct { UINT32 crc:16; UINT32 syncword:16; }; UINT32 dw1; }; }AUDIO_AC3HEADERDATA, *AUDIO_AC3HEADERDATAPTR; typedef struct _NOTICE_AUDIO_EVENT { UINT32 event_type; //event type, 0: audio_txhw_mute_enable INT32 event_data; } NOTICE_AUDIO_EVENT,*pNOTICE_AUDIO_EVENT; typedef struct _TVFE_Audio_Volume_t { TVFE_Audio_VOLUME_Path_e Vol_Path; INT32 Volume; UINT32 OSD_Volume_index; //0~100 } TVFE_Audio_Volume_t,*pTVFE_Audio_Volume_t; typedef struct _TVFE_Audio_Balance_t { INT32 left_val; INT32 right_val; }TVFE_Audio_Balance_t, *pTVFE_Audio_Balance_t; typedef struct _TVFE_Audio_Mute_t { UINT8 Enable; TVFE_Audio_MUTE_Path_e Mute_Path; INT32 Mute_Delay; // delay > 0 : do mute control and then delay , delay < 0, delay before do mute control UINT8 Mute_TXSpeed; // CONTROL TX MUTE FADE SPEED(NON TX HW device is no useless) } TVFE_Audio_Mute_t,*pTVFE_Audio_Mute_t; typedef struct _TVFE_Audio_Headphone_t { UINT8 HP_DET_GPIO; TVFE_Audio_GPIO_Status_e GPIO_Status; // 1: High Active = Plug in, 0: Low Active = Plug in TVFE_Audio_Headphone_Status_e HP_Status; } TVFE_Audio_Headphone_t,*pTVFE_Audio_Headphone_t; typedef struct _TVFE_Audio_INFO_t { UINT32 flag; //REFER TVFE_Audio_INFO_FLAG_e union{ UINT32 cec_audio_format; //REMAP AUDIO_FEATURE //reserved for others info UINT32 audio_info; }; }TVFE_Audio_INFO_t, *pTVFE_Audio_INFO_t; typedef struct _TVFE_Audio_ICSTS_t { TVFE_Audio_ICSTS_Flag_e flag; //SELECT STATUS TYPE : 0: IC BONDING STATUS, 1: BMUSIC PLAYING STATUS UINT8 DOLBY_status; //0: NOT SUPPORT DOLBY 1: SUPPORT DOLBY UINT8 SRSTSHD_status; //0: NOT SUPPORT SRSTSHD 1: SUPPORT DOLBY UINT8 BMUSIC_ISPLAYING; //0: BMUSIC DON'T BE PLAYING, 1: BMUSIC IS PLAYING TVFE_Audio_Data_Type_e audio_data_type; // } TVFE_Audio_ICSTS_t,*pTVFE_Audio_ICSTS_t; /* CUSTOMIZE PROJECT INFO FOR DRIVER SETTING. */ typedef struct _TVFE_Audio_Project_Info_t { UINT32 spdif_category_boardcast_type;//ATV/DTV UINT32 spdif_category_type; //OTHERS , EXPECT HDMI UINT32 dolby_region; // DOLBY HAS DIFF SPEC BY REGION(EX. LOUNDESS OR DRC ), USE THIS FLAG TO CONTROL DRIVER SETTING //0: EU, 1, ATSC, 2: OTHERS(ASIA) //RESERVED } TVFE_Audio_Project_Info_t,*pTVFE_Audio_Project_Info_t; typedef struct _TVFE_Audio_IO_SELECT_t { TVFE_Audio_IOMUX_e flag; //SELECT IO TYPE TVFE_Audio_CHMUX_e i2s_ch_map; UINT8 src_type; //SELECT I2S SRC Audio_I2S_SRC_t //FOR I2S OUT ENABLE SETING UINT8 i2s_out_enable; //for I2S OUTPUT ENABLE 0: DISABLE , 1: ENABLE UINT8 i2s_sd_pin; // set1~4 UINT8 i2s_ws_pin; // set1~4 UINT8 i2s_mck_pin; // set1~4 UINT8 i2s_sck_pin; } TVFE_Audio_IO_SELECT_t,*pTVFE_Audio_IO_SELECT_t; typedef struct _TVFE_Audio_LOAD_CODEC_t { TVFE_Audio_CODEC_FLAG_e flag; //LOAD CODEC FLAG TVFE_Audio_CODEC_TYPE_e new_type; //NEW AUDIO CODEC TYPE TVFE_Audio_CODEC_TYPE_e cur_type; //CURRENT AUDIO CODEC TYPE TVFE_Audio_CODEC_STATUS_e status; //LOAD CODEC STATUS }TVFE_Audio_LOAD_CODEC_t,*pTVFE_Audio_LOAD_CODEC_t; typedef struct _TVFE_Audio_ADCDADC_t { TVFE_Audio_ADCDAC_e poweron_ready; }TVFE_Audio_ADCDADC_t,*pTVFE_Audio_ADCDADC_t; /******************************************************************************************************** AUDIO STRUCTURE FOR POSTPROCESSOR SETTING *********************************************************************************************************/ typedef struct _DAC_Vol_Config { UINT8 enable; //UINT8 timer; //control attack time , unit 1ms, min : 10ms (default) range: 10ms ~ 200ms UINT8 release_ratio; //control release ratio , to avoid audio output unsmooth issue. UINT8 gain_step_dB; //control release and attack adjust gain. 1=0.125db }DAC_Vol_Config, *pDAC_Vol_Config; typedef struct _CUT_OFF_SET { UINT8 enable; UINT8 freq_index; }CUT_OFF_SET, *pCUT_OFF_SET; typedef struct _HPLP_SET { UINT8 hp_en; UINT8 lp_en; INT32 freq_hp; INT32 freq_lp; INT8 Q_hp; INT8 Q_lp; }HPLP_SET, *pHPLP_SET; typedef struct _PLC_Config { 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) }PLC_Config, *pPLC_Config; typedef struct _SRS_TSHD_SET { //op mode struct { UINT8 SRSTSHD_MODE : 4; //0: OFF, 1: Lt/Rt mode 2:bypass 3:user define UINT8 reserved1: 4; }; //internal parameter control struct { UINT8 Enable : 1; // Main function Enable flag UINT8 Surround_En : 1; //Surround Enable UINT8 DialogClarity_En : 1; // Focus enable/disable flag (Dialog Clarity) UINT8 TruBassFront_En : 1; // TruBass enable/disable flag UINT8 DefinitionFront_En : 1; UINT8 TruBass_spksize : 3; //// TruBass speaker size, 0~7 40Hz~400Hz }; struct { UINT8 Inputmode : 4; // TruSurround mode, 0~11 UINT8 Outputmode: 3; // fix at STEREO output UINT8 reserved3: 1; }; //customer setting UINT8 InputGain; //0~100 -> 0.0~1.00 UINT8 OutputGain; //0~100 -> 0.0~1.00 UINT8 bypassGain; //0~100 -> 0.0~1.00 UINT8 SurroundLevel; // 0~ 100 -> 0.0~ 1.00 UINT8 DialogClarityLevel; // 0~ 100 -> 0.0~ 1.00 UINT8 TruBassFrontLevel; // 0~ 100 -> 0.0~ 1.00 UINT8 DefinitionFrontLevel; // 0~ 100 -> 0.0~ 1.00 }SRS_TSHD_SET, *pSRS_TSHD_SET; typedef struct _SISAE_SET { struct { UINT8 SiSAE_enable: 1; UINT8 SiSAE_surround_en:1; UINT8 SiSAE_voice_en: 1; UINT8 SiSAE_bass_en: 1; UINT8 sf_exp: 1; //EXPANSION SOUND FIELD UINT8 Reserved0: 3; }; UINT8 SiSAE_Sur_mode; //surround mode UINT8 SiSAE_Sur_Lv; // surround level UINT8 SiSAE_Voice_Lv; //voice level UINT8 SiSAE_Bass_Lv; // bass level UINT8 SiSAE_Bass_Freq; // bass freq UINT8 SiSAE_inputgain; UINT8 directgain; //only use for S+ Surround range 1~10 , default 9 UINT8 reverbgain; //only use for S+ Surround range 1~10 , default 7 UINT8 ambiancegain; //only use for S+ Surround range 1~10 , default 9 }SISAE_SET, *pSISAE_SET; typedef struct _MS_AE_SET { struct { UINT8 MS_AE_enable: 1; UINT8 MS_AE_surround_en:1; UINT8 MS_AE_voice_en: 1; UINT8 MS_AE_bass_en: 1; UINT8 MS_definition_en: 1; UINT8 MS_AE_sf_exp: 1; //EXPANSION SOUND FIELD UINT8 Reserved0: 2; }; UINT8 MS_AE_surround_gain; //total gain output UINT8 MS_AE_Sur_Lv; // , default 8 //0.0~1.0,outputsound= (1-gain)*(input_sound) + gain*(surround_sound) UINT8 MS_AE_Sur_Delay; // surround level delay ,delay sample //0~4800,echo effect , 480 sample/step. UINT8 MS_AE_Bass_Freq; // bass freq 0:100 1:200 2:400 UINT8 MS_AE_bassfix_gain; // , default 8 UINT8 MS_AE_Voice_Lv; //voice level ,dialog clarity //0~+10dB (2500Hz EQ) UINT8 MS_AE_Definition_gain; // high pass definition 0~+10dB (5000Hz EQ) UINT8 reserved1; UINT8 reserved2; }MS_AE_SET, *pMS_AE_SET; typedef struct _PEQ_ELEMENT { UINT32 valid; // 0: disable, 1:enable UINT32 gain; UINT32 alpha; UINT32 beta; UINT32 gamma; } PEQ_ELEMENT, *pPEQ_ELEMENT; typedef struct _PEQ_SET { UINT8 valid[PEQ_BAND_MAX]; // 0: disable, 1:enable UINT32 fc[PEQ_BAND_MAX]; // center frequency: 20~20000 UINT8 q[PEQ_BAND_MAX]; // 1(0.1)~30(3.0) INT8 gain[PEQ_BAND_MAX]; // -50(-12dB)~50(+12dB), each step is 0.24dB }PEQ_SET, *pPEQ_SET; typedef struct _PEQ_CONTROL_PARAMETER { unsigned int valid; unsigned int gain; unsigned int fc; unsigned int q; }PEQ_CONTROL_PRARMETER, *pPEQ_CONTROL_PARAMETER ; typedef struct _TB_CONTROL_PARAMETER { unsigned int valid; int gain; unsigned int fc; unsigned int q; }TB_CONTROL_PARAMETER, *pTB_CONTROL_PARAMETER; typedef struct _HPLP_CONTROL_PARAMETER { unsigned int valid; int gain; unsigned int fc; unsigned int q; }HPLP_CONTROL_PARAMETER, *pHPLP_CONTROL_PARAMETER; #if 0 // SIS_PEQ_SET, SIS_EQ_SET and SIS_EQ_INIT are for umf/kmf typedef struct _PEQ_SET { UINT8 index; UINT8 valid; // 0: disable, 1:enable UINT32 fc; // center frequency: 20~20000 UINT8 q; // 1(0.1)~30(3.0) INT8 gain; // -50(-12dB)~50(+12dB), each step is 0.24dB } PEQ_SET, *pPEQ_SET; typedef struct _SIS_EQ_SET { UINT8 enable; // 0: off, 1: on INT8 gain[EQ_BAND_MAX]; } SIS_EQ_SET, *pSIS_EQ_SET; typedef struct _SIS_EQ_INIT { UINT8 valid[EQ_BAND_MAX]; // 0: disable, 1:enable UINT32 fc[EQ_BAND_MAX]; // center frequency: 20~20000 UINT8 q[EQ_BAND_MAX]; // 1(0.1)~30(3.0) } SIS_EQ_INIT, *pSIS_EQ_INIT; #endif typedef struct _NOISE_REDUCE { // UINT8 mode; //0:Line in only, 1: Line in + ATV 2:Line in + ATV + Digital (HDMI, DTV, USB ...etc)) 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:-60dB,1:-62dB,2:-64dB,3:-66db,4:-68db,5:-70db,6:-72db,7:-74dB,8:-76dB> UINT8 max_reduce_gain; // if input < noise level, max reduce gain, <0:-12dB,1:-15db,2:-18db,3:-24db,4:-30db,5:-36db,6:-42db,7:-48dB,8:-54db,9:-60dB,10:-107db> UINT8 rate; //NR adjust gain step }NOISE_REDUCE, *PNOISE_REDUCE; typedef struct _SIS_AGC_INFO { UINT8 AGC_Enable; /* True = Process, False = Bypass */ UINT8 AGC_limiter_level; //unit -1dB, 0: 0: 0.dB(default), 1: -1dB, 2: -2dB.... Max: 30 : -30dB UINT8 AGC_pullup_gain; //unit: +1dB, 0: 0.dB(default), 1: 1 dB... max:18(+18 dB) UINT8 AGC_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 AGC_pullup_active_level; //internal use, control pullup gain active level, max = -12dB ( pullup gain only work at input < -12dB) UINT8 AGC_Tool_Control; UINT8 AGC_active_time; //unit 10ms, 0: 10ms, 1: 20ms .... 15: 160ms UINT8 AGC_attack_speed; //Control attack speed, 0: default(slowest) ~ 7: fastest (30x default) }SIS_AGC_INFO, *pSIS_AGC_INFO; typedef struct _SRS_TVOL_SET { UINT8 SRSTVEnable; UINT8 tv; UINT8 tvnoise; UINT8 noisethreshold; UINT8 tvmode; UINT8 tvspksize; UINT16 inputgain; UINT8 outputgain; UINT8 bypassgain; UINT8 referencelevel; UINT16 maxgain; } SRS_TVOL_SET, *pSRS_TVOL_SET; typedef struct _DBXAUDIO_SET { UINT8 mtotvol; UINT8 mtotsur; UINT8 mtotson; UINT32 enable_flag; }DBXAUDIO_SET, *pDBXAUDIO_SET; typedef struct _TREBLE_SET { INT8 treble_gain; UINT32 treble_frequency; }TREBLE_SET, *pTREBLE_SET; typedef struct _BASS_SET { INT8 bass_gain; UINT32 bass_frequency; }BASS_SET, *pBASS_SET; typedef struct _AUDIO_POSTPROCESS_SET { INT32 flag; union { SRS_TSHD_SET tshd; //current srstshd setting SRS_TVOL_SET tvol; // Truevolume setting PEQ_SET peq; // current PEQ setting // SIS_EQ_INIT eqInit;// new EQ // SIS_EQ_SET eqSet; // new EQ SISAE_SET sisAE; MS_AE_SET ms_ae; NOISE_REDUCE nr; SIS_AGC_INFO agc_info; PLC_Config plc; CUT_OFF_SET cut_off; HPLP_SET hp_lp; DBXAUDIO_SET dbx; char titoi; #ifdef CONFIG_AUDIO_PARAMETRIC_SHELVING TREBLE_SET treble; BASS_SET bass; #else INT8 treble; INT8 bass; #endif }; }AUDIO_POSTPROCESS_SET, *pAUDIO_POSTPROCESS_SET; //SAVE APP AUDIO SETTTING STATUS typedef struct _AUDIO_APP_STATUS { union{ UINT32 mute_status_all; struct{ //SAVE REAL HW MUTE STATUS UINT32 mute_tx_sd0:1; UINT32 mute_tx_sd1:1; UINT32 mute_tx_spdif:1; UINT32 mute_dac_speaker : 1; UINT32 mute_dac_headphone : 1; UINT32 mute_dac_lineout : 1; UINT32 mute_tx_I2S3:1; UINT32 mute_status_reserved1 : 9; //SAVE APP MUTE STATUS, DC MUTE WILL CHECK THESE FLAG. UINT32 mute_app_tx_sd0: 1; UINT32 mute_app_tx_sd1: 1; UINT32 mute_app_tx_spdif: 1; UINT32 mute_app_dac_speaker:1; UINT32 mute_app_dac_headphone: 1; UINT32 mute_app_dac_lineout :1; UINT32 mute_app_tx_I2S3:1; UINT32 mute_status_reserved2:9; }; }; INT32 SD0_Vol; INT32 SD1_Vol; INT32 SPDIF_Vol; UINT32 OSD_SD0; UINT32 OSD_SD1; UINT32 OSD_SPDIF; INT32 Bal_L; INT32 Bal_R; UINT32 ADC_PIN; }AUDIO_APP_STATUS, *pAUDIO_APP_STATUS; #pragma pack(pop) /******************************************************************************************************** AUDIO STRUCTURE FOR AUDIO TOOL *********************************************************************************************************/ #if 0 typedef struct _AUDIO_SETTINGS_EQ { INT8 gain[PEQ_BAND_MAX]; UINT8 valid[PEQ_BAND_MAX]; // 0: disable, 1:enable UINT32 fc[PEQ_BAND_MAX]; // center frequency: 20~20000 UINT8 q[PEQ_BAND_MAX]; // 1(0.1)~30(3.0) } AUDIO_SETTINGS_EQ; #endif typedef struct _AUDIO_SETTINGS_BALANCE { INT32 left; INT32 right; } AUDIO_SETTINGS_BALANCE; typedef struct _AUDIO_SETTINGS_VOLUME { INT32 master; INT32 aux1; } AUDIO_SETTINGS_VOLUME; typedef struct _AUDIO_SETTINGS_VOLUME_OSD_INDEX { UINT32 OSD_SD0; UINT32 OSD_SD1; }AUDIO_SETTINGS_VOLUME_OSD_INDEX; typedef struct _AUDIO_SETTINGS_VOL_OFFSET { } AUDIO_SETTINGS_VOL_OFFSET; typedef struct _AUDIO_SETTINGS_SUN_SURROUND { UINT8 directgain; UINT8 reverbgain; UINT8 ambiancegain; } AUDIO_SETTINGS_SUN_SURROUND; typedef struct _AUDIO_SETTINGS_t { AUDIO_SETTINGS_TYPE_e type; union { INT8 bass; INT8 treble; // AUDIO_SETTINGS_EQ eq; AUDIO_SETTINGS_BALANCE balance; AUDIO_SETTINGS_VOLUME volume; AUDIO_SETTINGS_VOLUME_OSD_INDEX Osd_volume_index; AUDIO_SETTINGS_VOL_OFFSET vol_offset; AUDIO_SETTINGS_SUN_SURROUND sun_surround; SRS_TSHD_SET tshd; SRS_TVOL_SET tvol; SIS_AGC_INFO avl; PLC_Config plc; }; } AUDIO_SETTINGS_t; typedef struct _AUDIO_REC_PARAM_t { UINT32 rec_cmdbuf_size; UINT32 rec_pcmbuf_size; UINT32 rec_txdespbuf_size; UINT32 rec_actlbuf_size; UINT32 rec_cmdbuf_kbase; UINT32 rec_pcmbuf_kbase; UINT32 rec_txdespbuf_kbase; UINT32 rec_actlbuf_kbase; UINT32 rec_raw_frame_size; UINT32 rec_pcm_frame_size; UINT32 rec_pcm_wp; INT32 rec_pcm_rp; }AUDIO_REC_PARAM_t; typedef enum { AUDIOPOWER_DAC2_OUTPUT, //DAC2 power control AUDIOPOWER_ADC_INPUT, // ADC in power control AUDIOPOWER_POWER_DOWN, //SET audio Power off //reserved for other devices AUDIOPOWER_DEVICE_UNKNOW = 0xff }AUDIOPOWER_DEVICE; typedef struct _AUDIO_DEVICE_POWERCTRL { UINT8 flag; UINT8 POWERStatus; }AUDIO_DEVICE_POWERCTRL, *pAUDIO_DEVICE_POWERCTRL; void DRV_AUDIO_RESET_DAC_SDM(void); #ifdef CONFIG_SUPPORT_DBX /** Parameters structure. This defines the DSP parameters that get copied from the preset to the DSP memory. */ typedef struct _DBXTV_PARAMETERS { UINT32 DVCOnOff; UINT32 DVCFreq; UINT32 DVCHiLevel; UINT32 DVCHiRMSTime; UINT32 DVCHiAvgAttTime; UINT32 DVCHiAvgRelTime; UINT32 DVCHiAttRat; UINT32 DVCHiRelRat; UINT32 DVCHiAttThr; UINT32 DVCHiRelThr; UINT32 DVCHiAttDel; UINT32 DVCHiRelDel; UINT32 DVCHiGate; UINT32 DVCHiGain; UINT32 DVCHiHold; UINT32 DVCHiRMS; UINT32 DVCHiRMSTimeConst; UINT32 DVCHiAvgAttTimeConst; UINT32 DVCHiAvgRelTimeConst; UINT32 DVCHiAvgAttTCNormal; UINT32 DVCHiAvgAttTCFast; UINT32 DVCHiAvgRelTCNormal; UINT32 DVCHiAvgRelTCFast; UINT32 DVCLoLevel; UINT32 DVCLoRMSTime; UINT32 DVCLoAvgAttTime; UINT32 DVCLoAvgRelTime; UINT32 DVCLoAttRat; UINT32 DVCLoRelRat; UINT32 DVCLoAttThr; UINT32 DVCLoRelThr; UINT32 DVCLoAttDel; UINT32 DVCLoRelDel; UINT32 DVCLoGate; UINT32 DVCLoGain; UINT32 DVCLoHold; UINT32 DVCLoRMS; UINT32 DVCLoRMSTimeConst; UINT32 DVCLoAvgAttTimeConst; UINT32 DVCLoAvgRelTimeConst; UINT32 DVCLoAvgAttTCNormal; UINT32 DVCLoAvgAttTCFast; UINT32 DVCLoAvgRelTCNormal; UINT32 DVCLoAvgRelTCFast; UINT32 DVCMuteOnOff; UINT32 DVCMuteTime; UINT32 DVCMuteLevel; UINT32 DVCMuteDetect; UINT32 DVCMuteHold; UINT32 DVCHold; UINT32 DVCOrder; UINT32 DVCCoupling; UINT32 DVCHoldTime; UINT32 DVCHoldTC; UINT32 DPPOnOff; UINT32 DPPThresh; UINT32 DPPAvgTime; UINT32 DPPSumRMS; UINT32 DPPDifRMS; UINT32 DPPProtect; UINT32 DPPGain; UINT32 DPPHPBypass; UINT32 DPPFreq; UINT32 DPPEQBypass; UINT32 DPPGL; UINT32 DPPGM; UINT32 DPPGH; UINT32 DPPFL; UINT32 DPPFH; UINT32 DPPRMSTime; UINT32 DPPRMSTimeConstSum; UINT32 DPPRMSTimeConstDif; UINT32 DPPCenter; UINT32 DPPAvgTimeConst; UINT32 IWBypass; UINT32 IWSpaceGain; UINT32 IWClip; UINT32 EQBypass; UINT32 EQNumBands; UINT32 BEOnOff; UINT32 BEFreq; UINT32 BEMaxGain; UINT32 BEOrder; UINT32 BEHPFFreq; UINT32 BELevel; UINT32 BERMSTime; UINT32 BEAvgAttTime; UINT32 BEAvgRelTime; UINT32 BEGainRat; UINT32 BEGain; UINT32 BERMS; UINT32 BERMSTimeConst; UINT32 BEAvgAttTimeConst; UINT32 BEAvgRelTimeConst; UINT32 BEPeakThreshLin; } DBXTV_PARAMETERS; /** Coefficients structure. This defines the DSP coefficients that get copied from the preset to the DSP memory. */ typedef struct _DBXTV_COEFFICIENTS { INT32 DVClpfL1coef[5]; INT32 DVChpfL1coef[5]; INT32 DPPeqlcoef[5]; INT32 DPPeqlmcoef[5]; INT32 DPPeqhmcoef[5]; INT32 DPPeqhcoef[5]; INT32 DPPhpfdifcoef[5]; INT32 IWEQCoefs[5]; INT32 DEQCoefs0[5]; INT32 DEQCoefs1[5]; INT32 DEQCoefs2[5]; INT32 DEQCoefs3[5]; INT32 DEQCoefs4[5]; INT32 DEQCoefs5[5]; INT32 DEQCoefs6[5]; INT32 DVCBELPF1Coefs[5]; INT32 DVCBELPF2Coefs[5]; INT32 DVCBEHPF1Coefs[5]; INT32 DVCBEHPF2Coefs[5]; INT32 BEHPFCoefs[5]; } DBXTV_COEFFICIENTS; /** Data structure */ typedef union _DBXTV_Param { UINT32 Data[95]; DBXTV_PARAMETERS Params; } DBXTV_Param; /** Coef structure */ typedef union _DBXTV_Coeff { UINT32 Data[100]; DBXTV_COEFFICIENTS Coefs; } DBXTV_Coeff; typedef struct _DBX_PARAM_TABLE { DBXTV_Param TotSonParam[1]; DBXTV_Coeff TotSonCoeff[1]; DBXTV_Param TotVolParam[2]; DBXTV_Coeff TotVolCoeff[2]; DBXTV_Param TotSurParam[1]; DBXTV_Coeff TotSurCoeff[1]; }DBX_PARAM_TABLE,*pDBX_PARAM_TABLE; typedef struct _DBX_CTL { UINT32 flag; //0: GET, 1: SET UINT32 table_type; UINT32 offset; UINT32 value; }DBX_CTL,*pDBX_CTL; #endif //~ CONFIG_SUPPORT_DBX #endif