← Documents Documentation/devicetree/bindings/sound/fsl,rpmsg.yaml GitHub 원문 ↗

Linux 6.18.37 · Devicetree Bindings / Sound

NXP Audio RPMSG CPU DAI

Cortex-A/M 사이 RPMSG virtual audio, low-power path, reserved DMA memory와 channel 방향을 설명합니다.

Source pathDocumentation/devicetree/bindings/sound/fsl,rpmsg.yaml
Source versionLinux v6.18.37
TranslationDUJINLABS 전문 번역 + 해설

요약·해설과 원문, 전문 번역을 서로 분리했습니다. API 이름, symbol, source path는 원문 표기를 사용합니다.

1. 요약·해설

원문의 핵심 논리와 kernel programming 관점의 보충 설명입니다. 아래의 전문 번역과는 별도로 작성했습니다.

요약과 해설

fsl,rpmsg.yaml:1-134

NXP/Freescale RPMSG virtual audio와 SAI/SAIF serial interface의 clock, DMA, signal direction과 graph 연결을 먼저 해설하고, 접을 수 있는 영어 원문 전체와 원문 줄 좌표를 보존한 한국어 전문 번역을 제공합니다.

2. 영어 원문 전체

번역 기준이 된 Linux v6.18.37 원문입니다. 줄 번호는 이 버전의 파일 좌표입니다.

원문 전체 펼치기
1 # SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
2 %YAML 1.2
3 ---
4 $id: http://devicetree.org/schemas/sound/fsl,rpmsg.yaml#
5 $schema: http://devicetree.org/meta-schemas/core.yaml#
6
7 title: NXP Audio RPMSG CPU DAI Controller
8
9 maintainers:
10 - Shengjiu Wang <[email protected]>
11
12 description: |
13 fsl_rpmsg is a virtual audio device. Mapping to real hardware devices
14 are SAI, MICFIL, DMA controlled by Cortex M core. What we see from
15 Linux side is a device which provides audio service by rpmsg channel.
16 We can create different sound cards which access different hardwares
17 such as SAI, MICFIL, .etc through building rpmsg channels between
18 Cortex-A and Cortex-M.
19
20 allOf:
21 - $ref: sound-card-common.yaml#
22
23 properties:
24 compatible:
25 enum:
26 - fsl,imx7ulp-rpmsg-audio
27 - fsl,imx8mn-rpmsg-audio
28 - fsl,imx8mm-rpmsg-audio
29 - fsl,imx8mp-rpmsg-audio
30 - fsl,imx8ulp-rpmsg-audio
31 - fsl,imx93-rpmsg-audio
32 - fsl,imx95-rpmsg-audio
33
34 clocks:
35 items:
36 - description: Peripheral clock for register access
37 - description: Master clock
38 - description: DMA clock for DMA register access
39 - description: Parent clock for multiple of 8kHz sample rates
40 - description: Parent clock for multiple of 11kHz sample rates
41
42 clock-names:
43 items:
44 - const: ipg
45 - const: mclk
46 - const: dma
47 - const: pll8k
48 - const: pll11k
49
50 power-domains:
51 description:
52 List of phandle and PM domain specifier as documented in
53 Documentation/devicetree/bindings/power/power_domain.txt
54 maxItems: 1
55
56 memory-region:
57 maxItems: 1
58 description:
59 phandle to a node describing reserved memory (System RAM memory)
60 The M core can't access all the DDR memory space on some platform,
61 So reserved a specific memory for dma buffer which M core can
62 access.
63 (see bindings/reserved-memory/reserved-memory.txt)
64
65 audio-codec:
66 $ref: /schemas/types.yaml#/definitions/phandle
67 description: The phandle to a node of audio codec
68
69 fsl,enable-lpa:
70 $ref: /schemas/types.yaml#/definitions/flag
71 description: enable low power audio path.
72
73 fsl,rpmsg-out:
74 $ref: /schemas/types.yaml#/definitions/flag
75 description: |
76 This is a boolean property. If present, the transmitting function
77 will be enabled.
78
79 fsl,rpmsg-in:
80 $ref: /schemas/types.yaml#/definitions/flag
81 description: |
82 This is a boolean property. If present, the receiving function
83 will be enabled.
84
85 fsl,rpmsg-channel-name:
86 $ref: /schemas/types.yaml#/definitions/string
87 description: |
88 A string property to assign rpmsg channel this sound card sits on.
89 This property can be omitted if there is only one sound card and it sits
90 on "rpmsg-audio-channel".
91 enum:
92 - rpmsg-audio-channel
93 - rpmsg-micfil-channel
94
95 required:
96 - compatible
97
98 unevaluatedProperties: false
99
100 examples:
101 - |
102 #include <dt-bindings/clock/imx8mn-clock.h>
103
104 rpmsg_audio: rpmsg_audio {
105 compatible = "fsl,imx8mn-rpmsg-audio";
106 model = "wm8524-audio";
107 fsl,enable-lpa;
108 fsl,rpmsg-out;
109 clocks = <&clk IMX8MN_CLK_SAI3_IPG>,
110 <&clk IMX8MN_CLK_SAI3_ROOT>,
111 <&clk IMX8MN_CLK_SDMA3_ROOT>,
112 <&clk IMX8MN_AUDIO_PLL1_OUT>,
113 <&clk IMX8MN_AUDIO_PLL2_OUT>;
114 clock-names = "ipg", "mclk", "dma", "pll8k", "pll11k";
115 };
116
117 - |
118 #include <dt-bindings/clock/imx8mm-clock.h>
119
120 rpmsg_micfil: audio-controller {
121 compatible = "fsl,imx8mm-rpmsg-audio";
122 model = "micfil-audio";
123 fsl,rpmsg-channel-name = "rpmsg-micfil-channel";
124 fsl,enable-lpa;
125 fsl,rpmsg-in;
126 clocks = <&clk IMX8MM_CLK_PDM_IPG>,
127 <&clk IMX8MM_CLK_PDM_ROOT>,
128 <&clk IMX8MM_CLK_SDMA3_ROOT>,
129 <&clk IMX8MM_AUDIO_PLL1_OUT>,
130 <&clk IMX8MM_AUDIO_PLL2_OUT>;
131 clock-names = "ipg", "mclk", "dma", "pll8k", "pll11k";
132 };
133
134 ...
135

