s3c2416开发板 linux,S3C2416移植内核Linux3.1的wm9713声卡过程

移植内核的声卡驱动。原因没有声卡驱动,WM9713声卡驱动移植(原来的内核有UDA1341声卡驱动,我们再次基础上直接修改)

1、直接复制内核得到三个文件:s3c2416_wm9713.c , wm9713.c , s3c2416_ac97.c.

linux-3.1\sound\soc\codecs\Wm9713.c---->wm9713.c;

linux-3.1\sound\soc\samsung\Smdk_wm9713.c---->s3c2416_wm9713.c;

linux-3.1\sound\soc\samsung\Ac97.c------------>s3c2416_ac97.c.

2、使得内核支持那三个文件:

在linux-3.1\sound\soc\samsung\Makefile添加:

snd-soc-s3c2416-wm9713-objs := s3c2416_wm9713.o

obj-$(CONFIG_SND_SOC_SAMSUNG_SMDK_WM9713) += snd-soc-s3c2416-wm9713.o

snd-soc-s3c2416-ac97-objs := s3c2416_ac97.o

obj-$(CONFIG_SND_SAMSUNG_AC97) += snd-soc-s3c2416-ac97.o

在linux-3.1\sound\soc\codec\Makefile添加:

snd-soc-wm9713-objs := wm9713.o

obj-$(CONFIG_SND_SOC_WM9713)+= snd-soc-wm9713.o

在linux-3.1/sound/soc/samsung/kconfig 配上WM9713configSND_SOC_SAMSUNG_SMDK_WM9713tristate "SoC AC97 Audio support for s3c2416 with WM9713"## depends on SND_SOC_SAMSUNG && (MACH_SMDK6410 || MACH_SMDKC100 || MACH_SMDKV210 || ##MACH_SMDKC110 || MACH_SMDKV310 || MACH_SMDKC210) #屏蔽掉depends on SND_SOC_SAMSUNG && ARCH_S3C24XX ##add by ljfselectSND_SOC_WM9713selectSND_SAMSUNG_AC97helpSat Y if you want to add support for SoC audio on the SMDK.这样在内核中“make menuconfig”里面就可以看到"SoC AC97 Audio support for s3c2416 with WM9713",并选中他。接下来我们要在内核中加入这个平台驱动设备:

在“arch/arm/mach-s3c2416/”的mach-tq2416.c中添加:

添加头文件

#include //add by ljf

#include //add by ljf

#include //add by ljf

//add by ljf/** AC97*///at plat-s3c24xx/devs.cstatic int s3c2416_ac97_cfg_gpio(struct platform_device *pdev){return s3c_gpio_cfgpin_range(S3C2410_GPE(0), 5, S3C_GPIO_SFN(3));//硬件是使用GPE0~4,S3C_GPIO_SFN(3)表示使用第三功能为AC接口static struct resource s3c_ac97_resource[] = {[0] = {.start = S3C2440_PA_AC97,.end = S3C2440_PA_AC97 + S3C2440_SZ_AC97 -1,.flags = IORESOURCE_MEM,},[1] = {.start = IRQ_S3C244x_AC97,.end = IRQ_S3C244x_AC97,.flags = IORESOURCE_IRQ,},[2] = {.name = "PCM out",.start = DMACH_PCM_OUT,.end = DMACH_PCM_OUT,.flags = IORESOURCE_DMA,},[3] = {.name = "PCM in",.start = DMACH_PCM_IN,.end = DMACH_PCM_IN,.flags = IORESOURCE_DMA,},[4] = {.name = "Mic in",.start = DMACH_MIC_IN,.end = DMACH_MIC_IN,.flags = IORESOURCE_DMA,},};static struct s3c_audio_pdata s3c_ac97_pdata = {.cfg_gpio = s3c2416_ac97_cfg_gpio,};static u64 s3c_device_audio_dmamask = DMA_BIT_MASK(32);//0xffffffffUL;//will changestruct platform_device s3c_device_ac97 = {.name = "samsung-ac97",//.id = -1,.num_resources = ARRAY_SIZE(s3c_ac97_resource),.resource = s3c_ac97_resource,.dev = {.platform_data = &s3c_ac97_pdata,.dma_mask = &s3c_device_audio_dmamask,.coherent_dma_mask = DMA_BIT_MASK(32)//;0xffffffffUL//will change}};//add by ljf然后在“struct platform_device *tq2416_devices[] __initdata”中加入//add by ljf#ifdef CONFIG_SND_SOC_SAMSUNG_SMDK_WM9713&s3c_device_ac97,&samsung_asoc_dma,#endif//add by ljf然后编译、烧写。内核打印信息有asoc: wm9713-hifi samsung-ac97 mapping okALSA device list:

