alsa音效卡驅動移植
阿新 • • 發佈:2019-02-01
1 配置核心支援UDA1341: /* 下面是需要配置的巨集,後面函式的編譯取決這些巨集 */
CONFIG_SND_S3C24XX_I2S // s3c24xx-i2s.c
CONFIG_SND_SOC_SAMSUNG // dma.c
CONFIG_SND_SOC_UDA134X // uda134x.c
CONFIG_SND_SOC_SAMSUNG_S3C24XX_UDA134X // s3c24xx_uda134x.c
CONFIG_S3C24XX_DMA
-> Sound card support
-> Advanced Linux Sound Architecture
-> ALSA for SoC audio support
<*> ASoC support for Samsung // CONFIG_SND_SOC_SAMSUNG
-> System Type
[*] S3C2410 DMA support
2 修改程式碼
linux-3.4.2\arch\arm\mach-s3c24xx\mach-smdk2440.c 新增自己的platform_device,
參考linux-3.4.2\arch\arm\mach-s3c24xx\mach-mini2440.c有些只需要新增&s3c_device_iis,就行,因為這個結構體是被定義在linux-3.4.2\arch\arm\plat-samsung\Devs.c
有些定義在自己單板相關的目錄,需要手動把這些構體複製過來。
2.1. 修改mach-smdk2440.c 新增"s3c24xx_uda134x"平臺裝置
#include <sound/s3c24xx_uda134x.h>
/* AUDIO */
.l3_mode = S3C2410_GPB(2),
.l3_data = S3C2410_GPB(3),
.model = UDA134X_UDA1341
};
static struct platform_device mini2440_audio = {
.name= "s3c24xx_uda134x",
.id= 0,
.dev= {
.platform_data= &smdk2440_audio_pins,
},
};
在smdk2440_devices中新增&mini2440_audio,
2.2. 修改mach-smdk2440.c 新增"s3c24xx-iis"平臺裝置在smdk2440_devices中新增&s3c_device_iis, /* 如果已經有了就不用新增 */
2.3. 修改mach-smdk2440.c 新增"samsung-audio"平臺裝置
在smdk2440_devices中新增&samsung_asoc_dma,
2.4. 修改mach-smdk2440.c 新增"uda134x-codec"平臺裝置
static struct platform_device uda1340_codec = {
.name = "uda134x-codec",
.id = -1,
};
在smdk2440_devices中新增&uda1340_codec,
改為
pos += prtd->dma_period*limit;
移植應用程式,參考這篇文章:http://blog.csdn.net/qq_21792169/article/details/51065786
alsa-lib安裝,一層封裝庫。alsa-util應用程式使用alsa-lib庫
1.先看看amixer支援哪些命令,大概有哪些功能
# amixer –help
2.再看看當前你的音訊系統(不同的音訊驅動對應不同的內容和操作介面)提供了那些供你使用的介面去操作
關於驅動裡面已經提供了多少介面可以去操作,可以用命令:
amixer contents
檢視,比如:
# amixer controls
# amixer cget numid=5,iface=MIXER,name=’PCM Volume’
# amixer cset numid=5,iface=MIXER,name=’PCM Volume’ 25
amixer cget controls中所輸出的某個引數
amixer cset controls中所輸出的某個引數 具體的值(比如,0,1,On,Off等)
CONFIG_SND_S3C24XX_I2S // s3c24xx-i2s.c
CONFIG_SND_SOC_SAMSUNG // dma.c
CONFIG_SND_SOC_UDA134X // uda134x.c
CONFIG_SND_SOC_SAMSUNG_S3C24XX_UDA134X // s3c24xx_uda134x.c
CONFIG_S3C24XX_DMA
make menuconfig
-> Device Drivers-> Sound card support
-> Advanced Linux Sound Architecture
-> ALSA for SoC audio support
<*> ASoC support for Samsung // CONFIG_SND_SOC_SAMSUNG
<*> SoC I2S Audio support UDA134X wired to a S3C24XX
/* ONFIG_SND_SOC_SAMSUNG_S3C24XX_UDA134X // s3c24xx_uda134x.c */
-> System Type
[*] S3C2410 DMA support
2 修改程式碼
linux-3.4.2\arch\arm\mach-s3c24xx\mach-smdk2440.c 新增自己的platform_device,
參考linux-3.4.2\arch\arm\mach-s3c24xx\mach-mini2440.c有些只需要新增&s3c_device_iis,就行,因為這個結構體是被定義在linux-3.4.2\arch\arm\plat-samsung\Devs.c
有些定義在自己單板相關的目錄,需要手動把這些構體複製過來。
2.1. 修改mach-smdk2440.c 新增"s3c24xx_uda134x"平臺裝置
#include <sound/s3c24xx_uda134x.h>
/* AUDIO */
static struct s3c24xx_uda134x_platform_data smdk2440_audio_pins = {
.l3_clk = S3C2410_GPB(4),.l3_mode = S3C2410_GPB(2),
.l3_data = S3C2410_GPB(3),
.model = UDA134X_UDA1341
};
static struct platform_device mini2440_audio = {
.name= "s3c24xx_uda134x",
.id= 0,
.dev= {
.platform_data= &smdk2440_audio_pins,
},
};
在smdk2440_devices中新增&mini2440_audio,
2.2. 修改mach-smdk2440.c 新增"s3c24xx-iis"平臺裝置在smdk2440_devices中新增&s3c_device_iis, /* 如果已經有了就不用新增 */
2.3. 修改mach-smdk2440.c 新增"samsung-audio"平臺裝置
在smdk2440_devices中新增&samsung_asoc_dma,
2.4. 修改mach-smdk2440.c 新增"uda134x-codec"平臺裝置
static struct platform_device uda1340_codec = {
.name = "uda134x-codec",
.id = -1,
};
在smdk2440_devices中新增&uda1340_codec,
下面這個BUG是測試應用程式的時候才發現的,執行時候dma讀取資料速度非常慢,出現聲音卡頓現象,檢視原始碼發現問題所在。
2.5 修改bug: sound\soc\samsung\dma.c
pos += prtd->dma_period;改為
pos += prtd->dma_period*limit;
移植應用程式,參考這篇文章:http://blog.csdn.net/qq_21792169/article/details/51065786
alsa-lib安裝,一層封裝庫。alsa-util應用程式使用alsa-lib庫
1.先看看amixer支援哪些命令,大概有哪些功能
# amixer –help
2.再看看當前你的音訊系統(不同的音訊驅動對應不同的內容和操作介面)提供了那些供你使用的介面去操作
關於驅動裡面已經提供了多少介面可以去操作,可以用命令:
amixer contents
檢視,比如:
# amixer controls
# amixer cget numid=5,iface=MIXER,name=’PCM Volume’
# amixer cset numid=5,iface=MIXER,name=’PCM Volume’ 25
amixer cget controls中所輸出的某個引數
amixer cset controls中所輸出的某個引數 具體的值(比如,0,1,On,Off等)