📄 rtcodeccomm.h
字号:
#define STEREO_SCLK_DIV1_11 (0xA<<12)
#define STEREO_SCLK_DIV1_12 (0xB<<12)
#define STEREO_SCLK_DIV1_13 (0xC<<12)
#define STEREO_SCLK_DIV1_14 (0xD<<12)
#define STEREO_SCLK_DIV1_15 (0xE<<12)
#define STEREO_SCLK_DIV1_16 (0xF<<12)
//Stereo DAC Clock Control 2(0x62)
#define STEREO_AD_64OSR_SEL_MASK (0x1)
#define STEREO_AD_64OSR_SEL_128X (0x0)
#define STEREO_AD_64OSR_SEL_64X (0x1)
#define STEREO_AD_FILTER_DIV2_MASK (0x7<<1)
#define STEREO_AD_FILTER_DIV2_2 (0x0<<1)
#define STEREO_AD_FILTER_DIV2_4 (0x1<<1)
#define STEREO_AD_FILTER_DIV2_8 (0x2<<1)
#define STEREO_AD_FILTER_DIV2_16 (0x3<<1)
#define STEREO_AD_FILTER_DIV2_32 (0x4<<1)
#define STEREO_AD_FILTER_DIV1_MASK (0xF<<4)
#define STEREO_AD_FILTER_DIV1_1 (0x0<<4)
#define STEREO_AD_FILTER_DIV1_2 (0x1<<4)
#define STEREO_AD_FILTER_DIV1_3 (0x2<<4)
#define STEREO_AD_FILTER_DIV1_4 (0x3<<4)
#define STEREO_AD_FILTER_DIV1_5 (0x4<<4)
#define STEREO_AD_FILTER_DIV1_6 (0x5<<4)
#define STEREO_AD_FILTER_DIV1_7 (0x6<<4)
#define STEREO_AD_FILTER_DIV1_8 (0x7<<4)
#define STEREO_AD_FILTER_DIV1_9 (0x8<<4)
#define STEREO_AD_FILTER_DIV1_10 (0x9<<4)
#define STEREO_AD_FILTER_DIV1_11 (0xA<<4)
#define STEREO_AD_FILTER_DIV1_12 (0xB<<4)
#define STEREO_AD_FILTER_DIV1_13 (0xC<<4)
#define STEREO_AD_FILTER_DIV1_14 (0xD<<4)
#define STEREO_AD_FILTER_DIV1_15 (0xE<<4)
#define STEREO_AD_FILTER_DIV1_16 (0xF<<4)
#define STEREO_DA_64OSR_SEL_MASK (1<<8)
#define STEREO_DA_64OSR_SEL_128X (0<<8)
#define STEREO_DA_64OSR_SEL_64X (1<<8)
#define STEREO_DA_FILTER_DIV2_MASK (0x7<<9)
#define STEREO_DA_FILTER_DIV2_2 (0x0<<9)
#define STEREO_DA_FILTER_DIV2_4 (0x1<<9)
#define STEREO_DA_FILTER_DIV2_8 (0x2<<9)
#define STEREO_DA_FILTER_DIV2_16 (0x3<<9)
#define STEREO_DA_FILTER_DIV2_32 (0x4<<9)
#define STEREO_DA_FILTER_DIV1_MASK (0xF<<12)
#define STEREO_DA_FILTER_DIV1_1 (0x0<<12)
#define STEREO_DA_FILTER_DIV1_2 (0x1<<12)
#define STEREO_DA_FILTER_DIV1_3 (0x2<<12)
#define STEREO_DA_FILTER_DIV1_4 (0x3<<12)
#define STEREO_DA_FILTER_DIV1_5 (0x4<<12)
#define STEREO_DA_FILTER_DIV1_6 (0x5<<12)
#define STEREO_DA_FILTER_DIV1_7 (0x6<<12)
#define STEREO_DA_FILTER_DIV1_8 (0x7<<12)
#define STEREO_DA_FILTER_DIV1_9 (0x8<<12)
#define STEREO_DA_FILTER_DIV1_10 (0x9<<12)
#define STEREO_DA_FILTER_DIV1_11 (0xA<<12)
#define STEREO_DA_FILTER_DIV1_12 (0xB<<12)
#define STEREO_DA_FILTER_DIV1_13 (0xC<<12)
#define STEREO_DA_FILTER_DIV1_14 (0xD<<12)
#define STEREO_DA_FILTER_DIV1_15 (0xE<<12)
#define STEREO_DA_FILTER_DIV1_16 (0xF<<12)
//Voice DAC PCM Clock Control 1(0x64)
#define VOICE_SCLK_DIV2_MASK (0x7)
#define VOICE_SCLK_DIV2_2 (0x0)
#define VOICE_SCLK_DIV2_4 (0x1)
#define VOICE_SCLK_DIV2_8 (0x2)
#define VOICE_SCLK_DIV2_16 (0x3)
#define VOICE_SCLK_DIV2_32 (0x4)
#define VOICE_SCLK_DIV1_MASK (0xF<<4)
#define VOICE_SCLK_DIV1_1 (0x0<<4)
#define VOICE_SCLK_DIV1_2 (0x1<<4)
#define VOICE_SCLK_DIV1_3 (0x2<<4)
#define VOICE_SCLK_DIV1_4 (0x3<<4)
#define VOICE_SCLK_DIV1_5 (0x4<<4)
#define VOICE_SCLK_DIV1_6 (0x5<<4)
#define VOICE_SCLK_DIV1_7 (0x6<<4)
#define VOICE_SCLK_DIV1_8 (0x7<<4)
#define VOICE_SCLK_DIV1_9 (0x8<<4)
#define VOICE_SCLK_DIV1_10 (0x9<<4)
#define VOICE_SCLK_DIV1_11 (0xA<<4)
#define VOICE_SCLK_DIV1_12 (0xB<<4)
#define VOICE_SCLK_DIV1_13 (0xC<<4)
#define VOICE_SCLK_DIV1_14 (0xD<<4)
#define VOICE_SCLK_DIV1_15 (0xE<<4)
#define VOICE_SCLK_DIV1_16 (0xF<<4)
#define VOICE_EXTCLK_OUT_DIV_MASK (0x7<<8)
#define VOICE_EXTCLK_OUT_DIV_1 (0x0<<8)
#define VOICE_EXTCLK_OUT_DIV_2 (0x1<<8)
#define VOICE_EXTCLK_OUT_DIV_3 (0x2<<8)
#define VOICE_EXTCLK_OUT_DIV_4 (0x3<<8)
#define VOICE_EXTCLK_OUT_DIV_6 (0x4<<8)
#define VOICE_EXTCLK_OUT_DIV_8 (0x5<<8)
#define VOICE_EXTCLK_OUT_DIV_12 (0x6<<8)
#define VOICE_EXTCLK_OUT_DIV_16 (0x7<<8)
#define VOICE_WCLK_DIV_MASK (0x1<<13)
#define VOICE_WCLK_DIV_32 (0x0<<13)
#define VOICE_WCLK_DIV_64 (0x1<<13)
#define VOICE_SYSCLK_SEL_MASK (0x1<<14)
#define VOICE_SYSCLK_SEL_MCLK (0x0<<14)
#define VOICE_SYSCLK_SEL_EXTCLK (0x1<<14)
#define VOICE_MCLK_SEL_MASK (0x1<<15)
#define VOICE_MCLK_SEL_MCLK_INPUT (0x0<<15)
#define VOICE_MCLK_SEL_PLL_OUTPUT (0x1<<15)
//Voice DAC PCM Clock Control 2(0x66)
#define VOICE_CLK_FILTER_DIV1_MASK (0x7)
#define VOICE_CLK_FILTER_DIV1_2 (0x0)
#define VOICE_CLK_FILTER_DIV1_4 (0x1)
#define VOICE_CLK_FILTER_DIV1_8 (0x2)
#define VOICE_CLK_FILTER_DIV1_16 (0x3)
#define VOICE_CLK_FILTER_DIV1_32 (0x4)
#define VOICE_CLK_FILTER_DIV2_MASK (0xF<<4)
#define VOICE_CLK_FILTER_DIV2_1 (0x0<<4)
#define VOICE_CLK_FILTER_DIV2_2 (0x1<<4)
#define VOICE_CLK_FILTER_DIV2_3 (0x2<<4)
#define VOICE_CLK_FILTER_DIV2_4 (0x3<<4)
#define VOICE_CLK_FILTER_DIV2_5 (0x4<<4)
#define VOICE_CLK_FILTER_DIV2_6 (0x5<<4)
#define VOICE_CLK_FILTER_DIV2_7 (0x6<<4)
#define VOICE_CLK_FILTER_DIV2_8 (0x7<<4)
#define VOICE_CLK_FILTER_DIV2_9 (0x8<<4)
#define VOICE_CLK_FILTER_DIV2_10 (0x9<<4)
#define VOICE_CLK_FILTER_DIV2_11 (0xA<<4)
#define VOICE_CLK_FILTER_DIV2_12 (0xB<<4)
#define VOICE_CLK_FILTER_DIV2_13 (0xC<<4)
#define VOICE_CLK_FILTER_DIV2_14 (0xD<<4)
#define VOICE_CLK_FILTER_DIV2_15 (0xE<<4)
#define VOICE_CLK_FILTER_DIV2_16 (0xF<<4)
#define VOICE_AD_DA_SIG_CLK_DIV_MASK (0x7<<8)
#define VOICE_AD_DA_SIG_CLK_DIV_2 (0x0<<8)
#define VOICE_AD_DA_SIG_CLK_DIV_4 (0x1<<8)
#define VOICE_AD_DA_SIG_CLK_DIV_8 (0x2<<8)
#define VOICE_AD_DA_SIG_CLK_DIV_16 (0x3<<8)
#define VOICE_AD_DA_SIG_CLK_DIV_32 (0x4<<8)
#define VOICE_AD_DA_SIG_CLK_DIV_64 (0x5<<8)
#define VOICE_AD_DA_SIG_CLK_F_DA_MASK (0x1<<12)
#define VOICE_AD_DA_SIG_CLK_F_DA_F (0x0<<12)
#define VOICE_AD_DA_SIG_CLK_F_DA_D (0x1<<12)
#define VOICE_AD_DA_FILTER_SEL_MASK (0x1<<13)
#define VOICE_AD_DA_FILTER_SEL_128X (0x0<<13)
#define VOICE_AD_DA_FILTER_SEL_64X (0x1<<13)
#define VOICE_FILTER_CLK_F_MASK (0x1<<14)
#define VOICE_FILTER_CLK_F_MCLK (0x0<<14)
#define VOICE_FILTER_CLK_F_VBCLK (0X1<<14)
#define VOICE_CLK_FILTER_SLAVE_DIV_MASK (0x1<<15)
#define VOICE_CLK_FILTER_SLAVE_DIV_1 (0x0<<15)
#define VOICE_CLK_FILTER_SLAVE_DIV_2 (0x1<<15)
//Psedueo Stereo & Spatial Effect Block Control(0x68)
#define SPATIAL_GAIN_MASK (0x3<<6)
#define SPATIAL_GAIN_1_0 (0x0<<6)
#define SPATIAL_GAIN_1_5 (0x1<<6)
#define SPATIAL_GAIN_2_0 (0x2<<6)
#define SPATIAL_RATIO_MASK (0x3<<4)
#define SPATIAL_RATIO_0_0 (0x0<<4)
#define SPATIAL_RATIO_0_66 (0x1<<4)
#define SPATIAL_RATIO_1_0 (0x2<<4)
#define APF_MASK (0x3)
#define APF_FOR_48K (0x3)
#define APF_FOR_44_1K (0x2)
#define APF_FOR_32K (0x1)
#define STEREO_EXPENSION_EN (0x1<<12)
#define PSEUDO_STEREO_EN (0x1<<13)
#define ALL_PASS_FILTER_EN (0x1<<14)
#define SPATIAL_CTRL_EN (0x1<<15)
typedef enum
{
BOOST_BYPASS,
BOOST_20DB,
BOOST_30DB,
BOOST_40DB
}MIC_BOOST_TYPE;
//Phone Call type define
typedef enum
{
PHONE_CALL_NORAMAL,
// PHONE_CALL_HANDSFREE,
PHONE_CALL_HANDSET,
PHONE_CALL_BT_HEADSET,
}PHONE_CALL_TYPE;
typedef struct
{
BYTE CodecIndex;
unsigned short int wCodecValue;
}CodecRegister;
typedef struct
{
BOOL bEnable3D;
BYTE b3D_Gain;
BYTE b3D_Ratio;
} S_3D_SPATIAL;
typedef enum
{
HW_EQ_LP0_A1=0,
HW_EQ_LP0_H0,
HW_EQ_BP1_A1,
HW_EQ_BP1_A2,
HW_EQ_BP1_H0,
HW_EQ_BP2_A1,
HW_EQ_BP2_A2,
HW_EQ_BP2_H0,
HW_EQ_BP3_A1,
HW_EQ_BP3_A2,
HW_EQ_BP3_H0,
HW_EQ_BP4_A1,
HW_EQ_HP4_H0,
HW_EQ_CONTROL=0x10,
HW_EQ_INPUT_VOL,
HW_EQ_OUTPUT_VOL,
AVC_CTRL_REG0=0x20,
AVC_CTRL_REG1,
AVC_CTRL_REG2,
AVC_CTRL_REG3,
AVC_CTRL_REG4,
AVC_CTRL_REG5,
CLASS_AB_REG=0x44,
CLASS_D_REG=0x46,
AD_DA_MIXER_IR5=0x54,
}EXT_CODEC_INDEX;
typedef enum
{
POWER_STATE_D0=0,
POWER_STATE_D1,
POWER_STATE_D1_PLAYBACK,
POWER_STATE_D1_RECORD,
POWER_STATE_D2,
POWER_STATE_D2_PLAYBACK,
POWER_STATE_D2_RECORD,
POWER_STATE_D3,
POWER_STATE_D4
}POWER_STATE;
typedef enum
{
CLUB=0,
DANCE,
LIVE,
POP,
ROCK,
}HW_EQ_PRESET_TYPE;
typedef struct _HW_EQ_PRESET
{
HW_EQ_PRESET_TYPE HwEqType;
unsigned short int EqValue[14];
unsigned short int HwEQCtrl;
}HW_EQ_PRESET;
typedef enum
{
RT_WAVOUT_PATH_ALL=0,
RT_WAVOUT_PATH_HP,
RT_WAVOUT_PATH_SPK,
RT_WAVOUT_PATH_MONO,
RT_WAVOUT_PATH_DAC,
}WAVOUT_PATH;
//advance mixer 0x10
#define ENABLE_HW_EQ_BLOCK (0x1<<15)
#define ENABLE_HW_EQ_HPF (0x1<<4)
#define ENABLE_HW_EQ_BP3 (0x1<<3)
#define ENABLE_HW_EQ_BP2 (0x1<<2)
#define ENABLE_HW_EQ_BP1 (0x1<<1)
#define ENABLE_HW_EQ_LPF (0x1<<0)
typedef enum
{
R_MONO_MIXER=(0),
R_RECORD_MIXER=(0x1<<1),
R_HP_MIXER=(0x1<<2),
R_PHONE=(0x1<<3),
R_LINE_IN=(0x1<<4),
R_MIC2=(0x1<<5),
R_MIC1=(0x1<<6),
L_MONO_MIXER=(0x1<<8),
L_RECORD_MIXER=(0x1<<9),
L_HP_MIXER=(0x1<<10),
L_PHONE=(0x1<<11),
L_LINE_IN=(0x1<<12),
L_MIC2=(0x1<<13),
L_MIC1=(0x1<<14),
}ADC_INPUT_MIXER_CTRL;
typedef enum
{
MASTER_MODE_A=0,
MASTER_MODE_B,
SLAVE_MODE_A,
SLAVE_MODE_B,
}MODE_SEL;
typedef enum
{
DEPOP_MODE1_HP
}DEPOP_MODE;
#define ALL_FIELD 0xffff
#define MHZ11_980 11980000
#define KHZ08_000 8000
#define KHZ11_025 11025
#define KHZ12_000 12000
#define KHZ16_000 16000
#define KHZ22_050 22050
#define KHZ24_000 24000
#define KHZ32_000 32000
#define KHZ44_100 44100
#define KHZ48_000 48000
//Class definition
class RT_CodecComm
{
public:
HardwareContext *m_pHWContext;
RT_CodecComm();
~RT_CodecComm();
BOOL ShadowReadCodec(BYTE Offset, unsigned short int *Data);
BOOL ShadowWriteCodec(BYTE Offset, unsigned short int Data);
BOOL WriteCodecRegMask(BYTE Offset, unsigned short int Data,unsigned short int Mask);
BOOL ChangeCodecPowerStatus(POWER_STATE power_state);
BOOL WriteCodecAdvance(EXT_CODEC_INDEX Ext_Index,unsigned short int Data);
BOOL ReadCodecAdvance(EXT_CODEC_INDEX Index,unsigned short int *Data);
BOOL WriteCodecAdvanceMask(EXT_CODEC_INDEX Ext_Index,unsigned short int Ext_Data,unsigned short int Ext_Data_Mask);
BOOL Init(HardwareContext *HwCxt);
BOOL InitRTCodecReg(void);
BOOL ConfigPcmVoicePath(BOOL bEnableVoicePath,MODE_SEL mode);
BOOL ConfigMicBias(BYTE Mic,BYTE MicBiasCtrl);
BOOL ConfigVmidOutput(BYTE Vmid_CaseType);
BOOL ConfigMicBoost(BYTE Mic,MIC_BOOST_TYPE BoostType);
BOOL Enable_Main_Spatial(BOOL Enable_Main_Spatial);
BOOL Enable_3D_Spatial(S_3D_SPATIAL s3D_Spatial);
BOOL Enable_Pseudo_Stereo(BOOL Enable_Pseudo_Stereo);
BOOL Enable_All_Pass_Filter(BOOL Enable_APF);
BOOL EnableAVC(BOOL Enable_AVC);
BOOL EnablePLLPath(BOOL bEnablePLL,unsigned short int K,unsigned short int M,unsigned short int N);
BOOL Enable_ADC_Input_Source(ADC_INPUT_MIXER_CTRL ADC_Input_Sour,BOOL Enable);
BOOL EnableHwEq(HW_EQ_PRESET_TYPE Hw_Eq_Type,BOOL HwEqEnable);
BOOL DepopForHP(DEPOP_MODE Depop_mode);
BOOL AudioOutEnable(WAVOUT_PATH WavOutPath,BOOL Mute);
void SaveCodecRegToShadow();
void RestoreRegToCodec();
void SaveCodecExtRegToShadow();
void ReStoreExtRegToCodec();
DWORD ProcessAudioMessage(UINT uMsg,DWORD dwParam1,DWORD dwParam2);
void DelayMSTime(unsigned int MilliSec);
#if USE_I2S_INTERFACE
BOOL I2S_Codec_SR_Ctrl(void);
#endif
private:
unsigned short int m_WaveInSampleRate;
unsigned short int m_WaveOutSampleRate;
friend class HardwareContext;
};
#endif //__RTCODECCOMM_H__
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -