ALSA音频架构

原创 2015年07月08日 15:46:39


Codec结构体:

 

struct snd_soc_codec

{

        const char *name;

        const struct snd_soc_codec_driver *driver;

        struct snd_soc_card *card;

        struct list_head list;

        struct list_head card_list;

 

        寄存器列表

        size_t reg_size;        /* reg_cache_size * reg_word_size */

        寄存器属性判断函数

        int (*volatile_register)(struct snd_soc_codec *, unsigned int);

        int (*readable_register)(struct snd_soc_codec *, unsigned int);

        int (*writable_register)(struct snd_soc_codec *, unsigned int);

 

        寄存器读写接口

        unsigned int (*read)(struct snd_soc_codec *, unsigned int);

        int (*write)(struct snd_soc_codec *, unsigned int, unsigned int);

}

 

Codec初始化流程:

 

rt5670_probe

 

  àsnd_soc_codec_set_cache_io               初始化寄存器读写接口        soc/soc-io.c

 

                  à codec->write = hw_write                     

                 à codec->read = hw_read

 

àrt5670_reset                                              复位Codec                                                             

 

àrt5670_reg_init                                          初始化Codec寄存器

 

àrt5670_dsp_probe                                    初始化DSP

 

 

hw_write

        àregmap_write(codec->control_data, reg, value)                 driver/base/regmap/regmap.c

hw_read

        à regmap_read(codec->control_data, reg, &val)                   driver/base/regmap/regmap.c

 

 

snd_soc_codec_set_cache_io调用后,codec可以使用以下接口来读写寄存器。

 

snd_soc_read                                                                                              soc/soc-core.c

        àcodec->read

snd_soc_write                                                                                                      soc/soc-core.c

        àcodec->write

 

snd_soc_update_bits                                                                                soc/soc-core.c

        àsnd_soc_read

        àsnd_soc_write

 

 

Codec注册流程:

 

        rt5670_i2c_probe

 

                  à snd_soc_register_codec                                                  soc/soc-core.c

 

snd_soc_codec动态创建

                       àcodec = kzalloc(sizeof(struct snd_soc_codec), GFP_KERNEL)

                           snd_soc_codec加入全局链表

àlist_add(&codec->list, &codec_list)                      soc/soc-core.c

 

àsnd_soc_register_dais                                                      soc/soc-core.c

 

snd_soc_dai动态创建

àdai = kzalloc(sizeof(struct snd_soc_dai), GFP_KERNEL)

snd_soc_dai加入全局链表

àlist_add(&dai->list, &dai_list)                       soc/soc-core.c

 

 

 

SoundCard注册流程:

 

snd_soc_register_card                                                                             soc/soc-core.c

        

        codecdai实例赋值到card->rtd

        àsoc_bind_dai_link

 

        创建card实例

àsnd_card_create

 

 

 

初始化codec

àsoc_probe_link_components

      àsoc_probe_codec

                  àdriver->probe(codec)

 

àsoc_probe_link_dais

        初始化dai

àcodec_dai->driver->probe(codec_dai)

 

àsoc_new_pcm                                                                               soc/soc-pcm.c

 

àsnd_pcm_new                                                                      core/pcm.c

                  àsnd_pcm_new_stream(capture)                                    core/pcm.c

                  àsnd_pcm_new_stream(playback)                         core/pcm.c

        àsnd_pcm_set_ops                                                               core/pcm-lib.c

 

àsnd_card_register                                                                        init.c

 

        àsnd_device_register_all     

                  à调用设备各自的注册函数

 

 

SoundCard注册完成后:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


PCM注册流程:

 

 

snd_pcm_dev_register                                                                    core/pcm.c

        

        注册snd_pcm_f_ops                                                              core/pcm_native.c

à snd_register_device_for_dev             

 

        alsa-lib会调用到snd_pcm_f_ops中的接口

 

 

ALSA架构layer:

 

 

 

 

 


SOC-layer API:

 

platform driver调用以下API初始化codec

snd_soc_dai_set_fmt                                                                                soc/soc-core.c

snd_soc_dai_set_pll                                                                                  soc/soc-core.c

snd_soc_dai_set_sysclk                                                                           soc/soc-core.c

snd_soc_dai_set_clkdiv                                                                            soc/soc-core.c

 

codec调用以下API读写寄存器

snd_soc_read                                                                                              soc/soc-core.c

snd_soc_write                                                                                                      soc/soc-core.c

snd_soc_update_bits                                                                              soc/soc-core.c

Android音频系统之音频框架

1.1 音频框架 转载请注明,From LXS, http://blog.csdn.net/uiop78uiop78/article/details/8796492 Android的音频系统在...

如果以44.1k的采样率,16bit采样位宽,采样5分钟立体声音频,那么生成的wav文件大小大概是多少?

“任何你真正想得到的一定是值得坚持的!”

Linux ALSA声卡驱动之一:ALSA架构简介

一.  概述     ALSA是Advanced Linux Sound Architecture 的缩写,目前已经成为了linux的主流音频体系结构,想了解更多的关于ALSA的这一开源项目的信...

ALSA下音频驱动架构

ALSA下音频架构 ALSA是什么

【转】Linux音频驱动之一:ALSA架构简介

一. 概述   ALSA 是 Advanced Linux Sound Architecture 的缩写,目前已经成为了 Linux 的主流音频体系结构,想了解更多的关于 ALSA 的这一开源项目...

asla架构和alsa-lib音频库的移植 .

alsa 是在LINUX出现比较晚的音频处理库,主要是针对原有的OSS的库进行改进.性能更好,支持多个播放源等.但相应的,增加的编程的复杂性.   旧的oss是采用标准文件IO接口,设备打开采用op...

alsa音频架构4-声卡控制

第十五部分 声卡控制接口 前面第一篇中讲到了每注册一个声卡都会创建注册一个对应的声卡控制设备,并给出了其操作函数集snd_ctl_f_ops, 在"amixer,aplay,arecord的使用"...
  • paomadi
  • paomadi
  • 2013年05月31日 12:57
  • 2921

Android ALSA音频系统架构分析(1)----从Loopback了解Audio

Android音频系统是一套基于Linux ALSA上二次封装开发的一套音频系统,中间进行了很多的功能封装,但最终会用到Linux ALSA。所以在Hal层的类名都会包含ALSA。对于MTK的Andr...

alsa音频架构1

第一部分 alsa子系统关键结构体对象等 1.声卡设备类型定义 #define SNDRV_DEV_TOPLEVEL ((__force snd_device_type_t) 0) #define...
  • paomadi
  • paomadi
  • 2013年05月06日 09:16
  • 3415

alsa架构音频分析总结

本文系转载,作者:yanzheng1113,来源:http://blog.csdn.net/yanzheng1113/article/details/8085804    参考文章:http://...
  • shen924
  • shen924
  • 2013年04月08日 23:26
  • 1784
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ALSA音频架构
举报原因:
原因补充:

(最多只允许输入30个字)