Re: [RFC] ASoC: soc-core: proposal to remove num_auto_selectable_formats from snd_soc_dai_ops

From: Kuninori Morimoto

Date: Fri Oct 31 2025 - 02:58:28 EST



Hi HariKrishna

Thank you for suggestion

> Iʼd like to propose a small cleanup and simplification in the
> snd_soc_dai_ops structure by removing the
> "num_auto_selectable_formats" parameter.

Do you mean like this ?

struct snd_soc_dai_ops {
...
const u64 *auto_selectable_formats;
- int num_auto_selectable_formats;
...
};

> Currently,snd_soc_dai_ops includes the "num_auto_selectable_formats"
> field to indicate the number of entries in the "auto_selectable_formats"
> array.However, this count can be derived programmatically using the
> ARRAY_SIZE() macro wherever needed.

If my understanding was correct, unfortunately we can't do it.

We can use ARRAY_SIZE() in each driver, because we can access to raw array.
But can't use it on ASoC framework, becase auto_selectable_formats is just
a pointer. see how ARRAY_SIZE() is defined.

--- driver ---
my_formats[] = {
[0] = SND_SOC_POSSIBLE_DAIFMT_xxx | SND_SOC_POSSIBLE_DAIFMT_xxx ...,
[1] = SND_SOC_POSSIBLE_DAIFMT_xxx | SND_SOC_POSSIBLE_DAIFMT_xxx ...,
};

// We can use ARRAY_SIZE() in driver, because we know raw array.
my_dai_ops = {
...
.auto_selectable_formats = my_formats,
=> .num_auto_selectable_formats = ARRAY_SIZE(my_formats),
};

--- soc-xxx.c ---
// it will be error, because we don't know its size
=> int num = ARRAY_SIZE(ops->auto_selectable_formats);

Or do you mean create new macro, like this ?

#define ASOC_SELECT_FORMATS(array)\
.auto_selectable_formats = array,
.num_auto_selectable_formats = ARRAY_SIZE(array)

my_ops = {
...
- .auto_selectable_formats = my_formats,
- .num_auto_selectable_formats = ARRAY_SIZE(my_formats),
+ ASOC_SELECT_FORMATS(my_formats),
};

Or am I misunderstanding your suggestion ?


Thank you for your help !!

Best regards
---
Kuninori Morimoto