59 lines
1.7 KiB
Plaintext
59 lines
1.7 KiB
Plaintext
ASoC Platform Driver
|
|
====================
|
|
|
|
An ASoC platform driver can be divided into audio DMA and SoC DAI configuration
|
|
and control. The platform drivers only target the SoC CPU and must have no board
|
|
specific code.
|
|
|
|
Audio DMA
|
|
=========
|
|
|
|
The platform DMA driver optionally supports the following ALSA operations:-
|
|
|
|
/* SoC audio ops */
|
|
struct snd_soc_ops {
|
|
int (*startup)(struct snd_pcm_substream *);
|
|
void (*shutdown)(struct snd_pcm_substream *);
|
|
int (*hw_params)(struct snd_pcm_substream *, struct snd_pcm_hw_params *);
|
|
int (*hw_free)(struct snd_pcm_substream *);
|
|
int (*prepare)(struct snd_pcm_substream *);
|
|
int (*trigger)(struct snd_pcm_substream *, int);
|
|
};
|
|
|
|
The platform driver exports its DMA functionality via struct snd_soc_platform:-
|
|
|
|
struct snd_soc_platform {
|
|
char *name;
|
|
|
|
int (*probe)(struct platform_device *pdev);
|
|
int (*remove)(struct platform_device *pdev);
|
|
int (*suspend)(struct platform_device *pdev, struct snd_soc_cpu_dai *cpu_dai);
|
|
int (*resume)(struct platform_device *pdev, struct snd_soc_cpu_dai *cpu_dai);
|
|
|
|
/* pcm creation and destruction */
|
|
int (*pcm_new)(struct snd_card *, struct snd_soc_codec_dai *, struct snd_pcm *);
|
|
void (*pcm_free)(struct snd_pcm *);
|
|
|
|
/* platform stream ops */
|
|
struct snd_pcm_ops *pcm_ops;
|
|
};
|
|
|
|
Please refer to the ALSA driver documentation for details of audio DMA.
|
|
http://www.alsa-project.org/~iwai/writing-an-alsa-driver/c436.htm
|
|
|
|
An example DMA driver is soc/pxa/pxa2xx-pcm.c
|
|
|
|
|
|
SoC DAI Drivers
|
|
===============
|
|
|
|
Each SoC DAI driver must provide the following features:-
|
|
|
|
1) Digital audio interface (DAI) description
|
|
2) Digital audio interface configuration
|
|
3) PCM's description
|
|
4) SYSCLK configuration
|
|
5) Suspend and resume (optional)
|
|
|
|
Please see codec.txt for a description of items 1 - 4.
|