linux音訊子系統-ASoc軟體架構簡介
一.硬體架構
Machine
指某一款機器,可以是某款裝置,某款開發板,又或者是某款智慧手機,由此可以看出Machine幾乎是不可重用的,每個Machine上的硬體實現可能都不一樣,CPU不一樣,Codec不一樣,音訊的輸入、輸出裝置也不一樣,Machine為CPU、Codec、輸入輸出裝置提供了一個載體。Platform
指某一個SoC平臺,比如pxaxxx, s3cxxxx, omapxxx,imxxxxx, mdmxxxx等等,與音訊相關的通常包含該SoC中的時鐘、DMA、I2S、PCM等等,只要指定了SoC,那麼我們可以認為它會有一個對應的Platform,它只與SoC相關,與Machine無關,這樣我們就可以把Platform抽象出來,使得同一款SoC不用做任何的改動,就可以用在不同的Machine中。實際上,把Platform認為是某個SoC更好理解。Codec
編解碼器,Codec裡面包含了I2S介面、D/A、A/D、Mixer、PA(功放),通常包含多種輸入(Mic、Line-in、I2S、PCM)和多個輸出(耳機、喇叭、聽筒,Line-out),Codec和Platform一樣,是可重用的部件,同一個Codec可以被不同的Machine使用。嵌入式Codec通常通過I2C對內部的暫存器進行控制。
例項:
二.軟體架構
在軟體層面,ASoC也把嵌入式裝置的音訊系統同樣分為3大部分,Machine,Platform和Codec。
Codec驅動
ASoC中的一個重要設計原則就是要求Codec驅動是平臺無關的,它包含了一些音訊的控制元件(Controls),音訊介面,DAMP(動態音訊電源管理)的定義和某些Codec IO功能。為了保證硬體無關性,任何特定於平臺和機器的程式碼都要移到Platform和Machine驅動中。所有的Codec驅動都要提供以下特性:
Codec DAI 和 PCM的配置資訊;
Codec的IO控制方式(I2C,SPI等);
Mixer和其他的音訊控制元件;
Codec的ALSA音訊操作介面;
必要時,也可以提供以下功能:
DAPM描述資訊;
DAPM事件處理程式;
DAC數字靜音控制Platform驅動
它包含了該SoC平臺的音訊DMA和音訊介面的配置和控制(I2S,PCM,AC97等等);它也不能包含任何與板子或機器相關的程式碼。Machine驅動
Machine驅動負責處理機器特有的一些控制元件和音訊事件(例如,當播放音訊時,需要先行開啟一個放大器);單獨的Platform和Codec驅動是不能工作的,它必須由Machine驅動把它們結合在一起才能完成整個裝置的音訊處理工作。
三.資料結構關係圖