forked from Minki/linux
ASoC: tlv320aic32x4: Fix problem with first capture.
In its previous status, the first capture didn't work properly; nothing was actually recorded from the microphone. This behaviour was observed using a Visstrim M10 board. In order to solve this BUG a workaround has been added that, during the initialization process of the codec, powers on and off the ADC. The issue seems related to a HW BUG or some behavior that is not documented in the datasheet. Signed-off-by: Javier Martin <javier.martin@vista-silicon.com> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
This commit is contained in:
parent
8f0d8163b5
commit
a405387c68
@ -675,6 +675,16 @@ static int aic32x4_probe(struct snd_soc_codec *codec)
|
||||
ARRAY_SIZE(aic32x4_snd_controls));
|
||||
aic32x4_add_widgets(codec);
|
||||
|
||||
/*
|
||||
* Workaround: for an unknown reason, the ADC needs to be powered up
|
||||
* and down for the first capture to work properly. It seems related to
|
||||
* a HW BUG or some kind of behavior not documented in the datasheet.
|
||||
*/
|
||||
tmp_reg = snd_soc_read(codec, AIC32X4_ADCSETUP);
|
||||
snd_soc_write(codec, AIC32X4_ADCSETUP, tmp_reg |
|
||||
AIC32X4_LADC_EN | AIC32X4_RADC_EN);
|
||||
snd_soc_write(codec, AIC32X4_ADCSETUP, tmp_reg);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -94,6 +94,9 @@
|
||||
#define AIC32X4_WORD_LEN_24BITS 0x02
|
||||
#define AIC32X4_WORD_LEN_32BITS 0x03
|
||||
|
||||
#define AIC32X4_LADC_EN (1 << 7)
|
||||
#define AIC32X4_RADC_EN (1 << 6)
|
||||
|
||||
#define AIC32X4_I2S_MODE 0x00
|
||||
#define AIC32X4_DSP_MODE 0x01
|
||||
#define AIC32X4_RIGHT_JUSTIFIED_MODE 0x02
|
||||
|
Loading…
Reference in New Issue
Block a user