Messages in this thread | | | Date | Wed, 26 Jul 2023 08:43:54 +0200 | Subject | Re: [PATCH 1/3] ASoC: mediatek: mt8188-mt6359: support dynamic pinctrl | From | AngeloGioacchino Del Regno <> |
| |
Il 26/07/23 04:19, Trevor Wu (吳文良) ha scritto: > On Tue, 2023-07-25 at 09:06 +0200, AngeloGioacchino Del Regno wrote: >> Il 25/07/23 05:53, Trevor Wu ha scritto: >>> To avoid power leakage, it is recommended to replace the default >>> pinctrl >>> state with dynamic pinctrl since certain audio pinmux functions can >>> remain in a HIGH state even when audio is disabled. Linking pinctrl >>> with >>> DAPM using SND_SOC_DAPM_PINCTRL will ensure that audio pins remain >>> in >>> GPIO mode by default and only switch to an audio function when >>> necessary. >>> >>> Signed-off-by: Trevor Wu <trevor.wu@mediatek.com> >>> --- >>> sound/soc/mediatek/mt8188/mt8188-mt6359.c | 21 >>> +++++++++++++++++++++ >>> 1 file changed, 21 insertions(+) >>> >>> diff --git a/sound/soc/mediatek/mt8188/mt8188-mt6359.c >>> b/sound/soc/mediatek/mt8188/mt8188-mt6359.c >>> index 7c9e08e6a4f5..667d79f33bf2 100644 >>> --- a/sound/soc/mediatek/mt8188/mt8188-mt6359.c >>> +++ b/sound/soc/mediatek/mt8188/mt8188-mt6359.c >>> @@ -246,6 +246,11 @@ static const struct snd_soc_dapm_widget >>> mt8188_mt6359_widgets[] = { >>> SND_SOC_DAPM_MIC("Headset Mic", NULL), >>> SND_SOC_DAPM_SINK("HDMI"), >>> SND_SOC_DAPM_SINK("DP"), >>> + >>> + /* dynamic pinctrl */ >>> + SND_SOC_DAPM_PINCTRL("ETDM_SPK_PIN", "aud_etdm_spk_on", >>> "aud_etdm_spk_off"), >>> + SND_SOC_DAPM_PINCTRL("ETDM_HP_PIN", "aud_etdm_hp_on", >>> "aud_etdm_hp_off"), >>> + SND_SOC_DAPM_PINCTRL("MTKAIF_PIN", "aud_mtkaif_on", >>> "aud_mtkaif_off"), >>> }; >>> >>> static const struct snd_kcontrol_new mt8188_mt6359_controls[] = { >>> @@ -267,6 +272,7 @@ static int >>> mt8188_mt6359_mtkaif_calibration(struct snd_soc_pcm_runtime *rtd) >>> snd_soc_rtdcom_lookup(rtd, AFE_PCM_NAME); >>> struct snd_soc_component *cmpnt_codec = >>> asoc_rtd_to_codec(rtd, 0)->component; >>> + struct snd_soc_dapm_widget *pin_w = NULL, *w; >>> struct mtk_base_afe *afe; >>> struct mt8188_afe_private *afe_priv; >>> struct mtkaif_param *param; >>> @@ -306,6 +312,18 @@ static int >>> mt8188_mt6359_mtkaif_calibration(struct snd_soc_pcm_runtime *rtd) >>> return 0; >>> } >>> >>> + for_each_card_widgets(rtd->card, w) { >>> + if (!strcmp(w->name, "MTKAIF_PIN")) { >> >> if (strncmp(w->name, "MTKAIF_PIN", strlen(w->name) == 0) { >> pin_w = w; >> break; >> } >> >> That's safer. >> > > If w->name is MTKAIF, the strncmp expression will return 0. However, > the result is not expected. I prefer to keep strcmp here. >
You could also do, instead
if (strncmp(w->name, "MTKAIF_PIN", strlen("MTKAIF_PIN") == 0))
...solving your concern.
Regards, Angelo
>>> + pin_w = w; >>> + break; >>> + } >>> + } >>> + >>> + if (!pin_w) >> >> Just a nitpick: you're checking for `if (pin_w)` later in this >> function, so >> to increase readability please do the same here. >> >> if (pin_w) >> dapm_pinctrl_event(...) >> else >> dev_dbg(...) >> > > OK. I will update it in v2. > > Thanks, > Trevor
| |