ASoC驱动程序:哪些文件是平台,机器和编解码器驱动程序?

时间:2013-11-21 01:34:41

标签: alsa

导航Linux ASoC文件时,哪些文件属于以下类别:

  • 平台驱动程序:? (某处是声音/ soc /?)
  • 机器驱动程序:? (某处是声音/ soc /?)
  • 编解码器驱动程序:sound / soc / codecs / partname.c

从内核文档:https://www.kernel.org/doc/Documentation/sound/alsa/soc/overview.txt

  

为实现这一切,ASoC基本上拆分了嵌入式音频系统   分为3个部分: -

     
      
  • 编解码器驱动程序:编解码器驱动程序与平台无关   包含音频   控件,音频接口功能,编解码器DAPM定义和编解码器IO   功能

  •   
  • 平台驱动程序:平台驱动程序包含音频DMA引擎   和音频   该平台的接口驱动程序(例如I2S,AC97,PCM)。

  •   
  • 机器驱动程序:机器驱动程序处理任何特定的机器   控制和   音频事件(例如,在播放开始时打开放大器)。

  •   

此外,每件作品的发射点在哪里? (当我找到他们所在的文件时,可能会自我解释)

3 个答案:

答案 0 :(得分:3)

编解码器驱动程序位于sound / soc / codecs /.

平台驱动程序通常位于sound / soc / 平台 /。

机器驱动程序可以位于某些特定于arch的目录中;那些用于开发板的通常位于同一目录中;例如,这是sound/soc/atmel/Makefile

# AT91 Platform Support
snd-soc-atmel-pcm-objs := atmel-pcm.o
snd-soc-atmel-pcm-pdc-objs := atmel-pcm-pdc.o
snd-soc-atmel-pcm-dma-objs := atmel-pcm-dma.o
snd-soc-atmel_ssc_dai-objs := atmel_ssc_dai.o

obj-$(CONFIG_SND_ATMEL_SOC) += snd-soc-atmel-pcm.o
obj-$(CONFIG_SND_ATMEL_SOC_PDC) += snd-soc-atmel-pcm-pdc.o
obj-$(CONFIG_SND_ATMEL_SOC_DMA) += snd-soc-atmel-pcm-dma.o
obj-$(CONFIG_SND_ATMEL_SOC_SSC) += snd-soc-atmel_ssc_dai.o

# AT91 Machine Support
snd-soc-sam9g20-wm8731-objs := sam9g20_wm8731.o
snd-atmel-soc-wm8904-objs := atmel_wm8904.o
snd-soc-sam9x5-wm8731-objs := sam9x5_wm8731.o

obj-$(CONFIG_SND_AT91_SOC_SAM9G20_WM8731) += snd-soc-sam9g20-wm8731.o
obj-$(CONFIG_SND_ATMEL_SOC_WM8904) += snd-atmel-soc-wm8904.o
obj-$(CONFIG_SND_AT91_SOC_SAM9X5_WM8731) += snd-soc-sam9x5-wm8731.o
obj-$(CONFIG_SND_AT91_SOC_AFEB9260) += snd-soc-afeb9260.o

机器驱动程序文件通常实现平台驱动程序。

答案 1 :(得分:1)

CL的答案可以作为经验法则。

但是,我认为确定哪个文件具有哪个驱动程序代码(平台,机器,编解码器)的最佳方法是通过分析驱动程序代码正在使用的结构。

编解码器类驱动程序必须为DAI提供PCM配置。因此,它必须具有struct snd_soc_dai_driver的实例。此外,还必须定义音频控件和DAPM处理程序,方法是使用struct snd_soc_codec_driver

更多信息here

平台驱动程序必须定义PCM操作。这是通过使用struct snd_pcm_ops

来完成的

机器驱动程序充当两者之间的链接。因此,它必须使用struct snd_soc_dai_link。该结构具有成员cpu_dai_namecodec_dai_name,用于提及要链接的平台和编解码器驱动程序

希望这会有所帮助。

答案 2 :(得分:0)

请参阅此链接https://01.org/linuxgraphics/gfx-docs/drm/sound/soc/index.html,它对ASOC有很好的解释

编解码器类驱动程序: 编解码器类驱动程序是独立于平台的,并且包含音频控件,音频接口功能,编解码器DAPM定义和编解码器IO功能。如果需要,此类可扩展到BT,FM和MODEM IC。编解码器类驱动程序应该是可以在任何体系结构和机器上运行的通用代码。

平台类驱动程序: 平台类驱动程序包括音频DMA引擎驱动程序,数字音频接口(DAI)驱动程序(例如I2S,AC97,PCM)以及该平台的任何音频DSP驱动程序。

机器类驱动程序: 机器驱动程序类充当将其他组件驱动程序描述并绑定在一起以形成ALSA“声卡设备”的粘合剂。它可以处理任何机器特定的控件和机器级别的音频事件(例如,在播放开始时打开一个放大器)。

您可以将此信息与源代码进行匹配,以找到相应的编解码器,平台和计算机驱动程序。

示例

编解码器驱动程序: https://elixir.bootlin.com/linux/latest/source/sound/soc/codecs/max98927.c

平台驱动程序: https://elixir.bootlin.com/linux/latest/source/sound/soc/qcom/lpass-platform.c

机器驱动程序: https://elixir.bootlin.com/linux/latest/source/sound/soc/qcom/sdm845.c