Linux驱动的开发与移值——为Tiny210加入AC97驱动Wm9713
上一篇文章《Linux驅動的開發與移值——分析Tiny210的聲卡驅動模塊》地址:http://blog.csdn.net/koy0755/article/details/7341704
提到了Tiny210開發板并沒有提供WM8960的驅動源代碼,我接下來有兩個事情可以做
一、編寫WM8960的源代碼。
二、嘗試給TINY210增加AC97芯片WM9713的代碼,讓TINY210可以與TINY6410的底析兼容(我把內核做好后才發現了這是不可能兼容的,文章最后會說明原因)。
因為第二點可以無需為內核增加代碼,所以我在這里就先發布這個過程序了。
 
準備工作——了解內核的文件組織
Tiny210配套提供的內核中,其實已經包含了所有Ac97聲音驅動的內容,這些內容在如下文件中:
 1、/arch/arm/mach-s5pv210/dev-audio.c
 2、/arch/arm/mach-s5pv210/mach-mini210.c
 3、/sound/soc/s3c24xx/s3c-ac97.c
 4、/sound/soc/codec/wm9713.c
 5、/sound/soc/s5pv2xx/s3c-dma.c
 6、/sound/soc/s3c24xx/smdk_wm9713.c
 
 
 我給文件編了號以方便說明它們的作用和重點:
 1號文件,定義著聲卡所需的所有基本資源,例如:
 ? 1.1 static int s5pv210_ac97_cfg_gpio()這個函數用來配置AC97的引腳。
 ? 1.2 struct resource s5pv210_ac97_resource[]這個變量用來定義AC97要用到的內存、DMA等資源。
 ? 1.3 struct platform_device s5pv210_device_ac97這個變量定義了一個名為"s3c-ac97"的平臺設備,用來加載引導ac97的平臺驅動。
 ? 當然,這文件里面還有一些I2S聲間設備的定義,這些跟I2S有關,我這里不講它。
 
 2號文件,定義了整個開發板最重要的平臺設備。
 ? 2.1 static struct platform_device *mini210_devices[]這個變量把整個開發板用到的平臺設都都定義在這個數組里了。
 ? 2.1.1我們留意一下大概1573行的位置有這樣的內容:
 
 #ifdef CONFIG_SND_S3C_SOC_AC97
 ? ? &s5pv210_device_ac97,
 #endif
 
 ? 也就是說在編譯內核時,如果聲明了SND_S3C_SOC_AC97宏,內核就會增加這個平臺設備。
 ? 2.2static void __init mini210_machine_init()這個函數里調用了platform_add_devices把平臺設備加載到內核里。
 
 
 3號文件是ac97設備的驅動。
 ? 2.1第527行定義了一個平臺驅動:struct platform_driver s3c_ac97_driver。它的名稱是“s3c-ac97”。這跟我們的1號文件定義的平臺設備的中稱對應,因此內核會用這個驅動程序來驅動1號文件定義的平臺設備。
 
 
 4號文件是wm9713相關的文件,在/sound/soc/codec/這個目錄中針對不同的芯片有很多專門的codec,這些文件可以直接使用,與平臺無關。
 
 
 5號文件是dam相關的操作,這里我們只關注聲卡驅動可以先不管它。
 
 
 6號文件就是把3、4號文個把組織成一個聲卡設備,并把聲卡作為一個名為"soc-audio"的平臺設備添加到內核中。
 ? 6.1第56行,定義了平臺使用的聲音設備
 ? 6.2在70行,的int __init smdk_init()函數里把聲音設備增加到系統。
 ??
 具體操作步驟
 基本的思路清晰了,下面我們就開始通過簡單地修改幾個文個件,內核中本來就包含了
 /arch/arm/mach-s5pv210/dev-audio.c
 /arch/arm/mach-s5pv210/mach-mini210.c
 /sound/soc/s5pv2xx/s3c-dma.c
 
 
 為了用最簡單的方法加入其它文件,我們還要做以下工作:
 1、修改/sound/soc/s5pv2xx/Kconfig文件,在最后面加入以下內容:
 config SND_S5PV2XX_SOC_WM9713
 ? tristate "SoC AC97 Audio support for WM9713 on MINI210"
 ? depends on SND_S5PV2XX_SOC
 ? select SND_S3C_SOC_AC97
 ? select SND_SOC_WM9713
 ? help
 ? ? Say Y if you want to add support for SoC audio on the MINI210.
 
 
 我們看一看上面提到的2號文件的說明,所以一定要增加“SND_S3C_SOC_AC97”這個宏定義,上面這個步驟能給內核增加
 /sound/soc/codec/wm9713.c
 
 
 2、修改/sound/soc/s5pv2xx/MakeFile,在最后面加入以下內容:
 obj-$(CONFIG_SND_S3C_SOC_AC97)+= ../s3c24xx/s3c-ac97.o
 obj-$(CONFIG_SND_S5PV2XX_SOC_WM9713)+=../s3c24xx/smdk_wm9713.o
 
 
 上面這個步驟能給內核增加
 /sound/soc/s3c24xx/s3c-ac97.c
 /sound/soc/s3c24xx/smdk_wm9713.c
 
 
 3、重新配置內核。
 在內核配置界面里,進入Device Drivers --->Sound card support --->ALSA for SoC audio support --->
 如下圖所示:
 
 
 把SoC I2S Audio ...WM8960...的選項去掉,然后改用SoCAC97 Audio support for WM9713就可以了.
 
 
 4、編譯內核,大功告成。
 
 
 我們的內核需然做好了,但是我后來才發現tiny210的核心板的ac97功能與tiny6410并不兼容,因此還要對硬件進行修改。
 
1、要把TINY210核心原中,P2針座的的29-31針與6410的底板斷來,因為TINY210的這些引腳是I2S0的功能。我是用另一個針座把這幾個腳拔掉,然后接到核心板上,然后再放到底板上的。如下圖所示:
 
 
2、TINY210把AC97的引腳放到了核心板正面的CON10排線座上了,我們要把這幾個引腳焊接到底板上對應的AC97引腳,如下圖所示。
 
 
=======================================================================================
 
 
至此,可以把內核燒到開發板,啟動后就可以通過WM9713播放聲音了
總結
以上是生活随笔為你收集整理的Linux驱动的开发与移值——为Tiny210加入AC97驱动Wm9713的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: CSP-S 2019 游记【完结】
 - 下一篇: emule积分备份