> Subject: Re: [PATCH v2 1/1] ASoC: rt5682s: Add dapm switch to mute/unmute > HP playback output > > On 12/9/2021 7:55 AM, Shuming [范書銘] wrote: > > [CAUTION: External Email] > > > >> Subject: [PATCH v2 1/1] ASoC: rt5682s: Add dapm switch to mute/unmute HP > >> playback output > >> > >> Add dapm switch in playback path to mute or unmute HP output data. > >> We will set and reset MUTE_SFT bit in RT5682S_HP_CTRL_1 register based on > >> switch value to mute or unmute respective channel. > >> > >> Signed-off-by: Ajit Kumar Pandey <AjitKumar.Pandey@xxxxxxx> > >> --- > >> sound/soc/codecs/rt5682s.c | 19 +++++++++++++++++-- > >> 1 file changed, 17 insertions(+), 2 deletions(-) > >> > >> diff --git a/sound/soc/codecs/rt5682s.c b/sound/soc/codecs/rt5682s.c index > >> d49a4f68566d..21ab5f7df422 100644 > >> --- a/sound/soc/codecs/rt5682s.c > >> +++ b/sound/soc/codecs/rt5682s.c > >> @@ -1573,6 +1573,14 @@ static const char * const > >> rt5682s_adcdat_pin_select[] = { > >> "ADCDAT1", "ADCDAT2", > >> }; > >> > >> +/* Out Switch */ > >> +static const struct snd_kcontrol_new hpol_switch = > >> + SOC_DAPM_SINGLE_AUTODISABLE("Switch", RT5682S_HP_CTRL_1, > >> + RT5682S_L_MUTE_SFT, 1, 1); > >> +static const struct snd_kcontrol_new hpor_switch = > >> + SOC_DAPM_SINGLE_AUTODISABLE("Switch", RT5682S_HP_CTRL_1, > >> + RT5682S_R_MUTE_SFT, 1, 1); > >> + > >> static SOC_VALUE_ENUM_SINGLE_DECL(rt5682s_adcdat_pin_enum, > >> RT5682S_GPIO_CTRL_1, RT5682S_GP4_PIN_SFT, > >> RT5682S_GP4_PIN_MASK, > >> rt5682s_adcdat_pin_select, rt5682s_adcdat_pin_values); @@ > -1746,6 > >> +1754,11 @@ static const struct snd_soc_dapm_widget > >> rt5682s_dapm_widgets[] = { > >> SND_SOC_DAPM_PGA_S("HP Amp", 1, SND_SOC_NOPM, 0, 0, > >> rt5682s_hp_amp_event, > >> SND_SOC_DAPM_POST_PMD | > SND_SOC_DAPM_POST_PMU), > >> > >> + SND_SOC_DAPM_SWITCH("HPOL Playback", SND_SOC_NOPM, 0, 0, > >> + &hpol_switch), > >> + SND_SOC_DAPM_SWITCH("HPOR Playback", SND_SOC_NOPM, 0, 0, > >> + &hpor_switch), > >> + > >> /* CLK DET */ > >> SND_SOC_DAPM_SUPPLY("CLKDET SYS", RT5682S_CLK_DET, > >> RT5682S_SYS_CLK_DET_SFT, 0, NULL, 0), @@ -1895,8 > +1908,10 @@ > >> static const struct snd_soc_dapm_route rt5682s_dapm_routes[] = { > >> {"HP Amp", NULL, "CLKDET SYS"}, > >> {"HP Amp", NULL, "SAR"}, > >> > >> - {"HPOL", NULL, "HP Amp"}, > >> - {"HPOR", NULL, "HP Amp"}, > >> + {"HPOL Playback", "Switch", "HP Amp"}, > >> + {"HPOR Playback", "Switch", "HP Amp"}, > >> + {"HPOL", NULL, "HPOL Playback"}, > >> + {"HPOR", NULL, "HPOR Playback"}, > >> }; > > > > RT5682S enables the 1 bit control for HP output. > > Therefore, the setting of RT5682S_HP_CTRL_1[15][7] will be not effective. > > > > > Ok, it was actually effective and muted audio when we test in our > platform, possible because i'm tearing down dapm path based on switch > value. If we don't have register bits available to mute i'll resubmit > the change with virtual switch widget to disable DAPM and stop audio. > What purpose do you want to add an additional switch to power up/down the dapm in the codec driver instead of using existing controls? And we thought the virtual switch you talked about could be implemented in the machine driver.