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 系统自带了一个录音程序,中文名为"语音便签",但它不能正常使用板上的麦克风进行录制。