ALSA SOC架构

ALSA框架学习笔记2:SOC DAI注册流程(代码解析) ALSA框架 SOC DAI注册 阅读详情

从下到上,依次是ALSA driver、ALSA lib、ALSA application:

ALSA application包括aplay、arecord,他们属于ALSA utils的工具。这些工具用于测试驱动非常的好。

ALSA lib提供诸如打开,关闭,播放的函数库。

ALSA driver是后来才加入了对SOC的支持,并且将hardware audio codec的控制抽象出来,放在sound/soc/codecs的目录里。而和SOC硬件相关的代码抽象出来放在omap目录里(加入SOC是omap)。这种分离式的设计使得一个codec的代码,在不做任何修改的情况下,可以对应很多的SOC。

ALSA的SOC中的一个大家伙,就是DAPM (Dynamic Audio Power Management),它将电源划分为4个域:

1 Codec domain - VREF, VMID (core codec and audio power) Usually controlled at codec probe/remove and suspend/resume, although can be set at stream time if power is not needed for sidetone, etc.

2 Platform/Machine domain - physically connected inputs and outputs Is platform/machine and user action specific, is configured by the machine driver and responds to asynchronous events e.g when HP are inserted.

3 Path domain - audio susbsystem signal paths. Automatically set when mixer and mux settings are changed by the user. e.g. alsamixer, amixer.

4 Stream domain - DACs and ADCs. Enabled and disabled when stream playback/capture is started and stopped respectively. e.g. aplay, arecord.

对于codec domain,它位于sound/soc/codecs目录下,例如wm9713.c。

对于Platform/Machine domain,他放在machine名字的目录里,如sound/soc/s3c24xx目录下neo1973_wm9753.c,以机器名和codec的名字同时命名。

在定义codec的audio path的时候,你需要知道这样的背景知识,DAPM在概念上分为以下部件:

  • Mixer      - Mixes several analog signals into a single analog signal.混合
  • Mux        - An analog switch that outputs only one of many inputs.切换
  • PGA        - A programmable gain amplifier or attenuation widget.可编程增益幅度或衰减部件
  • ADC        - Analog to Digital Converter
  • DAC        - Digital to Analog Converter
  • Switch     - An analog switch
  • Input      - A codec input pin
  • Output     - A codec output pin
  • Headphone  - Headphone (and optional Jack)耳机
  • Mic        - Mic (and optional Jack)
  • Line       - Line Input/Output (and optional Jack)
  • Speaker    - Speaker
  • Pre        - Special PRE widget (exec before all others)
  • Post       - Special POST widget (exec after all others)

对于path上输入的开始端点,它只需要输出到下一个部件就好。同理对于path上输出的端点,它只需要从前一个部件输入就好。path的头尾端点就是用SND_SOC_DAPM_INPUT或者SND_SOC_DAPM_OUTPUT定义这个部件。codec中都有混音器,它总是把多个输入加和为一个输出信号,他就由SND_SOC_DAPM_MIXER定义。codec中也会有一些多路开关,他是有多个输入,但是只有一个输入可以和输出接通,这样的部件由SND_SOC_DAPM_MUX定义。PGA就如它在硬件中的名字,一般就是一个输入,和一个输出。用SND_SOC_DAPM_PGA定义。Audio Codec中有许多部件,并且可以是任意的名字,ALSA怎么可能知道该如何操作这些部件来切换到你想要的路径,即时ALSA lib也不会关心这部分内容,这些细微的切换由ALSA application以上来完成,ALSA lib也最多提供各种操作mixer或者Mux的函数,如果切换是你应用的事情。

对部件的操作函数是snd_mixer_selem_set_enum_item(),alsamixer也是通过这个函数达到切换的目的。

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

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 设置为设备驱动的私有数据

YOLOv8剪枝 稀疏训练+slim剪枝测试精度仅掉1.6个点,速度提高10.3fps! 摘要 本文介绍了YOLOv8剪枝方法Slim(Network Slimming),通过L1正则化作用于BN层的缩放因子(γ),自动识别并剪除冗余通道,实现模型轻量化。核心步骤包括:稀疏训练(引入L1正则化)、通道剪枝(按γ阈值裁剪)、微调恢复精度。实验表明,该方法能有效压缩模型大小、减少计算量,且支持通过调整speed_up等超参数控制剪枝强度。移植代码需修改C2F模块以适配剪枝,并配置稀疏训练参数(如reg、sl_epochs)。最终剪枝模型需移除优化器以减小体积,但不支持多卡训练。 阅读详情

相关推荐

人民网留言数据爬取

起因是要做一个LDA主题分析的实践案例,需要数据来源,人民网的留言数据特别的适合,想着能不能用人民网留言数据来做一个LDA,种种原因还是放弃了,但是第一次弯弯绕绕地通过爬虫拿到了数据,还是想记录一下。值得说明的是,这篇博客写于2025年11月9日,其中的加密逻辑可能会随着时间而变动。

Phoenix1st的博客 1022

音频2-ALSA/ASOC音频驱动框架

本章讲解了ALSA框架和ASOC框架的大致流程,为什么ASOC框架需要出现,并从ASOC框架的三个部分 platform machine codec进行比较详细的描述

慢加的博客 2686

避坑指南:ZYNQ PS端读写BRAM时容易忽略的5个配置细节(基于Vivado 2022.1)

本文基于Vivado 2022.1,总结了ZYNQ PS端读写单口BRAM时5个易被忽略的关键配置细节。内容涵盖关闭Safety Circuit以优化时序、精确匹配AXI控制器与BRAM的地址深度、注意PS端函数位宽与地址对齐、正确连接时钟复位域,并提供了实用的调试技巧与诊断代码,帮助工程师规避常见陷阱,确保数据交互稳定可靠。

net55的博客 374

音频ALSA架构简介

ALSA(Advanced Linux Sound Architecture)即高级 Linux 声音架构。 嵌入式移动设备的音频子系统目前主要是ALSA 驱动 asoc 框架,其中包括 codec driver、 platform driver、 machine driver 等。

lihuan680680的博客 1万+

微生物测序分析LEfSe

LEfse分析定义 LEfse分析即LDA Effect Size分析,可以实现多个分组之间的比较,还进行分组比较的内部进行亚组比较分析,从而找到组间在丰度上有显著差异的物种(即biomaker);

宁生信 5万+

物料帐配置之 重估消耗

物料帐配置 ML material ledger

SAP刺客的博客 5912

ALSA-ASOC音频驱动框架简述

ALSA-ASOC音频驱动框架简述 目录: 一:ALSA概述 1.1 ALSA概述 1.2 ALSA文件框架 1.3 从proc文件系统开始入手分析ALSA 二:ALSA子设备PCM概述 2.1 PCM概述 2.2 PCM代码分析 三:ALSA子设备control概述 四:Asoc框架概述 4.4 ASOC-ALSA 之Machine框架分析 4....

奶牛养殖场小马 6650

线阵相机标定必看:如何用Halcon实现亚毫米级精度测量(以HC050标定板为例)

本文以HC050标定板为例,详细阐述了如何利用Halcon实现线阵相机的高精度标定,以达到亚毫米级测量。文章深入剖析了线阵相机标定的核心原理、面临的独特挑战,并提供了从硬件搭建、图像采集到Halcon软件实操的完整路径,重点解析了运动参数设置、精度验证及常见问题排错,为精密测量应用提供系统解决方案。

weixin_29213655的博客 313

Linux ALSA 之一:ALSA 架构简介

Linux ALSA 之一:ALSA 架构简介

年少生而为人 8136

【第07例】IPD体系进阶: 6 个技术评审点(TR)

TR技术评审点

产品线负责人 4419

uniapp | 基于高德地图实现位置选择功能(安卓端)

