ASoC: codecs: da9055: Minor improvement in ALC calibration process
This patch slightly improves ALC calibration process of da9055 codec driver by muting Mic PGAs during calibration. Signed-off-by: Ashish Chavan <ashish.chavan@kpitcummins.com> Signed-off-by: David Dajun Chen <david.chen@diasemi.com> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
This commit is contained in:
parent
961a7aeafa
commit
c7c0f2cdef
1 changed files with 21 additions and 1 deletions
|
@ -178,6 +178,12 @@
|
||||||
#define DA9055_AIF_WORD_S24_LE (2 << 2)
|
#define DA9055_AIF_WORD_S24_LE (2 << 2)
|
||||||
#define DA9055_AIF_WORD_S32_LE (3 << 2)
|
#define DA9055_AIF_WORD_S32_LE (3 << 2)
|
||||||
|
|
||||||
|
/* MIC_L_CTRL bit fields */
|
||||||
|
#define DA9055_MIC_L_MUTE_EN (1 << 6)
|
||||||
|
|
||||||
|
/* MIC_R_CTRL bit fields */
|
||||||
|
#define DA9055_MIC_R_MUTE_EN (1 << 6)
|
||||||
|
|
||||||
/* MIXIN_L_CTRL bit fields */
|
/* MIXIN_L_CTRL bit fields */
|
||||||
#define DA9055_MIXIN_L_MIX_EN (1 << 3)
|
#define DA9055_MIXIN_L_MIX_EN (1 << 3)
|
||||||
|
|
||||||
|
@ -476,7 +482,7 @@ static int da9055_put_alc_sw(struct snd_kcontrol *kcontrol,
|
||||||
struct snd_ctl_elem_value *ucontrol)
|
struct snd_ctl_elem_value *ucontrol)
|
||||||
{
|
{
|
||||||
struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
|
struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
|
||||||
u8 reg_val, adc_left, adc_right;
|
u8 reg_val, adc_left, adc_right, mic_left, mic_right;
|
||||||
int avg_left_data, avg_right_data, offset_l, offset_r;
|
int avg_left_data, avg_right_data, offset_l, offset_r;
|
||||||
|
|
||||||
if (ucontrol->value.integer.value[0]) {
|
if (ucontrol->value.integer.value[0]) {
|
||||||
|
@ -485,6 +491,16 @@ static int da9055_put_alc_sw(struct snd_kcontrol *kcontrol,
|
||||||
* offsets must be done first
|
* offsets must be done first
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/* Save current values from Mic control registers */
|
||||||
|
mic_left = snd_soc_read(codec, DA9055_MIC_L_CTRL);
|
||||||
|
mic_right = snd_soc_read(codec, DA9055_MIC_R_CTRL);
|
||||||
|
|
||||||
|
/* Mute Mic PGA Left and Right */
|
||||||
|
snd_soc_update_bits(codec, DA9055_MIC_L_CTRL,
|
||||||
|
DA9055_MIC_L_MUTE_EN, DA9055_MIC_L_MUTE_EN);
|
||||||
|
snd_soc_update_bits(codec, DA9055_MIC_R_CTRL,
|
||||||
|
DA9055_MIC_R_MUTE_EN, DA9055_MIC_R_MUTE_EN);
|
||||||
|
|
||||||
/* Save current values from ADC control registers */
|
/* Save current values from ADC control registers */
|
||||||
adc_left = snd_soc_read(codec, DA9055_ADC_L_CTRL);
|
adc_left = snd_soc_read(codec, DA9055_ADC_L_CTRL);
|
||||||
adc_right = snd_soc_read(codec, DA9055_ADC_R_CTRL);
|
adc_right = snd_soc_read(codec, DA9055_ADC_R_CTRL);
|
||||||
|
@ -520,6 +536,10 @@ static int da9055_put_alc_sw(struct snd_kcontrol *kcontrol,
|
||||||
/* Restore original values of ADC control registers */
|
/* Restore original values of ADC control registers */
|
||||||
snd_soc_write(codec, DA9055_ADC_L_CTRL, adc_left);
|
snd_soc_write(codec, DA9055_ADC_L_CTRL, adc_left);
|
||||||
snd_soc_write(codec, DA9055_ADC_R_CTRL, adc_right);
|
snd_soc_write(codec, DA9055_ADC_R_CTRL, adc_right);
|
||||||
|
|
||||||
|
/* Restore original values of Mic control registers */
|
||||||
|
snd_soc_write(codec, DA9055_MIC_L_CTRL, mic_left);
|
||||||
|
snd_soc_write(codec, DA9055_MIC_R_CTRL, mic_right);
|
||||||
}
|
}
|
||||||
|
|
||||||
return snd_soc_put_volsw(kcontrol, ucontrol);
|
return snd_soc_put_volsw(kcontrol, ucontrol);
|
||||||
|
|
Loading…
Reference in a new issue