rk3568 适配rk809音频

rk3568 适配rk809音频

RK809是一款集成了多种功能的电源管理芯片,主要用于笔记本电脑、平板电脑、工控机等设备的电源管理。以下是RK809的详细功能介绍:

  1. 电源管理:控制电源的开关、电压、电流等参数,保证设备的稳定运行。
  2. 音频管理:支持PDM/I2S音频播放和录制,不仅支持耳机录音和播放用能,还可以直接驱动 2W喇叭。
  3. 电池管理:支持多种电池类型,包括锂离子电池、聚合物电池等,可以实现电池的充放电管理,延长电池寿命。
  4. 供电管理:支持多种供电方式,包括AC适配器、USB供电等,可以智能切换供电方式,保证设备的稳定运行。
  5. 温度管理:支持温度监测和控制,可以防止设备过热,保护设备安全。
  6. 时间管理:支持RTC时间记录、定时唤醒,以及输出RTC时钟信号。

相比之下,RK817在功能上比RK809更加强大,主要体现在以下方面:
(1)USB PD快充:支持USB PD 3.0协议,最高输出功率可达100W,可以快速充电支持PD协议的设备。
(2)Type-C接口:支持Type-C接口的设备,可以实现数据传输和充电功能。
(3)QC3.0快充:支持QC3.0协议,可以快速充电支持QC3.0协议的设备。

作者:炭烤毛蛋 ,查看博主了解更多。


提示:RK809的功耗比RK817低,比较适合功耗要求较低的设备,例如智能音箱等。RK817的功耗比RK809高,更适合功耗要求较高的设备,例如平板电脑、笔记本电脑等。

文章目录

  • rk3568 适配rk809音频
  • 1. 核查硬件,适配rk809音频
    • 1.1 声卡适配
    • 1.2 耳机适配
    • 1.3 喇叭适配
  • 2. 适配音频路由
    • 2.1 适配 Android 音频路由
    • 2.2 适配 Linux 音频路由
  • Tips
  • 总结


1. 核查硬件,适配rk809音频

rk809-codec
rk809 音频需要外部提供 SPK_HP 供电和I2S(PDM)信号;输入立体声MIC可拆分为左声道和右声道; 喇叭则只有单声道输出,功率限定 2W; 耳机则为立体声。部分用户需要使用立体声喇叭,从耳机取音频经过功放放大推动喇叭。
VCC_SPK_HP 与 vcc_5v0直接相连,无需增加外部控制。

1.1 声卡适配

Audio
I2S
i2c
rk809_sound
HP
SPK
rk809
rk3568
graph LR
    A --> B
    subgraph Subgraph1
        C1 --> C2
        C2 --> C3
        C3 --> C4
        note right of C4: This is a subgraph
        label Subgraph1
        subgraph Subgraph2
            D1 --> D2
            D2 --> D3
            D3 --> D4
            note right of D4: This is another subgraph
            D4(( )) --> D5(( ))
            D5 --> D6
            D6 --> D7
            note right of D7: This is a node with a label
        end
    end

注册rk809声卡前准备条件:

  • rk809声卡驱动相关宏开启(RK内核已经匹配rk809声卡)
  • 匹配设备树以及关联总线
  • 注册声卡设备树
    废话不多说,直接上设备树配置。
/ {
	rk809_sound: rk809-sound {
		status = "okay";
		compatible = "simple-audio-card";
		simple-audio-card,format = "i2s";
		simple-audio-card,name = "rockchip,rk809-codec";
		simple-audio-card,mclk-fs = <256>;

		simple-audio-card,cpu {
			sound-dai = <&i2s1_8ch>;
		};
		simple-audio-card,codec {
			sound-dai = <&rk809_codec>;
		};
	};
};

&i2c0 {
	status = "okay";

	rk809: pmic@20 {
		compatible = "rockchip,rk809";
		reg = <0x20>;
		......
		rk809_codec: codec {
			#sound-dai-cells = <0>;
			compatible = "rockchip,rk809-codec", "rockchip,rk817-codec";
			clocks = <&cru I2S1_MCLKOUT>;
			clock-names = "mclk";
			assigned-clocks = <&cru I2S1_MCLKOUT>, <&cru I2S1_MCLK_TX_IOE>;
			assigned-clock-rates = <12288000>;
			assigned-clock-parents = <&cru I2S1_MCLKOUT_TX>, <&cru I2S1_MCLKOUT_TX>;
			pinctrl-names = "default";
			pinctrl-0 = <&i2s1m0_mclk>;
			hp-volume = <20>;
			spk-volume = <3>;
			mic-in-differential;
			status = "okay";
		};
	};
};

