I have the problem with codec TPS65950 on Beagleboard revC4 (OMAP3530).
Codec is configured as media player, but it cuts negative values of signal, only half of signal is availability (for both left and right channel, HSOR, HSOL).
Where could be the reason?
Configuration:
aregw(AV_CODEC_MODE, 0); // turn it off to configure
aregw(AV_CODEC_MODE, APPL_RATE_8 | 1); //OPTMODE = 1
// audio audio 1 = in (transmit) audio 2 = out (receive)
aregw(AV_OPTION, ARXR2_EN | ARXL2_EN | ATXR1_EN | ATXL1_EN); //Reg 2 = 0x3c
// route rx 1 to pga 1
aregw(AV_RX_PATH_SEL, (0 << B_RXL1_SEL) | (0 << B_RXR1_SEL));
// set system clock speed and enable the local clock
aregw(AV_APLL_CTL, APLL_EN | APLL_INFREQ_26);
aregw(AV_AVDAC_CTL, ADACL2_EN | ADACR2_EN); // turn on audio DAC (left, right)
// turn on left and right output
aregw(AV_ARXL2_APGA_CTL, ARX1_PDZ | ARX1_DA_EN | (0x06 << B_ARX1_GAIN_SET));
aregw(AV_ARXR2_APGA_CTL, ARX1_PDZ | ARX1_DA_EN | (0x06 << B_ARX1_GAIN_SET));
// headset output select
aregw(AV_HS_SEL, HSOL_AL2_EN | HSOR_AR2_EN);
// left/right digital gain
aregw(AV_ARXL2PGA, 0xFB); /* max value */ //reg13 = 0xfb;
aregw(AV_ARXR2PGA, 0xFB); //reg12 = 0xfb;
// set headset left/right gain (balance)
aregw(AV_HS_GAIN_SET, 0x05);
// audio interface. master mode, i2s format, 16 bit data
aregw(AV_AUDIO_IF, AIF_FORMAT_CODEC | DATA_WIDTH_16 | AIF_EN); //reg14 = 0x1;
// volume/effects
// set base boost effect
aregw(AV_BOOST_CTL, 1<<1);
// turn on soft volume delay and enable
// aregw(AV_SOFTVOL_CTL, SOFTVOL_EN | (3 << B_SOFTVOL_SET));
// anti-pop volume changes
// aregw(AV_MISC_SET_1, SMOOTH_ANAVOL_EN);
// anti-pop paramters
aregw(AV_HS_POPN_SET, RAMP_DELAY_161ms);
aregw(AV_HS_POPN_SET, VMID_EN);
aregw(AV_HS_POPN_SET, RAMP_EN);
// transmit settings (audio in)
// left/right gain
aregw(AV_ATXL1PGA, 0x0); //reg10 = 0x0
aregw(AV_ATXR1PGA, 0x0); //reg11 = 0x0;
// left/right ADC, and choose as TXx1
aregw(AV_AVADC_CTL, ADCL_EN | ADCR_EN); //reg7 = 0xa;
aregw(AV_ADCMICSEL, 0); //reg8 = 0x0;
// line in on beagle comes from AUX, also enable anti-pop and start
aregw(AV_ANAMICL, 0x34 | AUXL_EN | OFFSET_CNCL_SEL_RXALL | CNCL_OFFSET_START); //reg 5 = 0x118
aregw(AV_ANAMICR, 0x14 | AUXR_EN); //reg6 = 0x18;
aregw(AV_ANAMIC_GAIN, (0<<3)|0); //reg48 = 0x0;
// power up, with sample rate and option 1 (2x stereo audio paths in and out)
aregw(AV_CODEC_MODE, APPL_RATE_8 | 0 | OPT_MODE);
aregw(AV_CODEC_MODE, APPL_RATE_48 | CODECPDZ | OPT_MODE); //reg 1 = 0x2;