[alsa-devel] Questions about ASoC driver implementation

Lars-Peter Clausen lars at metafoo.de
Wed Aug 12 17:14:57 CEST 2015


Hi,


On 08/12/2015 04:01 PM, Matt Campbell wrote:
> Hi All,
> 
> I'm diving into adding support for a new codec (AK4621) targeting IMX6 SoC
> and as this is my first dive into ALSA driver code (and first deep dive in
> to Linux driver development) I've come up with a few questions. I've done a
> lot of digging in available documentation as well as reading a lot of code,
> but some things remain unclear.
> 
> First, I'm a little confused with what appears to be inconsistent
> terminology. The SoC overview.txt lists three types of component drivers:
> codec, platform and machine. However, in the code there are four types of
> snd_soc_register_* functions: card, platform, codec and component. From
> looking at the underlying structs and how these are used in existing code
> this is my best guess but please correct me if I'm wrong:
> 
> codec -> snd_soc_register_codec
> machine -> snd_soc_register_card
> platform -> snd_soc_register_component and snd_soc_register_platform? (not
> sure about this, from what I can gather at some point there was an API
> switch to using component rather than platforms for the DAIs)

There used to be a lot of similarity between platforms and CODECs and some
code duplication. snd_soc_component was introduced is a new common base
class for both CODEC and platform. It can also be used standalone if none of
the platform or CODEC specific functionality is need.

> 
> My second question is around adding support for an amplifier external to
> the codec. The amplifier is a PGA controlled over SPI. One possible way I
> can see to adding this is to create a SPI based codec driver for the PGA
> that exposes an ALSA control for the gain level and give it a dummy DAI
> then add it to the card as an aux_dev. This feels a little kludgy as the
> PGA isn't a perfect fit for the codec class.

You don't need to register a DAI with your CODEC it will work just fine
without. Although in this case you don't need any CODEC specific features so
the best is to just go with snd_soc_component. There are a few examples of
snd_soc_component based drivers for external analog amplifiers, e.g. max9768
or lm4857.

- Lars


More information about the Alsa-devel mailing list