3. 한국어 전문 번역

영어 원문의 문단 순서와 의미를 유지한 전체 번역입니다. 코드, 함수명, symbol과 URL은 원문 표기를 유지합니다.

NXP Audio RPMSG virtual DAI

1-22

`fsl_rpmsg`는 virtual audio device입니다. 실제 hardware인 SAI, MICFIL, DMA는 Cortex-M core가 제어하고, Linux에서는 rpmsg channel을 통해 audio service를 제공하는 device로 보입니다.

Cortex-A와 Cortex-M 사이에 서로 다른 rpmsg channel을 구성하면 SAI나 MICFIL 같은 각기 다른 hardware에 접근하는 여러 sound card를 만들 수 있습니다. Binding은 `sound-card-common.yaml#`을 상속하며 schema ID는 `http://devicetree.org/schemas/sound/fsl,rpmsg.yaml#`, maintainer는 Shengjiu Wang입니다.

SoC compatible과 다섯 clock

23-49

지원 `compatible`은 `fsl,imx7ulp-rpmsg-audio`, `fsl,imx8mn-rpmsg-audio`, `fsl,imx8mm-rpmsg-audio`, `fsl,imx8mp-rpmsg-audio`, `fsl,imx8ulp-rpmsg-audio`, `fsl,imx93-rpmsg-audio`, `fsl,imx95-rpmsg-audio`입니다.

`clocks`의 순서는 register 접근용 peripheral clock, master clock, DMA register 접근용 DMA clock, 8 kHz 배수 sample rate의 parent clock, 11 kHz 배수 sample rate의 parent clock입니다. 대응하는 `clock-names`는 `ipg`, `mclk`, `dma`, `pll8k`, `pll11k`입니다.

Power domain, reserved memory와 codec

50-68

`power-domains`는 power domain phandle과 specifier 한 항목입니다. `memory-region`은 reserved System RAM을 가리키는 phandle이며, 일부 platform에서 M core가 전체 DDR 공간에 접근할 수 없으므로 접근 가능한 DMA buffer 전용 memory를 예약하는 데 사용합니다.

`audio-codec`은 audio codec node의 phandle입니다. 원문은 power domain에 `Documentation/devicetree/bindings/power/power_domain.txt`, reserved memory에 `bindings/reserved-memory/reserved-memory.txt`를 참조합니다.

Low-power path, 방향과 channel 이름

69-94

Flag `fsl,enable-lpa`는 low power audio path를 활성화합니다. `fsl,rpmsg-out`이 있으면 송신 기능, `fsl,rpmsg-in`이 있으면 수신 기능을 활성화합니다.

`fsl,rpmsg-channel-name`은 sound card가 속한 rpmsg channel을 지정하는 문자열입니다. 유효값은 `rpmsg-audio-channel`과 `rpmsg-micfil-channel`입니다. sound card가 하나이고 기본 `rpmsg-audio-channel`을 사용하면 생략할 수 있습니다.

필수 compatible과 확장 제한

95-99

필수 속성은 `compatible`이며, 공통 sound card schema 평가 뒤 정의되지 않은 추가 속성은 허용하지 않습니다.

SAI 출력과 MICFIL 입력 RPMSG 예제

100-134

첫 예제는 i.MX8MN SAI3 기반 `wm8524-audio` card로 low-power path와 RPMSG output을 켭니다. 두 번째는 i.MX8MM PDM 기반 `micfil-audio` card로 `rpmsg-micfil-channel`, low-power path와 RPMSG input을 사용합니다. 두 예제 모두 IPG, master, SDMA3, 8 kHz PLL, 11 kHz PLL clock을 지정합니다.

#include <dt-bindings/clock/imx8mn-clock.h>

rpmsg_audio: rpmsg_audio {
    compatible = "fsl,imx8mn-rpmsg-audio";
    model = "wm8524-audio";
    fsl,enable-lpa;
    fsl,rpmsg-out;
    clocks = <&clk IMX8MN_CLK_SAI3_IPG>,
             <&clk IMX8MN_CLK_SAI3_ROOT>,
             <&clk IMX8MN_CLK_SDMA3_ROOT>,
             <&clk IMX8MN_AUDIO_PLL1_OUT>,
             <&clk IMX8MN_AUDIO_PLL2_OUT>;
    clock-names = "ipg", "mclk", "dma", "pll8k", "pll11k";
};
    #include <dt-bindings/clock/imx8mm-clock.h>

    rpmsg_micfil: audio-controller {
        compatible = "fsl,imx8mm-rpmsg-audio";
        model = "micfil-audio";
        fsl,rpmsg-channel-name = "rpmsg-micfil-channel";
        fsl,enable-lpa;
        fsl,rpmsg-in;
        clocks = <&clk IMX8MM_CLK_PDM_IPG>,
                 <&clk IMX8MM_CLK_PDM_ROOT>,
                 <&clk IMX8MM_CLK_SDMA3_ROOT>,
                 <&clk IMX8MM_AUDIO_PLL1_OUT>,
                 <&clk IMX8MM_AUDIO_PLL2_OUT>;
        clock-names = "ipg", "mclk", "dma", "pll8k", "pll11k";
    };

...