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