【问题标题】:ASoC Drivers: Which files are platform, machine, and codec drivers? [closed]ASoC 驱动程序:哪些文件是平台、机器和编解码器驱动程序? [关闭]
【发布时间】:2013-12-05 07:44:53
【问题描述】:

在浏览 Linux ASoC 文件时,哪些文件属于以下类别:

  • 平台驱动程序:? (在 sound/soc/ 的某个地方?)
  • 机器驱动程序:? (在 sound/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)。

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

另外,这些作品的出发点在哪里? (当我找到它们所在的文件时,可能会自我解释)

【问题讨论】:

  • 我知道 StackOverflow 中不允许这样的问题。但是这样的问题及其详细答案对于了解新系统或在一段时间后刷新您的系统知识非常有用。 - 我认为stackoverflow允许这样的问题

标签: linux audio linux-kernel alsa


【解决方案1】:

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

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

Codec 类驱动程序必须提供 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_name 和 codec_dai_name 用于提及它将链接的平台和编解码器驱动程序

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    参考这个链接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

    【讨论】:

      【解决方案3】:

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

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

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

      # AT91 平台支持 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 机器支持 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

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

      【讨论】:

      • 您从哪里得知这些信息?到目前为止,我只是通过将pr_info语句放在源代码中来学习,但我觉得应该有更好的方法。
      猜你喜欢
      • 2011-04-22
      • 1970-01-01
      • 1970-01-01
      • 2010-12-22
      • 2012-12-05
      • 1970-01-01
      • 2019-04-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多