summaryrefslogtreecommitdiff
path: root/sound
diff options
context:
space:
mode:
authorLei Fan <leif@nvidia.com>2014-02-20 16:08:03 +0800
committerMartin Chi <mchi@nvidia.com>2014-02-23 22:46:44 -0800
commit033156382b2f9e283c8e85e17043dee57a97acb7 (patch)
tree3ce58e3bd55768b88107d8a09459ae0cccf022f9 /sound
parent20df74954a50a15cdd22c41e5758f39715ac12ff (diff)
ASoC:Codec: decrease pop in call
Pop can be heard when we switch device form speaker to headset during voice call. From: codec vendor Data: 2/20/2014 Bug 1430498 Change-Id: Ib872196406bf669ca2b3ef5c35d0d8e91cb908fe Signed-off-by: Lei Fan <leif@nvidia.com> Reviewed-on: http://git-master/r/369804 Reviewed-by: Automatic_Commit_Validation_User Reviewed-by: Vijay Mali <vmali@nvidia.com> GVS: Gerrit_Virtual_Submit Reviewed-by: Rui Zhuo <rzhuo@nvidia.com> Reviewed-by: Martin Chi <mchi@nvidia.com>
Diffstat (limited to 'sound')
-rw-r--r--sound/soc/codecs/rt5639.c37
1 files changed, 6 insertions, 31 deletions
diff --git a/sound/soc/codecs/rt5639.c b/sound/soc/codecs/rt5639.c
index e69748b379e1..19ccd32bcb13 100644
--- a/sound/soc/codecs/rt5639.c
+++ b/sound/soc/codecs/rt5639.c
@@ -62,7 +62,6 @@ static struct rt5639_init_reg init_list[] = {
{RT5639_ADDA_CLK1 , 0x1114},/* 73[2] = 1'b */
{RT5639_MICBIAS , 0x3030},/* 93[5:4] = 11'b */
{RT5639_CLS_D_OUT , 0xa000},/* 8d[11] = 0'b */
- {RT5639_CLS_D_OVCD , 0x0301},/* 8c[8] = 1'b */
{RT5639_PRIV_INDEX , 0x001d},/* PR1d[8] = 1'b; */
{RT5639_PRIV_DATA , 0x0347},
{RT5639_PRIV_INDEX , 0x003d},/* PR3d[12] = 0'b; PR3d[9] = 1'b */
@@ -1396,26 +1395,14 @@ static int rt5639_spk_event(struct snd_soc_dapm_widget *w,
#endif
snd_soc_update_bits(codec, RT5639_PWR_DIG1,
RT5639_PWR_CLS_D, RT5639_PWR_CLS_D);
- rt5639_index_update_bits(codec,
- RT5639_CLSD_INT_REG1, 0xf000, 0xf000);
snd_soc_update_bits(codec, RT5639_SPK_VOL,
RT5639_L_MUTE | RT5639_R_MUTE, 0);
-
- /* Make sure test mode is not enabled */
- val = rt5639_index_read(codec, 0x001B);
- if (val == 0x9200)
- snd_soc_write(codec, RT5639_CLS_D_OVCD, 0x0301);
- else
- snd_soc_write(codec, RT5639_CLS_D_OVCD, 0x0328);
break;
case SND_SOC_DAPM_PRE_PMD:
- snd_soc_write(codec, RT5639_CLS_D_OVCD, 0x0301);
snd_soc_update_bits(codec, RT5639_SPK_VOL,
RT5639_L_MUTE | RT5639_R_MUTE,
RT5639_L_MUTE | RT5639_R_MUTE);
- rt5639_index_update_bits(codec,
- RT5639_CLSD_INT_REG1, 0xf000, 0x0000);
snd_soc_update_bits(codec, RT5639_PWR_DIG1,
RT5639_PWR_CLS_D, 0);
break;
@@ -1498,14 +1485,8 @@ static void hp_amp_power(struct snd_soc_codec *codec, int on)
if (on) {
if (hp_amp_power_count <= 0) {
/* depop parameters */
- rt5639_index_update_bits(codec, RT5639_CHPUMP_INT_REG1,
- 0x0700, 0x0200);
snd_soc_update_bits(codec, RT5639_DEPOP_M2,
RT5639_DEPOP_MASK, RT5639_DEPOP_MAN);
- snd_soc_update_bits(codec, RT5639_DEPOP_M1,
- RT5639_HP_CP_MASK | RT5639_HP_SG_MASK
- | RT5639_HP_CB_MASK, RT5639_HP_CP_PU
- | RT5639_HP_SG_DIS | RT5639_HP_CB_PU);
/* headphone amp power on */
snd_soc_update_bits(codec, RT5639_PWR_ANLG1,
RT5639_PWR_FV1 | RT5639_PWR_FV2, 0);
@@ -1526,18 +1507,20 @@ static void hp_amp_power(struct snd_soc_codec *codec, int on)
RT5639_DEPOP_AUTO | RT5639_DIG_DP_EN);
snd_soc_update_bits(codec, RT5639_CHARGE_PUMP,
RT5639_PM_HP_MASK, RT5639_PM_HP_HV);
+ snd_soc_update_bits(codec, RT5639_DEPOP_M1,
+ RT5639_HP_CP_MASK | RT5639_HP_SG_MASK
+ | RT5639_HP_CB_MASK, RT5639_HP_CP_PU
+ | RT5639_HP_SG_DIS | RT5639_HP_CB_PU);
snd_soc_update_bits(codec, RT5639_DEPOP_M3,
RT5639_CP_FQ1_MASK | RT5639_CP_FQ2_MASK
| RT5639_CP_FQ3_MASK,
(RT5639_CP_FQ_192_KHZ << RT5639_CP_FQ1_SFT) |
(RT5639_CP_FQ_24_KHZ << RT5639_CP_FQ2_SFT) |
(RT5639_CP_FQ_192_KHZ << RT5639_CP_FQ3_SFT));
- rt5639_index_write(codec, RT5639_MAMP_INT_REG2, 0x1c00);
+ rt5639_index_write(codec, RT5639_MAMP_INT_REG2, 0xfc00);
snd_soc_update_bits(codec, RT5639_DEPOP_M1,
RT5639_HP_CP_MASK | RT5639_HP_SG_MASK,
RT5639_HP_CP_PD | RT5639_HP_SG_EN);
- rt5639_index_update_bits(codec, RT5639_CHPUMP_INT_REG1,
- 0x0700, 0x0400);
}
hp_amp_power_count++;
} else {
@@ -1573,7 +1556,7 @@ static void rt5639_pmd_depop(struct snd_soc_codec *codec)
(RT5639_CP_FQ_96_KHZ << RT5639_CP_FQ1_SFT) |
(RT5639_CP_FQ_12_KHZ << RT5639_CP_FQ2_SFT) |
(RT5639_CP_FQ_96_KHZ << RT5639_CP_FQ3_SFT));
- rt5639_index_write(codec, RT5639_MAMP_INT_REG2, 0x7c00);
+ rt5639_index_write(codec, RT5639_MAMP_INT_REG2, 0xfc00);
/*snd_soc_update_bits(codec, RT5639_HP_CALIB_AMP_DET,
RT5639_HPD_PS_MASK, RT5639_HPD_PS_DIS); */
snd_soc_update_bits(codec, RT5639_HP_VOL,
@@ -2934,13 +2917,6 @@ static int rt5639_set_bias_level(struct snd_soc_codec *codec,
mutex_lock(&rt5639->lock);
CHECK_I2C_SHUTDOWN(rt5639, codec)
- /* Make sure test mode is not enabled */
- val = rt5639_index_read(codec, 0x001B);
- if (val == 0x9200)
- snd_soc_write(codec, RT5639_CLS_D_OVCD, 0x0301);
- else
- snd_soc_write(codec, RT5639_CLS_D_OVCD, 0x0328);
-
switch (level) {
case SND_SOC_BIAS_ON:
break;
@@ -2982,7 +2958,6 @@ static int rt5639_set_bias_level(struct snd_soc_codec *codec,
snd_soc_write(codec, RT5639_PWR_MIXER, 0x0000);
snd_soc_write(codec, RT5639_PWR_ANLG1, 0x0000);
snd_soc_write(codec, RT5639_PWR_ANLG2, 0x0000);
- snd_soc_write(codec, RT5639_CLS_D_OVCD, 0x0301);
break;
default: