在设备树中注册 snd-soc-dummy

2023-12-21

我正在尝试在我的设备树源文件中注册 soc-utils 中提供的 ALSA 虚拟编解码器,以将其与 i2s 设备驱动程序 (sun8i-i2s) 一起使用。
我尝试在 i2s 配置中设置 sound-dai 字段,如下所述:https://patchwork.kernel.org/patch/7679391/ https://patchwork.kernel.org/patch/7679391/,但是设备驱动程序在读取设备树时找不到dai名称。
我找到了两种解决方法,其中包括编写我自己的虚拟编解码器并将其提供给设备树:

/ {
    stupid-codec {
        #sound-dai-cells = <0x00000000>;
        compatible = "linux,snd-soc-stupid";
        status = "okay";
        linux,phandle = <0x0000dead>;
        phandle = <0x0000dead>;
    };
...
};

...    

&i2s0 {
    #sound-dai-cells = <0x00000000>;
    compatible = "allwinner,sun8i-h3-i2s"; 
    sound-dai = <0x0000dead>; 
    status = "okay";
};

或者在设备驱动程序中强制链接编解码器,并且设备中没有 sound-dai 字段:

device tree :
&i2s0 {
    // No sound-dai
    status = "okay";
};

i2s driver :
static int sun8i_card_create(struct device *dev, struct priv *priv)
{
    struct snd_soc_card *card;

...

    // Skip the part where it's reading the device tree
    #if 0
        codec->of_node = sun8i_get_codec(dev);
        if (!codec->of_node) {
            dev_err(dev, "no port node\n");
            return -ENXIO;
        }
        DBGOUT("%s: codec_name=\"%s\"\n", __func__, codec->of_node->name);

        if(snd_soc_of_get_dai_name(dev->of_node, &codec->dai_name) < 0)
        {
            dev_err(dev, "%s: failed to find dai name, use codec's name as dai name.\n", __func__);
            codec->dai_name = codec->of_node->name;
        }
        DBGOUT("%s: dai_name=\"%s\"\n", __func__, codec->dai_name);
    #endif

    // Force codec and dai name
    codec->name = "snd-soc-dummy";
    codec->dai_name = "snd-soc-dummy-dai";

两种方法都可以,但它仍然是一种肮脏的黑客行为,因此如果有人拥有设备树中虚拟对象的正确语法,那就太好了。

编辑2019/10/10

我们最终使用了不同的编解码器(pcm5102a),它在 dts 中单独实现:

 (in sun8i-h3-nanopi-neo-air.dts) 
 &i2s0 {
    /* sound-dai = <&pcm5102a>; */
    status = "okay";
 };

 (in sun8i-h3-nanopi.dtsi)  
 pcm5102a: pcm5102a-codec {
    #sound-dai-cells = <0>;                                                                                                                              
    compatible = "ti,pcm5102a";
    status = "disabled";
 };

至于snd-soc-dummy的使用,我无法使其正常工作,但我注意到通用的linux驱动程序似乎使用硬编码字符串来注册它:https://github.com/torvalds/linux/blob/master/sound/soc/generic/simple-card.c https://github.com/torvalds/linux/blob/master/sound/soc/generic/simple-card.c


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在设备树中注册 snd-soc-dummy 的相关文章

  • 我的属性太活泼了,我该怎么办?

    在 Linux 设备驱动程序中 创建 sysfs 属性probe太活泼了 具体来说 它经历了与用户空间的竞争条件 http kroah com log blog 2013 06 26 how to create a sysfs file c
  • 如何使用 iPhone SDK 加快或减慢背景音乐曲目的速度?

    是否有一种简单的方法来控制使用音频队列服务播放的声音文件循环的播放速度 节奏 例如 如果游戏正在播放背景音乐 我想让BGM随着时间的流逝而加快 但不改变音乐的音调 谢谢 据我所知 没有什么简单的方法可以做到这一点 在 Mac 上 您可能会使
  • 在 Android 媒体播放器上播放 MediaStore 中的音频

    有没有办法通过使用 MediaPLayer 播放从 MediaStore 获得的音频 或者我走的方向完全错误 到目前为止 我已经查看了 MediaStore Audio 但没有什么能真正帮助我 我只需要知道我是否走在正确的轨道上 首先 我假
  • 用 Java 捕获扬声器输出

    使用Java可以捕获扬声器输出吗 此输出不是由我的程序生成的 而是由其他正在运行的应用程序生成的 这可以用 Java 完成还是我需要求助于 C C 我有一个基于 Java 的应用程序 使用过的爪哇声音 https stackoverflow
  • 如何将 G.726 ADPCM 信号转换为 PCM 信号?

    我通常会使用 SoX 或 Windows 内置的音频库来获取这些内容 但似乎两者都没有 G 726 编解码器 因此 我有一个字节序列 我知道它被编码为 G 726 尽管目前尚不知道比特率以及它是 mu law 还是 A law 实验将确定这
  • 颤振:音频服务。如何播放本地文件?

    我想播放本地文件的播放列表 在android上 没有问题 我可以在Mediaitem id 中添加本地文件并且它可以正常播放 但在 iOS 上它不起作用 我收到这个错误 VERBOSE 2 ui dart state cc 186 Unha
  • Python 中的二进制相移键控

    我目前正在编写一些代码 以使用音频转换通过激光传输消息 文件 和其他数据 我当前的代码使用 python 中 binascii 模块中的 hexlify 函数将数据转换为二进制 然后为 1 发出一个音调 为 0 发出不同的音调 这在理论上是
  • 捕获设备活动时未触发 AVAudioSessionInterruptionNotification

    我遇到了问题 AVAudioSessionInterruptNotification 在 iOS 7 0 4 上 我在 NSNotificationCenter 上注册 然后激活 AVAudioSession 一切正常 但如果激活了摄像头
  • 编写I2C设备驱动时探测问题

    我是编写Linux设备驱动程序的新手 如果有什么愚蠢的问题和我糟糕的英语请原谅我 我正在尝试为触摸屏编写一个驱动程序 它通过 I2C 与 CPU 通信 我尝试在linux平台上添加设备驱动程序 注册成功 我的意思是驱动程序已加载 但探测功能
  • 在Java中一个接一个地播放WAV文件

    我正在尝试玩几个WAV http en wikipedia org wiki WAV文件一个接一个 我尝试了这个方法 for String file audioFiles new AePlayWave file start 但这会同时播放它
  • 如何通过一键或链接切换音频播放()暂停()?

    我有一个在单击锚标记时播放的音频文件 如果再次单击锚标记 我希望音频暂停 我只是对 javascript 了解不够 无法完成后半部分 我不想更改他们单击的锚标记的内容 我只想让音频文件在他们单击标记时启动和暂停 这是我到目前为止所拥有的 它
  • 使用 UIImage 和 caf 创建视频文件的问题

    我已经阅读了在互联网上可以找到的所有关于此功能的帖子 并且我在创建视频文件方面取得了一些成功 但我还剩下 3 个问题 而且似乎没有人提到过这一点 我有 3 个问题 视频在某些播放器上无法正常播放 quicktime window 视频只播放
  • 在 Raspberry Pi 4 上的多个输出设备上播放多个 mp3 文件

    我需要 4 8 个同时播放立体声音频音乐频道 连续播放 SD 卡上特定文件夹中的 mp3 音乐 Working 板载 3 5 音频插孔 USB声卡正常播放音乐 Problem 但一旦我尝试在树莓派上使用带有 USB 声卡的第三个音频输出 其
  • 在python中将mp4声音转换为文本

    我想将 Facebook Messenger 中的录音转换为文本 以下是使用 Facebook 的 API 发送 mp4 文件的示例 所以这个文件只包含音频 不包含视频 我想将其转换为文本 此外 我希望尽可能快地完成此操作 因为我将在几乎实
  • PlaySystemSound 静音开关打开

    我知道 我必须设置AudioSession到 播放 类别 即使静音开关打开也允许播放音频 这就是我所做的 但打开开关时声音仍然静音 UInt32 sessionCategory kAudioSessionCategory MediaPlay
  • AVAudioPlayer只能在模拟器中播放,但不能在设备中播放,为什么?! (iPhone-SDK)

    我有以下播放声音的简单代码 NSString soundPath NSBundle mainBundle pathForResource sound ofType wav player AVAudioPlayer alloc initWit
  • AudioTrack、SoundPool 或 MediaPlayer,我应该使用哪个?

    如果我需要能够 播放多个音频文件 具有不同的持续时间 例如 5 到 30 秒 独立设置右 左声道的音量 应用声音效果 如混响 失真 那么 我应该使用哪个 API 另外 我在 AudioTrack API 上找不到太多文档 有谁知道在哪里可以
  • AUGraphInitialize添加kAudioUnitSubType_Reverb2到AUGraph时出现错误代码-10868

    我正在尝试添加 AudioUnit 类型kAudioUnitSubType Reverb2 to an AUGraph我得到了 10868 kAudioUnitErr FormatNotSupported 支持的错误AUGraphIniti
  • module_init() 与 core_initcall() 与 Early_initcall()

    在驱动程序中 我经常看到使用这三种类型的初始化函数 module init core initcall early initcall 在什么情况下我应该使用它们 另外 还有其他的初始化方式吗 它们决定内置模块的初始化顺序 司机们会使用dev
  • 从 Linux 内核模块中调用用户空间函数

    我正在编写一个简单的 Linux 字符设备驱动程序 以通过 I O 端口将数据输出到硬件 我有一个执行浮点运算的函数来计算硬件的正确输出 不幸的是 这意味着我需要将此函数保留在用户空间中 因为 Linux 内核不能很好地处理浮点运算 这是设

随机推荐

  • 使滚动条轨道透明

    这里很少有提出相同问题的问题 但他们的解决方案对我不起作用 这是其中一个问题的图片以及我想要实现的目标 我有一个列表 当有更多项目时 会显示滚动条 我还将溢出 y 设置为覆盖 因为我不希望滚动条添加到列表的宽度 如何使轨道透明以便可以看到下
  • 如何查看Android系统版本?

    有谁知道如何检查系统版本 例如1 0 2 2等 以编程方式 如何使用它的示例 if android os Build VERSION SDK INT gt android os Build VERSION CODES GINGERBREAD
  • 如何在iPhone中使用“HTTP直播”播放视频?

    我是 iPhone 开发新手 我正在解析 XML URL 并将其内容显示在表格中 当我单击一行时 使用电影播放器 播放其相应的解析管 URL 我正在使用媒体播放器框架 这是我的代码 NSURL movieURL NSURL URLWithS
  • KarateAPI 中有类似 POJO 的功能吗?

    我使用 Karate 和 RestAssured 一段时间了 当然 这两种工具都有优点和缺点 现在我有一个 RestAssured 项目 其中有请求和响应对象以及 POJO 我的请求包装我的端点并将我的 POJO 发送到这些端点 我在抽象层
  • 如果我在实例方法中放置静态锁会发生什么?

    我是线程新手 目前正在阅读线程同步章节 我对线程锁定的一种情况有疑问 这是我所知道的 1 当我在实例方法中放置实例锁时 即 private Object lock1 new Object private Object lock2 new O
  • 如何为ggplot中的每个点使用不同的形状

    我正在绘制 4 维数据集 除了 x 轴和 y 轴之外 我想用不同宽度和高度的矩形表示第三个和第四个维度 我可以这样做吗ggplot 谢谢 这是一种方法 dd lt data frame x x lt 1 10 y x rnorm 10 wi
  • ts-loader / css-loader 无法导入/解析文件

    尝试使用 style loader 和 css loader 添加 css 模块 很难弄清楚这一点 我也不确定是 ts loader 的问题还是 css loader 的问题 webpack config js const path req
  • 向已分区的表添加分区

    将另一个分区添加到已分区表的最佳方法是什么 原本的CREATE TABLE声明如下 CREATE TABLE command log id bigint 20 NOT NULL insert time datetime NOT NULL s
  • 在 Python 中创建和维护多个 ssh 会话

    一旦我的程序启动 它就会打开任意数量的 ssh 会话 用户定义 并无限期地在服务器上运行特定命令 当真正循环时 或直到用户退出 出于效率原因 我只想创建每个会话一次 然后能够运行命令直到用户退出 我怎样才能在Python中做到这一点 我在另
  • Javascript::audio.pause是否将audio.currentTime值重置为0?

    我的代码运行完美except事实上 它不是暂停曲目 而是返回到曲目的开头 这是我的代码 var audio new Audio var hezi document querySelector player gt button hand va
  • 如何让两个 JAR 在“docker run 容器”上自动启动

    我希望通过 run 命令调用 docker 容器后自动执行两个单独的 JAR 文件 因此当我输入docker run mycontainer他们都被称为 到目前为止 我有一个如下所示的 dockerfile base image is ja
  • 在文本框中搜索单词并将光标移动到文本框中的下一个匹配项?

    我目前有一个小部件 可以搜索我的主文本框并突出显示与我的搜索匹配的单词 我遇到的问题是找到一种方法将光标移动到找到的第一个匹配项 然后在下次按 Enter 时将光标移动到找到的下一个匹配项 我有两种方法可以在文本框中搜索单词 一种方法是查找
  • 如何使用 Greasemonkey 单击此按钮?

    我是 JS 的新手 我正在尝试单击此按钮 a class simplebutton href find a 该按钮的 XPath 是 html body div 5 div span 2 a 并且可以在以下位置查看目标页面的快照这个小提琴
  • CompositeTransform 只在 silverlight 中使用吗?

    CompositeTransform仅用于silverlight 我们是否可以在 WPF 中使用它或任何等效的替代品 没有CompositeTransform然而在WPF中有一个TransformGroup 因此 等效替换是Transfor
  • 使用 Text::CSV_XS 模块将列插入 Perl 中的 CSV 文件

    如何使用 Text CSV XS 模块将列添加到 CSV 文件 模块中的打印例程仅将数组写入一行 如果我有一个数组 如何将其作为列写入文件 我已经写了下面的代码 open my outFH gt outFile or die outFile
  • 如何将椭圆动画路径旋转一定角度?

    我使用以下方法来获取实体随时间沿椭圆路径行进时的 x 和 y 位置 x Math cos time width 2 y Math sin time height 2 有没有一种简单的方法可以将整个物体旋转一定的度数 例如 45 度或 132
  • KendoUI 集成到 Durandal JS

    我正在构建一个phonegap 应用程序 并计划使用 Telerik 的 Kendo UI 框架来生成 UI Telerik Kendo UI 已经有一个 MVVM 实现 我想使用它而不包括 Knockout JS 这是支持的东西 还是 D
  • 在 Webview 中清除用户的 Facebook 会话

    我有一个 WebView 它允许用户将图像分享到 Facebook 这个过程涉及他们登录 FB 完成后 我销毁 WebView 应用程序重置 并向不同的用户提供相同的功能 目的是让 WebView 不从一个会话到下一个会话保持登录状态 但是
  • 如何使用 Android SDK Manager 安装 NDK

    据说可以用Android SDK manager来安装NDK 如下图 不幸的是 我没有SDK Plantforms SDK Tools and SDK Update Sites我的 SDK 管理器中的选项卡 我的图片如下 那么我的情况如何安
  • 在设备树中注册 snd-soc-dummy

    我正在尝试在我的设备树源文件中注册 soc utils 中提供的 ALSA 虚拟编解码器 以将其与 i2s 设备驱动程序 sun8i i2s 一起使用 我尝试在 i2s 配置中设置 sound dai 字段 如下所述 https patch