1 | void SGTL5000::initBasicConfig(){
|
2 | writeRegister(CHIP_LINREG_CTRL_ADD, 0x006C); // VDDA & VDDIO both over 3.1V
|
3 | writeRegister(CHIP_ANA_POWER_ADD, 0x77FF); /*DAC_STEREO | LINREG_SIMPLE_POWERUP | STARTUP_POWERUP
|
4 | | VDDC_CHRGPMP_POWERDOWN | PLL_POWERUP | LINREG_D_POWERUP
|
5 | | VCOAMP_POWERUP | VAG_POWERUP | ADC_STEREO | REFTOP_POWERUP
|
6 | | HEADPHONE_POWERUP | DAC_POWERUP | CAPLESS_HEADPHONE_POWERUP
|
7 | | ADC_POWERUP | LINEOUT_POWERUP*/
|
8 |
|
9 | CHIP_REF_CTRL.VAG_VAL = 0x1f; // 1.575v
|
10 | CHIP_REF_CTRL.BIAS_CTRL = 0x00; // nominal
|
11 | CHIP_REF_CTRL.SMALL_POP = 0x01; // slow
|
12 | writeRegister(CHIP_REF_CTRL_ADD, CHIP_REF_CTRL.data);
|
13 |
|
14 | CHIP_LINE_OUT_CTRL.OUT_CURRENT = 0x03; // 0,36mA
|
15 | CHIP_LINE_OUT_CTRL.LO_VAGCNTRL = 0x22; // 1,65 V
|
16 | writeRegister(CHIP_LINE_OUT_CTRL_ADD, CHIP_LINE_OUT_CTRL.data);
|
17 |
|
18 | CHIP_MIC_CTRL.BIAS_RESISTOR = 0x01; // 2kOhm
|
19 | CHIP_MIC_CTRL.BIAS_VOLT = 0x03; // 3.00V
|
20 | CHIP_MIC_CTRL.GAIN = 0x02; // 30dB
|
21 | writeRegister(CHIP_MIC_CTRL_ADD, CHIP_MIC_CTRL.data);
|
22 |
|
23 | writeRegister(CHIP_DIG_POWER_ADD, 0x0073); // power up all digital stuff
|
24 | writeRegister(CHIP_SHORT_CTRL_ADD, 0x4446); // allow up to 125mA
|
25 |
|
26 | writeRegister(CHIP_CLK_CTRL_ADD, 0x0000); // 32k kHz, 256*Fs default values
|
27 | writeRegister(CHIP_I2S_CTRL_ADD, 0x0130); // SCLK=32*Fs, 16bit, I2S format
|
28 |
|
29 | }
|
30 |
|
31 | void SGTL5000::initAnalogAudioPath()
|
32 | {
|
33 | DAP_CONTROL.DAP_EN = 0x00; //
|
34 | DAP_CONTROL.MIX_EN = 0x00; // dap mixer disable
|
35 | writeRegister(DAP_CONTROL_ADD, DAP_CONTROL.data);
|
36 |
|
37 | CHIP_ANA_CTRL.MUTE_ADC = 0x01; //
|
38 | CHIP_ANA_CTRL.EN_ZCD_ADC = 0x01; // adc zero cross detection enabled
|
39 | CHIP_ANA_CTRL.SELECT_ADC = 0x01; // ADC input: line in
|
40 | CHIP_ANA_CTRL.MUTE_HP = 0x00; // unmute headphone
|
41 | CHIP_ANA_CTRL.EN_ZCD_HP = 0x01; // headphone zerocross detection enabled
|
42 | CHIP_ANA_CTRL.SELECT_HP = 0x01; // headphone input: line in
|
43 | CHIP_ANA_CTRL.MUTE_LO = 0x01; // mute line out
|
44 | writeRegister(CHIP_ANA_CTRL_ADD, CHIP_ANA_CTRL.data); // enable zero cross detectors
|
45 |
|
46 | }
|
47 |
|
48 |
|
49 | void SGTL5000::initDigitalAudioPath(){
|
50 | DAP_CONTROL.MIX_EN = 0x00;
|
51 | DAP_CONTROL.DAP_EN = 0x00;
|
52 | writeRegister(DAP_CONTROL_ADD, DAP_CONTROL.data);
|
53 |
|
54 | CHIP_ANA_CTRL.MUTE_ADC = 0x00; // unmute ADC
|
55 | CHIP_ANA_CTRL.EN_ZCD_ADC = 0x01; // adc zero cross detection enabled
|
56 | CHIP_ANA_CTRL.SELECT_ADC = 0x01; // ADC input: line in
|
57 | CHIP_ANA_CTRL.MUTE_HP = 0x00; // unmute headphone
|
58 | CHIP_ANA_CTRL.EN_ZCD_HP = 0x01; // headphone zerocross detection enabled
|
59 | CHIP_ANA_CTRL.SELECT_HP = 0x00; // headphone input: DAC
|
60 | CHIP_ANA_CTRL.MUTE_LO = 0x01; // mute line out
|
61 | writeRegister(CHIP_ANA_CTRL_ADD, CHIP_ANA_CTRL.data); // enable zero cross detectors
|
62 |
|
63 | CHIP_ADCDAC_CTRL.DAC_MUTE_RIGHT = 0x00; //unmute
|
64 | CHIP_ADCDAC_CTRL.DAC_MUTE_LEFT = 0x00; //unmute
|
65 | writeRegister(CHIP_ADCDAC_CTRL_ADD, CHIP_ADCDAC_CTRL.data);
|
66 |
|
67 | // ROUTING
|
68 | CHIP_SSS_CTRL.DAC_SELECT = 0x00; // Source for DAC: ADC
|
69 | writeRegister(CHIP_SSS_CTRL_ADD, CHIP_SSS_CTRL.data);
|
70 | }
|