在uni-app项目中实现地图位置选择功能的解决方案。由于uni.chooseLocation功能受限,采用高德地图API自主开发。系统由父组件poiMap.vue(负责展示和跳转)和子组件poiBox.vue(核心地图逻辑)构成,通过父子组件通信传递位置数据。关键技术包括:1)使用AMapLoader动态加载地图SDK;2)集成PositionPicker实现拖拽选点;3)异步加载AMapUI插件;4)通过事件监听获取位置详情(地址/经纬度)。

大胆尝试,小心实践 733

ALSA SOC架构关键点

ALSA SOC架构关键点 分类: Android Linux开发 2009-10-17 09:08 1559人阅读 评论(5) 收藏 举报 关于ALSA(Advanced Linux Sound Architecture)中文资料真的很少,可能是国人很少真的从零开始做驱动开发的原因。毕竟像wolfson或者realtek这样的公司多还是老外在做开发。ALSA 对SO

RopenYuan的专栏 855

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

ALSA SOC架构基础知识

关于ALSA(Advanced Linux Sound Architecture)中文资料真的很少,可能是国人很少真的从零开始做驱动开发的原因。毕竟像wolfson或者realtek这样的公司多还是老外在做开发。ALSA 对SOC支持,更是ALSA在嵌入式领域的应用,也是后来才加入到ALSA中的,那资料更是少了。我花了一个星期也几乎没有任何发现,而后通过零星资料的蛛丝马迹,终于对ALSA有感觉了。

激情成就梦想--关注移动互联网 1585

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

ALSA 和 SOC+codec 整体架构

一、简介 整个Alsa体系分为用户空间和内核空间两部分,实现了很多强大的功能。从驱动开发的角度来看,基本只需要把注意力集中在跟硬件相关的部分就可以了。其它内容是Alsa体系维护者的事情。 在内核中,Alsa为不同的类型的硬件分别提供了不同的封装形式,这里仅介绍主框架(不同类型硬件的实现就是对主框架的封装)和SOC框架。 二、主框架 1、基本概念 帧(frame):全部声道采样一次所得

1417

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

ALSA SOC架构关键点--对driver部分说明比较清楚,但遗憾的是留有问题未解决

转自:http://blog.youkuaiyun.com/cpuwolf/article/details/4686830 关于ALSA(Advanced Linux Sound Architecture)中文资料真的很少,可能是国人很少真的从零开始做驱动开发的原因。毕竟像wolfso

Android++;ubuntu++;linux++……++ 739

alsa之ASOC架构学习

Codec(Coder/Decoder) 是一个 音频编解码芯片,负责:把模拟信号(来自麦克风)转换为数字信号(ADC),或把数字音频信号(来自 CPU/DSP)转换为模拟信号(DAC)。例如常见的外部音频 Codec 芯片:AK4556、CS42L52 等这些芯片通过 I²S、TDM、PCM、AC97、SPI、I²C 等总线与 SoC 连接。🔹 Mixer(混音器)用于将多个输入源(Mic、Line-in、Playback 等)混合输出;可控制输入增益、开关、路径选择。

Dada_ping的博客 890

ALSA下音频驱动架构

ALSA下音频架构 ALSA是什么

shichaog的专栏 3860

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

原文链接 一、概述 ALSA(Advanced Linux Sound Architecture) 高级linux声音架构的缩写,目前已经成为了linux的主流音频体系结构,想了解更多的关于ALSA的这一开源项目的信息和知识,请查看以下网址:ALSA官网 在内核设备驱动层,ALSA提供了alsa-driver,同时在应用层,ALSA为我们提供了alsa-lib,应用程序只要调用alsa-lib提供的API,即可以完成对底层音频硬件的控制。 由图可以看出,用户空间的alsa-lib对应用程序提供统一的API

weixin_42832472的博客 278
上一篇: uevent分析(转载) (2011-04-11 18:17:55)
下一篇: writing an alsa driver 中文
xp_super
博客等级 码龄14年 10粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值