On Mon, Mar 20, 2023 at 10:35:18PM +0200, Marian Postevca wrote: > +static int acp_asoc_suspend_pre(struct snd_soc_card *card) > +{ > + int ret; > + > + ret = acp_ops_suspend_pre(card); > + return ret == 1 ? 0 : ret; Please write normal conditional statements to improve legibility (or just have the function that's being called return a directly usable value?). > + if (priv->quirk & ES83XX_48_MHZ_MCLK) { > + dev_dbg(priv->codec_dev, "using a 48Mhz MCLK\n"); > + snd_pcm_hw_constraint_list(runtime, 0, SNDRV_PCM_HW_PARAM_RATE, > + &hw_constraint_rates_48mhz); > + freq = ES83xx_48_MHZ_MCLK_FREQ; > + } else { > + dev_dbg(priv->codec_dev, "using a 12.288Mhz MCLK\n"); > + snd_pcm_hw_constraint_list(runtime, 0, SNDRV_PCM_HW_PARAM_RATE, > + &hw_constraint_rates_normal); > + freq = ES83xx_12288_KHZ_MCLK_FREQ; > + } The CODEC driver should be able to set these constraints for itself. > + ret = snd_soc_dai_set_fmt(codec_dai, SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF > + | SND_SOC_DAIFMT_CBP_CFP); Set this in the dai_link. > +static int acp3x_es83xx_speaker_power_event(struct snd_soc_dapm_widget *w, > + struct snd_kcontrol *kcontrol, int event) > +{ > + struct acp3x_es83xx_private *priv = get_mach_priv(w->dapm->card); > + > + dev_dbg(priv->codec_dev, "speaker power event: %d\n", event); > + if (SND_SOC_DAPM_EVENT_ON(event)) > + acp3x_es83xx_set_gpios_values(priv, 1, 0); > + else > + acp3x_es83xx_set_gpios_values(priv, 0, 1); Why are these two GPIOs tied together like this? > +static int acp3x_es83xx_suspend_pre(struct snd_soc_card *card) > +{ > + struct acp3x_es83xx_private *priv = get_mach_priv(card); > + > + dev_dbg(priv->codec_dev, "card suspend\n"); > + snd_soc_component_set_jack(priv->codec, NULL, NULL); > + return 0; > +} That's weird, why do that?