基於imx25開發板音訊驅動理解
之前在做關於音訊驅動的相關工作,學習到了一些知識,所以簡單的談一談對這方面的理解。
內容主要是基於imx255核心板,它是支援多種音訊處理晶片的。工作是配合音訊晶片SGTL5000進行的。這裡主要介紹該晶片在Linux下的驅動相關內容。我實際使用的Linux的2.6.28的核心,經過移植,可以在目標板上成功的運行了。
首先,核心編譯時候關於音訊的選項設定如下:
Device drivers > Sound card support > Advanced Linux Sound Architecture > ALSA for SoC
audio support > SoC Audio for the Freescale i.MX CPU, SoC Audio support for IMX – SGTL5000
其次,分析音訊驅動的層次結構:
這個立體聲編解碼器,是通過SSI介面,連線到CPU的。imx-ssi.c 檔案為ALSA晶片註冊CPU的數字音訊介面,並且配置片上的SSI介面。sgtl5000.c 負責註冊立體聲編解碼器和高保真的數字音訊介面的驅動程式。而直接對硬體進行的操作,也都是在sgtl5000.c 這個
檔案中的。
下面是所有SGTL5000音訊驅動相關檔案及其描述:
File Description
imx/imx-3stack-sgtl5000.c 機器層的ALSA立體聲音訊編解碼器
imx/imx-pcm.c 平臺層的ALSA立體聲音訊編解碼器
imx/imx-pcm.h PCM驅動的標頭檔案和定義相關的AUDMUX的暫存器
imx/imx-ssi.c 基於ALSA立體聲音訊編解碼器的平臺支援的數字音訊介面
imx/imx-ssi.h 平臺支援的數字音訊介面和SSI暫存器定義的標頭檔案
codecs/sgtl5000.c 音訊編解碼器層的ALSA程式碼
codecs/sgtl5000.h 音訊編解碼器的標頭檔案
對應的結構如圖所示:
接著,音訊驅動codec相關分析:
主要是codecs/sgtl5000.c和codecs/sgtl5000.h兩個檔案。
至於sgtl5000.h檔案,其中主要工作就是對晶片相關暫存器和一些暫存器的微操作進行的宣告等工作。
而sgtl5000.c檔案時對晶片硬體進行的直接控制操作。其中,主要包含了晶片的探測,作為i2c從裝置的探測,硬體初始化,ID和版本號識別,硬體暫存器控制初始化,封裝了i2c讀寫操作的sgtl5000的讀寫操作,還有sgtl5000讀寫快取的操作等。
還有值得一提的一個檔案是,/arch/arm/mach-mx25/mx25-3stack.c檔案,其中指明瞭該晶片的裝置地址,還有一些關於資料和始終的簡單初始化的工作。
最後,測試音訊:
編寫一個測試檔案,經過交叉編譯之後,載入的目標板的檔案系統中,執行該檔案播放指定的音樂檔案即可。我使用的測試檔案是針對wav格式的,只能播放wav的音樂檔案。