[alsa-devel] [PATCH 2/4] soc-dai: add bitfields for hardware I2S formats

Mark Brown broonie at sirena.org.uk
Wed Mar 4 23:30:58 CET 2009

On Wed, Mar 04, 2009 at 09:16:58PM +0100, Daniel Mack wrote:
> This patch adds bitfields for I2S serial formats that differ from the
> amount of data actually sent on the line. Some codecs (namely the
> cs4270) require 64 sysclks being sent during each frame period, even
> though the number of acutal data bits might be less.

Hrm.  This is normally handled via the clock divider interface - it's
often much more straightforward to work with when dealing with devices
with very flexible clocking, especially if there are more than two
devices on the link.  Have you considered handling this through that,
perhaps through adding a virtual thing to configure (eg, a
PXA_SSP_FRAME_CLOCKS)?  Normally this would be a network mode but it
seems clear that that has some issues on this hardware and an
alternative solution is required.

The other downside of this approach is that it makes all existing
drivers theoretically instabuggy in that they don't reject invalid
configurations, although that's not such a big issue since it really
only makes life easier when writing board drivers.

I guess cs4270.c ought to be enforcing this if it's added...

> +#define SND_SOC_DAIFMT_FF_SAMPLE	(0 << 16)
> +#define SND_SOC_DAIFMT_FF_I2S_16	(1 << 16)
> +#define SND_SOC_DAIFMT_FF_I2S_32	(2 << 16)

FF_SAMPLE should probably be FF_UNSPEC or something to preserve the
existing semantics.

FF_I2S should probably be something else since something might need this
for non-I2S devices - _BIT, perhaps?

More information about the Alsa-devel mailing list