linux音频子系统之alsa asoc层

ALSA SoC层概述
ALSA片上系统(ASoC)层的总体项目目标是为嵌入式片上系统处理器(例如pxa2xx,au1x00,iMX等)和便携式音频编解码器提供更好的ALSA支持。在ASoC子系统之前,内核对SoC音频有一些支持,但它有一些限制: -

编解码器驱动程序通常与底层SoC CPU紧密耦合。这并不理想,导致代码重复 - 例如,Linux为4种不同的SoC平台提供了不同的wm8731驱动程序。
没有标准方法来指示用户发起的音频事件(例如,插入事件后的耳机/麦克风插入,耳机/麦克风检测)。这些是便携式设备上非常常见的事件,并且在这样的事件之后通常需要特定于机器的代码来重新路由音频,启用放大器等。
在播放(或录制)音频时,驱动程序倾向于为整个编解码器供电。这对于PC来说很好,但往往会浪费在便携式设备上的大量功率。通过改变编解码器过采样率,偏置电流等也不支持节省功耗。
ASoC设计
ASoC层旨在解决这些问题并提供以下功能: -

编解码器独立性。允许在其他平台和计算机上重用codec驱动程序。
在编解码器和SoC之间轻松设置I2S / PCM音频接口。每个SoC接口和编解码器都将其音频接口功能注册到内核,然后在知道应用硬件参数时进行匹配和配置。
动态音频电源管理(DAPM)。DAPM始终自动将编解码器设置为其最小功率状态。这包括根据内部编解码器音频路由和任何活动流来启动/关闭内部电源块。
弹出并单击缩小。通过以正确的顺序上/下驱动编解码器可以减少弹出和点击(包括使用数字静音)。ASoC在编码时发出信号,以便何时更改电源状态。
机器特定控制:允许机器向声卡添加控制(例如扬声器放大器的音量控制)。
为了实现这一切,ASoC基本上将嵌入式音频系统分成多个可重复使用的组件驱动程序:

Codec类驱动程序:编解码器类驱动程序独立于平台,包含音频控件,音频接口功能,编解码器DAPM定义和编解码器IO功能。如果需要,该课程可扩展至BT,FM和MODEM IC。Codec类驱动程序应该是可以在任何体系结构和机器上运行的通用代码。
平台类驱动程序:平台类驱动程序包括音频DMA引擎驱动程序,数字音频接口(DAI)驱动程序(例如I2S,AC97,PCM)以及该平台的任何音频DSP驱动程序。
机器类驱动程序:机器驱动程序类充当描述和绑定其他组件驱动程序以形成ALSA“声卡设备”的粘合剂。它可以处理任何机器特定的控制和机器级音频事件(例如,在播放开始时打开放大器)。

猜你喜欢

转载自blog.csdn.net/humanspider1/article/details/83547341