目的:记录声卡驱动开发的学习过程,本文只是讲解了声卡驱动开发过程中的驱动的基本文件体系结构,暂没有对内核增加新的代码。通过简单的修改配置,让Tiny210具备Ac97的驱动,兼容Tiny6410的声卡芯片Wm9713。

提到了Tiny210开发板并没有提供WM8960的驱动源代码,我接下来有两个事情可以做

一、编写WM8960的源代码。

二、尝试给TINY210增加AC97芯片WM9713的代码,让TINY210可以与TINY6410的底析兼容(我把内核做好后才发现了这是不可能兼容的,文章最后会说明原因)。

因为第二点可以无需为内核增加代码,所以我在这里就先发布这个过程序了。

准备工作——了解内核的文件组织

Tiny210配套提供的内核中,其实已经包含了所有Ac97声音驱动的内容,这些内容在如下文件中:
1、/arch/arm/mach-s5pv210/dev-audio.c
2、/arch/arm/mach-s5pv210/mach-mini210.c
3、/sound/soc/s3c24xx/s3c-ac97.c
4、/sound/soc/codec/wm9713.c
5、/sound/soc/s5pv2xx/s3c-dma.c
6、/sound/soc/s3c24xx/smdk_wm9713.c

我给文件编了号以方便说明它们的作用和重点:
1号文件,定义着声卡所需的所有基本资源,例如:
  1.1 static int s5pv210_ac97_cfg_gpio()这个函数用来配置AC97的引脚。
  1.2 struct resource s5pv210_ac97_resource[]这个变量用来定义AC97要用到的内存、DMA等资源。
  1.3 struct platform_device s5pv210_device_ac97这个变量定义了一个名为"s3c-ac97"的平台设备,用来加载引导ac97的平台驱动。
  当然,这文件里面还有一些I2S声间设备的定义,这些跟I2S有关,我这里不讲它。

2号文件,定义了整个开发板最重要的平台设备。
  2.1 static struct platform_device *mini210_devices[]这个变量把整个开发板用到的平台设都都定义在这个数组里了。
  2.1.1我们留意一下大概1573行的位置有这样的内容:

#ifdef CONFIG_SND_S3C_SOC_AC97
    &s5pv210_device_ac97,
#endif

也就是说在编译内核时,如果声明了SND_S3C_SOC_AC97宏,内核就会增加这个平台设备。
  2.2static void __init mini210_machine_init()这个函数里调用了platform_add_devices把平台设备加载到内核里。

3号文件是ac97设备的驱动。
  2.1第527行定义了一个平台驱动:struct platform_driver s3c_ac97_driver。它的名称是“s3c-ac97”。这跟我们的1号文件定义的平台设备的中称对应,因此内核会用这个驱动程序来驱动1号文件定义的平台设备。

4号文件是wm9713相关的文件,在/sound/soc/codec/这个目录中针对不同的芯片有很多专门的codec,这些文件可以直接使用,与平台无关。

5号文件是dam相关的操作,这里我们只关注声卡驱动可以先不管它。

6号文件就是把3、4号文个把组织成一个声卡设备,并把声卡作为一个名为"soc-audio"的平台设备添加到内核中。
  6.1第56行,定义了平台使用的声音设备
  6.2在70行,的int __init smdk_init()函数里把声音设备增加到系统。
  
具体操作步骤
基本的思路清晰了,下面我们就开始通过简单地修改几个文个件,内核中本来就包含了
/arch/arm/mach-s5pv210/dev-audio.c
/arch/arm/mach-s5pv210/mach-mini210.c
/sound/soc/s5pv2xx/s3c-dma.c

为了用最简单的方法加入其它文件,我们还要做以下工作:
1、修改/sound/soc/s5pv2xx/Kconfig文件,在最后面加入以下内容:
config SND_S5PV2XX_SOC_WM9713
  tristate "SoC AC97 Audio support for WM9713 on MINI210"
  depends on SND_S5PV2XX_SOC
  select SND_S3C_SOC_AC97
  select SND_SOC_WM9713
  help
    Say Y if you want to add support for SoC audio on the MINI210.

我们看一看上面提到的2号文件的说明,所以一定要增加“SND_S3C_SOC_AC97”这个宏定义,上面这个步骤能给内核增加
/sound/soc/codec/wm9713.c

2、修改/sound/soc/s5pv2xx/MakeFile,在最后面加入以下内容:
obj-$(CONFIG_SND_S3C_SOC_AC97)+= ../s3c24xx/s3c-ac97.o
obj-$(CONFIG_SND_S5PV2XX_SOC_WM9713)+=../s3c24xx/smdk_wm9713.o

上面这个步骤能给内核增加
/sound/soc/s3c24xx/s3c-ac97.c
/sound/soc/s3c24xx/smdk_wm9713.c

3、重新配置内核。
在内核配置界面里,进入Device Drivers --->Sound card support --->ALSA for SoC audio support --->
如下图所示:

把SoC I2S Audio ...WM8960...的选项去掉,然后改用SoCAC97 Audio support for WM9713就可以了.

4、编译内核,大功告成。

我们的内核需然做好了,但是我后来才发现tiny210的核心板的ac97功能与tiny6410并不兼容,因此还要对硬件进行修改。

