ALSA SoC 層概覽

ALSA 片上系統 (ASoC) 層的總體專案目標是為嵌入式片上系統處理器(例如 pxa2xx、au1x00、iMX 等)和行動式音訊編解碼器提供更好的 ALSA 支援。 在 ASoC 子系統之前,核心中對 SoC 音訊有一些支援,但它有一些限制:-

  • 編解碼器驅動程式通常與底層 SoC CPU 緊密耦合。 這並不理想,並且會導致程式碼重複 - 例如,Linux 為 4 個不同的 SoC 平臺提供了不同的 wm8731 驅動程式。

  • 沒有標準方法來發出使用者啟動的音訊事件訊號(例如,耳機/麥克風插入、插入事件後檢測耳機/麥克風)。 這些是行動式裝置上非常常見的事件,並且通常需要特定於機器的程式碼才能在發生此類事件後重新路由音訊、啟用放大器等。

  • 驅動程式傾向於在播放(或錄製)音訊時啟動整個編解碼器。 這對於 PC 來說很好,但往往會在行動式裝置上浪費大量電量。 也沒有透過更改編解碼器過取樣率、偏置電流等來節省電量的支援。

ASoC 設計

ASoC 層旨在解決這些問題並提供以下功能:-

  • 編解碼器獨立性。 允許在其他平臺和機器上重複使用編解碼器驅動程式。

  • 編解碼器和 SoC 之間輕鬆的 I2S/PCM 音訊介面設定。 每個 SoC 介面和編解碼器都向核心註冊其音訊介面功能,並在知道應用程式硬體引數時隨後進行匹配和配置。

  • 動態音訊電源管理 (DAPM)。 DAPM 始終自動將編解碼器設定為其最小功率狀態。 這包括根據內部編解碼器音訊路由和任何活動流啟動/關閉內部電源塊。

  • 消除爆音和咔噠聲。 可以透過以正確的順序啟動/關閉編解碼器電源(包括使用數字靜音)來減少爆音和咔噠聲。 ASoC 會在需要更改電源狀態時向編解碼器發出訊號。

  • 特定於機器的控制元件:允許機器向音效卡新增控制元件(例如,揚聲器放大器的音量控制)。

為了實現所有這些,ASoC 基本上將嵌入式音訊系統拆分為多個可重用的元件驅動程式:-

  • 編解碼器類驅動程式:編解碼器類驅動程式是獨立於平臺的,包含音訊控制元件、音訊介面功能、編解碼器 DAPM 定義和編解碼器 IO 功能。 如果需要,此類會擴充套件到 BT、FM 和 MODEM IC。 編解碼器類驅動程式應該是可以在任何架構和機器上執行的通用程式碼。

  • 平臺類驅動程式:平臺類驅動程式包括音訊 DMA 引擎驅動程式、數字音訊介面 (DAI) 驅動程式(例如 I2S、AC97、PCM)以及該平臺的任何音訊 DSP 驅動程式。

  • 機器類驅動程式:機器驅動程式類充當粘合劑,用於描述和繫結其他元件驅動程式,以形成 ALSA“音效卡裝置”。 它處理任何特定於機器的控制元件和機器級別的音訊事件(例如,在播放開始時開啟放大器)。