Skip to content

Commit

Permalink
ASoC: RT286: Fix silent at the beginning of stream
Browse files Browse the repository at this point in the history
This patch fix the issue that the output is almost silent at the
beginning of starting a playback.

Signed-off-by: Bard Liao <bardliao@realtek.com>
Signed-off-by: Mark Brown <broonie@linaro.org>
  • Loading branch information
Bard Liao authored and Mark Brown committed Jul 7, 2014
1 parent 61a414c commit bc6c4e4
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 1 deletion.
20 changes: 19 additions & 1 deletion sound/soc/codecs/rt286.c
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@ static struct reg_default rt286_index_def[] = {
{ 0x09, 0xd810 },
{ 0x0a, 0x0060 },
{ 0x0b, 0x0000 },
{ 0x0d, 0x2800 },
{ 0x0f, 0x0000 },
{ 0x19, 0x0a17 },
{ 0x20, 0x0020 },
Expand All @@ -62,6 +63,9 @@ static struct reg_default rt286_index_def[] = {
{ 0x4f, 0x50e9 },
{ 0x50, 0x2c00 },
{ 0x63, 0x2902 },
{ 0x67, 0x1111 },
{ 0x68, 0x1016 },
{ 0x69, 0x273f },
};
#define INDEX_CACHE_SIZE ARRAY_SIZE(rt286_index_def)

Expand Down Expand Up @@ -902,14 +906,23 @@ static int rt286_set_bias_level(struct snd_soc_codec *codec,
{
switch (level) {
case SND_SOC_BIAS_PREPARE:
if (SND_SOC_BIAS_STANDBY == codec->dapm.bias_level)
if (SND_SOC_BIAS_STANDBY == codec->dapm.bias_level) {
snd_soc_write(codec,
RT286_SET_AUDIO_POWER, AC_PWRST_D0);
snd_soc_update_bits(codec,
RT286_DC_GAIN, 0x200, 0x200);
}
break;

case SND_SOC_BIAS_ON:
mdelay(10);
break;

case SND_SOC_BIAS_STANDBY:
snd_soc_write(codec,
RT286_SET_AUDIO_POWER, AC_PWRST_D3);
snd_soc_update_bits(codec,
RT286_DC_GAIN, 0x200, 0x0);
break;

default:
Expand Down Expand Up @@ -1152,6 +1165,11 @@ static int rt286_i2c_probe(struct i2c_client *i2c,
/*Power down LDO2*/
regmap_update_bits(rt286->regmap, RT286_POWER_CTRL2, 0x8, 0x0);

/*Set depop parameter*/
regmap_update_bits(rt286->regmap, RT286_DEPOP_CTRL2, 0x403a, 0x401a);
regmap_update_bits(rt286->regmap, RT286_DEPOP_CTRL3, 0xf777, 0x4737);
regmap_update_bits(rt286->regmap, RT286_DEPOP_CTRL4, 0x00ff, 0x003f);

if (rt286->i2c->irq) {
regmap_update_bits(rt286->regmap,
RT286_IRQ_CTRL, 0x2, 0x2);
Expand Down
5 changes: 5 additions & 0 deletions sound/soc/codecs/rt286.h
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,7 @@
#define RT286_I2S_CTRL1 0x09
#define RT286_I2S_CTRL2 0x0a
#define RT286_CLK_DIV 0x0b
#define RT286_DC_GAIN 0x0d
#define RT286_POWER_CTRL3 0x0f
#define RT286_MIC1_DET_CTRL 0x19
#define RT286_MISC_CTRL1 0x20
Expand All @@ -135,6 +136,10 @@
#define RT286_CBJ_CTRL1 0x4f
#define RT286_CBJ_CTRL2 0x50
#define RT286_PLL_CTRL 0x63
#define RT286_DEPOP_CTRL1 0x66
#define RT286_DEPOP_CTRL2 0x67
#define RT286_DEPOP_CTRL3 0x68
#define RT286_DEPOP_CTRL4 0x69

/* SPDIF (0x06) */
#define RT286_SPDIF_SEL_SFT 0
Expand Down

0 comments on commit bc6c4e4

Please sign in to comment.