summaryrefslogtreecommitdiffstats
path: root/Documentation/sound/alsa/soc/platform.txt
blob: c88df261e922c374bbe7c31c388215e058eb6d89 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
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)(snd_pcm_substream_t *);
	void (*shutdown)(snd_pcm_substream_t *);
	int (*hw_params)(snd_pcm_substream_t *, snd_pcm_hw_params_t *);
	int (*hw_free)(snd_pcm_substream_t *);
	int (*prepare)(snd_pcm_substream_t *);
	int (*trigger)(snd_pcm_substream_t *, int);
};

The platform driver exports it's DMA functionailty 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)(snd_card_t *, struct snd_soc_codec_dai *, snd_pcm_t *);
	void (*pcm_free)(snd_pcm_t *);

	/* platform stream ops */
	snd_pcm_ops_t *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.