首页 > 其他分享 >Rockchip RK3399 - Platform驱动

Rockchip RK3399 - Platform驱动

时间:2023-07-08 09:11:13浏览次数:74  
标签:Rockchip i2s i2s0 复用 Platform RK3399 pcfg rockchip I2S0

Platfrom driver提供了配置/使能SoC音频接口的能力;Plaftrom驱动分为两个部分:snd_soc_platform_driver、snd_soc_dai_driver。

  • snd_soc_platform_driver:负责管理音频数据,把音频数据通过DMA或其他操作传送至CPU DAI中;
  • snd_soc_dai_driver:负责完成SoC一侧的DAI参数配置,同时也会通过一定的路径把必要的DMA等参数与snd_soc_platform_driver进行交互;

驱动代码位于sound/soc/rockchip/rockchip_i2s.c文件。

一、设备节点

1.1 设备节点i2s0

设备节点i2s0定义在arch/arm64/boot/dts/rockchip/rk3399.dts文件:

i2s0: i2s@ff880000 {
        compatible = "rockchip,rk3399-i2s", "rockchip,rk3066-i2s";
        reg = <0x0 0xff880000 0x0 0x1000>;
        rockchip,grf = <&grf>;
        interrupts = <GIC_SPI 39 IRQ_TYPE_LEVEL_HIGH 0>;
        dmas = <&dmac_bus 0>, <&dmac_bus 1>;
        dma-names = "tx", "rx";
        clock-names = "i2s_clk", "i2s_hclk";
        clocks = <&cru SCLK_I2S0_8CH>, <&cru HCLK_I2S0_8CH>;
        pinctrl-names = "default";
        pinctrl-0 = <&i2s0_8ch_bus>;
        power-domains = <&power RK3399_PD_SDIOAUDIO>;
        #sound-dai-cells = <0>;
        status = "disabled";
};

这是 Rockchip RK3399 SoC中I2S0设备节点描述。它包括以下属性:

  • compatible: 指定设备驱动程序的兼容性,即告诉内核该设备可以被哪些驱动程序所使用;
  • reg: 指定I2S0控制器的基地址和地址空间大小,从 0xff880000 到 0xff881000 共有 0x1000 个字节的寄存器空间,其中0xff880000 为I2S0寄存器基地址为;
  • rockchip,grf:设置为grf设备节点,用于定位并访问与I2S0控制器相关的GRF寄存器;
  • interrupts: 指定I2S控制器的中断号为GIC_SPI 39,并且取值方式为IRQ_TYPE_LEVEL_HIGH,意味着中断信号为高电平触发;
  • dmas: 指定数据传输时使用的DMA控制器,第一个表示TX数据使用的DMA控制器,第二个表示 RX 数据使用的 DMA 控制器;
  • dma-names: 分别对应 "tx" 和 "rx" 的 DMA 名称;
  • clock-names: 指定I2S0时钟名称,"i2s_clk"表示I2S0控制器时钟,"i2s_hclk" 表示I2S0 BUS时钟;
  • clocks: 指定I2S0控制器时钟使用SCLK_I2S0_8CH,BUS时钟使用 HCLK_I2S0_8CH;
  • pinctrl-names: 指定设备pinctrl配置集合,例如“default”表示默认配置;
  • pinctrl-0: 设置default状态对应的引脚配置为i2s0_8ch_bus,这里主要配置I2S0相关引脚复用为I2S功能;
  • power-domains: 指定设备隶属于的电源域,这里是 RK3399_PD_SDIOAUDIO;
  • #sound-dai-cells: 表示定义这个节点的sound DAI数据单元格的数量,这里为0表示没有单元格;
  • status: 表示设备状态,这里 "disabled" 表示该设备当前是禁用状态;

我们需要在arch/arm64/boot/dts/rockchip/rk3399-evb.dts文件添加如下属性,启用I2S0控制器:

&i2s0 {
        status = "okay";
};

关于设备节点属性可以参考文档Documentation/devicetree/bindings/sound/rockchip-i2s.txt。

而RK3399 I2S控制器驱动代码位于sound/soc/rockchip/rockchip_i2s.c文件。

1.2 引脚配置节点i2s0_8ch_bus

引脚配置节点i2s0_8ch_bus定义在pinctrl设备节点下:

i2s0 {
        i2s0_2ch_bus: i2s0-2ch-bus {
                rockchip,pins =
                        <3 RK_PD0 1 &pcfg_pull_none>,
                        <3 RK_PD1 1 &pcfg_pull_none>,
                        <3 RK_PD2 1 &pcfg_pull_none>,
                        <3 RK_PD3 1 &pcfg_pull_none>,
                        <3 RK_PD7 1 &pcfg_pull_none>,
                        <4 RK_PA0 1 &pcfg_pull_none>;
        };

        i2s0_8ch_bus: i2s0-8ch-bus {
                rockchip,pins =
                        <3 RK_PD0 1 &pcfg_pull_none>,
                        <3 RK_PD1 1 &pcfg_pull_none>,
                        <3 RK_PD2 1 &pcfg_pull_none>,
                        <3 RK_PD3 1 &pcfg_pull_none>,
                        <3 RK_PD4 1 &pcfg_pull_none>,
                        <3 RK_PD5 1 &pcfg_pull_none>,
                        <3 RK_PD6 1 &pcfg_pull_none>,
                        <3 RK_PD7 1 &pcfg_pull_none>,
                        <4 RK_PA0 1 &pcfg_pull_none>;
        };
};