1、要把TINY210核心原中,P2针座的的29-31针与6410的底板断来,因为TINY210的这些引脚是I2S0的功能。我是用另一个针座把这几个脚拔掉,然后接到核心板上,然后再放到底板上的。如下图所示:

2、TINY210把AC97的引脚放到了核心板正面的CON10排线座上了,我们要把这几个引脚焊接到底板上对应的AC97引脚,如下图所示。

=======================================================================================

至此,可以把内核烧到开发板,启动后就可以通过WM9713播放声音了

Tiny210加入AC97驱动Wm9713相关推荐

  1. Linux驱动的开发与移值——为Tiny210加入AC97驱动Wm9713

    文章目的:记录声卡驱动开发的学习过程,本文只是讲解了声卡驱动开发过程中的驱动的基本文件体系结构,暂没有对内核增加新的代码.通过简单的修改配置,让Tiny210具备Ac97的驱动,兼容Tiny6410的 ...

  2. Android AC97驱动杂记

    AC97驱动从设备加载开始,对于AC97核心的加载暂时不说. 以WM9713+S3C6410为例说明一个设备的加载并且驱动,并且实现应用的整个过程. 对于驱动整个驱动而言以这四个文件为主 1.wm97 ...

  3. s3c2450下AC97驱动研究

    http://blog.csdn.net/alien75/article/details/4656922 AC97驱动分析 总体而言,AC97驱动是wavedev结构的驱动,上层应用通过调用WAVEA ...

  4. WINCE6.0下的 IMX51 AC97驱动 简述

    AC97驱动接说明 本驱动使用IMX51的 SSI接口支持的AC97接口,对外接支持AC97 2.0协议的UCB1400芯片. 本驱动能够实现全双工的PCM码率的播放.录制,同时支持多种采样率的PCM ...

  5. S3C6410裸机AC97驱动

    目前能够初始化AC97,能够进入就绪中断,说明能够检测到WM9714,但是无法读取WM9714,不知道哪里出错了,目前正在解决中... AC97.c /************************ ...

  6. 嵌入式linux下复位声卡驱动

    本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 最近在做一个对讲系统,平台是tiny6410搭载的linux.遇到的问题是对讲一段时间后声卡会挂掉,报出 ...

  7. Tiny210 编译Linux3.0.8

    一.编译内核 cp mini210-tvp5150_linux_deconfig .config make 没有出现错误,烧到板上,12寸屏不能显示,修改LCD参数为屏的参数,在arch/arm/ma ...

  8. Linux ALSA驱动之三:PCM创建流程源码分析(基于Linux 5.18)

    1.基本概念及逻辑关系 如上图,通过上一节声卡的学习我们已经知道PCM是声卡的一个子设备,或者表示一个PCM实例. 每个声卡最多可以包含4个pcm的实例,每个pcm实例对应一个pcm设备文件.pcm实 ...

  9. exynos 4412

    CPU处理器 Samsung Exynos4412芯片,基于ARMCortex-A9内核,ARMv7指令集 Samsung Exynos4412为四核处理器 Exynos4412主频提升至1.5GHz ...

最新文章

  1. (传送门)2/dev/null和/dev/null 21和21/dev/null
  2. 【新星计划】Python print输出带颜色 总结
  3. GitHub网站使用的基础入门
  4. MFC 字符串截取成数组 wcstok
  5. crm——stark组件核心原理
  6. [ASP.NET Core 2.0 前方速报].NET Core 2.0.3 已经支持引用第三方程序集了
  7. macOS Big Sur应用图标替换教程︳big sur图标包
  8. PowerDesigner 表名、字段大小写转换
  9. 查找字符串末尾含关键字_EXCEL函数公式大全之利用FIND函数和RIGHT函数LEN函数取末尾字符...
  10. Java之StringUtils的常用方法(非常不错)
  11. 匹兹堡大学约翰斯敦计算机学院,英语翻译翻译Every human being,no matter what he is doing,gives off...
  12. rtl语言_21个最佳RTL WordPress主题(从右到左语言)
  13. STM32F4之ADC介绍
  14. Win7/R2 原生VHD 启动
  15. ETL数据仓库工程师笔试题和面试题整理
  16. java中不用Math.sqrt,实现开平方根的算法
  17. 证明四元数表示旋转的过程实部为0,虚部为罗德里格斯公式结果
  18. intval()和(int)转换使用与区别
  19. Is Sampling Heuristics Necessary in Training Deep Object Detectors? 论文笔记
  20. 有时候缘分来了,挡也挡不住,我们终究能等到对的那个人。

热门文章

  1. win10系统谷歌浏览器实现鼠标滚轮切换标签
  2. linux curl h 命令,Linux curl命令http cookie详解
  3. vb6不支持多重接口继承
  4. 雇主们需要掌握什么编程语言的人才?
  5. Linux下使用Shell脚本快速创建项目目录模板
  6. Wex5 开发工具及相关插件安装
  7. typora笔记去除英文下面的红色波浪线
  8. Geotools中实现NC转等值面
  9. RotatedRect中返回的角度angle详解
  10. 部门换届推文文字_部门介绍 | 一篇推文带你了解社团联合会!