Chinaunix首页 | 论坛 | 博客
  • 博客访问: 779066
  • 博文数量: 231
  • 博客积分: 3217
  • 博客等级: 中校
  • 技术积分: 2053
  • 用 户 组: 普通用户
  • 注册时间: 2011-07-04 12:01
文章分类

全部博文(231)

文章存档

2015年(1)

2013年(10)

2012年(92)

2011年(128)

分类:

2011-08-19 20:27:28

原文地址:声卡驱动的移植 作者:luozhiyong131

硬件接法:L3MODE -> GPB2 L3DATA->GPB3 L3CLOCK->GPB4

内核自带的声卡驱动,可以正常编译,也会打印出正确的配置信息,但是播放时没有声音,也不能进行录音。要替换掉内核自带的驱动(注意先备份[sound/soc/s3c24xx/s3c24xx-pcm.c]),用2.6.29.4内核中的声卡驱动

2.6.29.4 内核源码目录下的:

sound 文件夹,

include/sound 文件夹,

include/asm-arm/plat-s3c24xx 文件夹,

arch/arm/mach-s3c2410/include/mach/audio.h 文件

复制到2.6.31 内核源码的相应目录下,

修改arch/arm/mach-s3c2440/mach-smdk2440.c 161 Platform_device 结构体中,加入:

&s3c24xx_uda134x,

修改arch/arm/plat-s3c24xx/devs.c,DM9000 那段代码下面加入:

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,

};

extern struct platform_device s3c24xx_uda134x = {

.name = "s3c24xx_uda134x",

.dev = {

.platform_data = &s3c24xx_uda134x_data,

}

};

 

EXPORT_SYMBOL(s3c24xx_uda134x);

 

arch/arm/plat-s3c/include/plat/devs.h 中加入一行:

extern struct platform_device s3c24xx_uda134x;

注意:编译时会出错,提示S3C2410_GPBXUDA134X_UDA1341l3_mode 等没有定义,

这里需要在devs.c 中包含两个头文件

#include //这个是S3C2410 GPIO 定义

#include 3c24xx_uda134x.h>

 

配置内核,支持声卡:

Device Drivers:

* Sound card support 􀃆

* Advanced Linux Sound Architecture􀃆

* CCS Mixer API

* CSS PCM(digital audio) API

* Verbose procfs contents

* ALSA for SoC audio support􀃆

* SoC audio for the Samsung S3C24XX chips

* SoC I2S Audio support for UDA134X wired to a S3C24XX

 

编译内核,会报错:

Sound/core/info.c:159:error:struct proc_dir_entryhas no member namedowner

Sound/core/info.c:982:error:struct proc_dir_entryhas no member namedowner

include/linux/proc_fs.h 文件中定义这个结构体成员,在第70 行加入:struct module *owner;

继续编译,又会出现一个错误:

Sound/soc/s3c24xx/s3c24xx-i2s.c:407:error:implicit declaration of functions3c2410_gpio_cfgpin

2.6.31 内核中,s3c2410_gpio_cfgpin 是在include/linux/gpio.h 中定义的,要添加这个文件

sound/soc/s3c24xx/s3c24xx-i2s.c 中,第24 行添加:

#include

继续编译,又会出现很多错误:

sound/soc/s3c24xx/s3c24xx-pcm.c 中的S3C2410_DISRCC_INC 等常量没有定义,s3c2410_dam_config 函数的参数个数不对

原因是2.6.31 内核中dma 相关的文件改变了,以前的跟dma 有关的代码就不能使用了,我们只需把原来代码中的sound/soc/s3c24xx/s3c24xx-pcm.c 这个文件替换回来就可以了。

编译时同样会出现和DM9000 一样的错误,解决方法也是把

static struct platform_device s3c24xx_uda134x = {

(static 改成extern)

 

如果没有问题了,启动时会打印出以下信息:

Advanced Linux Sound Architecture Driver Version 1.0.18a.

No device for DAI UDA134X

No device for DAI s3c24xx-i2s

S3C24XX_UDA134X SoC Audio driver

UDA134X SoC Audio Codec

asoc: UDA134X <-> s3c24xx-i2s mapping ok

ALSA device list:

#0: S3C24XX_UDA134X (UDA134X)

前面两句不用管,只要后面的信息都打出来就OK 了,可以在源码下把这两条警告给屏蔽掉

下面测试一下声卡,设备名称为:/dev/dsp

用命令: #cat /dev/dsp > /tmp/1.wav 进行录音,录完后Ctrl+C

用命令:#cat /tmp/1.wav > /dev/dsp 进行放音,如果听到刚才的录音,就说明声卡没问题了,再用madplay 测试一下音质

补丁文件

文件: linux-2.6.31_TX2440A.diff.tar.bz2
大小: 646KB
下载: 下载

阅读(639) | 评论(0) | 转发(0) |
0

上一篇:CMOS 摄像头驱动

下一篇:根文件系统制作

给主人留下些什么吧!~~