免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 988 | 回复: 0
打印 上一主题 下一主题

ALSA Soc音频驱动分析 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-03-17 11:11 |只看该作者 |倒序浏览

                                                1. Soc audio driver module
        注册一个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设置为设备驱动的私有数据。
3. Soc audio driver files
       下面简要介绍一下各个文件夹下的几个主要文件的内容和目的。
       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 设置为设备驱动的私有数据。
               
               
               
               
               
               
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/18846/showart_497953.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP