ASoC: RT286: Fix silent at the beginning of stream
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>
This commit is contained in:
Родитель
61a414c412
Коммит
bc6c4e455a
|
@ -54,6 +54,7 @@ static struct reg_default rt286_index_def[] = {
|
||||||
{ 0x09, 0xd810 },
|
{ 0x09, 0xd810 },
|
||||||
{ 0x0a, 0x0060 },
|
{ 0x0a, 0x0060 },
|
||||||
{ 0x0b, 0x0000 },
|
{ 0x0b, 0x0000 },
|
||||||
|
{ 0x0d, 0x2800 },
|
||||||
{ 0x0f, 0x0000 },
|
{ 0x0f, 0x0000 },
|
||||||
{ 0x19, 0x0a17 },
|
{ 0x19, 0x0a17 },
|
||||||
{ 0x20, 0x0020 },
|
{ 0x20, 0x0020 },
|
||||||
|
@ -62,6 +63,9 @@ static struct reg_default rt286_index_def[] = {
|
||||||
{ 0x4f, 0x50e9 },
|
{ 0x4f, 0x50e9 },
|
||||||
{ 0x50, 0x2c00 },
|
{ 0x50, 0x2c00 },
|
||||||
{ 0x63, 0x2902 },
|
{ 0x63, 0x2902 },
|
||||||
|
{ 0x67, 0x1111 },
|
||||||
|
{ 0x68, 0x1016 },
|
||||||
|
{ 0x69, 0x273f },
|
||||||
};
|
};
|
||||||
#define INDEX_CACHE_SIZE ARRAY_SIZE(rt286_index_def)
|
#define INDEX_CACHE_SIZE ARRAY_SIZE(rt286_index_def)
|
||||||
|
|
||||||
|
@ -902,14 +906,23 @@ static int rt286_set_bias_level(struct snd_soc_codec *codec,
|
||||||
{
|
{
|
||||||
switch (level) {
|
switch (level) {
|
||||||
case SND_SOC_BIAS_PREPARE:
|
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,
|
snd_soc_write(codec,
|
||||||
RT286_SET_AUDIO_POWER, AC_PWRST_D0);
|
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;
|
break;
|
||||||
|
|
||||||
case SND_SOC_BIAS_STANDBY:
|
case SND_SOC_BIAS_STANDBY:
|
||||||
snd_soc_write(codec,
|
snd_soc_write(codec,
|
||||||
RT286_SET_AUDIO_POWER, AC_PWRST_D3);
|
RT286_SET_AUDIO_POWER, AC_PWRST_D3);
|
||||||
|
snd_soc_update_bits(codec,
|
||||||
|
RT286_DC_GAIN, 0x200, 0x0);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
@ -1152,6 +1165,11 @@ static int rt286_i2c_probe(struct i2c_client *i2c,
|
||||||
/*Power down LDO2*/
|
/*Power down LDO2*/
|
||||||
regmap_update_bits(rt286->regmap, RT286_POWER_CTRL2, 0x8, 0x0);
|
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) {
|
if (rt286->i2c->irq) {
|
||||||
regmap_update_bits(rt286->regmap,
|
regmap_update_bits(rt286->regmap,
|
||||||
RT286_IRQ_CTRL, 0x2, 0x2);
|
RT286_IRQ_CTRL, 0x2, 0x2);
|
||||||
|
|
|
@ -127,6 +127,7 @@
|
||||||
#define RT286_I2S_CTRL1 0x09
|
#define RT286_I2S_CTRL1 0x09
|
||||||
#define RT286_I2S_CTRL2 0x0a
|
#define RT286_I2S_CTRL2 0x0a
|
||||||
#define RT286_CLK_DIV 0x0b
|
#define RT286_CLK_DIV 0x0b
|
||||||
|
#define RT286_DC_GAIN 0x0d
|
||||||
#define RT286_POWER_CTRL3 0x0f
|
#define RT286_POWER_CTRL3 0x0f
|
||||||
#define RT286_MIC1_DET_CTRL 0x19
|
#define RT286_MIC1_DET_CTRL 0x19
|
||||||
#define RT286_MISC_CTRL1 0x20
|
#define RT286_MISC_CTRL1 0x20
|
||||||
|
@ -135,6 +136,10 @@
|
||||||
#define RT286_CBJ_CTRL1 0x4f
|
#define RT286_CBJ_CTRL1 0x4f
|
||||||
#define RT286_CBJ_CTRL2 0x50
|
#define RT286_CBJ_CTRL2 0x50
|
||||||
#define RT286_PLL_CTRL 0x63
|
#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) */
|
/* SPDIF (0x06) */
|
||||||
#define RT286_SPDIF_SEL_SFT 0
|
#define RT286_SPDIF_SEL_SFT 0
|
||||||
|
|
Загрузка…
Ссылка в новой задаче