ALSA Soc音频驱动分析
来源:互联网 发布:js调用手机重力感应 编辑:程序博客网 时间:2024/05/16 12:28
注册一个name为”soc-audio”的驱动程序soc_driver
platform_driver_register(soc_driver)
static struct platform_driver soc_driver = {
.driver = {
.name = "soc-audio",
},
.probe = soc_probe,
.remove = soc_remove,
.suspend = soc_suspend,
.resume = soc_resume,
};
Soc_driver的主要函数是soc_probe(),这个函数主要用来获取设备结构体 struct snd_soc_device. 然后执行这个结构体里面的一些成员(snd_soc_machine, snd_soc_platform, soc_codec_device)的probe()函数来挂载驱动程序。
static int soc_probe(struct platform_device *pdev)
{
struct snd_soc_device *socdev = platform_get_drvdata(pdev);
struct snd_soc_machine *machine = socdev->machine;
struct snd_soc_platform *platform = socdev->platform;
struct snd_soc_codec_device *codec_dev = socdev->codec_dev;
machine->probe(pdev);
platform->probe(pdev);
codec_dev->probe(pdev);
... ...
}
2. Soc audio device module这部分涉及到IIS或者AC97音频接口、PCM接口以及相应的Codec芯片接口。IIS、AC97以及PCM相关的文件都在sound/soc/s3c24xx/文件夹下,Codec芯片接口文件在sound/soc/codecs文件夹下。
这些接口声明在include/sound/soc.h文件,最后都归在设备结构体struct snd_soc_device里面,struct snd_soc_device定义如下:
/* SoC Device - the audio subsystem */
struct snd_soc_device {
struct device *dev;
struct snd_soc_machine *machine;
struct snd_soc_platform *platform;
struct snd_soc_codec *codec;
struct snd_soc_codec_device *codec_dev;
struct delayed_work delayed_work;
void *codec_data;
};
编写音频驱动需要创建一个name为”soc-audio”的platfomr_device,然后通过platform_set_drvdata函数,把定义好的struct snd_soc_device设置为设备驱动的私有数据。
下面简要介绍一下各个文件夹下的几个主要文件的内容和目的。
Sound/soc/soc-core.c [MODULE]
注册驱动程序stuct platform_driver soc_driver{... };同时EXPORT一些通用的函数,如pcm相关的一些函数。
Sound/soc/s3c24xx/s3c24xx-i2s.c
EXPORT接口结构体 struct snd_soc_cpu_dai s3c24xx_i2s_dai = {... },主要用于IIS接口设置和控制。
Sound/soc/s3c24xx/s3c24xx-pcm.c
EXPORT接口结构体struct snd_soc_platform s3c24xx_soc_platform = {... },主要是PCM的operations。
需要编写的文件:
Sound/soc/codecs/xxx.c xxx.h
定义struct snd_soc_codec_dai 和struct snd_soc_codec_device
Sound/soc/s3c24xx/chipxxx_codecxxx.c [MODULE]
利用前述文件中的接口创建设备结构体struct snd_soc_device s3c2410_snd_devdata,创建并注册一个name为”soc-audio”的设备:struct platform_device ,注意需要调用platform_set_drvdata函数,把定义好的struct snd_soc_device 设置为设备驱动的私有数据。
转自:http://blog.chinaunix.net/u2/70445/showart_2058369.html
- ALSA Soc音频驱动分析
- ALSA Soc音频驱动分析
- ALSA Soc音频驱动分析
- ALSA Soc音频驱动分析
- ALSA Soc音频驱动分析
- (转)ALSA Soc音频驱动分析 -- 1
- 6410音频ALSA驱动框架分析
- ALSA音频驱动研究
- alsa音频驱动相关
- linux音频alsa-uda134x驱动分析之一(over-view)
- linux音频alsa-uda134x驱动分析之二(时钟)
- linux音频alsa-uda134x驱动分析之三(解码器)
- linux音频alsa驱动分析之一(over-view)
- linux音频alsa驱动分析之二 时钟
- linux音频alsa驱动分析之三 解码器
- soc驱动,学习分析
- soc驱动,学习分析
- linux ALSA音频驱动框架
- Android 开发之使用Eclipse Debug调试详解
- git -svn 在ubuntu下的安装与应用
- 4G标准将统一:TD-LTE-Advanced或成唯一国际标准
- php 中远程的图片url 我怎么判断此图片是在国内还是在国外呢
- Flex应用程序调试基础--日志信息
- ALSA Soc音频驱动分析
- ListView item渐变背景(ListView必备!)
- 创建flex的web工程的方法(总结)
- 草稿
- Xtools工具箱下载地址
- dup和dup2
- android基础
- codeigniter 笔记六
- Excel 导入 Sql Server出错——“文本被截断,或者一个或多个字符在目标代码页中没有匹配项”错误的解决