&i2s1_8ch {
	status = "okay";
	rockchip,clk-trcm = <1>;
	pinctrl-names = "default";
	pinctrl-0 = <&i2s1m0_sclktx
		     &i2s1m0_lrcktx
		     &i2s1m0_sdi0
		     &i2s1m0_sdo0>;
};

刷新内核后,可以看到 rk809声卡

cat /proc/asound/cards
 0 [rockchiprk809co]: rockchip_rk809- - rockchip,rk809-codec
                      rockchip,rk809-codec

1.2 耳机适配

在这里插入图片描述耳机检测检测GPIO可以在rk809_sound中添加也可以单独注册耳机驱动。对比rk809声卡注册耳机检测,单独耳机检测增加hook,进而识别三段、四段耳机;也有耳机 uevent 上报,音频HAL层进而切换音频路由。

/ {
	rk_headset: rk-headset {
		compatible = "rockchip_headset";
		headset_gpio = <&gpio3 RK_PA2 GPIO_ACTIVE_LOW>;
		pinctrl-names = "default";
		pinctrl-0 = <&hp_det>;
		io-channels = <&saradc 2>;
	};
};

&saradc {
        status = "okay";
        vref-supply = <&vcca_1v8>;
};

1.3 喇叭适配

在这里插入图片描述
双喇叭方案,音频取自耳机左右声道,经功放推动喇叭。功放由GPIO控制,高电平开启,低电平关闭。驱动中有此相关控制,只需增加到 rk809_codec声卡即可。

&rk809_codec {
    spk-ctl-gpio = <&gpio3 RK_PC3 GPIO_ACTIVE_HIGH>;
};

2. 适配音频路由

耳机、喇叭控制都正确,但是发现喇叭无声音。HAL层默认喇叭由 rk809直接推动,并非本文中提及的耳机音源放大。将喇叭播放音频路由从"SPK"改为"SPK_HP"才有声音,也就是适配音频路由。

2.1 适配 Android 音频路由

适配过程可参考《rk3568 Android audio 调试》,废话不多说直接上修改内容。

--- a/tinyalsa_hal/codec_config/default_config.h
+++ b/tinyalsa_hal/codec_config/default_config.h
@@ -19,36 +19,36 @@
 const struct config_control default_speaker_normal_controls[] = {
     {
         .ctl_name = "Playback Path",
-        .str_val = "SPK",
+        .str_val = "SPK_HP",
     },
 };
 
 const struct config_control default_speaker_incall_controls[] = {
     {
         .ctl_name = "Playback Path",
-        .str_val = "SPK",
+        .str_val = "SPK_HP",
     },
     {
         .ctl_name = "Voice Call Path",
-        .str_val = "SPK",
+        .str_val = "SPK_HP",
     },
 };
 
 const struct config_control default_speaker_ringtone_controls[] = {
     {
         .ctl_name = "Playback Path",
-        .str_val = "RING_SPK",
+        .str_val = "RING_SPK_HP",
     },
 };
 
 const struct config_control default_speaker_voip_controls[] = {
     {
         .ctl_name = "Playback Path",
-        .str_val = "SPK",
+        .str_val = "SPK_HP",
     },
     {
         .ctl_name = "Voip Path",
-        .str_val = "SPK",
+        .str_val = "SPK_HP",
     },
 };
 
