ASoC的结构及嵌入到Linux音频框架
ALSA片上系统(ASoC)层的总体项目目标是为嵌入式片上系统处理器(如pxa2xx、au1x00、iMX等)和便携式音频编解码器提供更好的ALSA支持。在ASoC子系统之前,内核中对SoC音频有一些支持,但它有一些局限性:
->编解码器驱动程序通常与底层SoC CPU紧密耦合,编解码器和CPU代码之间的强耦合。这并不理想,并导致代码重复——例如,Linux为4个不同的SoC平台提供了不同的wm8731驱动程序。导致移植和代码复制困难。
->没有标准的方法来向用户发起的音频事件发出信号(例如,耳机/麦克风插入、插入事件后的耳机/麦克风检测)。这些是便携式设备上非常常见的事件,通常需要机器特定的代码来在此类事件之后重新路由音频、启用放大器等。在移动场景中,用户的音频相关行为是频繁的,因此需要一种特殊的机制。
->在播放(或录制)音频时,驱动程序倾向于为整个编解码器通电。这对个人电脑来说很好,但往往会在便携式设备上浪费大量电源。也不支持通过改变编解码器过采样率、偏置电流等来节省功率。
ASoC层设计旨在解决这些问题,并提供以下功能:
->CODEC的独立性。允许在其他平台和机器上重复使用codec编解码器驱动程序。
->codec编解码器和SoC之间轻松设置I2S/PCM音频接口。每个SoC接口和编解码器都向内核注册其音频接口能力capabilities,然后在已知应用硬件参数时进行匹配和配置。<