ASoC: rt1308: add silence detection and manual PDB control
authorShuming Fan <shumingf@realtek.com>
Fri, 19 Jul 2019 06:32:49 +0000 (14:32 +0800)
committerMark Brown <broonie@kernel.org>
Mon, 22 Jul 2019 12:26:18 +0000 (13:26 +0100)
We enable the silence detection function in initial settings.
PDB control changes to manual mode, hence the driver could
fully control the AMP output on/off.

Signed-off-by: Shuming Fan <shumingf@realtek.com>
Link: https://lore.kernel.org/r/20190719063249.18806-1-shumingf@realtek.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/codecs/rt1308.c

index 19d255e01827df0ca4bffeefa92f452e154e1267..cf3d72f997054cb49ef048a5a1616bf4eef5e284 100755 (executable)
@@ -40,10 +40,10 @@ static const struct reg_sequence init_list[] = {
        { RT1308_VREF,                  0x18100000 },
        { RT1308_IV_SENSE,              0x87010000 },
        { RT1308_DUMMY_REG,             0x00000200 },
-       { RT1308_SIL_DET,               0x61c30000 },
+       { RT1308_SIL_DET,               0xe1c30000 },
        { RT1308_DC_CAL_2,              0x00ffff00 },
        { RT1308_CLK_DET,               0x01000000 },
-       { RT1308_POWER_STATUS,          0x00800000 },
+       { RT1308_POWER_STATUS,          0x08800000 },
        { RT1308_DAC_SET,               0xafaf0700 },
 
 };
@@ -308,12 +308,13 @@ static int rt1308_classd_event(struct snd_soc_dapm_widget *w,
        case SND_SOC_DAPM_POST_PMU:
                msleep(30);
                snd_soc_component_update_bits(component, RT1308_POWER_STATUS,
-                       RT1308_POW_PDB_REG_BIT, RT1308_POW_PDB_REG_BIT);
+                       RT1308_POW_PDB_REG_BIT | RT1308_POW_PDB_MN_BIT,
+                       RT1308_POW_PDB_REG_BIT | RT1308_POW_PDB_MN_BIT);
                msleep(40);
                break;
        case SND_SOC_DAPM_PRE_PMD:
                snd_soc_component_update_bits(component, RT1308_POWER_STATUS,
-                       RT1308_POW_PDB_REG_BIT, 0);
+                       RT1308_POW_PDB_REG_BIT | RT1308_POW_PDB_MN_BIT, 0);
                usleep_range(150000, 200000);
                break;