* [PATCH 00/44] ASoC: codec: use .auto_selectable_formats
@ 2026-08-04 0:40 Kuninori Morimoto
2026-08-04 0:40 ` [PATCH 01/44] ASoC: codecs: 88pm860x: " Kuninori Morimoto
` (43 more replies)
0 siblings, 44 replies; 54+ messages in thread
From: Kuninori Morimoto @ 2026-08-04 0:40 UTC (permalink / raw)
To: Mark Brown; +Cc: linux-sound
Hi Mark, all
This is Step2 of "use .auto_selectable_formats" patch-set
o: done
x: this patch-set
[o] Step1: ASoC: a to b
[x] Step2: ASoC: codec: ...
[ ] Step3: ASoC: d to r
[ ] Step4: ASoC: r to x
Current ASoC supports snd_soc_daifmt_parse_format() which can specify DAI
format by "dai-format" property from DT.
But strictly speaking, it is SW settings, so doesn't match to DT's policy.
Current ASoC is supporting auto format select via
snd_soc_dai_ops :: .auto_selectable_formats.
But the user is very few today.
DT doesn't need to specify the DAI format via "dai-format", if both CPU
and Codec drivers were supporting .auto_selectable_formats. It will be
automatically selected from .auto_selectable_formats.
One note is that auto select might not find best format on some CPU/Codec
combination. So "dai-format" is necessary anyway.
Kuninori Morimoto (44):
ASoC: codecs: 88pm860x: use .auto_selectable_formats
ASoC: codecs: ad1*: use .auto_selectable_formats
ASoC: codecs: ab8500: use .auto_selectable_formats
ASoC: codecs: adau*: use .auto_selectable_formats
ASoC: codecs: adav80x: use .auto_selectable_formats
ASoC: codecs: ak4*: use .auto_selectable_formats
ASoC: codecs: ak5*: use .auto_selectable_formats
ASoC: codecs: alc56*: use .auto_selectable_formats
ASoC: codecs: arizona: use .auto_selectable_formats
ASoC: codecs: cpcap: use .auto_selectable_formats
ASoC: codecs: cros_ec_codec: use .auto_selectable_formats
ASoC: codecs: cs35l*: use .auto_selectable_formats
ASoC: codecs: cs42*: use .auto_selectable_formats
ASoC: codecs: cs5*: use .auto_selectable_formats
ASoC: codecs: cx2072x: use .auto_selectable_formats
ASoC: codecs: da*: use .auto_selectable_formats
ASoC: codecs: es*: use .auto_selectable_formats
ASoC: codecs: inno_rk3036: use .auto_selectable_formats
ASoC: codecs: isabelle: use .auto_selectable_formats
ASoC: codecs: lm49453: use .auto_selectable_formats
ASoC: codecs: lochnagar-sc: use .auto_selectable_formats
ASoC: codecs: madera: use .auto_selectable_formats
ASoC: codecs: max*: use .auto_selectable_formats
ASoC: codecs: mc13783: use .auto_selectable_formats
ASoC: codecs: ml26124: use .auto_selectable_formats
ASoC: codecs: nau*: use .auto_selectable_formats
ASoC: codecs: ntp8*: use .auto_selectable_formats
ASoC: codecs: rk33*: use .auto_selectable_formats
ASoC: codecs: rtq912*: use .auto_selectable_formats
ASoC: codecs: rt*: use .auto_selectable_formats
ASoC: codecs: sgtl5000: use .auto_selectable_formats
ASoC: codecs: si476x: use .auto_selectable_formats
ASoC: codecs: sma130*: use .auto_selectable_formats
ASoC: codecs: src4xxx: use .auto_selectable_formats
ASoC: codecs: ssm*: use .auto_selectable_formats
ASoC: codecs: sta*: use .auto_selectable_formats
ASoC: codecs: tas*: use .auto_selectable_formats
ASoC: codecs: tfa9879: use .auto_selectable_formats
ASoC: codecs: tlv320*: use .auto_selectable_formats
ASoC: codecs: tscs454: use .auto_selectable_formats
ASoC: codecs: twl4030: use .auto_selectable_formats
ASoC: codecs: uda13*: use .auto_selectable_formats
ASoC: codecs: wm*: use .auto_selectable_formats
ASoC: codecs: zl38060: use .auto_selectable_formats
sound/soc/codecs/88pm860x-codec.c | 6 ++++++
sound/soc/codecs/ab8500-codec.c | 13 +++++++++++++
sound/soc/codecs/ad1836.c | 6 ++++++
sound/soc/codecs/ad193x.c | 10 ++++++++++
sound/soc/codecs/adau1372.c | 12 ++++++++++++
sound/soc/codecs/adau1373.c | 12 ++++++++++++
sound/soc/codecs/adau1701.c | 11 +++++++++++
sound/soc/codecs/adau17x1.c | 13 +++++++++++++
sound/soc/codecs/adau1977.c | 13 +++++++++++++
sound/soc/codecs/adau7118.c | 12 ++++++++++++
sound/soc/codecs/adav80x.c | 8 ++++++++
sound/soc/codecs/ak4104.c | 7 +++++++
sound/soc/codecs/ak4118.c | 7 +++++++
sound/soc/codecs/ak4458.c | 9 +++++++++
sound/soc/codecs/ak4535.c | 6 ++++++
sound/soc/codecs/ak4642.c | 6 ++++++
sound/soc/codecs/ak4671.c | 7 +++++++
sound/soc/codecs/ak5386.c | 6 ++++++
sound/soc/codecs/ak5558.c | 7 +++++++
sound/soc/codecs/alc5623.c | 11 +++++++++++
sound/soc/codecs/alc5632.c | 13 +++++++++++++
sound/soc/codecs/arizona.c | 12 ++++++++++++
sound/soc/codecs/cpcap.c | 15 +++++++++++++++
sound/soc/codecs/cros_ec_codec.c | 8 ++++++++
sound/soc/codecs/cs35l33.c | 6 ++++++
sound/soc/codecs/cs35l35.c | 8 ++++++++
sound/soc/codecs/cs35l36.c | 12 ++++++++++++
sound/soc/codecs/cs35l41.c | 10 ++++++++++
sound/soc/codecs/cs35l45.c | 10 ++++++++++
sound/soc/codecs/cs35l56.c | 10 ++++++++++
sound/soc/codecs/cs40l50-codec.c | 9 +++++++++
sound/soc/codecs/cs4234.c | 9 +++++++++
sound/soc/codecs/cs4265.c | 7 +++++++
sound/soc/codecs/cs4270.c | 6 ++++++
sound/soc/codecs/cs4271.c | 6 ++++++
sound/soc/codecs/cs42l42.c | 9 +++++++++
sound/soc/codecs/cs42l43.c | 12 ++++++++++++
sound/soc/codecs/cs42l51.c | 7 +++++++
sound/soc/codecs/cs42l52.c | 13 +++++++++++++
sound/soc/codecs/cs42l56.c | 8 ++++++++
sound/soc/codecs/cs42l73.c | 7 +++++++
sound/soc/codecs/cs42l84.c | 6 ++++++
sound/soc/codecs/cs42xx8.c | 8 ++++++++
sound/soc/codecs/cs43130.c | 14 ++++++++++++++
sound/soc/codecs/cs4341.c | 8 ++++++++
sound/soc/codecs/cs4349.c | 7 +++++++
sound/soc/codecs/cs48l32.c | 12 ++++++++++++
sound/soc/codecs/cs530x.c | 9 +++++++++
sound/soc/codecs/cs53l30.c | 8 ++++++++
sound/soc/codecs/cx2072x.c | 12 ++++++++++++
sound/soc/codecs/da7210.c | 7 +++++++
sound/soc/codecs/da7218.c | 12 ++++++++++++
sound/soc/codecs/da7219.c | 12 ++++++++++++
sound/soc/codecs/da732x.c | 17 +++++++++++++++++
sound/soc/codecs/da9055.c | 8 ++++++++
sound/soc/codecs/es7134.c | 6 ++++++
sound/soc/codecs/es7241.c | 7 +++++++
sound/soc/codecs/es8311.c | 18 ++++++++++++++++++
sound/soc/codecs/es8316.c | 9 +++++++++
sound/soc/codecs/es8323.c | 13 +++++++++++++
sound/soc/codecs/es8326.c | 9 +++++++++
sound/soc/codecs/es8328.c | 7 +++++++
sound/soc/codecs/es8375.c | 12 ++++++++++++
sound/soc/codecs/es8389.c | 9 +++++++++
sound/soc/codecs/inno_rk3036.c | 12 ++++++++++++
sound/soc/codecs/isabelle.c | 13 +++++++++++++
sound/soc/codecs/lm49453.c | 15 +++++++++++++++
sound/soc/codecs/lochnagar-sc.c | 8 ++++++++
sound/soc/codecs/madera.c | 12 ++++++++++++
sound/soc/codecs/max98088.c | 12 ++++++++++++
sound/soc/codecs/max98090.c | 12 ++++++++++++
sound/soc/codecs/max98095.c | 14 ++++++++++++++
sound/soc/codecs/max98371.c | 7 +++++++
sound/soc/codecs/max98373-i2c.c | 10 ++++++++++
sound/soc/codecs/max98388.c | 10 ++++++++++
sound/soc/codecs/max98390.c | 10 ++++++++++
sound/soc/codecs/max98396.c | 12 ++++++++++++
sound/soc/codecs/max9850.c | 11 +++++++++++
sound/soc/codecs/max98520.c | 10 ++++++++++
sound/soc/codecs/max9860.c | 12 ++++++++++++
sound/soc/codecs/max9867.c | 10 ++++++++++
sound/soc/codecs/max98925.c | 8 ++++++++
sound/soc/codecs/max98926.c | 8 ++++++++
sound/soc/codecs/max98927.c | 10 ++++++++++
sound/soc/codecs/mc13783.c | 12 ++++++++++++
sound/soc/codecs/ml26124.c | 6 ++++++
sound/soc/codecs/nau8325.c | 11 +++++++++++
sound/soc/codecs/nau8540.c | 11 +++++++++++
sound/soc/codecs/nau8810.c | 12 ++++++++++++
sound/soc/codecs/nau8821.c | 11 +++++++++++
sound/soc/codecs/nau8822.c | 12 ++++++++++++
sound/soc/codecs/nau8824.c | 11 +++++++++++
sound/soc/codecs/nau8825.c | 11 +++++++++++
sound/soc/codecs/ntp8835.c | 7 +++++++
sound/soc/codecs/ntp8918.c | 7 +++++++
sound/soc/codecs/rk3308_codec.c | 11 +++++++++++
sound/soc/codecs/rk3328_codec.c | 9 +++++++++
sound/soc/codecs/rt1011.c | 10 ++++++++++
sound/soc/codecs/rt1015.c | 10 ++++++++++
sound/soc/codecs/rt1016.c | 10 ++++++++++
sound/soc/codecs/rt1019.c | 10 ++++++++++
sound/soc/codecs/rt1305.c | 10 ++++++++++
sound/soc/codecs/rt1308.c | 10 ++++++++++
sound/soc/codecs/rt1318.c | 10 ++++++++++
sound/soc/codecs/rt274.c | 8 ++++++++
sound/soc/codecs/rt286.c | 8 ++++++++
sound/soc/codecs/rt298.c | 8 ++++++++
sound/soc/codecs/rt5514.c | 12 ++++++++++++
sound/soc/codecs/rt5616.c | 10 ++++++++++
sound/soc/codecs/rt5631.c | 10 ++++++++++
sound/soc/codecs/rt5640.c | 10 ++++++++++
sound/soc/codecs/rt5645.c | 10 ++++++++++
sound/soc/codecs/rt5651.c | 10 ++++++++++
sound/soc/codecs/rt5659.c | 10 ++++++++++
sound/soc/codecs/rt5660.c | 10 ++++++++++
sound/soc/codecs/rt5663.c | 10 ++++++++++
sound/soc/codecs/rt5665.c | 10 ++++++++++
sound/soc/codecs/rt5668.c | 14 ++++++++++++++
sound/soc/codecs/rt5670.c | 10 ++++++++++
sound/soc/codecs/rt5677.c | 10 ++++++++++
sound/soc/codecs/rt5682.c | 14 ++++++++++++++
sound/soc/codecs/rt5682s.c | 14 ++++++++++++++
sound/soc/codecs/rt9120.c | 9 +++++++++
sound/soc/codecs/rt9123.c | 9 +++++++++
sound/soc/codecs/rtq9124.c | 9 +++++++++
sound/soc/codecs/rtq9128.c | 9 +++++++++
sound/soc/codecs/sgtl5000.c | 11 +++++++++++
sound/soc/codecs/si476x.c | 18 ++++++++++++++++++
sound/soc/codecs/sma1303.c | 13 +++++++++++++
sound/soc/codecs/sma1307.c | 13 +++++++++++++
sound/soc/codecs/src4xxx.c | 8 ++++++++
sound/soc/codecs/ssm2518.c | 13 +++++++++++++
sound/soc/codecs/ssm2602.c | 13 +++++++++++++
sound/soc/codecs/ssm3515.c | 10 ++++++++++
sound/soc/codecs/ssm4567.c | 13 +++++++++++++
sound/soc/codecs/sta32x.c | 9 +++++++++
sound/soc/codecs/sta350.c | 9 +++++++++
sound/soc/codecs/sta529.c | 7 +++++++
sound/soc/codecs/tas2552.c | 14 ++++++++++++++
sound/soc/codecs/tas2562.c | 10 ++++++++++
sound/soc/codecs/tas2764.c | 12 ++++++++++++
sound/soc/codecs/tas2770.c | 12 ++++++++++++
sound/soc/codecs/tas2780.c | 10 ++++++++++
sound/soc/codecs/tas5086.c | 7 +++++++
sound/soc/codecs/tas571x.c | 7 +++++++
sound/soc/codecs/tas5720.c | 9 +++++++++
sound/soc/codecs/tas6424.c | 9 +++++++++
sound/soc/codecs/tfa9879.c | 9 +++++++++
sound/soc/codecs/tlv320adc3xxx.c | 14 ++++++++++++++
sound/soc/codecs/tlv320adcx140.c | 12 ++++++++++++
sound/soc/codecs/tlv320aic23.c | 9 +++++++++
sound/soc/codecs/tlv320aic26.c | 8 ++++++++
sound/soc/codecs/tlv320aic31xx.c | 11 +++++++++++
sound/soc/codecs/tlv320aic32x4.c | 8 ++++++++
sound/soc/codecs/tlv320aic3x.c | 14 ++++++++++++++
sound/soc/codecs/tlv320dac33.c | 8 ++++++++
sound/soc/codecs/tscs454.c | 15 +++++++++++++++
sound/soc/codecs/twl4030.c | 12 ++++++++++++
sound/soc/codecs/uda1334.c | 6 ++++++
sound/soc/codecs/uda1342.c | 7 +++++++
sound/soc/codecs/uda1380.c | 11 +++++++++++
sound/soc/codecs/wm2200.c | 10 ++++++++++
sound/soc/codecs/wm5100.c | 10 ++++++++++
sound/soc/codecs/wm8350.c | 13 +++++++++++++
sound/soc/codecs/wm8400.c | 9 +++++++++
sound/soc/codecs/wm8510.c | 12 ++++++++++++
sound/soc/codecs/wm8523.c | 13 +++++++++++++
sound/soc/codecs/wm8524.c | 6 ++++++
sound/soc/codecs/wm8580.c | 15 +++++++++++++++
sound/soc/codecs/wm8711.c | 13 +++++++++++++
sound/soc/codecs/wm8728.c | 9 +++++++++
sound/soc/codecs/wm8731.c | 13 +++++++++++++
sound/soc/codecs/wm8737.c | 11 +++++++++++
sound/soc/codecs/wm8741.c | 13 +++++++++++++
sound/soc/codecs/wm8750.c | 13 +++++++++++++
sound/soc/codecs/wm8753.c | 20 ++++++++++++++++++++
sound/soc/codecs/wm8770.c | 11 +++++++++++
sound/soc/codecs/wm8776.c | 13 +++++++++++++
sound/soc/codecs/wm8804.c | 15 ++++++++++++++-
sound/soc/codecs/wm8900.c | 18 ++++++++++++++++++
sound/soc/codecs/wm8903.c | 18 ++++++++++++++++++
sound/soc/codecs/wm8904.c | 18 ++++++++++++++++++
sound/soc/codecs/wm8940.c | 13 +++++++++++++
sound/soc/codecs/wm8955.c | 18 ++++++++++++++++++
sound/soc/codecs/wm8960.c | 13 +++++++++++++
sound/soc/codecs/wm8961.c | 18 ++++++++++++++++++
sound/soc/codecs/wm8962.c | 13 +++++++++++++
sound/soc/codecs/wm8971.c | 13 +++++++++++++
sound/soc/codecs/wm8974.c | 12 ++++++++++++
sound/soc/codecs/wm8978.c | 12 ++++++++++++
sound/soc/codecs/wm8983.c | 12 ++++++++++++
sound/soc/codecs/wm8985.c | 18 ++++++++++++++++++
sound/soc/codecs/wm8988.c | 13 +++++++++++++
sound/soc/codecs/wm8990.c | 9 +++++++++
sound/soc/codecs/wm8991.c | 9 +++++++++
sound/soc/codecs/wm8993.c | 18 ++++++++++++++++++
sound/soc/codecs/wm8994.c | 20 ++++++++++++++++++++
sound/soc/codecs/wm8995.c | 20 ++++++++++++++++++++
sound/soc/codecs/wm8996.c | 12 ++++++++++++
sound/soc/codecs/wm9081.c | 18 ++++++++++++++++++
sound/soc/codecs/wm9713.c | 13 +++++++++++++
sound/soc/codecs/zl38060.c | 6 ++++++
202 files changed, 2173 insertions(+), 1 deletion(-)
--
2.53.0
^ permalink raw reply [flat|nested] 54+ messages in thread
* [PATCH 01/44] ASoC: codecs: 88pm860x: use .auto_selectable_formats
2026-08-04 0:40 [PATCH 00/44] ASoC: codec: use .auto_selectable_formats Kuninori Morimoto
@ 2026-08-04 0:40 ` Kuninori Morimoto
2026-08-04 0:40 ` [PATCH 02/44] ASoC: codecs: ad1*: " Kuninori Morimoto
` (42 subsequent siblings)
43 siblings, 0 replies; 54+ messages in thread
From: Kuninori Morimoto @ 2026-08-04 0:40 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/codecs/88pm860x-codec.c | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/sound/soc/codecs/88pm860x-codec.c b/sound/soc/codecs/88pm860x-codec.c
index b4f5b24cde456..7596227fbccfc 100644
--- a/sound/soc/codecs/88pm860x-codec.c
+++ b/sound/soc/codecs/88pm860x-codec.c
@@ -1136,11 +1136,15 @@ static int pm860x_set_bias_level(struct snd_soc_component *component,
return 0;
}
+static const u64 pm860x_selectable_formats = SND_SOC_POSSIBLE_DAIFMT_I2S;
+
static const struct snd_soc_dai_ops pm860x_pcm_dai_ops = {
.mute_stream = pm860x_mute_stream,
.hw_params = pm860x_pcm_hw_params,
.set_fmt = pm860x_pcm_set_dai_fmt,
.set_sysclk = pm860x_set_dai_sysclk,
+ .auto_selectable_formats = &pm860x_selectable_formats,
+ .num_auto_selectable_formats = 1,
.no_capture_mute = 1,
};
@@ -1149,6 +1153,8 @@ static const struct snd_soc_dai_ops pm860x_i2s_dai_ops = {
.hw_params = pm860x_i2s_hw_params,
.set_fmt = pm860x_i2s_set_dai_fmt,
.set_sysclk = pm860x_set_dai_sysclk,
+ .auto_selectable_formats = &pm860x_selectable_formats,
+ .num_auto_selectable_formats = 1,
.no_capture_mute = 1,
};
--
2.53.0
^ permalink raw reply related [flat|nested] 54+ messages in thread
* [PATCH 02/44] ASoC: codecs: ad1*: use .auto_selectable_formats
2026-08-04 0:40 [PATCH 00/44] ASoC: codec: use .auto_selectable_formats Kuninori Morimoto
2026-08-04 0:40 ` [PATCH 01/44] ASoC: codecs: 88pm860x: " Kuninori Morimoto
@ 2026-08-04 0:40 ` Kuninori Morimoto
2026-08-04 8:52 ` Nuno Sá
2026-08-04 0:40 ` [PATCH 03/44] ASoC: codecs: ab8500: " Kuninori Morimoto
` (41 subsequent siblings)
43 siblings, 1 reply; 54+ messages in thread
From: Kuninori Morimoto @ 2026-08-04 0:40 UTC (permalink / raw)
To: Jaroslav Kysela, Lars-Peter Clausen, Liam Girdwood, Mark Brown,
"Nuno Sá", 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/codecs/ad1836.c | 6 ++++++
sound/soc/codecs/ad193x.c | 10 ++++++++++
2 files changed, 16 insertions(+)
diff --git a/sound/soc/codecs/ad1836.c b/sound/soc/codecs/ad1836.c
index 8afeadcaf8b09..dbea83bd49b69 100644
--- a/sound/soc/codecs/ad1836.c
+++ b/sound/soc/codecs/ad1836.c
@@ -193,9 +193,15 @@ static int ad1836_hw_params(struct snd_pcm_substream *substream,
return 0;
}
+static const u64 ad1836_selectable_formats =
+ SND_SOC_POSSIBLE_DAIFMT_DSP_A |
+ SND_SOC_POSSIBLE_DAIFMT_IB_IF;
+
static const struct snd_soc_dai_ops ad1836_dai_ops = {
.hw_params = ad1836_hw_params,
.set_fmt = ad1836_set_dai_fmt,
+ .auto_selectable_formats = &ad1836_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
#define AD183X_DAI(_name, num_dacs, num_adcs) \
diff --git a/sound/soc/codecs/ad193x.c b/sound/soc/codecs/ad193x.c
index b93531c3a9a40..9841c779b1752 100644
--- a/sound/soc/codecs/ad193x.c
+++ b/sound/soc/codecs/ad193x.c
@@ -394,6 +394,14 @@ static int ad193x_startup(struct snd_pcm_substream *substream,
&constr);
}
+static const u64 ad193x_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 ad193x_dai_ops = {
.startup = ad193x_startup,
.hw_params = ad193x_hw_params,
@@ -401,6 +409,8 @@ static const struct snd_soc_dai_ops ad193x_dai_ops = {
.set_tdm_slot = ad193x_set_tdm_slot,
.set_sysclk = ad193x_set_dai_sysclk,
.set_fmt = ad193x_set_dai_fmt,
+ .auto_selectable_formats = &ad193x_selectable_formats,
+ .num_auto_selectable_formats = 1,
.no_capture_mute = 1,
};
--
2.53.0
^ permalink raw reply related [flat|nested] 54+ messages in thread
* [PATCH 03/44] ASoC: codecs: ab8500: use .auto_selectable_formats
2026-08-04 0:40 [PATCH 00/44] ASoC: codec: use .auto_selectable_formats Kuninori Morimoto
2026-08-04 0:40 ` [PATCH 01/44] ASoC: codecs: 88pm860x: " Kuninori Morimoto
2026-08-04 0:40 ` [PATCH 02/44] ASoC: codecs: ad1*: " Kuninori Morimoto
@ 2026-08-04 0:40 ` Kuninori Morimoto
2026-08-04 0:40 ` [PATCH 04/44] ASoC: codecs: adau*: " Kuninori Morimoto
` (40 subsequent siblings)
43 siblings, 0 replies; 54+ messages in thread
From: Kuninori Morimoto @ 2026-08-04 0:40 UTC (permalink / raw)
To: Jaroslav Kysela, Liam Girdwood, Mark Brown, Takashi Iwai,
"Uwe Kleine-König (The Capable Hub)"
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/codecs/ab8500-codec.c | 13 +++++++++++++
1 file changed, 13 insertions(+)
diff --git a/sound/soc/codecs/ab8500-codec.c b/sound/soc/codecs/ab8500-codec.c
index 2cf96cbdd294b..e315638499b69 100644
--- a/sound/soc/codecs/ab8500-codec.c
+++ b/sound/soc/codecs/ab8500-codec.c
@@ -2079,9 +2079,22 @@ static int ab8500_codec_set_dai_tdm_slot(struct snd_soc_dai *dai,
return 0;
}
+static const u64 ab8500_selectable_formats =
+ SND_SOC_POSSIBLE_DAIFMT_I2S |
+ 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_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 ab8500_codec_ops = {
.set_fmt = ab8500_codec_set_dai_fmt,
.set_tdm_slot = ab8500_codec_set_dai_tdm_slot,
+ .auto_selectable_formats = &ab8500_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver ab8500_codec_dai[] = {
--
2.53.0
^ permalink raw reply related [flat|nested] 54+ messages in thread
* [PATCH 04/44] ASoC: codecs: adau*: use .auto_selectable_formats
2026-08-04 0:40 [PATCH 00/44] ASoC: codec: use .auto_selectable_formats Kuninori Morimoto
` (2 preceding siblings ...)
2026-08-04 0:40 ` [PATCH 03/44] ASoC: codecs: ab8500: " Kuninori Morimoto
@ 2026-08-04 0:40 ` Kuninori Morimoto
2026-08-04 8:54 ` Nuno Sá
2026-08-04 0:40 ` [PATCH 05/44] ASoC: codecs: adav80x: " Kuninori Morimoto
` (39 subsequent siblings)
43 siblings, 1 reply; 54+ messages in thread
From: Kuninori Morimoto @ 2026-08-04 0:40 UTC (permalink / raw)
To: Jaroslav Kysela, Lars-Peter Clausen, Liam Girdwood, Mark Brown,
"Nuno Sá", 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/codecs/adau1372.c | 12 ++++++++++++
sound/soc/codecs/adau1373.c | 12 ++++++++++++
sound/soc/codecs/adau1701.c | 11 +++++++++++
sound/soc/codecs/adau17x1.c | 13 +++++++++++++
sound/soc/codecs/adau1977.c | 13 +++++++++++++
sound/soc/codecs/adau7118.c | 12 ++++++++++++
6 files changed, 73 insertions(+)
diff --git a/sound/soc/codecs/adau1372.c b/sound/soc/codecs/adau1372.c
index cc174ec3a1f82..0830d7d2dd7c5 100644
--- a/sound/soc/codecs/adau1372.c
+++ b/sound/soc/codecs/adau1372.c
@@ -881,12 +881,24 @@ static const struct snd_soc_component_driver adau1372_driver = {
.endianness = 1,
};
+static const u64 adau1372_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 adau1372_dai_ops = {
.set_fmt = adau1372_set_dai_fmt,
.set_tdm_slot = adau1372_set_tdm_slot,
.set_tristate = adau1372_set_tristate,
.hw_params = adau1372_hw_params,
.startup = adau1372_startup,
+ .auto_selectable_formats = &adau1372_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
#define ADAU1372_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | \
diff --git a/sound/soc/codecs/adau1373.c b/sound/soc/codecs/adau1373.c
index 5dd961b233ce9..aa7d3a4b9f588 100644
--- a/sound/soc/codecs/adau1373.c
+++ b/sound/soc/codecs/adau1373.c
@@ -1196,10 +1196,22 @@ static int adau1373_set_dai_sysclk(struct snd_soc_dai *dai,
return 0;
}
+static const u64 adau1373_selectable_formats =
+ SND_SOC_POSSIBLE_DAIFMT_I2S |
+ SND_SOC_POSSIBLE_DAIFMT_RIGHT_J |
+ SND_SOC_POSSIBLE_DAIFMT_LEFT_J |
+ 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 adau1373_dai_ops = {
.hw_params = adau1373_hw_params,
.set_sysclk = adau1373_set_dai_sysclk,
.set_fmt = adau1373_set_dai_fmt,
+ .auto_selectable_formats = &adau1373_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
#define ADAU1373_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE | \
diff --git a/sound/soc/codecs/adau1701.c b/sound/soc/codecs/adau1701.c
index 329ab01b62c00..505d52c636278 100644
--- a/sound/soc/codecs/adau1701.c
+++ b/sound/soc/codecs/adau1701.c
@@ -627,11 +627,22 @@ static int adau1701_startup(struct snd_pcm_substream *substream,
#define ADAU1701_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE |\
SNDRV_PCM_FMTBIT_S24_LE)
+static const u64 adau1701_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 adau1701_dai_ops = {
.set_fmt = adau1701_set_dai_fmt,
.hw_params = adau1701_hw_params,
.mute_stream = adau1701_mute_stream,
.startup = adau1701_startup,
+ .auto_selectable_formats = &adau1701_selectable_formats,
+ .num_auto_selectable_formats = 1,
.no_capture_mute = 1,
};
diff --git a/sound/soc/codecs/adau17x1.c b/sound/soc/codecs/adau17x1.c
index 26d7eb437ad18..45ac226b2f1bc 100644
--- a/sound/soc/codecs/adau17x1.c
+++ b/sound/soc/codecs/adau17x1.c
@@ -776,6 +776,17 @@ static int adau17x1_startup(struct snd_pcm_substream *substream,
return 0;
}
+static const u64 adau17x1_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;
+
const struct snd_soc_dai_ops adau17x1_dai_ops = {
.hw_params = adau17x1_hw_params,
.set_sysclk = adau17x1_set_dai_sysclk,
@@ -783,6 +794,8 @@ const struct snd_soc_dai_ops adau17x1_dai_ops = {
.set_pll = adau17x1_set_dai_pll,
.set_tdm_slot = adau17x1_set_dai_tdm_slot,
.startup = adau17x1_startup,
+ .auto_selectable_formats = &adau17x1_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
EXPORT_SYMBOL_GPL(adau17x1_dai_ops);
diff --git a/sound/soc/codecs/adau1977.c b/sound/soc/codecs/adau1977.c
index b42f35b1a6036..b9d9853934216 100644
--- a/sound/soc/codecs/adau1977.c
+++ b/sound/soc/codecs/adau1977.c
@@ -741,6 +741,17 @@ static int adau1977_set_tristate(struct snd_soc_dai *dai, int tristate)
ADAU1977_SAI_OVERTEMP_DRV_HIZ, val);
}
+static const u64 adau1977_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 adau1977_dai_ops = {
.startup = adau1977_startup,
.hw_params = adau1977_hw_params,
@@ -748,6 +759,8 @@ static const struct snd_soc_dai_ops adau1977_dai_ops = {
.set_fmt = adau1977_set_dai_fmt,
.set_tdm_slot = adau1977_set_tdm_slot,
.set_tristate = adau1977_set_tristate,
+ .auto_selectable_formats = &adau1977_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver adau1977_dai = {
diff --git a/sound/soc/codecs/adau7118.c b/sound/soc/codecs/adau7118.c
index 5ddea63a6612c..9749299bc7f2a 100644
--- a/sound/soc/codecs/adau7118.c
+++ b/sound/soc/codecs/adau7118.c
@@ -418,12 +418,24 @@ static int adau7118_component_probe(struct snd_soc_component *component)
return ret;
}
+static const u64 adau7118_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 adau7118_ops = {
.hw_params = adau7118_hw_params,
.set_channel_map = adau7118_set_channel_map,
.set_fmt = adau7118_set_fmt,
.set_tdm_slot = adau7118_set_tdm_slot,
.set_tristate = adau7118_set_tristate,
+ .auto_selectable_formats = &adau7118_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver adau7118_dai = {
--
2.53.0
^ permalink raw reply related [flat|nested] 54+ messages in thread
* [PATCH 05/44] ASoC: codecs: adav80x: use .auto_selectable_formats
2026-08-04 0:40 [PATCH 00/44] ASoC: codec: use .auto_selectable_formats Kuninori Morimoto
` (3 preceding siblings ...)
2026-08-04 0:40 ` [PATCH 04/44] ASoC: codecs: adau*: " Kuninori Morimoto
@ 2026-08-04 0:40 ` Kuninori Morimoto
2026-08-04 8:55 ` Nuno Sá
2026-08-04 0:40 ` [PATCH 06/44] ASoC: codecs: ak4*: " Kuninori Morimoto
` (38 subsequent siblings)
43 siblings, 1 reply; 54+ messages in thread
From: Kuninori Morimoto @ 2026-08-04 0:40 UTC (permalink / raw)
To: Jaroslav Kysela, Lars-Peter Clausen, Liam Girdwood, Mark Brown,
"Nuno Sá", 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/codecs/adav80x.c | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/sound/soc/codecs/adav80x.c b/sound/soc/codecs/adav80x.c
index 8a89187f9c782..e97c72ac9b2b2 100644
--- a/sound/soc/codecs/adav80x.c
+++ b/sound/soc/codecs/adav80x.c
@@ -743,11 +743,19 @@ static void adav80x_dai_shutdown(struct snd_pcm_substream *substream,
adav80x->rate = 0;
}
+static const u64 adav80x_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;
+
static const struct snd_soc_dai_ops adav80x_dai_ops = {
.set_fmt = adav80x_set_dai_fmt,
.hw_params = adav80x_hw_params,
.startup = adav80x_dai_startup,
.shutdown = adav80x_dai_shutdown,
+ .auto_selectable_formats = &adav80x_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
#define ADAV80X_PLAYBACK_RATES (SNDRV_PCM_RATE_32000 | SNDRV_PCM_RATE_44100 | \
--
2.53.0
^ permalink raw reply related [flat|nested] 54+ messages in thread
* [PATCH 06/44] ASoC: codecs: ak4*: use .auto_selectable_formats
2026-08-04 0:40 [PATCH 00/44] ASoC: codec: use .auto_selectable_formats Kuninori Morimoto
` (4 preceding siblings ...)
2026-08-04 0:40 ` [PATCH 05/44] ASoC: codecs: adav80x: " Kuninori Morimoto
@ 2026-08-04 0:40 ` Kuninori Morimoto
2026-08-04 0:41 ` [PATCH 07/44] ASoC: codecs: ak5*: " Kuninori Morimoto
` (37 subsequent siblings)
43 siblings, 0 replies; 54+ messages in thread
From: Kuninori Morimoto @ 2026-08-04 0:40 UTC (permalink / raw)
To: Jaroslav Kysela, Liam Girdwood, Mark Brown, Shengjiu Wang,
Takashi Iwai, "Uwe Kleine-König (The Capable Hub)"
Cc: linux-sound, Uwe Kleine-König (The Capable Hub)
We can use .auto_selectable_formats. Let's adds it.
Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
---
sound/soc/codecs/ak4104.c | 7 +++++++
sound/soc/codecs/ak4118.c | 7 +++++++
sound/soc/codecs/ak4458.c | 9 +++++++++
sound/soc/codecs/ak4535.c | 6 ++++++
sound/soc/codecs/ak4642.c | 6 ++++++
sound/soc/codecs/ak4671.c | 7 +++++++
6 files changed, 42 insertions(+)
diff --git a/sound/soc/codecs/ak4104.c b/sound/soc/codecs/ak4104.c
index 6ea7cb78cd445..5ebc3afccccf6 100644
--- a/sound/soc/codecs/ak4104.c
+++ b/sound/soc/codecs/ak4104.c
@@ -147,9 +147,16 @@ static int ak4104_hw_params(struct snd_pcm_substream *substream,
return 0;
}
+static const u64 ak4101_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 ak4101_dai_ops = {
.hw_params = ak4104_hw_params,
.set_fmt = ak4104_set_dai_fmt,
+ .auto_selectable_formats = &ak4101_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver ak4104_dai = {
diff --git a/sound/soc/codecs/ak4118.c b/sound/soc/codecs/ak4118.c
index 03dadba0b038f..2b96b82d4e40a 100644
--- a/sound/soc/codecs/ak4118.c
+++ b/sound/soc/codecs/ak4118.c
@@ -236,9 +236,16 @@ static int ak4118_hw_params(struct snd_pcm_substream *substream,
return 0;
}
+/* NOTE: Common formats only are auto detected */
+static const u64 ak4118_selectable_formats =
+ SND_SOC_POSSIBLE_DAIFMT_I2S |
+ SND_SOC_POSSIBLE_DAIFMT_LEFT_J;
+
static const struct snd_soc_dai_ops ak4118_dai_ops = {
.hw_params = ak4118_hw_params,
.set_fmt = ak4118_set_dai_fmt,
+ .auto_selectable_formats = &ak4118_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver ak4118_dai = {
diff --git a/sound/soc/codecs/ak4458.c b/sound/soc/codecs/ak4458.c
index f81cd8cebdd89..a74be99e877dd 100644
--- a/sound/soc/codecs/ak4458.c
+++ b/sound/soc/codecs/ak4458.c
@@ -591,12 +591,21 @@ static int ak4458_startup(struct snd_pcm_substream *substream,
&ak4458_rate_constraints);
}
+static const u64 ak4458_selectable_formats =
+ SND_SOC_POSSIBLE_DAIFMT_I2S |
+ SND_SOC_POSSIBLE_DAIFMT_RIGHT_J |
+ SND_SOC_POSSIBLE_DAIFMT_LEFT_J |
+ SND_SOC_POSSIBLE_DAIFMT_DSP_B |
+ SND_SOC_POSSIBLE_DAIFMT_PDM;
+
static const struct snd_soc_dai_ops ak4458_dai_ops = {
.startup = ak4458_startup,
.hw_params = ak4458_hw_params,
.set_fmt = ak4458_set_dai_fmt,
.mute_stream = ak4458_set_dai_mute,
.set_tdm_slot = ak4458_set_tdm_slot,
+ .auto_selectable_formats = &ak4458_selectable_formats,
+ .num_auto_selectable_formats = 1,
.no_capture_mute = 1,
};
diff --git a/sound/soc/codecs/ak4535.c b/sound/soc/codecs/ak4535.c
index 37555674cd157..6cabad4c9f74c 100644
--- a/sound/soc/codecs/ak4535.c
+++ b/sound/soc/codecs/ak4535.c
@@ -346,11 +346,17 @@ static int ak4535_set_bias_level(struct snd_soc_component *component,
SNDRV_PCM_RATE_16000 | SNDRV_PCM_RATE_22050 |\
SNDRV_PCM_RATE_44100 | SNDRV_PCM_RATE_48000)
+static const u64 ak4535_selectable_formats =
+ SND_SOC_POSSIBLE_DAIFMT_I2S |
+ SND_SOC_POSSIBLE_DAIFMT_LEFT_J;
+
static const struct snd_soc_dai_ops ak4535_dai_ops = {
.hw_params = ak4535_hw_params,
.set_fmt = ak4535_set_dai_fmt,
.mute_stream = ak4535_mute,
.set_sysclk = ak4535_set_dai_sysclk,
+ .auto_selectable_formats = &ak4535_selectable_formats,
+ .num_auto_selectable_formats = 1,
.no_capture_mute = 1,
};
diff --git a/sound/soc/codecs/ak4642.c b/sound/soc/codecs/ak4642.c
index 08ec2035b2705..e5266f94fb006 100644
--- a/sound/soc/codecs/ak4642.c
+++ b/sound/soc/codecs/ak4642.c
@@ -493,12 +493,18 @@ static int ak4642_set_bias_level(struct snd_soc_component *component,
return 0;
}
+static const u64 ak4642_selectable_formats =
+ SND_SOC_POSSIBLE_DAIFMT_I2S |
+ SND_SOC_POSSIBLE_DAIFMT_LEFT_J;
+
static const struct snd_soc_dai_ops ak4642_dai_ops = {
.startup = ak4642_dai_startup,
.shutdown = ak4642_dai_shutdown,
.set_sysclk = ak4642_dai_set_sysclk,
.set_fmt = ak4642_dai_set_fmt,
.hw_params = ak4642_dai_hw_params,
+ .auto_selectable_formats = &ak4642_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver ak4642_dai = {
diff --git a/sound/soc/codecs/ak4671.c b/sound/soc/codecs/ak4671.c
index aac54e9d54ee7..1d804f03a21d8 100644
--- a/sound/soc/codecs/ak4671.c
+++ b/sound/soc/codecs/ak4671.c
@@ -582,10 +582,17 @@ static int ak4671_set_bias_level(struct snd_soc_component *component,
#define AK4671_FORMATS SNDRV_PCM_FMTBIT_S16_LE
+static const u64 ak4671_selectable_formats =
+ SND_SOC_POSSIBLE_DAIFMT_I2S |
+ SND_SOC_POSSIBLE_DAIFMT_LEFT_J |
+ SND_SOC_POSSIBLE_DAIFMT_DSP_A;
+
static const struct snd_soc_dai_ops ak4671_dai_ops = {
.hw_params = ak4671_hw_params,
.set_sysclk = ak4671_set_dai_sysclk,
.set_fmt = ak4671_set_dai_fmt,
+ .auto_selectable_formats = &ak4671_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver ak4671_dai = {
--
2.53.0
^ permalink raw reply related [flat|nested] 54+ messages in thread
* [PATCH 07/44] ASoC: codecs: ak5*: use .auto_selectable_formats
2026-08-04 0:40 [PATCH 00/44] ASoC: codec: use .auto_selectable_formats Kuninori Morimoto
` (5 preceding siblings ...)
2026-08-04 0:40 ` [PATCH 06/44] ASoC: codecs: ak4*: " Kuninori Morimoto
@ 2026-08-04 0:41 ` Kuninori Morimoto
2026-08-04 0:41 ` [PATCH 08/44] ASoC: codecs: alc56*: " Kuninori Morimoto
` (36 subsequent siblings)
43 siblings, 0 replies; 54+ messages in thread
From: Kuninori Morimoto @ 2026-08-04 0:41 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/codecs/ak5386.c | 6 ++++++
sound/soc/codecs/ak5558.c | 7 +++++++
2 files changed, 13 insertions(+)
diff --git a/sound/soc/codecs/ak5386.c b/sound/soc/codecs/ak5386.c
index 6525d50b7ab20..933ca90b7e287 100644
--- a/sound/soc/codecs/ak5386.c
+++ b/sound/soc/codecs/ak5386.c
@@ -128,10 +128,16 @@ static int ak5386_hw_free(struct snd_pcm_substream *substream,
return 0;
}
+static const u64 ak5386_selectable_formats =
+ SND_SOC_POSSIBLE_DAIFMT_I2S |
+ SND_SOC_POSSIBLE_DAIFMT_LEFT_J;
+
static const struct snd_soc_dai_ops ak5386_dai_ops = {
.set_fmt = ak5386_set_dai_fmt,
.hw_params = ak5386_hw_params,
.hw_free = ak5386_hw_free,
+ .auto_selectable_formats = &ak5386_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver ak5386_dai = {
diff --git a/sound/soc/codecs/ak5558.c b/sound/soc/codecs/ak5558.c
index 691db6565c20d..0c9cdf9a53bb4 100644
--- a/sound/soc/codecs/ak5558.c
+++ b/sound/soc/codecs/ak5558.c
@@ -285,12 +285,19 @@ static int ak5558_startup(struct snd_pcm_substream *substream,
&ak5558_rate_constraints);
}
+static const u64 ak5558_selectable_formats =
+ SND_SOC_POSSIBLE_DAIFMT_I2S |
+ SND_SOC_POSSIBLE_DAIFMT_LEFT_J |
+ SND_SOC_POSSIBLE_DAIFMT_DSP_B;
+
static const struct snd_soc_dai_ops ak5558_dai_ops = {
.startup = ak5558_startup,
.hw_params = ak5558_hw_params,
.set_fmt = ak5558_set_dai_fmt,
.set_tdm_slot = ak5558_set_tdm_slot,
+ .auto_selectable_formats = &ak5558_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver ak5558_dai = {
--
2.53.0
^ permalink raw reply related [flat|nested] 54+ messages in thread
* [PATCH 08/44] ASoC: codecs: alc56*: use .auto_selectable_formats
2026-08-04 0:40 [PATCH 00/44] ASoC: codec: use .auto_selectable_formats Kuninori Morimoto
` (6 preceding siblings ...)
2026-08-04 0:41 ` [PATCH 07/44] ASoC: codecs: ak5*: " Kuninori Morimoto
@ 2026-08-04 0:41 ` Kuninori Morimoto
2026-08-04 0:41 ` [PATCH 09/44] ASoC: codecs: arizona: " Kuninori Morimoto
` (35 subsequent siblings)
43 siblings, 0 replies; 54+ messages in thread
From: Kuninori Morimoto @ 2026-08-04 0:41 UTC (permalink / raw)
To: Jaroslav Kysela, Liam Girdwood, Mark Brown, Takashi Iwai,
"Uwe Kleine-König (The Capable Hub)"
Cc: linux-sound, Uwe Kleine-König (The Capable Hub)
We can use .auto_selectable_formats. Let's adds it.
Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
---
sound/soc/codecs/alc5623.c | 11 +++++++++++
sound/soc/codecs/alc5632.c | 13 +++++++++++++
2 files changed, 24 insertions(+)
diff --git a/sound/soc/codecs/alc5623.c b/sound/soc/codecs/alc5623.c
index f5a666c493615..96bb1d5927729 100644
--- a/sound/soc/codecs/alc5623.c
+++ b/sound/soc/codecs/alc5623.c
@@ -822,12 +822,23 @@ static int alc5623_set_bias_level(struct snd_soc_component *component,
| SNDRV_PCM_FMTBIT_S24_LE \
| SNDRV_PCM_FMTBIT_S32_LE)
+static const u64 alc5623_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_IB_NF;
+
static const struct snd_soc_dai_ops alc5623_dai_ops = {
.hw_params = alc5623_pcm_hw_params,
.mute_stream = alc5623_mute,
.set_fmt = alc5623_set_dai_fmt,
.set_sysclk = alc5623_set_dai_sysclk,
.set_pll = alc5623_set_dai_pll,
+ .auto_selectable_formats = &alc5623_selectable_formats,
+ .num_auto_selectable_formats = 1,
.no_capture_mute = 1,
};
diff --git a/sound/soc/codecs/alc5632.c b/sound/soc/codecs/alc5632.c
index 2fd3dd7ef8b34..a5e95f3fc2474 100644
--- a/sound/soc/codecs/alc5632.c
+++ b/sound/soc/codecs/alc5632.c
@@ -1003,12 +1003,25 @@ static int alc5632_set_bias_level(struct snd_soc_component *component,
| SNDRV_PCM_FMTBIT_S24_LE \
| SNDRV_PCM_FMTBIT_S32_LE)
+
+static const u64 alc5632_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 alc5632_dai_ops = {
.hw_params = alc5632_pcm_hw_params,
.mute_stream = alc5632_mute,
.set_fmt = alc5632_set_dai_fmt,
.set_sysclk = alc5632_set_dai_sysclk,
.set_pll = alc5632_set_dai_pll,
+ .auto_selectable_formats = &alc5632_selectable_formats,
+ .num_auto_selectable_formats = 1,
.no_capture_mute = 1,
};
--
2.53.0
^ permalink raw reply related [flat|nested] 54+ messages in thread
* [PATCH 09/44] ASoC: codecs: arizona: use .auto_selectable_formats
2026-08-04 0:40 [PATCH 00/44] ASoC: codec: use .auto_selectable_formats Kuninori Morimoto
` (7 preceding siblings ...)
2026-08-04 0:41 ` [PATCH 08/44] ASoC: codecs: alc56*: " Kuninori Morimoto
@ 2026-08-04 0:41 ` Kuninori Morimoto
2026-08-04 0:41 ` [PATCH 10/44] ASoC: codecs: cpcap: " Kuninori Morimoto
` (34 subsequent siblings)
43 siblings, 0 replies; 54+ messages in thread
From: Kuninori Morimoto @ 2026-08-04 0:41 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/codecs/arizona.c | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/sound/soc/codecs/arizona.c b/sound/soc/codecs/arizona.c
index 4411165c37345..5cc9ce03c83fd 100644
--- a/sound/soc/codecs/arizona.c
+++ b/sound/soc/codecs/arizona.c
@@ -2016,6 +2016,16 @@ static int arizona_set_tdm_slot(struct snd_soc_dai *dai, unsigned int tx_mask,
return 0;
}
+static const u64 arizona_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;
+
const struct snd_soc_dai_ops arizona_dai_ops = {
.startup = arizona_startup,
.set_fmt = arizona_set_fmt,
@@ -2023,6 +2033,8 @@ const struct snd_soc_dai_ops arizona_dai_ops = {
.hw_params = arizona_hw_params,
.set_sysclk = arizona_dai_set_sysclk,
.set_tristate = arizona_set_tristate,
+ .auto_selectable_formats = &arizona_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
EXPORT_SYMBOL_GPL(arizona_dai_ops);
--
2.53.0
^ permalink raw reply related [flat|nested] 54+ messages in thread
* [PATCH 10/44] ASoC: codecs: cpcap: use .auto_selectable_formats
2026-08-04 0:40 [PATCH 00/44] ASoC: codec: use .auto_selectable_formats Kuninori Morimoto
` (8 preceding siblings ...)
2026-08-04 0:41 ` [PATCH 09/44] ASoC: codecs: arizona: " Kuninori Morimoto
@ 2026-08-04 0:41 ` Kuninori Morimoto
2026-08-04 0:41 ` [PATCH 11/44] ASoC: codecs: cros_ec_codec: " Kuninori Morimoto
` (33 subsequent siblings)
43 siblings, 0 replies; 54+ messages in thread
From: Kuninori Morimoto @ 2026-08-04 0:41 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/codecs/cpcap.c | 15 +++++++++++++++
1 file changed, 15 insertions(+)
diff --git a/sound/soc/codecs/cpcap.c b/sound/soc/codecs/cpcap.c
index 6b80c455b0747..b8bccf2df859f 100644
--- a/sound/soc/codecs/cpcap.c
+++ b/sound/soc/codecs/cpcap.c
@@ -1253,11 +1253,24 @@ static int cpcap_hifi_set_mute(struct snd_soc_dai *dai, int mute, int direction)
return regmap_update_bits(cpcap->regmap, reg, mask, val);
}
+static const u64 cpcap_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 cpcap_dai_hifi_ops = {
.hw_params = cpcap_hifi_hw_params,
.set_sysclk = cpcap_hifi_set_dai_sysclk,
.set_fmt = cpcap_hifi_set_dai_fmt,
.mute_stream = cpcap_hifi_set_mute,
+ .auto_selectable_formats = &cpcap_selectable_formats,
+ .num_auto_selectable_formats = 1,
.no_capture_mute = 1,
};
@@ -1528,6 +1541,8 @@ static const struct snd_soc_dai_ops cpcap_dai_voice_ops = {
.set_fmt = cpcap_voice_set_dai_fmt,
.set_tdm_slot = cpcap_voice_set_tdm_slot,
.mute_stream = cpcap_voice_set_mute,
+ .auto_selectable_formats = &cpcap_selectable_formats,
+ .num_auto_selectable_formats = 1,
.no_capture_mute = 1,
};
--
2.53.0
^ permalink raw reply related [flat|nested] 54+ messages in thread
* [PATCH 11/44] ASoC: codecs: cros_ec_codec: use .auto_selectable_formats
2026-08-04 0:40 [PATCH 00/44] ASoC: codec: use .auto_selectable_formats Kuninori Morimoto
` (9 preceding siblings ...)
2026-08-04 0:41 ` [PATCH 10/44] ASoC: codecs: cpcap: " Kuninori Morimoto
@ 2026-08-04 0:41 ` Kuninori Morimoto
2026-08-04 3:04 ` Tzung-Bi Shih
2026-08-04 0:41 ` [PATCH 12/44] ASoC: codecs: cs35l*: " Kuninori Morimoto
` (32 subsequent siblings)
43 siblings, 1 reply; 54+ messages in thread
From: Kuninori Morimoto @ 2026-08-04 0:41 UTC (permalink / raw)
To: Benson Leung, Cheng-Yi Chiang, Guenter Roeck, Jaroslav Kysela,
Liam Girdwood, Mark Brown, Takashi Iwai, Tzung-Bi Shih
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/codecs/cros_ec_codec.c | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/sound/soc/codecs/cros_ec_codec.c b/sound/soc/codecs/cros_ec_codec.c
index fd2d5d7f92769..1148e37e29cee 100644
--- a/sound/soc/codecs/cros_ec_codec.c
+++ b/sound/soc/codecs/cros_ec_codec.c
@@ -320,10 +320,18 @@ static int i2s_rx_set_fmt(struct snd_soc_dai *dai, unsigned int fmt)
(uint8_t *)&p, sizeof(p), NULL, 0);
}
+static const u64 i2s_rx_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;
+
static const struct snd_soc_dai_ops i2s_rx_dai_ops = {
.hw_params = i2s_rx_hw_params,
.set_fmt = i2s_rx_set_fmt,
.set_bclk_ratio = i2s_rx_set_bclk_ratio,
+ .auto_selectable_formats = &i2s_rx_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static int i2s_rx_event(struct snd_soc_dapm_widget *w,
--
2.53.0
^ permalink raw reply related [flat|nested] 54+ messages in thread
* [PATCH 12/44] ASoC: codecs: cs35l*: use .auto_selectable_formats
2026-08-04 0:40 [PATCH 00/44] ASoC: codec: use .auto_selectable_formats Kuninori Morimoto
` (10 preceding siblings ...)
2026-08-04 0:41 ` [PATCH 11/44] ASoC: codecs: cros_ec_codec: " Kuninori Morimoto
@ 2026-08-04 0:41 ` Kuninori Morimoto
2026-08-04 17:30 ` Mark Brown
2026-08-04 0:41 ` [PATCH 13/44] ASoC: codecs: cs42*: " Kuninori Morimoto
` (31 subsequent siblings)
43 siblings, 1 reply; 54+ messages in thread
From: Kuninori Morimoto @ 2026-08-04 0:41 UTC (permalink / raw)
To: David Rhodes, Jaroslav Kysela, Liam Girdwood, Mark Brown,
Richard Fitzgerald, 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/codecs/cs35l33.c | 6 ++++++
sound/soc/codecs/cs35l35.c | 8 ++++++++
sound/soc/codecs/cs35l36.c | 12 ++++++++++++
sound/soc/codecs/cs35l41.c | 10 ++++++++++
sound/soc/codecs/cs35l45.c | 10 ++++++++++
sound/soc/codecs/cs35l56.c | 10 ++++++++++
6 files changed, 56 insertions(+)
diff --git a/sound/soc/codecs/cs35l33.c b/sound/soc/codecs/cs35l33.c
index e217da124549a..d0f9231f5e442 100644
--- a/sound/soc/codecs/cs35l33.c
+++ b/sound/soc/codecs/cs35l33.c
@@ -663,12 +663,18 @@ static int cs35l33_component_set_sysclk(struct snd_soc_component *component,
return 0;
}
+static const u64 cs35l33_selectable_formats =
+ SND_SOC_POSSIBLE_DAIFMT_I2S |
+ SND_SOC_POSSIBLE_DAIFMT_DSP_A;
+
static const struct snd_soc_dai_ops cs35l33_ops = {
.startup = cs35l33_pcm_startup,
.set_tristate = cs35l33_set_tristate,
.set_fmt = cs35l33_set_dai_fmt,
.hw_params = cs35l33_pcm_hw_params,
.set_tdm_slot = cs35l33_set_tdm_slot,
+ .auto_selectable_formats = &cs35l33_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver cs35l33_dai = {
diff --git a/sound/soc/codecs/cs35l35.c b/sound/soc/codecs/cs35l35.c
index b2439ec3c19fb..f4f844cafd68d 100644
--- a/sound/soc/codecs/cs35l35.c
+++ b/sound/soc/codecs/cs35l35.c
@@ -657,17 +657,25 @@ static int cs35l35_dai_set_sysclk(struct snd_soc_dai *dai,
return 0;
}
+static const u64 cs35l35_selectable_formats =
+ SND_SOC_POSSIBLE_DAIFMT_I2S |
+ SND_SOC_POSSIBLE_DAIFMT_PDM;
+
static const struct snd_soc_dai_ops cs35l35_ops = {
.startup = cs35l35_pcm_startup,
.set_fmt = cs35l35_set_dai_fmt,
.hw_params = cs35l35_hw_params,
.set_sysclk = cs35l35_dai_set_sysclk,
+ .auto_selectable_formats = &cs35l35_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static const struct snd_soc_dai_ops cs35l35_pdm_ops = {
.startup = cs35l35_pdm_startup,
.set_fmt = cs35l35_set_dai_fmt,
.hw_params = cs35l35_hw_params,
+ .auto_selectable_formats = &cs35l35_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver cs35l35_dai[] = {
diff --git a/sound/soc/codecs/cs35l36.c b/sound/soc/codecs/cs35l36.c
index 89645327945f1..170588be4dbe3 100644
--- a/sound/soc/codecs/cs35l36.c
+++ b/sound/soc/codecs/cs35l36.c
@@ -947,10 +947,22 @@ static const struct cs35l36_pll_config *cs35l36_get_clk_config(
return NULL;
}
+static const u64 cs35l36_selectable_formats =
+ SND_SOC_POSSIBLE_DAIFMT_I2S |
+ SND_SOC_POSSIBLE_DAIFMT_DSP_A |
+ 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 cs35l36_ops = {
.set_fmt = cs35l36_set_dai_fmt,
.hw_params = cs35l36_pcm_hw_params,
.set_sysclk = cs35l36_dai_set_sysclk,
+ .auto_selectable_formats = &cs35l36_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
#define CS35L36_RATES ( \
diff --git a/sound/soc/codecs/cs35l41.c b/sound/soc/codecs/cs35l41.c
index b2a076706c796..d286025183f46 100644
--- a/sound/soc/codecs/cs35l41.c
+++ b/sound/soc/codecs/cs35l41.c
@@ -953,11 +953,21 @@ static void cs35l41_component_remove(struct snd_soc_component *component)
wm_adsp2_component_remove(&cs35l41->dsp, component);
}
+static const u64 cs35l41_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 cs35l41_ops = {
.set_fmt = cs35l41_set_dai_fmt,
.hw_params = cs35l41_pcm_hw_params,
.set_sysclk = cs35l41_dai_set_sysclk,
.set_channel_map = cs35l41_set_channel_map,
+ .auto_selectable_formats = &cs35l41_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
#define CS35L41_RATES ( \
diff --git a/sound/soc/codecs/cs35l45.c b/sound/soc/codecs/cs35l45.c
index a032bb23b4ac7..25a9eb916fa39 100644
--- a/sound/soc/codecs/cs35l45.c
+++ b/sound/soc/codecs/cs35l45.c
@@ -846,12 +846,22 @@ static int cs35l45_mute_stream(struct snd_soc_dai *dai, int mute, int stream)
return 0;
}
+static const u64 cs35l45_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 cs35l45_asp_dai_ops = {
.set_fmt = cs35l45_asp_set_fmt,
.hw_params = cs35l45_asp_hw_params,
.set_tdm_slot = cs35l45_asp_set_tdm_slot,
.set_sysclk = cs35l45_asp_set_sysclk,
.mute_stream = cs35l45_mute_stream,
+ .auto_selectable_formats = &cs35l45_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver cs35l45_dai[] = {
diff --git a/sound/soc/codecs/cs35l56.c b/sound/soc/codecs/cs35l56.c
index 0b7b080939a18..ec3b6621dc614 100644
--- a/sound/soc/codecs/cs35l56.c
+++ b/sound/soc/codecs/cs35l56.c
@@ -603,12 +603,22 @@ static int cs35l56_asp_dai_set_sysclk(struct snd_soc_dai *dai,
return 0;
}
+static const u64 cs35l56_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 cs35l56_ops = {
.probe = cs35l56_asp_dai_probe,
.set_fmt = cs35l56_asp_dai_set_fmt,
.set_tdm_slot = cs35l56_asp_dai_set_tdm_slot,
.hw_params = cs35l56_asp_dai_hw_params,
.set_sysclk = cs35l56_asp_dai_set_sysclk,
+ .auto_selectable_formats = &cs35l56_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static void cs35l56_sdw_dai_shutdown(struct snd_pcm_substream *substream,
--
2.53.0
^ permalink raw reply related [flat|nested] 54+ messages in thread
* [PATCH 13/44] ASoC: codecs: cs42*: use .auto_selectable_formats
2026-08-04 0:40 [PATCH 00/44] ASoC: codec: use .auto_selectable_formats Kuninori Morimoto
` (11 preceding siblings ...)
2026-08-04 0:41 ` [PATCH 12/44] ASoC: codecs: cs35l*: " Kuninori Morimoto
@ 2026-08-04 0:41 ` Kuninori Morimoto
2026-08-04 17:32 ` Mark Brown
2026-08-04 0:41 ` [PATCH 14/44] ASoC: codecs: cs5*: " Kuninori Morimoto
` (30 subsequent siblings)
43 siblings, 1 reply; 54+ messages in thread
From: Kuninori Morimoto @ 2026-08-04 0:41 UTC (permalink / raw)
To: Ben Bright, David Rhodes, Fred Treven, James Ogletree,
Jaroslav Kysela, Liam Girdwood, Mark Brown,
"Martin Povišer", Richard Fitzgerald, 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/codecs/cs40l50-codec.c | 9 +++++++++
sound/soc/codecs/cs4234.c | 9 +++++++++
sound/soc/codecs/cs4265.c | 7 +++++++
sound/soc/codecs/cs4270.c | 6 ++++++
sound/soc/codecs/cs4271.c | 6 ++++++
sound/soc/codecs/cs42l42.c | 9 +++++++++
sound/soc/codecs/cs42l43.c | 12 ++++++++++++
sound/soc/codecs/cs42l51.c | 7 +++++++
sound/soc/codecs/cs42l52.c | 13 +++++++++++++
sound/soc/codecs/cs42l56.c | 8 ++++++++
sound/soc/codecs/cs42l73.c | 7 +++++++
sound/soc/codecs/cs42l84.c | 6 ++++++
sound/soc/codecs/cs42xx8.c | 8 ++++++++
sound/soc/codecs/cs43130.c | 14 ++++++++++++++
sound/soc/codecs/cs4341.c | 8 ++++++++
sound/soc/codecs/cs4349.c | 7 +++++++
sound/soc/codecs/cs48l32.c | 12 ++++++++++++
17 files changed, 148 insertions(+)
diff --git a/sound/soc/codecs/cs40l50-codec.c b/sound/soc/codecs/cs40l50-codec.c
index 6763671630676..698aa59194f4b 100644
--- a/sound/soc/codecs/cs40l50-codec.c
+++ b/sound/soc/codecs/cs40l50-codec.c
@@ -233,10 +233,19 @@ static int cs40l50_set_dai_bclk_ratio(struct snd_soc_dai *dai, unsigned int rati
return 0;
}
+static const u64 cs40l50_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 cs40l50_dai_ops = {
.set_fmt = cs40l50_set_dai_fmt,
.set_bclk_ratio = cs40l50_set_dai_bclk_ratio,
.hw_params = cs40l50_hw_params,
+ .auto_selectable_formats = &cs40l50_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver cs40l50_dai[] = {
diff --git a/sound/soc/codecs/cs4234.c b/sound/soc/codecs/cs4234.c
index a889fbd519a86..a6ead1ee37081 100644
--- a/sound/soc/codecs/cs4234.c
+++ b/sound/soc/codecs/cs4234.c
@@ -560,11 +560,20 @@ static int cs4234_dai_set_tdm_slot(struct snd_soc_dai *dai, unsigned int tx_mask
return 0;
}
+static const u64 cs4234_selectable_formats =
+ SND_SOC_POSSIBLE_DAIFMT_I2S |
+ SND_SOC_POSSIBLE_DAIFMT_LEFT_J |
+ 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 cs4234_dai_ops = {
.set_fmt = cs4234_dai_set_fmt,
.hw_params = cs4234_dai_hw_params,
.startup = cs4234_dai_startup,
.set_tdm_slot = cs4234_dai_set_tdm_slot,
+ .auto_selectable_formats = &cs4234_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver cs4234_dai[] = {
diff --git a/sound/soc/codecs/cs4265.c b/sound/soc/codecs/cs4265.c
index 286d5ca298541..019f7333e75fd 100644
--- a/sound/soc/codecs/cs4265.c
+++ b/sound/soc/codecs/cs4265.c
@@ -495,11 +495,18 @@ static int cs4265_set_bias_level(struct snd_soc_component *component,
SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_U24_LE | \
SNDRV_PCM_FMTBIT_S32_LE | SNDRV_PCM_FMTBIT_U32_LE)
+static const u64 cs4265_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 cs4265_ops = {
.hw_params = cs4265_pcm_hw_params,
.mute_stream = cs4265_mute,
.set_fmt = cs4265_set_fmt,
.set_sysclk = cs4265_set_sysclk,
+ .auto_selectable_formats = &cs4265_selectable_formats,
+ .num_auto_selectable_formats = 1,
.no_capture_mute = 1,
};
diff --git a/sound/soc/codecs/cs4270.c b/sound/soc/codecs/cs4270.c
index 47b2f903a32c4..aa3bbb9519451 100644
--- a/sound/soc/codecs/cs4270.c
+++ b/sound/soc/codecs/cs4270.c
@@ -456,11 +456,17 @@ static const struct snd_kcontrol_new cs4270_snd_controls[] = {
snd_soc_get_volsw, cs4270_soc_put_mute),
};
+static const u64 cs4270_selectable_formats =
+ SND_SOC_POSSIBLE_DAIFMT_I2S |
+ SND_SOC_POSSIBLE_DAIFMT_LEFT_J;
+
static const struct snd_soc_dai_ops cs4270_dai_ops = {
.hw_params = cs4270_hw_params,
.set_sysclk = cs4270_set_dai_sysclk,
.set_fmt = cs4270_set_dai_fmt,
.mute_stream = cs4270_dai_mute,
+ .auto_selectable_formats = &cs4270_selectable_formats,
+ .num_auto_selectable_formats = 1,
.no_capture_mute = 1,
};
diff --git a/sound/soc/codecs/cs4271.c b/sound/soc/codecs/cs4271.c
index d8cdd37e9112b..398d8c24a9ce2 100644
--- a/sound/soc/codecs/cs4271.c
+++ b/sound/soc/codecs/cs4271.c
@@ -455,11 +455,17 @@ static const struct snd_kcontrol_new cs4271_snd_controls[] = {
7, 1, 1),
};
+static const u64 cs4271_selectable_formats =
+ SND_SOC_POSSIBLE_DAIFMT_I2S |
+ SND_SOC_POSSIBLE_DAIFMT_LEFT_J;
+
static const struct snd_soc_dai_ops cs4271_dai_ops = {
.hw_params = cs4271_hw_params,
.set_sysclk = cs4271_set_dai_sysclk,
.set_fmt = cs4271_set_dai_fmt,
.mute_stream = cs4271_mute_stream,
+ .auto_selectable_formats = &cs4271_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver cs4271_dai = {
diff --git a/sound/soc/codecs/cs42l42.c b/sound/soc/codecs/cs42l42.c
index fadf688606014..9e40c03ada4e8 100644
--- a/sound/soc/codecs/cs42l42.c
+++ b/sound/soc/codecs/cs42l42.c
@@ -1122,6 +1122,13 @@ EXPORT_SYMBOL_NS_GPL(cs42l42_mute_stream, "SND_SOC_CS42L42_CORE");
SNDRV_PCM_FMTBIT_S24_LE |\
SNDRV_PCM_FMTBIT_S32_LE)
+static const u64 cs42l42_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 cs42l42_ops = {
.startup = cs42l42_dai_startup,
.hw_params = cs42l42_pcm_hw_params,
@@ -1129,6 +1136,8 @@ static const struct snd_soc_dai_ops cs42l42_ops = {
.set_sysclk = cs42l42_set_sysclk,
.set_bclk_ratio = cs42l42_set_bclk_ratio,
.mute_stream = cs42l42_mute_stream,
+ .auto_selectable_formats = &cs42l42_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
struct snd_soc_dai_driver cs42l42_dai = {
diff --git a/sound/soc/codecs/cs42l43.c b/sound/soc/codecs/cs42l43.c
index 1b817e1a6ea5e..b6238f89c789c 100644
--- a/sound/soc/codecs/cs42l43.c
+++ b/sound/soc/codecs/cs42l43.c
@@ -671,6 +671,16 @@ static int cs42l43_dai_remove(struct snd_soc_dai *dai)
return 0;
}
+static const u64 cs42l43_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 cs42l43_asp_ops = {
.probe = cs42l43_dai_probe,
.remove = cs42l43_dai_remove,
@@ -678,6 +688,8 @@ static const struct snd_soc_dai_ops cs42l43_asp_ops = {
.hw_params = cs42l43_asp_hw_params,
.set_fmt = cs42l43_asp_set_fmt,
.set_tdm_slot = cs42l43_asp_set_tdm_slot,
+ .auto_selectable_formats = &cs42l43_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static int cs42l43_sdw_hw_params(struct snd_pcm_substream *substream,
diff --git a/sound/soc/codecs/cs42l51.c b/sound/soc/codecs/cs42l51.c
index 0519affe0ed8d..4b964c7133982 100644
--- a/sound/soc/codecs/cs42l51.c
+++ b/sound/soc/codecs/cs42l51.c
@@ -533,11 +533,18 @@ static int cs42l51_of_xlate_dai_id(struct snd_soc_component *component,
return 0;
}
+static const u64 cs42l51_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 cs42l51_dai_ops = {
.hw_params = cs42l51_hw_params,
.set_sysclk = cs42l51_set_dai_sysclk,
.set_fmt = cs42l51_set_dai_fmt,
.mute_stream = cs42l51_dai_mute,
+ .auto_selectable_formats = &cs42l51_selectable_formats,
+ .num_auto_selectable_formats = 1,
.no_capture_mute = 1,
};
diff --git a/sound/soc/codecs/cs42l52.c b/sound/soc/codecs/cs42l52.c
index 9d6bcfbbf0b20..10760816a5f91 100644
--- a/sound/soc/codecs/cs42l52.c
+++ b/sound/soc/codecs/cs42l52.c
@@ -883,11 +883,24 @@ static int cs42l52_set_bias_level(struct snd_soc_component *component,
SNDRV_PCM_FMTBIT_S20_3LE | SNDRV_PCM_FMTBIT_U20_3LE | \
SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_U24_LE)
+static const u64 cs42l52_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 cs42l52_ops = {
.hw_params = cs42l52_pcm_hw_params,
.mute_stream = cs42l52_mute,
.set_fmt = cs42l52_set_fmt,
.set_sysclk = cs42l52_set_sysclk,
+ .auto_selectable_formats = &cs42l52_selectable_formats,
+ .num_auto_selectable_formats = 1,
.no_capture_mute = 1,
};
diff --git a/sound/soc/codecs/cs42l56.c b/sound/soc/codecs/cs42l56.c
index 4d9a22a1029c6..9c6448ebb2cf3 100644
--- a/sound/soc/codecs/cs42l56.c
+++ b/sound/soc/codecs/cs42l56.c
@@ -960,11 +960,19 @@ static int cs42l56_set_bias_level(struct snd_soc_component *component,
SNDRV_PCM_FMTBIT_S32_LE)
+static const u64 cs42l56_selectable_formats =
+ SND_SOC_POSSIBLE_DAIFMT_I2S |
+ SND_SOC_POSSIBLE_DAIFMT_LEFT_J |
+ SND_SOC_POSSIBLE_DAIFMT_NB_NF |
+ SND_SOC_POSSIBLE_DAIFMT_IB_NF;
+
static const struct snd_soc_dai_ops cs42l56_ops = {
.hw_params = cs42l56_pcm_hw_params,
.mute_stream = cs42l56_mute,
.set_fmt = cs42l56_set_dai_fmt,
.set_sysclk = cs42l56_set_sysclk,
+ .auto_selectable_formats = &cs42l56_selectable_formats,
+ .num_auto_selectable_formats = 1,
.no_capture_mute = 1,
};
diff --git a/sound/soc/codecs/cs42l73.c b/sound/soc/codecs/cs42l73.c
index 6ddc6549492af..72076ccf4570e 100644
--- a/sound/soc/codecs/cs42l73.c
+++ b/sound/soc/codecs/cs42l73.c
@@ -1163,12 +1163,19 @@ static int cs42l73_pcm_startup(struct snd_pcm_substream *substream,
#define CS42L73_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE |\
SNDRV_PCM_FMTBIT_S24_LE)
+static const u64 cs42l73_selectable_formats =
+ SND_SOC_POSSIBLE_DAIFMT_I2S |
+ SND_SOC_POSSIBLE_DAIFMT_DSP_A |
+ SND_SOC_POSSIBLE_DAIFMT_DSP_B;
+
static const struct snd_soc_dai_ops cs42l73_ops = {
.startup = cs42l73_pcm_startup,
.hw_params = cs42l73_pcm_hw_params,
.set_fmt = cs42l73_set_dai_fmt,
.set_sysclk = cs42l73_set_sysclk,
.set_tristate = cs42l73_set_tristate,
+ .auto_selectable_formats = &cs42l73_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver cs42l73_dai[] = {
diff --git a/sound/soc/codecs/cs42l84.c b/sound/soc/codecs/cs42l84.c
index 36533a13319d4..b14775eaccf64 100644
--- a/sound/soc/codecs/cs42l84.c
+++ b/sound/soc/codecs/cs42l84.c
@@ -663,11 +663,17 @@ static int cs42l84_mute_stream(struct snd_soc_dai *dai, int mute, int stream)
return 0;
}
+static const u64 cs42l84_selectable_formats =
+ SND_SOC_POSSIBLE_DAIFMT_I2S |
+ SND_SOC_POSSIBLE_DAIFMT_IB_IF;
+
static const struct snd_soc_dai_ops cs42l84_ops = {
.hw_params = cs42l84_pcm_hw_params,
.set_fmt = cs42l84_set_dai_fmt,
.set_sysclk = cs42l84_set_sysclk,
.mute_stream = cs42l84_mute_stream,
+ .auto_selectable_formats = &cs42l84_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
#define CS42L84_FORMATS (SNDRV_PCM_FMTBIT_S16_LE |\
diff --git a/sound/soc/codecs/cs42xx8.c b/sound/soc/codecs/cs42xx8.c
index 5b689549c74ed..fb9f4aff6bd84 100644
--- a/sound/soc/codecs/cs42xx8.c
+++ b/sound/soc/codecs/cs42xx8.c
@@ -393,12 +393,20 @@ static int cs42xx8_mute(struct snd_soc_dai *dai, int mute, int direction)
return 0;
}
+static const u64 cs42xx8_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;
+
static const struct snd_soc_dai_ops cs42xx8_dai_ops = {
.set_fmt = cs42xx8_set_dai_fmt,
.set_sysclk = cs42xx8_set_dai_sysclk,
.hw_params = cs42xx8_hw_params,
.hw_free = cs42xx8_hw_free,
.mute_stream = cs42xx8_mute,
+ .auto_selectable_formats = &cs42xx8_selectable_formats,
+ .num_auto_selectable_formats = 1,
.no_capture_mute = 1,
};
diff --git a/sound/soc/codecs/cs43130.c b/sound/soc/codecs/cs43130.c
index 48d88dad4ceb0..7bbb2e83a1ffc 100644
--- a/sound/soc/codecs/cs43130.c
+++ b/sound/soc/codecs/cs43130.c
@@ -1609,12 +1609,24 @@ static int cs43130_set_sysclk(struct snd_soc_dai *codec_dai,
return 0;
}
+static const u64 cs43130_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 cs43130_pcm_ops = {
.startup = cs43130_pcm_startup,
.hw_params = cs43130_hw_params,
.hw_free = cs43130_hw_free,
.set_sysclk = cs43130_set_sysclk,
.set_fmt = cs43130_pcm_set_fmt,
+ .auto_selectable_formats = &cs43130_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static const struct snd_soc_dai_ops cs43130_dop_ops = {
@@ -1623,6 +1635,8 @@ static const struct snd_soc_dai_ops cs43130_dop_ops = {
.hw_free = cs43130_hw_free,
.set_sysclk = cs43130_set_sysclk,
.set_fmt = cs43130_pcm_set_fmt,
+ .auto_selectable_formats = &cs43130_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static const struct snd_soc_dai_ops cs43130_dsd_ops = {
diff --git a/sound/soc/codecs/cs4341.c b/sound/soc/codecs/cs4341.c
index a44e6b3c298e7..74544c58a4159 100644
--- a/sound/soc/codecs/cs4341.c
+++ b/sound/soc/codecs/cs4341.c
@@ -171,10 +171,18 @@ static const struct snd_kcontrol_new cs4341_controls[] = {
SOC_SINGLE("Popguard Transient Switch", CS4341_REG_MODE2, 1, 1, 0),
};
+static const u64 cs4341_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;
+
static const struct snd_soc_dai_ops cs4341_dai_ops = {
.set_fmt = cs4341_set_fmt,
.hw_params = cs4341_hw_params,
.mute_stream = cs4341_mute,
+ .auto_selectable_formats = &cs4341_selectable_formats,
+ .num_auto_selectable_formats = 1,
.no_capture_mute = 1,
};
diff --git a/sound/soc/codecs/cs4349.c b/sound/soc/codecs/cs4349.c
index 9a7f701757174..7ed89c1388f0a 100644
--- a/sound/soc/codecs/cs4349.c
+++ b/sound/soc/codecs/cs4349.c
@@ -228,10 +228,17 @@ static const struct snd_soc_dapm_route cs4349_routes[] = {
#define CS4349_PCM_RATES SNDRV_PCM_RATE_8000_192000
+static const u64 cs4349_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 cs4349_dai_ops = {
.hw_params = cs4349_pcm_hw_params,
.set_fmt = cs4349_set_dai_fmt,
.mute_stream = cs4349_mute,
+ .auto_selectable_formats = &cs4349_selectable_formats,
+ .num_auto_selectable_formats = 1,
.no_capture_mute = 1,
};
diff --git a/sound/soc/codecs/cs48l32.c b/sound/soc/codecs/cs48l32.c
index a9967771124e5..6ebf35572c93f 100644
--- a/sound/soc/codecs/cs48l32.c
+++ b/sound/soc/codecs/cs48l32.c
@@ -2361,6 +2361,16 @@ static int cs48l32_set_tdm_slot(struct snd_soc_dai *dai, unsigned int tx_mask,
return 0;
}
+static const u64 cs48l32_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 cs48l32_dai_ops = {
.probe = &cs48l32_asp_dai_probe,
.startup = &cs48l32_startup,
@@ -2368,6 +2378,8 @@ static const struct snd_soc_dai_ops cs48l32_dai_ops = {
.set_tdm_slot = &cs48l32_set_tdm_slot,
.hw_params = &cs48l32_hw_params,
.set_sysclk = &cs48l32_dai_set_sysclk,
+ .auto_selectable_formats = &cs48l32_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static int cs48l32_sysclk_ev(struct snd_soc_dapm_widget *w,
--
2.53.0
^ permalink raw reply related [flat|nested] 54+ messages in thread
* [PATCH 14/44] ASoC: codecs: cs5*: use .auto_selectable_formats
2026-08-04 0:40 [PATCH 00/44] ASoC: codec: use .auto_selectable_formats Kuninori Morimoto
` (12 preceding siblings ...)
2026-08-04 0:41 ` [PATCH 13/44] ASoC: codecs: cs42*: " Kuninori Morimoto
@ 2026-08-04 0:41 ` Kuninori Morimoto
2026-08-04 0:41 ` [PATCH 15/44] ASoC: codecs: cx2072x: " Kuninori Morimoto
` (29 subsequent siblings)
43 siblings, 0 replies; 54+ messages in thread
From: Kuninori Morimoto @ 2026-08-04 0:41 UTC (permalink / raw)
To: David Rhodes, Jaroslav Kysela, Liam Girdwood, Mark Brown,
Richard Fitzgerald, 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/codecs/cs530x.c | 9 +++++++++
sound/soc/codecs/cs53l30.c | 8 ++++++++
2 files changed, 17 insertions(+)
diff --git a/sound/soc/codecs/cs530x.c b/sound/soc/codecs/cs530x.c
index 2c7e331359117..e0ea246edbd89 100644
--- a/sound/soc/codecs/cs530x.c
+++ b/sound/soc/codecs/cs530x.c
@@ -945,10 +945,19 @@ static int cs530x_set_tdm_slot(struct snd_soc_dai *dai, unsigned int tx_mask,
val << CS530X_ASP_TDM_SLOT_SHIFT);
}
+static const u64 cs530x_selectable_formats =
+ SND_SOC_POSSIBLE_DAIFMT_I2S |
+ SND_SOC_POSSIBLE_DAIFMT_LEFT_J |
+ SND_SOC_POSSIBLE_DAIFMT_DSP_A |
+ SND_SOC_POSSIBLE_DAIFMT_NB_NF |
+ SND_SOC_POSSIBLE_DAIFMT_IB_IF;
+
static const struct snd_soc_dai_ops cs530x_dai_ops = {
.set_fmt = cs530x_set_fmt,
.hw_params = cs530x_hw_params,
.set_tdm_slot = cs530x_set_tdm_slot,
+ .auto_selectable_formats = &cs530x_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static const struct snd_soc_dai_driver cs530x_dai = {
diff --git a/sound/soc/codecs/cs53l30.c b/sound/soc/codecs/cs53l30.c
index 511453b4c3752..c9c682a312c33 100644
--- a/sound/soc/codecs/cs53l30.c
+++ b/sound/soc/codecs/cs53l30.c
@@ -833,6 +833,12 @@ static int cs53l30_mute_stream(struct snd_soc_dai *dai, int mute, int stream)
#define CS53L30_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE |\
SNDRV_PCM_FMTBIT_S24_LE)
+static const u64 cs53l30_selectable_formats =
+ SND_SOC_POSSIBLE_DAIFMT_I2S |
+ SND_SOC_POSSIBLE_DAIFMT_DSP_A |
+ SND_SOC_POSSIBLE_DAIFMT_IB_NF |
+ SND_SOC_POSSIBLE_DAIFMT_IB_IF;
+
static const struct snd_soc_dai_ops cs53l30_ops = {
.hw_params = cs53l30_pcm_hw_params,
.set_fmt = cs53l30_set_dai_fmt,
@@ -840,6 +846,8 @@ static const struct snd_soc_dai_ops cs53l30_ops = {
.set_tristate = cs53l30_set_tristate,
.set_tdm_slot = cs53l30_set_dai_tdm_slot,
.mute_stream = cs53l30_mute_stream,
+ .auto_selectable_formats = &cs53l30_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver cs53l30_dai = {
--
2.53.0
^ permalink raw reply related [flat|nested] 54+ messages in thread
* [PATCH 15/44] ASoC: codecs: cx2072x: use .auto_selectable_formats
2026-08-04 0:40 [PATCH 00/44] ASoC: codec: use .auto_selectable_formats Kuninori Morimoto
` (13 preceding siblings ...)
2026-08-04 0:41 ` [PATCH 14/44] ASoC: codecs: cs5*: " Kuninori Morimoto
@ 2026-08-04 0:41 ` Kuninori Morimoto
2026-08-04 0:41 ` [PATCH 16/44] ASoC: codecs: da*: " Kuninori Morimoto
` (28 subsequent siblings)
43 siblings, 0 replies; 54+ messages in thread
From: Kuninori Morimoto @ 2026-08-04 0:41 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/codecs/cx2072x.c | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/sound/soc/codecs/cx2072x.c b/sound/soc/codecs/cx2072x.c
index 908344ee58920..6e0de380e2108 100644
--- a/sound/soc/codecs/cx2072x.c
+++ b/sound/soc/codecs/cx2072x.c
@@ -1521,6 +1521,16 @@ static const struct snd_soc_component_driver soc_codec_driver_cx2072x = {
.endianness = 1,
};
+
+static const u64 cx2072x_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;
+
/*
* DAI ops
*/
@@ -1529,6 +1539,8 @@ static const struct snd_soc_dai_ops cx2072x_dai_ops = {
.set_fmt = cx2072x_set_dai_fmt,
.hw_params = cx2072x_hw_params,
.set_bclk_ratio = cx2072x_set_dai_bclk_ratio,
+ .auto_selectable_formats = &cx2072x_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static int cx2072x_dsp_dai_probe(struct snd_soc_dai *dai)
--
2.53.0
^ permalink raw reply related [flat|nested] 54+ messages in thread
* [PATCH 16/44] ASoC: codecs: da*: use .auto_selectable_formats
2026-08-04 0:40 [PATCH 00/44] ASoC: codec: use .auto_selectable_formats Kuninori Morimoto
` (14 preceding siblings ...)
2026-08-04 0:41 ` [PATCH 15/44] ASoC: codecs: cx2072x: " Kuninori Morimoto
@ 2026-08-04 0:41 ` Kuninori Morimoto
2026-08-04 0:41 ` [PATCH 17/44] ASoC: codecs: es*: " Kuninori Morimoto
` (27 subsequent siblings)
43 siblings, 0 replies; 54+ messages in thread
From: Kuninori Morimoto @ 2026-08-04 0:41 UTC (permalink / raw)
To: Jaroslav Kysela, Liam Girdwood, Mark Brown, Support Opensource,
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/codecs/da7210.c | 7 +++++++
sound/soc/codecs/da7218.c | 12 ++++++++++++
sound/soc/codecs/da7219.c | 12 ++++++++++++
sound/soc/codecs/da732x.c | 17 +++++++++++++++++
sound/soc/codecs/da9055.c | 8 ++++++++
5 files changed, 56 insertions(+)
diff --git a/sound/soc/codecs/da7210.c b/sound/soc/codecs/da7210.c
index 4df1a25e318b6..597510de561a6 100644
--- a/sound/soc/codecs/da7210.c
+++ b/sound/soc/codecs/da7210.c
@@ -1030,6 +1030,11 @@ static int da7210_set_dai_pll(struct snd_soc_dai *codec_dai, int pll_id,
return -EINVAL;
}
+static const u64 da7210_selectable_formats =
+ SND_SOC_POSSIBLE_DAIFMT_I2S |
+ SND_SOC_POSSIBLE_DAIFMT_RIGHT_J |
+ SND_SOC_POSSIBLE_DAIFMT_LEFT_J;
+
/* DAI operations */
static const struct snd_soc_dai_ops da7210_dai_ops = {
.hw_params = da7210_hw_params,
@@ -1037,6 +1042,8 @@ static const struct snd_soc_dai_ops da7210_dai_ops = {
.set_sysclk = da7210_set_dai_sysclk,
.set_pll = da7210_set_dai_pll,
.mute_stream = da7210_mute,
+ .auto_selectable_formats = &da7210_selectable_formats,
+ .num_auto_selectable_formats = 1,
.no_capture_mute = 1,
};
diff --git a/sound/soc/codecs/da7218.c b/sound/soc/codecs/da7218.c
index 93bd045ed8701..361daf14152e2 100644
--- a/sound/soc/codecs/da7218.c
+++ b/sound/soc/codecs/da7218.c
@@ -2166,12 +2166,24 @@ static int da7218_hw_params(struct snd_pcm_substream *substream,
return 0;
}
+static const u64 da7218_selectable_formats =
+ SND_SOC_POSSIBLE_DAIFMT_I2S |
+ SND_SOC_POSSIBLE_DAIFMT_RIGHT_J |
+ SND_SOC_POSSIBLE_DAIFMT_LEFT_J |
+ 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 da7218_dai_ops = {
.hw_params = da7218_hw_params,
.set_sysclk = da7218_set_dai_sysclk,
.set_pll = da7218_set_dai_pll,
.set_fmt = da7218_set_dai_fmt,
.set_tdm_slot = da7218_set_dai_tdm_slot,
+ .auto_selectable_formats = &da7218_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
#define DA7218_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE |\
diff --git a/sound/soc/codecs/da7219.c b/sound/soc/codecs/da7219.c
index f6d371e935495..673285c3213b2 100644
--- a/sound/soc/codecs/da7219.c
+++ b/sound/soc/codecs/da7219.c
@@ -1643,12 +1643,24 @@ static int da7219_hw_params(struct snd_pcm_substream *substream,
return 0;
}
+static const u64 da7219_selectable_formats =
+ SND_SOC_POSSIBLE_DAIFMT_I2S |
+ SND_SOC_POSSIBLE_DAIFMT_RIGHT_J |
+ SND_SOC_POSSIBLE_DAIFMT_LEFT_J |
+ 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 da7219_dai_ops = {
.hw_params = da7219_hw_params,
.set_sysclk = da7219_set_dai_sysclk,
.set_pll = da7219_set_dai_pll,
.set_fmt = da7219_set_dai_fmt,
.set_tdm_slot = da7219_set_dai_tdm_slot,
+ .auto_selectable_formats = &da7219_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
#define DA7219_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE |\
diff --git a/sound/soc/codecs/da732x.c b/sound/soc/codecs/da732x.c
index 12d1ac98461e4..c9b6172ac0a1d 100644
--- a/sound/soc/codecs/da732x.c
+++ b/sound/soc/codecs/da732x.c
@@ -1188,10 +1188,27 @@ static int da732x_set_dai_sysclk(struct snd_soc_dai *dai, int clk_id,
#define DA732X_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE | \
SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S32_LE)
+static const u64 da732x_selectable_formats[] = {
+ /* Hi Priority */
+ 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,
+ /* Low Priority */
+ SND_SOC_POSSIBLE_DAIFMT_DSP_B |
+ SND_SOC_POSSIBLE_DAIFMT_NB_NF |
+ SND_SOC_POSSIBLE_DAIFMT_IB_NF,
+};
+
static const struct snd_soc_dai_ops da732x_dai_ops = {
.hw_params = da732x_hw_params,
.set_fmt = da732x_set_dai_fmt,
.set_sysclk = da732x_set_dai_sysclk,
+ .auto_selectable_formats = da732x_selectable_formats,
+ .num_auto_selectable_formats = ARRAY_SIZE(da732x_selectable_formats),
};
static struct snd_soc_dai_driver da732x_dai[] = {
diff --git a/sound/soc/codecs/da9055.c b/sound/soc/codecs/da9055.c
index a88c135331457..faff1535ab12a 100644
--- a/sound/soc/codecs/da9055.c
+++ b/sound/soc/codecs/da9055.c
@@ -1317,6 +1317,12 @@ static int da9055_set_dai_pll(struct snd_soc_dai *codec_dai, int pll_id,
return -EINVAL;
}
+static const u64 da9055_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;
+
/* DAI operations */
static const struct snd_soc_dai_ops da9055_dai_ops = {
.hw_params = da9055_hw_params,
@@ -1324,6 +1330,8 @@ static const struct snd_soc_dai_ops da9055_dai_ops = {
.set_sysclk = da9055_set_dai_sysclk,
.set_pll = da9055_set_dai_pll,
.mute_stream = da9055_mute,
+ .auto_selectable_formats = &da9055_selectable_formats,
+ .num_auto_selectable_formats = 1,
.no_capture_mute = 1,
};
--
2.53.0
^ permalink raw reply related [flat|nested] 54+ messages in thread
* [PATCH 17/44] ASoC: codecs: es*: use .auto_selectable_formats
2026-08-04 0:40 [PATCH 00/44] ASoC: codec: use .auto_selectable_formats Kuninori Morimoto
` (15 preceding siblings ...)
2026-08-04 0:41 ` [PATCH 16/44] ASoC: codecs: da*: " Kuninori Morimoto
@ 2026-08-04 0:41 ` Kuninori Morimoto
2026-08-04 0:42 ` [PATCH 18/44] ASoC: codecs: inno_rk3036: " Kuninori Morimoto
` (26 subsequent siblings)
43 siblings, 0 replies; 54+ messages in thread
From: Kuninori Morimoto @ 2026-08-04 0:41 UTC (permalink / raw)
To: Binbin Zhou, bui duc phuc, Hsieh Hung-En, Jaroslav Kysela,
Liam Girdwood, Mark Brown, Takashi Iwai, Zhang Yi
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/codecs/es7134.c | 6 ++++++
sound/soc/codecs/es7241.c | 7 +++++++
sound/soc/codecs/es8311.c | 18 ++++++++++++++++++
sound/soc/codecs/es8316.c | 9 +++++++++
sound/soc/codecs/es8323.c | 13 +++++++++++++
sound/soc/codecs/es8326.c | 9 +++++++++
sound/soc/codecs/es8328.c | 7 +++++++
sound/soc/codecs/es8375.c | 12 ++++++++++++
sound/soc/codecs/es8389.c | 9 +++++++++
9 files changed, 90 insertions(+)
diff --git a/sound/soc/codecs/es7134.c b/sound/soc/codecs/es7134.c
index 441df1523f1c9..e3e6142ca0288 100644
--- a/sound/soc/codecs/es7134.c
+++ b/sound/soc/codecs/es7134.c
@@ -130,10 +130,16 @@ static int es7134_component_probe(struct snd_soc_component *c)
return 0;
}
+static const u64 es7134_selectable_formats =
+ SND_SOC_POSSIBLE_DAIFMT_I2S |
+ SND_SOC_POSSIBLE_DAIFMT_NB_NF;
+
static const struct snd_soc_dai_ops es7134_dai_ops = {
.set_fmt = es7134_set_fmt,
.hw_params = es7134_hw_params,
.set_sysclk = es7134_set_sysclk,
+ .auto_selectable_formats = &es7134_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver es7134_dai = {
diff --git a/sound/soc/codecs/es7241.c b/sound/soc/codecs/es7241.c
index 339553cfbb48e..a0bd5386387d4 100644
--- a/sound/soc/codecs/es7241.c
+++ b/sound/soc/codecs/es7241.c
@@ -152,10 +152,17 @@ static int es7241_set_fmt(struct snd_soc_dai *dai, unsigned int fmt)
return 0;
}
+static const u64 es7241_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 es7241_dai_ops = {
.set_fmt = es7241_set_fmt,
.hw_params = es7241_hw_params,
.set_sysclk = es7241_set_sysclk,
+ .auto_selectable_formats = &es7241_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver es7241_dai = {
diff --git a/sound/soc/codecs/es8311.c b/sound/soc/codecs/es8311.c
index 6fe3ae41afbd5..69289cb1d3180 100644
--- a/sound/soc/codecs/es8311.c
+++ b/sound/soc/codecs/es8311.c
@@ -800,12 +800,30 @@ static int es8311_set_bias_level(struct snd_soc_component *component,
return 0;
}
+static const u64 es8311_selectable_formats[] = {
+ /* Hi Priority */
+ 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,
+ /* Low Priority */
+ SND_SOC_POSSIBLE_DAIFMT_DSP_A |
+ SND_SOC_POSSIBLE_DAIFMT_DSP_B |
+ SND_SOC_POSSIBLE_DAIFMT_NB_NF |
+ SND_SOC_POSSIBLE_DAIFMT_IB_NF,
+};
+
static const struct snd_soc_dai_ops es8311_dai_ops = {
.startup = es8311_startup,
.hw_params = es8311_hw_params,
.mute_stream = es8311_mute,
.set_sysclk = es8311_set_sysclk,
.set_fmt = es8311_set_dai_fmt,
+ .auto_selectable_formats = es8311_selectable_formats,
+ .num_auto_selectable_formats = ARRAY_SIZE(es8311_selectable_formats),
.no_capture_mute = 1,
};
diff --git a/sound/soc/codecs/es8316.c b/sound/soc/codecs/es8316.c
index 87f331868dc7f..026ac7649efc3 100644
--- a/sound/soc/codecs/es8316.c
+++ b/sound/soc/codecs/es8316.c
@@ -558,12 +558,21 @@ static int es8316_mute(struct snd_soc_dai *dai, int mute, int direction)
#define ES8316_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE | \
SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S32_LE)
+static const u64 es8316_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 es8316_ops = {
.startup = es8316_pcm_startup,
.hw_params = es8316_pcm_hw_params,
.set_fmt = es8316_set_dai_fmt,
.set_sysclk = es8316_set_dai_sysclk,
.mute_stream = es8316_mute,
+ .auto_selectable_formats = &es8316_selectable_formats,
+ .num_auto_selectable_formats = 1,
.no_capture_mute = 1,
};
diff --git a/sound/soc/codecs/es8323.c b/sound/soc/codecs/es8323.c
index b926340256be5..12fcfe017ab2e 100644
--- a/sound/soc/codecs/es8323.c
+++ b/sound/soc/codecs/es8323.c
@@ -622,12 +622,25 @@ static int es8323_mute_stream(struct snd_soc_dai *dai, int mute, int stream)
mute ? ES8323_DACCONTROL3_DACMUTE : 0);
}
+static const u64 es8323_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 es8323_ops = {
.startup = es8323_pcm_startup,
.hw_params = es8323_pcm_hw_params,
.set_fmt = es8323_set_dai_fmt,
.set_sysclk = es8323_set_dai_sysclk,
.mute_stream = es8323_mute_stream,
+ .auto_selectable_formats = &es8323_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
#define ES8323_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE |\
diff --git a/sound/soc/codecs/es8326.c b/sound/soc/codecs/es8326.c
index c5460589a88b8..74c0bceb0f9b4 100644
--- a/sound/soc/codecs/es8326.c
+++ b/sound/soc/codecs/es8326.c
@@ -723,11 +723,20 @@ static int es8326_set_bias_level(struct snd_soc_component *codec,
#define es8326_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE |\
SNDRV_PCM_FMTBIT_S24_LE)
+static const u64 es8326_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 es8326_ops = {
.hw_params = es8326_pcm_hw_params,
.set_fmt = es8326_set_dai_fmt,
.set_sysclk = es8326_set_dai_sysclk,
.mute_stream = es8326_mute,
+ .auto_selectable_formats = &es8326_selectable_formats,
+ .num_auto_selectable_formats = 1,
.no_capture_mute = 0,
};
diff --git a/sound/soc/codecs/es8328.c b/sound/soc/codecs/es8328.c
index aaa6646ad4c5e..7d52b5d9d0615 100644
--- a/sound/soc/codecs/es8328.c
+++ b/sound/soc/codecs/es8328.c
@@ -727,12 +727,19 @@ static int es8328_set_bias_level(struct snd_soc_component *component,
return 0;
}
+static const u64 es8328_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 es8328_dai_ops = {
.startup = es8328_startup,
.hw_params = es8328_hw_params,
.mute_stream = es8328_mute,
.set_sysclk = es8328_set_sysclk,
.set_fmt = es8328_set_dai_fmt,
+ .auto_selectable_formats = &es8328_selectable_formats,
+ .num_auto_selectable_formats = 1,
.no_capture_mute = 1,
};
diff --git a/sound/soc/codecs/es8375.c b/sound/soc/codecs/es8375.c
index e8747bc24433f..bc21cf7e602d6 100644
--- a/sound/soc/codecs/es8375.c
+++ b/sound/soc/codecs/es8375.c
@@ -494,11 +494,23 @@ static int es8375_mute(struct snd_soc_dai *dai, int mute, int stream)
#define es8375_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE |\
SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S24_3LE | SNDRV_PCM_FMTBIT_S32_LE)
+static const u64 es8375_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 es8375_ops = {
.hw_params = es8375_hw_params,
.mute_stream = es8375_mute,
.set_sysclk = es8375_set_sysclk,
.set_fmt = es8375_set_dai_fmt,
+ .auto_selectable_formats = &es8375_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver es8375_dai = {
diff --git a/sound/soc/codecs/es8389.c b/sound/soc/codecs/es8389.c
index 80efce3e0a22a..452e597d81d57 100644
--- a/sound/soc/codecs/es8389.c
+++ b/sound/soc/codecs/es8389.c
@@ -904,6 +904,13 @@ static int es8389_mute(struct snd_soc_dai *dai, int mute, int direction)
#define es8389_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE |\
SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S24_3LE | SNDRV_PCM_FMTBIT_S32_LE)
+static const u64 es8389_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 es8389_ops = {
.hw_params = es8389_pcm_hw_params,
.hw_free = es8389_pcm_hw_free,
@@ -911,6 +918,8 @@ static const struct snd_soc_dai_ops es8389_ops = {
.set_sysclk = es8389_set_dai_sysclk,
.set_tdm_slot = es8389_set_tdm_slot,
.mute_stream = es8389_mute,
+ .auto_selectable_formats = &es8389_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver es8389_dai = {
--
2.53.0
^ permalink raw reply related [flat|nested] 54+ messages in thread
* [PATCH 18/44] ASoC: codecs: inno_rk3036: use .auto_selectable_formats
2026-08-04 0:40 [PATCH 00/44] ASoC: codec: use .auto_selectable_formats Kuninori Morimoto
` (16 preceding siblings ...)
2026-08-04 0:41 ` [PATCH 17/44] ASoC: codecs: es*: " Kuninori Morimoto
@ 2026-08-04 0:42 ` Kuninori Morimoto
2026-08-04 0:42 ` [PATCH 19/44] ASoC: codecs: isabelle: " Kuninori Morimoto
` (25 subsequent siblings)
43 siblings, 0 replies; 54+ messages in thread
From: Kuninori Morimoto @ 2026-08-04 0:42 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/codecs/inno_rk3036.c | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/sound/soc/codecs/inno_rk3036.c b/sound/soc/codecs/inno_rk3036.c
index fdd19f8e88640..aaf03f2281507 100644
--- a/sound/soc/codecs/inno_rk3036.c
+++ b/sound/soc/codecs/inno_rk3036.c
@@ -309,9 +309,21 @@ static int rk3036_codec_dai_hw_params(struct snd_pcm_substream *substream,
SNDRV_PCM_FMTBIT_S24_LE | \
SNDRV_PCM_FMTBIT_S32_LE)
+static const u64 rk3036_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 rk3036_codec_dai_ops = {
.set_fmt = rk3036_codec_dai_set_fmt,
.hw_params = rk3036_codec_dai_hw_params,
+ .auto_selectable_formats = &rk3036_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver rk3036_codec_dai_driver[] = {
--
2.53.0
^ permalink raw reply related [flat|nested] 54+ messages in thread
* [PATCH 19/44] ASoC: codecs: isabelle: use .auto_selectable_formats
2026-08-04 0:40 [PATCH 00/44] ASoC: codec: use .auto_selectable_formats Kuninori Morimoto
` (17 preceding siblings ...)
2026-08-04 0:42 ` [PATCH 18/44] ASoC: codecs: inno_rk3036: " Kuninori Morimoto
@ 2026-08-04 0:42 ` Kuninori Morimoto
2026-08-04 0:42 ` [PATCH 20/44] ASoC: codecs: lm49453: " Kuninori Morimoto
` (24 subsequent siblings)
43 siblings, 0 replies; 54+ messages in thread
From: Kuninori Morimoto @ 2026-08-04 0:42 UTC (permalink / raw)
To: Jaroslav Kysela, Liam Girdwood, Mark Brown, M R Swami Reddy,
Takashi Iwai, Vishwas A Deshpande
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/codecs/isabelle.c | 13 +++++++++++++
1 file changed, 13 insertions(+)
diff --git a/sound/soc/codecs/isabelle.c b/sound/soc/codecs/isabelle.c
index fa1c23dda4eb6..7e8dde79b11a8 100644
--- a/sound/soc/codecs/isabelle.c
+++ b/sound/soc/codecs/isabelle.c
@@ -1011,10 +1011,17 @@ static int isabelle_set_dai_fmt(struct snd_soc_dai *codec_dai, unsigned int fmt)
#define ISABELLE_FORMATS (SNDRV_PCM_FMTBIT_S20_3LE |\
SNDRV_PCM_FMTBIT_S32_LE)
+static const u64 isabelle_selectable_formats =
+ SND_SOC_POSSIBLE_DAIFMT_I2S |
+ SND_SOC_POSSIBLE_DAIFMT_LEFT_J |
+ SND_SOC_POSSIBLE_DAIFMT_PDM;
+
static const struct snd_soc_dai_ops isabelle_hs_dai_ops = {
.hw_params = isabelle_hw_params,
.set_fmt = isabelle_set_dai_fmt,
.mute_stream = isabelle_hs_mute,
+ .auto_selectable_formats = &isabelle_selectable_formats,
+ .num_auto_selectable_formats = 1,
.no_capture_mute = 1,
};
@@ -1022,6 +1029,8 @@ static const struct snd_soc_dai_ops isabelle_hf_dai_ops = {
.hw_params = isabelle_hw_params,
.set_fmt = isabelle_set_dai_fmt,
.mute_stream = isabelle_hf_mute,
+ .auto_selectable_formats = &isabelle_selectable_formats,
+ .num_auto_selectable_formats = 1,
.no_capture_mute = 1,
};
@@ -1029,12 +1038,16 @@ static const struct snd_soc_dai_ops isabelle_line_dai_ops = {
.hw_params = isabelle_hw_params,
.set_fmt = isabelle_set_dai_fmt,
.mute_stream = isabelle_line_mute,
+ .auto_selectable_formats = &isabelle_selectable_formats,
+ .num_auto_selectable_formats = 1,
.no_capture_mute = 1,
};
static const struct snd_soc_dai_ops isabelle_ul_dai_ops = {
.hw_params = isabelle_hw_params,
.set_fmt = isabelle_set_dai_fmt,
+ .auto_selectable_formats = &isabelle_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
/* ISABELLE dai structure */
--
2.53.0
^ permalink raw reply related [flat|nested] 54+ messages in thread
* [PATCH 20/44] ASoC: codecs: lm49453: use .auto_selectable_formats
2026-08-04 0:40 [PATCH 00/44] ASoC: codec: use .auto_selectable_formats Kuninori Morimoto
` (18 preceding siblings ...)
2026-08-04 0:42 ` [PATCH 19/44] ASoC: codecs: isabelle: " Kuninori Morimoto
@ 2026-08-04 0:42 ` Kuninori Morimoto
2026-08-04 0:42 ` [PATCH 21/44] ASoC: codecs: lochnagar-sc: " Kuninori Morimoto
` (23 subsequent siblings)
43 siblings, 0 replies; 54+ messages in thread
From: Kuninori Morimoto @ 2026-08-04 0:42 UTC (permalink / raw)
To: Jaroslav Kysela, Liam Girdwood, Mark Brown, M R Swami Reddy,
Takashi Iwai, Vishwas A Deshpande
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/codecs/lm49453.c | 15 +++++++++++++++
1 file changed, 15 insertions(+)
diff --git a/sound/soc/codecs/lm49453.c b/sound/soc/codecs/lm49453.c
index 6e2e292d143bb..991555bec712a 100644
--- a/sound/soc/codecs/lm49453.c
+++ b/sound/soc/codecs/lm49453.c
@@ -1283,11 +1283,18 @@ static int lm49453_set_bias_level(struct snd_soc_component *component,
#define LM49453_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE |\
SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S32_LE)
+static const u64 lm49453_selectable_formats =
+ SND_SOC_POSSIBLE_DAIFMT_I2S |
+ SND_SOC_POSSIBLE_DAIFMT_DSP_A |
+ SND_SOC_POSSIBLE_DAIFMT_DSP_B;
+
static const struct snd_soc_dai_ops lm49453_headset_dai_ops = {
.hw_params = lm49453_hw_params,
.set_sysclk = lm49453_set_dai_sysclk,
.set_fmt = lm49453_set_dai_fmt,
.mute_stream = lm49453_hp_mute,
+ .auto_selectable_formats = &lm49453_selectable_formats,
+ .num_auto_selectable_formats = 1,
.no_capture_mute = 1,
};
@@ -1296,6 +1303,8 @@ static const struct snd_soc_dai_ops lm49453_speaker_dai_ops = {
.set_sysclk = lm49453_set_dai_sysclk,
.set_fmt = lm49453_set_dai_fmt,
.mute_stream = lm49453_ls_mute,
+ .auto_selectable_formats = &lm49453_selectable_formats,
+ .num_auto_selectable_formats = 1,
.no_capture_mute = 1,
};
@@ -1304,6 +1313,8 @@ static const struct snd_soc_dai_ops lm49453_haptic_dai_ops = {
.set_sysclk = lm49453_set_dai_sysclk,
.set_fmt = lm49453_set_dai_fmt,
.mute_stream = lm49453_ha_mute,
+ .auto_selectable_formats = &lm49453_selectable_formats,
+ .num_auto_selectable_formats = 1,
.no_capture_mute = 1,
};
@@ -1312,6 +1323,8 @@ static const struct snd_soc_dai_ops lm49453_ep_dai_ops = {
.set_sysclk = lm49453_set_dai_sysclk,
.set_fmt = lm49453_set_dai_fmt,
.mute_stream = lm49453_ep_mute,
+ .auto_selectable_formats = &lm49453_selectable_formats,
+ .num_auto_selectable_formats = 1,
.no_capture_mute = 1,
};
@@ -1320,6 +1333,8 @@ static const struct snd_soc_dai_ops lm49453_lineout_dai_ops = {
.set_sysclk = lm49453_set_dai_sysclk,
.set_fmt = lm49453_set_dai_fmt,
.mute_stream = lm49453_lo_mute,
+ .auto_selectable_formats = &lm49453_selectable_formats,
+ .num_auto_selectable_formats = 1,
.no_capture_mute = 1,
};
--
2.53.0
^ permalink raw reply related [flat|nested] 54+ messages in thread
* [PATCH 21/44] ASoC: codecs: lochnagar-sc: use .auto_selectable_formats
2026-08-04 0:40 [PATCH 00/44] ASoC: codec: use .auto_selectable_formats Kuninori Morimoto
` (19 preceding siblings ...)
2026-08-04 0:42 ` [PATCH 20/44] ASoC: codecs: lm49453: " Kuninori Morimoto
@ 2026-08-04 0:42 ` Kuninori Morimoto
2026-08-04 0:42 ` [PATCH 22/44] ASoC: codecs: madera: " Kuninori Morimoto
` (22 subsequent siblings)
43 siblings, 0 replies; 54+ messages in thread
From: Kuninori Morimoto @ 2026-08-04 0:42 UTC (permalink / raw)
To: Charles Keepax, Jaroslav Kysela, Liam Girdwood, Mark Brown,
Richard Fitzgerald, 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/codecs/lochnagar-sc.c | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/sound/soc/codecs/lochnagar-sc.c b/sound/soc/codecs/lochnagar-sc.c
index a3d6318c90500..dadb4a6c287fb 100644
--- a/sound/soc/codecs/lochnagar-sc.c
+++ b/sound/soc/codecs/lochnagar-sc.c
@@ -137,15 +137,23 @@ static int lochnagar_sc_set_usb_fmt(struct snd_soc_dai *dai, unsigned int fmt)
return lochnagar_sc_check_fmt(dai, fmt, SND_SOC_DAIFMT_CBP_CFP);
}
+static const u64 lochnagar_selectable_formats =
+ SND_SOC_POSSIBLE_DAIFMT_I2S |
+ SND_SOC_POSSIBLE_DAIFMT_NB_NF;
+
static const struct snd_soc_dai_ops lochnagar_sc_line_ops = {
.startup = lochnagar_sc_line_startup,
.shutdown = lochnagar_sc_line_shutdown,
.set_fmt = lochnagar_sc_set_line_fmt,
+ .auto_selectable_formats = &lochnagar_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static const struct snd_soc_dai_ops lochnagar_sc_usb_ops = {
.startup = lochnagar_sc_startup,
.set_fmt = lochnagar_sc_set_usb_fmt,
+ .auto_selectable_formats = &lochnagar_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver lochnagar_sc_dai[] = {
--
2.53.0
^ permalink raw reply related [flat|nested] 54+ messages in thread
* [PATCH 22/44] ASoC: codecs: madera: use .auto_selectable_formats
2026-08-04 0:40 [PATCH 00/44] ASoC: codec: use .auto_selectable_formats Kuninori Morimoto
` (20 preceding siblings ...)
2026-08-04 0:42 ` [PATCH 21/44] ASoC: codecs: lochnagar-sc: " Kuninori Morimoto
@ 2026-08-04 0:42 ` Kuninori Morimoto
2026-08-04 0:42 ` [PATCH 23/44] ASoC: codecs: max*: " Kuninori Morimoto
` (21 subsequent siblings)
43 siblings, 0 replies; 54+ messages in thread
From: Kuninori Morimoto @ 2026-08-04 0:42 UTC (permalink / raw)
To: Charles Keepax, Jaroslav Kysela, Liam Girdwood, Mark Brown,
Richard Fitzgerald, 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/codecs/madera.c | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/sound/soc/codecs/madera.c b/sound/soc/codecs/madera.c
index 55ea6950ca906..58255844b4df3 100644
--- a/sound/soc/codecs/madera.c
+++ b/sound/soc/codecs/madera.c
@@ -3332,6 +3332,16 @@ static int madera_set_tdm_slot(struct snd_soc_dai *dai, unsigned int tx_mask,
return 0;
}
+static const u64 madera_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;
+
const struct snd_soc_dai_ops madera_dai_ops = {
.startup = &madera_startup,
.set_fmt = &madera_set_fmt,
@@ -3339,6 +3349,8 @@ const struct snd_soc_dai_ops madera_dai_ops = {
.hw_params = &madera_hw_params,
.set_sysclk = &madera_dai_set_sysclk,
.set_tristate = &madera_set_tristate,
+ .auto_selectable_formats = &madera_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
EXPORT_SYMBOL_GPL(madera_dai_ops);
--
2.53.0
^ permalink raw reply related [flat|nested] 54+ messages in thread
* [PATCH 23/44] ASoC: codecs: max*: use .auto_selectable_formats
2026-08-04 0:40 [PATCH 00/44] ASoC: codec: use .auto_selectable_formats Kuninori Morimoto
` (21 preceding siblings ...)
2026-08-04 0:42 ` [PATCH 22/44] ASoC: codecs: madera: " Kuninori Morimoto
@ 2026-08-04 0:42 ` Kuninori Morimoto
2026-08-04 17:37 ` Mark Brown
2026-08-04 0:42 ` [PATCH 24/44] ASoC: codecs: mc13783: " Kuninori Morimoto
` (20 subsequent siblings)
43 siblings, 1 reply; 54+ messages in thread
From: Kuninori Morimoto @ 2026-08-04 0:42 UTC (permalink / raw)
To: Jaroslav Kysela, Liam Girdwood, Mark Brown, Peter Rosin,
Takashi Iwai, "Uwe Kleine-König (The Capable Hub)"
Cc: linux-sound, Uwe Kleine-König (The Capable Hub)
We can use .auto_selectable_formats. Let's adds it.
Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
---
sound/soc/codecs/max98088.c | 12 ++++++++++++
sound/soc/codecs/max98090.c | 12 ++++++++++++
sound/soc/codecs/max98095.c | 14 ++++++++++++++
sound/soc/codecs/max98371.c | 7 +++++++
sound/soc/codecs/max98373-i2c.c | 10 ++++++++++
sound/soc/codecs/max98388.c | 10 ++++++++++
sound/soc/codecs/max98390.c | 10 ++++++++++
sound/soc/codecs/max98396.c | 12 ++++++++++++
sound/soc/codecs/max9850.c | 11 +++++++++++
sound/soc/codecs/max98520.c | 10 ++++++++++
sound/soc/codecs/max9860.c | 12 ++++++++++++
sound/soc/codecs/max9867.c | 10 ++++++++++
sound/soc/codecs/max98925.c | 8 ++++++++
sound/soc/codecs/max98926.c | 8 ++++++++
sound/soc/codecs/max98927.c | 10 ++++++++++
15 files changed, 156 insertions(+)
diff --git a/sound/soc/codecs/max98088.c b/sound/soc/codecs/max98088.c
index df438baf05dc3..1dd7881c84aa3 100644
--- a/sound/soc/codecs/max98088.c
+++ b/sound/soc/codecs/max98088.c
@@ -1342,11 +1342,21 @@ static int max98088_set_bias_level(struct snd_soc_component *component,
#define MAX98088_RATES SNDRV_PCM_RATE_8000_96000
#define MAX98088_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S24_LE)
+static const u64 max98088_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 max98088_dai1_ops = {
.set_sysclk = max98088_dai_set_sysclk,
.set_fmt = max98088_dai1_set_fmt,
.hw_params = max98088_dai1_hw_params,
.mute_stream = max98088_dai1_mute,
+ .auto_selectable_formats = &max98088_selectable_formats,
+ .num_auto_selectable_formats = 1,
.no_capture_mute = 1,
};
@@ -1355,6 +1365,8 @@ static const struct snd_soc_dai_ops max98088_dai2_ops = {
.set_fmt = max98088_dai2_set_fmt,
.hw_params = max98088_dai2_hw_params,
.mute_stream = max98088_dai2_mute,
+ .auto_selectable_formats = &max98088_selectable_formats,
+ .num_auto_selectable_formats = 1,
.no_capture_mute = 1,
};
diff --git a/sound/soc/codecs/max98090.c b/sound/soc/codecs/max98090.c
index 60da518b0e57c..038790a2ae609 100644
--- a/sound/soc/codecs/max98090.c
+++ b/sound/soc/codecs/max98090.c
@@ -2382,6 +2382,16 @@ static int max98090_set_jack(struct snd_soc_component *component,
#define MAX98090_RATES SNDRV_PCM_RATE_8000_96000
#define MAX98090_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S24_LE)
+static const u64 max98090_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 max98090_dai_ops = {
.startup = max98090_dai_startup,
.set_sysclk = max98090_dai_set_sysclk,
@@ -2390,6 +2400,8 @@ static const struct snd_soc_dai_ops max98090_dai_ops = {
.hw_params = max98090_dai_hw_params,
.mute_stream = max98090_dai_mute,
.trigger = max98090_dai_trigger,
+ .auto_selectable_formats = &max98090_selectable_formats,
+ .num_auto_selectable_formats = 1,
.no_capture_mute = 1,
};
diff --git a/sound/soc/codecs/max98095.c b/sound/soc/codecs/max98095.c
index c47bfa2378b89..787b62738c08b 100644
--- a/sound/soc/codecs/max98095.c
+++ b/sound/soc/codecs/max98095.c
@@ -1413,22 +1413,36 @@ static int max98095_set_bias_level(struct snd_soc_component *component,
#define MAX98095_RATES SNDRV_PCM_RATE_8000_96000
#define MAX98095_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S24_LE)
+static const u64 max98095_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 max98095_dai1_ops = {
.set_sysclk = max98095_dai_set_sysclk,
.set_fmt = max98095_dai1_set_fmt,
.hw_params = max98095_dai1_hw_params,
+ .auto_selectable_formats = &max98095_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static const struct snd_soc_dai_ops max98095_dai2_ops = {
.set_sysclk = max98095_dai_set_sysclk,
.set_fmt = max98095_dai2_set_fmt,
.hw_params = max98095_dai2_hw_params,
+ .auto_selectable_formats = &max98095_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static const struct snd_soc_dai_ops max98095_dai3_ops = {
.set_sysclk = max98095_dai_set_sysclk,
.set_fmt = max98095_dai3_set_fmt,
.hw_params = max98095_dai3_hw_params,
+ .auto_selectable_formats = &max98095_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver max98095_dai[] = {
diff --git a/sound/soc/codecs/max98371.c b/sound/soc/codecs/max98371.c
index c8d4c68af5623..b62bd98f2252a 100644
--- a/sound/soc/codecs/max98371.c
+++ b/sound/soc/codecs/max98371.c
@@ -322,9 +322,16 @@ static const struct snd_soc_dapm_route max98371_audio_map[] = {
#define MAX98371_FORMATS (SNDRV_PCM_FMTBIT_S8 | SNDRV_PCM_FMTBIT_S16_BE | \
SNDRV_PCM_FMTBIT_S24_BE | SNDRV_PCM_FMTBIT_S32_BE)
+static const u64 max98371_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 max98371_dai_ops = {
.set_fmt = max98371_dai_set_fmt,
.hw_params = max98371_dai_hw_params,
+ .auto_selectable_formats = &max98371_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver max98371_dai[] = {
diff --git a/sound/soc/codecs/max98373-i2c.c b/sound/soc/codecs/max98373-i2c.c
index cbd7ebffa6d61..4e52282ace7f7 100644
--- a/sound/soc/codecs/max98373-i2c.c
+++ b/sound/soc/codecs/max98373-i2c.c
@@ -398,10 +398,20 @@ static int max98373_dai_tdm_slot(struct snd_soc_dai *dai,
#define MAX98373_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | \
SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S32_LE)
+static const u64 max98373_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_IB_NF;
+
static const struct snd_soc_dai_ops max98373_dai_ops = {
.set_fmt = max98373_dai_set_fmt,
.hw_params = max98373_dai_hw_params,
.set_tdm_slot = max98373_dai_tdm_slot,
+ .auto_selectable_formats = &max98373_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static bool max98373_readable_register(struct device *dev, unsigned int reg)
diff --git a/sound/soc/codecs/max98388.c b/sound/soc/codecs/max98388.c
index d97dab41bf0f5..a653e0a21899d 100644
--- a/sound/soc/codecs/max98388.c
+++ b/sound/soc/codecs/max98388.c
@@ -776,10 +776,20 @@ static int max98388_dai_tdm_slot(struct snd_soc_dai *dai,
#define MAX98388_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | \
SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S32_LE)
+static const u64 max98388_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_IB_NF;
+
static const struct snd_soc_dai_ops max98388_dai_ops = {
.set_fmt = max98388_dai_set_fmt,
.hw_params = max98388_dai_hw_params,
.set_tdm_slot = max98388_dai_tdm_slot,
+ .auto_selectable_formats = &max98388_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static bool max98388_readable_register(struct device *dev,
diff --git a/sound/soc/codecs/max98390.c b/sound/soc/codecs/max98390.c
index 66309e87fdbd8..f91e863868f6a 100644
--- a/sound/soc/codecs/max98390.c
+++ b/sound/soc/codecs/max98390.c
@@ -462,11 +462,21 @@ static int max98390_dai_set_sysclk(struct snd_soc_dai *dai,
return 0;
}
+static const u64 max98390_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_IB_NF;
+
static const struct snd_soc_dai_ops max98390_dai_ops = {
.set_sysclk = max98390_dai_set_sysclk,
.set_fmt = max98390_dai_set_fmt,
.hw_params = max98390_dai_hw_params,
.set_tdm_slot = max98390_dai_tdm_slot,
+ .auto_selectable_formats = &max98390_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static int max98390_dac_event(struct snd_soc_dapm_widget *w,
diff --git a/sound/soc/codecs/max98396.c b/sound/soc/codecs/max98396.c
index e5a2fe824c03d..935319fee41ba 100644
--- a/sound/soc/codecs/max98396.c
+++ b/sound/soc/codecs/max98396.c
@@ -790,10 +790,22 @@ static int max98396_dai_tdm_slot(struct snd_soc_dai *dai,
#define MAX98396_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | \
SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S32_LE)
+static const u64 max98396_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 max98396_dai_ops = {
.set_fmt = max98396_dai_set_fmt,
.hw_params = max98396_dai_hw_params,
.set_tdm_slot = max98396_dai_tdm_slot,
+ .auto_selectable_formats = &max98396_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static int max98396_dac_event(struct snd_soc_dapm_widget *w,
diff --git a/sound/soc/codecs/max9850.c b/sound/soc/codecs/max9850.c
index 9bd6a61212c1d..c229b732121fe 100644
--- a/sound/soc/codecs/max9850.c
+++ b/sound/soc/codecs/max9850.c
@@ -254,10 +254,21 @@ static int max9850_set_bias_level(struct snd_soc_component *component,
#define MAX9850_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE |\
SNDRV_PCM_FMTBIT_S24_LE)
+static const u64 max9850_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 max9850_dai_ops = {
.hw_params = max9850_hw_params,
.set_sysclk = max9850_set_dai_sysclk,
.set_fmt = max9850_set_dai_fmt,
+ .auto_selectable_formats = &max9850_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver max9850_dai = {
diff --git a/sound/soc/codecs/max98520.c b/sound/soc/codecs/max98520.c
index 4fb98505db1a1..57759d85907be 100644
--- a/sound/soc/codecs/max98520.c
+++ b/sound/soc/codecs/max98520.c
@@ -326,10 +326,20 @@ static int max98520_dai_tdm_slot(struct snd_soc_dai *dai,
#define MAX98520_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | \
SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S32_LE)
+static const u64 max98520_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_IB_NF;
+
static const struct snd_soc_dai_ops max98520_dai_ops = {
.set_fmt = max98520_dai_set_fmt,
.hw_params = max98520_dai_hw_params,
.set_tdm_slot = max98520_dai_tdm_slot,
+ .auto_selectable_formats = &max98520_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static int max98520_dac_event(struct snd_soc_dapm_widget *w,
diff --git a/sound/soc/codecs/max9860.c b/sound/soc/codecs/max9860.c
index 0d7ac37850bba..ebbfc4adae9a3 100644
--- a/sound/soc/codecs/max9860.c
+++ b/sound/soc/codecs/max9860.c
@@ -459,9 +459,21 @@ static int max9860_set_fmt(struct snd_soc_dai *dai, unsigned int fmt)
}
}
+static const u64 max9860_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 max9860_dai_ops = {
.hw_params = max9860_hw_params,
.set_fmt = max9860_set_fmt,
+ .auto_selectable_formats = &max9860_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver max9860_dai = {
diff --git a/sound/soc/codecs/max9867.c b/sound/soc/codecs/max9867.c
index 07a53ec2a18a3..f2214e3a19ce3 100644
--- a/sound/soc/codecs/max9867.c
+++ b/sound/soc/codecs/max9867.c
@@ -522,12 +522,22 @@ static int max9867_dai_set_fmt(struct snd_soc_dai *codec_dai,
return 0;
}
+static const u64 max9867_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 max9867_dai_ops = {
.set_sysclk = max9867_set_dai_sysclk,
.set_fmt = max9867_dai_set_fmt,
.mute_stream = max9867_mute,
.startup = max9867_startup,
.hw_params = max9867_dai_hw_params,
+ .auto_selectable_formats = &max9867_selectable_formats,
+ .num_auto_selectable_formats = 1,
.no_capture_mute = 1,
};
diff --git a/sound/soc/codecs/max98925.c b/sound/soc/codecs/max98925.c
index 4302ab16a642a..fe43ef99a0cba 100644
--- a/sound/soc/codecs/max98925.c
+++ b/sound/soc/codecs/max98925.c
@@ -484,10 +484,18 @@ static int max98925_dai_set_sysclk(struct snd_soc_dai *dai,
#define MAX98925_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | \
SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S32_LE)
+static const u64 max98925_selectable_formats =
+ 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 max98925_dai_ops = {
.set_sysclk = max98925_dai_set_sysclk,
.set_fmt = max98925_dai_set_fmt,
.hw_params = max98925_dai_hw_params,
+ .auto_selectable_formats = &max98925_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver max98925_dai[] = {
diff --git a/sound/soc/codecs/max98926.c b/sound/soc/codecs/max98926.c
index 5305e1f9d97fd..d57620a3e958a 100644
--- a/sound/soc/codecs/max98926.c
+++ b/sound/soc/codecs/max98926.c
@@ -448,9 +448,17 @@ static int max98926_dai_hw_params(struct snd_pcm_substream *substream,
#define MAX98926_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | \
SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S32_LE)
+static const u64 max98926_selectable_formats =
+ 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 max98926_dai_ops = {
.set_fmt = max98926_dai_set_fmt,
.hw_params = max98926_dai_hw_params,
+ .auto_selectable_formats = &max98926_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver max98926_dai[] = {
diff --git a/sound/soc/codecs/max98927.c b/sound/soc/codecs/max98927.c
index 524300d8fb0bc..d8dfaefdca7e8 100644
--- a/sound/soc/codecs/max98927.c
+++ b/sound/soc/codecs/max98927.c
@@ -463,11 +463,21 @@ static int max98927_dai_set_sysclk(struct snd_soc_dai *dai,
return 0;
}
+static const u64 max98927_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_IB_NF;
+
static const struct snd_soc_dai_ops max98927_dai_ops = {
.set_sysclk = max98927_dai_set_sysclk,
.set_fmt = max98927_dai_set_fmt,
.hw_params = max98927_dai_hw_params,
.set_tdm_slot = max98927_dai_tdm_slot,
+ .auto_selectable_formats = &max98927_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static int max98927_dac_event(struct snd_soc_dapm_widget *w,
--
2.53.0
^ permalink raw reply related [flat|nested] 54+ messages in thread
* [PATCH 24/44] ASoC: codecs: mc13783: use .auto_selectable_formats
2026-08-04 0:40 [PATCH 00/44] ASoC: codec: use .auto_selectable_formats Kuninori Morimoto
` (22 preceding siblings ...)
2026-08-04 0:42 ` [PATCH 23/44] ASoC: codecs: max*: " Kuninori Morimoto
@ 2026-08-04 0:42 ` Kuninori Morimoto
2026-08-04 0:42 ` [PATCH 25/44] ASoC: codecs: ml26124: " Kuninori Morimoto
` (19 subsequent siblings)
43 siblings, 0 replies; 54+ messages in thread
From: Kuninori Morimoto @ 2026-08-04 0:42 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/codecs/mc13783.c | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/sound/soc/codecs/mc13783.c b/sound/soc/codecs/mc13783.c
index 086ac97e83866..a6231a12a9b09 100644
--- a/sound/soc/codecs/mc13783.c
+++ b/sound/soc/codecs/mc13783.c
@@ -637,11 +637,21 @@ static void mc13783_remove(struct snd_soc_component *component)
#define MC13783_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE |\
SNDRV_PCM_FMTBIT_S24_LE)
+static const u64 mc13783_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 mc13783_ops_dac = {
.hw_params = mc13783_pcm_hw_params_dac,
.set_fmt = mc13783_set_fmt_async,
.set_sysclk = mc13783_set_sysclk_dac,
.set_tdm_slot = mc13783_set_tdm_slot_dac,
+ .auto_selectable_formats = &mc13783_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static const struct snd_soc_dai_ops mc13783_ops_codec = {
@@ -649,6 +659,8 @@ static const struct snd_soc_dai_ops mc13783_ops_codec = {
.set_fmt = mc13783_set_fmt_async,
.set_sysclk = mc13783_set_sysclk_codec,
.set_tdm_slot = mc13783_set_tdm_slot_codec,
+ .auto_selectable_formats = &mc13783_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
/*
--
2.53.0
^ permalink raw reply related [flat|nested] 54+ messages in thread
* [PATCH 25/44] ASoC: codecs: ml26124: use .auto_selectable_formats
2026-08-04 0:40 [PATCH 00/44] ASoC: codec: use .auto_selectable_formats Kuninori Morimoto
` (23 preceding siblings ...)
2026-08-04 0:42 ` [PATCH 24/44] ASoC: codecs: mc13783: " Kuninori Morimoto
@ 2026-08-04 0:42 ` Kuninori Morimoto
2026-08-04 0:42 ` [PATCH 26/44] ASoC: codecs: nau*: " Kuninori Morimoto
` (18 subsequent siblings)
43 siblings, 0 replies; 54+ messages in thread
From: Kuninori Morimoto @ 2026-08-04 0:42 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/codecs/ml26124.c | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/sound/soc/codecs/ml26124.c b/sound/soc/codecs/ml26124.c
index 8a14626d43ffd..ad111d92cffab 100644
--- a/sound/soc/codecs/ml26124.c
+++ b/sound/soc/codecs/ml26124.c
@@ -490,11 +490,17 @@ static int ml26124_set_bias_level(struct snd_soc_component *component,
return 0;
}
+static const u64 ml26124_selectable_formats =
+ SND_SOC_POSSIBLE_DAIFMT_I2S |
+ SND_SOC_POSSIBLE_DAIFMT_NB_NF;
+
static const struct snd_soc_dai_ops ml26124_dai_ops = {
.hw_params = ml26124_hw_params,
.mute_stream = ml26124_mute,
.set_fmt = ml26124_set_dai_fmt,
.set_sysclk = ml26124_set_dai_sysclk,
+ .auto_selectable_formats = &ml26124_selectable_formats,
+ .num_auto_selectable_formats = 1,
.no_capture_mute = 1,
};
--
2.53.0
^ permalink raw reply related [flat|nested] 54+ messages in thread
* [PATCH 26/44] ASoC: codecs: nau*: use .auto_selectable_formats
2026-08-04 0:40 [PATCH 00/44] ASoC: codec: use .auto_selectable_formats Kuninori Morimoto
` (24 preceding siblings ...)
2026-08-04 0:42 ` [PATCH 25/44] ASoC: codecs: ml26124: " Kuninori Morimoto
@ 2026-08-04 0:42 ` Kuninori Morimoto
2026-08-04 0:42 ` [PATCH 27/44] ASoC: codecs: ntp8*: " Kuninori Morimoto
` (17 subsequent siblings)
43 siblings, 0 replies; 54+ messages in thread
From: Kuninori Morimoto @ 2026-08-04 0:42 UTC (permalink / raw)
To: Cristian Ciocaltea, Jaroslav Kysela, Liam Girdwood, Mark Brown,
Takashi Iwai, "Uwe Kleine-König (The Capable Hub)"
Cc: linux-sound, Uwe Kleine-König (The Capable Hub)
We can use .auto_selectable_formats. Let's adds it.
Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
---
sound/soc/codecs/nau8325.c | 11 +++++++++++
sound/soc/codecs/nau8540.c | 11 +++++++++++
sound/soc/codecs/nau8810.c | 12 ++++++++++++
sound/soc/codecs/nau8821.c | 11 +++++++++++
sound/soc/codecs/nau8822.c | 12 ++++++++++++
sound/soc/codecs/nau8824.c | 11 +++++++++++
sound/soc/codecs/nau8825.c | 11 +++++++++++
7 files changed, 79 insertions(+)
diff --git a/sound/soc/codecs/nau8325.c b/sound/soc/codecs/nau8325.c
index 236d94c29c249..2c95ed00a681f 100644
--- a/sound/soc/codecs/nau8325.c
+++ b/sound/soc/codecs/nau8325.c
@@ -628,10 +628,21 @@ static const struct snd_soc_component_driver nau8325_component_driver = {
.num_dapm_routes = ARRAY_SIZE(nau8325_dapm_routes),
};
+static const u64 nau8325_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_IB_NF;
+
static const struct snd_soc_dai_ops nau8325_dai_ops = {
.startup = nau8325_dai_startup,
.hw_params = nau8325_hw_params,
.set_fmt = nau8325_set_fmt,
+ .auto_selectable_formats = &nau8325_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
#define NAU8325_RATES SNDRV_PCM_RATE_8000_96000
diff --git a/sound/soc/codecs/nau8540.c b/sound/soc/codecs/nau8540.c
index fefbd5722c004..a939f4b7bb250 100644
--- a/sound/soc/codecs/nau8540.c
+++ b/sound/soc/codecs/nau8540.c
@@ -623,12 +623,23 @@ static int nau8540_dai_trigger(struct snd_pcm_substream *substream,
return ret;
}
+static const u64 nau8540_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_IB_NF;
+
static const struct snd_soc_dai_ops nau8540_dai_ops = {
.startup = nau8540_dai_startup,
.hw_params = nau8540_hw_params,
.set_fmt = nau8540_set_fmt,
.set_tdm_slot = nau8540_set_tdm_slot,
.trigger = nau8540_dai_trigger,
+ .auto_selectable_formats = &nau8540_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
#define NAU8540_RATES SNDRV_PCM_RATE_8000_48000
diff --git a/sound/soc/codecs/nau8810.c b/sound/soc/codecs/nau8810.c
index a050387dd485f..eb3e93380678c 100644
--- a/sound/soc/codecs/nau8810.c
+++ b/sound/soc/codecs/nau8810.c
@@ -817,11 +817,23 @@ static int nau8810_set_bias_level(struct snd_soc_component *component,
#define NAU8810_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE | \
SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S32_LE)
+static const u64 nau8810_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 nau8810_ops = {
.hw_params = nau8810_pcm_hw_params,
.set_fmt = nau8810_set_dai_fmt,
.set_sysclk = nau8810_set_sysclk,
.set_pll = nau8810_set_pll,
+ .auto_selectable_formats = &nau8810_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver nau8810_dai = {
diff --git a/sound/soc/codecs/nau8821.c b/sound/soc/codecs/nau8821.c
index c45c5b864ea4b..ecadbaee10379 100644
--- a/sound/soc/codecs/nau8821.c
+++ b/sound/soc/codecs/nau8821.c
@@ -981,11 +981,22 @@ static int nau8821_digital_mute(struct snd_soc_dai *dai, int mute,
NAU8821_R31_MUTE_CTRL, NAU8821_DAC_SOFT_MUTE, val);
}
+static const u64 nau8821_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_IB_NF;
+
static const struct snd_soc_dai_ops nau8821_dai_ops = {
.startup = nau8821_dai_startup,
.hw_params = nau8821_hw_params,
.set_fmt = nau8821_set_dai_fmt,
.mute_stream = nau8821_digital_mute,
+ .auto_selectable_formats = &nau8821_selectable_formats,
+ .num_auto_selectable_formats = 1,
.no_capture_mute = 1,
};
diff --git a/sound/soc/codecs/nau8822.c b/sound/soc/codecs/nau8822.c
index 830164e991a79..20913d9f7be97 100644
--- a/sound/soc/codecs/nau8822.c
+++ b/sound/soc/codecs/nau8822.c
@@ -1026,12 +1026,24 @@ static int nau8822_set_bias_level(struct snd_soc_component *component,
#define NAU8822_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE | \
SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S32_LE)
+static const u64 nau8822_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 nau8822_dai_ops = {
.hw_params = nau8822_hw_params,
.mute_stream = nau8822_mute,
.set_fmt = nau8822_set_dai_fmt,
.set_sysclk = nau8822_set_dai_sysclk,
.set_pll = nau8822_set_pll,
+ .auto_selectable_formats = &nau8822_selectable_formats,
+ .num_auto_selectable_formats = 1,
.no_capture_mute = 1,
};
diff --git a/sound/soc/codecs/nau8824.c b/sound/soc/codecs/nau8824.c
index 426a488ff2a34..853eb9472af92 100644
--- a/sound/soc/codecs/nau8824.c
+++ b/sound/soc/codecs/nau8824.c
@@ -1580,11 +1580,22 @@ static const struct snd_soc_component_driver nau8824_component_driver = {
.endianness = 1,
};
+static const u64 nau8824_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_IB_NF;
+
static const struct snd_soc_dai_ops nau8824_dai_ops = {
.startup = nau8824_dai_startup,
.hw_params = nau8824_hw_params,
.set_fmt = nau8824_set_fmt,
.set_tdm_slot = nau8824_set_tdm_slot,
+ .auto_selectable_formats = &nau8824_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
#define NAU8824_RATES SNDRV_PCM_RATE_8000_192000
diff --git a/sound/soc/codecs/nau8825.c b/sound/soc/codecs/nau8825.c
index ae83b778bf935..5165aeba4b675 100644
--- a/sound/soc/codecs/nau8825.c
+++ b/sound/soc/codecs/nau8825.c
@@ -1507,11 +1507,22 @@ static int nau8825_set_tdm_slot(struct snd_soc_dai *dai, unsigned int tx_mask,
return 0;
}
+static const u64 nau8825_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_IB_NF;
+
static const struct snd_soc_dai_ops nau8825_dai_ops = {
.startup = nau8825_dai_startup,
.hw_params = nau8825_hw_params,
.set_fmt = nau8825_set_dai_fmt,
.set_tdm_slot = nau8825_set_tdm_slot,
+ .auto_selectable_formats = &nau8825_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
#define NAU8825_RATES SNDRV_PCM_RATE_8000_192000
--
2.53.0
^ permalink raw reply related [flat|nested] 54+ messages in thread
* [PATCH 27/44] ASoC: codecs: ntp8*: use .auto_selectable_formats
2026-08-04 0:40 [PATCH 00/44] ASoC: codec: use .auto_selectable_formats Kuninori Morimoto
` (25 preceding siblings ...)
2026-08-04 0:42 ` [PATCH 26/44] ASoC: codecs: nau*: " Kuninori Morimoto
@ 2026-08-04 0:42 ` Kuninori Morimoto
2026-08-04 0:42 ` [PATCH 28/44] ASoC: codecs: rk33*: " Kuninori Morimoto
` (16 subsequent siblings)
43 siblings, 0 replies; 54+ messages in thread
From: Kuninori Morimoto @ 2026-08-04 0:42 UTC (permalink / raw)
To: Jaroslav Kysela, Liam Girdwood, Mark Brown, Takashi Iwai,
"Uwe Kleine-König (The Capable Hub)"
Cc: linux-sound, Uwe Kleine-König (The Capable Hub)
We can use .auto_selectable_formats. Let's adds it.
Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
---
sound/soc/codecs/ntp8835.c | 7 +++++++
sound/soc/codecs/ntp8918.c | 7 +++++++
2 files changed, 14 insertions(+)
diff --git a/sound/soc/codecs/ntp8835.c b/sound/soc/codecs/ntp8835.c
index 5837b9379fee7..39620b84e214d 100644
--- a/sound/soc/codecs/ntp8835.c
+++ b/sound/soc/codecs/ntp8835.c
@@ -385,9 +385,16 @@ static int ntp8835_set_fmt(struct snd_soc_dai *dai, unsigned int fmt)
return 0;
};
+static const u64 ntp8835_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 ntp8835_dai_ops = {
.hw_params = ntp8835_hw_params,
.set_fmt = ntp8835_set_fmt,
+ .auto_selectable_formats = &ntp8835_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver ntp8835_dai = {
diff --git a/sound/soc/codecs/ntp8918.c b/sound/soc/codecs/ntp8918.c
index a18d79aa80aaa..eca34fafc4e6c 100644
--- a/sound/soc/codecs/ntp8918.c
+++ b/sound/soc/codecs/ntp8918.c
@@ -306,10 +306,17 @@ static int ntp8918_digital_mute(struct snd_soc_dai *dai, int mute, int stream)
mute_mask, mute ? mute_mask : 0);
}
+static const u64 ntp8918_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 ntp8918_dai_ops = {
.hw_params = ntp8918_hw_params,
.set_fmt = ntp8918_set_fmt,
.mute_stream = ntp8918_digital_mute,
+ .auto_selectable_formats = &ntp8918_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver ntp8918_dai = {
--
2.53.0
^ permalink raw reply related [flat|nested] 54+ messages in thread
* [PATCH 28/44] ASoC: codecs: rk33*: use .auto_selectable_formats
2026-08-04 0:40 [PATCH 00/44] ASoC: codec: use .auto_selectable_formats Kuninori Morimoto
` (26 preceding siblings ...)
2026-08-04 0:42 ` [PATCH 27/44] ASoC: codecs: ntp8*: " Kuninori Morimoto
@ 2026-08-04 0:42 ` Kuninori Morimoto
2026-08-04 0:43 ` [PATCH 29/44] ASoC: codecs: rtq912*: " Kuninori Morimoto
` (15 subsequent siblings)
43 siblings, 0 replies; 54+ messages in thread
From: Kuninori Morimoto @ 2026-08-04 0:42 UTC (permalink / raw)
To: "Cássio Gabriel", Jaroslav Kysela, Liam Girdwood,
Luca Ceresoli, Mark Brown, Takashi Iwai
Cc: Cássio Gabriel, linux-sound
We can use .auto_selectable_formats. Let's adds it.
Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
---
sound/soc/codecs/rk3308_codec.c | 11 +++++++++++
sound/soc/codecs/rk3328_codec.c | 9 +++++++++
2 files changed, 20 insertions(+)
diff --git a/sound/soc/codecs/rk3308_codec.c b/sound/soc/codecs/rk3308_codec.c
index 60befe9d37f05..abed31ba660c8 100644
--- a/sound/soc/codecs/rk3308_codec.c
+++ b/sound/soc/codecs/rk3308_codec.c
@@ -679,9 +679,20 @@ static int rk3308_codec_hw_params(struct snd_pcm_substream *substream,
rk3308_codec_adc_dig_config(rk3308, params);
}
+static const u64 rk3308_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_IF |
+ SND_SOC_POSSIBLE_DAIFMT_IB_NF |
+ SND_SOC_POSSIBLE_DAIFMT_IB_IF;
+
static const struct snd_soc_dai_ops rk3308_codec_dai_ops = {
.hw_params = rk3308_codec_hw_params,
.set_fmt = rk3308_codec_set_dai_fmt,
+ .auto_selectable_formats = &rk3308_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver rk3308_codec_dai_driver = {
diff --git a/sound/soc/codecs/rk3328_codec.c b/sound/soc/codecs/rk3328_codec.c
index 5871b5a819757..c2798ee940593 100644
--- a/sound/soc/codecs/rk3328_codec.c
+++ b/sound/soc/codecs/rk3328_codec.c
@@ -312,12 +312,21 @@ static void rk3328_pcm_shutdown(struct snd_pcm_substream *substream,
rk3328_codec_close_playback(rk3328);
}
+static const u64 rk3328_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 rk3328_dai_ops = {
.hw_params = rk3328_hw_params,
.set_fmt = rk3328_set_dai_fmt,
.mute_stream = rk3328_mute_stream,
.startup = rk3328_pcm_startup,
.shutdown = rk3328_pcm_shutdown,
+ .auto_selectable_formats = &rk3328_selectable_formats,
+ .num_auto_selectable_formats = 1,
.no_capture_mute = 1,
};
--
2.53.0
^ permalink raw reply related [flat|nested] 54+ messages in thread
* [PATCH 29/44] ASoC: codecs: rtq912*: use .auto_selectable_formats
2026-08-04 0:40 [PATCH 00/44] ASoC: codec: use .auto_selectable_formats Kuninori Morimoto
` (27 preceding siblings ...)
2026-08-04 0:42 ` [PATCH 28/44] ASoC: codecs: rk33*: " Kuninori Morimoto
@ 2026-08-04 0:43 ` Kuninori Morimoto
2026-08-04 0:43 ` [PATCH 30/44] ASoC: codecs: rt*: " Kuninori Morimoto
` (14 subsequent siblings)
43 siblings, 0 replies; 54+ messages in thread
From: Kuninori Morimoto @ 2026-08-04 0:43 UTC (permalink / raw)
To: Jaroslav Kysela, Liam Girdwood, Mark Brown, Oder Chiou,
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/codecs/rtq9124.c | 9 +++++++++
sound/soc/codecs/rtq9128.c | 9 +++++++++
2 files changed, 18 insertions(+)
diff --git a/sound/soc/codecs/rtq9124.c b/sound/soc/codecs/rtq9124.c
index 2a041894bc0c9..cc1c68752fde4 100644
--- a/sound/soc/codecs/rtq9124.c
+++ b/sound/soc/codecs/rtq9124.c
@@ -286,10 +286,19 @@ static int rtq9124_dai_hw_params(struct snd_pcm_substream *substream,
return 0;
}
+static const u64 rtq9124_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 rtq9124_dai_ops = {
.set_fmt = rtq9124_dai_set_format,
.set_tdm_slot = rtq9124_dai_set_tdm_slot,
.hw_params = rtq9124_dai_hw_params,
+ .auto_selectable_formats = &rtq9124_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver rtq9124_dai_driver = {
diff --git a/sound/soc/codecs/rtq9128.c b/sound/soc/codecs/rtq9128.c
index 573200e5062f5..9567e90c0b62a 100644
--- a/sound/soc/codecs/rtq9128.c
+++ b/sound/soc/codecs/rtq9128.c
@@ -727,11 +727,20 @@ static int rtq9128_dai_mute_stream(struct snd_soc_dai *dai, int mute, int stream
return ret < 0 ? ret : 0;
}
+static const u64 rtq9128_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 rtq9128_dai_ops = {
.set_fmt = rtq9128_dai_set_fmt,
.set_tdm_slot = rtq9128_dai_set_tdm_slot,
.hw_params = rtq9128_dai_hw_params,
.mute_stream = rtq9128_dai_mute_stream,
+ .auto_selectable_formats = &rtq9128_selectable_formats,
+ .num_auto_selectable_formats = 1,
.no_capture_mute = 1,
};
--
2.53.0
^ permalink raw reply related [flat|nested] 54+ messages in thread
* [PATCH 30/44] ASoC: codecs: rt*: use .auto_selectable_formats
2026-08-04 0:40 [PATCH 00/44] ASoC: codec: use .auto_selectable_formats Kuninori Morimoto
` (28 preceding siblings ...)
2026-08-04 0:43 ` [PATCH 29/44] ASoC: codecs: rtq912*: " Kuninori Morimoto
@ 2026-08-04 0:43 ` Kuninori Morimoto
2026-08-04 17:39 ` Mark Brown
2026-08-04 0:43 ` [PATCH 31/44] ASoC: codecs: sgtl5000: " Kuninori Morimoto
` (13 subsequent siblings)
43 siblings, 1 reply; 54+ messages in thread
From: Kuninori Morimoto @ 2026-08-04 0:43 UTC (permalink / raw)
To: Jaroslav Kysela, Liam Girdwood, Mark Brown, Oder Chiou,
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/codecs/rt1011.c | 10 ++++++++++
sound/soc/codecs/rt1015.c | 10 ++++++++++
sound/soc/codecs/rt1016.c | 10 ++++++++++
sound/soc/codecs/rt1019.c | 10 ++++++++++
sound/soc/codecs/rt1305.c | 10 ++++++++++
sound/soc/codecs/rt1308.c | 10 ++++++++++
sound/soc/codecs/rt1318.c | 10 ++++++++++
sound/soc/codecs/rt274.c | 8 ++++++++
sound/soc/codecs/rt286.c | 8 ++++++++
sound/soc/codecs/rt298.c | 8 ++++++++
sound/soc/codecs/rt5514.c | 12 ++++++++++++
sound/soc/codecs/rt5616.c | 10 ++++++++++
sound/soc/codecs/rt5631.c | 10 ++++++++++
sound/soc/codecs/rt5640.c | 10 ++++++++++
sound/soc/codecs/rt5645.c | 10 ++++++++++
sound/soc/codecs/rt5651.c | 10 ++++++++++
sound/soc/codecs/rt5659.c | 10 ++++++++++
sound/soc/codecs/rt5660.c | 10 ++++++++++
sound/soc/codecs/rt5663.c | 10 ++++++++++
sound/soc/codecs/rt5665.c | 10 ++++++++++
sound/soc/codecs/rt5668.c | 14 ++++++++++++++
sound/soc/codecs/rt5670.c | 10 ++++++++++
sound/soc/codecs/rt5677.c | 10 ++++++++++
sound/soc/codecs/rt5682.c | 14 ++++++++++++++
sound/soc/codecs/rt5682s.c | 14 ++++++++++++++
sound/soc/codecs/rt9120.c | 9 +++++++++
sound/soc/codecs/rt9123.c | 9 +++++++++
27 files changed, 276 insertions(+)
diff --git a/sound/soc/codecs/rt1011.c b/sound/soc/codecs/rt1011.c
index 15488a0592837..d47b0370dd6b0 100644
--- a/sound/soc/codecs/rt1011.c
+++ b/sound/soc/codecs/rt1011.c
@@ -2133,10 +2133,20 @@ static int rt1011_set_bias_level(struct snd_soc_component *component,
SNDRV_PCM_FMTBIT_S20_3LE | SNDRV_PCM_FMTBIT_S16_LE | \
SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S32_LE)
+static const u64 rt1011_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_IB_NF;
+
static const struct snd_soc_dai_ops rt1011_aif_dai_ops = {
.hw_params = rt1011_hw_params,
.set_fmt = rt1011_set_dai_fmt,
.set_tdm_slot = rt1011_set_tdm_slot,
+ .auto_selectable_formats = &rt1011_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver rt1011_dai[] = {
diff --git a/sound/soc/codecs/rt1015.c b/sound/soc/codecs/rt1015.c
index ff0c08ff610e1..c6d59c2860644 100644
--- a/sound/soc/codecs/rt1015.c
+++ b/sound/soc/codecs/rt1015.c
@@ -1016,10 +1016,20 @@ static void rt1015_remove(struct snd_soc_component *component)
#define RT1015_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE | \
SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S8)
+static const u64 rt1015_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_IB_NF;
+
static const struct snd_soc_dai_ops rt1015_aif_dai_ops = {
.hw_params = rt1015_hw_params,
.set_fmt = rt1015_set_dai_fmt,
.set_tdm_slot = rt1015_set_tdm_slot,
+ .auto_selectable_formats = &rt1015_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver rt1015_dai[] = {
diff --git a/sound/soc/codecs/rt1016.c b/sound/soc/codecs/rt1016.c
index 11c8c45574a13..56a2f3d3354df 100644
--- a/sound/soc/codecs/rt1016.c
+++ b/sound/soc/codecs/rt1016.c
@@ -534,9 +534,19 @@ static void rt1016_remove(struct snd_soc_component *component)
#define RT1016_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE | \
SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S8)
+static const u64 rt1016_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_IB_NF;
+
static const struct snd_soc_dai_ops rt1016_aif_dai_ops = {
.hw_params = rt1016_hw_params,
.set_fmt = rt1016_set_dai_fmt,
+ .auto_selectable_formats = &rt1016_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver rt1016_dai[] = {
diff --git a/sound/soc/codecs/rt1019.c b/sound/soc/codecs/rt1019.c
index 370521149ac8a..3998abccd93a8 100644
--- a/sound/soc/codecs/rt1019.c
+++ b/sound/soc/codecs/rt1019.c
@@ -492,12 +492,22 @@ static int rt1019_probe(struct snd_soc_component *component)
#define RT1019_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE | \
SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S8)
+static const u64 rt1019_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_IB_NF;
+
static const struct snd_soc_dai_ops rt1019_aif_dai_ops = {
.hw_params = rt1019_hw_params,
.set_fmt = rt1019_set_dai_fmt,
.set_sysclk = rt1019_set_dai_sysclk,
.set_pll = rt1019_set_dai_pll,
.set_tdm_slot = rt1019_set_tdm_slot,
+ .auto_selectable_formats = &rt1019_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver rt1019_dai[] = {
diff --git a/sound/soc/codecs/rt1305.c b/sound/soc/codecs/rt1305.c
index 2d5fad76cf528..92998ec0a392e 100644
--- a/sound/soc/codecs/rt1305.c
+++ b/sound/soc/codecs/rt1305.c
@@ -910,9 +910,19 @@ static int rt1305_resume(struct snd_soc_component *component)
SNDRV_PCM_FMTBIT_S20_3LE | SNDRV_PCM_FMTBIT_S16_LE | \
SNDRV_PCM_FMTBIT_S24_LE)
+static const u64 rt1305_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_IB_NF;
+
static const struct snd_soc_dai_ops rt1305_aif_dai_ops = {
.hw_params = rt1305_hw_params,
.set_fmt = rt1305_set_dai_fmt,
+ .auto_selectable_formats = &rt1305_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver rt1305_dai[] = {
diff --git a/sound/soc/codecs/rt1308.c b/sound/soc/codecs/rt1308.c
index 630946cd7cdf8..28c25871ec0c0 100644
--- a/sound/soc/codecs/rt1308.c
+++ b/sound/soc/codecs/rt1308.c
@@ -729,9 +729,19 @@ static int rt1308_resume(struct snd_soc_component *component)
SNDRV_PCM_FMTBIT_S20_3LE | SNDRV_PCM_FMTBIT_S16_LE | \
SNDRV_PCM_FMTBIT_S24_LE)
+static const u64 rt1308_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_IB_NF;
+
static const struct snd_soc_dai_ops rt1308_aif_dai_ops = {
.hw_params = rt1308_hw_params,
.set_fmt = rt1308_set_dai_fmt,
+ .auto_selectable_formats = &rt1308_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver rt1308_dai[] = {
diff --git a/sound/soc/codecs/rt1318.c b/sound/soc/codecs/rt1318.c
index d13fd0e141252..23d6ee974ef16 100644
--- a/sound/soc/codecs/rt1318.c
+++ b/sound/soc/codecs/rt1318.c
@@ -1087,12 +1087,22 @@ static int rt1318_resume(struct snd_soc_component *component)
#define RT1318_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE | \
SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S8)
+static const u64 rt1318_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_IB_NF;
+
static const struct snd_soc_dai_ops rt1318_aif_dai_ops = {
.hw_params = rt1318_hw_params,
.set_fmt = rt1318_set_dai_fmt,
.set_sysclk = rt1318_set_dai_sysclk,
.set_pll = rt1318_set_dai_pll,
.set_tdm_slot = rt1318_set_tdm_slot,
+ .auto_selectable_formats = &rt1318_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver rt1318_dai[] = {
diff --git a/sound/soc/codecs/rt274.c b/sound/soc/codecs/rt274.c
index 63b5fc439773d..d70feeb7aa1f2 100644
--- a/sound/soc/codecs/rt274.c
+++ b/sound/soc/codecs/rt274.c
@@ -1027,6 +1027,12 @@ static int rt274_resume(struct snd_soc_component *component)
#define RT274_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE | \
SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S8)
+static const u64 rt274_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;
+
static const struct snd_soc_dai_ops rt274_aif_dai_ops = {
.hw_params = rt274_hw_params,
.set_fmt = rt274_set_dai_fmt,
@@ -1034,6 +1040,8 @@ static const struct snd_soc_dai_ops rt274_aif_dai_ops = {
.set_pll = rt274_set_dai_pll,
.set_bclk_ratio = rt274_set_bclk_ratio,
.set_tdm_slot = rt274_set_tdm_slot,
+ .auto_selectable_formats = &rt274_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver rt274_dai[] = {
diff --git a/sound/soc/codecs/rt286.c b/sound/soc/codecs/rt286.c
index ded0ea3324804..0632fec5b0108 100644
--- a/sound/soc/codecs/rt286.c
+++ b/sound/soc/codecs/rt286.c
@@ -995,11 +995,19 @@ static int rt286_resume(struct snd_soc_component *component)
#define RT286_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE | \
SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S8)
+static const u64 rt286_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;
+
static const struct snd_soc_dai_ops rt286_aif_dai_ops = {
.hw_params = rt286_hw_params,
.set_fmt = rt286_set_dai_fmt,
.set_sysclk = rt286_set_dai_sysclk,
.set_bclk_ratio = rt286_set_bclk_ratio,
+ .auto_selectable_formats = &rt286_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver rt286_dai[] = {
diff --git a/sound/soc/codecs/rt298.c b/sound/soc/codecs/rt298.c
index 5414a1712b571..5901638198d8d 100644
--- a/sound/soc/codecs/rt298.c
+++ b/sound/soc/codecs/rt298.c
@@ -1056,11 +1056,19 @@ static int rt298_resume(struct snd_soc_component *component)
#define RT298_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE | \
SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S8)
+static const u64 rt298_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;
+
static const struct snd_soc_dai_ops rt298_aif_dai_ops = {
.hw_params = rt298_hw_params,
.set_fmt = rt298_set_dai_fmt,
.set_sysclk = rt298_set_dai_sysclk,
.set_bclk_ratio = rt298_set_bclk_ratio,
+ .auto_selectable_formats = &rt298_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver rt298_dai[] = {
diff --git a/sound/soc/codecs/rt5514.c b/sound/soc/codecs/rt5514.c
index 58aecd4c83a60..8dad8ba0fe0ff 100644
--- a/sound/soc/codecs/rt5514.c
+++ b/sound/soc/codecs/rt5514.c
@@ -1142,12 +1142,24 @@ static int rt5514_i2c_write(void *context, unsigned int reg, unsigned int val)
#define RT5514_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE | \
SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S8)
+static const u64 rt5514_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 rt5514_aif_dai_ops = {
.hw_params = rt5514_hw_params,
.set_fmt = rt5514_set_dai_fmt,
.set_sysclk = rt5514_set_dai_sysclk,
.set_pll = rt5514_set_dai_pll,
.set_tdm_slot = rt5514_set_tdm_slot,
+ .auto_selectable_formats = &rt5514_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver rt5514_dai[] = {
diff --git a/sound/soc/codecs/rt5616.c b/sound/soc/codecs/rt5616.c
index 46ee412dc81db..3f9d97d04d48a 100644
--- a/sound/soc/codecs/rt5616.c
+++ b/sound/soc/codecs/rt5616.c
@@ -1260,11 +1260,21 @@ static int rt5616_resume(struct snd_soc_component *component)
#define RT5616_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE | \
SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S8)
+static const u64 rt5616_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_IB_NF;
+
static const struct snd_soc_dai_ops rt5616_aif_dai_ops = {
.hw_params = rt5616_hw_params,
.set_fmt = rt5616_set_dai_fmt,
.set_sysclk = rt5616_set_dai_sysclk,
.set_pll = rt5616_set_dai_pll,
+ .auto_selectable_formats = &rt5616_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver rt5616_dai[] = {
diff --git a/sound/soc/codecs/rt5631.c b/sound/soc/codecs/rt5631.c
index ed1233973eb83..f97fd24e4229a 100644
--- a/sound/soc/codecs/rt5631.c
+++ b/sound/soc/codecs/rt5631.c
@@ -1626,11 +1626,21 @@ static int rt5631_probe(struct snd_soc_component *component)
SNDRV_PCM_FMTBIT_S24_LE | \
SNDRV_PCM_FMTBIT_S8)
+static const u64 rt5631_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_IB_NF;
+
static const struct snd_soc_dai_ops rt5631_ops = {
.hw_params = rt5631_hifi_pcm_params,
.set_fmt = rt5631_hifi_codec_set_dai_fmt,
.set_sysclk = rt5631_hifi_codec_set_dai_sysclk,
.set_pll = rt5631_codec_set_dai_pll,
+ .auto_selectable_formats = &rt5631_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver rt5631_dai[] = {
diff --git a/sound/soc/codecs/rt5640.c b/sound/soc/codecs/rt5640.c
index 74fd05176eff7..4fa1eee8e87f3 100644
--- a/sound/soc/codecs/rt5640.c
+++ b/sound/soc/codecs/rt5640.c
@@ -2877,11 +2877,21 @@ static int rt5640_resume(struct snd_soc_component *component)
#define RT5640_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE | \
SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S8)
+static const u64 rt5640_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_IB_NF;
+
static const struct snd_soc_dai_ops rt5640_aif_dai_ops = {
.hw_params = rt5640_hw_params,
.set_fmt = rt5640_set_dai_fmt,
.set_sysclk = rt5640_set_dai_sysclk,
.set_pll = rt5640_set_dai_pll,
+ .auto_selectable_formats = &rt5640_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver rt5640_dai[] = {
diff --git a/sound/soc/codecs/rt5645.c b/sound/soc/codecs/rt5645.c
index 0d546fb34e527..11715e9b8b250 100644
--- a/sound/soc/codecs/rt5645.c
+++ b/sound/soc/codecs/rt5645.c
@@ -3537,12 +3537,22 @@ static int rt5645_resume(struct snd_soc_component *component)
#define RT5645_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE | \
SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S8)
+static const u64 rt5645_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_IB_NF;
+
static const struct snd_soc_dai_ops rt5645_aif_dai_ops = {
.hw_params = rt5645_hw_params,
.set_fmt = rt5645_set_dai_fmt,
.set_sysclk = rt5645_set_dai_sysclk,
.set_tdm_slot = rt5645_set_tdm_slot,
.set_pll = rt5645_set_dai_pll,
+ .auto_selectable_formats = &rt5645_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver rt5645_dai[] = {
diff --git a/sound/soc/codecs/rt5651.c b/sound/soc/codecs/rt5651.c
index 5c729135f71bd..9723b4c7540cb 100644
--- a/sound/soc/codecs/rt5651.c
+++ b/sound/soc/codecs/rt5651.c
@@ -2102,11 +2102,21 @@ static int rt5651_resume(struct snd_soc_component *component)
#define RT5651_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE | \
SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S8)
+static const u64 rt5651_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_IB_NF;
+
static const struct snd_soc_dai_ops rt5651_aif_dai_ops = {
.hw_params = rt5651_hw_params,
.set_fmt = rt5651_set_dai_fmt,
.set_sysclk = rt5651_set_dai_sysclk,
.set_pll = rt5651_set_dai_pll,
+ .auto_selectable_formats = &rt5651_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver rt5651_dai[] = {
diff --git a/sound/soc/codecs/rt5659.c b/sound/soc/codecs/rt5659.c
index 3097ee6d4e89f..3d782f41ccdd8 100644
--- a/sound/soc/codecs/rt5659.c
+++ b/sound/soc/codecs/rt5659.c
@@ -3716,11 +3716,21 @@ static int rt5659_resume(struct snd_soc_component *component)
#define RT5659_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE | \
SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S8)
+static const u64 rt5659_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_IB_NF;
+
static const struct snd_soc_dai_ops rt5659_aif_dai_ops = {
.hw_params = rt5659_hw_params,
.set_fmt = rt5659_set_dai_fmt,
.set_tdm_slot = rt5659_set_tdm_slot,
.set_bclk_ratio = rt5659_set_bclk_ratio,
+ .auto_selectable_formats = &rt5659_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver rt5659_dai[] = {
diff --git a/sound/soc/codecs/rt5660.c b/sound/soc/codecs/rt5660.c
index edf2e3e346e4f..807604120d282 100644
--- a/sound/soc/codecs/rt5660.c
+++ b/sound/soc/codecs/rt5660.c
@@ -1161,11 +1161,21 @@ static int rt5660_resume(struct snd_soc_component *component)
#define RT5660_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE | \
SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S8)
+static const u64 rt5660_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_IB_NF;
+
static const struct snd_soc_dai_ops rt5660_aif_dai_ops = {
.hw_params = rt5660_hw_params,
.set_fmt = rt5660_set_dai_fmt,
.set_sysclk = rt5660_set_dai_sysclk,
.set_pll = rt5660_set_dai_pll,
+ .auto_selectable_formats = &rt5660_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver rt5660_dai[] = {
diff --git a/sound/soc/codecs/rt5663.c b/sound/soc/codecs/rt5663.c
index 262d3bba1f3d4..ec46e6180cc0e 100644
--- a/sound/soc/codecs/rt5663.c
+++ b/sound/soc/codecs/rt5663.c
@@ -3222,6 +3222,14 @@ static int rt5663_resume(struct snd_soc_component *component)
#define RT5663_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE | \
SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S8)
+static const u64 rt5663_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_IB_NF;
+
static const struct snd_soc_dai_ops rt5663_aif_dai_ops = {
.hw_params = rt5663_hw_params,
.set_fmt = rt5663_set_dai_fmt,
@@ -3229,6 +3237,8 @@ static const struct snd_soc_dai_ops rt5663_aif_dai_ops = {
.set_pll = rt5663_set_dai_pll,
.set_tdm_slot = rt5663_set_tdm_slot,
.set_bclk_ratio = rt5663_set_bclk_ratio,
+ .auto_selectable_formats = &rt5663_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver rt5663_dai[] = {
diff --git a/sound/soc/codecs/rt5665.c b/sound/soc/codecs/rt5665.c
index 1d987472ba42f..9545758f58d66 100644
--- a/sound/soc/codecs/rt5665.c
+++ b/sound/soc/codecs/rt5665.c
@@ -4401,11 +4401,21 @@ static int rt5665_resume(struct snd_soc_component *component)
#define RT5665_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE | \
SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S8)
+static const u64 rt5665_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_IB_NF;
+
static const struct snd_soc_dai_ops rt5665_aif_dai_ops = {
.hw_params = rt5665_hw_params,
.set_fmt = rt5665_set_dai_fmt,
.set_tdm_slot = rt5665_set_tdm_slot,
.set_bclk_ratio = rt5665_set_bclk_ratio,
+ .auto_selectable_formats = &rt5665_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver rt5665_dai[] = {
diff --git a/sound/soc/codecs/rt5668.c b/sound/soc/codecs/rt5668.c
index 4154bad276101..1a4a928c7c3c6 100644
--- a/sound/soc/codecs/rt5668.c
+++ b/sound/soc/codecs/rt5668.c
@@ -2254,16 +2254,30 @@ static int rt5668_resume(struct snd_soc_component *component)
#define RT5668_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE | \
SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S8)
+static const u64 rt5668_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 rt5668_aif1_dai_ops = {
.hw_params = rt5668_hw_params,
.set_fmt = rt5668_set_dai_fmt,
.set_tdm_slot = rt5668_set_tdm_slot,
+ .auto_selectable_formats = &rt5668_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static const struct snd_soc_dai_ops rt5668_aif2_dai_ops = {
.hw_params = rt5668_hw_params,
.set_fmt = rt5668_set_dai_fmt,
.set_bclk_ratio = rt5668_set_bclk_ratio,
+ .auto_selectable_formats = &rt5668_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver rt5668_dai[] = {
diff --git a/sound/soc/codecs/rt5670.c b/sound/soc/codecs/rt5670.c
index 1d120b5dc2be7..f772f093479ad 100644
--- a/sound/soc/codecs/rt5670.c
+++ b/sound/soc/codecs/rt5670.c
@@ -2791,12 +2791,22 @@ static int rt5670_resume(struct snd_soc_component *component)
#define RT5670_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE | \
SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S8)
+static const u64 rt5670_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_IB_NF;
+
static const struct snd_soc_dai_ops rt5670_aif_dai_ops = {
.hw_params = rt5670_hw_params,
.set_fmt = rt5670_set_dai_fmt,
.set_tdm_slot = rt5670_set_tdm_slot,
.set_pll = rt5670_set_dai_pll,
.set_bclk_ratio = rt5670_set_bclk_ratio,
+ .auto_selectable_formats = &rt5670_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver rt5670_dai[] = {
diff --git a/sound/soc/codecs/rt5677.c b/sound/soc/codecs/rt5677.c
index 3e4d1dbce740e..8d2f2cffa6193 100644
--- a/sound/soc/codecs/rt5677.c
+++ b/sound/soc/codecs/rt5677.c
@@ -5033,12 +5033,22 @@ static int rt5677_write(void *context, unsigned int reg, unsigned int val)
#define RT5677_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE | \
SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S8)
+static const u64 rt5677_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_IB_NF;
+
static const struct snd_soc_dai_ops rt5677_aif_dai_ops = {
.hw_params = rt5677_hw_params,
.set_fmt = rt5677_set_dai_fmt,
.set_sysclk = rt5677_set_dai_sysclk,
.set_pll = rt5677_set_dai_pll,
.set_tdm_slot = rt5677_set_tdm_slot,
+ .auto_selectable_formats = &rt5677_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static const struct snd_soc_dai_ops rt5677_dsp_dai_ops = {
diff --git a/sound/soc/codecs/rt5682.c b/sound/soc/codecs/rt5682.c
index 6f7e68c20d135..50c528081fff3 100644
--- a/sound/soc/codecs/rt5682.c
+++ b/sound/soc/codecs/rt5682.c
@@ -3043,11 +3043,23 @@ static int rt5682_resume(struct snd_soc_component *component)
#define rt5682_resume NULL
#endif
+static const u64 rt5682_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;
+
const struct snd_soc_dai_ops rt5682_aif1_dai_ops = {
.hw_params = rt5682_hw_params,
.set_fmt = rt5682_set_dai_fmt,
.set_tdm_slot = rt5682_set_tdm_slot,
.set_bclk_ratio = rt5682_set_bclk1_ratio,
+ .auto_selectable_formats = &rt5682_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
EXPORT_SYMBOL_GPL(rt5682_aif1_dai_ops);
@@ -3055,6 +3067,8 @@ const struct snd_soc_dai_ops rt5682_aif2_dai_ops = {
.hw_params = rt5682_hw_params,
.set_fmt = rt5682_set_dai_fmt,
.set_bclk_ratio = rt5682_set_bclk2_ratio,
+ .auto_selectable_formats = &rt5682_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
EXPORT_SYMBOL_GPL(rt5682_aif2_dai_ops);
diff --git a/sound/soc/codecs/rt5682s.c b/sound/soc/codecs/rt5682s.c
index 34997cfb465b6..cf3f3d53a4b08 100644
--- a/sound/soc/codecs/rt5682s.c
+++ b/sound/soc/codecs/rt5682s.c
@@ -2926,17 +2926,31 @@ static int rt5682s_resume(struct snd_soc_component *component)
#define rt5682s_resume NULL
#endif
+static const u64 rt5682s_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 rt5682s_aif1_dai_ops = {
.hw_params = rt5682s_hw_params,
.set_fmt = rt5682s_set_dai_fmt,
.set_tdm_slot = rt5682s_set_tdm_slot,
.set_bclk_ratio = rt5682s_set_bclk1_ratio,
+ .auto_selectable_formats = &rt5682s_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static const struct snd_soc_dai_ops rt5682s_aif2_dai_ops = {
.hw_params = rt5682s_hw_params,
.set_fmt = rt5682s_set_dai_fmt,
.set_bclk_ratio = rt5682s_set_bclk2_ratio,
+ .auto_selectable_formats = &rt5682s_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static const struct snd_soc_component_driver rt5682s_soc_component_dev = {
diff --git a/sound/soc/codecs/rt9120.c b/sound/soc/codecs/rt9120.c
index e51cd4a318948..1445e823c4ff0 100644
--- a/sound/soc/codecs/rt9120.c
+++ b/sound/soc/codecs/rt9120.c
@@ -289,9 +289,18 @@ static int rt9120_hw_params(struct snd_pcm_substream *substream,
return 0;
}
+static const u64 rt9120_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 rt9120_dai_ops = {
.set_fmt = rt9120_set_fmt,
.hw_params = rt9120_hw_params,
+ .auto_selectable_formats = &rt9120_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver rt9120_dai = {
diff --git a/sound/soc/codecs/rt9123.c b/sound/soc/codecs/rt9123.c
index 07eaf275c9e98..6322415120b78 100644
--- a/sound/soc/codecs/rt9123.c
+++ b/sound/soc/codecs/rt9123.c
@@ -299,10 +299,19 @@ static int rt9123_dai_hw_params(struct snd_pcm_substream *substream,
return 0;
}
+static const u64 rt9123_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 rt9123_dai_ops = {
.set_fmt = rt9123_dai_set_format,
.set_tdm_slot = rt9123_dai_set_tdm_slot,
.hw_params = rt9123_dai_hw_params,
+ .auto_selectable_formats = &rt9123_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver rt9123_dai_driver = {
--
2.53.0
^ permalink raw reply related [flat|nested] 54+ messages in thread
* [PATCH 31/44] ASoC: codecs: sgtl5000: use .auto_selectable_formats
2026-08-04 0:40 [PATCH 00/44] ASoC: codec: use .auto_selectable_formats Kuninori Morimoto
` (29 preceding siblings ...)
2026-08-04 0:43 ` [PATCH 30/44] ASoC: codecs: rt*: " Kuninori Morimoto
@ 2026-08-04 0:43 ` Kuninori Morimoto
2026-08-04 0:43 ` [PATCH 32/44] ASoC: codecs: si476x: " Kuninori Morimoto
` (12 subsequent siblings)
43 siblings, 0 replies; 54+ messages in thread
From: Kuninori Morimoto @ 2026-08-04 0:43 UTC (permalink / raw)
To: Fabio Estevam, 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/codecs/sgtl5000.c | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/sound/soc/codecs/sgtl5000.c b/sound/soc/codecs/sgtl5000.c
index 59642673b4cbe..70ebbac34e061 100644
--- a/sound/soc/codecs/sgtl5000.c
+++ b/sound/soc/codecs/sgtl5000.c
@@ -1158,12 +1158,23 @@ static int sgtl5000_set_bias_level(struct snd_soc_component *component,
SNDRV_PCM_FMTBIT_S24_LE |\
SNDRV_PCM_FMTBIT_S32_LE)
+static const u64 sgtl5000_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_IB_NF;
+
static const struct snd_soc_dai_ops sgtl5000_ops = {
.hw_params = sgtl5000_pcm_hw_params,
.mute_stream = sgtl5000_mute_stream,
.set_fmt = sgtl5000_set_dai_fmt,
.set_sysclk = sgtl5000_set_dai_sysclk,
.no_capture_mute = 1,
+ .auto_selectable_formats = &sgtl5000_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver sgtl5000_dai = {
--
2.53.0
^ permalink raw reply related [flat|nested] 54+ messages in thread
* [PATCH 32/44] ASoC: codecs: si476x: use .auto_selectable_formats
2026-08-04 0:40 [PATCH 00/44] ASoC: codec: use .auto_selectable_formats Kuninori Morimoto
` (30 preceding siblings ...)
2026-08-04 0:43 ` [PATCH 31/44] ASoC: codecs: sgtl5000: " Kuninori Morimoto
@ 2026-08-04 0:43 ` Kuninori Morimoto
2026-08-04 0:43 ` [PATCH 33/44] ASoC: codecs: sma130*: " Kuninori Morimoto
` (11 subsequent siblings)
43 siblings, 0 replies; 54+ messages in thread
From: Kuninori Morimoto @ 2026-08-04 0:43 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/codecs/si476x.c | 18 ++++++++++++++++++
1 file changed, 18 insertions(+)
diff --git a/sound/soc/codecs/si476x.c b/sound/soc/codecs/si476x.c
index d87141ba84388..104ec24abbeb3 100644
--- a/sound/soc/codecs/si476x.c
+++ b/sound/soc/codecs/si476x.c
@@ -199,9 +199,27 @@ static int si476x_codec_hw_params(struct snd_pcm_substream *substream,
return err;
}
+static const u64 ssm3515_selectable_formats[] = {
+ /* Hi Priority */
+ 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,
+ /* Low Priority */
+ SND_SOC_POSSIBLE_DAIFMT_DSP_A |
+ SND_SOC_POSSIBLE_DAIFMT_DSP_B |
+ SND_SOC_POSSIBLE_DAIFMT_NB_NF |
+ SND_SOC_POSSIBLE_DAIFMT_IB_NF,
+};
+
static const struct snd_soc_dai_ops si476x_dai_ops = {
.hw_params = si476x_codec_hw_params,
.set_fmt = si476x_codec_set_dai_fmt,
+ .auto_selectable_formats = ssm3515_selectable_formats,
+ .num_auto_selectable_formats = ARRAY_SIZE(ssm3515_selectable_formats),
};
static struct snd_soc_dai_driver si476x_dai = {
--
2.53.0
^ permalink raw reply related [flat|nested] 54+ messages in thread
* [PATCH 33/44] ASoC: codecs: sma130*: use .auto_selectable_formats
2026-08-04 0:40 [PATCH 00/44] ASoC: codec: use .auto_selectable_formats Kuninori Morimoto
` (31 preceding siblings ...)
2026-08-04 0:43 ` [PATCH 32/44] ASoC: codecs: si476x: " Kuninori Morimoto
@ 2026-08-04 0:43 ` Kuninori Morimoto
2026-08-04 0:43 ` [PATCH 34/44] ASoC: codecs: src4xxx: " Kuninori Morimoto
` (10 subsequent siblings)
43 siblings, 0 replies; 54+ messages in thread
From: Kuninori Morimoto @ 2026-08-04 0:43 UTC (permalink / raw)
To: Jaroslav Kysela, Kiseok Jo, 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/codecs/sma1303.c | 13 +++++++++++++
sound/soc/codecs/sma1307.c | 13 +++++++++++++
2 files changed, 26 insertions(+)
diff --git a/sound/soc/codecs/sma1303.c b/sound/soc/codecs/sma1303.c
index 15758eb13f8c5..0bff325597143 100644
--- a/sound/soc/codecs/sma1303.c
+++ b/sound/soc/codecs/sma1303.c
@@ -1412,12 +1412,25 @@ static int sma1303_dai_set_tdm_slot(struct snd_soc_dai *dai,
return 0;
}
+static const u64 sma1303_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 sma1303_dai_ops_amp = {
.set_sysclk = sma1303_dai_set_sysclk_amp,
.set_fmt = sma1303_dai_set_fmt_amp,
.hw_params = sma1303_dai_hw_params_amp,
.mute_stream = sma1303_dai_mute,
.set_tdm_slot = sma1303_dai_set_tdm_slot,
+ .auto_selectable_formats = &sma1303_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
#define SMA1303_RATES SNDRV_PCM_RATE_8000_192000
diff --git a/sound/soc/codecs/sma1307.c b/sound/soc/codecs/sma1307.c
index c52fe95b30c6a..eb87f728b165e 100644
--- a/sound/soc/codecs/sma1307.c
+++ b/sound/soc/codecs/sma1307.c
@@ -1552,12 +1552,25 @@ static int sma1307_dai_mute_stream(struct snd_soc_dai *dai, int mute,
return 0;
}
+static const u64 sma1307_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 sma1307_dai_ops_amp = {
.hw_params = sma1307_dai_hw_params_amp,
.set_fmt = sma1307_dai_set_fmt_amp,
.set_sysclk = sma1307_dai_set_sysclk_amp,
.set_tdm_slot = sma1307_dai_set_tdm_slot,
.mute_stream = sma1307_dai_mute_stream,
+ .auto_selectable_formats = &sma1307_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
#define SMA1307_RATES_PLAYBACK SNDRV_PCM_RATE_8000_96000
--
2.53.0
^ permalink raw reply related [flat|nested] 54+ messages in thread
* [PATCH 34/44] ASoC: codecs: src4xxx: use .auto_selectable_formats
2026-08-04 0:40 [PATCH 00/44] ASoC: codec: use .auto_selectable_formats Kuninori Morimoto
` (32 preceding siblings ...)
2026-08-04 0:43 ` [PATCH 33/44] ASoC: codecs: sma130*: " Kuninori Morimoto
@ 2026-08-04 0:43 ` Kuninori Morimoto
2026-08-04 0:43 ` [PATCH 35/44] ASoC: codecs: ssm*: " Kuninori Morimoto
` (9 subsequent siblings)
43 siblings, 0 replies; 54+ messages in thread
From: Kuninori Morimoto @ 2026-08-04 0:43 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/codecs/src4xxx.c | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/sound/soc/codecs/src4xxx.c b/sound/soc/codecs/src4xxx.c
index 5a34894752251..6e187c930372f 100644
--- a/sound/soc/codecs/src4xxx.c
+++ b/sound/soc/codecs/src4xxx.c
@@ -326,10 +326,18 @@ static int src4xxx_hw_params(struct snd_pcm_substream *substream,
return 0;
};
+static const u64 src4xxx_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;
+
static const struct snd_soc_dai_ops src4xxx_dai_ops = {
.hw_params = src4xxx_hw_params,
.set_sysclk = src4xxx_set_mclk_hz,
.set_fmt = src4xxx_set_dai_fmt,
+ .auto_selectable_formats = &src4xxx_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
#define SRC4XXX_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S32_LE)
--
2.53.0
^ permalink raw reply related [flat|nested] 54+ messages in thread
* [PATCH 35/44] ASoC: codecs: ssm*: use .auto_selectable_formats
2026-08-04 0:40 [PATCH 00/44] ASoC: codec: use .auto_selectable_formats Kuninori Morimoto
` (33 preceding siblings ...)
2026-08-04 0:43 ` [PATCH 34/44] ASoC: codecs: src4xxx: " Kuninori Morimoto
@ 2026-08-04 0:43 ` Kuninori Morimoto
2026-08-04 0:43 ` [PATCH 36/44] ASoC: codecs: sta*: " Kuninori Morimoto
` (8 subsequent siblings)
43 siblings, 0 replies; 54+ messages in thread
From: Kuninori Morimoto @ 2026-08-04 0:43 UTC (permalink / raw)
To: Jaroslav Kysela, Lars-Peter Clausen, Liam Girdwood, Mark Brown,
"Martin Povišer", "Nuno Sá",
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/codecs/ssm2518.c | 13 +++++++++++++
sound/soc/codecs/ssm2602.c | 13 +++++++++++++
sound/soc/codecs/ssm3515.c | 10 ++++++++++
sound/soc/codecs/ssm4567.c | 13 +++++++++++++
4 files changed, 49 insertions(+)
diff --git a/sound/soc/codecs/ssm2518.c b/sound/soc/codecs/ssm2518.c
index 5192569ba6a89..32e81b31479d1 100644
--- a/sound/soc/codecs/ssm2518.c
+++ b/sound/soc/codecs/ssm2518.c
@@ -620,12 +620,25 @@ static int ssm2518_startup(struct snd_pcm_substream *substream,
#define SSM2518_FORMATS (SNDRV_PCM_FMTBIT_S8 | SNDRV_PCM_FMTBIT_S16_LE | \
SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S32)
+static const u64 ssm2518_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 ssm2518_dai_ops = {
.startup = ssm2518_startup,
.hw_params = ssm2518_hw_params,
.mute_stream = ssm2518_mute,
.set_fmt = ssm2518_set_dai_fmt,
.set_tdm_slot = ssm2518_set_tdm_slot,
+ .auto_selectable_formats = &ssm2518_selectable_formats,
+ .num_auto_selectable_formats = 1,
.no_capture_mute = 1,
};
diff --git a/sound/soc/codecs/ssm2602.c b/sound/soc/codecs/ssm2602.c
index fccd2eacd7a6a..92df44f869155 100644
--- a/sound/soc/codecs/ssm2602.c
+++ b/sound/soc/codecs/ssm2602.c
@@ -523,12 +523,25 @@ static int ssm2602_set_bias_level(struct snd_soc_component *component,
#define SSM2602_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE |\
SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S32_LE)
+static const u64 ssm2602_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 ssm2602_dai_ops = {
.startup = ssm2602_startup,
.hw_params = ssm2602_hw_params,
.mute_stream = ssm2602_mute,
.set_sysclk = ssm2602_set_dai_sysclk,
.set_fmt = ssm2602_set_dai_fmt,
+ .auto_selectable_formats = &ssm2602_selectable_formats,
+ .num_auto_selectable_formats = 1,
.no_capture_mute = 1,
};
diff --git a/sound/soc/codecs/ssm3515.c b/sound/soc/codecs/ssm3515.c
index 8c6665677a175..f71509237fca4 100644
--- a/sound/soc/codecs/ssm3515.c
+++ b/sound/soc/codecs/ssm3515.c
@@ -356,12 +356,22 @@ static int ssm3515_hw_free(struct snd_pcm_substream *substream,
return 0;
}
+static const u64 ssm3515_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 ssm3515_dai_ops = {
.mute_stream = ssm3515_mute,
.hw_params = ssm3515_hw_params,
.set_fmt = ssm3515_set_fmt,
.set_tdm_slot = ssm3515_set_tdm_slot,
.hw_free = ssm3515_hw_free,
+ .auto_selectable_formats = &ssm3515_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver ssm3515_dai_driver = {
diff --git a/sound/soc/codecs/ssm4567.c b/sound/soc/codecs/ssm4567.c
index 8415dd163edd6..181047b38d3df 100644
--- a/sound/soc/codecs/ssm4567.c
+++ b/sound/soc/codecs/ssm4567.c
@@ -389,11 +389,24 @@ static int ssm4567_set_bias_level(struct snd_soc_component *component,
return ret;
}
+static const u64 ssm4567_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 ssm4567_dai_ops = {
.hw_params = ssm4567_hw_params,
.mute_stream = ssm4567_mute,
.set_fmt = ssm4567_set_dai_fmt,
.set_tdm_slot = ssm4567_set_tdm_slot,
+ .auto_selectable_formats = &ssm4567_selectable_formats,
+ .num_auto_selectable_formats = 1,
.no_capture_mute = 1,
};
--
2.53.0
^ permalink raw reply related [flat|nested] 54+ messages in thread
* [PATCH 36/44] ASoC: codecs: sta*: use .auto_selectable_formats
2026-08-04 0:40 [PATCH 00/44] ASoC: codec: use .auto_selectable_formats Kuninori Morimoto
` (34 preceding siblings ...)
2026-08-04 0:43 ` [PATCH 35/44] ASoC: codecs: ssm*: " Kuninori Morimoto
@ 2026-08-04 0:43 ` Kuninori Morimoto
2026-08-04 0:43 ` [PATCH 37/44] ASoC: codecs: tas*: " Kuninori Morimoto
` (7 subsequent siblings)
43 siblings, 0 replies; 54+ messages in thread
From: Kuninori Morimoto @ 2026-08-04 0:43 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/codecs/sta32x.c | 9 +++++++++
sound/soc/codecs/sta350.c | 9 +++++++++
sound/soc/codecs/sta529.c | 7 +++++++
3 files changed, 25 insertions(+)
diff --git a/sound/soc/codecs/sta32x.c b/sound/soc/codecs/sta32x.c
index d6de739212f92..9a9a68c722cd9 100644
--- a/sound/soc/codecs/sta32x.c
+++ b/sound/soc/codecs/sta32x.c
@@ -848,10 +848,19 @@ static int sta32x_set_bias_level(struct snd_soc_component *component,
return 0;
}
+static const u64 sta32x_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 sta32x_dai_ops = {
.hw_params = sta32x_hw_params,
.set_sysclk = sta32x_set_dai_sysclk,
.set_fmt = sta32x_set_dai_fmt,
+ .auto_selectable_formats = &sta32x_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver sta32x_dai = {
diff --git a/sound/soc/codecs/sta350.c b/sound/soc/codecs/sta350.c
index 2ba35076732b0..d6d29d291081f 100644
--- a/sound/soc/codecs/sta350.c
+++ b/sound/soc/codecs/sta350.c
@@ -882,10 +882,19 @@ static int sta350_set_bias_level(struct snd_soc_component *component,
return 0;
}
+static const u64 sta350_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 sta350_dai_ops = {
.hw_params = sta350_hw_params,
.set_sysclk = sta350_set_dai_sysclk,
.set_fmt = sta350_set_dai_fmt,
+ .auto_selectable_formats = &sta350_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver sta350_dai = {
diff --git a/sound/soc/codecs/sta529.c b/sound/soc/codecs/sta529.c
index 7d57999f9cb13..0faf439ffee9b 100644
--- a/sound/soc/codecs/sta529.c
+++ b/sound/soc/codecs/sta529.c
@@ -286,10 +286,17 @@ static int sta529_set_dai_fmt(struct snd_soc_dai *codec_dai, u32 fmt)
return 0;
}
+static const u64 sta529_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 sta529_dai_ops = {
.hw_params = sta529_hw_params,
.set_fmt = sta529_set_dai_fmt,
.mute_stream = sta529_mute,
+ .auto_selectable_formats = &sta529_selectable_formats,
+ .num_auto_selectable_formats = 1,
.no_capture_mute = 1,
};
--
2.53.0
^ permalink raw reply related [flat|nested] 54+ messages in thread
* [PATCH 37/44] ASoC: codecs: tas*: use .auto_selectable_formats
2026-08-04 0:40 [PATCH 00/44] ASoC: codec: use .auto_selectable_formats Kuninori Morimoto
` (35 preceding siblings ...)
2026-08-04 0:43 ` [PATCH 36/44] ASoC: codecs: sta*: " Kuninori Morimoto
@ 2026-08-04 0:43 ` Kuninori Morimoto
2026-08-04 0:43 ` [PATCH 38/44] ASoC: codecs: tfa9879: " Kuninori Morimoto
` (6 subsequent siblings)
43 siblings, 0 replies; 54+ messages in thread
From: Kuninori Morimoto @ 2026-08-04 0:43 UTC (permalink / raw)
To: Baojun Xu, Jaroslav Kysela, Kevin Cernekee, Kevin Lu,
Liam Girdwood, Mark Brown, Sen Wang, Shenghao Ding, Takashi Iwai,
"Uwe Kleine-König (The Capable Hub)"
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/codecs/tas2552.c | 14 ++++++++++++++
sound/soc/codecs/tas2562.c | 10 ++++++++++
sound/soc/codecs/tas2764.c | 12 ++++++++++++
sound/soc/codecs/tas2770.c | 12 ++++++++++++
sound/soc/codecs/tas2780.c | 10 ++++++++++
sound/soc/codecs/tas5086.c | 7 +++++++
sound/soc/codecs/tas571x.c | 7 +++++++
sound/soc/codecs/tas5720.c | 9 +++++++++
sound/soc/codecs/tas6424.c | 9 +++++++++
9 files changed, 90 insertions(+)
diff --git a/sound/soc/codecs/tas2552.c b/sound/soc/codecs/tas2552.c
index 22f93e29454fe..5602fd2fb8399 100644
--- a/sound/soc/codecs/tas2552.c
+++ b/sound/soc/codecs/tas2552.c
@@ -518,6 +518,18 @@ static const struct dev_pm_ops tas2552_pm = {
RUNTIME_PM_OPS(tas2552_runtime_suspend, tas2552_runtime_resume, NULL)
};
+static const u64 tas2552_selectable_formats[] = {
+ /* Hi Priority */
+ SND_SOC_POSSIBLE_DAIFMT_I2S |
+ SND_SOC_POSSIBLE_DAIFMT_RIGHT_J |
+ SND_SOC_POSSIBLE_DAIFMT_LEFT_J |
+ SND_SOC_POSSIBLE_DAIFMT_NB_NF,
+ /* Low Priority */
+ SND_SOC_POSSIBLE_DAIFMT_DSP_A |
+ SND_SOC_POSSIBLE_DAIFMT_DSP_B |
+ SND_SOC_POSSIBLE_DAIFMT_IB_NF,
+};
+
static const struct snd_soc_dai_ops tas2552_speaker_dai_ops = {
.hw_params = tas2552_hw_params,
.prepare = tas2552_prepare,
@@ -525,6 +537,8 @@ static const struct snd_soc_dai_ops tas2552_speaker_dai_ops = {
.set_fmt = tas2552_set_dai_fmt,
.set_tdm_slot = tas2552_set_dai_tdm_slot,
.mute_stream = tas2552_mute,
+ .auto_selectable_formats = tas2552_selectable_formats,
+ .num_auto_selectable_formats = ARRAY_SIZE(tas2552_selectable_formats),
.no_capture_mute = 1,
};
diff --git a/sound/soc/codecs/tas2562.c b/sound/soc/codecs/tas2562.c
index e1d62f30418ac..b765d2a340f88 100644
--- a/sound/soc/codecs/tas2562.c
+++ b/sound/soc/codecs/tas2562.c
@@ -588,11 +588,21 @@ static const struct snd_soc_component_driver soc_component_dev_tas2562 = {
.endianness = 1,
};
+static const u64 tas2562_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_IB_NF;
+
static const struct snd_soc_dai_ops tas2562_speaker_dai_ops = {
.hw_params = tas2562_hw_params,
.set_fmt = tas2562_set_dai_fmt,
.set_tdm_slot = tas2562_set_dai_tdm_slot,
.mute_stream = tas2562_mute,
+ .auto_selectable_formats = &tas2562_selectable_formats,
+ .num_auto_selectable_formats = 1,
.no_capture_mute = 1,
};
diff --git a/sound/soc/codecs/tas2764.c b/sound/soc/codecs/tas2764.c
index b11b998aa32a6..37aa17be32004 100644
--- a/sound/soc/codecs/tas2764.c
+++ b/sound/soc/codecs/tas2764.c
@@ -602,6 +602,16 @@ static int tas2764_set_bclk_ratio(struct snd_soc_dai *dai, unsigned int ratio)
return tas2764_write_sdout_idle_mask(tas2764, tas2764->idle_slot_config.tx_mask);
}
+static const u64 tas2764_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 tas2764_dai_ops = {
.mute_stream = tas2764_mute,
.hw_params = tas2764_hw_params,
@@ -609,6 +619,8 @@ static const struct snd_soc_dai_ops tas2764_dai_ops = {
.set_bclk_ratio = tas2764_set_bclk_ratio,
.set_tdm_slot = tas2764_set_dai_tdm_slot,
.set_tdm_idle = tas2764_set_dai_tdm_idle,
+ .auto_selectable_formats = &tas2764_selectable_formats,
+ .num_auto_selectable_formats = 1,
.no_capture_mute = 1,
};
diff --git a/sound/soc/codecs/tas2770.c b/sound/soc/codecs/tas2770.c
index e79754edac5ca..59912ed9f4a5f 100644
--- a/sound/soc/codecs/tas2770.c
+++ b/sound/soc/codecs/tas2770.c
@@ -566,12 +566,24 @@ static int tas2770_set_dai_tdm_idle(struct snd_soc_dai *dai,
return 0;
}
+static const u64 tas2770_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 tas2770_dai_ops = {
.mute_stream = tas2770_mute,
.hw_params = tas2770_hw_params,
.set_fmt = tas2770_set_fmt,
.set_tdm_slot = tas2770_set_dai_tdm_slot,
.set_tdm_idle = tas2770_set_dai_tdm_idle,
+ .auto_selectable_formats = &tas2770_selectable_formats,
+ .num_auto_selectable_formats = 1,
.no_capture_mute = 1,
};
diff --git a/sound/soc/codecs/tas2780.c b/sound/soc/codecs/tas2780.c
index 1ec1c076204fb..8f869cf0a187c 100644
--- a/sound/soc/codecs/tas2780.c
+++ b/sound/soc/codecs/tas2780.c
@@ -441,11 +441,21 @@ static int tas2780_set_dai_tdm_slot(struct snd_soc_dai *dai,
return ret;
}
+static const u64 tas2780_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_IB_NF;
+
static const struct snd_soc_dai_ops tas2780_dai_ops = {
.mute_stream = tas2780_mute,
.hw_params = tas2780_hw_params,
.set_fmt = tas2780_set_fmt,
.set_tdm_slot = tas2780_set_dai_tdm_slot,
+ .auto_selectable_formats = &tas2780_selectable_formats,
+ .num_auto_selectable_formats = 1,
.no_capture_mute = 1,
};
diff --git a/sound/soc/codecs/tas5086.c b/sound/soc/codecs/tas5086.c
index 4d1c122c8f04f..1ab82ef1c41d2 100644
--- a/sound/soc/codecs/tas5086.c
+++ b/sound/soc/codecs/tas5086.c
@@ -743,11 +743,18 @@ static const struct snd_soc_dapm_route tas5086_dapm_routes[] = {
};
+static const u64 tas5086_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 tas5086_dai_ops = {
.hw_params = tas5086_hw_params,
.set_sysclk = tas5086_set_dai_sysclk,
.set_fmt = tas5086_set_dai_fmt,
.mute_stream = tas5086_mute_stream,
+ .auto_selectable_formats = &tas5086_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver tas5086_dai = {
diff --git a/sound/soc/codecs/tas571x.c b/sound/soc/codecs/tas571x.c
index 8b5f9accf1207..5e2560347461c 100644
--- a/sound/soc/codecs/tas571x.c
+++ b/sound/soc/codecs/tas571x.c
@@ -352,10 +352,17 @@ static int tas571x_set_bias_level(struct snd_soc_component *component,
return 0;
}
+static const u64 tas571x_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 tas571x_dai_ops = {
.set_fmt = tas571x_set_dai_fmt,
.hw_params = tas571x_hw_params,
.mute_stream = tas571x_mute,
+ .auto_selectable_formats = &tas571x_selectable_formats,
+ .num_auto_selectable_formats = 1,
.no_capture_mute = 1,
};
diff --git a/sound/soc/codecs/tas5720.c b/sound/soc/codecs/tas5720.c
index 0bbcfaadf3f2a..2539a097e743a 100644
--- a/sound/soc/codecs/tas5720.c
+++ b/sound/soc/codecs/tas5720.c
@@ -682,11 +682,20 @@ static const struct snd_soc_component_driver soc_component_dev_tas5722 = {
#define TAS5720_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S18_3LE |\
SNDRV_PCM_FMTBIT_S20_3LE | SNDRV_PCM_FMTBIT_S24_LE)
+static const u64 tas5720_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;
+
static const struct snd_soc_dai_ops tas5720_speaker_dai_ops = {
.hw_params = tas5720_hw_params,
.set_fmt = tas5720_set_dai_fmt,
.set_tdm_slot = tas5720_set_dai_tdm_slot,
.mute_stream = tas5720_mute,
+ .auto_selectable_formats = &tas5720_selectable_formats,
+ .num_auto_selectable_formats = 1,
.no_capture_mute = 1,
};
diff --git a/sound/soc/codecs/tas6424.c b/sound/soc/codecs/tas6424.c
index f5d50f8a1cfb9..2718183e864c3 100644
--- a/sound/soc/codecs/tas6424.c
+++ b/sound/soc/codecs/tas6424.c
@@ -378,11 +378,20 @@ static const struct snd_soc_component_driver soc_codec_dev_tas6424 = {
.endianness = 1,
};
+static const u64 tas6424_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;
+
static const struct snd_soc_dai_ops tas6424_speaker_dai_ops = {
.hw_params = tas6424_hw_params,
.set_fmt = tas6424_set_dai_fmt,
.set_tdm_slot = tas6424_set_dai_tdm_slot,
.mute_stream = tas6424_mute,
+ .auto_selectable_formats = &tas6424_selectable_formats,
+ .num_auto_selectable_formats = 1,
.no_capture_mute = 1,
};
--
2.53.0
^ permalink raw reply related [flat|nested] 54+ messages in thread
* [PATCH 38/44] ASoC: codecs: tfa9879: use .auto_selectable_formats
2026-08-04 0:40 [PATCH 00/44] ASoC: codec: use .auto_selectable_formats Kuninori Morimoto
` (36 preceding siblings ...)
2026-08-04 0:43 ` [PATCH 37/44] ASoC: codecs: tas*: " Kuninori Morimoto
@ 2026-08-04 0:43 ` Kuninori Morimoto
2026-08-04 0:43 ` [PATCH 39/44] ASoC: codecs: tlv320*: " Kuninori Morimoto
` (5 subsequent siblings)
43 siblings, 0 replies; 54+ messages in thread
From: Kuninori Morimoto @ 2026-08-04 0:43 UTC (permalink / raw)
To: Jaroslav Kysela, Liam Girdwood, Mark Brown, Peter Rosin,
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/codecs/tfa9879.c | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/sound/soc/codecs/tfa9879.c b/sound/soc/codecs/tfa9879.c
index f30479f1f53b0..5191037317687 100644
--- a/sound/soc/codecs/tfa9879.c
+++ b/sound/soc/codecs/tfa9879.c
@@ -248,10 +248,19 @@ static const struct regmap_config tfa9879_regmap = {
.cache_type = REGCACHE_RBTREE,
};
+static const u64 tfa9879_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_IB_NF;
+
static const struct snd_soc_dai_ops tfa9879_dai_ops = {
.hw_params = tfa9879_hw_params,
.mute_stream = tfa9879_mute_stream,
.set_fmt = tfa9879_set_fmt,
+ .auto_selectable_formats = &tfa9879_selectable_formats,
+ .num_auto_selectable_formats = 1,
.no_capture_mute = 1,
};
--
2.53.0
^ permalink raw reply related [flat|nested] 54+ messages in thread
* [PATCH 39/44] ASoC: codecs: tlv320*: use .auto_selectable_formats
2026-08-04 0:40 [PATCH 00/44] ASoC: codec: use .auto_selectable_formats Kuninori Morimoto
` (37 preceding siblings ...)
2026-08-04 0:43 ` [PATCH 38/44] ASoC: codecs: tfa9879: " Kuninori Morimoto
@ 2026-08-04 0:43 ` Kuninori Morimoto
2026-08-04 0:43 ` [PATCH 40/44] ASoC: codecs: tscs454: " Kuninori Morimoto
` (4 subsequent siblings)
43 siblings, 0 replies; 54+ messages in thread
From: Kuninori Morimoto @ 2026-08-04 0:43 UTC (permalink / raw)
To: Baojun Xu, Jaroslav Kysela, Kevin Lu, Liam Girdwood, Mark Brown,
Sen Wang, Shenghao Ding, 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/codecs/tlv320adc3xxx.c | 14 ++++++++++++++
sound/soc/codecs/tlv320adcx140.c | 12 ++++++++++++
sound/soc/codecs/tlv320aic23.c | 9 +++++++++
sound/soc/codecs/tlv320aic26.c | 8 ++++++++
sound/soc/codecs/tlv320aic31xx.c | 11 +++++++++++
sound/soc/codecs/tlv320aic32x4.c | 8 ++++++++
sound/soc/codecs/tlv320aic3x.c | 14 ++++++++++++++
sound/soc/codecs/tlv320dac33.c | 8 ++++++++
8 files changed, 84 insertions(+)
diff --git a/sound/soc/codecs/tlv320adc3xxx.c b/sound/soc/codecs/tlv320adc3xxx.c
index d7d958ecd8db5..528c444464824 100644
--- a/sound/soc/codecs/tlv320adc3xxx.c
+++ b/sound/soc/codecs/tlv320adc3xxx.c
@@ -1362,10 +1362,24 @@ static int adc3xxx_set_dai_fmt(struct snd_soc_dai *codec_dai, unsigned int fmt)
return 0;
}
+static const u64 adc3xxx_selectable_formats[] = {
+ /* Hi Priority */
+ SND_SOC_POSSIBLE_DAIFMT_I2S |
+ SND_SOC_POSSIBLE_DAIFMT_RIGHT_J |
+ SND_SOC_POSSIBLE_DAIFMT_LEFT_J |
+ SND_SOC_POSSIBLE_DAIFMT_NB_NF,
+ /* Low Priority */
+ SND_SOC_POSSIBLE_DAIFMT_DSP_A |
+ SND_SOC_POSSIBLE_DAIFMT_DSP_B |
+ SND_SOC_POSSIBLE_DAIFMT_IB_NF,
+};
+
static const struct snd_soc_dai_ops adc3xxx_dai_ops = {
.hw_params = adc3xxx_hw_params,
.set_sysclk = adc3xxx_set_dai_sysclk,
.set_fmt = adc3xxx_set_dai_fmt,
+ .auto_selectable_formats = adc3xxx_selectable_formats,
+ .num_auto_selectable_formats = ARRAY_SIZE(adc3xxx_selectable_formats),
};
static struct snd_soc_dai_driver adc3xxx_dai = {
diff --git a/sound/soc/codecs/tlv320adcx140.c b/sound/soc/codecs/tlv320adcx140.c
index 4eb9cea272760..c29584d77649b 100644
--- a/sound/soc/codecs/tlv320adcx140.c
+++ b/sound/soc/codecs/tlv320adcx140.c
@@ -916,10 +916,22 @@ static int adcx140_set_dai_tdm_slot(struct snd_soc_dai *codec_dai,
return 0;
}
+static const u64 adcx140_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 adcx140_dai_ops = {
.hw_params = adcx140_hw_params,
.set_fmt = adcx140_set_dai_fmt,
.set_tdm_slot = adcx140_set_dai_tdm_slot,
+ .auto_selectable_formats = &adcx140_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static int adcx140_configure_gpo(struct adcx140_priv *adcx140)
diff --git a/sound/soc/codecs/tlv320aic23.c b/sound/soc/codecs/tlv320aic23.c
index 04ec8fb5c6e5b..f31ffa189580d 100644
--- a/sound/soc/codecs/tlv320aic23.c
+++ b/sound/soc/codecs/tlv320aic23.c
@@ -507,6 +507,13 @@ static int tlv320aic23_set_bias_level(struct snd_soc_component *component,
#define AIC23_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE | \
SNDRV_PCM_FMTBIT_S24_3LE | SNDRV_PCM_FMTBIT_S32_LE)
+static const u64 tlv320aic23_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 tlv320aic23_dai_ops = {
.prepare = tlv320aic23_pcm_prepare,
.hw_params = tlv320aic23_hw_params,
@@ -514,6 +521,8 @@ static const struct snd_soc_dai_ops tlv320aic23_dai_ops = {
.mute_stream = tlv320aic23_mute,
.set_fmt = tlv320aic23_set_dai_fmt,
.set_sysclk = tlv320aic23_set_dai_sysclk,
+ .auto_selectable_formats = &tlv320aic23_selectable_formats,
+ .num_auto_selectable_formats = 1,
.no_capture_mute = 1,
};
diff --git a/sound/soc/codecs/tlv320aic26.c b/sound/soc/codecs/tlv320aic26.c
index 84e954311c1b2..7dcc960a0b9e2 100644
--- a/sound/soc/codecs/tlv320aic26.c
+++ b/sound/soc/codecs/tlv320aic26.c
@@ -208,11 +208,19 @@ static int aic26_set_fmt(struct snd_soc_dai *codec_dai, unsigned int fmt)
#define AIC26_FORMATS (SNDRV_PCM_FMTBIT_S8 | SNDRV_PCM_FMTBIT_S16_BE |\
SNDRV_PCM_FMTBIT_S24_BE | SNDRV_PCM_FMTBIT_S32_BE)
+static const u64 aic26_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;
+
static const struct snd_soc_dai_ops aic26_dai_ops = {
.hw_params = aic26_hw_params,
.mute_stream = aic26_mute,
.set_sysclk = aic26_set_sysclk,
.set_fmt = aic26_set_fmt,
+ .auto_selectable_formats = &aic26_selectable_formats,
+ .num_auto_selectable_formats = 1,
.no_capture_mute = 1,
};
diff --git a/sound/soc/codecs/tlv320aic31xx.c b/sound/soc/codecs/tlv320aic31xx.c
index 1d2e0ea6d4fed..a39bbad5023b1 100644
--- a/sound/soc/codecs/tlv320aic31xx.c
+++ b/sound/soc/codecs/tlv320aic31xx.c
@@ -1422,11 +1422,22 @@ static const struct snd_soc_component_driver soc_codec_driver_aic31xx = {
.endianness = 1,
};
+static const u64 aic31xx_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_IB_NF;
+
static const struct snd_soc_dai_ops aic31xx_dai_ops = {
.hw_params = aic31xx_hw_params,
.set_sysclk = aic31xx_set_dai_sysclk,
.set_fmt = aic31xx_set_dai_fmt,
.mute_stream = aic31xx_dac_mute,
+ .auto_selectable_formats = &aic31xx_selectable_formats,
+ .num_auto_selectable_formats = 1,
.no_capture_mute = 1,
};
diff --git a/sound/soc/codecs/tlv320aic32x4.c b/sound/soc/codecs/tlv320aic32x4.c
index 9e0e4aa2b09c4..af4be5bee7237 100644
--- a/sound/soc/codecs/tlv320aic32x4.c
+++ b/sound/soc/codecs/tlv320aic32x4.c
@@ -916,11 +916,19 @@ static int aic32x4_set_bias_level(struct snd_soc_component *component,
| SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S24_3LE \
| SNDRV_PCM_FMTBIT_S32_LE)
+static const u64 aic32x4_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 aic32x4_ops = {
.hw_params = aic32x4_hw_params,
.mute_stream = aic32x4_mute,
.set_fmt = aic32x4_set_dai_fmt,
.set_sysclk = aic32x4_set_dai_sysclk,
+ .auto_selectable_formats = &aic32x4_selectable_formats,
+ .num_auto_selectable_formats = 1,
.no_capture_mute = 1,
};
diff --git a/sound/soc/codecs/tlv320aic3x.c b/sound/soc/codecs/tlv320aic3x.c
index b38393a8130ff..c0f58cba8a993 100644
--- a/sound/soc/codecs/tlv320aic3x.c
+++ b/sound/soc/codecs/tlv320aic3x.c
@@ -1500,6 +1500,18 @@ static int aic3x_set_bias_level(struct snd_soc_component *component,
SNDRV_PCM_FMTBIT_S24_3LE | SNDRV_PCM_FMTBIT_S24_LE | \
SNDRV_PCM_FMTBIT_S32_LE)
+static const u64 aic3x_selectable_formats[] = {
+ /* Hi Priority */
+ SND_SOC_POSSIBLE_DAIFMT_I2S |
+ SND_SOC_POSSIBLE_DAIFMT_RIGHT_J |
+ SND_SOC_POSSIBLE_DAIFMT_LEFT_J |
+ SND_SOC_POSSIBLE_DAIFMT_NB_NF,
+ /* Low Priority */
+ SND_SOC_POSSIBLE_DAIFMT_DSP_A |
+ SND_SOC_POSSIBLE_DAIFMT_DSP_B |
+ SND_SOC_POSSIBLE_DAIFMT_IB_NF,
+};
+
static const struct snd_soc_dai_ops aic3x_dai_ops = {
.hw_params = aic3x_hw_params,
.prepare = aic3x_prepare,
@@ -1507,6 +1519,8 @@ static const struct snd_soc_dai_ops aic3x_dai_ops = {
.set_sysclk = aic3x_set_dai_sysclk,
.set_fmt = aic3x_set_dai_fmt,
.set_tdm_slot = aic3x_set_dai_tdm_slot,
+ .auto_selectable_formats = aic3x_selectable_formats,
+ .num_auto_selectable_formats = ARRAY_SIZE(aic3x_selectable_formats),
.no_capture_mute = 1,
};
diff --git a/sound/soc/codecs/tlv320dac33.c b/sound/soc/codecs/tlv320dac33.c
index 9bd2ddd8dacdc..55a95b62a6505 100644
--- a/sound/soc/codecs/tlv320dac33.c
+++ b/sound/soc/codecs/tlv320dac33.c
@@ -1435,6 +1435,12 @@ static const struct snd_soc_component_driver soc_component_dev_tlv320dac33 = {
SNDRV_PCM_RATE_48000)
#define DAC33_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S32_LE)
+static const u64 dac33_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;
+
static const struct snd_soc_dai_ops dac33_dai_ops = {
.startup = dac33_startup,
.shutdown = dac33_shutdown,
@@ -1443,6 +1449,8 @@ static const struct snd_soc_dai_ops dac33_dai_ops = {
.delay = dac33_dai_delay,
.set_sysclk = dac33_set_dai_sysclk,
.set_fmt = dac33_set_dai_fmt,
+ .auto_selectable_formats = &dac33_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver dac33_dai = {
--
2.53.0
^ permalink raw reply related [flat|nested] 54+ messages in thread
* [PATCH 40/44] ASoC: codecs: tscs454: use .auto_selectable_formats
2026-08-04 0:40 [PATCH 00/44] ASoC: codec: use .auto_selectable_formats Kuninori Morimoto
` (38 preceding siblings ...)
2026-08-04 0:43 ` [PATCH 39/44] ASoC: codecs: tlv320*: " Kuninori Morimoto
@ 2026-08-04 0:43 ` Kuninori Morimoto
2026-08-04 0:44 ` [PATCH 41/44] ASoC: codecs: twl4030: " Kuninori Morimoto
` (3 subsequent siblings)
43 siblings, 0 replies; 54+ messages in thread
From: Kuninori Morimoto @ 2026-08-04 0:43 UTC (permalink / raw)
To: Jaroslav Kysela, Liam Girdwood, Mark Brown, Steven Eckhoff,
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/codecs/tscs454.c | 15 +++++++++++++++
1 file changed, 15 insertions(+)
diff --git a/sound/soc/codecs/tscs454.c b/sound/soc/codecs/tscs454.c
index b70c9d931e1eb..e772dd39a849c 100644
--- a/sound/soc/codecs/tscs454.c
+++ b/sound/soc/codecs/tscs454.c
@@ -3233,6 +3233,17 @@ static int tscs454_prepare(struct snd_pcm_substream *substream,
return 0;
}
+static const u64 tscs454_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 struct snd_soc_dai_ops const tscs454_dai1_ops = {
.set_sysclk = tscs454_set_sysclk,
.set_bclk_ratio = tscs454_set_bclk_ratio,
@@ -3241,6 +3252,8 @@ static struct snd_soc_dai_ops const tscs454_dai1_ops = {
.hw_params = tscs454_hw_params,
.hw_free = tscs454_hw_free,
.prepare = tscs454_prepare,
+ .auto_selectable_formats = &tscs454_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_ops const tscs454_dai23_ops = {
@@ -3251,6 +3264,8 @@ static struct snd_soc_dai_ops const tscs454_dai23_ops = {
.hw_params = tscs454_hw_params,
.hw_free = tscs454_hw_free,
.prepare = tscs454_prepare,
+ .auto_selectable_formats = &tscs454_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static int tscs454_probe(struct snd_soc_component *component)
--
2.53.0
^ permalink raw reply related [flat|nested] 54+ messages in thread
* [PATCH 41/44] ASoC: codecs: twl4030: use .auto_selectable_formats
2026-08-04 0:40 [PATCH 00/44] ASoC: codec: use .auto_selectable_formats Kuninori Morimoto
` (39 preceding siblings ...)
2026-08-04 0:43 ` [PATCH 40/44] ASoC: codecs: tscs454: " Kuninori Morimoto
@ 2026-08-04 0:44 ` Kuninori Morimoto
2026-08-04 0:44 ` [PATCH 42/44] ASoC: codecs: uda13*: " Kuninori Morimoto
` (2 subsequent siblings)
43 siblings, 0 replies; 54+ messages in thread
From: Kuninori Morimoto @ 2026-08-04 0:44 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/codecs/twl4030.c | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/sound/soc/codecs/twl4030.c b/sound/soc/codecs/twl4030.c
index 9476cdfd4dde9..345bb6243fb89 100644
--- a/sound/soc/codecs/twl4030.c
+++ b/sound/soc/codecs/twl4030.c
@@ -2097,6 +2097,10 @@ static int twl4030_voice_set_tristate(struct snd_soc_dai *dai, int tristate)
#define TWL4030_RATES (SNDRV_PCM_RATE_8000_48000)
#define TWL4030_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S32_LE)
+static const u64 twl4030_selectable_formats =
+ SND_SOC_POSSIBLE_DAIFMT_I2S |
+ SND_SOC_POSSIBLE_DAIFMT_DSP_A;
+
static const struct snd_soc_dai_ops twl4030_dai_hifi_ops = {
.startup = twl4030_startup,
.shutdown = twl4030_shutdown,
@@ -2104,8 +2108,14 @@ static const struct snd_soc_dai_ops twl4030_dai_hifi_ops = {
.set_sysclk = twl4030_set_dai_sysclk,
.set_fmt = twl4030_set_dai_fmt,
.set_tristate = twl4030_set_tristate,
+ .auto_selectable_formats = &twl4030_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
+static const u64 twl4030_voice_selectable_formats =
+ SND_SOC_POSSIBLE_DAIFMT_NB_IF |
+ SND_SOC_POSSIBLE_DAIFMT_IB_NF;
+
static const struct snd_soc_dai_ops twl4030_dai_voice_ops = {
.startup = twl4030_voice_startup,
.shutdown = twl4030_voice_shutdown,
@@ -2113,6 +2123,8 @@ static const struct snd_soc_dai_ops twl4030_dai_voice_ops = {
.set_sysclk = twl4030_voice_set_dai_sysclk,
.set_fmt = twl4030_voice_set_dai_fmt,
.set_tristate = twl4030_voice_set_tristate,
+ .auto_selectable_formats = &twl4030_voice_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver twl4030_dai[] = {
--
2.53.0
^ permalink raw reply related [flat|nested] 54+ messages in thread
* [PATCH 42/44] ASoC: codecs: uda13*: use .auto_selectable_formats
2026-08-04 0:40 [PATCH 00/44] ASoC: codec: use .auto_selectable_formats Kuninori Morimoto
` (40 preceding siblings ...)
2026-08-04 0:44 ` [PATCH 41/44] ASoC: codecs: twl4030: " Kuninori Morimoto
@ 2026-08-04 0:44 ` Kuninori Morimoto
2026-08-04 0:44 ` [PATCH 43/44] ASoC: codecs: wm*: " Kuninori Morimoto
2026-08-04 0:44 ` [PATCH 44/44] ASoC: codecs: zl38060: " Kuninori Morimoto
43 siblings, 0 replies; 54+ messages in thread
From: Kuninori Morimoto @ 2026-08-04 0:44 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/codecs/uda1334.c | 6 ++++++
sound/soc/codecs/uda1342.c | 7 +++++++
sound/soc/codecs/uda1380.c | 11 +++++++++++
3 files changed, 24 insertions(+)
diff --git a/sound/soc/codecs/uda1334.c b/sound/soc/codecs/uda1334.c
index 54c5cb5b3d4bd..7ae6afdba38b4 100644
--- a/sound/soc/codecs/uda1334.c
+++ b/sound/soc/codecs/uda1334.c
@@ -193,12 +193,18 @@ static int uda1334_mute_stream(struct snd_soc_dai *dai, int mute, int stream)
#define UDA1334_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S24_LE)
+static const u64 uda1334_selectable_formats =
+ SND_SOC_POSSIBLE_DAIFMT_I2S |
+ SND_SOC_POSSIBLE_DAIFMT_NB_NF;
+
static const struct snd_soc_dai_ops uda1334_dai_ops = {
.startup = uda1334_startup,
.shutdown = uda1334_shutdown,
.set_sysclk = uda1334_set_dai_sysclk,
.set_fmt = uda1334_set_fmt,
.mute_stream = uda1334_mute_stream,
+ .auto_selectable_formats = &uda1334_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver uda1334_dai = {
diff --git a/sound/soc/codecs/uda1342.c b/sound/soc/codecs/uda1342.c
index 4e2d6240a8695..63d087590ac99 100644
--- a/sound/soc/codecs/uda1342.c
+++ b/sound/soc/codecs/uda1342.c
@@ -223,6 +223,11 @@ static const struct snd_soc_dapm_route uda1342_dapm_routes[] = {
{ "VOUTR", NULL, "DAC" },
};
+static const u64 uda1342_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 uda1342_dai_ops = {
.startup = uda1342_startup,
.shutdown = uda1342_shutdown,
@@ -230,6 +235,8 @@ static const struct snd_soc_dai_ops uda1342_dai_ops = {
.mute_stream = uda1342_mute,
.set_sysclk = uda1342_set_dai_sysclk,
.set_fmt = uda1342_set_dai_fmt,
+ .auto_selectable_formats = &uda1342_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver uda1342_dai = {
diff --git a/sound/soc/codecs/uda1380.c b/sound/soc/codecs/uda1380.c
index 1dd09d10fc4ad..02adc534dfb06 100644
--- a/sound/soc/codecs/uda1380.c
+++ b/sound/soc/codecs/uda1380.c
@@ -653,11 +653,18 @@ static int uda1380_set_bias_level(struct snd_soc_component *component,
SNDRV_PCM_RATE_16000 | SNDRV_PCM_RATE_22050 |\
SNDRV_PCM_RATE_44100 | SNDRV_PCM_RATE_48000)
+static const u64 uda1380_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 uda1380_dai_ops = {
.hw_params = uda1380_pcm_hw_params,
.shutdown = uda1380_pcm_shutdown,
.trigger = uda1380_trigger,
.set_fmt = uda1380_set_dai_fmt_both,
+ .auto_selectable_formats = &uda1380_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static const struct snd_soc_dai_ops uda1380_dai_ops_playback = {
@@ -665,6 +672,8 @@ static const struct snd_soc_dai_ops uda1380_dai_ops_playback = {
.shutdown = uda1380_pcm_shutdown,
.trigger = uda1380_trigger,
.set_fmt = uda1380_set_dai_fmt_playback,
+ .auto_selectable_formats = &uda1380_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static const struct snd_soc_dai_ops uda1380_dai_ops_capture = {
@@ -672,6 +681,8 @@ static const struct snd_soc_dai_ops uda1380_dai_ops_capture = {
.shutdown = uda1380_pcm_shutdown,
.trigger = uda1380_trigger,
.set_fmt = uda1380_set_dai_fmt_capture,
+ .auto_selectable_formats = &uda1380_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver uda1380_dai[] = {
--
2.53.0
^ permalink raw reply related [flat|nested] 54+ messages in thread
* [PATCH 43/44] ASoC: codecs: wm*: use .auto_selectable_formats
2026-08-04 0:40 [PATCH 00/44] ASoC: codec: use .auto_selectable_formats Kuninori Morimoto
` (41 preceding siblings ...)
2026-08-04 0:44 ` [PATCH 42/44] ASoC: codecs: uda13*: " Kuninori Morimoto
@ 2026-08-04 0:44 ` Kuninori Morimoto
2026-08-04 17:40 ` Mark Brown
2026-08-04 0:44 ` [PATCH 44/44] ASoC: codecs: zl38060: " Kuninori Morimoto
43 siblings, 1 reply; 54+ messages in thread
From: Kuninori Morimoto @ 2026-08-04 0:44 UTC (permalink / raw)
To: Charles Keepax, Jaroslav Kysela, Liam Girdwood, Mark Brown,
Takashi Iwai, "Uwe Kleine-König (The Capable Hub)"
Cc: linux-sound, Uwe Kleine-König (The Capable Hub)
We can use .auto_selectable_formats. Let's adds it.
Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
---
sound/soc/codecs/wm2200.c | 10 ++++++++++
sound/soc/codecs/wm5100.c | 10 ++++++++++
sound/soc/codecs/wm8350.c | 13 +++++++++++++
sound/soc/codecs/wm8400.c | 9 +++++++++
sound/soc/codecs/wm8510.c | 12 ++++++++++++
sound/soc/codecs/wm8523.c | 13 +++++++++++++
sound/soc/codecs/wm8524.c | 6 ++++++
sound/soc/codecs/wm8580.c | 15 +++++++++++++++
sound/soc/codecs/wm8711.c | 13 +++++++++++++
sound/soc/codecs/wm8728.c | 9 +++++++++
sound/soc/codecs/wm8731.c | 13 +++++++++++++
sound/soc/codecs/wm8737.c | 11 +++++++++++
sound/soc/codecs/wm8741.c | 13 +++++++++++++
sound/soc/codecs/wm8750.c | 13 +++++++++++++
sound/soc/codecs/wm8753.c | 20 ++++++++++++++++++++
sound/soc/codecs/wm8770.c | 11 +++++++++++
sound/soc/codecs/wm8776.c | 13 +++++++++++++
sound/soc/codecs/wm8804.c | 15 ++++++++++++++-
sound/soc/codecs/wm8900.c | 18 ++++++++++++++++++
sound/soc/codecs/wm8903.c | 18 ++++++++++++++++++
sound/soc/codecs/wm8904.c | 18 ++++++++++++++++++
sound/soc/codecs/wm8940.c | 13 +++++++++++++
sound/soc/codecs/wm8955.c | 18 ++++++++++++++++++
sound/soc/codecs/wm8960.c | 13 +++++++++++++
sound/soc/codecs/wm8961.c | 18 ++++++++++++++++++
sound/soc/codecs/wm8962.c | 13 +++++++++++++
sound/soc/codecs/wm8971.c | 13 +++++++++++++
sound/soc/codecs/wm8974.c | 12 ++++++++++++
sound/soc/codecs/wm8978.c | 12 ++++++++++++
sound/soc/codecs/wm8983.c | 12 ++++++++++++
sound/soc/codecs/wm8985.c | 18 ++++++++++++++++++
sound/soc/codecs/wm8988.c | 13 +++++++++++++
sound/soc/codecs/wm8990.c | 9 +++++++++
sound/soc/codecs/wm8991.c | 9 +++++++++
sound/soc/codecs/wm8993.c | 18 ++++++++++++++++++
sound/soc/codecs/wm8994.c | 20 ++++++++++++++++++++
sound/soc/codecs/wm8995.c | 20 ++++++++++++++++++++
sound/soc/codecs/wm8996.c | 12 ++++++++++++
sound/soc/codecs/wm9081.c | 18 ++++++++++++++++++
sound/soc/codecs/wm9713.c | 13 +++++++++++++
40 files changed, 546 insertions(+), 1 deletion(-)
diff --git a/sound/soc/codecs/wm2200.c b/sound/soc/codecs/wm2200.c
index bc78b553b6cbe..692e933dba753 100644
--- a/sound/soc/codecs/wm2200.c
+++ b/sound/soc/codecs/wm2200.c
@@ -2066,10 +2066,20 @@ static int wm2200_dai_probe(struct snd_soc_dai *dai)
return 0;
}
+static const u64 wm2200_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 wm2200_dai_ops = {
.probe = wm2200_dai_probe,
.set_fmt = wm2200_set_fmt,
.hw_params = wm2200_hw_params,
+ .auto_selectable_formats = &wm2200_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
#define WM2200_RATES SNDRV_PCM_RATE_8000_48000
diff --git a/sound/soc/codecs/wm5100.c b/sound/soc/codecs/wm5100.c
index 2fe937a93026c..f7ecbac386e5e 100644
--- a/sound/soc/codecs/wm5100.c
+++ b/sound/soc/codecs/wm5100.c
@@ -1501,9 +1501,19 @@ static int wm5100_hw_params(struct snd_pcm_substream *substream,
return 0;
}
+static const u64 wm5100_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 wm5100_dai_ops = {
.set_fmt = wm5100_set_fmt,
.hw_params = wm5100_hw_params,
+ .auto_selectable_formats = &wm5100_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static int wm5100_set_sysclk(struct snd_soc_component *component, int clk_id,
diff --git a/sound/soc/codecs/wm8350.c b/sound/soc/codecs/wm8350.c
index ad68ff1790e01..13e3fde87e149 100644
--- a/sound/soc/codecs/wm8350.c
+++ b/sound/soc/codecs/wm8350.c
@@ -1426,6 +1426,17 @@ EXPORT_SYMBOL_GPL(wm8350_mic_jack_detect);
SNDRV_PCM_FMTBIT_S20_3LE |\
SNDRV_PCM_FMTBIT_S24_LE)
+static const u64 wm8350_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 wm8350_dai_ops = {
.hw_params = wm8350_pcm_hw_params,
.mute_stream = wm8350_mute,
@@ -1434,6 +1445,8 @@ static const struct snd_soc_dai_ops wm8350_dai_ops = {
.set_pll = wm8350_set_fll,
.set_clkdiv = wm8350_set_clkdiv,
.no_capture_mute = 1,
+ .auto_selectable_formats = &wm8350_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver wm8350_dai = {
diff --git a/sound/soc/codecs/wm8400.c b/sound/soc/codecs/wm8400.c
index 0eecc8657a38d..83e2d72a4a76b 100644
--- a/sound/soc/codecs/wm8400.c
+++ b/sound/soc/codecs/wm8400.c
@@ -1222,6 +1222,13 @@ static int wm8400_set_bias_level(struct snd_soc_component *component,
#define WM8400_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE |\
SNDRV_PCM_FMTBIT_S24_LE)
+static const u64 wm8400_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 wm8400_dai_ops = {
.hw_params = wm8400_hw_params,
.mute_stream = wm8400_mute,
@@ -1230,6 +1237,8 @@ static const struct snd_soc_dai_ops wm8400_dai_ops = {
.set_sysclk = wm8400_set_dai_sysclk,
.set_pll = wm8400_set_dai_pll,
.no_capture_mute = 1,
+ .auto_selectable_formats = &wm8400_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
/*
diff --git a/sound/soc/codecs/wm8510.c b/sound/soc/codecs/wm8510.c
index 137dcd3d74874..7d40ed21f569e 100644
--- a/sound/soc/codecs/wm8510.c
+++ b/sound/soc/codecs/wm8510.c
@@ -545,6 +545,16 @@ static int wm8510_set_bias_level(struct snd_soc_component *component,
#define WM8510_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE |\
SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S32_LE)
+static const u64 wm8510_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 wm8510_dai_ops = {
.hw_params = wm8510_pcm_hw_params,
.mute_stream = wm8510_mute,
@@ -552,6 +562,8 @@ static const struct snd_soc_dai_ops wm8510_dai_ops = {
.set_clkdiv = wm8510_set_dai_clkdiv,
.set_pll = wm8510_set_dai_pll,
.no_capture_mute = 1,
+ .auto_selectable_formats = &wm8510_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver wm8510_dai = {
diff --git a/sound/soc/codecs/wm8523.c b/sound/soc/codecs/wm8523.c
index b8832a1d61feb..9972d6599002c 100644
--- a/sound/soc/codecs/wm8523.c
+++ b/sound/soc/codecs/wm8523.c
@@ -374,11 +374,24 @@ static int wm8523_set_bias_level(struct snd_soc_component *component,
#define WM8523_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE |\
SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S32_LE)
+static const u64 wm8523_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 wm8523_dai_ops = {
.startup = wm8523_startup,
.hw_params = wm8523_hw_params,
.set_sysclk = wm8523_set_dai_sysclk,
.set_fmt = wm8523_set_dai_fmt,
+ .auto_selectable_formats = &wm8523_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver wm8523_dai = {
diff --git a/sound/soc/codecs/wm8524.c b/sound/soc/codecs/wm8524.c
index 23daf158f35f6..8d0565b103cdb 100644
--- a/sound/soc/codecs/wm8524.c
+++ b/sound/soc/codecs/wm8524.c
@@ -190,6 +190,10 @@ static int wm8524_hw_params(struct snd_pcm_substream *substream,
SNDRV_PCM_FMTBIT_S24_LE |\
SNDRV_PCM_FMTBIT_S32_LE)
+static const u64 wm8525_selectable_formats =
+ SND_SOC_POSSIBLE_DAIFMT_I2S |
+ SND_SOC_POSSIBLE_DAIFMT_NB_NF;
+
static const struct snd_soc_dai_ops wm8524_dai_ops = {
.startup = wm8524_startup,
.shutdown = wm8524_shutdown,
@@ -197,6 +201,8 @@ static const struct snd_soc_dai_ops wm8524_dai_ops = {
.set_fmt = wm8524_set_fmt,
.mute_stream = wm8524_mute_stream,
.hw_params = wm8524_hw_params,
+ .auto_selectable_formats = &wm8525_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver wm8524_dai = {
diff --git a/sound/soc/codecs/wm8580.c b/sound/soc/codecs/wm8580.c
index eb374ba6e5b5b..c807efe021943 100644
--- a/sound/soc/codecs/wm8580.c
+++ b/sound/soc/codecs/wm8580.c
@@ -860,6 +860,17 @@ static int wm8580_playback_startup(struct snd_pcm_substream *substream,
#define WM8580_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE |\
SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S32_LE)
+static const u64 wm8580_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 wm8580_dai_ops_playback = {
.startup = wm8580_playback_startup,
.set_sysclk = wm8580_set_sysclk,
@@ -869,6 +880,8 @@ static const struct snd_soc_dai_ops wm8580_dai_ops_playback = {
.set_pll = wm8580_set_dai_pll,
.mute_stream = wm8580_mute,
.no_capture_mute = 1,
+ .auto_selectable_formats = &wm8580_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static const struct snd_soc_dai_ops wm8580_dai_ops_capture = {
@@ -877,6 +890,8 @@ static const struct snd_soc_dai_ops wm8580_dai_ops_capture = {
.set_fmt = wm8580_set_paif_dai_fmt,
.set_clkdiv = wm8580_set_dai_clkdiv,
.set_pll = wm8580_set_dai_pll,
+ .auto_selectable_formats = &wm8580_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver wm8580_dai[] = {
diff --git a/sound/soc/codecs/wm8711.c b/sound/soc/codecs/wm8711.c
index 2db8829661c39..390af15a749a1 100644
--- a/sound/soc/codecs/wm8711.c
+++ b/sound/soc/codecs/wm8711.c
@@ -325,6 +325,17 @@ static int wm8711_set_bias_level(struct snd_soc_component *component,
#define WM8711_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE |\
SNDRV_PCM_FMTBIT_S24_LE)
+static const u64 wm8711_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 wm8711_ops = {
.prepare = wm8711_pcm_prepare,
.hw_params = wm8711_hw_params,
@@ -333,6 +344,8 @@ static const struct snd_soc_dai_ops wm8711_ops = {
.set_sysclk = wm8711_set_dai_sysclk,
.set_fmt = wm8711_set_dai_fmt,
.no_capture_mute = 1,
+ .auto_selectable_formats = &wm8711_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver wm8711_dai = {
diff --git a/sound/soc/codecs/wm8728.c b/sound/soc/codecs/wm8728.c
index 3109a6a0df742..7af5ce0fffe05 100644
--- a/sound/soc/codecs/wm8728.c
+++ b/sound/soc/codecs/wm8728.c
@@ -190,11 +190,20 @@ static int wm8728_set_bias_level(struct snd_soc_component *component,
#define WM8728_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE |\
SNDRV_PCM_FMTBIT_S24_LE)
+static const u64 wm8728_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 wm8728_dai_ops = {
.hw_params = wm8728_hw_params,
.mute_stream = wm8728_mute,
.set_fmt = wm8728_set_dai_fmt,
.no_capture_mute = 1,
+ .auto_selectable_formats = &wm8728_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver wm8728_dai = {
diff --git a/sound/soc/codecs/wm8731.c b/sound/soc/codecs/wm8731.c
index ce87280d590db..f25b50919a9a5 100644
--- a/sound/soc/codecs/wm8731.c
+++ b/sound/soc/codecs/wm8731.c
@@ -519,6 +519,17 @@ static int wm8731_startup(struct snd_pcm_substream *substream,
#define WM8731_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE |\
SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S32_LE)
+static const u64 wm8731_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 wm8731_dai_ops = {
.startup = wm8731_startup,
.hw_params = wm8731_hw_params,
@@ -526,6 +537,8 @@ static const struct snd_soc_dai_ops wm8731_dai_ops = {
.set_sysclk = wm8731_set_dai_sysclk,
.set_fmt = wm8731_set_dai_fmt,
.no_capture_mute = 1,
+ .auto_selectable_formats = &wm8731_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver wm8731_dai = {
diff --git a/sound/soc/codecs/wm8737.c b/sound/soc/codecs/wm8737.c
index 33a3f88fffb3c..72b7d09503a9c 100644
--- a/sound/soc/codecs/wm8737.c
+++ b/sound/soc/codecs/wm8737.c
@@ -516,10 +516,21 @@ static int wm8737_set_bias_level(struct snd_soc_component *component,
#define WM8737_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE |\
SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S32_LE)
+static const u64 wm8737_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;
+
static const struct snd_soc_dai_ops wm8737_dai_ops = {
.hw_params = wm8737_hw_params,
.set_sysclk = wm8737_set_dai_sysclk,
.set_fmt = wm8737_set_dai_fmt,
+ .auto_selectable_formats = &wm8737_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver wm8737_dai = {
diff --git a/sound/soc/codecs/wm8741.c b/sound/soc/codecs/wm8741.c
index ca56fdfb50887..e49adc9808b4f 100644
--- a/sound/soc/codecs/wm8741.c
+++ b/sound/soc/codecs/wm8741.c
@@ -381,6 +381,17 @@ static int wm8741_mute(struct snd_soc_dai *codec_dai, int mute, int direction)
#define WM8741_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE |\
SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S32_LE)
+static const u64 wm8741_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 wm8741_dai_ops = {
.startup = wm8741_startup,
.hw_params = wm8741_hw_params,
@@ -388,6 +399,8 @@ static const struct snd_soc_dai_ops wm8741_dai_ops = {
.set_fmt = wm8741_set_dai_fmt,
.mute_stream = wm8741_mute,
.no_capture_mute = 1,
+ .auto_selectable_formats = &wm8741_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver wm8741_dai = {
diff --git a/sound/soc/codecs/wm8750.c b/sound/soc/codecs/wm8750.c
index d3f1178c2d34e..b0b4447938303 100644
--- a/sound/soc/codecs/wm8750.c
+++ b/sound/soc/codecs/wm8750.c
@@ -659,12 +659,25 @@ static int wm8750_set_bias_level(struct snd_soc_component *component,
#define WM8750_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE |\
SNDRV_PCM_FMTBIT_S24_LE)
+static const u64 wm8750_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 wm8750_dai_ops = {
.hw_params = wm8750_pcm_hw_params,
.mute_stream = wm8750_mute,
.set_fmt = wm8750_set_dai_fmt,
.set_sysclk = wm8750_set_dai_sysclk,
.no_capture_mute = 1,
+ .auto_selectable_formats = &wm8750_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver wm8750_dai = {
diff --git a/sound/soc/codecs/wm8753.c b/sound/soc/codecs/wm8753.c
index ac4008b4832dd..cbdf1e6aea5bb 100644
--- a/sound/soc/codecs/wm8753.c
+++ b/sound/soc/codecs/wm8753.c
@@ -1380,6 +1380,22 @@ static int wm8753_set_bias_level(struct snd_soc_component *component,
* 3. Voice disabled - HIFI over HIFI
* 4. Voice disabled - HIFI over HIFI, uses voice DAI LRC for capture
*/
+static const u64 wm8753_selectable_formats[] = {
+ /* 1st priority */
+ SND_SOC_POSSIBLE_DAIFMT_DSP_A |
+ SND_SOC_POSSIBLE_DAIFMT_DSP_B |
+ SND_SOC_POSSIBLE_DAIFMT_NB_NF |
+ SND_SOC_POSSIBLE_DAIFMT_IB_NF,
+ /* 2nd priority */
+ 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 wm8753_dai_ops_hifi_mode = {
.hw_params = wm8753_i2s_hw_params,
.mute_stream = wm8753_mute,
@@ -1388,6 +1404,8 @@ static const struct snd_soc_dai_ops wm8753_dai_ops_hifi_mode = {
.set_pll = wm8753_set_dai_pll,
.set_sysclk = wm8753_set_dai_sysclk,
.no_capture_mute = 1,
+ .auto_selectable_formats = wm8753_selectable_formats,
+ .num_auto_selectable_formats = ARRAY_SIZE(wm8753_selectable_formats),
};
static const struct snd_soc_dai_ops wm8753_dai_ops_voice_mode = {
@@ -1398,6 +1416,8 @@ static const struct snd_soc_dai_ops wm8753_dai_ops_voice_mode = {
.set_pll = wm8753_set_dai_pll,
.set_sysclk = wm8753_set_dai_sysclk,
.no_capture_mute = 1,
+ .auto_selectable_formats = wm8753_selectable_formats,
+ .num_auto_selectable_formats = ARRAY_SIZE(wm8753_selectable_formats),
};
static struct snd_soc_dai_driver wm8753_dai[] = {
diff --git a/sound/soc/codecs/wm8770.c b/sound/soc/codecs/wm8770.c
index b8b4d1e823e6e..1e485d2fe21a6 100644
--- a/sound/soc/codecs/wm8770.c
+++ b/sound/soc/codecs/wm8770.c
@@ -537,12 +537,23 @@ static int wm8770_set_bias_level(struct snd_soc_component *component,
#define WM8770_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE | \
SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S32_LE)
+static const u64 wm8770_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 wm8770_dai_ops = {
.mute_stream = wm8770_mute,
.hw_params = wm8770_hw_params,
.set_fmt = wm8770_set_fmt,
.set_sysclk = wm8770_set_sysclk,
.no_capture_mute = 1,
+ .auto_selectable_formats = &wm8770_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver wm8770_dai = {
diff --git a/sound/soc/codecs/wm8776.c b/sound/soc/codecs/wm8776.c
index a8e4f71c77d10..c633fe824356d 100644
--- a/sound/soc/codecs/wm8776.c
+++ b/sound/soc/codecs/wm8776.c
@@ -360,18 +360,31 @@ static int wm8776_set_bias_level(struct snd_soc_component *component,
#define WM8776_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE |\
SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S32_LE)
+static const u64 wm8776_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 wm8776_dac_ops = {
.mute_stream = wm8776_mute,
.hw_params = wm8776_hw_params,
.set_fmt = wm8776_set_fmt,
.set_sysclk = wm8776_set_sysclk,
.no_capture_mute = 1,
+ .auto_selectable_formats = &wm8776_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static const struct snd_soc_dai_ops wm8776_adc_ops = {
.hw_params = wm8776_hw_params,
.set_fmt = wm8776_set_fmt,
.set_sysclk = wm8776_set_sysclk,
+ .auto_selectable_formats = &wm8776_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver wm8776_dai[] = {
diff --git a/sound/soc/codecs/wm8804.c b/sound/soc/codecs/wm8804.c
index 94aa3c8de0ab6..2fc9634fe51f1 100644
--- a/sound/soc/codecs/wm8804.c
+++ b/sound/soc/codecs/wm8804.c
@@ -502,12 +502,25 @@ static int wm8804_set_clkdiv(struct snd_soc_dai *dai,
return 0;
}
+static const u64 wm8804_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 wm8804_dai_ops = {
.hw_params = wm8804_hw_params,
.set_fmt = wm8804_set_fmt,
.set_sysclk = wm8804_set_sysclk,
.set_clkdiv = wm8804_set_clkdiv,
- .set_pll = wm8804_set_pll
+ .set_pll = wm8804_set_pll,
+ .auto_selectable_formats = &wm8804_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
#define WM8804_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE | \
diff --git a/sound/soc/codecs/wm8900.c b/sound/soc/codecs/wm8900.c
index a9128cfa6ff17..dcda7a7be0b10 100644
--- a/sound/soc/codecs/wm8900.c
+++ b/sound/soc/codecs/wm8900.c
@@ -992,6 +992,22 @@ static int wm8900_mute(struct snd_soc_dai *codec_dai, int mute, int direction)
(SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE | \
SNDRV_PCM_FMTBIT_S24_LE)
+static const u64 wm8900_selectable_formats[] = {
+ /* 1st priority */
+ 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,
+ /* 2nd priority */
+ SND_SOC_POSSIBLE_DAIFMT_DSP_A |
+ SND_SOC_POSSIBLE_DAIFMT_DSP_B |
+ SND_SOC_POSSIBLE_DAIFMT_NB_NF |
+ SND_SOC_POSSIBLE_DAIFMT_IB_NF,
+};
+
static const struct snd_soc_dai_ops wm8900_dai_ops = {
.hw_params = wm8900_hw_params,
.set_clkdiv = wm8900_set_dai_clkdiv,
@@ -999,6 +1015,8 @@ static const struct snd_soc_dai_ops wm8900_dai_ops = {
.set_fmt = wm8900_set_dai_fmt,
.mute_stream = wm8900_mute,
.no_capture_mute = 1,
+ .auto_selectable_formats = wm8900_selectable_formats,
+ .num_auto_selectable_formats = ARRAY_SIZE(wm8900_selectable_formats),
};
static struct snd_soc_dai_driver wm8900_dai = {
diff --git a/sound/soc/codecs/wm8903.c b/sound/soc/codecs/wm8903.c
index 156e1e24a3885..68112cb2eec8f 100644
--- a/sound/soc/codecs/wm8903.c
+++ b/sound/soc/codecs/wm8903.c
@@ -1733,12 +1733,30 @@ static irqreturn_t wm8903_irq(int irq, void *data)
SNDRV_PCM_FMTBIT_S20_3LE |\
SNDRV_PCM_FMTBIT_S24_LE)
+static const u64 wm8903_selectable_formats[] = {
+ /* 1st priority */
+ 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,
+ /* 2nd priority */
+ SND_SOC_POSSIBLE_DAIFMT_DSP_A |
+ SND_SOC_POSSIBLE_DAIFMT_DSP_B |
+ SND_SOC_POSSIBLE_DAIFMT_NB_NF |
+ SND_SOC_POSSIBLE_DAIFMT_IB_NF,
+};
+
static const struct snd_soc_dai_ops wm8903_dai_ops = {
.hw_params = wm8903_hw_params,
.mute_stream = wm8903_mute,
.set_fmt = wm8903_set_dai_fmt,
.set_sysclk = wm8903_set_dai_sysclk,
.no_capture_mute = 1,
+ .auto_selectable_formats = wm8903_selectable_formats,
+ .num_auto_selectable_formats = ARRAY_SIZE(wm8903_selectable_formats),
};
static struct snd_soc_dai_driver wm8903_dai = {
diff --git a/sound/soc/codecs/wm8904.c b/sound/soc/codecs/wm8904.c
index 9e5782e50f475..153ce2c1a0f60 100644
--- a/sound/soc/codecs/wm8904.c
+++ b/sound/soc/codecs/wm8904.c
@@ -2026,6 +2026,22 @@ static int wm8904_set_bias_level(struct snd_soc_component *component,
#define WM8904_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE |\
SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S32_LE)
+static const u64 wm8904_selectable_formats[] = {
+ /* 1st priority */
+ 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,
+ /* 2nd priority */
+ SND_SOC_POSSIBLE_DAIFMT_DSP_A |
+ SND_SOC_POSSIBLE_DAIFMT_DSP_B |
+ SND_SOC_POSSIBLE_DAIFMT_NB_NF |
+ SND_SOC_POSSIBLE_DAIFMT_IB_NF,
+};
+
static const struct snd_soc_dai_ops wm8904_dai_ops = {
.set_sysclk = wm8904_set_sysclk,
.set_fmt = wm8904_set_fmt,
@@ -2034,6 +2050,8 @@ static const struct snd_soc_dai_ops wm8904_dai_ops = {
.hw_params = wm8904_hw_params,
.mute_stream = wm8904_mute,
.no_capture_mute = 1,
+ .auto_selectable_formats = wm8904_selectable_formats,
+ .num_auto_selectable_formats = ARRAY_SIZE(wm8904_selectable_formats),
};
static struct snd_soc_dai_driver wm8904_dai = {
diff --git a/sound/soc/codecs/wm8940.c b/sound/soc/codecs/wm8940.c
index e631ec0722496..f155b8378e909 100644
--- a/sound/soc/codecs/wm8940.c
+++ b/sound/soc/codecs/wm8940.c
@@ -730,6 +730,17 @@ static int wm8940_set_dai_sysclk(struct snd_soc_dai *dai, int clk_id,
SNDRV_PCM_FMTBIT_S24_LE | \
SNDRV_PCM_FMTBIT_S32_LE)
+static const u64 wm8940_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 wm8940_dai_ops = {
.hw_params = wm8940_i2s_hw_params,
.set_sysclk = wm8940_set_dai_sysclk,
@@ -738,6 +749,8 @@ static const struct snd_soc_dai_ops wm8940_dai_ops = {
.set_clkdiv = wm8940_set_dai_clkdiv,
.set_pll = wm8940_set_dai_pll,
.no_capture_mute = 1,
+ .auto_selectable_formats = &wm8940_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver wm8940_dai = {
diff --git a/sound/soc/codecs/wm8955.c b/sound/soc/codecs/wm8955.c
index c897a9ab764dd..1d367a957f3ee 100644
--- a/sound/soc/codecs/wm8955.c
+++ b/sound/soc/codecs/wm8955.c
@@ -845,12 +845,30 @@ static int wm8955_set_bias_level(struct snd_soc_component *component,
#define WM8955_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE |\
SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S32_LE)
+static const u64 wm8955_selectable_formats[] = {
+ /* 1st priority */
+ 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,
+ /* 2nd priority */
+ SND_SOC_POSSIBLE_DAIFMT_DSP_A |
+ SND_SOC_POSSIBLE_DAIFMT_DSP_B |
+ SND_SOC_POSSIBLE_DAIFMT_NB_NF |
+ SND_SOC_POSSIBLE_DAIFMT_IB_NF,
+};
+
static const struct snd_soc_dai_ops wm8955_dai_ops = {
.set_sysclk = wm8955_set_sysclk,
.set_fmt = wm8955_set_fmt,
.hw_params = wm8955_hw_params,
.mute_stream = wm8955_mute,
.no_capture_mute = 1,
+ .auto_selectable_formats = wm8955_selectable_formats,
+ .num_auto_selectable_formats = ARRAY_SIZE(wm8955_selectable_formats),
};
static struct snd_soc_dai_driver wm8955_dai = {
diff --git a/sound/soc/codecs/wm8960.c b/sound/soc/codecs/wm8960.c
index a810732c6af00..093530ae872b7 100644
--- a/sound/soc/codecs/wm8960.c
+++ b/sound/soc/codecs/wm8960.c
@@ -1340,6 +1340,17 @@ static int wm8960_set_dai_sysclk(struct snd_soc_dai *dai, int clk_id,
(SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE | \
SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S32_LE)
+static const u64 wm8960_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 wm8960_dai_ops = {
.hw_params = wm8960_hw_params,
.hw_free = wm8960_hw_free,
@@ -1349,6 +1360,8 @@ static const struct snd_soc_dai_ops wm8960_dai_ops = {
.set_pll = wm8960_set_dai_pll,
.set_sysclk = wm8960_set_dai_sysclk,
.no_capture_mute = 1,
+ .auto_selectable_formats = &wm8960_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver wm8960_dai = {
diff --git a/sound/soc/codecs/wm8961.c b/sound/soc/codecs/wm8961.c
index 504fc59e4be2a..55ccac7286c96 100644
--- a/sound/soc/codecs/wm8961.c
+++ b/sound/soc/codecs/wm8961.c
@@ -803,6 +803,22 @@ static int wm8961_set_bias_level(struct snd_soc_component *component,
(SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE | \
SNDRV_PCM_FMTBIT_S24_LE)
+static const u64 wm8961_selectable_formats[] = {
+ /* 1st priority */
+ 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,
+ /* 2nd priority */
+ SND_SOC_POSSIBLE_DAIFMT_DSP_A |
+ SND_SOC_POSSIBLE_DAIFMT_DSP_B |
+ SND_SOC_POSSIBLE_DAIFMT_NB_NF |
+ SND_SOC_POSSIBLE_DAIFMT_IB_NF,
+};
+
static const struct snd_soc_dai_ops wm8961_dai_ops = {
.hw_params = wm8961_hw_params,
.set_sysclk = wm8961_set_sysclk,
@@ -811,6 +827,8 @@ static const struct snd_soc_dai_ops wm8961_dai_ops = {
.set_tristate = wm8961_set_tristate,
.set_clkdiv = wm8961_set_clkdiv,
.no_capture_mute = 1,
+ .auto_selectable_formats = wm8961_selectable_formats,
+ .num_auto_selectable_formats = ARRAY_SIZE(wm8961_selectable_formats),
};
static struct snd_soc_dai_driver wm8961_dai = {
diff --git a/sound/soc/codecs/wm8962.c b/sound/soc/codecs/wm8962.c
index 8a9598161b357..d77ff4daddf73 100644
--- a/sound/soc/codecs/wm8962.c
+++ b/sound/soc/codecs/wm8962.c
@@ -3056,6 +3056,17 @@ static int wm8962_mute(struct snd_soc_dai *dai, int mute, int direction)
#define WM8962_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE |\
SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S32_LE)
+static const u64 wm8962_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 wm8962_dai_ops = {
.hw_params = wm8962_hw_params,
.set_sysclk = wm8962_set_dai_sysclk,
@@ -3063,6 +3074,8 @@ static const struct snd_soc_dai_ops wm8962_dai_ops = {
.set_tdm_slot = wm8962_set_tdm_slot,
.mute_stream = wm8962_mute,
.no_capture_mute = 1,
+ .auto_selectable_formats = &wm8962_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver wm8962_dai = {
diff --git a/sound/soc/codecs/wm8971.c b/sound/soc/codecs/wm8971.c
index a5d2e91b66bba..388ee05d45206 100644
--- a/sound/soc/codecs/wm8971.c
+++ b/sound/soc/codecs/wm8971.c
@@ -601,12 +601,25 @@ static int wm8971_set_bias_level(struct snd_soc_component *component,
#define WM8971_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE |\
SNDRV_PCM_FMTBIT_S24_LE)
+static const u64 wm8971_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 wm8971_dai_ops = {
.hw_params = wm8971_pcm_hw_params,
.mute_stream = wm8971_mute,
.set_fmt = wm8971_set_dai_fmt,
.set_sysclk = wm8971_set_dai_sysclk,
.no_capture_mute = 1,
+ .auto_selectable_formats = &wm8971_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver wm8971_dai = {
diff --git a/sound/soc/codecs/wm8974.c b/sound/soc/codecs/wm8974.c
index 4656652b8e97c..b9e8c544912b0 100644
--- a/sound/soc/codecs/wm8974.c
+++ b/sound/soc/codecs/wm8974.c
@@ -623,6 +623,16 @@ static int wm8974_set_bias_level(struct snd_soc_component *component,
#define WM8974_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE |\
SNDRV_PCM_FMTBIT_S24_LE)
+static const u64 wm8974_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 wm8974_ops = {
.hw_params = wm8974_pcm_hw_params,
.mute_stream = wm8974_mute,
@@ -631,6 +641,8 @@ static const struct snd_soc_dai_ops wm8974_ops = {
.set_pll = wm8974_set_dai_pll,
.set_sysclk = wm8974_set_dai_sysclk,
.no_capture_mute = 1,
+ .auto_selectable_formats = &wm8974_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver wm8974_dai = {
diff --git a/sound/soc/codecs/wm8978.c b/sound/soc/codecs/wm8978.c
index ad8064bbaaac8..25cc433c7653d 100644
--- a/sound/soc/codecs/wm8978.c
+++ b/sound/soc/codecs/wm8978.c
@@ -892,6 +892,16 @@ static int wm8978_set_bias_level(struct snd_soc_component *component,
#define WM8978_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE | \
SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S32_LE)
+static const u64 wm8978_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 wm8978_dai_ops = {
.hw_params = wm8978_hw_params,
.mute_stream = wm8978_mute,
@@ -899,6 +909,8 @@ static const struct snd_soc_dai_ops wm8978_dai_ops = {
.set_clkdiv = wm8978_set_dai_clkdiv,
.set_sysclk = wm8978_set_dai_sysclk,
.no_capture_mute = 1,
+ .auto_selectable_formats = &wm8978_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
/* Also supports 12kHz */
diff --git a/sound/soc/codecs/wm8983.c b/sound/soc/codecs/wm8983.c
index fab25f35fd141..3366166a2b771 100644
--- a/sound/soc/codecs/wm8983.c
+++ b/sound/soc/codecs/wm8983.c
@@ -943,6 +943,16 @@ static int wm8983_probe(struct snd_soc_component *component)
return 0;
}
+/* FIXME: it doesn't support DSP A/B for now */
+static const u64 wm8983_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 wm8983_dai_ops = {
.mute_stream = wm8983_dac_mute,
.hw_params = wm8983_hw_params,
@@ -950,6 +960,8 @@ static const struct snd_soc_dai_ops wm8983_dai_ops = {
.set_sysclk = wm8983_set_sysclk,
.set_pll = wm8983_set_pll,
.no_capture_mute = 1,
+ .auto_selectable_formats = &wm8983_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
#define WM8983_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE | \
diff --git a/sound/soc/codecs/wm8985.c b/sound/soc/codecs/wm8985.c
index 2a64d5a851da8..77ca9a0feb8a4 100644
--- a/sound/soc/codecs/wm8985.c
+++ b/sound/soc/codecs/wm8985.c
@@ -1072,6 +1072,22 @@ static int wm8985_probe(struct snd_soc_component *component)
return ret;
}
+static const u64 wm8985_selectable_formats[] = {
+ /* 1st priority */
+ 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,
+ /* 2nd priority */
+ SND_SOC_POSSIBLE_DAIFMT_DSP_A |
+ SND_SOC_POSSIBLE_DAIFMT_DSP_B |
+ SND_SOC_POSSIBLE_DAIFMT_NB_NF |
+ SND_SOC_POSSIBLE_DAIFMT_IB_NF,
+};
+
static const struct snd_soc_dai_ops wm8985_dai_ops = {
.mute_stream = wm8985_dac_mute,
.hw_params = wm8985_hw_params,
@@ -1079,6 +1095,8 @@ static const struct snd_soc_dai_ops wm8985_dai_ops = {
.set_sysclk = wm8985_set_sysclk,
.set_pll = wm8985_set_pll,
.no_capture_mute = 1,
+ .auto_selectable_formats = wm8985_selectable_formats,
+ .num_auto_selectable_formats = ARRAY_SIZE(wm8985_selectable_formats),
};
#define WM8985_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE | \
diff --git a/sound/soc/codecs/wm8988.c b/sound/soc/codecs/wm8988.c
index 741aecc7641a1..6f97c9aa453aa 100644
--- a/sound/soc/codecs/wm8988.c
+++ b/sound/soc/codecs/wm8988.c
@@ -762,6 +762,17 @@ static int wm8988_set_bias_level(struct snd_soc_component *component,
#define WM8988_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE |\
SNDRV_PCM_FMTBIT_S24_LE)
+static const u64 wm8988_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 wm8988_ops = {
.startup = wm8988_pcm_startup,
.hw_params = wm8988_pcm_hw_params,
@@ -769,6 +780,8 @@ static const struct snd_soc_dai_ops wm8988_ops = {
.set_sysclk = wm8988_set_dai_sysclk,
.mute_stream = wm8988_mute,
.no_capture_mute = 1,
+ .auto_selectable_formats = &wm8988_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver wm8988_dai = {
diff --git a/sound/soc/codecs/wm8990.c b/sound/soc/codecs/wm8990.c
index 11dfbbbdcd920..c8fef187f5401 100644
--- a/sound/soc/codecs/wm8990.c
+++ b/sound/soc/codecs/wm8990.c
@@ -1151,6 +1151,13 @@ static int wm8990_set_bias_level(struct snd_soc_component *component,
* 1. ADC/DAC on Primary Interface
* 2. ADC on Primary Interface/DAC on secondary
*/
+static const u64 wm8990_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 wm8990_dai_ops = {
.hw_params = wm8990_hw_params,
.mute_stream = wm8990_mute,
@@ -1159,6 +1166,8 @@ static const struct snd_soc_dai_ops wm8990_dai_ops = {
.set_pll = wm8990_set_dai_pll,
.set_sysclk = wm8990_set_dai_sysclk,
.no_capture_mute = 1,
+ .auto_selectable_formats = &wm8990_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver wm8990_dai = {
diff --git a/sound/soc/codecs/wm8991.c b/sound/soc/codecs/wm8991.c
index 225c235d3d895..2cb7fb9962af5 100644
--- a/sound/soc/codecs/wm8991.c
+++ b/sound/soc/codecs/wm8991.c
@@ -1195,6 +1195,13 @@ static int wm8991_set_bias_level(struct snd_soc_component *component,
#define WM8991_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE |\
SNDRV_PCM_FMTBIT_S24_LE)
+static const u64 wm8991_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 wm8991_ops = {
.hw_params = wm8991_hw_params,
.mute_stream = wm8991_mute,
@@ -1202,6 +1209,8 @@ static const struct snd_soc_dai_ops wm8991_ops = {
.set_clkdiv = wm8991_set_dai_clkdiv,
.set_pll = wm8991_set_dai_pll,
.no_capture_mute = 1,
+ .auto_selectable_formats = &wm8991_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
/*
diff --git a/sound/soc/codecs/wm8993.c b/sound/soc/codecs/wm8993.c
index 2a94b23319b53..934fa41a53cfa 100644
--- a/sound/soc/codecs/wm8993.c
+++ b/sound/soc/codecs/wm8993.c
@@ -1441,6 +1441,22 @@ static irqreturn_t wm8993_irq(int irq, void *data)
return IRQ_HANDLED;
}
+static const u64 wm8993_selectable_formats[] = {
+ /* 1st priority */
+ 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,
+ /* 2nd priority */
+ SND_SOC_POSSIBLE_DAIFMT_DSP_A |
+ SND_SOC_POSSIBLE_DAIFMT_DSP_B |
+ SND_SOC_POSSIBLE_DAIFMT_NB_NF |
+ SND_SOC_POSSIBLE_DAIFMT_IB_NF,
+};
+
static const struct snd_soc_dai_ops wm8993_ops = {
.set_sysclk = wm8993_set_sysclk,
.set_fmt = wm8993_set_dai_fmt,
@@ -1449,6 +1465,8 @@ static const struct snd_soc_dai_ops wm8993_ops = {
.set_pll = wm8993_set_fll,
.set_tdm_slot = wm8993_set_tdm_slot,
.no_capture_mute = 1,
+ .auto_selectable_formats = wm8993_selectable_formats,
+ .num_auto_selectable_formats = ARRAY_SIZE(wm8993_selectable_formats),
};
#define WM8993_RATES SNDRV_PCM_RATE_8000_48000
diff --git a/sound/soc/codecs/wm8994.c b/sound/soc/codecs/wm8994.c
index 8bf58a6a8af7c..97d8df3815ac7 100644
--- a/sound/soc/codecs/wm8994.c
+++ b/sound/soc/codecs/wm8994.c
@@ -3202,6 +3202,22 @@ static int wm8994_aif2_probe(struct snd_soc_dai *dai)
#define WM8994_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE |\
SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S32_LE)
+static const u64 wm8994_selectable_formats[] = {
+ /* 1st priority */
+ 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,
+ /* 2nd priority */
+ SND_SOC_POSSIBLE_DAIFMT_DSP_A |
+ SND_SOC_POSSIBLE_DAIFMT_DSP_B |
+ SND_SOC_POSSIBLE_DAIFMT_NB_NF |
+ SND_SOC_POSSIBLE_DAIFMT_IB_NF,
+};
+
static const struct snd_soc_dai_ops wm8994_aif1_dai_ops = {
.set_sysclk = wm8994_set_dai_sysclk,
.set_fmt = wm8994_set_dai_fmt,
@@ -3210,6 +3226,8 @@ static const struct snd_soc_dai_ops wm8994_aif1_dai_ops = {
.set_pll = wm8994_set_fll,
.set_tristate = wm8994_set_tristate,
.no_capture_mute = 1,
+ .auto_selectable_formats = wm8994_selectable_formats,
+ .num_auto_selectable_formats = ARRAY_SIZE(wm8994_selectable_formats),
};
static const struct snd_soc_dai_ops wm8994_aif2_dai_ops = {
@@ -3221,6 +3239,8 @@ static const struct snd_soc_dai_ops wm8994_aif2_dai_ops = {
.set_pll = wm8994_set_fll,
.set_tristate = wm8994_set_tristate,
.no_capture_mute = 1,
+ .auto_selectable_formats = wm8994_selectable_formats,
+ .num_auto_selectable_formats = ARRAY_SIZE(wm8994_selectable_formats),
};
static const struct snd_soc_dai_ops wm8994_aif3_dai_ops = {
diff --git a/sound/soc/codecs/wm8995.c b/sound/soc/codecs/wm8995.c
index 799989a5bf0f2..3933a419f1e2d 100644
--- a/sound/soc/codecs/wm8995.c
+++ b/sound/soc/codecs/wm8995.c
@@ -2091,6 +2091,22 @@ static int wm8995_probe(struct snd_soc_component *component)
#define WM8995_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE |\
SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S32_LE)
+static const u64 wm8995_selectable_formats[] = {
+ /* 1st priority */
+ 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,
+ /* 2nd priority */
+ SND_SOC_POSSIBLE_DAIFMT_DSP_A |
+ SND_SOC_POSSIBLE_DAIFMT_DSP_B |
+ SND_SOC_POSSIBLE_DAIFMT_NB_NF |
+ SND_SOC_POSSIBLE_DAIFMT_IB_NF,
+};
+
static const struct snd_soc_dai_ops wm8995_aif1_dai_ops = {
.set_sysclk = wm8995_set_dai_sysclk,
.set_fmt = wm8995_set_dai_fmt,
@@ -2099,6 +2115,8 @@ static const struct snd_soc_dai_ops wm8995_aif1_dai_ops = {
.set_pll = wm8995_set_fll,
.set_tristate = wm8995_set_tristate,
.no_capture_mute = 1,
+ .auto_selectable_formats = wm8995_selectable_formats,
+ .num_auto_selectable_formats = ARRAY_SIZE(wm8995_selectable_formats),
};
static const struct snd_soc_dai_ops wm8995_aif2_dai_ops = {
@@ -2109,6 +2127,8 @@ static const struct snd_soc_dai_ops wm8995_aif2_dai_ops = {
.set_pll = wm8995_set_fll,
.set_tristate = wm8995_set_tristate,
.no_capture_mute = 1,
+ .auto_selectable_formats = wm8995_selectable_formats,
+ .num_auto_selectable_formats = ARRAY_SIZE(wm8995_selectable_formats),
};
static const struct snd_soc_dai_ops wm8995_aif3_dai_ops = {
diff --git a/sound/soc/codecs/wm8996.c b/sound/soc/codecs/wm8996.c
index dface555f9288..25a6186e074a9 100644
--- a/sound/soc/codecs/wm8996.c
+++ b/sound/soc/codecs/wm8996.c
@@ -2703,10 +2703,22 @@ static const struct snd_soc_component_driver soc_component_dev_wm8996 = {
SNDRV_PCM_FMTBIT_S20_3LE | SNDRV_PCM_FMTBIT_S24_LE |\
SNDRV_PCM_FMTBIT_S32_LE)
+static const u64 wm8996_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 wm8996_dai_ops = {
.set_fmt = wm8996_set_fmt,
.hw_params = wm8996_hw_params,
.set_sysclk = wm8996_set_sysclk,
+ .auto_selectable_formats = &wm8996_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver wm8996_dai[] = {
diff --git a/sound/soc/codecs/wm9081.c b/sound/soc/codecs/wm9081.c
index 2e4e0a76499d8..824e9c6b5f3e6 100644
--- a/sound/soc/codecs/wm9081.c
+++ b/sound/soc/codecs/wm9081.c
@@ -1230,12 +1230,30 @@ static int wm9081_set_tdm_slot(struct snd_soc_dai *dai,
(SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE | \
SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S32_LE)
+static const u64 wm9081_selectable_formats[] = {
+ /* 1st priority */
+ 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,
+ /* 2nd priority */
+ SND_SOC_POSSIBLE_DAIFMT_DSP_A |
+ SND_SOC_POSSIBLE_DAIFMT_DSP_B |
+ SND_SOC_POSSIBLE_DAIFMT_NB_NF |
+ SND_SOC_POSSIBLE_DAIFMT_IB_NF,
+};
+
static const struct snd_soc_dai_ops wm9081_dai_ops = {
.hw_params = wm9081_hw_params,
.set_fmt = wm9081_set_dai_fmt,
.mute_stream = wm9081_mute,
.set_tdm_slot = wm9081_set_tdm_slot,
.no_capture_mute = 1,
+ .auto_selectable_formats = wm9081_selectable_formats,
+ .num_auto_selectable_formats = ARRAY_SIZE(wm9081_selectable_formats),
};
/* We report two channels because the CODEC processes a stereo signal, even
diff --git a/sound/soc/codecs/wm9713.c b/sound/soc/codecs/wm9713.c
index 3ba7ca3c1770c..3cffdfbbf9dda 100644
--- a/sound/soc/codecs/wm9713.c
+++ b/sound/soc/codecs/wm9713.c
@@ -1067,6 +1067,17 @@ static int ac97_aux_prepare(struct snd_pcm_substream *substream,
(SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE | \
SNDRV_PCM_FMTBIT_S24_LE)
+static const u64 wm9713_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 wm9713_dai_ops_hifi = {
.prepare = ac97_hifi_prepare,
.set_clkdiv = wm9713_set_dai_clkdiv,
@@ -1085,6 +1096,8 @@ static const struct snd_soc_dai_ops wm9713_dai_ops_voice = {
.set_pll = wm9713_set_dai_pll,
.set_fmt = wm9713_set_dai_fmt,
.set_tristate = wm9713_set_dai_tristate,
+ .auto_selectable_formats = &wm9713_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver wm9713_dai[] = {
--
2.53.0
^ permalink raw reply related [flat|nested] 54+ messages in thread
* [PATCH 44/44] ASoC: codecs: zl38060: use .auto_selectable_formats
2026-08-04 0:40 [PATCH 00/44] ASoC: codec: use .auto_selectable_formats Kuninori Morimoto
` (42 preceding siblings ...)
2026-08-04 0:44 ` [PATCH 43/44] ASoC: codecs: wm*: " Kuninori Morimoto
@ 2026-08-04 0:44 ` Kuninori Morimoto
43 siblings, 0 replies; 54+ messages in thread
From: Kuninori Morimoto @ 2026-08-04 0:44 UTC (permalink / raw)
To: Bartosz Golaszewski, Jaroslav Kysela, Liam Girdwood, Mark Brown,
Takashi Iwai
Cc: Bartosz Golaszewski, linux-sound
We can use .auto_selectable_formats. Let's adds it.
Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
---
sound/soc/codecs/zl38060.c | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/sound/soc/codecs/zl38060.c b/sound/soc/codecs/zl38060.c
index 7de4014e626d2..aa563cf6756a8 100644
--- a/sound/soc/codecs/zl38060.c
+++ b/sound/soc/codecs/zl38060.c
@@ -337,10 +337,16 @@ static const struct reg_sequence cp_config_stereo_bypass[] = {
{ 0x0202, 0x000F }, /* enable I2S1 + DAC */
};
+static const u64 zl38_selectable_formats =
+ SND_SOC_POSSIBLE_DAIFMT_I2S |
+ SND_SOC_POSSIBLE_DAIFMT_NB_NF;
+
static const struct snd_soc_dai_ops zl38_dai_ops = {
.set_fmt = zl38_set_fmt,
.hw_params = zl38_hw_params,
.hw_free = zl38_hw_free,
+ .auto_selectable_formats = &zl38_selectable_formats,
+ .num_auto_selectable_formats = 1,
};
static struct snd_soc_dai_driver zl38_dai = {
--
2.53.0
^ permalink raw reply related [flat|nested] 54+ messages in thread
* Re: [PATCH 11/44] ASoC: codecs: cros_ec_codec: use .auto_selectable_formats
2026-08-04 0:41 ` [PATCH 11/44] ASoC: codecs: cros_ec_codec: " Kuninori Morimoto
@ 2026-08-04 3:04 ` Tzung-Bi Shih
0 siblings, 0 replies; 54+ messages in thread
From: Tzung-Bi Shih @ 2026-08-04 3:04 UTC (permalink / raw)
To: Kuninori Morimoto
Cc: Benson Leung, Cheng-Yi Chiang, Guenter Roeck, Jaroslav Kysela,
Liam Girdwood, Mark Brown, Takashi Iwai, linux-sound
On Tue, Aug 04, 2026 at 12:41:23AM +0000, Kuninori Morimoto wrote:
> We can use .auto_selectable_formats. Let's adds it.
>
> Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Reviewed-by: Tzung-Bi Shih <tzungbi@kernel.org>
^ permalink raw reply [flat|nested] 54+ messages in thread
* Re: [PATCH 02/44] ASoC: codecs: ad1*: use .auto_selectable_formats
2026-08-04 0:40 ` [PATCH 02/44] ASoC: codecs: ad1*: " Kuninori Morimoto
@ 2026-08-04 8:52 ` Nuno Sá
0 siblings, 0 replies; 54+ messages in thread
From: Nuno Sá @ 2026-08-04 8:52 UTC (permalink / raw)
To: Kuninori Morimoto
Cc: Jaroslav Kysela, Lars-Peter Clausen, Liam Girdwood, Mark Brown,
"Nuno Sá", Takashi Iwai, linux-sound
On Tue, Aug 04, 2026 at 12:40:36AM +0000, Kuninori Morimoto wrote:
> We can use .auto_selectable_formats. Let's adds it.
>
> Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
> ---
Acked-by: Nuno Sá <nuno.sa@analog.com>
> sound/soc/codecs/ad1836.c | 6 ++++++
> sound/soc/codecs/ad193x.c | 10 ++++++++++
> 2 files changed, 16 insertions(+)
>
> diff --git a/sound/soc/codecs/ad1836.c b/sound/soc/codecs/ad1836.c
> index 8afeadcaf8b09..dbea83bd49b69 100644
> --- a/sound/soc/codecs/ad1836.c
> +++ b/sound/soc/codecs/ad1836.c
> @@ -193,9 +193,15 @@ static int ad1836_hw_params(struct snd_pcm_substream *substream,
> return 0;
> }
>
> +static const u64 ad1836_selectable_formats =
> + SND_SOC_POSSIBLE_DAIFMT_DSP_A |
> + SND_SOC_POSSIBLE_DAIFMT_IB_IF;
> +
> static const struct snd_soc_dai_ops ad1836_dai_ops = {
> .hw_params = ad1836_hw_params,
> .set_fmt = ad1836_set_dai_fmt,
> + .auto_selectable_formats = &ad1836_selectable_formats,
> + .num_auto_selectable_formats = 1,
> };
>
> #define AD183X_DAI(_name, num_dacs, num_adcs) \
> diff --git a/sound/soc/codecs/ad193x.c b/sound/soc/codecs/ad193x.c
> index b93531c3a9a40..9841c779b1752 100644
> --- a/sound/soc/codecs/ad193x.c
> +++ b/sound/soc/codecs/ad193x.c
> @@ -394,6 +394,14 @@ static int ad193x_startup(struct snd_pcm_substream *substream,
> &constr);
> }
>
> +static const u64 ad193x_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 ad193x_dai_ops = {
> .startup = ad193x_startup,
> .hw_params = ad193x_hw_params,
> @@ -401,6 +409,8 @@ static const struct snd_soc_dai_ops ad193x_dai_ops = {
> .set_tdm_slot = ad193x_set_tdm_slot,
> .set_sysclk = ad193x_set_dai_sysclk,
> .set_fmt = ad193x_set_dai_fmt,
> + .auto_selectable_formats = &ad193x_selectable_formats,
> + .num_auto_selectable_formats = 1,
> .no_capture_mute = 1,
> };
>
> --
> 2.53.0
>
^ permalink raw reply [flat|nested] 54+ messages in thread
* Re: [PATCH 04/44] ASoC: codecs: adau*: use .auto_selectable_formats
2026-08-04 0:40 ` [PATCH 04/44] ASoC: codecs: adau*: " Kuninori Morimoto
@ 2026-08-04 8:54 ` Nuno Sá
0 siblings, 0 replies; 54+ messages in thread
From: Nuno Sá @ 2026-08-04 8:54 UTC (permalink / raw)
To: Kuninori Morimoto
Cc: Jaroslav Kysela, Lars-Peter Clausen, Liam Girdwood, Mark Brown,
"Nuno Sá", Takashi Iwai, linux-sound
On Tue, Aug 04, 2026 at 12:40:49AM +0000, Kuninori Morimoto wrote:
> We can use .auto_selectable_formats. Let's adds it.
>
> Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
> ---
Acked-by: Nuno Sá <nuno.sa@analog.com>
> sound/soc/codecs/adau1372.c | 12 ++++++++++++
> sound/soc/codecs/adau1373.c | 12 ++++++++++++
> sound/soc/codecs/adau1701.c | 11 +++++++++++
> sound/soc/codecs/adau17x1.c | 13 +++++++++++++
> sound/soc/codecs/adau1977.c | 13 +++++++++++++
> sound/soc/codecs/adau7118.c | 12 ++++++++++++
> 6 files changed, 73 insertions(+)
>
> diff --git a/sound/soc/codecs/adau1372.c b/sound/soc/codecs/adau1372.c
> index cc174ec3a1f82..0830d7d2dd7c5 100644
> --- a/sound/soc/codecs/adau1372.c
> +++ b/sound/soc/codecs/adau1372.c
> @@ -881,12 +881,24 @@ static const struct snd_soc_component_driver adau1372_driver = {
> .endianness = 1,
> };
>
> +static const u64 adau1372_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 adau1372_dai_ops = {
> .set_fmt = adau1372_set_dai_fmt,
> .set_tdm_slot = adau1372_set_tdm_slot,
> .set_tristate = adau1372_set_tristate,
> .hw_params = adau1372_hw_params,
> .startup = adau1372_startup,
> + .auto_selectable_formats = &adau1372_selectable_formats,
> + .num_auto_selectable_formats = 1,
> };
>
> #define ADAU1372_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | \
> diff --git a/sound/soc/codecs/adau1373.c b/sound/soc/codecs/adau1373.c
> index 5dd961b233ce9..aa7d3a4b9f588 100644
> --- a/sound/soc/codecs/adau1373.c
> +++ b/sound/soc/codecs/adau1373.c
> @@ -1196,10 +1196,22 @@ static int adau1373_set_dai_sysclk(struct snd_soc_dai *dai,
> return 0;
> }
>
> +static const u64 adau1373_selectable_formats =
> + SND_SOC_POSSIBLE_DAIFMT_I2S |
> + SND_SOC_POSSIBLE_DAIFMT_RIGHT_J |
> + SND_SOC_POSSIBLE_DAIFMT_LEFT_J |
> + 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 adau1373_dai_ops = {
> .hw_params = adau1373_hw_params,
> .set_sysclk = adau1373_set_dai_sysclk,
> .set_fmt = adau1373_set_dai_fmt,
> + .auto_selectable_formats = &adau1373_selectable_formats,
> + .num_auto_selectable_formats = 1,
> };
>
> #define ADAU1373_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE | \
> diff --git a/sound/soc/codecs/adau1701.c b/sound/soc/codecs/adau1701.c
> index 329ab01b62c00..505d52c636278 100644
> --- a/sound/soc/codecs/adau1701.c
> +++ b/sound/soc/codecs/adau1701.c
> @@ -627,11 +627,22 @@ static int adau1701_startup(struct snd_pcm_substream *substream,
> #define ADAU1701_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE |\
> SNDRV_PCM_FMTBIT_S24_LE)
>
> +static const u64 adau1701_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 adau1701_dai_ops = {
> .set_fmt = adau1701_set_dai_fmt,
> .hw_params = adau1701_hw_params,
> .mute_stream = adau1701_mute_stream,
> .startup = adau1701_startup,
> + .auto_selectable_formats = &adau1701_selectable_formats,
> + .num_auto_selectable_formats = 1,
> .no_capture_mute = 1,
> };
>
> diff --git a/sound/soc/codecs/adau17x1.c b/sound/soc/codecs/adau17x1.c
> index 26d7eb437ad18..45ac226b2f1bc 100644
> --- a/sound/soc/codecs/adau17x1.c
> +++ b/sound/soc/codecs/adau17x1.c
> @@ -776,6 +776,17 @@ static int adau17x1_startup(struct snd_pcm_substream *substream,
> return 0;
> }
>
> +static const u64 adau17x1_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;
> +
> const struct snd_soc_dai_ops adau17x1_dai_ops = {
> .hw_params = adau17x1_hw_params,
> .set_sysclk = adau17x1_set_dai_sysclk,
> @@ -783,6 +794,8 @@ const struct snd_soc_dai_ops adau17x1_dai_ops = {
> .set_pll = adau17x1_set_dai_pll,
> .set_tdm_slot = adau17x1_set_dai_tdm_slot,
> .startup = adau17x1_startup,
> + .auto_selectable_formats = &adau17x1_selectable_formats,
> + .num_auto_selectable_formats = 1,
> };
> EXPORT_SYMBOL_GPL(adau17x1_dai_ops);
>
> diff --git a/sound/soc/codecs/adau1977.c b/sound/soc/codecs/adau1977.c
> index b42f35b1a6036..b9d9853934216 100644
> --- a/sound/soc/codecs/adau1977.c
> +++ b/sound/soc/codecs/adau1977.c
> @@ -741,6 +741,17 @@ static int adau1977_set_tristate(struct snd_soc_dai *dai, int tristate)
> ADAU1977_SAI_OVERTEMP_DRV_HIZ, val);
> }
>
> +static const u64 adau1977_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 adau1977_dai_ops = {
> .startup = adau1977_startup,
> .hw_params = adau1977_hw_params,
> @@ -748,6 +759,8 @@ static const struct snd_soc_dai_ops adau1977_dai_ops = {
> .set_fmt = adau1977_set_dai_fmt,
> .set_tdm_slot = adau1977_set_tdm_slot,
> .set_tristate = adau1977_set_tristate,
> + .auto_selectable_formats = &adau1977_selectable_formats,
> + .num_auto_selectable_formats = 1,
> };
>
> static struct snd_soc_dai_driver adau1977_dai = {
> diff --git a/sound/soc/codecs/adau7118.c b/sound/soc/codecs/adau7118.c
> index 5ddea63a6612c..9749299bc7f2a 100644
> --- a/sound/soc/codecs/adau7118.c
> +++ b/sound/soc/codecs/adau7118.c
> @@ -418,12 +418,24 @@ static int adau7118_component_probe(struct snd_soc_component *component)
> return ret;
> }
>
> +static const u64 adau7118_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 adau7118_ops = {
> .hw_params = adau7118_hw_params,
> .set_channel_map = adau7118_set_channel_map,
> .set_fmt = adau7118_set_fmt,
> .set_tdm_slot = adau7118_set_tdm_slot,
> .set_tristate = adau7118_set_tristate,
> + .auto_selectable_formats = &adau7118_selectable_formats,
> + .num_auto_selectable_formats = 1,
> };
>
> static struct snd_soc_dai_driver adau7118_dai = {
> --
> 2.53.0
>
^ permalink raw reply [flat|nested] 54+ messages in thread
* Re: [PATCH 05/44] ASoC: codecs: adav80x: use .auto_selectable_formats
2026-08-04 0:40 ` [PATCH 05/44] ASoC: codecs: adav80x: " Kuninori Morimoto
@ 2026-08-04 8:55 ` Nuno Sá
0 siblings, 0 replies; 54+ messages in thread
From: Nuno Sá @ 2026-08-04 8:55 UTC (permalink / raw)
To: Kuninori Morimoto
Cc: Jaroslav Kysela, Lars-Peter Clausen, Liam Girdwood, Mark Brown,
"Nuno Sá", Takashi Iwai, linux-sound
On Tue, Aug 04, 2026 at 12:40:54AM +0000, Kuninori Morimoto wrote:
> We can use .auto_selectable_formats. Let's adds it.
>
> Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
> ---
Acked-by: Nuno Sá <nuno.sa@analog.com>
> sound/soc/codecs/adav80x.c | 8 ++++++++
> 1 file changed, 8 insertions(+)
>
> diff --git a/sound/soc/codecs/adav80x.c b/sound/soc/codecs/adav80x.c
> index 8a89187f9c782..e97c72ac9b2b2 100644
> --- a/sound/soc/codecs/adav80x.c
> +++ b/sound/soc/codecs/adav80x.c
> @@ -743,11 +743,19 @@ static void adav80x_dai_shutdown(struct snd_pcm_substream *substream,
> adav80x->rate = 0;
> }
>
> +static const u64 adav80x_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;
> +
> static const struct snd_soc_dai_ops adav80x_dai_ops = {
> .set_fmt = adav80x_set_dai_fmt,
> .hw_params = adav80x_hw_params,
> .startup = adav80x_dai_startup,
> .shutdown = adav80x_dai_shutdown,
> + .auto_selectable_formats = &adav80x_selectable_formats,
> + .num_auto_selectable_formats = 1,
> };
>
> #define ADAV80X_PLAYBACK_RATES (SNDRV_PCM_RATE_32000 | SNDRV_PCM_RATE_44100 | \
> --
> 2.53.0
>
^ permalink raw reply [flat|nested] 54+ messages in thread
* Re: [PATCH 12/44] ASoC: codecs: cs35l*: use .auto_selectable_formats
2026-08-04 0:41 ` [PATCH 12/44] ASoC: codecs: cs35l*: " Kuninori Morimoto
@ 2026-08-04 17:30 ` Mark Brown
0 siblings, 0 replies; 54+ messages in thread
From: Mark Brown @ 2026-08-04 17:30 UTC (permalink / raw)
To: Kuninori Morimoto
Cc: David Rhodes, Jaroslav Kysela, Liam Girdwood, Richard Fitzgerald,
Takashi Iwai, linux-sound
[-- Attachment #1: Type: text/plain, Size: 1045 bytes --]
On Tue, Aug 04, 2026 at 12:41:29AM +0000, Kuninori Morimoto wrote:
> We can use .auto_selectable_formats. Let's adds it.
>
> Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
> +static const u64 cs35l35_selectable_formats =
> + SND_SOC_POSSIBLE_DAIFMT_I2S |
> + SND_SOC_POSSIBLE_DAIFMT_PDM;
> +
> static const struct snd_soc_dai_ops cs35l35_ops = {
> .startup = cs35l35_pcm_startup,
> .set_fmt = cs35l35_set_dai_fmt,
> .hw_params = cs35l35_hw_params,
> .set_sysclk = cs35l35_dai_set_sysclk,
> + .auto_selectable_formats = &cs35l35_selectable_formats,
> + .num_auto_selectable_formats = 1,
> };
> static const struct snd_soc_dai_ops cs35l35_pdm_ops = {
> .startup = cs35l35_pdm_startup,
> .set_fmt = cs35l35_set_dai_fmt,
> .hw_params = cs35l35_hw_params,
> + .auto_selectable_formats = &cs35l35_selectable_formats,
> + .num_auto_selectable_formats = 1,
> };
This looks off, are you sure the _pdm_ops ought to support I2S? I
suspect the other ops is really an I2S only one too.
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]
^ permalink raw reply [flat|nested] 54+ messages in thread
* Re: [PATCH 13/44] ASoC: codecs: cs42*: use .auto_selectable_formats
2026-08-04 0:41 ` [PATCH 13/44] ASoC: codecs: cs42*: " Kuninori Morimoto
@ 2026-08-04 17:32 ` Mark Brown
0 siblings, 0 replies; 54+ messages in thread
From: Mark Brown @ 2026-08-04 17:32 UTC (permalink / raw)
To: Kuninori Morimoto
Cc: Ben Bright, David Rhodes, Fred Treven, James Ogletree,
Jaroslav Kysela, Liam Girdwood, "Martin Povišer",
Richard Fitzgerald, Takashi Iwai, linux-sound
[-- Attachment #1: Type: text/plain, Size: 744 bytes --]
On Tue, Aug 04, 2026 at 12:41:33AM +0000, Kuninori Morimoto wrote:
> We can use .auto_selectable_formats. Let's adds it.
> +static const u64 cs4265_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 cs4265_ops = {
> .hw_params = cs4265_pcm_hw_params,
> .mute_stream = cs4265_mute,
> .set_fmt = cs4265_set_fmt,
> .set_sysclk = cs4265_set_sysclk,
> + .auto_selectable_formats = &cs4265_selectable_formats,
> + .num_auto_selectable_formats = 1,
> .no_capture_mute = 1,
> };
The device has issues with _RIGHT_J for capture for some reason it seems
(see _hw_params(), some of the other devices look to be similar).
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]
^ permalink raw reply [flat|nested] 54+ messages in thread
* Re: [PATCH 23/44] ASoC: codecs: max*: use .auto_selectable_formats
2026-08-04 0:42 ` [PATCH 23/44] ASoC: codecs: max*: " Kuninori Morimoto
@ 2026-08-04 17:37 ` Mark Brown
0 siblings, 0 replies; 54+ messages in thread
From: Mark Brown @ 2026-08-04 17:37 UTC (permalink / raw)
To: Kuninori Morimoto
Cc: Jaroslav Kysela, Liam Girdwood, Peter Rosin, Takashi Iwai,
"Uwe Kleine-König (The Capable Hub)", linux-sound
[-- Attachment #1: Type: text/plain, Size: 653 bytes --]
On Tue, Aug 04, 2026 at 12:42:26AM +0000, Kuninori Morimoto wrote:
> We can use .auto_selectable_formats. Let's adds it.
> +static const u64 max9860_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;
This has the same issue the Apple controller had where not all clock
inversion setups are supported with all formats, I2S style and DSP style
are different with DSP only supporting normal frame.
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]
^ permalink raw reply [flat|nested] 54+ messages in thread
* Re: [PATCH 30/44] ASoC: codecs: rt*: use .auto_selectable_formats
2026-08-04 0:43 ` [PATCH 30/44] ASoC: codecs: rt*: " Kuninori Morimoto
@ 2026-08-04 17:39 ` Mark Brown
0 siblings, 0 replies; 54+ messages in thread
From: Mark Brown @ 2026-08-04 17:39 UTC (permalink / raw)
To: Kuninori Morimoto
Cc: Jaroslav Kysela, Liam Girdwood, Oder Chiou, Takashi Iwai,
linux-sound
[-- Attachment #1: Type: text/plain, Size: 1580 bytes --]
On Tue, Aug 04, 2026 at 12:43:07AM +0000, Kuninori Morimoto wrote:
> We can use .auto_selectable_formats. Let's adds it.
> diff --git a/sound/soc/codecs/rt5668.c b/sound/soc/codecs/rt5668.c
> index 4154bad276101..1a4a928c7c3c6 100644
> --- a/sound/soc/codecs/rt5668.c
> +++ b/sound/soc/codecs/rt5668.c
> @@ -2254,16 +2254,30 @@ static int rt5668_resume(struct snd_soc_component *component)
> #define RT5668_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE | \
> SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S8)
>
> +static const u64 rt5668_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 rt5668_aif1_dai_ops = {
> .hw_params = rt5668_hw_params,
> .set_fmt = rt5668_set_dai_fmt,
> .set_tdm_slot = rt5668_set_tdm_slot,
> + .auto_selectable_formats = &rt5668_selectable_formats,
> + .num_auto_selectable_formats = 1,
> };
>
> static const struct snd_soc_dai_ops rt5668_aif2_dai_ops = {
> .hw_params = rt5668_hw_params,
> .set_fmt = rt5668_set_dai_fmt,
> .set_bclk_ratio = rt5668_set_bclk_ratio,
> + .auto_selectable_formats = &rt5668_selectable_formats,
> + .num_auto_selectable_formats = 1,
> };
The ops special case DAI2 for set_dai_fmt() so it'll need a different
set of formats. Similarly for rt5682.
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]
^ permalink raw reply [flat|nested] 54+ messages in thread
* Re: [PATCH 43/44] ASoC: codecs: wm*: use .auto_selectable_formats
2026-08-04 0:44 ` [PATCH 43/44] ASoC: codecs: wm*: " Kuninori Morimoto
@ 2026-08-04 17:40 ` Mark Brown
0 siblings, 0 replies; 54+ messages in thread
From: Mark Brown @ 2026-08-04 17:40 UTC (permalink / raw)
To: Kuninori Morimoto
Cc: Charles Keepax, Jaroslav Kysela, Liam Girdwood, Takashi Iwai,
"Uwe Kleine-König (The Capable Hub)", linux-sound
[-- Attachment #1: Type: text/plain, Size: 260 bytes --]
On Tue, Aug 04, 2026 at 12:44:09AM +0000, Kuninori Morimoto wrote:
> We can use .auto_selectable_formats. Let's adds it.
wm8580, wm8962 and wm8974 don't allow all combinations of frame type and
clock inversions so have the same issue as the Apple controller.
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]
^ permalink raw reply [flat|nested] 54+ messages in thread
end of thread, other threads:[~2026-08-04 17:40 UTC | newest]
Thread overview: 54+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-08-04 0:40 [PATCH 00/44] ASoC: codec: use .auto_selectable_formats Kuninori Morimoto
2026-08-04 0:40 ` [PATCH 01/44] ASoC: codecs: 88pm860x: " Kuninori Morimoto
2026-08-04 0:40 ` [PATCH 02/44] ASoC: codecs: ad1*: " Kuninori Morimoto
2026-08-04 8:52 ` Nuno Sá
2026-08-04 0:40 ` [PATCH 03/44] ASoC: codecs: ab8500: " Kuninori Morimoto
2026-08-04 0:40 ` [PATCH 04/44] ASoC: codecs: adau*: " Kuninori Morimoto
2026-08-04 8:54 ` Nuno Sá
2026-08-04 0:40 ` [PATCH 05/44] ASoC: codecs: adav80x: " Kuninori Morimoto
2026-08-04 8:55 ` Nuno Sá
2026-08-04 0:40 ` [PATCH 06/44] ASoC: codecs: ak4*: " Kuninori Morimoto
2026-08-04 0:41 ` [PATCH 07/44] ASoC: codecs: ak5*: " Kuninori Morimoto
2026-08-04 0:41 ` [PATCH 08/44] ASoC: codecs: alc56*: " Kuninori Morimoto
2026-08-04 0:41 ` [PATCH 09/44] ASoC: codecs: arizona: " Kuninori Morimoto
2026-08-04 0:41 ` [PATCH 10/44] ASoC: codecs: cpcap: " Kuninori Morimoto
2026-08-04 0:41 ` [PATCH 11/44] ASoC: codecs: cros_ec_codec: " Kuninori Morimoto
2026-08-04 3:04 ` Tzung-Bi Shih
2026-08-04 0:41 ` [PATCH 12/44] ASoC: codecs: cs35l*: " Kuninori Morimoto
2026-08-04 17:30 ` Mark Brown
2026-08-04 0:41 ` [PATCH 13/44] ASoC: codecs: cs42*: " Kuninori Morimoto
2026-08-04 17:32 ` Mark Brown
2026-08-04 0:41 ` [PATCH 14/44] ASoC: codecs: cs5*: " Kuninori Morimoto
2026-08-04 0:41 ` [PATCH 15/44] ASoC: codecs: cx2072x: " Kuninori Morimoto
2026-08-04 0:41 ` [PATCH 16/44] ASoC: codecs: da*: " Kuninori Morimoto
2026-08-04 0:41 ` [PATCH 17/44] ASoC: codecs: es*: " Kuninori Morimoto
2026-08-04 0:42 ` [PATCH 18/44] ASoC: codecs: inno_rk3036: " Kuninori Morimoto
2026-08-04 0:42 ` [PATCH 19/44] ASoC: codecs: isabelle: " Kuninori Morimoto
2026-08-04 0:42 ` [PATCH 20/44] ASoC: codecs: lm49453: " Kuninori Morimoto
2026-08-04 0:42 ` [PATCH 21/44] ASoC: codecs: lochnagar-sc: " Kuninori Morimoto
2026-08-04 0:42 ` [PATCH 22/44] ASoC: codecs: madera: " Kuninori Morimoto
2026-08-04 0:42 ` [PATCH 23/44] ASoC: codecs: max*: " Kuninori Morimoto
2026-08-04 17:37 ` Mark Brown
2026-08-04 0:42 ` [PATCH 24/44] ASoC: codecs: mc13783: " Kuninori Morimoto
2026-08-04 0:42 ` [PATCH 25/44] ASoC: codecs: ml26124: " Kuninori Morimoto
2026-08-04 0:42 ` [PATCH 26/44] ASoC: codecs: nau*: " Kuninori Morimoto
2026-08-04 0:42 ` [PATCH 27/44] ASoC: codecs: ntp8*: " Kuninori Morimoto
2026-08-04 0:42 ` [PATCH 28/44] ASoC: codecs: rk33*: " Kuninori Morimoto
2026-08-04 0:43 ` [PATCH 29/44] ASoC: codecs: rtq912*: " Kuninori Morimoto
2026-08-04 0:43 ` [PATCH 30/44] ASoC: codecs: rt*: " Kuninori Morimoto
2026-08-04 17:39 ` Mark Brown
2026-08-04 0:43 ` [PATCH 31/44] ASoC: codecs: sgtl5000: " Kuninori Morimoto
2026-08-04 0:43 ` [PATCH 32/44] ASoC: codecs: si476x: " Kuninori Morimoto
2026-08-04 0:43 ` [PATCH 33/44] ASoC: codecs: sma130*: " Kuninori Morimoto
2026-08-04 0:43 ` [PATCH 34/44] ASoC: codecs: src4xxx: " Kuninori Morimoto
2026-08-04 0:43 ` [PATCH 35/44] ASoC: codecs: ssm*: " Kuninori Morimoto
2026-08-04 0:43 ` [PATCH 36/44] ASoC: codecs: sta*: " Kuninori Morimoto
2026-08-04 0:43 ` [PATCH 37/44] ASoC: codecs: tas*: " Kuninori Morimoto
2026-08-04 0:43 ` [PATCH 38/44] ASoC: codecs: tfa9879: " Kuninori Morimoto
2026-08-04 0:43 ` [PATCH 39/44] ASoC: codecs: tlv320*: " Kuninori Morimoto
2026-08-04 0:43 ` [PATCH 40/44] ASoC: codecs: tscs454: " Kuninori Morimoto
2026-08-04 0:44 ` [PATCH 41/44] ASoC: codecs: twl4030: " Kuninori Morimoto
2026-08-04 0:44 ` [PATCH 42/44] ASoC: codecs: uda13*: " Kuninori Morimoto
2026-08-04 0:44 ` [PATCH 43/44] ASoC: codecs: wm*: " Kuninori Morimoto
2026-08-04 17:40 ` Mark Brown
2026-08-04 0:44 ` [PATCH 44/44] ASoC: codecs: zl38060: " Kuninori Morimoto
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox