ASoC 平台驱动¶
ASoC 平台驱动类可以分为音频 DMA 驱动、SoC DAI 驱动和 DSP 驱动。平台驱动程序仅针对 SoC CPU,不能有任何特定于板的代码。
音频 DMA¶
平台 DMA 驱动可以选择性地支持以下 ALSA 操作:
/* 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);
};
平台驱动通过 struct snd_soc_component_driver 导出其 DMA 功能:
struct snd_soc_component_driver {
const char *name;
...
int (*probe)(struct snd_soc_component *);
void (*remove)(struct snd_soc_component *);
int (*suspend)(struct snd_soc_component *);
int (*resume)(struct snd_soc_component *);
/* pcm creation and destruction */
int (*pcm_new)(struct snd_soc_pcm_runtime *);
void (*pcm_free)(struct snd_pcm *);
...
const struct snd_pcm_ops *ops;
const struct snd_compr_ops *compr_ops;
...
};
有关音频 DMA 的详细信息,请参阅 ALSA 驱动文档。https://linuxkernel.org.cn/doc/html/latest/sound/kernel-api/writing-an-alsa-driver.html
一个 DMA 驱动的示例是 soc/pxa/pxa2xx-pcm.c
SoC DAI 驱动¶
每个 SoC DAI 驱动必须提供以下功能:
数字音频接口 (DAI) 描述
数字音频接口配置
PCM 的描述
SYSCLK 配置
挂起和恢复(可选)
有关第 1-4 项的描述,请参阅ASoC 编解码器类驱动。
SoC DSP 驱动¶
每个 SoC DSP 驱动通常提供以下功能:
DAPM 图
混音器控制
到/从 DSP 缓冲区的 DMA IO(如果适用)
DSP 前端 (FE) PCM 设备的定义。
有关第 4 项的描述,请参阅 DPCM.txt。