Hello Charles,
In the [PATCH 00/38] of this patch set, you write:
- Devices behind non-audio buses, SPI just moves bits and doesn't
really define an endian for audio data on the bus. Thus it seems the CODEC probably can care about the endian. The only devices that fall into this group (mostly for AoV) are: rt5514-spi.c, rt5677-spi.c, cros_ec_codec.c (only the AoV).
From my experience with some PCM codecs by TI, they can not care about the
endianness. For example, in driver [1], if I allow BE format as well, and configure
the sound card to use BE, it will not work. I have no sound with BE.
In these cases, the codec HW supports *only* LE. That's why their `snd_soc_dai_driver`
structures provide only LE in the `format` field.
If such drivers specify `endianness = 1`, then `soc-core` will extend their supported
formats with BE counter-parts, see [2]. AFAIU, it will have the same effect, as if the
drivers themselves provided their formats in both LE | BE.
I don't think adding `endianness = 1` to such codecs will work as expected.
Unfortunately, I don't have an easy access to HW today, to confirm or disprove
this understanding.
Best regards,
Kirill
---
[1] https://elixir.bootlin.com/linux/latest/source/sound/soc/codecs/pcm3060.c#L1...
[2] https://elixir.bootlin.com/linux/latest/source/sound/soc/soc-core.c#L2540
On 5/4/22 7:08 PM, Charles Keepax wrote:
Add a comment to make the purpose of the endianness flag on the snd_soc_component structure more clear.
Signed-off-by: Charles Keepax ckeepax@opensource.cirrus.com
include/sound/soc-component.h | 9 +++++++++ 1 file changed, 9 insertions(+)
diff --git a/include/sound/soc-component.h b/include/sound/soc-component.h index 766dc6f009c0b..5a764c3099d3e 100644 --- a/include/sound/soc-component.h +++ b/include/sound/soc-component.h @@ -169,6 +169,15 @@ struct snd_soc_component_driver { unsigned int idle_bias_on:1; unsigned int suspend_bias_off:1; unsigned int use_pmdown_time:1; /* care pmdown_time at stop */
- /*
* Indicates that the component does not care about the endianness of
* PCM audio data and the core will ensure that both LE and BE variants
* of each used format are present. Typically this is because the
* component sits behind a bus that abstracts away the endian of the
* original data, ie. one for which the transmission endian is defined
* (I2S/SLIMbus/SoundWire), or the concept of endian doesn't exist (PDM,
* analogue).
unsigned int endianness:1; unsigned int non_legacy_dai_naming:1;*/