Re: [PATCH v2 6/6] ASoC: qcom: sm8250: apply codec_fmt to all codec DAIs

Srinivas Kandagatla <[email protected]>
Newsgroups org.kernel.vger.phone-devel,org.kernel.vger.linux-arm-msm,org.kernel.vger.linux-kernel,org.kernel.vger.linux-sound
Message-ID <[email protected]>
On 5/6/26 8:33 PM, Val Packett wrote:
> With MI2S and TDM interfaces, multiple codecs typically share one bus.
> All codecs on the bus should receive the same format configuration, so
> apply the codec_fmt to all of them.
> 
> Signed-off-by: Val Packett <[email protected]>
> ---
>  sound/soc/qcom/sm8250.c | 33 ++++++++++++++++++++++-----------
>  1 file changed, 22 insertions(+), 11 deletions(-)
> 
> diff --git a/sound/soc/qcom/sm8250.c b/sound/soc/qcom/sm8250.c
> index 9f0f846a14bb..7bfe6d282231 100644
> --- a/sound/soc/qcom/sm8250.c
> +++ b/sound/soc/qcom/sm8250.c
> @@ -167,7 +167,8 @@ static int sm8250_snd_startup(struct snd_pcm_substream *substream)
>  	struct snd_soc_card *card = rtd->card;
>  	struct sm8250_snd_data *data = snd_soc_card_get_drvdata(card);
>  	struct snd_soc_dai *cpu_dai = snd_soc_rtd_to_cpu(rtd, 0);
> -	struct snd_soc_dai *codec_dai = snd_soc_rtd_to_codec(rtd, 0);
> +	struct snd_soc_dai *codec_dai;
> +	int j;
>  
>  	switch (cpu_dai->id) {
>  	case PRIMARY_MI2S_RX:
> @@ -177,7 +178,8 @@ static int sm8250_snd_startup(struct snd_pcm_substream *substream)
>  				Q6AFE_LPASS_CLK_ID_PRI_MI2S_IBIT,
>  				MI2S_BCLK_RATE, SNDRV_PCM_STREAM_PLAYBACK);
>  		snd_soc_dai_set_fmt(cpu_dai, fmt);
> -		snd_soc_dai_set_fmt(codec_dai, codec_dai_fmt);
> +		for_each_rtd_codec_dais(rtd, j, codec_dai)
> +			snd_soc_dai_set_fmt(codec_dai, codec_dai_fmt);

failures ignored,

Can we add a helper function would be nice here.

--srini