#0: SMDK WM9713

其实到这边,你去播放音乐时还是没声音。

原因:由于在ac97初始化的时候,没有设置wm9713相关为喇叭输出功能。解决:在\sound\soc\samsung\s3c2416_ac97.cstatic struct snd_soc_dai_ops s3c_ac97_dai_ops结构体添加:.prepare = earphone_out,(初始化函数)实现该函数(写在s3c_ac97_dai_ops结构体上面就行了):int earphone_out(struct snd_pcm_substream *substream,struct snd_soc_dai *dai){struct snd_ac97 *ac97;ac97 = 0;s3c_ac97_write(ac97,0x26,0x0);s3c_ac97_write(ac97, 0x0c, 0x0808);s3c_ac97_write(ac97,0x3c, 0xf803);s3c_ac97_write(ac97,0x3e,0xb990);if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {//s3c6400_ac97_write(0,0x02, 0x8080);s3c_ac97_write(ac97,0x02, 0x0404);s3c_ac97_write(ac97, 0x04, 0x0606);//s3c6400_ac97_write(0,0x1c, 0x00aa);s3c_ac97_write(ac97,0x1c, 0x12aa);}else{s3c_ac97_write(ac97, 0x12, 0x0f0f);#ifdef CONFIG_SOUND_WM9713_INPUT_STREAM_MICs3c_ac97_write(ac97,0x5c,0x2);s3c_ac97_write(ac97,0x10,0x68);s3c_ac97_write(ac97,0x14,0xfe00);#else /* Input Stream is LINE-IN */s3c_ac97_write(ac97, 0x14, 0xd612);#endif}return 0;}

到这边声卡就移植结束了。

再次编译,烧写。

再次测试一下:

cat /dev/urandom > /dev/dsp

可以听到“莎莎”的声音,说明移植成功。

0b1331709591d260c1c78e86d0c51c18.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/532786.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux查看文件内容命令:cat, tail, head, more, less

Linux查看文件内容命令:cat, tail, head, more, less cat 直接显示整个文件。 cat直接显示全部文件内容,没有换页等交互。 cat filenamemore more命令,功能类似 cat ,cat命令是整个文件的内容从上到下显示在屏幕上。 more会…

linux查看队列 msg,linux第10天 msg消息队列

cat /proc/sys/kernel/msgmax最大消息长度限制cat /proc/sys/kernel/msgmnb消息队列总的字节数cat /proc/sys/kernel/msgmni消息条目数消息队列综合案例//server#include #include #include #include #include #include #include #include #define ERR_EXIT(m)do{perror(m);}wh…

Linux中 C++ main函数参数argc和argv含义及用法

Linux中 C main函数参数argc和argv含义及用法 简介 argc 是 argument count的缩写,表示传入main函数的参数个数; argv 是 argument vector的缩写,表示传入main函数的参数序列或指针,并且第一个参数argv[0]一定是程序的名称&…

c语言六位抢答器课程设计,51单片机八路抢答器课程设计

;说明:本人的这个设计改进后解决了前一个版本中1号抢答优先的问题,并增加了锦囊的设置,当参赛选手在回答问题时要求使用锦囊,则主持人按下抢答开始键,计时重新开始。;八路抢答器电路请看下图是用ps仿真的,已…

ELF文件详解—初步认识

ELF文件详解—初步认识 转自:https://blog.csdn.net/daide2012/article/details/73065204 一、 引言 在讲解ELF文件格式之前,我们来回顾一下,一个用C语言编写的高级语言程序是从编写到打包、再到编译执行的基本过程,我们知道在C…

埃及分数问题c语言,埃及分数问题(转)

今日,小雨和小明来到网络中心,继续与刘老师讨论“数的认识”问题。刘老师说:“还有一种‘埃及分数’需要认识。这是一类分裂分数的思维题,对思维能力的训练很有价值。”小明说:“有意思,愿洗耳恭听。”刘老…

linux常用命令--开发调试篇

前言 Linux常用命令中有一些命令可以在开发或调试过程中起到很好的帮助作用,有些可以帮助了解或优化我们的程序,有些可以帮我们定位疑难问题。本文将简单介绍一下这些命令。 转自:https://www.yanbinghu.com/2018/09/26/61877.html 示例程序…

简单有趣的c语言小程序,一个有趣的小程序

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼源码:#include #include #include #include #include HINSTANCE g_hInstance 0;LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPreInstance,LPSTR lpCmdLine,int nSh…

linux下ora 01110,ORA-01003ORA-01110

Oracle 9i数据库登录时,提示ORA-01003&ORA-01110,大概意思是数据文件存储介质损坏。startup nomount,正常;alter database mount,也正常;alter database open,提示如下:alter database open*ERROR 位于第 1 行:ORA…

x11转发:通过ssh远程使用GUI程序

x11转发:通过ssh远程使用GUI程序 我们常常使用ssh服务远程操控服务器,大多数操作我们都可以通过命令行命令来实现。 ssh远程无法查看GUI程序 现在,笔者在x11-test目录下放入一张图片test.jpg,并通过opnencv-python写一个简单的…

操作系统引导详细过程

操作系统引导详细过程 转自:https://blog.csdn.net/lijie45655/article/details/89366372 就直观而言,我们所见到计算机启动的过程是:按下电脑开机键,系统在黑色的屏幕下打印出一些英文语句、然后进入进度条状态,最后…

android 自定义透明 等待 dialog,Android自定义Dialog内部透明、外部遮罩效果

Android自定义Dialog内部透明、外部遮罩效果发布时间:2020-09-09 03:01:41来源:脚本之家阅读:117作者:zst1303939801本文实例为大家分享了Android自定义Dialog遮罩效果的具体代码,供大家参考,具体内容如下图…

对比损失的PyTorch实现详解

对比损失的PyTorch实现详解 本文以SiT代码中对比损失的实现为例作介绍。 论文:https://arxiv.org/abs/2104.03602 代码:https://github.com/Sara-Ahmed/SiT 对比损失简介 作为一种经典的自监督损失,对比损失就是对一张原图像做不同的图像…

android 融云浏览大图,融云 Android sdk kit 头像昵称更新机制

先申明笔者的实现方式不是唯一 也不一定是最优化的方案 如果您看到此篇博文 有不同看法 或者 更好的优化 更高的效率 欢迎在评论发表意见 融云官网点我融云头像机制相关视频详解首先跟大家说一下 kit 跟 lib 的头像机制 kit 是已经包含融云已经给开发者定制好的界面 诸如 会话界…

RuntimeError: Expected to have finished reduction in the prior iteration before starting a new one.

RuntimeError: Expected to have finished reduction in the prior iteration before starting a new one. 报错信息 报错信息: RuntimeError: Expected to have finished reduction in the prior iteration before starting a new one. This error indicates tha…

android访问重定向地址,如何从android中重定向url加载图像(示例代码)

嗨,我正面临这个问题我从RESTCall获取了一个URL网址是http://hck.re/kWWxUI但是当我在浏览器中检查时,它会重定向到https://s3-ap-southeast-1.amazonaws.com/he-public-data/afreen2ac5a33.jpg如何将此图像加载到我的imageView中我已经知道如何将毕加索…

Linux中的awk、sed、grep及正则表达式详解

Linux中的awk、sed、grep及正则表达式详解 简介 awk、sed和grep是Linux中文本操作的三大利器。 其中awk适用于取列,sed适用于取行,grep适用于过滤。 正则表达式 首先我们来介绍一下正则表达式,正则表达式(regular expression)描述了一种…

android聚焦时如何给控件加边框,edittext设置获得焦点时的边框颜色

第一步:为了更好的比较,准备两个一模一样的EditText(当Activity启动时,焦点会在第一个EditText上,如果你不希望这样只需要写一个高度和宽带为0的EditText即可避免,这里就不这么做了),代码如下:a…

gcc参数 -i, -L, -l, -include

gcc参数 -i, -L, -l, -include -i,-L,-l,-include -l和-L -l参数就是用来指定程序要链接的库,-l参数紧接着就是库名,那么库名跟真正的库文件名有什么关系呢?就拿数学库来说,他的库名是m&…

xargs 命令教程

xargs 命令教程 转自:http://www.ruanyifeng.com/blog/2019/08/xargs-tutorial.html 作者: 阮一峰 日期: 2019年8月 8日 xargs是 Unix 系统的一个很有用的命令,但是常常被忽视,很多人不了解它的用法。 本文介绍如…