1.6.1  在初始化文件中加入 UDA1341 设备结构

 

Linux-2.6.32.2已经完美的支持UDA1341音频芯片的驱动,我们只要在arch/arm/mach-s3c2440/mach-mini2440.c 文件中注册 UDA1341 平台设备的控制端口就可以了,打开 mach-mini2440.c,添加如下内容:

//在文件首部添加头文件

#include <sound/s3c24xx_uda134x.h>

 

// LCD 平台设备后面添加 UDA1341 设备结构

static struct s3c24xx_uda134x_platform_data s3c24xx_uda134x_data = {

.l3_clk = S3C2410_GPB(4),

.l3_data = S3C2410_GPB(3),

.l3_mode = S3C2410_GPB(2),

.model = UDA134X_UDA1341,

};

 

static struct platform_device s3c24xx_uda134x = {

.name = "s3c24xx_uda134x",

.dev = {

.platform_data        = &s3c24xx_uda134x_data,

}

};

 

//注册 UDA1341 设备平台到内核中

//这些注册的结构在哪定义的??

static struct platform_device *mini2440_devices[] __initdata = {

&s3c_device_usb,

&s3c_device_rtc,

&s3c_device_lcd,

&s3c_device_wdt,

&s3c_device_i2c0,

&s3c_device_iis,

&mini2440_device_eth,

&s3c24xx_uda134x,

&s3c_device_nand,

};

这样,我们基本就添加好了  UDA1341  音频设备的驱动,接下来我们在内核中配置该驱动。


注意:其实在做完以上工作时还是不能放MP3,没有DSP节点,我后面根据

http://www.arm9home.net/read.php?tid-1481-fpage-0-toread--page-2.html

引用

No device for DAI UDA134X
No device for DAI s3c24xx-i2s


这是ALSA的警告信息,不影响uda1341驱动的。

引用

S3C24XX_UDA134X SoC Audio driver
UDA134X SoC Audio Codec
asoc: UDA134X <-> s3c24xx-i2s mapping ok
ALSA device list:
#0: S3C24XX_UDA134X (UDA134X)


这说明UDA1341 for S3C24xx的ALSA驱动已经成功加载了。需要了解的是,ALSA本身并不会生成/dev/dsp节点,那是OSS驱动的东西。
要在你的系统里使用/dev/dsp节点,你必须确保选中了ALSA的“OSS 模拟”选项。它可以通过在内核配置中的
"Sound card support" ---> "Advanced Linux Sound Architecture" --> "OSS PCM (digital audio) API"
配置。

 

1.6.2  在内核中配置 UDA1341 设备驱动

 

在内核源代码目录输入:make  menuconfig 开始配置内核,依次选择如下子菜单,找到音频驱动配置菜单:

Device Drivers    --->

<*> Sound card support    --->

按空格选中"[*]       Preclaim OSS device numbers     "

再选中"<*>       Advanced

Linux Sound Architecture    --->",并回车进入该子菜单

出现音频驱动体系结构菜单,在这里,我们选择 OSS 接口相关的配置选项,需

要注意的是,这里的 OSS 接口其实是基于 ALSA 接口创建的,因为新的内核中现在都已经改用 ALSA 设计,这里是为了和以前的软件兼容才这样做的,

再选择"<*> ALSA for SoC audio support    --->"子菜单并回车进入,在这里我们可以看到专门为  S3C24xx 系列芯片(包括  S3C2410/2440/2443 )而做的

配置选项,打开 linux-2.6.32.2/sound/soc/s3c24xx/Makefile 文件就可以看到,

我们的开发板使用的是 UDA1341 音频芯片,在这里当然要选择

"-*- SoC I2S Audio support UDA134X wired to a S3C24XX"了。

退出保存以上各项配置。

 

1.6.3 mp3 放音测试

在内核源代码目录执行:make zImage,把生成的内核映像文件烧写到开发板,依然使用友善之臂提供的文件系统 root_qtopia,系统启动后,使用系统自带的 madplay 软件播放一首mp3 进行测试,把音箱或者耳机插入开发板的绿色音频输出插座,就可以听到音乐了,

 

1.6.4  修正驱动中的录音代码

 

虽然播放 mp3 很正常,但当使用系统自带的录音程序进行录音时,我们发现无法听到任何结果,这是因为开发板的录音电路和 SMDK2440 目标板的电路是有所区别的。

mini2440 开发板使用的录音通道为 VIN2,而 SMDK2440 使用的则是 VIN1,打开 linux-2.6.32.2/sound/soc/codecs/ uda134x.c,在大概 201 行添加如下红色代码:

uda134x->slave_substream = substream;

} else

uda134x->master_substream = substream;

 

uda134x_write(codec, 2, 2|(5U<<2)); //把录音通道改为 VIN2

return 0;

}

 

static void uda134x_shutdown(struct snd_pcm_substream *substream,

struct snd_soc_dai *dai)

{

这样,我们就完成了录音驱动的修正,在内核源代码目录下执行:make zImage,重新编译内核并烧写到开发板中。

 

1.6.5  录音测试

 

打开 Qtopia 中的"录音机"测试程序,根据提示,点"REC"按钮开始录音,这时对着板上的麦克风说话,可以看到录音的波形,点"STOP"按钮结束录音,此时可以点"PLAY"按钮播放刚才的录音,同时录制的音频文件将以"WAV"格式

自动存储到"文档"中:说明:Qtopia2.2.0 系统自带了一个录音程序,中文名为"语音便签",但它不能正常使用板上的麦克风进行录制。




Logo

更多推荐