>  		break;
>  	case SECONDARY_MI2S_RX:
>  		codec_dai_fmt |= SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_I2S;
> @@ -186,7 +188,8 @@ static int sm8250_snd_startup(struct snd_pcm_substream *substream)
>  				Q6AFE_LPASS_CLK_ID_SEC_MI2S_IBIT,
>  				MI2S_BCLK_RATE, SNDRV_PCM_STREAM_PLAYBACK);
>  		snd_soc_dai_set_fmt(cpu_dai, fmt);
> -		snd_soc_dai_set_fmt(codec_dai, codec_dai_fmt);
> +		for_each_rtd_codec_dais(rtd, j, codec_dai)
> +			snd_soc_dai_set_fmt(codec_dai, codec_dai_fmt);
>  		break;
>  	case TERTIARY_MI2S_RX:
>  		codec_dai_fmt |= SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_I2S;
> @@ -195,7 +198,8 @@ static int sm8250_snd_startup(struct snd_pcm_substream *substream)
>  				Q6AFE_LPASS_CLK_ID_TER_MI2S_IBIT,
>  				MI2S_BCLK_RATE, SNDRV_PCM_STREAM_PLAYBACK);
>  		snd_soc_dai_set_fmt(cpu_dai, fmt);
> -		snd_soc_dai_set_fmt(codec_dai, codec_dai_fmt);
> +		for_each_rtd_codec_dais(rtd, j, codec_dai)
> +			snd_soc_dai_set_fmt(codec_dai, codec_dai_fmt);
>  		break;
>  	case QUINARY_MI2S_RX:
>  		codec_dai_fmt |= SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_I2S;
> @@ -204,7 +208,8 @@ static int sm8250_snd_startup(struct snd_pcm_substream *substream)
>  				Q6AFE_LPASS_CLK_ID_QUI_MI2S_IBIT,
>  				MI2S_BCLK_RATE, SNDRV_PCM_STREAM_PLAYBACK);
>  		snd_soc_dai_set_fmt(cpu_dai, fmt);
> -		snd_soc_dai_set_fmt(codec_dai, codec_dai_fmt);
> +		for_each_rtd_codec_dais(rtd, j, codec_dai)
> +			snd_soc_dai_set_fmt(codec_dai, codec_dai_fmt);
>  		break;
>  	case SENARY_MI2S_RX:
>  		codec_dai_fmt |= SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_I2S;
> @@ -213,7 +218,8 @@ static int sm8250_snd_startup(struct snd_pcm_substream *substream)
>  				Q6AFE_LPASS_CLK_ID_SEN_MI2S_IBIT,
>  				MI2S_BCLK_RATE, SNDRV_PCM_STREAM_PLAYBACK);
>  		snd_soc_dai_set_fmt(cpu_dai, fmt);
> -		snd_soc_dai_set_fmt(codec_dai, codec_dai_fmt);
> +		for_each_rtd_codec_dais(rtd, j, codec_dai)
> +			snd_soc_dai_set_fmt(codec_dai, codec_dai_fmt);
>  		break;
>  	case PRIMARY_TDM_RX_0:
>  		codec_dai_fmt |= SND_SOC_DAIFMT_IB_NF | SND_SOC_DAIFMT_DSP_B;
> @@ -221,7 +227,8 @@ static int sm8250_snd_startup(struct snd_pcm_substream *substream)
>  			snd_soc_dai_set_sysclk(cpu_dai,
>  				Q6AFE_LPASS_CLK_ID_PRI_TDM_IBIT,
>  				TDM_BCLK_RATE, SNDRV_PCM_STREAM_PLAYBACK);
> -		snd_soc_dai_set_fmt(codec_dai, codec_dai_fmt);
> +		for_each_rtd_codec_dais(rtd, j, codec_dai)
> +			snd_soc_dai_set_fmt(codec_dai, codec_dai_fmt);
>  		break;
>  	case SECONDARY_TDM_RX_0:
>  		codec_dai_fmt |= SND_SOC_DAIFMT_IB_NF | SND_SOC_DAIFMT_DSP_B;
> @@ -229,7 +236,8 @@ static int sm8250_snd_startup(struct snd_pcm_substream *substream)
>  			snd_soc_dai_set_sysclk(cpu_dai,
>  				Q6AFE_LPASS_CLK_ID_SEC_TDM_IBIT,
>  				TDM_BCLK_RATE, SNDRV_PCM_STREAM_PLAYBACK);
> -		snd_soc_dai_set_fmt(codec_dai, codec_dai_fmt);
> +		for_each_rtd_codec_dais(rtd, j, codec_dai)
> +			snd_soc_dai_set_fmt(codec_dai, codec_dai_fmt);
>  		break;
>  	case TERTIARY_TDM_RX_0:
>  		codec_dai_fmt |= SND_SOC_DAIFMT_IB_NF | SND_SOC_DAIFMT_DSP_B;
> @@ -237,7 +245,8 @@ static int sm8250_snd_startup(struct snd_pcm_substream *substream)
>  			snd_soc_dai_set_sysclk(cpu_dai,
>  				Q6AFE_LPASS_CLK_ID_TER_TDM_IBIT,
>  				TDM_BCLK_RATE, SNDRV_PCM_STREAM_PLAYBACK);
> -		snd_soc_dai_set_fmt(codec_dai, codec_dai_fmt);
> +		for_each_rtd_codec_dais(rtd, j, codec_dai)
> +			snd_soc_dai_set_fmt(codec_dai, codec_dai_fmt);
>  		break;
>  	case QUATERNARY_TDM_RX_0:
>  		codec_dai_fmt |= SND_SOC_DAIFMT_IB_NF | SND_SOC_DAIFMT_DSP_B;
> @@ -245,7 +254,8 @@ static int sm8250_snd_startup(struct snd_pcm_substream *substream)
>  			snd_soc_dai_set_sysclk(cpu_dai,
>  				Q6AFE_LPASS_CLK_ID_QUAD_TDM_IBIT,
>  				TDM_BCLK_RATE, SNDRV_PCM_STREAM_PLAYBACK);
> -		snd_soc_dai_set_fmt(codec_dai, codec_dai_fmt);
> +		for_each_rtd_codec_dais(rtd, j, codec_dai)
> +			snd_soc_dai_set_fmt(codec_dai, codec_dai_fmt);
>  		break;
>  	case QUINARY_TDM_RX_0:
>  		codec_dai_fmt |= SND_SOC_DAIFMT_IB_NF | SND_SOC_DAIFMT_DSP_B;
> @@ -253,7 +263,8 @@ static int sm8250_snd_startup(struct snd_pcm_substream *substream)
>  			snd_soc_dai_set_sysclk(cpu_dai,
>  				Q6AFE_LPASS_CLK_ID_QUIN_TDM_IBIT,
>  				TDM_BCLK_RATE, SNDRV_PCM_STREAM_PLAYBACK);
> -		snd_soc_dai_set_fmt(codec_dai, codec_dai_fmt);
> +		for_each_rtd_codec_dais(rtd, j, codec_dai)
> +			snd_soc_dai_set_fmt(codec_dai, codec_dai_fmt);
>  		break;
>  	default:
>  		break;
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.