1. 程式人生 > >linux音訊子系統之alsa asoc層

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“音效卡裝置”的粘合劑。它可以處理任何機器特定的控制和機器級音訊事件(例如,在播放開始時開啟放大器)。