* [PATCH 01/21] ASoC: dwc: use .auto_selectable_formats
2026-09-03 1:13 [PATCH 00/21] ASoC: use .auto_selectable_formats Kuninori Morimoto
@ 2026-09-03 1:13 ` Kuninori Morimoto
2026-09-03 1:13 ` [PATCH 02/21] ASoC: fsl: " Kuninori Morimoto
` (20 subsequent siblings)
21 siblings, 0 replies; 28+ messages in thread
From: Kuninori Morimoto @ 2026-09-03 1:13 UTC (permalink / raw)
To: Jaroslav Kysela, Liam Girdwood, Mark Brown, Takashi Iwai,
Tim Bird
Cc: linux-sound
We can use .auto_selectable_formats. Let's adds it.
Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
---
sound/soc/dwc/dwc-i2s.c | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/sound/soc/dwc/dwc-i2s.c b/sound/soc/dwc/dwc-i2s.c
index 2e9fb79b1cd8b..ade89c196a798 100644
--- a/sound/soc/dwc/dwc-i2s.c
+++ b/sound/soc/dwc/dwc-i2s.c
@@ -464,6 +464,13 @@ static int dw_i2s_dai_probe(struct snd_soc_dai *dai)
return 0;
}
+static const u64 dw_i2s_selectable_formats =
+ SND_SOC_POSSIBLE_DAIFMT_I2S |
+ SND_SOC_POSSIBLE_DAIFMT_RIGHT_J |
+ SND_SOC_POSSIBLE_DAIFMT_LEFT_J |
+ SND_SOC_POSSIBLE_DAIFMT_DSP_A |
+ SND_SOC_POSSIBLE_DAIFMT_DSP_B;
+
static const struct snd_soc_dai_ops dw_i2s_dai_ops = {
.probe = dw_i2s_dai_probe,
.startup = dw_i2s_startup,
@@ -472,6 +479,8 @@ static const struct snd_soc_dai_ops dw_i2s_dai_ops = {
.trigger = dw_i2s_trigger,
.set_fmt = dw_i2s_set_fmt,
.set_tdm_slot = dw_i2s_set_tdm_slot,
+ .auto_selectable_formats = &dw_i2s_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static int dw_i2s_runtime_suspend(struct device *dev)
--
2.53.0
^ permalink raw reply related [flat|nested] 28+ messages in thread* [PATCH 02/21] ASoC: fsl: use .auto_selectable_formats
2026-09-03 1:13 [PATCH 00/21] ASoC: use .auto_selectable_formats Kuninori Morimoto
2026-09-03 1:13 ` [PATCH 01/21] ASoC: dwc: " Kuninori Morimoto
@ 2026-09-03 1:13 ` Kuninori Morimoto
2026-09-03 7:43 ` Vladimir Zapolskiy
` (2 more replies)
2026-09-03 1:13 ` [PATCH 03/21] ASoC: hisilicon: " Kuninori Morimoto
` (19 subsequent siblings)
21 siblings, 3 replies; 28+ messages in thread
From: Kuninori Morimoto @ 2026-09-03 1:13 UTC (permalink / raw)
To: Fabio Estevam, Jaroslav Kysela, J.M.B. Downing, Liam Girdwood,
Mark Brown, Nicolin Chen, Piotr Wojtaszczyk, Shengjiu Wang,
Takashi Iwai, Vladimir Zapolskiy, Xiubo Li
Cc: linux-sound
We can use .auto_selectable_formats. Let's adds it.
Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
---
sound/soc/fsl/fsl_audmix.c | 7 +++++++
sound/soc/fsl/fsl_esai.c | 13 +++++++++++++
sound/soc/fsl/fsl_mqs.c | 6 ++++++
sound/soc/fsl/fsl_sai.c | 17 +++++++++++++++++
sound/soc/fsl/fsl_ssi.c | 13 +++++++++++++
sound/soc/fsl/lpc3xxx-i2s.c | 4 ++++
sound/soc/fsl/mpc5200_psc_i2s.c | 4 ++++
7 files changed, 64 insertions(+)
diff --git a/sound/soc/fsl/fsl_audmix.c b/sound/soc/fsl/fsl_audmix.c
index d4140e170edf8..b66a5669a3cbf 100644
--- a/sound/soc/fsl/fsl_audmix.c
+++ b/sound/soc/fsl/fsl_audmix.c
@@ -311,9 +311,16 @@ static int fsl_audmix_dai_trigger(struct snd_pcm_substream *substream, int cmd,
return 0;
}
+static const u64 fsl_audmix_selectable_formats =
+ SND_SOC_POSSIBLE_DAIFMT_DSP_A |
+ SND_SOC_POSSIBLE_DAIFMT_NB_NF |
+ SND_SOC_POSSIBLE_DAIFMT_IB_NF;
+
static const struct snd_soc_dai_ops fsl_audmix_dai_ops = {
.set_fmt = fsl_audmix_dai_set_fmt,
.trigger = fsl_audmix_dai_trigger,
+ .auto_selectable_formats = &fsl_audmix_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver fsl_audmix_dai[] = {
diff --git a/sound/soc/fsl/fsl_esai.c b/sound/soc/fsl/fsl_esai.c
index 4a530a6c33f07..e49386f8d7d33 100644
--- a/sound/soc/fsl/fsl_esai.c
+++ b/sound/soc/fsl/fsl_esai.c
@@ -789,6 +789,17 @@ static int fsl_esai_dai_probe(struct snd_soc_dai *dai)
return 0;
}
+static const u64 fsl_esai_selectable_formats =
+ SND_SOC_POSSIBLE_DAIFMT_I2S |
+ SND_SOC_POSSIBLE_DAIFMT_RIGHT_J |
+ SND_SOC_POSSIBLE_DAIFMT_LEFT_J |
+ SND_SOC_POSSIBLE_DAIFMT_DSP_A |
+ SND_SOC_POSSIBLE_DAIFMT_DSP_B |
+ SND_SOC_POSSIBLE_DAIFMT_NB_NF |
+ SND_SOC_POSSIBLE_DAIFMT_NB_IF |
+ SND_SOC_POSSIBLE_DAIFMT_IB_NF |
+ SND_SOC_POSSIBLE_DAIFMT_IB_IF;
+
static const struct snd_soc_dai_ops fsl_esai_dai_ops = {
.probe = fsl_esai_dai_probe,
.startup = fsl_esai_startup,
@@ -797,6 +808,8 @@ static const struct snd_soc_dai_ops fsl_esai_dai_ops = {
.set_sysclk = fsl_esai_set_dai_sysclk,
.set_fmt = fsl_esai_set_dai_fmt,
.set_tdm_slot = fsl_esai_set_dai_tdm_slot,
+ .auto_selectable_formats = &fsl_esai_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver fsl_esai_dai = {
diff --git a/sound/soc/fsl/fsl_mqs.c b/sound/soc/fsl/fsl_mqs.c
index 901f840df9047..39129f970c3f5 100644
--- a/sound/soc/fsl/fsl_mqs.c
+++ b/sound/soc/fsl/fsl_mqs.c
@@ -187,11 +187,17 @@ static const struct snd_soc_component_driver soc_codec_fsl_mqs = {
.idle_bias_on = 1,
};
+static const u64 fsl_selectable_formats =
+ SND_SOC_POSSIBLE_DAIFMT_LEFT_J |
+ SND_SOC_POSSIBLE_DAIFMT_NB_NF;
+
static const struct snd_soc_dai_ops fsl_mqs_dai_ops = {
.startup = fsl_mqs_startup,
.shutdown = fsl_mqs_shutdown,
.hw_params = fsl_mqs_hw_params,
.set_fmt = fsl_mqs_set_dai_fmt,
+ .auto_selectable_formats = &fsl_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver fsl_mqs_dai = {
diff --git a/sound/soc/fsl/fsl_sai.c b/sound/soc/fsl/fsl_sai.c
index d232c8f530615..4dce1a43b2b43 100644
--- a/sound/soc/fsl/fsl_sai.c
+++ b/sound/soc/fsl/fsl_sai.c
@@ -1026,6 +1026,17 @@ static int fsl_sai_dai_probe(struct snd_soc_dai *cpu_dai)
return 0;
}
+static const u64 fsl_sai_selectable_formats =
+ SND_SOC_POSSIBLE_DAIFMT_I2S |
+ SND_SOC_POSSIBLE_DAIFMT_LEFT_J |
+ SND_SOC_POSSIBLE_DAIFMT_DSP_A |
+ SND_SOC_POSSIBLE_DAIFMT_DSP_B |
+ SND_SOC_POSSIBLE_DAIFMT_PDM |
+ SND_SOC_POSSIBLE_DAIFMT_NB_NF |
+ SND_SOC_POSSIBLE_DAIFMT_NB_IF |
+ SND_SOC_POSSIBLE_DAIFMT_IB_NF |
+ SND_SOC_POSSIBLE_DAIFMT_IB_IF;
+
static const struct snd_soc_dai_ops fsl_sai_pcm_dai_ops = {
.probe = fsl_sai_dai_probe,
.set_bclk_ratio = fsl_sai_set_dai_bclk_ratio,
@@ -1036,6 +1047,8 @@ static const struct snd_soc_dai_ops fsl_sai_pcm_dai_ops = {
.hw_free = fsl_sai_hw_free,
.trigger = fsl_sai_trigger,
.startup = fsl_sai_startup,
+ .auto_selectable_formats = &fsl_sai_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static const struct snd_soc_dai_ops fsl_sai_pcm_dai_tx_ops = {
@@ -1049,6 +1062,8 @@ static const struct snd_soc_dai_ops fsl_sai_pcm_dai_tx_ops = {
.hw_free = fsl_sai_hw_free,
.trigger = fsl_sai_trigger,
.startup = fsl_sai_startup,
+ .auto_selectable_formats = &fsl_sai_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static const struct snd_soc_dai_ops fsl_sai_pcm_dai_rx_ops = {
@@ -1062,6 +1077,8 @@ static const struct snd_soc_dai_ops fsl_sai_pcm_dai_rx_ops = {
.hw_free = fsl_sai_hw_free,
.trigger = fsl_sai_trigger,
.startup = fsl_sai_startup,
+ .auto_selectable_formats = &fsl_sai_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static int fsl_sai_dai_resume(struct snd_soc_component *component)
diff --git a/sound/soc/fsl/fsl_ssi.c b/sound/soc/fsl/fsl_ssi.c
index dc022976c9823..02ce112faf2db 100644
--- a/sound/soc/fsl/fsl_ssi.c
+++ b/sound/soc/fsl/fsl_ssi.c
@@ -1151,6 +1151,17 @@ static int fsl_ssi_dai_probe(struct snd_soc_dai *dai)
return 0;
}
+static const u64 fsl_ssi_selectable_formats =
+ SND_SOC_POSSIBLE_DAIFMT_I2S |
+ SND_SOC_POSSIBLE_DAIFMT_LEFT_J |
+ SND_SOC_POSSIBLE_DAIFMT_DSP_A |
+ SND_SOC_POSSIBLE_DAIFMT_DSP_B |
+ SND_SOC_POSSIBLE_DAIFMT_AC97 |
+ SND_SOC_POSSIBLE_DAIFMT_NB_NF |
+ SND_SOC_POSSIBLE_DAIFMT_NB_IF |
+ SND_SOC_POSSIBLE_DAIFMT_IB_NF |
+ SND_SOC_POSSIBLE_DAIFMT_IB_IF;
+
static const struct snd_soc_dai_ops fsl_ssi_dai_ops = {
.probe = fsl_ssi_dai_probe,
.startup = fsl_ssi_startup,
@@ -1160,6 +1171,8 @@ static const struct snd_soc_dai_ops fsl_ssi_dai_ops = {
.set_fmt = fsl_ssi_set_dai_fmt,
.set_tdm_slot = fsl_ssi_set_dai_tdm_slot,
.trigger = fsl_ssi_trigger,
+ .auto_selectable_formats = &fsl_ssi_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver fsl_ssi_dai_template = {
diff --git a/sound/soc/fsl/lpc3xxx-i2s.c b/sound/soc/fsl/lpc3xxx-i2s.c
index c65c17dfa1747..ea521647129ba 100644
--- a/sound/soc/fsl/lpc3xxx-i2s.c
+++ b/sound/soc/fsl/lpc3xxx-i2s.c
@@ -257,6 +257,8 @@ static int lpc3xxx_i2s_dai_probe(struct snd_soc_dai *dai)
return 0;
}
+static const u64 lpc3xxx_i2s_selectable_formats = SND_SOC_POSSIBLE_DAIFMT_I2S;
+
static const struct snd_soc_dai_ops lpc3xxx_i2s_dai_ops = {
.probe = lpc3xxx_i2s_dai_probe,
.startup = lpc3xxx_i2s_startup,
@@ -265,6 +267,8 @@ static const struct snd_soc_dai_ops lpc3xxx_i2s_dai_ops = {
.hw_params = lpc3xxx_i2s_hw_params,
.set_sysclk = lpc3xxx_i2s_set_dai_sysclk,
.set_fmt = lpc3xxx_i2s_set_dai_fmt,
+ .auto_selectable_formats = &lpc3xxx_i2s_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver lpc3xxx_i2s_dai_driver = {
diff --git a/sound/soc/fsl/mpc5200_psc_i2s.c b/sound/soc/fsl/mpc5200_psc_i2s.c
index c024a38e3b9c7..72db83994e8e1 100644
--- a/sound/soc/fsl/mpc5200_psc_i2s.c
+++ b/sound/soc/fsl/mpc5200_psc_i2s.c
@@ -124,6 +124,8 @@ static int psc_i2s_set_fmt(struct snd_soc_dai *cpu_dai, unsigned int format)
* - create/destroy dai hooks
*/
+static const u64 psc_i2s_selectable_formats = SND_SOC_POSSIBLE_DAIFMT_I2S;
+
/**
* var psc_i2s_dai_ops - template CPU Digital Audio Interface
*/
@@ -131,6 +133,8 @@ static const struct snd_soc_dai_ops psc_i2s_dai_ops = {
.hw_params = psc_i2s_hw_params,
.set_sysclk = psc_i2s_set_sysclk,
.set_fmt = psc_i2s_set_fmt,
+ .auto_selectable_formats = &psc_i2s_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver psc_i2s_dai[] = {{
--
2.53.0
^ permalink raw reply related [flat|nested] 28+ messages in thread* Re: [PATCH 02/21] ASoC: fsl: use .auto_selectable_formats
2026-09-03 1:13 ` [PATCH 02/21] ASoC: fsl: " Kuninori Morimoto
@ 2026-09-03 7:43 ` Vladimir Zapolskiy
2026-09-11 20:10 ` Mark Brown
2026-09-22 8:35 ` Hsieh Hung-En
2 siblings, 0 replies; 28+ messages in thread
From: Vladimir Zapolskiy @ 2026-09-03 7:43 UTC (permalink / raw)
To: Kuninori Morimoto, Fabio Estevam, Jaroslav Kysela, J.M.B. Downing,
Liam Girdwood, Mark Brown, Nicolin Chen, Piotr Wojtaszczyk,
Shengjiu Wang, Takashi Iwai, Xiubo Li
Cc: linux-sound
On 9/3/26 04:13, Kuninori Morimoto wrote:
> We can use .auto_selectable_formats. Let's adds it.
>
> Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
> ---
> sound/soc/fsl/fsl_audmix.c | 7 +++++++
> sound/soc/fsl/fsl_esai.c | 13 +++++++++++++
> sound/soc/fsl/fsl_mqs.c | 6 ++++++
> sound/soc/fsl/fsl_sai.c | 17 +++++++++++++++++
> sound/soc/fsl/fsl_ssi.c | 13 +++++++++++++
> sound/soc/fsl/lpc3xxx-i2s.c | 4 ++++
Acked-by: Vladimir Zapolskiy <vz@mleia.com> # LPC32xx I2S
> sound/soc/fsl/mpc5200_psc_i2s.c | 4 ++++
> 7 files changed, 64 insertions(+)
>
> diff --git a/sound/soc/fsl/fsl_audmix.c b/sound/soc/fsl/fsl_audmix.c
> index d4140e170edf8..b66a5669a3cbf 100644
> --- a/sound/soc/fsl/fsl_audmix.c
> +++ b/sound/soc/fsl/fsl_audmix.c
> @@ -311,9 +311,16 @@ static int fsl_audmix_dai_trigger(struct snd_pcm_substream *substream, int cmd,
> return 0;
> }
>
> +static const u64 fsl_audmix_selectable_formats =
> + SND_SOC_POSSIBLE_DAIFMT_DSP_A |
> + SND_SOC_POSSIBLE_DAIFMT_NB_NF |
> + SND_SOC_POSSIBLE_DAIFMT_IB_NF;
> +
> static const struct snd_soc_dai_ops fsl_audmix_dai_ops = {
> .set_fmt = fsl_audmix_dai_set_fmt,
> .trigger = fsl_audmix_dai_trigger,
> + .auto_selectable_formats = &fsl_audmix_selectable_formats,
> + .num_auto_selectable_formats = 1,
> };
>
> static struct snd_soc_dai_driver fsl_audmix_dai[] = {
> diff --git a/sound/soc/fsl/fsl_esai.c b/sound/soc/fsl/fsl_esai.c
> index 4a530a6c33f07..e49386f8d7d33 100644
> --- a/sound/soc/fsl/fsl_esai.c
> +++ b/sound/soc/fsl/fsl_esai.c
> @@ -789,6 +789,17 @@ static int fsl_esai_dai_probe(struct snd_soc_dai *dai)
> return 0;
> }
>
> +static const u64 fsl_esai_selectable_formats =
> + SND_SOC_POSSIBLE_DAIFMT_I2S |
> + SND_SOC_POSSIBLE_DAIFMT_RIGHT_J |
> + SND_SOC_POSSIBLE_DAIFMT_LEFT_J |
> + SND_SOC_POSSIBLE_DAIFMT_DSP_A |
> + SND_SOC_POSSIBLE_DAIFMT_DSP_B |
> + SND_SOC_POSSIBLE_DAIFMT_NB_NF |
> + SND_SOC_POSSIBLE_DAIFMT_NB_IF |
> + SND_SOC_POSSIBLE_DAIFMT_IB_NF |
> + SND_SOC_POSSIBLE_DAIFMT_IB_IF;
> +
> static const struct snd_soc_dai_ops fsl_esai_dai_ops = {
> .probe = fsl_esai_dai_probe,
> .startup = fsl_esai_startup,
> @@ -797,6 +808,8 @@ static const struct snd_soc_dai_ops fsl_esai_dai_ops = {
> .set_sysclk = fsl_esai_set_dai_sysclk,
> .set_fmt = fsl_esai_set_dai_fmt,
> .set_tdm_slot = fsl_esai_set_dai_tdm_slot,
> + .auto_selectable_formats = &fsl_esai_selectable_formats,
> + .num_auto_selectable_formats = 1,
> };
>
> static struct snd_soc_dai_driver fsl_esai_dai = {
> diff --git a/sound/soc/fsl/fsl_mqs.c b/sound/soc/fsl/fsl_mqs.c
> index 901f840df9047..39129f970c3f5 100644
> --- a/sound/soc/fsl/fsl_mqs.c
> +++ b/sound/soc/fsl/fsl_mqs.c
> @@ -187,11 +187,17 @@ static const struct snd_soc_component_driver soc_codec_fsl_mqs = {
> .idle_bias_on = 1,
> };
>
> +static const u64 fsl_selectable_formats =
> + SND_SOC_POSSIBLE_DAIFMT_LEFT_J |
> + SND_SOC_POSSIBLE_DAIFMT_NB_NF;
> +
> static const struct snd_soc_dai_ops fsl_mqs_dai_ops = {
> .startup = fsl_mqs_startup,
> .shutdown = fsl_mqs_shutdown,
> .hw_params = fsl_mqs_hw_params,
> .set_fmt = fsl_mqs_set_dai_fmt,
> + .auto_selectable_formats = &fsl_selectable_formats,
> + .num_auto_selectable_formats = 1,
> };
>
> static struct snd_soc_dai_driver fsl_mqs_dai = {
> diff --git a/sound/soc/fsl/fsl_sai.c b/sound/soc/fsl/fsl_sai.c
> index d232c8f530615..4dce1a43b2b43 100644
> --- a/sound/soc/fsl/fsl_sai.c
> +++ b/sound/soc/fsl/fsl_sai.c
> @@ -1026,6 +1026,17 @@ static int fsl_sai_dai_probe(struct snd_soc_dai *cpu_dai)
> return 0;
> }
>
> +static const u64 fsl_sai_selectable_formats =
> + SND_SOC_POSSIBLE_DAIFMT_I2S |
> + SND_SOC_POSSIBLE_DAIFMT_LEFT_J |
> + SND_SOC_POSSIBLE_DAIFMT_DSP_A |
> + SND_SOC_POSSIBLE_DAIFMT_DSP_B |
> + SND_SOC_POSSIBLE_DAIFMT_PDM |
> + SND_SOC_POSSIBLE_DAIFMT_NB_NF |
> + SND_SOC_POSSIBLE_DAIFMT_NB_IF |
> + SND_SOC_POSSIBLE_DAIFMT_IB_NF |
> + SND_SOC_POSSIBLE_DAIFMT_IB_IF;
> +
> static const struct snd_soc_dai_ops fsl_sai_pcm_dai_ops = {
> .probe = fsl_sai_dai_probe,
> .set_bclk_ratio = fsl_sai_set_dai_bclk_ratio,
> @@ -1036,6 +1047,8 @@ static const struct snd_soc_dai_ops fsl_sai_pcm_dai_ops = {
> .hw_free = fsl_sai_hw_free,
> .trigger = fsl_sai_trigger,
> .startup = fsl_sai_startup,
> + .auto_selectable_formats = &fsl_sai_selectable_formats,
> + .num_auto_selectable_formats = 1,
> };
>
> static const struct snd_soc_dai_ops fsl_sai_pcm_dai_tx_ops = {
> @@ -1049,6 +1062,8 @@ static const struct snd_soc_dai_ops fsl_sai_pcm_dai_tx_ops = {
> .hw_free = fsl_sai_hw_free,
> .trigger = fsl_sai_trigger,
> .startup = fsl_sai_startup,
> + .auto_selectable_formats = &fsl_sai_selectable_formats,
> + .num_auto_selectable_formats = 1,
> };
>
> static const struct snd_soc_dai_ops fsl_sai_pcm_dai_rx_ops = {
> @@ -1062,6 +1077,8 @@ static const struct snd_soc_dai_ops fsl_sai_pcm_dai_rx_ops = {
> .hw_free = fsl_sai_hw_free,
> .trigger = fsl_sai_trigger,
> .startup = fsl_sai_startup,
> + .auto_selectable_formats = &fsl_sai_selectable_formats,
> + .num_auto_selectable_formats = 1,
> };
>
> static int fsl_sai_dai_resume(struct snd_soc_component *component)
> diff --git a/sound/soc/fsl/fsl_ssi.c b/sound/soc/fsl/fsl_ssi.c
> index dc022976c9823..02ce112faf2db 100644
> --- a/sound/soc/fsl/fsl_ssi.c
> +++ b/sound/soc/fsl/fsl_ssi.c
> @@ -1151,6 +1151,17 @@ static int fsl_ssi_dai_probe(struct snd_soc_dai *dai)
> return 0;
> }
>
> +static const u64 fsl_ssi_selectable_formats =
> + SND_SOC_POSSIBLE_DAIFMT_I2S |
> + SND_SOC_POSSIBLE_DAIFMT_LEFT_J |
> + SND_SOC_POSSIBLE_DAIFMT_DSP_A |
> + SND_SOC_POSSIBLE_DAIFMT_DSP_B |
> + SND_SOC_POSSIBLE_DAIFMT_AC97 |
> + SND_SOC_POSSIBLE_DAIFMT_NB_NF |
> + SND_SOC_POSSIBLE_DAIFMT_NB_IF |
> + SND_SOC_POSSIBLE_DAIFMT_IB_NF |
> + SND_SOC_POSSIBLE_DAIFMT_IB_IF;
> +
> static const struct snd_soc_dai_ops fsl_ssi_dai_ops = {
> .probe = fsl_ssi_dai_probe,
> .startup = fsl_ssi_startup,
> @@ -1160,6 +1171,8 @@ static const struct snd_soc_dai_ops fsl_ssi_dai_ops = {
> .set_fmt = fsl_ssi_set_dai_fmt,
> .set_tdm_slot = fsl_ssi_set_dai_tdm_slot,
> .trigger = fsl_ssi_trigger,
> + .auto_selectable_formats = &fsl_ssi_selectable_formats,
> + .num_auto_selectable_formats = 1,
> };
>
> static struct snd_soc_dai_driver fsl_ssi_dai_template = {
> diff --git a/sound/soc/fsl/lpc3xxx-i2s.c b/sound/soc/fsl/lpc3xxx-i2s.c
> index c65c17dfa1747..ea521647129ba 100644
> --- a/sound/soc/fsl/lpc3xxx-i2s.c
> +++ b/sound/soc/fsl/lpc3xxx-i2s.c
> @@ -257,6 +257,8 @@ static int lpc3xxx_i2s_dai_probe(struct snd_soc_dai *dai)
> return 0;
> }
>
> +static const u64 lpc3xxx_i2s_selectable_formats = SND_SOC_POSSIBLE_DAIFMT_I2S;
> +
> static const struct snd_soc_dai_ops lpc3xxx_i2s_dai_ops = {
> .probe = lpc3xxx_i2s_dai_probe,
> .startup = lpc3xxx_i2s_startup,
> @@ -265,6 +267,8 @@ static const struct snd_soc_dai_ops lpc3xxx_i2s_dai_ops = {
> .hw_params = lpc3xxx_i2s_hw_params,
> .set_sysclk = lpc3xxx_i2s_set_dai_sysclk,
> .set_fmt = lpc3xxx_i2s_set_dai_fmt,
> + .auto_selectable_formats = &lpc3xxx_i2s_selectable_formats,
> + .num_auto_selectable_formats = 1,
> };
>
> static struct snd_soc_dai_driver lpc3xxx_i2s_dai_driver = {
> diff --git a/sound/soc/fsl/mpc5200_psc_i2s.c b/sound/soc/fsl/mpc5200_psc_i2s.c
> index c024a38e3b9c7..72db83994e8e1 100644
> --- a/sound/soc/fsl/mpc5200_psc_i2s.c
> +++ b/sound/soc/fsl/mpc5200_psc_i2s.c
> @@ -124,6 +124,8 @@ static int psc_i2s_set_fmt(struct snd_soc_dai *cpu_dai, unsigned int format)
> * - create/destroy dai hooks
> */
>
> +static const u64 psc_i2s_selectable_formats = SND_SOC_POSSIBLE_DAIFMT_I2S;
> +
> /**
> * var psc_i2s_dai_ops - template CPU Digital Audio Interface
> */
> @@ -131,6 +133,8 @@ static const struct snd_soc_dai_ops psc_i2s_dai_ops = {
> .hw_params = psc_i2s_hw_params,
> .set_sysclk = psc_i2s_set_sysclk,
> .set_fmt = psc_i2s_set_fmt,
> + .auto_selectable_formats = &psc_i2s_selectable_formats,
> + .num_auto_selectable_formats = 1,
> };
>
> static struct snd_soc_dai_driver psc_i2s_dai[] = {{
--
Best wishes,
Vladimir
^ permalink raw reply [flat|nested] 28+ messages in thread* Re: [PATCH 02/21] ASoC: fsl: use .auto_selectable_formats
2026-09-03 1:13 ` [PATCH 02/21] ASoC: fsl: " Kuninori Morimoto
2026-09-03 7:43 ` Vladimir Zapolskiy
@ 2026-09-11 20:10 ` Mark Brown
2026-09-13 23:55 ` Kuninori Morimoto
2026-09-22 8:35 ` Hsieh Hung-En
2 siblings, 1 reply; 28+ messages in thread
From: Mark Brown @ 2026-09-11 20:10 UTC (permalink / raw)
To: Kuninori Morimoto
Cc: Fabio Estevam, Jaroslav Kysela, J.M.B. Downing, Liam Girdwood,
Nicolin Chen, Piotr Wojtaszczyk, Shengjiu Wang, Takashi Iwai,
Vladimir Zapolskiy, Xiubo Li, linux-sound
[-- Attachment #1: Type: text/plain, Size: 957 bytes --]
On Thu, Sep 03, 2026 at 01:13:36AM +0000, Kuninori Morimoto wrote:
> We can use .auto_selectable_formats. Let's adds it.
> +static const u64 fsl_audmix_selectable_formats =
> + SND_SOC_POSSIBLE_DAIFMT_DSP_A |
> + SND_SOC_POSSIBLE_DAIFMT_NB_NF |
> + SND_SOC_POSSIBLE_DAIFMT_IB_NF;
> +
> static const struct snd_soc_dai_ops fsl_audmix_dai_ops = {
> .set_fmt = fsl_audmix_dai_set_fmt,
> .trigger = fsl_audmix_dai_trigger,
> + .auto_selectable_formats = &fsl_audmix_selectable_formats,
> + .num_auto_selectable_formats = 1,
> };
>
> static struct snd_soc_dai_driver fsl_audmix_dai[] = {
Are you sure this is safe with DPCM systems that default things to being
linked to the dummy DAI? If we run autoselection during startup and
looks at the dummy then that might not reflect the actual link we end up
with. I think there's similar stuff going on with some of the Mediaktek
and Samsung machines, I'll skip those patches.
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 484 bytes --]
^ permalink raw reply [flat|nested] 28+ messages in thread* Re: [PATCH 02/21] ASoC: fsl: use .auto_selectable_formats
2026-09-11 20:10 ` Mark Brown
@ 2026-09-13 23:55 ` Kuninori Morimoto
0 siblings, 0 replies; 28+ messages in thread
From: Kuninori Morimoto @ 2026-09-13 23:55 UTC (permalink / raw)
To: Mark Brown
Cc: Fabio Estevam, Jaroslav Kysela, J.M.B. Downing, Liam Girdwood,
Nicolin Chen, Piotr Wojtaszczyk, Shengjiu Wang, Takashi Iwai,
Vladimir Zapolskiy, Xiubo Li, linux-sound
Hi Mark
> Are you sure this is safe with DPCM systems that default things to being
> linked to the dummy DAI? If we run autoselection during startup and
> looks at the dummy then that might not reflect the actual link we end up
> with. I think there's similar stuff going on with some of the Mediaktek
> and Samsung machines, I'll skip those patches.
Ah, I think each FE/BE will match as own format, and FE side format will be
used in total ? But I'm indeed not 100% sure about that.
Thank you for skipping. Let's ignore un-safe driver. It is not 100% mandatory
feature.
Best regards
---
Kuninori Morimoto
^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [PATCH 02/21] ASoC: fsl: use .auto_selectable_formats
2026-09-03 1:13 ` [PATCH 02/21] ASoC: fsl: " Kuninori Morimoto
2026-09-03 7:43 ` Vladimir Zapolskiy
2026-09-11 20:10 ` Mark Brown
@ 2026-09-22 8:35 ` Hsieh Hung-En
2 siblings, 0 replies; 28+ messages in thread
From: Hsieh Hung-En @ 2026-09-22 8:35 UTC (permalink / raw)
To: Kuninori Morimoto
Cc: Hsieh Hung-En, Mark Brown, Shengjiu Wang, Fabio Estevam,
Nicolin Chen, Xiubo Li, Liam Girdwood, Jaroslav Kysela,
Takashi Iwai, linux-sound
Hi,
I tested this on an i.MX95 board with an SAI3 <-> TLV320AIC3101 link,
on top of broonie/sound.git for-7.4 (f42fbd560cd8), which already has
cb125dde4b5d ("ASoC: codecs: tlv320*: use .auto_selectable_formats"),
so both ends of the link advertise their formats.
Two device trees, differing in one property:
- control: simple-audio-card,format = "i2s";
- auto-selected: that property deleted, so the FORMAT bits are left
for soc_dai_auto_select_format() to fill in.
bitclock-master and frame-master are present in both, so the
clock-provider relationship stays fixed while format/polarity selection
is exercised.
The card registers and plays in both cases, and the hardware ends up
configured identically (read during a stream):
control auto-selected
SAI TCR4 0x10010F3B 0x10010F3B FSE|FSP -> I2S, FSD_MSTR,
SAI RCR4 0x10010F3B 0x10010F3B SYWD=0x0f, FRSZ=1
SAI TCR2 0x43000000 0x43000000
SAI RCR2 0x07000003 0x07000003
AIC3101 r8 0x00 0x00 codec is clock consumer
AIC3101 r9 0x00 0x00 bits 7:6 = 00 -> I2S
So auto-selection lands on I2S + NB_NF, matching the effective DAI
format of the control case.
That the card came up at all is informative here, because a wrong pick
is not silent on this codec: aic3x_set_dai_fmt() validates format and
inversion together, and the codec's low-priority entry is
DSP_A|DSP_B|IB_NF while fsl_sai advertises DSP_A, DSP_B and all four
inversion combinations. I checked this with a third device tree using
simple-audio-card,format = "dsp_a";
which gives DSP_A + NB_NF, a combination the codec refuses:
tlv320aic3x 3-0018: ASoC error (-22): at snd_soc_dai_set_fmt() on tlv320aic3x-hifi
asoc-simple-card sound-aic3101: error -EINVAL: parse error
asoc-simple-card sound-aic3101: probe with driver asoc-simple-card failed with error -22
No soundcards found.
In other words, an unsupported format/inversion combination fails the
machine driver's probe outright; there is no fallback to another
format.
I also ran an analogue loopback, headphone output cabled back into
LINE1, so the capture path and fsl_sai_pcm_dai_rx_ops are exercised as
well. alsabat plays 1 kHz and FFTs the capture: three runs per device
tree, all six reporting "PASS: Peak detected at target frequency" at
999.76 Hz. alsabat's overall return is non-zero (-1003, "more than one
signal") in every run because the analogue loop also shows a few
spurious peaks, but those are not consistent between runs of the same
device tree, so this is a functional round-trip check and not an
analogue quality measurement.
What this does not cover is the case you asked about, Mark: this board
has no DPCM link, so the dummy DAI is never the far end of the
negotiation here.
Tested-by: Hsieh Hung-En <hungen3108@gmail.com>
^ permalink raw reply [flat|nested] 28+ messages in thread
* [PATCH 03/21] ASoC: hisilicon: use .auto_selectable_formats
2026-09-03 1:13 [PATCH 00/21] ASoC: use .auto_selectable_formats Kuninori Morimoto
2026-09-03 1:13 ` [PATCH 01/21] ASoC: dwc: " Kuninori Morimoto
2026-09-03 1:13 ` [PATCH 02/21] ASoC: fsl: " Kuninori Morimoto
@ 2026-09-03 1:13 ` Kuninori Morimoto
2026-09-03 1:13 ` [PATCH 04/21] ASoC: img: " Kuninori Morimoto
` (18 subsequent siblings)
21 siblings, 0 replies; 28+ messages in thread
From: Kuninori Morimoto @ 2026-09-03 1:13 UTC (permalink / raw)
To: bui duc phuc, Jaroslav Kysela, Liam Girdwood, Mark Brown,
Takashi Iwai
Cc: bui duc phuc, linux-sound
We can use .auto_selectable_formats. Let's adds it.
Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
---
sound/soc/hisilicon/hi6210-i2s.c | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/sound/soc/hisilicon/hi6210-i2s.c b/sound/soc/hisilicon/hi6210-i2s.c
index 33b1dafb2540a..554356f060b07 100644
--- a/sound/soc/hisilicon/hi6210-i2s.c
+++ b/sound/soc/hisilicon/hi6210-i2s.c
@@ -507,6 +507,11 @@ static int hi6210_i2s_dai_probe(struct snd_soc_dai *dai)
}
+static const u64 hi6210_i2s_selectable_formats =
+ SND_SOC_POSSIBLE_DAIFMT_I2S |
+ SND_SOC_POSSIBLE_DAIFMT_RIGHT_J |
+ SND_SOC_POSSIBLE_DAIFMT_LEFT_J;
+
static const struct snd_soc_dai_ops hi6210_i2s_dai_ops = {
.probe = hi6210_i2s_dai_probe,
.trigger = hi6210_i2s_trigger,
@@ -514,6 +519,8 @@ static const struct snd_soc_dai_ops hi6210_i2s_dai_ops = {
.set_fmt = hi6210_i2s_set_fmt,
.startup = hi6210_i2s_startup,
.shutdown = hi6210_i2s_shutdown,
+ .auto_selectable_formats = &hi6210_i2s_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static const struct snd_soc_dai_driver hi6210_i2s_dai_init = {
--
2.53.0
^ permalink raw reply related [flat|nested] 28+ messages in thread* [PATCH 04/21] ASoC: img: use .auto_selectable_formats
2026-09-03 1:13 [PATCH 00/21] ASoC: use .auto_selectable_formats Kuninori Morimoto
` (2 preceding siblings ...)
2026-09-03 1:13 ` [PATCH 03/21] ASoC: hisilicon: " Kuninori Morimoto
@ 2026-09-03 1:13 ` Kuninori Morimoto
2026-09-03 1:13 ` [PATCH 05/21] ASoC: jz4740: " Kuninori Morimoto
` (17 subsequent siblings)
21 siblings, 0 replies; 28+ messages in thread
From: Kuninori Morimoto @ 2026-09-03 1:13 UTC (permalink / raw)
To: Jaroslav Kysela, Liam Girdwood, Mark Brown, Takashi Iwai; +Cc: linux-sound
We can use .auto_selectable_formats. Let's adds it.
Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
---
sound/soc/img/img-i2s-in.c | 12 +++++++++++-
sound/soc/img/img-i2s-out.c | 13 ++++++++++++-
sound/soc/img/img-parallel-out.c | 8 +++++++-
3 files changed, 30 insertions(+), 3 deletions(-)
diff --git a/sound/soc/img/img-i2s-in.c b/sound/soc/img/img-i2s-in.c
index 98d2ab68883a4..a0c87e2a9b30b 100644
--- a/sound/soc/img/img-i2s-in.c
+++ b/sound/soc/img/img-i2s-in.c
@@ -379,11 +379,21 @@ static int img_i2s_in_dai_probe(struct snd_soc_dai *dai)
return 0;
}
+static const u64 img_i2s_in_selectable_formats =
+ SND_SOC_POSSIBLE_DAIFMT_I2S |
+ SND_SOC_POSSIBLE_DAIFMT_LEFT_J |
+ SND_SOC_POSSIBLE_DAIFMT_NB_NF |
+ SND_SOC_POSSIBLE_DAIFMT_NB_IF |
+ SND_SOC_POSSIBLE_DAIFMT_IB_NF |
+ SND_SOC_POSSIBLE_DAIFMT_IB_IF;
+
static const struct snd_soc_dai_ops img_i2s_in_dai_ops = {
.probe = img_i2s_in_dai_probe,
.trigger = img_i2s_in_trigger,
.hw_params = img_i2s_in_hw_params,
- .set_fmt = img_i2s_in_set_fmt
+ .set_fmt = img_i2s_in_set_fmt,
+ .auto_selectable_formats = &img_i2s_in_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static const struct snd_soc_component_driver img_i2s_in_component = {
diff --git a/sound/soc/img/img-i2s-out.c b/sound/soc/img/img-i2s-out.c
index aedcf56a5359c..caa7870dbec6b 100644
--- a/sound/soc/img/img-i2s-out.c
+++ b/sound/soc/img/img-i2s-out.c
@@ -385,11 +385,22 @@ static int img_i2s_out_dai_probe(struct snd_soc_dai *dai)
return 0;
}
+static const u64 img_i2s_out_selectable_formats =
+ SND_SOC_POSSIBLE_DAIFMT_I2S |
+ SND_SOC_POSSIBLE_DAIFMT_LEFT_J |
+ SND_SOC_POSSIBLE_DAIFMT_CONT |
+ SND_SOC_POSSIBLE_DAIFMT_NB_NF |
+ SND_SOC_POSSIBLE_DAIFMT_NB_IF |
+ SND_SOC_POSSIBLE_DAIFMT_IB_NF |
+ SND_SOC_POSSIBLE_DAIFMT_IB_IF;
+
static const struct snd_soc_dai_ops img_i2s_out_dai_ops = {
.probe = img_i2s_out_dai_probe,
.trigger = img_i2s_out_trigger,
.hw_params = img_i2s_out_hw_params,
- .set_fmt = img_i2s_out_set_fmt
+ .set_fmt = img_i2s_out_set_fmt,
+ .auto_selectable_formats = &img_i2s_out_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static const struct snd_soc_component_driver img_i2s_out_component = {
diff --git a/sound/soc/img/img-parallel-out.c b/sound/soc/img/img-parallel-out.c
index 86b60e6dab38f..89270913ab352 100644
--- a/sound/soc/img/img-parallel-out.c
+++ b/sound/soc/img/img-parallel-out.c
@@ -183,11 +183,17 @@ static int img_prl_out_dai_probe(struct snd_soc_dai *dai)
return 0;
}
+static const u64 img_prl_selectable_formats =
+ SND_SOC_POSSIBLE_DAIFMT_NB_NF |
+ SND_SOC_POSSIBLE_DAIFMT_NB_IF;
+
static const struct snd_soc_dai_ops img_prl_out_dai_ops = {
.probe = img_prl_out_dai_probe,
.trigger = img_prl_out_trigger,
.hw_params = img_prl_out_hw_params,
- .set_fmt = img_prl_out_set_fmt
+ .set_fmt = img_prl_out_set_fmt,
+ .auto_selectable_formats = &img_prl_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver img_prl_out_dai = {
--
2.53.0
^ permalink raw reply related [flat|nested] 28+ messages in thread* [PATCH 05/21] ASoC: jz4740: use .auto_selectable_formats
2026-09-03 1:13 [PATCH 00/21] ASoC: use .auto_selectable_formats Kuninori Morimoto
` (3 preceding siblings ...)
2026-09-03 1:13 ` [PATCH 04/21] ASoC: img: " Kuninori Morimoto
@ 2026-09-03 1:13 ` Kuninori Morimoto
2026-09-03 1:13 ` [PATCH 06/21] ASoC: kirkwood: " Kuninori Morimoto
` (16 subsequent siblings)
21 siblings, 0 replies; 28+ messages in thread
From: Kuninori Morimoto @ 2026-09-03 1:13 UTC (permalink / raw)
To: Jaroslav Kysela, Liam Girdwood, Mark Brown, Paul Cercueil,
Takashi Iwai
Cc: linux-mips, linux-sound
We can use .auto_selectable_formats. Let's adds it.
Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
---
sound/soc/jz4740/jz4740-i2s.c | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/sound/soc/jz4740/jz4740-i2s.c b/sound/soc/jz4740/jz4740-i2s.c
index d36bbc820618b..7a1589cb775a9 100644
--- a/sound/soc/jz4740/jz4740-i2s.c
+++ b/sound/soc/jz4740/jz4740-i2s.c
@@ -326,6 +326,11 @@ static int jz4740_i2s_dai_probe(struct snd_soc_dai *dai)
return 0;
}
+static const u64 jz4740_i2s_selectable_formats =
+ SND_SOC_POSSIBLE_DAIFMT_I2S |
+ SND_SOC_POSSIBLE_DAIFMT_LEFT_J |
+ SND_SOC_POSSIBLE_DAIFMT_NB_NF;
+
static const struct snd_soc_dai_ops jz4740_i2s_dai_ops = {
.probe = jz4740_i2s_dai_probe,
.startup = jz4740_i2s_startup,
@@ -333,6 +338,8 @@ static const struct snd_soc_dai_ops jz4740_i2s_dai_ops = {
.trigger = jz4740_i2s_trigger,
.hw_params = jz4740_i2s_hw_params,
.set_fmt = jz4740_i2s_set_fmt,
+ .auto_selectable_formats = &jz4740_i2s_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
#define JZ4740_I2S_FMTS (SNDRV_PCM_FMTBIT_S8 | \
--
2.53.0
^ permalink raw reply related [flat|nested] 28+ messages in thread* [PATCH 06/21] ASoC: kirkwood: use .auto_selectable_formats
2026-09-03 1:13 [PATCH 00/21] ASoC: use .auto_selectable_formats Kuninori Morimoto
` (4 preceding siblings ...)
2026-09-03 1:13 ` [PATCH 05/21] ASoC: jz4740: " Kuninori Morimoto
@ 2026-09-03 1:13 ` Kuninori Morimoto
2026-09-03 1:13 ` [PATCH 07/21] ASoC: loongson: " Kuninori Morimoto
` (15 subsequent siblings)
21 siblings, 0 replies; 28+ messages in thread
From: Kuninori Morimoto @ 2026-09-03 1:13 UTC (permalink / raw)
To: Jaroslav Kysela, Liam Girdwood, Mark Brown, Takashi Iwai; +Cc: linux-sound
We can use .auto_selectable_formats. Let's adds it.
Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
---
sound/soc/kirkwood/kirkwood-i2s.c | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/sound/soc/kirkwood/kirkwood-i2s.c b/sound/soc/kirkwood/kirkwood-i2s.c
index 99bd066c7309d..739a819d84945 100644
--- a/sound/soc/kirkwood/kirkwood-i2s.c
+++ b/sound/soc/kirkwood/kirkwood-i2s.c
@@ -544,11 +544,18 @@ static int kirkwood_i2s_init(struct kirkwood_dma_data *priv)
}
+static const u64 kirkwood_i2s_selectable_formats =
+ SND_SOC_POSSIBLE_DAIFMT_I2S |
+ SND_SOC_POSSIBLE_DAIFMT_RIGHT_J |
+ SND_SOC_POSSIBLE_DAIFMT_LEFT_J;
+
static const struct snd_soc_dai_ops kirkwood_i2s_dai_ops = {
.startup = kirkwood_i2s_startup,
.trigger = kirkwood_i2s_trigger,
.hw_params = kirkwood_i2s_hw_params,
.set_fmt = kirkwood_i2s_set_fmt,
+ .auto_selectable_formats = &kirkwood_i2s_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver kirkwood_i2s_dai[2] = {
--
2.53.0
^ permalink raw reply related [flat|nested] 28+ messages in thread* [PATCH 07/21] ASoC: loongson: use .auto_selectable_formats
2026-09-03 1:13 [PATCH 00/21] ASoC: use .auto_selectable_formats Kuninori Morimoto
` (5 preceding siblings ...)
2026-09-03 1:13 ` [PATCH 06/21] ASoC: kirkwood: " Kuninori Morimoto
@ 2026-09-03 1:13 ` Kuninori Morimoto
2026-09-03 1:13 ` [PATCH 08/21] ASoC: mediatek: " Kuninori Morimoto
` (14 subsequent siblings)
21 siblings, 0 replies; 28+ messages in thread
From: Kuninori Morimoto @ 2026-09-03 1:13 UTC (permalink / raw)
To: Binbin Zhou, Jaroslav Kysela, Liam Girdwood, Mark Brown,
Takashi Iwai
Cc: linux-sound
We can use .auto_selectable_formats. Let's adds it.
Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
---
sound/soc/loongson/loongson_i2s.c | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/sound/soc/loongson/loongson_i2s.c b/sound/soc/loongson/loongson_i2s.c
index cfe102a8b6046..da0d029c028ad 100644
--- a/sound/soc/loongson/loongson_i2s.c
+++ b/sound/soc/loongson/loongson_i2s.c
@@ -220,12 +220,18 @@ static int loongson_i2s_dai_probe(struct snd_soc_dai *cpu_dai)
return 0;
}
+static const u64 loongson_i2s_selectable_formats =
+ SND_SOC_POSSIBLE_DAIFMT_I2S |
+ SND_SOC_POSSIBLE_DAIFMT_RIGHT_J;
+
static const struct snd_soc_dai_ops loongson_i2s_dai_ops = {
.probe = loongson_i2s_dai_probe,
.trigger = loongson_i2s_trigger,
.hw_params = loongson_i2s_hw_params,
.set_sysclk = loongson_i2s_set_dai_sysclk,
.set_fmt = loongson_i2s_set_fmt,
+ .auto_selectable_formats = &loongson_i2s_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
struct snd_soc_dai_driver loongson_i2s_dai = {
--
2.53.0
^ permalink raw reply related [flat|nested] 28+ messages in thread* [PATCH 08/21] ASoC: mediatek: use .auto_selectable_formats
2026-09-03 1:13 [PATCH 00/21] ASoC: use .auto_selectable_formats Kuninori Morimoto
` (6 preceding siblings ...)
2026-09-03 1:13 ` [PATCH 07/21] ASoC: loongson: " Kuninori Morimoto
@ 2026-09-03 1:13 ` Kuninori Morimoto
2026-09-03 1:14 ` [PATCH 09/21] ASoC: mxs: " Kuninori Morimoto
` (13 subsequent siblings)
21 siblings, 0 replies; 28+ messages in thread
From: Kuninori Morimoto @ 2026-09-03 1:13 UTC (permalink / raw)
To: AngeloGioacchino Del Regno, bui duc phuc, HariKrishna Sagala,
Jaroslav Kysela, Liam Girdwood, Mark Brown, Matthias Brugger,
Takashi Iwai
Cc: bui duc phuc, linux-arm-kernel, linux-sound
We can use .auto_selectable_formats. Let's adds it.
Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
---
sound/soc/mediatek/mt7986/mt7986-dai-etdm.c | 11 +++++++++++
sound/soc/mediatek/mt8183/mt8183-dai-i2s.c | 6 ++++++
sound/soc/mediatek/mt8183/mt8183-dai-tdm.c | 10 ++++++++++
sound/soc/mediatek/mt8186/mt8186-dai-pcm.c | 12 ++++++++++++
sound/soc/mediatek/mt8186/mt8186-dai-tdm.c | 13 +++++++++++++
sound/soc/mediatek/mt8188/mt8188-dai-etdm.c | 15 +++++++++++++++
sound/soc/mediatek/mt8188/mt8188-dai-pcm.c | 11 +++++++++++
sound/soc/mediatek/mt8192/mt8192-dai-tdm.c | 11 +++++++++++
sound/soc/mediatek/mt8195/mt8195-dai-etdm.c | 17 +++++++++++++++++
sound/soc/mediatek/mt8195/mt8195-dai-pcm.c | 11 +++++++++++
sound/soc/mediatek/mt8365/mt8365-dai-i2s.c | 10 ++++++++++
sound/soc/mediatek/mt8365/mt8365-dai-pcm.c | 11 +++++++++++
12 files changed, 138 insertions(+)
diff --git a/sound/soc/mediatek/mt7986/mt7986-dai-etdm.c b/sound/soc/mediatek/mt7986/mt7986-dai-etdm.c
index fc55ff47b7bc6..a88a0efc1309b 100644
--- a/sound/soc/mediatek/mt7986/mt7986-dai-etdm.c
+++ b/sound/soc/mediatek/mt7986/mt7986-dai-etdm.c
@@ -361,12 +361,23 @@ static int mtk_dai_etdm_set_fmt(struct snd_soc_dai *dai, unsigned int fmt)
return 0;
}
+static const u64 mtk_dai_selectable_formats =
+ SND_SOC_POSSIBLE_DAIFMT_I2S |
+ SND_SOC_POSSIBLE_DAIFMT_DSP_A |
+ SND_SOC_POSSIBLE_DAIFMT_DSP_B |
+ SND_SOC_POSSIBLE_DAIFMT_NB_NF |
+ SND_SOC_POSSIBLE_DAIFMT_NB_IF |
+ SND_SOC_POSSIBLE_DAIFMT_IB_NF |
+ SND_SOC_POSSIBLE_DAIFMT_IB_IF;
+
static const struct snd_soc_dai_ops mtk_dai_etdm_ops = {
.startup = mtk_dai_etdm_startup,
.shutdown = mtk_dai_etdm_shutdown,
.hw_params = mtk_dai_etdm_hw_params,
.trigger = mtk_dai_etdm_trigger,
.set_fmt = mtk_dai_etdm_set_fmt,
+ .auto_selectable_formats = &mtk_dai_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
/* dai driver */
diff --git a/sound/soc/mediatek/mt8183/mt8183-dai-i2s.c b/sound/soc/mediatek/mt8183/mt8183-dai-i2s.c
index 3709100a88659..4d9bc8f9a67f4 100644
--- a/sound/soc/mediatek/mt8183/mt8183-dai-i2s.c
+++ b/sound/soc/mediatek/mt8183/mt8183-dai-i2s.c
@@ -867,10 +867,16 @@ static int mtk_dai_i2s_set_fmt(struct snd_soc_dai *dai, unsigned int fmt)
return 0;
}
+static const u64 mtk_dai_i2s_selectable_formats =
+ SND_SOC_POSSIBLE_DAIFMT_I2S |
+ SND_SOC_POSSIBLE_DAIFMT_LEFT_J;
+
static const struct snd_soc_dai_ops mtk_dai_i2s_ops = {
.hw_params = mtk_dai_i2s_hw_params,
.set_sysclk = mtk_dai_i2s_set_sysclk,
.set_fmt = mtk_dai_i2s_set_fmt,
+ .auto_selectable_formats = &mtk_dai_i2s_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
/* dai driver */
diff --git a/sound/soc/mediatek/mt8183/mt8183-dai-tdm.c b/sound/soc/mediatek/mt8183/mt8183-dai-tdm.c
index 0d69cf4404073..afdcd9863bc37 100644
--- a/sound/soc/mediatek/mt8183/mt8183-dai-tdm.c
+++ b/sound/soc/mediatek/mt8183/mt8183-dai-tdm.c
@@ -681,11 +681,21 @@ static int mtk_dai_tdm_set_fmt(struct snd_soc_dai *dai, unsigned int fmt)
return 0;
}
+static const u64 mtk_dai_tdm_selectable_formats =
+ SND_SOC_POSSIBLE_DAIFMT_I2S |
+ SND_SOC_POSSIBLE_DAIFMT_DSP_A |
+ SND_SOC_POSSIBLE_DAIFMT_NB_NF |
+ SND_SOC_POSSIBLE_DAIFMT_NB_IF |
+ SND_SOC_POSSIBLE_DAIFMT_IB_NF |
+ SND_SOC_POSSIBLE_DAIFMT_IB_IF;
+
static const struct snd_soc_dai_ops mtk_dai_tdm_ops = {
.hw_params = mtk_dai_tdm_hw_params,
.trigger = mtk_dai_tdm_trigger,
.set_sysclk = mtk_dai_tdm_set_sysclk,
.set_fmt = mtk_dai_tdm_set_fmt,
+ .auto_selectable_formats = &mtk_dai_tdm_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
/* dai driver */
diff --git a/sound/soc/mediatek/mt8186/mt8186-dai-pcm.c b/sound/soc/mediatek/mt8186/mt8186-dai-pcm.c
index a50aa294960b1..e72e5a1eb87b5 100644
--- a/sound/soc/mediatek/mt8186/mt8186-dai-pcm.c
+++ b/sound/soc/mediatek/mt8186/mt8186-dai-pcm.c
@@ -333,9 +333,21 @@ static int mtk_dai_pcm_set_fmt(struct snd_soc_dai *dai, unsigned int fmt)
return 0;
}
+static const u64 mtk_dai_selectable_formats =
+ SND_SOC_POSSIBLE_DAIFMT_I2S |
+ SND_SOC_POSSIBLE_DAIFMT_LEFT_J |
+ SND_SOC_POSSIBLE_DAIFMT_DSP_A |
+ SND_SOC_POSSIBLE_DAIFMT_DSP_B |
+ SND_SOC_POSSIBLE_DAIFMT_NB_NF |
+ SND_SOC_POSSIBLE_DAIFMT_NB_IF |
+ SND_SOC_POSSIBLE_DAIFMT_IB_NF |
+ SND_SOC_POSSIBLE_DAIFMT_IB_IF;
+
static const struct snd_soc_dai_ops mtk_dai_pcm_ops = {
.hw_params = mtk_dai_pcm_hw_params,
.set_fmt = mtk_dai_pcm_set_fmt,
+ .auto_selectable_formats = &mtk_dai_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
/* dai driver */
diff --git a/sound/soc/mediatek/mt8186/mt8186-dai-tdm.c b/sound/soc/mediatek/mt8186/mt8186-dai-tdm.c
index 7a8890d7122f2..38c7e0ddf4e21 100644
--- a/sound/soc/mediatek/mt8186/mt8186-dai-tdm.c
+++ b/sound/soc/mediatek/mt8186/mt8186-dai-tdm.c
@@ -562,11 +562,24 @@ static int mtk_dai_tdm_set_tdm_slot(struct snd_soc_dai *dai,
return 0;
}
+static const u64 mtk_dai_tdm_selectable_formats =
+ SND_SOC_POSSIBLE_DAIFMT_I2S |
+ SND_SOC_POSSIBLE_DAIFMT_RIGHT_J |
+ SND_SOC_POSSIBLE_DAIFMT_LEFT_J |
+ SND_SOC_POSSIBLE_DAIFMT_DSP_A |
+ SND_SOC_POSSIBLE_DAIFMT_DSP_B |
+ SND_SOC_POSSIBLE_DAIFMT_NB_NF |
+ SND_SOC_POSSIBLE_DAIFMT_NB_IF |
+ SND_SOC_POSSIBLE_DAIFMT_IB_NF |
+ SND_SOC_POSSIBLE_DAIFMT_IB_IF;
+
static const struct snd_soc_dai_ops mtk_dai_tdm_ops = {
.hw_params = mtk_dai_tdm_hw_params,
.set_sysclk = mtk_dai_tdm_set_sysclk,
.set_fmt = mtk_dai_tdm_set_fmt,
.set_tdm_slot = mtk_dai_tdm_set_tdm_slot,
+ .auto_selectable_formats = &mtk_dai_tdm_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
/* dai driver */
diff --git a/sound/soc/mediatek/mt8188/mt8188-dai-etdm.c b/sound/soc/mediatek/mt8188/mt8188-dai-etdm.c
index 4dfaa761f9f73..338be2a8f36cd 100644
--- a/sound/soc/mediatek/mt8188/mt8188-dai-etdm.c
+++ b/sound/soc/mediatek/mt8188/mt8188-dai-etdm.c
@@ -2471,17 +2471,32 @@ static int mtk_dai_hdmitx_dptx_set_sysclk(struct snd_soc_dai *dai,
return mtk_dai_etdm_cal_mclk(afe, freq, dai->id);
}
+static const u64 mtk_dai_selectable_formats =
+ SND_SOC_POSSIBLE_DAIFMT_I2S |
+ SND_SOC_POSSIBLE_DAIFMT_RIGHT_J |
+ SND_SOC_POSSIBLE_DAIFMT_LEFT_J |
+ SND_SOC_POSSIBLE_DAIFMT_DSP_A |
+ SND_SOC_POSSIBLE_DAIFMT_DSP_B |
+ SND_SOC_POSSIBLE_DAIFMT_NB_NF |
+ SND_SOC_POSSIBLE_DAIFMT_NB_IF |
+ SND_SOC_POSSIBLE_DAIFMT_IB_NF |
+ SND_SOC_POSSIBLE_DAIFMT_IB_IF;
+
static const struct snd_soc_dai_ops mtk_dai_etdm_ops = {
.hw_params = mtk_dai_etdm_hw_params,
.set_sysclk = mtk_dai_etdm_set_sysclk,
.set_fmt = mtk_dai_etdm_set_fmt,
.set_tdm_slot = mtk_dai_etdm_set_tdm_slot,
+ .auto_selectable_formats = &mtk_dai_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static const struct snd_soc_dai_ops mtk_dai_hdmitx_dptx_ops = {
.hw_params = mtk_dai_hdmitx_dptx_hw_params,
.set_sysclk = mtk_dai_hdmitx_dptx_set_sysclk,
.set_fmt = mtk_dai_etdm_set_fmt,
+ .auto_selectable_formats = &mtk_dai_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
/* dai driver */
diff --git a/sound/soc/mediatek/mt8188/mt8188-dai-pcm.c b/sound/soc/mediatek/mt8188/mt8188-dai-pcm.c
index 8ca7cc75e21dc..d8d704d0a5790 100644
--- a/sound/soc/mediatek/mt8188/mt8188-dai-pcm.c
+++ b/sound/soc/mediatek/mt8188/mt8188-dai-pcm.c
@@ -296,9 +296,20 @@ static int mtk_dai_pcm_set_fmt(struct snd_soc_dai *dai, unsigned int fmt)
return 0;
}
+static const u64 mtk_dai_pcm_selectable_formats =
+ SND_SOC_POSSIBLE_DAIFMT_I2S |
+ SND_SOC_POSSIBLE_DAIFMT_DSP_A |
+ SND_SOC_POSSIBLE_DAIFMT_DSP_B |
+ SND_SOC_POSSIBLE_DAIFMT_NB_NF |
+ SND_SOC_POSSIBLE_DAIFMT_NB_IF |
+ SND_SOC_POSSIBLE_DAIFMT_IB_NF |
+ SND_SOC_POSSIBLE_DAIFMT_IB_IF;
+
static const struct snd_soc_dai_ops mtk_dai_pcm_ops = {
.prepare = mtk_dai_pcm_prepare,
.set_fmt = mtk_dai_pcm_set_fmt,
+ .auto_selectable_formats = &mtk_dai_pcm_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
/* dai driver */
diff --git a/sound/soc/mediatek/mt8192/mt8192-dai-tdm.c b/sound/soc/mediatek/mt8192/mt8192-dai-tdm.c
index 49440db370af0..2ff9bf5117b71 100644
--- a/sound/soc/mediatek/mt8192/mt8192-dai-tdm.c
+++ b/sound/soc/mediatek/mt8192/mt8192-dai-tdm.c
@@ -699,10 +699,21 @@ static int mtk_dai_tdm_set_fmt(struct snd_soc_dai *dai, unsigned int fmt)
return 0;
}
+static const u64 mtk_dai_tdm_selectable_formats =
+ SND_SOC_POSSIBLE_DAIFMT_I2S |
+ SND_SOC_POSSIBLE_DAIFMT_DSP_A |
+ SND_SOC_POSSIBLE_DAIFMT_DSP_B |
+ SND_SOC_POSSIBLE_DAIFMT_NB_NF |
+ SND_SOC_POSSIBLE_DAIFMT_NB_IF |
+ SND_SOC_POSSIBLE_DAIFMT_IB_NF |
+ SND_SOC_POSSIBLE_DAIFMT_IB_IF;
+
static const struct snd_soc_dai_ops mtk_dai_tdm_ops = {
.hw_params = mtk_dai_tdm_hw_params,
.set_sysclk = mtk_dai_tdm_set_sysclk,
.set_fmt = mtk_dai_tdm_set_fmt,
+ .auto_selectable_formats = &mtk_dai_tdm_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
/* dai driver */
diff --git a/sound/soc/mediatek/mt8195/mt8195-dai-etdm.c b/sound/soc/mediatek/mt8195/mt8195-dai-etdm.c
index 1a20adb2cbf53..e5773f34a67e7 100644
--- a/sound/soc/mediatek/mt8195/mt8195-dai-etdm.c
+++ b/sound/soc/mediatek/mt8195/mt8195-dai-etdm.c
@@ -2481,6 +2481,17 @@ static int mtk_dai_etdm_probe(struct snd_soc_dai *dai)
return 0;
}
+static const u64 mtk_dai_selectable_formats =
+ SND_SOC_POSSIBLE_DAIFMT_I2S |
+ SND_SOC_POSSIBLE_DAIFMT_RIGHT_J |
+ SND_SOC_POSSIBLE_DAIFMT_LEFT_J |
+ SND_SOC_POSSIBLE_DAIFMT_DSP_A |
+ SND_SOC_POSSIBLE_DAIFMT_DSP_B |
+ SND_SOC_POSSIBLE_DAIFMT_NB_NF |
+ SND_SOC_POSSIBLE_DAIFMT_NB_IF |
+ SND_SOC_POSSIBLE_DAIFMT_IB_NF |
+ SND_SOC_POSSIBLE_DAIFMT_IB_IF;
+
static const struct snd_soc_dai_ops mtk_dai_hdmitx_dptx_ops = {
.startup = mtk_dai_hdmitx_dptx_startup,
.shutdown = mtk_dai_hdmitx_dptx_shutdown,
@@ -2488,6 +2499,8 @@ static const struct snd_soc_dai_ops mtk_dai_hdmitx_dptx_ops = {
.trigger = mtk_dai_hdmitx_dptx_trigger,
.set_sysclk = mtk_dai_hdmitx_dptx_set_sysclk,
.set_fmt = mtk_dai_etdm_set_fmt,
+ .auto_selectable_formats = &mtk_dai_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static const struct snd_soc_dai_ops mtk_dai_hdmitx_dptx_ops2 = {
@@ -2498,6 +2511,8 @@ static const struct snd_soc_dai_ops mtk_dai_hdmitx_dptx_ops2 = {
.trigger = mtk_dai_hdmitx_dptx_trigger,
.set_sysclk = mtk_dai_hdmitx_dptx_set_sysclk,
.set_fmt = mtk_dai_etdm_set_fmt,
+ .auto_selectable_formats = &mtk_dai_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static const struct snd_soc_dai_ops mtk_dai_etdm_ops = {
@@ -2509,6 +2524,8 @@ static const struct snd_soc_dai_ops mtk_dai_etdm_ops = {
.set_sysclk = mtk_dai_etdm_set_sysclk,
.set_fmt = mtk_dai_etdm_set_fmt,
.set_tdm_slot = mtk_dai_etdm_set_tdm_slot,
+ .auto_selectable_formats = &mtk_dai_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver mtk_dai_etdm_driver[] = {
diff --git a/sound/soc/mediatek/mt8195/mt8195-dai-pcm.c b/sound/soc/mediatek/mt8195/mt8195-dai-pcm.c
index cdc16057d50e2..539095b619bc4 100644
--- a/sound/soc/mediatek/mt8195/mt8195-dai-pcm.c
+++ b/sound/soc/mediatek/mt8195/mt8195-dai-pcm.c
@@ -297,9 +297,20 @@ static int mtk_dai_pcm_set_fmt(struct snd_soc_dai *dai, unsigned int fmt)
return 0;
}
+static const u64 mtk_dai_selectable_formats =
+ SND_SOC_POSSIBLE_DAIFMT_I2S |
+ SND_SOC_POSSIBLE_DAIFMT_DSP_A |
+ SND_SOC_POSSIBLE_DAIFMT_DSP_B |
+ SND_SOC_POSSIBLE_DAIFMT_NB_NF |
+ SND_SOC_POSSIBLE_DAIFMT_NB_IF |
+ SND_SOC_POSSIBLE_DAIFMT_IB_NF |
+ SND_SOC_POSSIBLE_DAIFMT_IB_IF;
+
static const struct snd_soc_dai_ops mtk_dai_pcm_ops = {
.prepare = mtk_dai_pcm_prepare,
.set_fmt = mtk_dai_pcm_set_fmt,
+ .auto_selectable_formats = &mtk_dai_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
/* dai driver */
diff --git a/sound/soc/mediatek/mt8365/mt8365-dai-i2s.c b/sound/soc/mediatek/mt8365/mt8365-dai-i2s.c
index a058973662b3a..7a2e41e586fb0 100644
--- a/sound/soc/mediatek/mt8365/mt8365-dai-i2s.c
+++ b/sound/soc/mediatek/mt8365/mt8365-dai-i2s.c
@@ -721,12 +721,22 @@ static const struct snd_soc_dai_ops mt8365_afe_i2s_ops = {
.prepare = mt8365_dai_i2s_prepare,
};
+static const u64 mt8365_dai_selectable_formats =
+ SND_SOC_POSSIBLE_DAIFMT_I2S |
+ SND_SOC_POSSIBLE_DAIFMT_LEFT_J |
+ SND_SOC_POSSIBLE_DAIFMT_NB_NF |
+ SND_SOC_POSSIBLE_DAIFMT_NB_IF |
+ SND_SOC_POSSIBLE_DAIFMT_IB_NF |
+ SND_SOC_POSSIBLE_DAIFMT_IB_IF;
+
static const struct snd_soc_dai_ops mt8365_afe_2nd_i2s_ops = {
.startup = mt8365_dai_i2s_startup,
.shutdown = mt8365_dai_i2s_shutdown,
.hw_params = mt8365_afe_2nd_i2s_hw_params,
.prepare = mt8365_dai_i2s_prepare,
.set_fmt = mt8365_afe_2nd_i2s_set_fmt,
+ .auto_selectable_formats = &mt8365_dai_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver mtk_dai_i2s_driver[] = {
diff --git a/sound/soc/mediatek/mt8365/mt8365-dai-pcm.c b/sound/soc/mediatek/mt8365/mt8365-dai-pcm.c
index 0ec114a566ad1..74c1b6df4515a 100644
--- a/sound/soc/mediatek/mt8365/mt8365-dai-pcm.c
+++ b/sound/soc/mediatek/mt8365/mt8365-dai-pcm.c
@@ -202,11 +202,22 @@ static int mt8365_dai_pcm1_set_fmt(struct snd_soc_dai *dai, unsigned int fmt)
return 0;
}
+static const u64 mt8365_dai_pcm1_selectable_formats =
+ SND_SOC_POSSIBLE_DAIFMT_I2S |
+ SND_SOC_POSSIBLE_DAIFMT_GATED |
+ SND_SOC_POSSIBLE_DAIFMT_CONT |
+ SND_SOC_POSSIBLE_DAIFMT_NB_NF |
+ SND_SOC_POSSIBLE_DAIFMT_NB_IF |
+ SND_SOC_POSSIBLE_DAIFMT_IB_NF |
+ SND_SOC_POSSIBLE_DAIFMT_IB_IF;
+
static const struct snd_soc_dai_ops mt8365_dai_pcm1_ops = {
.startup = mt8365_dai_pcm1_startup,
.shutdown = mt8365_dai_pcm1_shutdown,
.prepare = mt8365_dai_pcm1_prepare,
.set_fmt = mt8365_dai_pcm1_set_fmt,
+ .auto_selectable_formats = &mt8365_dai_pcm1_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver mtk_dai_pcm_driver[] = {
--
2.53.0
^ permalink raw reply related [flat|nested] 28+ messages in thread* [PATCH 09/21] ASoC: mxs: use .auto_selectable_formats
2026-09-03 1:13 [PATCH 00/21] ASoC: use .auto_selectable_formats Kuninori Morimoto
` (7 preceding siblings ...)
2026-09-03 1:13 ` [PATCH 08/21] ASoC: mediatek: " Kuninori Morimoto
@ 2026-09-03 1:14 ` Kuninori Morimoto
2026-09-03 1:14 ` [PATCH 10/21] ASoC: pxa: " Kuninori Morimoto
` (12 subsequent siblings)
21 siblings, 0 replies; 28+ messages in thread
From: Kuninori Morimoto @ 2026-09-03 1:14 UTC (permalink / raw)
To: Dario Binacchi, Fabio Estevam, Frank Li, Jaroslav Kysela,
Liam Girdwood, Mark Brown, Sascha Hauer, Takashi Iwai
Cc: linux-arm-kernel, linux-sound
We can use .auto_selectable_formats. Let's adds it.
Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
---
sound/soc/mxs/mxs-saif.c | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/sound/soc/mxs/mxs-saif.c b/sound/soc/mxs/mxs-saif.c
index a77cd516a1bfd..e46896ac9669c 100644
--- a/sound/soc/mxs/mxs-saif.c
+++ b/sound/soc/mxs/mxs-saif.c
@@ -691,6 +691,14 @@ static int mxs_saif_trigger(struct snd_pcm_substream *substream, int cmd,
(SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE | \
SNDRV_PCM_FMTBIT_S24_LE)
+static const u64 mxs_saif_dai_selectable_formats =
+ SND_SOC_POSSIBLE_DAIFMT_I2S |
+ SND_SOC_POSSIBLE_DAIFMT_LEFT_J |
+ SND_SOC_POSSIBLE_DAIFMT_NB_NF |
+ SND_SOC_POSSIBLE_DAIFMT_NB_IF |
+ SND_SOC_POSSIBLE_DAIFMT_IB_NF |
+ SND_SOC_POSSIBLE_DAIFMT_IB_IF;
+
static const struct snd_soc_dai_ops mxs_saif_dai_ops = {
.startup = mxs_saif_startup,
.shutdown = mxs_saif_shutdown,
@@ -699,6 +707,8 @@ static const struct snd_soc_dai_ops mxs_saif_dai_ops = {
.hw_params = mxs_saif_hw_params,
.set_sysclk = mxs_saif_set_dai_sysclk,
.set_fmt = mxs_saif_set_dai_fmt,
+ .auto_selectable_formats = &mxs_saif_dai_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver mxs_saif_dai = {
--
2.53.0
^ permalink raw reply related [flat|nested] 28+ messages in thread* [PATCH 10/21] ASoC: pxa: use .auto_selectable_formats
2026-09-03 1:13 [PATCH 00/21] ASoC: use .auto_selectable_formats Kuninori Morimoto
` (8 preceding siblings ...)
2026-09-03 1:14 ` [PATCH 09/21] ASoC: mxs: " Kuninori Morimoto
@ 2026-09-03 1:14 ` Kuninori Morimoto
2026-09-03 1:14 ` [PATCH 11/21] ASoC: renesas: " Kuninori Morimoto
` (11 subsequent siblings)
21 siblings, 0 replies; 28+ messages in thread
From: Kuninori Morimoto @ 2026-09-03 1:14 UTC (permalink / raw)
To: Daniel Mack, Haojian Zhuang, Jaroslav Kysela, Liam Girdwood,
Mark Brown, Robert Jarzmik, Takashi Iwai
Cc: linux-arm-kernel, linux-sound
We can use .auto_selectable_formats. Let's adds it.
Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
---
sound/soc/pxa/mmp-sspa.c | 6 ++++++
sound/soc/pxa/pxa-ssp.c | 11 +++++++++++
sound/soc/pxa/pxa2xx-i2s.c | 6 ++++++
3 files changed, 23 insertions(+)
diff --git a/sound/soc/pxa/mmp-sspa.c b/sound/soc/pxa/mmp-sspa.c
index fbbce81680cf8..f9066fbdd5718 100644
--- a/sound/soc/pxa/mmp-sspa.c
+++ b/sound/soc/pxa/mmp-sspa.c
@@ -339,6 +339,10 @@ static int mmp_sspa_probe(struct snd_soc_dai *dai)
SNDRV_PCM_FMTBIT_S24_3LE | \
SNDRV_PCM_FMTBIT_S32_LE)
+static const u64 mmp_sspa_dai_selectable_formats =
+ SND_SOC_POSSIBLE_DAIFMT_I2S |
+ SND_SOC_POSSIBLE_DAIFMT_NB_NF;
+
static const struct snd_soc_dai_ops mmp_sspa_dai_ops = {
.probe = mmp_sspa_probe,
.startup = mmp_sspa_startup,
@@ -348,6 +352,8 @@ static const struct snd_soc_dai_ops mmp_sspa_dai_ops = {
.set_sysclk = mmp_sspa_set_dai_sysclk,
.set_pll = mmp_sspa_set_dai_pll,
.set_fmt = mmp_sspa_set_dai_fmt,
+ .auto_selectable_formats = &mmp_sspa_dai_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver mmp_sspa_dai = {
diff --git a/sound/soc/pxa/pxa-ssp.c b/sound/soc/pxa/pxa-ssp.c
index 3a0abcb0bfbdf..9a98246ad19ce 100644
--- a/sound/soc/pxa/pxa-ssp.c
+++ b/sound/soc/pxa/pxa-ssp.c
@@ -809,6 +809,15 @@ static int pxa_ssp_remove(struct snd_soc_dai *dai)
#define PXA_SSP_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S32_LE)
+static const u64 pxa_ssp_dai_selectable_formats =
+ SND_SOC_POSSIBLE_DAIFMT_I2S |
+ SND_SOC_POSSIBLE_DAIFMT_DSP_A |
+ SND_SOC_POSSIBLE_DAIFMT_DSP_B |
+ SND_SOC_POSSIBLE_DAIFMT_NB_NF |
+ SND_SOC_POSSIBLE_DAIFMT_NB_IF |
+ SND_SOC_POSSIBLE_DAIFMT_IB_NF |
+ SND_SOC_POSSIBLE_DAIFMT_IB_IF;
+
static const struct snd_soc_dai_ops pxa_ssp_dai_ops = {
.probe = pxa_ssp_probe,
.remove = pxa_ssp_remove,
@@ -820,6 +829,8 @@ static const struct snd_soc_dai_ops pxa_ssp_dai_ops = {
.set_fmt = pxa_ssp_set_dai_fmt,
.set_tdm_slot = pxa_ssp_set_dai_tdm_slot,
.set_tristate = pxa_ssp_set_dai_tristate,
+ .auto_selectable_formats = &pxa_ssp_dai_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver pxa_ssp_dai = {
diff --git a/sound/soc/pxa/pxa2xx-i2s.c b/sound/soc/pxa/pxa2xx-i2s.c
index fe1df78926f59..008cf5ae2607e 100644
--- a/sound/soc/pxa/pxa2xx-i2s.c
+++ b/sound/soc/pxa/pxa2xx-i2s.c
@@ -328,6 +328,10 @@ static int pxa2xx_i2s_remove(struct snd_soc_dai *dai)
SNDRV_PCM_RATE_16000 | SNDRV_PCM_RATE_22050 | SNDRV_PCM_RATE_44100 | \
SNDRV_PCM_RATE_48000 | SNDRV_PCM_RATE_96000)
+static const u64 pxa_i2s_dai_selectable_formats =
+ SND_SOC_POSSIBLE_DAIFMT_I2S |
+ SND_SOC_POSSIBLE_DAIFMT_LEFT_J;
+
static const struct snd_soc_dai_ops pxa_i2s_dai_ops = {
.probe = pxa2xx_i2s_probe,
.remove = pxa2xx_i2s_remove,
@@ -337,6 +341,8 @@ static const struct snd_soc_dai_ops pxa_i2s_dai_ops = {
.hw_params = pxa2xx_i2s_hw_params,
.set_fmt = pxa2xx_i2s_set_dai_fmt,
.set_sysclk = pxa2xx_i2s_set_dai_sysclk,
+ .auto_selectable_formats = &pxa_i2s_dai_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver pxa_i2s_dai = {
--
2.53.0
^ permalink raw reply related [flat|nested] 28+ messages in thread* [PATCH 11/21] ASoC: renesas: use .auto_selectable_formats
2026-09-03 1:13 [PATCH 00/21] ASoC: use .auto_selectable_formats Kuninori Morimoto
` (9 preceding siblings ...)
2026-09-03 1:14 ` [PATCH 10/21] ASoC: pxa: " Kuninori Morimoto
@ 2026-09-03 1:14 ` Kuninori Morimoto
2026-09-03 1:14 ` [PATCH 12/21] ASoC: rockchip: " Kuninori Morimoto
` (10 subsequent siblings)
21 siblings, 0 replies; 28+ messages in thread
From: Kuninori Morimoto @ 2026-09-03 1:14 UTC (permalink / raw)
To: Biju Das, Jaroslav Kysela, Lad Prabhakar, Liam Girdwood,
Mark Brown, Takashi Iwai
Cc: linux-renesas-soc, linux-sound
We can use .auto_selectable_formats. Let's adds it.
Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
---
sound/soc/renesas/rz-ssi.c | 9 +++++++++
sound/soc/renesas/siu_dai.c | 6 ++++++
sound/soc/renesas/ssi.c | 13 +++++++++++++
3 files changed, 28 insertions(+)
diff --git a/sound/soc/renesas/rz-ssi.c b/sound/soc/renesas/rz-ssi.c
index 9fe8a639c47c1..b1587f499cb89 100644
--- a/sound/soc/renesas/rz-ssi.c
+++ b/sound/soc/renesas/rz-ssi.c
@@ -900,6 +900,13 @@ static int rz_ssi_dai_probe(struct snd_soc_dai *dai)
return 0;
}
+static const u64 rz_ssi_dai_selectable_formats =
+ SND_SOC_POSSIBLE_DAIFMT_I2S |
+ SND_SOC_POSSIBLE_DAIFMT_NB_NF |
+ SND_SOC_POSSIBLE_DAIFMT_NB_IF |
+ SND_SOC_POSSIBLE_DAIFMT_IB_NF |
+ SND_SOC_POSSIBLE_DAIFMT_IB_IF;
+
static const struct snd_soc_dai_ops rz_ssi_dai_ops = {
.probe = rz_ssi_dai_probe,
.startup = rz_ssi_startup,
@@ -907,6 +914,8 @@ static const struct snd_soc_dai_ops rz_ssi_dai_ops = {
.trigger = rz_ssi_dai_trigger,
.set_fmt = rz_ssi_dai_set_fmt,
.hw_params = rz_ssi_dai_hw_params,
+ .auto_selectable_formats = &rz_ssi_dai_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static const struct snd_pcm_hardware rz_ssi_pcm_hardware = {
diff --git a/sound/soc/renesas/siu_dai.c b/sound/soc/renesas/siu_dai.c
index 85dee90257105..fff6ef870f0db 100644
--- a/sound/soc/renesas/siu_dai.c
+++ b/sound/soc/renesas/siu_dai.c
@@ -688,12 +688,18 @@ static int siu_dai_set_sysclk(struct snd_soc_dai *dai, int clk_id,
return ret;
}
+static const u64 siu_dai_selectable_formats =
+ SND_SOC_POSSIBLE_DAIFMT_I2S |
+ SND_SOC_POSSIBLE_DAIFMT_LEFT_J;
+
static const struct snd_soc_dai_ops siu_dai_ops = {
.startup = siu_dai_startup,
.shutdown = siu_dai_shutdown,
.prepare = siu_dai_prepare,
.set_sysclk = siu_dai_set_sysclk,
.set_fmt = siu_dai_set_fmt,
+ .auto_selectable_formats = &siu_dai_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver siu_i2s_dai = {
diff --git a/sound/soc/renesas/ssi.c b/sound/soc/renesas/ssi.c
index 96cf523c22734..f00067bafe8d2 100644
--- a/sound/soc/renesas/ssi.c
+++ b/sound/soc/renesas/ssi.c
@@ -329,6 +329,17 @@ static int ssi_set_fmt(struct snd_soc_dai *dai, unsigned int fmt)
SNDRV_PCM_FMTBIT_S24_3LE | SNDRV_PCM_FMTBIT_U24_3LE | \
SNDRV_PCM_FMTBIT_S32_LE | SNDRV_PCM_FMTBIT_U32_LE)
+static const u64 ssi_dai_selectable_formats =
+ SND_SOC_POSSIBLE_DAIFMT_I2S |
+ SND_SOC_POSSIBLE_DAIFMT_RIGHT_J |
+ SND_SOC_POSSIBLE_DAIFMT_LEFT_J |
+ SND_SOC_POSSIBLE_DAIFMT_GATED |
+ SND_SOC_POSSIBLE_DAIFMT_CONT |
+ SND_SOC_POSSIBLE_DAIFMT_NB_NF |
+ SND_SOC_POSSIBLE_DAIFMT_NB_IF |
+ SND_SOC_POSSIBLE_DAIFMT_IB_NF |
+ SND_SOC_POSSIBLE_DAIFMT_IB_IF;
+
static const struct snd_soc_dai_ops ssi_dai_ops = {
.startup = ssi_startup,
.shutdown = ssi_shutdown,
@@ -337,6 +348,8 @@ static const struct snd_soc_dai_ops ssi_dai_ops = {
.set_sysclk = ssi_set_sysclk,
.set_clkdiv = ssi_set_clkdiv,
.set_fmt = ssi_set_fmt,
+ .auto_selectable_formats = &ssi_dai_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver sh4_ssi_dai[] = {
--
2.53.0
^ permalink raw reply related [flat|nested] 28+ messages in thread* [PATCH 12/21] ASoC: rockchip: use .auto_selectable_formats
2026-09-03 1:13 [PATCH 00/21] ASoC: use .auto_selectable_formats Kuninori Morimoto
` (10 preceding siblings ...)
2026-09-03 1:14 ` [PATCH 11/21] ASoC: renesas: " Kuninori Morimoto
@ 2026-09-03 1:14 ` Kuninori Morimoto
2026-09-03 1:14 ` [PATCH 13/21] ASoC: samsung: " Kuninori Morimoto
` (9 subsequent siblings)
21 siblings, 0 replies; 28+ messages in thread
From: Kuninori Morimoto @ 2026-09-03 1:14 UTC (permalink / raw)
To: Heiko Stuebner, Jaroslav Kysela, Liam Girdwood, Mark Brown,
Nicolas Frattaroli, Takashi Iwai
Cc: linux-arm-kernel, linux-sound
We can use .auto_selectable_formats. Let's adds it.
Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
---
sound/soc/rockchip/rockchip_i2s.c | 25 +++++++++++++++------
sound/soc/rockchip/rockchip_i2s_tdm.c | 27 +++++++++++++++++------
sound/soc/rockchip/rockchip_pdm.c | 14 ++++++++----
sound/soc/rockchip/rockchip_sai.c | 31 +++++++++++++++++++--------
4 files changed, 71 insertions(+), 26 deletions(-)
diff --git a/sound/soc/rockchip/rockchip_i2s.c b/sound/soc/rockchip/rockchip_i2s.c
index 261f36d4c2fd4..ef3f6586af772 100644
--- a/sound/soc/rockchip/rockchip_i2s.c
+++ b/sound/soc/rockchip/rockchip_i2s.c
@@ -537,13 +537,26 @@ static int rockchip_i2s_dai_probe(struct snd_soc_dai *dai)
return 0;
}
+static const u64 rockchip_i2s_dai_selectable_formats =
+ SND_SOC_POSSIBLE_DAIFMT_I2S |
+ SND_SOC_POSSIBLE_DAIFMT_RIGHT_J |
+ SND_SOC_POSSIBLE_DAIFMT_LEFT_J |
+ SND_SOC_POSSIBLE_DAIFMT_DSP_A |
+ SND_SOC_POSSIBLE_DAIFMT_DSP_B |
+ SND_SOC_POSSIBLE_DAIFMT_NB_NF |
+ SND_SOC_POSSIBLE_DAIFMT_NB_IF |
+ SND_SOC_POSSIBLE_DAIFMT_IB_NF |
+ SND_SOC_POSSIBLE_DAIFMT_IB_IF;
+
static const struct snd_soc_dai_ops rockchip_i2s_dai_ops = {
- .probe = rockchip_i2s_dai_probe,
- .hw_params = rockchip_i2s_hw_params,
- .set_bclk_ratio = rockchip_i2s_set_bclk_ratio,
- .set_sysclk = rockchip_i2s_set_sysclk,
- .set_fmt = rockchip_i2s_set_fmt,
- .trigger = rockchip_i2s_trigger,
+ .probe = rockchip_i2s_dai_probe,
+ .hw_params = rockchip_i2s_hw_params,
+ .set_bclk_ratio = rockchip_i2s_set_bclk_ratio,
+ .set_sysclk = rockchip_i2s_set_sysclk,
+ .set_fmt = rockchip_i2s_set_fmt,
+ .trigger = rockchip_i2s_trigger,
+ .auto_selectable_formats = &rockchip_i2s_dai_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver rockchip_i2s_dai = {
diff --git a/sound/soc/rockchip/rockchip_i2s_tdm.c b/sound/soc/rockchip/rockchip_i2s_tdm.c
index 5ef7f109706d2..983319a538b11 100644
--- a/sound/soc/rockchip/rockchip_i2s_tdm.c
+++ b/sound/soc/rockchip/rockchip_i2s_tdm.c
@@ -826,14 +826,27 @@ static int rockchip_i2s_tdm_set_bclk_ratio(struct snd_soc_dai *dai,
return 0;
}
+static const u64 rockchip_dai_selectable_formats =
+ SND_SOC_POSSIBLE_DAIFMT_I2S |
+ SND_SOC_POSSIBLE_DAIFMT_RIGHT_J |
+ SND_SOC_POSSIBLE_DAIFMT_LEFT_J |
+ SND_SOC_POSSIBLE_DAIFMT_DSP_A |
+ SND_SOC_POSSIBLE_DAIFMT_DSP_B |
+ SND_SOC_POSSIBLE_DAIFMT_NB_NF |
+ SND_SOC_POSSIBLE_DAIFMT_NB_IF |
+ SND_SOC_POSSIBLE_DAIFMT_IB_NF |
+ SND_SOC_POSSIBLE_DAIFMT_IB_IF;
+
static const struct snd_soc_dai_ops rockchip_i2s_tdm_dai_ops = {
- .probe = rockchip_i2s_tdm_dai_probe,
- .hw_params = rockchip_i2s_tdm_hw_params,
- .set_bclk_ratio = rockchip_i2s_tdm_set_bclk_ratio,
- .set_fmt = rockchip_i2s_tdm_set_fmt,
- .set_sysclk = rockchip_i2s_tdm_set_sysclk,
- .set_tdm_slot = rockchip_dai_tdm_slot,
- .trigger = rockchip_i2s_tdm_trigger,
+ .probe = rockchip_i2s_tdm_dai_probe,
+ .hw_params = rockchip_i2s_tdm_hw_params,
+ .set_bclk_ratio = rockchip_i2s_tdm_set_bclk_ratio,
+ .set_fmt = rockchip_i2s_tdm_set_fmt,
+ .set_sysclk = rockchip_i2s_tdm_set_sysclk,
+ .set_tdm_slot = rockchip_dai_tdm_slot,
+ .trigger = rockchip_i2s_tdm_trigger,
+ .auto_selectable_formats = &rockchip_dai_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static const struct snd_soc_component_driver rockchip_i2s_tdm_component = {
diff --git a/sound/soc/rockchip/rockchip_pdm.c b/sound/soc/rockchip/rockchip_pdm.c
index 343fda478901d..0720748c7c8dd 100644
--- a/sound/soc/rockchip/rockchip_pdm.c
+++ b/sound/soc/rockchip/rockchip_pdm.c
@@ -381,11 +381,17 @@ static int rockchip_pdm_dai_probe(struct snd_soc_dai *dai)
return 0;
}
+static const u64 rockchip_pdm_selectable_formats =
+ SND_SOC_POSSIBLE_DAIFMT_NB_NF |
+ SND_SOC_POSSIBLE_DAIFMT_IB_NF;
+
static const struct snd_soc_dai_ops rockchip_pdm_dai_ops = {
- .probe = rockchip_pdm_dai_probe,
- .set_fmt = rockchip_pdm_set_fmt,
- .trigger = rockchip_pdm_trigger,
- .hw_params = rockchip_pdm_hw_params,
+ .probe = rockchip_pdm_dai_probe,
+ .set_fmt = rockchip_pdm_set_fmt,
+ .trigger = rockchip_pdm_trigger,
+ .hw_params = rockchip_pdm_hw_params,
+ .auto_selectable_formats = &rockchip_pdm_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
#define ROCKCHIP_PDM_RATES SNDRV_PCM_RATE_8000_192000
diff --git a/sound/soc/rockchip/rockchip_sai.c b/sound/soc/rockchip/rockchip_sai.c
index 30b5e71d09375..9dfe46ffe0ff0 100644
--- a/sound/soc/rockchip/rockchip_sai.c
+++ b/sound/soc/rockchip/rockchip_sai.c
@@ -957,16 +957,29 @@ static int rockchip_sai_set_sysclk(struct snd_soc_dai *dai, int stream,
return 0;
}
+static const u64 rockchip_sai_selectable_formats =
+ SND_SOC_POSSIBLE_DAIFMT_I2S |
+ SND_SOC_POSSIBLE_DAIFMT_RIGHT_J |
+ SND_SOC_POSSIBLE_DAIFMT_LEFT_J |
+ SND_SOC_POSSIBLE_DAIFMT_DSP_A |
+ SND_SOC_POSSIBLE_DAIFMT_DSP_B |
+ SND_SOC_POSSIBLE_DAIFMT_NB_NF |
+ SND_SOC_POSSIBLE_DAIFMT_NB_IF |
+ SND_SOC_POSSIBLE_DAIFMT_IB_NF |
+ SND_SOC_POSSIBLE_DAIFMT_IB_IF;
+
static const struct snd_soc_dai_ops rockchip_sai_dai_ops = {
- .probe = rockchip_sai_dai_probe,
- .startup = rockchip_sai_startup,
- .shutdown = rockchip_sai_shutdown,
- .hw_params = rockchip_sai_hw_params,
- .set_fmt = rockchip_sai_set_fmt,
- .set_sysclk = rockchip_sai_set_sysclk,
- .prepare = rockchip_sai_prepare,
- .trigger = rockchip_sai_trigger,
- .set_tdm_slot = rockchip_sai_set_tdm_slot,
+ .probe = rockchip_sai_dai_probe,
+ .startup = rockchip_sai_startup,
+ .shutdown = rockchip_sai_shutdown,
+ .hw_params = rockchip_sai_hw_params,
+ .set_fmt = rockchip_sai_set_fmt,
+ .set_sysclk = rockchip_sai_set_sysclk,
+ .prepare = rockchip_sai_prepare,
+ .trigger = rockchip_sai_trigger,
+ .set_tdm_slot = rockchip_sai_set_tdm_slot,
+ .auto_selectable_formats = &rockchip_sai_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static const struct snd_soc_dai_driver rockchip_sai_dai = {
--
2.53.0
^ permalink raw reply related [flat|nested] 28+ messages in thread* [PATCH 13/21] ASoC: samsung: use .auto_selectable_formats
2026-09-03 1:13 [PATCH 00/21] ASoC: use .auto_selectable_formats Kuninori Morimoto
` (11 preceding siblings ...)
2026-09-03 1:14 ` [PATCH 12/21] ASoC: rockchip: " Kuninori Morimoto
@ 2026-09-03 1:14 ` Kuninori Morimoto
2026-09-03 1:14 ` [PATCH 14/21] ASoC: sti: " Kuninori Morimoto
` (8 subsequent siblings)
21 siblings, 0 replies; 28+ messages in thread
From: Kuninori Morimoto @ 2026-09-03 1:14 UTC (permalink / raw)
To: Jaroslav Kysela, Liam Girdwood, Mark Brown, Sylwester Nawrocki,
Takashi Iwai
Cc: linux-sound
We can use .auto_selectable_formats. Let's adds it.
Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
---
sound/soc/samsung/i2s.c | 29 +++++++++++++++++++----------
sound/soc/samsung/pcm.c | 9 +++++++++
2 files changed, 28 insertions(+), 10 deletions(-)
diff --git a/sound/soc/samsung/i2s.c b/sound/soc/samsung/i2s.c
index 3e76cb81462f0..b2047017ae268 100644
--- a/sound/soc/samsung/i2s.c
+++ b/sound/soc/samsung/i2s.c
@@ -1092,17 +1092,26 @@ static int samsung_i2s_dai_remove(struct snd_soc_dai *dai)
return 0;
}
+static const u64 samsung_i2s_selectable_formats =
+ SND_SOC_POSSIBLE_DAIFMT_I2S |
+ SND_SOC_POSSIBLE_DAIFMT_RIGHT_J |
+ SND_SOC_POSSIBLE_DAIFMT_LEFT_J |
+ SND_SOC_POSSIBLE_DAIFMT_NB_NF |
+ SND_SOC_POSSIBLE_DAIFMT_NB_IF;
+
static const struct snd_soc_dai_ops samsung_i2s_dai_ops = {
- .probe = samsung_i2s_dai_probe,
- .remove = samsung_i2s_dai_remove,
- .trigger = i2s_trigger,
- .hw_params = i2s_hw_params,
- .set_fmt = i2s_set_fmt,
- .set_clkdiv = i2s_set_clkdiv,
- .set_sysclk = i2s_set_sysclk,
- .startup = i2s_startup,
- .shutdown = i2s_shutdown,
- .delay = i2s_delay,
+ .probe = samsung_i2s_dai_probe,
+ .remove = samsung_i2s_dai_remove,
+ .trigger = i2s_trigger,
+ .hw_params = i2s_hw_params,
+ .set_fmt = i2s_set_fmt,
+ .set_clkdiv = i2s_set_clkdiv,
+ .set_sysclk = i2s_set_sysclk,
+ .startup = i2s_startup,
+ .shutdown = i2s_shutdown,
+ .delay = i2s_delay,
+ .auto_selectable_formats = &samsung_i2s_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static const struct snd_soc_dapm_widget samsung_i2s_widgets[] = {
diff --git a/sound/soc/samsung/pcm.c b/sound/soc/samsung/pcm.c
index 309f024bf2a4d..9602e4f21a3b3 100644
--- a/sound/soc/samsung/pcm.c
+++ b/sound/soc/samsung/pcm.c
@@ -422,6 +422,13 @@ static int s3c_pcm_dai_probe(struct snd_soc_dai *dai)
return 0;
}
+static const u64 s3c_pcm_selectable_formats =
+ SND_SOC_POSSIBLE_DAIFMT_DSP_A |
+ SND_SOC_POSSIBLE_DAIFMT_DSP_B |
+ SND_SOC_POSSIBLE_DAIFMT_GATED |
+ SND_SOC_POSSIBLE_DAIFMT_CONT |
+ SND_SOC_POSSIBLE_DAIFMT_IB_NF;
+
static const struct snd_soc_dai_ops s3c_pcm_dai_ops = {
.probe = s3c_pcm_dai_probe,
.set_sysclk = s3c_pcm_set_sysclk,
@@ -429,6 +436,8 @@ static const struct snd_soc_dai_ops s3c_pcm_dai_ops = {
.trigger = s3c_pcm_trigger,
.hw_params = s3c_pcm_hw_params,
.set_fmt = s3c_pcm_set_fmt,
+ .auto_selectable_formats = &s3c_pcm_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
#define S3C_PCM_RATES SNDRV_PCM_RATE_8000_96000
--
2.53.0
^ permalink raw reply related [flat|nested] 28+ messages in thread* [PATCH 14/21] ASoC: sti: use .auto_selectable_formats
2026-09-03 1:13 [PATCH 00/21] ASoC: use .auto_selectable_formats Kuninori Morimoto
` (12 preceding siblings ...)
2026-09-03 1:14 ` [PATCH 13/21] ASoC: samsung: " Kuninori Morimoto
@ 2026-09-03 1:14 ` Kuninori Morimoto
2026-09-03 1:14 ` [PATCH 15/21] ASoC: stm: " Kuninori Morimoto
` (7 subsequent siblings)
21 siblings, 0 replies; 28+ messages in thread
From: Kuninori Morimoto @ 2026-09-03 1:14 UTC (permalink / raw)
To: Arnaud Pouliquen, Jaroslav Kysela, Liam Girdwood, Mark Brown,
Takashi Iwai
Cc: linux-sound
We can use .auto_selectable_formats. Let's adds it.
Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
---
sound/soc/sti/uniperif_player.c | 29 ++++++++++++++++++++---------
sound/soc/sti/uniperif_reader.c | 27 +++++++++++++++++++--------
2 files changed, 39 insertions(+), 17 deletions(-)
diff --git a/sound/soc/sti/uniperif_player.c b/sound/soc/sti/uniperif_player.c
index e4b9799ad9b2d..844ddcfc421a7 100644
--- a/sound/soc/sti/uniperif_player.c
+++ b/sound/soc/sti/uniperif_player.c
@@ -1028,16 +1028,27 @@ static int uni_player_parse_dt_audio_glue(struct platform_device *pdev,
return 0;
}
+static const u64 uni_selectable_formats =
+ SND_SOC_POSSIBLE_DAIFMT_I2S |
+ SND_SOC_POSSIBLE_DAIFMT_RIGHT_J |
+ SND_SOC_POSSIBLE_DAIFMT_LEFT_J |
+ SND_SOC_POSSIBLE_DAIFMT_NB_NF |
+ SND_SOC_POSSIBLE_DAIFMT_NB_IF |
+ SND_SOC_POSSIBLE_DAIFMT_IB_NF |
+ SND_SOC_POSSIBLE_DAIFMT_IB_IF;
+
static const struct snd_soc_dai_ops uni_player_dai_ops = {
- .startup = uni_player_startup,
- .shutdown = uni_player_shutdown,
- .prepare = uni_player_prepare,
- .probe = sti_uniperiph_dai_probe,
- .trigger = uni_player_trigger,
- .hw_params = sti_uniperiph_dai_hw_params,
- .set_fmt = sti_uniperiph_dai_set_fmt,
- .set_sysclk = uni_player_set_sysclk,
- .set_tdm_slot = sti_uniperiph_set_tdm_slot
+ .startup = uni_player_startup,
+ .shutdown = uni_player_shutdown,
+ .prepare = uni_player_prepare,
+ .probe = sti_uniperiph_dai_probe,
+ .trigger = uni_player_trigger,
+ .hw_params = sti_uniperiph_dai_hw_params,
+ .set_fmt = sti_uniperiph_dai_set_fmt,
+ .set_sysclk = uni_player_set_sysclk,
+ .set_tdm_slot = sti_uniperiph_set_tdm_slot,
+ .auto_selectable_formats = &uni_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
int uni_player_init(struct platform_device *pdev,
diff --git a/sound/soc/sti/uniperif_reader.c b/sound/soc/sti/uniperif_reader.c
index 45d7613f595cc..d92fc1181483d 100644
--- a/sound/soc/sti/uniperif_reader.c
+++ b/sound/soc/sti/uniperif_reader.c
@@ -391,15 +391,26 @@ static void uni_reader_shutdown(struct snd_pcm_substream *substream,
reader->substream = NULL;
}
+static const u64 uni_selectable_formats =
+ SND_SOC_POSSIBLE_DAIFMT_I2S |
+ SND_SOC_POSSIBLE_DAIFMT_RIGHT_J |
+ SND_SOC_POSSIBLE_DAIFMT_LEFT_J |
+ SND_SOC_POSSIBLE_DAIFMT_NB_NF |
+ SND_SOC_POSSIBLE_DAIFMT_NB_IF |
+ SND_SOC_POSSIBLE_DAIFMT_IB_NF |
+ SND_SOC_POSSIBLE_DAIFMT_IB_IF;
+
static const struct snd_soc_dai_ops uni_reader_dai_ops = {
- .startup = uni_reader_startup,
- .shutdown = uni_reader_shutdown,
- .prepare = uni_reader_prepare,
- .probe = sti_uniperiph_dai_probe,
- .trigger = uni_reader_trigger,
- .hw_params = sti_uniperiph_dai_hw_params,
- .set_fmt = sti_uniperiph_dai_set_fmt,
- .set_tdm_slot = sti_uniperiph_set_tdm_slot
+ .startup = uni_reader_startup,
+ .shutdown = uni_reader_shutdown,
+ .prepare = uni_reader_prepare,
+ .probe = sti_uniperiph_dai_probe,
+ .trigger = uni_reader_trigger,
+ .hw_params = sti_uniperiph_dai_hw_params,
+ .set_fmt = sti_uniperiph_dai_set_fmt,
+ .set_tdm_slot = sti_uniperiph_set_tdm_slot,
+ .auto_selectable_formats = &uni_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
int uni_reader_init(struct platform_device *pdev,
--
2.53.0
^ permalink raw reply related [flat|nested] 28+ messages in thread* [PATCH 15/21] ASoC: stm: use .auto_selectable_formats
2026-09-03 1:13 [PATCH 00/21] ASoC: use .auto_selectable_formats Kuninori Morimoto
` (13 preceding siblings ...)
2026-09-03 1:14 ` [PATCH 14/21] ASoC: sti: " Kuninori Morimoto
@ 2026-09-03 1:14 ` Kuninori Morimoto
2026-09-03 1:14 ` [PATCH 16/21] ASoC: sunxi: " Kuninori Morimoto
` (6 subsequent siblings)
21 siblings, 0 replies; 28+ messages in thread
From: Kuninori Morimoto @ 2026-09-03 1:14 UTC (permalink / raw)
To: Alexandre Torgue, Arnaud Pouliquen, Jaroslav Kysela,
Liam Girdwood, Mark Brown, Maxime Coquelin, Olivier Moysan,
Takashi Iwai
Cc: linux-arm-kernel, linux-sound
We can use .auto_selectable_formats. Let's adds it.
Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
---
sound/soc/stm/stm32_i2s.c | 12 ++++++++++++
sound/soc/stm/stm32_sai_sub.c | 15 +++++++++++++++
2 files changed, 27 insertions(+)
diff --git a/sound/soc/stm/stm32_i2s.c b/sound/soc/stm/stm32_i2s.c
index 83b51893b37c8..a59ad94423726 100644
--- a/sound/soc/stm/stm32_i2s.c
+++ b/sound/soc/stm/stm32_i2s.c
@@ -1089,6 +1089,16 @@ static const struct regmap_config stm32_h7_i2s_regmap_conf = {
.cache_type = REGCACHE_FLAT,
};
+static const u64 stm32_i2s_selectable_formats =
+ SND_SOC_POSSIBLE_DAIFMT_I2S |
+ SND_SOC_POSSIBLE_DAIFMT_RIGHT_J |
+ SND_SOC_POSSIBLE_DAIFMT_LEFT_J |
+ SND_SOC_POSSIBLE_DAIFMT_DSP_A |
+ SND_SOC_POSSIBLE_DAIFMT_NB_NF |
+ SND_SOC_POSSIBLE_DAIFMT_NB_IF |
+ SND_SOC_POSSIBLE_DAIFMT_IB_NF |
+ SND_SOC_POSSIBLE_DAIFMT_IB_IF;
+
static const struct snd_soc_dai_ops stm32_i2s_pcm_dai_ops = {
.probe = stm32_i2s_dai_probe,
.set_sysclk = stm32_i2s_set_sysclk,
@@ -1097,6 +1107,8 @@ static const struct snd_soc_dai_ops stm32_i2s_pcm_dai_ops = {
.hw_params = stm32_i2s_hw_params,
.trigger = stm32_i2s_trigger,
.shutdown = stm32_i2s_shutdown,
+ .auto_selectable_formats = &stm32_i2s_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static const struct snd_pcm_hardware stm32_i2s_pcm_hw = {
diff --git a/sound/soc/stm/stm32_sai_sub.c b/sound/soc/stm/stm32_sai_sub.c
index 9a201bdb306f9..d00377efe3f99 100644
--- a/sound/soc/stm/stm32_sai_sub.c
+++ b/sound/soc/stm/stm32_sai_sub.c
@@ -1358,6 +1358,17 @@ static int stm32_sai_dai_probe(struct snd_soc_dai *cpu_dai)
return stm32_sai_sub_reg_up(sai, STM_SAI_CR1_REGX, cr1_mask, cr1);
}
+static const u64 stm32_sai_selectable_formats =
+ SND_SOC_POSSIBLE_DAIFMT_I2S |
+ SND_SOC_POSSIBLE_DAIFMT_RIGHT_J |
+ SND_SOC_POSSIBLE_DAIFMT_LEFT_J |
+ SND_SOC_POSSIBLE_DAIFMT_DSP_A |
+ SND_SOC_POSSIBLE_DAIFMT_DSP_B |
+ SND_SOC_POSSIBLE_DAIFMT_NB_NF |
+ SND_SOC_POSSIBLE_DAIFMT_NB_IF |
+ SND_SOC_POSSIBLE_DAIFMT_IB_NF |
+ SND_SOC_POSSIBLE_DAIFMT_IB_IF;
+
static const struct snd_soc_dai_ops stm32_sai_pcm_dai_ops = {
.probe = stm32_sai_dai_probe,
.set_sysclk = stm32_sai_set_sysclk,
@@ -1368,6 +1379,8 @@ static const struct snd_soc_dai_ops stm32_sai_pcm_dai_ops = {
.trigger = stm32_sai_trigger,
.shutdown = stm32_sai_shutdown,
.pcm_new = stm32_sai_pcm_new,
+ .auto_selectable_formats = &stm32_sai_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static const struct snd_soc_dai_ops stm32_sai_pcm_dai_ops2 = {
@@ -1379,6 +1392,8 @@ static const struct snd_soc_dai_ops stm32_sai_pcm_dai_ops2 = {
.hw_params = stm32_sai_hw_params,
.trigger = stm32_sai_trigger,
.shutdown = stm32_sai_shutdown,
+ .auto_selectable_formats = &stm32_sai_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static int stm32_sai_pcm_process_spdif(struct snd_pcm_substream *substream,
--
2.53.0
^ permalink raw reply related [flat|nested] 28+ messages in thread* [PATCH 16/21] ASoC: sunxi: use .auto_selectable_formats
2026-09-03 1:13 [PATCH 00/21] ASoC: use .auto_selectable_formats Kuninori Morimoto
` (14 preceding siblings ...)
2026-09-03 1:14 ` [PATCH 15/21] ASoC: stm: " Kuninori Morimoto
@ 2026-09-03 1:14 ` Kuninori Morimoto
2026-09-03 1:14 ` [PATCH 17/21] ASoC: tegra: " Kuninori Morimoto
` (5 subsequent siblings)
21 siblings, 0 replies; 28+ messages in thread
From: Kuninori Morimoto @ 2026-09-03 1:14 UTC (permalink / raw)
To: bui duc phuc, Chen-Yu Tsai, Jaroslav Kysela, Jernej Skrabec,
Liam Girdwood, Mark Brown, Samuel Holland, Takashi Iwai
Cc: bui duc phuc, linux-arm-kernel, linux-sound
We can use .auto_selectable_formats. Let's adds it.
Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
---
sound/soc/sunxi/sun4i-i2s.c | 13 +++++++++++++
sound/soc/sunxi/sun8i-codec.c | 13 +++++++++++++
2 files changed, 26 insertions(+)
diff --git a/sound/soc/sunxi/sun4i-i2s.c b/sound/soc/sunxi/sun4i-i2s.c
index 716fa4d872ff5..43e6ea2563fe4 100644
--- a/sound/soc/sunxi/sun4i-i2s.c
+++ b/sound/soc/sunxi/sun4i-i2s.c
@@ -1106,6 +1106,17 @@ static int sun4i_i2s_dai_startup(struct snd_pcm_substream *sub, struct snd_soc_d
i2s->variant->pcm_formats);
}
+static const u64 sun4i_i2s_selectable_format =
+ SND_SOC_POSSIBLE_DAIFMT_I2S |
+ SND_SOC_POSSIBLE_DAIFMT_RIGHT_J |
+ SND_SOC_POSSIBLE_DAIFMT_LEFT_J |
+ SND_SOC_POSSIBLE_DAIFMT_DSP_A |
+ SND_SOC_POSSIBLE_DAIFMT_DSP_B |
+ SND_SOC_POSSIBLE_DAIFMT_NB_NF |
+ SND_SOC_POSSIBLE_DAIFMT_NB_IF |
+ SND_SOC_POSSIBLE_DAIFMT_IB_NF |
+ SND_SOC_POSSIBLE_DAIFMT_IB_IF;
+
static const struct snd_soc_dai_ops sun4i_i2s_dai_ops = {
.probe = sun4i_i2s_dai_probe,
.startup = sun4i_i2s_dai_startup,
@@ -1114,6 +1125,8 @@ static const struct snd_soc_dai_ops sun4i_i2s_dai_ops = {
.set_sysclk = sun4i_i2s_set_sysclk,
.set_tdm_slot = sun4i_i2s_set_tdm_slot,
.trigger = sun4i_i2s_trigger,
+ .auto_selectable_formats = &sun4i_i2s_selectable_format,
+ .num_auto_selectable_formats = 1,
};
#define SUN4I_FORMATS_ALL (SNDRV_PCM_FMTBIT_S16_LE | \
diff --git a/sound/soc/sunxi/sun8i-codec.c b/sound/soc/sunxi/sun8i-codec.c
index 6bd42da57ac01..2e4a205e4e565 100644
--- a/sound/soc/sunxi/sun8i-codec.c
+++ b/sound/soc/sunxi/sun8i-codec.c
@@ -688,12 +688,25 @@ static int sun8i_codec_hw_free(struct snd_pcm_substream *substream,
return 0;
}
+static const u64 sun8i_codec_selectable_formats =
+ SND_SOC_POSSIBLE_DAIFMT_I2S |
+ SND_SOC_POSSIBLE_DAIFMT_RIGHT_J |
+ SND_SOC_POSSIBLE_DAIFMT_LEFT_J |
+ SND_SOC_POSSIBLE_DAIFMT_DSP_A |
+ SND_SOC_POSSIBLE_DAIFMT_DSP_B |
+ SND_SOC_POSSIBLE_DAIFMT_NB_NF |
+ SND_SOC_POSSIBLE_DAIFMT_NB_IF |
+ SND_SOC_POSSIBLE_DAIFMT_IB_NF |
+ SND_SOC_POSSIBLE_DAIFMT_IB_IF;
+
static const struct snd_soc_dai_ops sun8i_codec_dai_ops = {
.set_fmt = sun8i_codec_set_fmt,
.set_tdm_slot = sun8i_codec_set_tdm_slot,
.startup = sun8i_codec_startup,
.hw_params = sun8i_codec_hw_params,
.hw_free = sun8i_codec_hw_free,
+ .auto_selectable_formats = &sun8i_codec_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver sun8i_codec_dais[] = {
--
2.53.0
^ permalink raw reply related [flat|nested] 28+ messages in thread* [PATCH 17/21] ASoC: tegra: use .auto_selectable_formats
2026-09-03 1:13 [PATCH 00/21] ASoC: use .auto_selectable_formats Kuninori Morimoto
` (15 preceding siblings ...)
2026-09-03 1:14 ` [PATCH 16/21] ASoC: sunxi: " Kuninori Morimoto
@ 2026-09-03 1:14 ` Kuninori Morimoto
2026-09-04 8:53 ` Jon Hunter
2026-09-03 1:14 ` [PATCH 18/21] ASoC: ti: " Kuninori Morimoto
` (4 subsequent siblings)
21 siblings, 1 reply; 28+ messages in thread
From: Kuninori Morimoto @ 2026-09-03 1:14 UTC (permalink / raw)
To: Jaroslav Kysela, Jonathan Hunter, Krzysztof Kozlowski,
Liam Girdwood, Mark Brown, Takashi Iwai, Thierry Reding
Cc: Krzysztof Kozlowski, linux-sound
We can use .auto_selectable_formats. Let's adds it.
Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
---
sound/soc/tegra/tegra20_i2s.c | 10 ++++++++++
sound/soc/tegra/tegra210_i2s.c | 13 +++++++++++++
sound/soc/tegra/tegra30_i2s.c | 10 ++++++++++
3 files changed, 33 insertions(+)
diff --git a/sound/soc/tegra/tegra20_i2s.c b/sound/soc/tegra/tegra20_i2s.c
index d9ab210ad69a9..b31f9477cb2eb 100644
--- a/sound/soc/tegra/tegra20_i2s.c
+++ b/sound/soc/tegra/tegra20_i2s.c
@@ -309,12 +309,22 @@ static int tegra20_i2s_startup(struct snd_pcm_substream *substream,
SNDRV_PCM_HW_PARAM_RATE, -1);
}
+static const u64 tegra20_i2s_selectable_formats =
+ SND_SOC_POSSIBLE_DAIFMT_NB_NF |
+ SND_SOC_POSSIBLE_DAIFMT_DSP_A |
+ SND_SOC_POSSIBLE_DAIFMT_DSP_B |
+ SND_SOC_POSSIBLE_DAIFMT_I2S |
+ SND_SOC_POSSIBLE_DAIFMT_RIGHT_J |
+ SND_SOC_POSSIBLE_DAIFMT_LEFT_J;
+
static const struct snd_soc_dai_ops tegra20_i2s_dai_ops = {
.probe = tegra20_i2s_probe,
.set_fmt = tegra20_i2s_set_fmt,
.hw_params = tegra20_i2s_hw_params,
.trigger = tegra20_i2s_trigger,
.startup = tegra20_i2s_startup,
+ .auto_selectable_formats = &tegra20_i2s_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static const struct snd_soc_dai_driver tegra20_i2s_dai_template = {
diff --git a/sound/soc/tegra/tegra210_i2s.c b/sound/soc/tegra/tegra210_i2s.c
index 79a2f898ea28c..f2cfe3b5cccec 100644
--- a/sound/soc/tegra/tegra210_i2s.c
+++ b/sound/soc/tegra/tegra210_i2s.c
@@ -739,11 +739,24 @@ static int tegra210_i2s_hw_params(struct snd_pcm_substream *substream,
cif_conf.client_ch);
}
+static const u64 tegra210_i2s_selectable_formats =
+ SND_SOC_POSSIBLE_DAIFMT_DSP_A |
+ SND_SOC_POSSIBLE_DAIFMT_DSP_B |
+ SND_SOC_POSSIBLE_DAIFMT_I2S |
+ SND_SOC_POSSIBLE_DAIFMT_RIGHT_J |
+ SND_SOC_POSSIBLE_DAIFMT_LEFT_J |
+ SND_SOC_POSSIBLE_DAIFMT_NB_NF |
+ SND_SOC_POSSIBLE_DAIFMT_NB_IF |
+ SND_SOC_POSSIBLE_DAIFMT_IB_NF |
+ SND_SOC_POSSIBLE_DAIFMT_IB_IF;
+
static const struct snd_soc_dai_ops tegra210_i2s_dai_ops = {
.set_fmt = tegra210_i2s_set_fmt,
.hw_params = tegra210_i2s_hw_params,
.set_bclk_ratio = tegra210_i2s_set_dai_bclk_ratio,
.set_tdm_slot = tegra210_i2s_set_tdm_slot,
+ .auto_selectable_formats = &tegra210_i2s_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver tegra210_i2s_dais[] = {
diff --git a/sound/soc/tegra/tegra30_i2s.c b/sound/soc/tegra/tegra30_i2s.c
index 1d7b3aed51fd9..69acff73f68ad 100644
--- a/sound/soc/tegra/tegra30_i2s.c
+++ b/sound/soc/tegra/tegra30_i2s.c
@@ -302,12 +302,22 @@ static int tegra30_i2s_probe(struct snd_soc_dai *dai)
return 0;
}
+static const u64 tegra30_i2s_selectable_formats =
+ SND_SOC_POSSIBLE_DAIFMT_I2S |
+ SND_SOC_POSSIBLE_DAIFMT_RIGHT_J |
+ SND_SOC_POSSIBLE_DAIFMT_LEFT_J |
+ SND_SOC_POSSIBLE_DAIFMT_DSP_A |
+ SND_SOC_POSSIBLE_DAIFMT_DSP_B |
+ SND_SOC_POSSIBLE_DAIFMT_NB_NF;
+
static const struct snd_soc_dai_ops tegra30_i2s_dai_ops = {
.probe = tegra30_i2s_probe,
.set_fmt = tegra30_i2s_set_fmt,
.hw_params = tegra30_i2s_hw_params,
.trigger = tegra30_i2s_trigger,
.set_tdm_slot = tegra30_i2s_set_tdm,
+ .auto_selectable_formats = &tegra30_i2s_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static const struct snd_soc_dai_driver tegra30_i2s_dai_template = {
--
2.53.0
^ permalink raw reply related [flat|nested] 28+ messages in thread* [PATCH 18/21] ASoC: ti: use .auto_selectable_formats
2026-09-03 1:13 [PATCH 00/21] ASoC: use .auto_selectable_formats Kuninori Morimoto
` (16 preceding siblings ...)
2026-09-03 1:14 ` [PATCH 17/21] ASoC: tegra: " Kuninori Morimoto
@ 2026-09-03 1:14 ` Kuninori Morimoto
2026-09-03 1:14 ` [PATCH 19/21] ASoC: uniphier: " Kuninori Morimoto
` (3 subsequent siblings)
21 siblings, 0 replies; 28+ messages in thread
From: Kuninori Morimoto @ 2026-09-03 1:14 UTC (permalink / raw)
To: Jarkko Nikula, Jaroslav Kysela, Liam Girdwood, Mark Brown,
Sen Wang, Takashi Iwai
Cc: linux-sound
We can use .auto_selectable_formats. Let's adds it.
Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
---
sound/soc/ti/davinci-i2s.c | 14 +++++++++++++-
sound/soc/ti/davinci-mcasp.c | 14 ++++++++++++++
sound/soc/ti/omap-mcbsp.c | 12 ++++++++++++
3 files changed, 39 insertions(+), 1 deletion(-)
diff --git a/sound/soc/ti/davinci-i2s.c b/sound/soc/ti/davinci-i2s.c
index 059967f0e632c..ec7eb2f19b6fc 100644
--- a/sound/soc/ti/davinci-i2s.c
+++ b/sound/soc/ti/davinci-i2s.c
@@ -743,6 +743,17 @@ static int davinci_i2s_dai_probe(struct snd_soc_dai *dai)
return 0;
}
+static const u64 davinci_i2s_selectable_formats =
+ SND_SOC_POSSIBLE_DAIFMT_CONT |
+ SND_SOC_POSSIBLE_DAIFMT_GATED |
+ SND_SOC_POSSIBLE_DAIFMT_I2S |
+ SND_SOC_POSSIBLE_DAIFMT_DSP_A |
+ SND_SOC_POSSIBLE_DAIFMT_DSP_B |
+ SND_SOC_POSSIBLE_DAIFMT_NB_NF |
+ SND_SOC_POSSIBLE_DAIFMT_NB_IF |
+ SND_SOC_POSSIBLE_DAIFMT_IB_NF |
+ SND_SOC_POSSIBLE_DAIFMT_IB_IF;
+
static const struct snd_soc_dai_ops davinci_i2s_dai_ops = {
.probe = davinci_i2s_dai_probe,
.shutdown = davinci_i2s_shutdown,
@@ -752,7 +763,8 @@ static const struct snd_soc_dai_ops davinci_i2s_dai_ops = {
.set_fmt = davinci_i2s_set_dai_fmt,
.set_clkdiv = davinci_i2s_dai_set_clkdiv,
.set_tdm_slot = davinci_i2s_set_tdm_slot,
-
+ .auto_selectable_formats = &davinci_i2s_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver davinci_i2s_dai = {
diff --git a/sound/soc/ti/davinci-mcasp.c b/sound/soc/ti/davinci-mcasp.c
index 79239131b6598..ad9e194a3d0d1 100644
--- a/sound/soc/ti/davinci-mcasp.c
+++ b/sound/soc/ti/davinci-mcasp.c
@@ -1993,6 +1993,18 @@ static int davinci_mcasp_dai_probe(struct snd_soc_dai *dai)
return 0;
}
+static const u64 davinci_mcasp_selectable_formats =
+ SND_SOC_POSSIBLE_DAIFMT_DSP_A |
+ SND_SOC_POSSIBLE_DAIFMT_DSP_B |
+ SND_SOC_POSSIBLE_DAIFMT_AC97 |
+ SND_SOC_POSSIBLE_DAIFMT_I2S |
+ SND_SOC_POSSIBLE_DAIFMT_RIGHT_J |
+ SND_SOC_POSSIBLE_DAIFMT_LEFT_J |
+ SND_SOC_POSSIBLE_DAIFMT_IB_NF |
+ SND_SOC_POSSIBLE_DAIFMT_IB_IF |
+ SND_SOC_POSSIBLE_DAIFMT_NB_NF |
+ SND_SOC_POSSIBLE_DAIFMT_NB_IF;
+
static const struct snd_soc_dai_ops davinci_mcasp_dai_ops = {
.probe = davinci_mcasp_dai_probe,
.startup = davinci_mcasp_startup,
@@ -2004,6 +2016,8 @@ static const struct snd_soc_dai_ops davinci_mcasp_dai_ops = {
.set_clkdiv = davinci_mcasp_set_clkdiv,
.set_sysclk = davinci_mcasp_set_sysclk,
.set_tdm_slot = davinci_mcasp_set_tdm_slot,
+ .auto_selectable_formats = &davinci_mcasp_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
#define DAVINCI_MCASP_RATES SNDRV_PCM_RATE_8000_192000
diff --git a/sound/soc/ti/omap-mcbsp.c b/sound/soc/ti/omap-mcbsp.c
index 26af616c33f51..5734388a4e4b1 100644
--- a/sound/soc/ti/omap-mcbsp.c
+++ b/sound/soc/ti/omap-mcbsp.c
@@ -1269,6 +1269,16 @@ static int omap_mcbsp_remove(struct snd_soc_dai *dai)
return 0;
}
+static const u64 mcbsp_mcbsp_selectable_formats =
+ SND_SOC_POSSIBLE_DAIFMT_I2S |
+ SND_SOC_POSSIBLE_DAIFMT_LEFT_J |
+ SND_SOC_POSSIBLE_DAIFMT_DSP_A |
+ SND_SOC_POSSIBLE_DAIFMT_DSP_B |
+ SND_SOC_POSSIBLE_DAIFMT_NB_NF |
+ SND_SOC_POSSIBLE_DAIFMT_NB_IF |
+ SND_SOC_POSSIBLE_DAIFMT_IB_NF |
+ SND_SOC_POSSIBLE_DAIFMT_IB_IF;
+
static const struct snd_soc_dai_ops mcbsp_dai_ops = {
.probe = omap_mcbsp_probe,
.remove = omap_mcbsp_remove,
@@ -1281,6 +1291,8 @@ static const struct snd_soc_dai_ops mcbsp_dai_ops = {
.set_fmt = omap_mcbsp_dai_set_dai_fmt,
.set_clkdiv = omap_mcbsp_dai_set_clkdiv,
.set_sysclk = omap_mcbsp_dai_set_dai_sysclk,
+ .auto_selectable_formats = &mcbsp_mcbsp_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver omap_mcbsp_dai = {
--
2.53.0
^ permalink raw reply related [flat|nested] 28+ messages in thread* [PATCH 19/21] ASoC: uniphier: use .auto_selectable_formats
2026-09-03 1:13 [PATCH 00/21] ASoC: use .auto_selectable_formats Kuninori Morimoto
` (17 preceding siblings ...)
2026-09-03 1:14 ` [PATCH 18/21] ASoC: ti: " Kuninori Morimoto
@ 2026-09-03 1:14 ` Kuninori Morimoto
2026-09-03 1:14 ` [PATCH 20/21] ASoC: ux500: " Kuninori Morimoto
` (2 subsequent siblings)
21 siblings, 0 replies; 28+ messages in thread
From: Kuninori Morimoto @ 2026-09-03 1:14 UTC (permalink / raw)
To: bui duc phuc, Jaroslav Kysela, Kunihiko Hayashi, Liam Girdwood,
Mark Brown, Masami Hiramatsu, Takashi Iwai
Cc: linux-arm-kernel, linux-sound
We can use .auto_selectable_formats. Let's adds it.
Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
---
sound/soc/uniphier/aio-cpu.c | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/sound/soc/uniphier/aio-cpu.c b/sound/soc/uniphier/aio-cpu.c
index 78c82bf42a8f5..b263526f19905 100644
--- a/sound/soc/uniphier/aio-cpu.c
+++ b/sound/soc/uniphier/aio-cpu.c
@@ -440,6 +440,11 @@ static int uniphier_aio_pxs2_probe(struct snd_soc_dai *dai)
return 0;
}
+static const u64 uniphier_aio_selectable_formats =
+ SND_SOC_POSSIBLE_DAIFMT_I2S |
+ SND_SOC_POSSIBLE_DAIFMT_RIGHT_J |
+ SND_SOC_POSSIBLE_DAIFMT_LEFT_J;
+
const struct snd_soc_dai_ops uniphier_aio_i2s_ld11_ops = {
.probe = uniphier_aio_ld11_probe,
.remove = uniphier_aio_dai_remove,
@@ -451,6 +456,8 @@ const struct snd_soc_dai_ops uniphier_aio_i2s_ld11_ops = {
.hw_params = uniphier_aio_hw_params,
.hw_free = uniphier_aio_hw_free,
.prepare = uniphier_aio_prepare,
+ .auto_selectable_formats = &uniphier_aio_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
EXPORT_SYMBOL_GPL(uniphier_aio_i2s_ld11_ops);
@@ -492,6 +499,8 @@ const struct snd_soc_dai_ops uniphier_aio_i2s_pxs2_ops = {
.hw_params = uniphier_aio_hw_params,
.hw_free = uniphier_aio_hw_free,
.prepare = uniphier_aio_prepare,
+ .auto_selectable_formats = &uniphier_aio_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
EXPORT_SYMBOL_GPL(uniphier_aio_i2s_pxs2_ops);
--
2.53.0
^ permalink raw reply related [flat|nested] 28+ messages in thread* [PATCH 20/21] ASoC: ux500: use .auto_selectable_formats
2026-09-03 1:13 [PATCH 00/21] ASoC: use .auto_selectable_formats Kuninori Morimoto
` (18 preceding siblings ...)
2026-09-03 1:14 ` [PATCH 19/21] ASoC: uniphier: " Kuninori Morimoto
@ 2026-09-03 1:14 ` Kuninori Morimoto
2026-09-03 1:14 ` [PATCH 21/21] ASoC: xtensa: " Kuninori Morimoto
2026-09-11 20:12 ` (subset) [PATCH 00/21] ASoC: " Mark Brown
21 siblings, 0 replies; 28+ messages in thread
From: Kuninori Morimoto @ 2026-09-03 1:14 UTC (permalink / raw)
To: Jaroslav Kysela, Liam Girdwood, Mark Brown, Takashi Iwai; +Cc: linux-sound
We can use .auto_selectable_formats. Let's adds it.
Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
---
sound/soc/ux500/ux500_msp_dai.c | 33 ++++++++++++++++++++-------------
1 file changed, 20 insertions(+), 13 deletions(-)
diff --git a/sound/soc/ux500/ux500_msp_dai.c b/sound/soc/ux500/ux500_msp_dai.c
index 499e826d71208..3c760daf9a0dc 100644
--- a/sound/soc/ux500/ux500_msp_dai.c
+++ b/sound/soc/ux500/ux500_msp_dai.c
@@ -681,18 +681,25 @@ static int ux500_msp_dai_of_probe(struct snd_soc_dai *dai)
return 0;
}
-static const struct snd_soc_dai_ops ux500_msp_dai_ops[] = {
- {
- .probe = ux500_msp_dai_of_probe,
- .set_sysclk = ux500_msp_dai_set_dai_sysclk,
- .set_fmt = ux500_msp_dai_set_dai_fmt,
- .set_tdm_slot = ux500_msp_dai_set_tdm_slot,
- .startup = ux500_msp_dai_startup,
- .shutdown = ux500_msp_dai_shutdown,
- .prepare = ux500_msp_dai_prepare,
- .trigger = ux500_msp_dai_trigger,
- .hw_params = ux500_msp_dai_hw_params,
- }
+static const u64 ux500_msp_dai_selectable_formats =
+ SND_SOC_POSSIBLE_DAIFMT_NB_NF |
+ SND_SOC_POSSIBLE_DAIFMT_NB_IF |
+ SND_SOC_POSSIBLE_DAIFMT_I2S |
+ SND_SOC_POSSIBLE_DAIFMT_DSP_A |
+ SND_SOC_POSSIBLE_DAIFMT_DSP_B;
+
+static const struct snd_soc_dai_ops ux500_msp_dai_ops = {
+ .probe = ux500_msp_dai_of_probe,
+ .set_sysclk = ux500_msp_dai_set_dai_sysclk,
+ .set_fmt = ux500_msp_dai_set_dai_fmt,
+ .set_tdm_slot = ux500_msp_dai_set_tdm_slot,
+ .startup = ux500_msp_dai_startup,
+ .shutdown = ux500_msp_dai_shutdown,
+ .prepare = ux500_msp_dai_prepare,
+ .trigger = ux500_msp_dai_trigger,
+ .hw_params = ux500_msp_dai_hw_params,
+ .auto_selectable_formats = &ux500_msp_dai_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver ux500_msp_dai_drv = {
@@ -704,7 +711,7 @@ static struct snd_soc_dai_driver ux500_msp_dai_drv = {
.capture.channels_max = UX500_MSP_MAX_CHANNELS,
.capture.rates = UX500_I2S_RATES,
.capture.formats = UX500_I2S_FORMATS,
- .ops = ux500_msp_dai_ops,
+ .ops = &ux500_msp_dai_ops,
};
static const struct snd_soc_component_driver ux500_msp_component = {
--
2.53.0
^ permalink raw reply related [flat|nested] 28+ messages in thread* [PATCH 21/21] ASoC: xtensa: use .auto_selectable_formats
2026-09-03 1:13 [PATCH 00/21] ASoC: use .auto_selectable_formats Kuninori Morimoto
` (19 preceding siblings ...)
2026-09-03 1:14 ` [PATCH 20/21] ASoC: ux500: " Kuninori Morimoto
@ 2026-09-03 1:14 ` Kuninori Morimoto
2026-09-11 20:12 ` (subset) [PATCH 00/21] ASoC: " Mark Brown
21 siblings, 0 replies; 28+ messages in thread
From: Kuninori Morimoto @ 2026-09-03 1:14 UTC (permalink / raw)
To: Jaroslav Kysela, Liam Girdwood, Mark Brown, Max Filippov,
Takashi Iwai
Cc: linux-sound
We can use .auto_selectable_formats. Let's adds it.
Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
---
sound/soc/xtensa/xtfpga-i2s.c | 12 +++++++++---
1 file changed, 9 insertions(+), 3 deletions(-)
diff --git a/sound/soc/xtensa/xtfpga-i2s.c b/sound/soc/xtensa/xtfpga-i2s.c
index fd0990201b40c..e5e8b72fd817a 100644
--- a/sound/soc/xtensa/xtfpga-i2s.c
+++ b/sound/soc/xtensa/xtfpga-i2s.c
@@ -485,10 +485,16 @@ static const struct snd_soc_component_driver xtfpga_i2s_component = {
.legacy_dai_naming = 1,
};
+static const u64 xtfpga_i2s_selectable_formats =
+ SND_SOC_POSSIBLE_DAIFMT_I2S |
+ SND_SOC_POSSIBLE_DAIFMT_NB_NF;
+
static const struct snd_soc_dai_ops xtfpga_i2s_dai_ops = {
- .startup = xtfpga_i2s_startup,
- .hw_params = xtfpga_i2s_hw_params,
- .set_fmt = xtfpga_i2s_set_fmt,
+ .startup = xtfpga_i2s_startup,
+ .hw_params = xtfpga_i2s_hw_params,
+ .set_fmt = xtfpga_i2s_set_fmt,
+ .auto_selectable_formats = &xtfpga_i2s_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver xtfpga_i2s_dai[] = {
--
2.53.0
^ permalink raw reply related [flat|nested] 28+ messages in thread* Re: (subset) [PATCH 00/21] ASoC: use .auto_selectable_formats
2026-09-03 1:13 [PATCH 00/21] ASoC: use .auto_selectable_formats Kuninori Morimoto
` (20 preceding siblings ...)
2026-09-03 1:14 ` [PATCH 21/21] ASoC: xtensa: " Kuninori Morimoto
@ 2026-09-11 20:12 ` Mark Brown
21 siblings, 0 replies; 28+ messages in thread
From: Mark Brown @ 2026-09-11 20:12 UTC (permalink / raw)
To: Kuninori Morimoto; +Cc: linux-sound
On Thu, 03 Sep 2026 01:13:16 +0000, Kuninori Morimoto wrote:
> ASoC: use .auto_selectable_formats
>
> Hi Mark, all
>
> I'm now posting "use .auto_selectable_formats" for Codecs.
> This is "use .auto_selectable_formats" for each vendor.
>
> [...]
Applied to
https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git for-7.4
Thanks!
[01/21] ASoC: dwc: use .auto_selectable_formats
https://git.kernel.org/broonie/sound/c/04d17816c81e
[03/21] ASoC: hisilicon: use .auto_selectable_formats
https://git.kernel.org/broonie/sound/c/732bac6bd644
[04/21] ASoC: img: use .auto_selectable_formats
https://git.kernel.org/broonie/sound/c/b18ce5ae42ac
[05/21] ASoC: jz4740: use .auto_selectable_formats
https://git.kernel.org/broonie/sound/c/2bc2523c253d
[06/21] ASoC: kirkwood: use .auto_selectable_formats
https://git.kernel.org/broonie/sound/c/0dab4c4fe6c8
[07/21] ASoC: loongson: use .auto_selectable_formats
https://git.kernel.org/broonie/sound/c/47afd963102b
[09/21] ASoC: mxs: use .auto_selectable_formats
https://git.kernel.org/broonie/sound/c/d83c51012372
[10/21] ASoC: pxa: use .auto_selectable_formats
https://git.kernel.org/broonie/sound/c/1eae5ea3637d
[11/21] ASoC: renesas: use .auto_selectable_formats
https://git.kernel.org/broonie/sound/c/0d0f03f34a4d
[12/21] ASoC: rockchip: use .auto_selectable_formats
https://git.kernel.org/broonie/sound/c/d39bf59dbb6a
[14/21] ASoC: sti: use .auto_selectable_formats
https://git.kernel.org/broonie/sound/c/da4d9d64d6cb
[15/21] ASoC: stm: use .auto_selectable_formats
https://git.kernel.org/broonie/sound/c/419884c9f124
[16/21] ASoC: sunxi: use .auto_selectable_formats
https://git.kernel.org/broonie/sound/c/e64e684cf206
[17/21] ASoC: tegra: use .auto_selectable_formats
https://git.kernel.org/broonie/sound/c/17e25fe32974
[18/21] ASoC: ti: use .auto_selectable_formats
https://git.kernel.org/broonie/sound/c/768d917175b2
[19/21] ASoC: uniphier: use .auto_selectable_formats
https://git.kernel.org/broonie/sound/c/ebf365cf2623
[20/21] ASoC: ux500: use .auto_selectable_formats
https://git.kernel.org/broonie/sound/c/7bbcb8bac273
[21/21] ASoC: xtensa: use .auto_selectable_formats
https://git.kernel.org/broonie/sound/c/514d0b41854c
All being well this means that it will be integrated into the linux-next
tree (usually sometime in the next 24 hours) and sent to Linus during
the next merge window (or sooner if it is a bug fix), however if
problems are discovered then the patch may be dropped or reverted.
You may get further e-mails resulting from automated or manual testing
and review of the tree, please engage with people reporting problems and
send followup patches addressing any issues that are reported if needed.
If any updates are required or you are submitting further changes they
should be sent as incremental updates against current git, existing
patches will not be replaced.
Please add any relevant lists and maintainers to the CCs when replying
to this mail.
Thanks,
Mark
^ permalink raw reply [flat|nested] 28+ messages in thread