@@ -62,7 +62,7 @@ const struct config_control default_earpiece_normal_controls[] = {
 const struct config_control default_earpiece_incall_controls[] = {
     {
         .ctl_name = "Playback Path",
-        .str_val = "SPK",
+        .str_val = "SPK_HP",
     },
     {
         .ctl_name = "Voice Call Path",

2.2 适配 Linux 音频路由

适配过程可参考《Linux 音频路由适配 (amixer)》,废话不多说直接上修改内容。

--- a/overlay/usr/share/alsa/ucm/rockchip,rk809-codec/HiFi.conf
+++ b/overlay/usr/share/alsa/ucm/rockchip,rk809-codec/HiFi.conf
@@ -40,7 +40,7 @@ SectionDevice."Speaker" {
        EnableSequence [
                cdev "hw:rockchiprk809co"
 
-               cset "name='Playback Path' SPK"
+               cset "name='Playback Path' SPK_HP"
        ]

Tips

  1. HP_DET 和 SPK_CTL 被复用情况可能引起驱动注册失败,需要先查GPIO复用。
  2. 音频路由可以使用命令调整音频路由,再编译代码确认结果。
  3. 耳机或者主mic录音时只有单声道,属于正常现象;需要软件作音频搬移实现“立体声”。
  4. 耳机和主mic可以合并为立体声录音,此时无法再使用单独录音。

总结

不枉博主一片辛苦,欢迎订阅博主–炭烤毛蛋 。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/22086.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Unity之使用Photon PUN开发多人游戏教程

前言 Photon是一个网络引擎和多人游戏平台,可以处理其服务器上的所有请求,我们可以在 Unity(或其他游戏引擎)中使用它,并快速把游戏接入Photon的网络中,而我们就可以专注于在项目中添加逻辑,专注于游戏玩法和功能了。 PUN(Photon Unity Networking)是一种开箱即用的解…

什么是DevOps?如何理解DevOps思想?

博文参考总结自&#xff1a;https://www.kuangstudy.com/course/play/1573900157572333569 仅供学习使用&#xff0c;若侵权&#xff0c;请联系我删除&#xff01; 1、什么是DevOps? DevOps是一种思想或方法论&#xff0c;它涵盖开发、测试、运维的整个过程。DevOps强调软件开…

Maven方式构建Spring Boot项目

文章目录 一&#xff0c;创建Maven项目二&#xff0c;添加依赖三&#xff0c;创建入口类四&#xff0c;创建控制器五&#xff0c;运行入口类六&#xff0c;访问Web页面七&#xff0c;修改访问映射路径八&#xff0c;定制启动标语1、创建标语文件2、生成标语字符串3、编辑标语文…

DNDC模型在土地利用变化、未来气候变化下的建模方法及温室气体时空动态模拟实践技术

DNDC模型讲解 1.1 碳循环模型简介 1.2 DNDC模型原理 1.3 DNDC下载与安装 1.4 DNDC注意事项 ​ DNDC初步操作 2.1 DNDC界面介绍 2.2 DNDC数据及格式 2.3 DNDC点尺度模拟 2.4 DNDC区域尺度模拟 2.5 DNDC结果分析 ​ DNDC气象数据制备 3.1 数据制备中的遥感和GIS技术 3…

Vue3 + TypeScript + Uniapp 开发小程序【医疗小程序完整案例·一篇文章精通系列】

当今的移动应用市场已经成为了一个日趋竞争激烈的领域&#xff0c;而开发一个既能在多个平台上运行&#xff0c;又能够高效、可维护的应用则成为了一个急需解决的问题。 在这个领域中&#xff0c;Vue3 TypeScript Uniapp 的组合已经成为了一种受欢迎的选择&#xff0c;特别…

ODB 2.4.0 使用延迟指针 lazy_shared_ptr 时遇到的问题

最近在学习使用C下的ORM库——ODB&#xff0c;来抽象对数据库的CURD&#xff0c;由于C的ORM实在是太冷门了&#xff0c;ODB除了官方英语文档&#xff0c;几乎找不到其他好用的资料&#xff0c;所以在使用过程中也是遇到很多疑惑&#xff0c;也解决很多问题。近期遇到的一个源码…

推荐系统系列之推荐系统概览(下)

在推荐系统概览的第一讲中&#xff0c;我们介绍了推荐系统的常见概念&#xff0c;常用的评价指标以及首页推荐场景的通用召回策略。本文我们将继续介绍推荐系统概览的其余内容&#xff0c;包括详情页推荐场景中的通用召回策略&#xff0c;排序阶段常用的排序模型&#xff0c;推…

Keil Debug 逻辑分析仪使用

Keil Debug 逻辑分析仪使用 基础配置 更改对应的bebug窗口参数 两边的 Dialog DLL 更改为&#xff1a;DARMSTM.DLL两边的 Parameter &#xff08;这里的根据单片机型号更改&#xff09;更改为&#xff1a;-pSTM32F103VE 选择左边的 Use Simulator 选项。 打开Debug和其中的逻…

数据全生命周期管理

数据存储 时代"海纳百川&#xff0c;有容乃大"意味结构化、半结构和非结构化多样化的海量的 &#xff0c;也意味着批数据和流数据多种数据形式的存储和计算。面对不同数据结构、数据形式、时效性与性能要求和存储与计算成本等因素考虑&#xff0c;应该使用适合的存储…

iptables防火墙(二)

iptables防火墙&#xff08;二&#xff09; 一、SNAT策略1、SNAT策略简述2、配置实验 二、DNAT策略1、DNAT策略简述2、配置实验 三、Linux抓包工具tcpdump四、防火墙规则保存 一、SNAT策略 1、SNAT策略简述 SNAT策略就是将从内网传给外网的数据包的源IP由私网IP转换成公网IP&…

四川省信创联盟2023年第一次理事会顺利召开,MIAOYUN荣获“信创企业优秀奖”!

5月18日&#xff0c;四川省技术创新促进会信创工委会&#xff08;四川省信创产业联盟&#xff09;在成都市高新区新川科技园成功召开《2023年第一次理事单位&#xff08;扩大&#xff09;会议》&#xff0c;四川省技术创新促进会专家组杜纯文副组长、四川省技术创新促进会任渝英…

EasyRecovery16适用于Windows和Mac的专业硬盘恢复软件

无论你对数据恢复了解多少&#xff0c; 我们将为您处理所有复杂的流程并简化恢复!适用于Windows和Mac的 专业硬盘恢复软件 硬盘数据无法保证绝对安全。有时会发生数据丢失&#xff0c;需要使用硬盘恢复工具。支持恢复不同存储介质数据&#xff1a;硬盘、光盘、U盘/移动硬盘、数…

AC规则-1

本文主要参考规范 GPD_Secure Element Access Control_vxxx.pdf OMA 架构 基本定义 GP(GlobalPlatform)定义了一套允许各应用提供方独立且安全地管理其在SE上的应用的安全框架&#xff0c;而AC(Access Control)&#xff0c;顾名思义&#xff0c;是对外部应用进行SE上应用访问…

网络知识点之-动态路由

动态路由是指路由器能够自动地建立自己的路由表&#xff0c;并且能够根据实际情况的变化适时地进行调整。 中文名&#xff1a;动态路由外文名&#xff1a;dynamic routing 简述 动态路由是与静态路由相对的一个概念&#xff0c;指路由器能够根据路由器之间的交换的特定路由信息…

【Python redis】零基础也能轻松掌握的学习路线与参考资料

Python redis是一种非常流行的缓存数据库&#xff0c;对于Python Web应用程序开发非常有用&#xff0c;能快速地处理大量的数据请求。Python redis的学习路线需要对Python语言有深刻的理解&#xff0c;并了解使用redis的API。在掌握了Python redis的基本知识后&#xff0c;就可…

Java设计模式-策略模式

简介 在软件开发中&#xff0c;设计模式是为了解决常见问题而提供的一套可重用的解决方案。策略模式&#xff08;Strategy Pattern&#xff09;是其中一种常见的设计模式&#xff0c;它属于行为型模式。该模式的核心思想是将不同的算法封装成独立的策略类&#xff0c;使得它们…

【halcon资料】取出区域的轮廓上所有转折点

一、说明 在区域运算的时候&#xff0c;有时候需要用图形的顶点来描述&#xff0c;比如&#xff0c;两个图中对象需要对齐&#xff0c;或者仿射变换&#xff0c;于是特征点是需要提取的。本文给出一个提取顶点的示例。 二、算子 1.1 get_region_polygon算子 &#xff08;1&a…

高级树结构

二叉排序树 左子树中所有结点的值&#xff0c;均小于其根结点的值。 右子树中所有结点的值&#xff0c;均大于其根结点的值。 二叉搜索树的子树也是二叉搜索树。 注意&#xff1a; 1.二叉查找树不能插入重复元素 2.中序遍历是一个递增的数列 3.高度越小查询效率越高 二叉排序…

设备采购信息管理系统

系列文章 任务14 设备采购信息管理系统 文章目录 系列文章一、实践目的与要求1、目的2、要求 二、课题任务三、总体设计1.存储结构及数据类型定义2.程序结构3.所实现的功能函数4、程序流程图 四、小组成员及分工五、 测试界面展示添加采购信息按编号查找采购信息按设备编号查找…

macOS Ventura 13.5beta (22G5027e)发布

系统介绍 黑果魏叔 5 月 20 日消息&#xff0c;苹果今日向 Mac 电脑用户推送了 macOS 13.5 开发者预览版 Beta 更新&#xff08;内部版本号&#xff1a;22G5027e&#xff09;&#xff0c;本次更新距离上次发布隔了 17 天。 macOS Ventura 带来了台前调度、连续互通相机、Face…