[alsa-devel] [RFC 0/5] ASoC multi-component support : core

Liam Girdwood lrg at slimlogic.co.uk
Thu Jun 24 21:24:27 CEST 2010

ASoC is now coming up to it's 5th birthday and is beginning to show it's
age a little when it comes to supporting the next generation of smart
phones and multimedia devices with it's current single CODEC and single
DMA platform design.

Historically, ASoC is designed around an embedded sound card with a
single CODEC and a single platform DMA driver (with multiple DAIs). This
design works great for most of the current audio hardware in production,
however we are now seeing hardware designs for the next generation of
devices that can have many CODECs, DMAs, DSPs and a host of other audio
peripherals connected to the audio subsystem.

So we now need ASoC to support new audio hardware architectures with
multiple audio CODECs, DMA engines, DSPs, DAIs etc.

This patch series allows an ASoC sound card to support multiple
components (CODECs, DAI and DMA) and is the first part in a series of
work (other parts coming later in the year from Mark and I) designed to
enhance ASoC for modern mobile audio hardware.

This patch series provides the following important features:-

 1) Allow sound cards to have multiple CODECs and platform DMA controllers.
 2) Allow CODEC drivers to support more than one CODEC device.
 3) Allow all CODEC, platform DMA and DAI drivers to have platform data.

This is achieved by: -

 1) Separating the component struct driver data from the component struct device data.
 2) Making all components kernel devices.

(A side effect of this change is that we can now store all our component
private data in struct device private data (like everyone else) and
there is also now less pointer indirection for components.)

The change mainly affects only the probe() and remove() sections of
component drivers and the component enumeration section of the core. The
core also now handles setting up the CODEC data structs too (meaning
CODEC drivers dont have to do this). All component PCM, DAPM and
Kcontrol operations remain unchanged.

I've so far tested the new multi-component enumeration on the TI OMAP
and Marvell PXA platforms with AC97, MFD and I2C based CODECs. I do
however need ASoC platform maintainers to test on their systems (as I
only have a subset of the hardware). Some ASOC platforms do need a
little extra checking/fixups too :- 

 o Samsung platform: required the most work to untangle the components.
 o i.MX platform: required work to de-couple components.
 o Injenic J4740 platform: I do not have a toolchain to even build this
arch so it will also need someone to build it too.

If you find your platform does not work then the most likely reason is
that I'm missing a platform_device registration for your CODEC, DAI,
etc. device in your arch board.c or device.c files. Please let me know
or send a patch :)

All the multi-component code is in my multi-component branch here :-


This RFC post contains the changes to ASoC core only. I'll post the
multi-component CODEC and platform changes as separate RFCs in order not
to flood the list (as there are 38 patches in all). This patch series
will eventually be rebased into a single patch for upstream so we dont
break bisect. The subsequent patches for CODECs and platforms in this
series can be found in the git branch above.

The intention is to upstream this for 2.6.36


Freelance Developer, SlimLogic Ltd
ASoC and Voltage Regulator Maintainer.

More information about the Alsa-devel mailing list