http://blog.csdn.net/hanxuefan/article/details/7370074
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./read.php?tid-1481-fpage-0-toread--page-2.html 引用
No device for DAI UDA134X
引用
S3C24XX_UDA134X SoC Audio driver
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 系统自带了一个录音程序,中文名为"语音便签",但它不能正常使用板上的麦克风进行录制。 |
|