这里我们只关注i2s0_8ch_bus引脚配置节点,这里定义了9个引脚,管脚与具体的功能和电气特性如下:

  • GPIO3_PD0:功能复用为I2S0_SCLK,电气特性配置为pcfg_pull_none;
  • GPIO3_PD1:功能复用为I2S0_LRCK_RX,电气特性配置为pcfg_pull_none;
  • GPIO3_PD2:功能复用为I2S0_LRCK_TX,电气特性配置为pcfg_pull_none;
  • GPIO3_PD3:功能复用为I2S0_SDI0,电气特性配置为pcfg_pull_none;
  • GPIO3_PD4:功能复用为I2S0_SDI1/I2S0_SDO3,电气特性配置为pcfg_pull_none;
  • GPIO3_PD5:功能复用为I2S0_SDI2/I2S0_SDO2,电气特性配置为pcfg_pull_none;
  • GPIO3_PD6:功能复用为I2S0_SDI3/I2S0_SDO1,电气特性配置为pcfg_pull_none;
  • GPIO3_PD7:功能复用为I2S0_SDO0,电气特性配置为pcfg_pull_none;
  • GPIO4_PA0:功能复用为I2S0_MCLK,电气特性配置为pcfg_pull_none;

二、I2S控制器驱动

 

 

参考文章

[1] 理解ALSA(三):从零写ASoC驱动

标签:Rockchip,i2s,i2s0,复用,Platform,RK3399,pcfg,rockchip,I2S0
From: https://www.cnblogs.com/zyly/p/17533933.html

相关文章

  • Rockchip RK3399 - Codec驱动( Realtek ALC5651)
    Codecdriver提供了配置/使能Codec的能力,驱动代码位于sound/soc/codecs/rt5651.c文件。一、设备节点1.1设备节点rt5651我们在arch/arm64/boot/dts/rockchip/rk3399-evb.dts文件添加rt5651设备节点,该节点位于i2c1节点下:&i2c1{status="okay";i2c-scl-rising-time......
  • No bean named 'transactionManager' available: No matching PlatformTransactionMan
    报错内容:找不到transactionManager原因:xml配置平台事务管理器的时候给了id。配置@Transaction注解时没有配置transactionManager 解决方案:将xml中配置的id="tranManager"改为id="transactionManager"。原因是因为@Transaction中transactionManager的默认名称是”transactionM......
  • XAML UI 框架横向对比(Avalonia/Uno Platform/.NET MAUI)
    本文翻译自 https://github.com/robloo/PublicDocs/blob/master/XAMLFrameworkComparison.md为了最佳阅读体验,请前往 https://github.com/1357310795/XAML-UI-Docs/blob/master/XAMLFrameworkComparison.md https://zhuanlan.zhihu.com/p/638115608XAML框架横向对比多年......
  • C# 使用HttpListener时候异常(此平台不支持此操作:System.PlatformNotSupportedExceptio
    C#使用HttpListener时候异常(此平台不支持此操作:System.PlatformNotSupportedException)代码:HttpListenerlistener=newHttpListener();错误:System.PlatformNotSupportedException:OperationisnotsupportedonthisplatformInSystem.Net.HttpListener..ctor()解决办......
  • Cisco Catalyst 8000 Series Edge Platforms, IOS XE Release Dublin-17.11.01a ED
    CiscoCatalyst8000SeriesEdgePlatforms,IOSXEReleaseDublin-17.11.01aEDCiscoCatalyst8000边缘平台系列请访问原文链接:https://sysin.org/blog/cisco-catalyst-8000/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgCiscoCatalyst8000:随心所欲访问位于......
  • qt this application failed to start because it could notfoind orloadthe Qt pla
    qt程序报错:thisapplicationfailedtostartbecauseitcouldnotfoind orloadtheQt platform ===================================C:\Users\lenovo>C:\Users\lenovo>C:\Users\lenovo>cdD:\software\Qt\install\Qt5_12_12\5.12.12\msvc2015_64\b......
  • IPMI(Intelligent Platform Management Interface)是一种远程管理接口标准,用于监控和管
    IPMI(IntelligentPlatformManagementInterface)是一种远程管理接口标准,用于监控和管理计算机系统。它提供了一套标准的命令和协议,使管理员可以通过网络对服务器和其他支持IPMI的设备进行远程管理。IPMI为数据中心提供了以下主要功能:远程监控:IPMI允许管理员通过网络获取服务器的......
  • .NET Compiler Platform SDK
    .NETCompilerPlatformSDK.NETCompilerPlatform是什么?通过学习该模型可以更快的了解Roslyn,或者说更快的了解c#编译器的相关知识。编译器管道编译器管道是什么如上图所示,编译器管在每个阶段会进行不同的操作,这些操作我们可以理解为一个独立的组件或者模块,是一个黑盒结构......
  • Rockchip rk3588 U-Boot详解 (三)
    Rockchiprk3588U-Boot详解(三)专栏总目录1.1Environment-VariablesENV(Environment-Variables)是U-Boot支持的一种全局数据管理和传递方式,原理是构建一张HASH映射表,把用户的数据以"键值-数据"作为表项进行管理。EVN通常用于定义平台配置参数:固件加载地址、网络配置(ipaddr、serve......
  • 转载-linux与soc-移植U-Boot思路和实践 | 基于RK3399
    原文链接:https://mp.weixin.qq.com/s/T1BmaP2-XbJIpLNsFxKeEQ0.背景介绍我们手里这块RK3399开发板出厂时带的是2017.09版本的U-Boot。 U-Boot 2017.09 (Sep 26 2021 - 08:53:15 +0000)   Model: Forlinx OK3399 Evaluation Board Pr......