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

Linux 6.18.37 · Devicetree Bindings / Sound

NXP Audio Transceiver

HDMI eARC·ARC·SPDIF XCVR의 memory region, clock·DMA와 SoC별 조건을 설명합니다.

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

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

1. 요약·해설

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

요약과 해설

fsl,xcvr.yaml:1-160

NXP XCVR와 Google Chameleon·ChromeOS EC·SC7180 audio 구성의 memory, interrupt, DAI graph를 먼저 해설하고, 접을 수 있는 영어 원문 전체와 source path·symbol·줄 좌표를 보존한 한국어 전문 번역을 제공합니다.

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,xcvr.yaml#
5 $schema: http://devicetree.org/meta-schemas/core.yaml#
6
7 title: NXP Audio Transceiver (XCVR) Controller
8
9 maintainers:
10 - Viorel Suman <viorel.suman@nxp.com>
11
12 description: |
13 NXP XCVR (Audio Transceiver) is a on-chip functional module
14 that allows CPU to receive and transmit digital audio via
15 HDMI2.1 eARC, HDMI1.4 ARC and SPDIF.
16
17 properties:
18 $nodename:
19 pattern: "^xcvr@.*"
20
21 compatible:
22 enum:
23 - fsl,imx8mp-xcvr
24 - fsl,imx93-xcvr
25 - fsl,imx95-xcvr
26
27 reg:
28 items:
29 - description: 20K RAM for code and data
30 - description: registers space
31 - description: RX FIFO address
32 - description: TX FIFO address
33
34 reg-names:
35 items:
36 - const: ram
37 - const: regs
38 - const: rxfifo
39 - const: txfifo
40
41 interrupts:
42 items:
43 - description: WAKEUPMIX Audio XCVR Interrupt 1
44 - description: WAKEUPMIX Audio XCVR Interrupt 2
45 - description: SPDIF wakeup interrupt from PHY
46 minItems: 1
47
48 clocks:
49 items:
50 - description: Peripheral clock
51 - description: PHY clock
52 - description: SPBA clock
53 - description: PLL clock
54 - description: PLL clock source for 8kHz series
55 - description: PLL clock source for 11kHz series
56 minItems: 4
57
58 clock-names:
59 items:
60 - const: ipg
61 - const: phy
62 - const: spba
63 - const: pll_ipg
64 - const: pll8k
65 - const: pll11k
66 minItems: 4
67
68 dmas:
69 items:
70 - description: DMA controller phandle and request line for RX
71 - description: DMA controller phandle and request line for TX
72
73 dma-names:
74 items:
75 - const: rx
76 - const: tx
77
78 resets:
79 maxItems: 1
80
81 required:
82 - compatible
83 - reg
84 - reg-names
85 - interrupts
86 - clocks
87 - clock-names
88 - dmas
89 - dma-names
90
91 allOf:
92 - $ref: dai-common.yaml#
93 - if:
94 properties:
95 compatible:
96 contains:
97 const: fsl,imx8mp-xcvr
98 then:
99 required:
100 - resets
101
102 - if:
103 properties:
104 compatible:
105 contains:
106 enum:
107 - fsl,imx93-xcvr
108 - fsl,imx95-xcvr
109 then:
110 properties:
111 interrupts:
112 minItems: 2
113 maxItems: 2
114 else:
115 properties:
116 interrupts:
117 minItems: 3
118 maxItems: 3
119
120 - if:
121 properties:
122 compatible:
123 contains:
124 enum:
125 - fsl,imx8mp-xcvr
126 - fsl,imx93-xcvr
127 then:
128 properties:
129 clocks:
130 maxItems: 4
131 clock-names:
132 maxItems: 4
133
134 unevaluatedProperties: false
135
136 examples:
137 - |
138 #include <dt-bindings/interrupt-controller/arm-gic.h>
139 #include <dt-bindings/clock/imx8mp-clock.h>
140 #include <dt-bindings/reset/imx8mp-reset.h>
141
142 xcvr: xcvr@30cc0000 {
143 compatible = "fsl,imx8mp-xcvr";
144 reg = <0x30cc0000 0x800>,
145 <0x30cc0800 0x400>,
146 <0x30cc0c00 0x080>,
147 <0x30cc0e00 0x080>;
148 reg-names = "ram", "regs", "rxfifo", "txfifo";
149 interrupts = <GIC_SPI 128 IRQ_TYPE_LEVEL_HIGH>,
150 <GIC_SPI 129 IRQ_TYPE_LEVEL_HIGH>,
151 <GIC_SPI 146 IRQ_TYPE_LEVEL_HIGH>;
152 clocks = <&audiomix_clk IMX8MP_CLK_AUDIOMIX_EARC_IPG>,
153 <&audiomix_clk IMX8MP_CLK_AUDIOMIX_EARC_PHY>,
154 <&audiomix_clk IMX8MP_CLK_AUDIOMIX_SPBA2_ROOT>,
155 <&audiomix_clk IMX8MP_CLK_AUDIOMIX_AUDPLL_ROOT>;
156 clock-names = "ipg", "phy", "spba", "pll_ipg";
157 dmas = <&sdma2 30 2 0>, <&sdma2 31 2 0>;
158 dma-names = "rx", "tx";
159 resets = <&audiomix_reset 0>;
160 };
161

3. 한국어 전문 번역

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

NXP Audio Transceiver

1-16

NXP XCVR(Audio Transceiver)는 CPU가 HDMI 2.1 eARC, HDMI 1.4 ARC, SPDIF를 통해 digital audio를 송수신하게 하는 on-chip functional module입니다. Schema ID는 `http://devicetree.org/schemas/sound/fsl,xcvr.yaml#`이며 maintainer는 Viorel Suman입니다.

Node, register region과 interrupt

17-47

Node name은 `^xcvr@.*` pattern을 따르며 `compatible`은 `fsl,imx8mp-xcvr`, `fsl,imx93-xcvr`, `fsl,imx95-xcvr` 중 하나입니다.

`reg`의 네 region은 20 KB code/data RAM, register space, RX FIFO address, TX FIFO address 순서이고 `reg-names`는 `ram`, `regs`, `rxfifo`, `txfifo`입니다.

`interrupts`는 WAKEUPMIX Audio XCVR interrupt 1·2와 PHY의 SPDIF wakeup interrupt 순서이며 최소 한 항목입니다.

Clock, RX/TX DMA와 reset

48-80

`clocks`는 peripheral `ipg`, PHY `phy`, SPBA `spba`, PLL `pll_ipg`, 8 kHz 계열 `pll8k`, 11 kHz 계열 `pll11k` 순서이며 최소 4개입니다. `clock-names`도 같은 순서입니다.

`dmas`는 RX와 TX request 두 항목이고 `dma-names`는 `rx`, `tx`입니다. `resets`는 최대 한 항목입니다.

기본 필수 속성

81-90

필수 속성은 `compatible`, `reg`, `reg-names`, `interrupts`, `clocks`, `clock-names`, `dmas`, `dma-names`입니다.

SoC별 reset, interrupt와 clock 수

91-135

Binding은 `dai-common.yaml#`을 상속합니다. `fsl,imx8mp-xcvr`에는 `resets`가 필수입니다.

`fsl,imx93-xcvr`와 `fsl,imx95-xcvr`는 interrupt를 정확히 2개 사용하고, 다른 compatible인 i.MX8MP는 정확히 3개를 사용합니다.

`fsl,imx8mp-xcvr`와 `fsl,imx93-xcvr`는 `clocks`와 `clock-names`를 최대 4개만 허용합니다. 공통 schema 평가 뒤 남는 추가 속성은 허용하지 않습니다.

i.MX8MP XCVR 예제

136-160

예제는 `0x30cc0000`의 XCVR에 RAM·register·RX FIFO·TX FIFO region, GIC SPI 128·129·146, IPG·PHY·SPBA·audio PLL clock, SDMA2 RX/TX request 30·31과 AudioMix reset을 연결합니다.

#include <dt-bindings/interrupt-controller/arm-gic.h>
#include <dt-bindings/clock/imx8mp-clock.h>
#include <dt-bindings/reset/imx8mp-reset.h>

xcvr: xcvr@30cc0000 {
    compatible = "fsl,imx8mp-xcvr";
    reg = <0x30cc0000 0x800>,
          <0x30cc0800 0x400>,
          <0x30cc0c00 0x080>,
          <0x30cc0e00 0x080>;
    reg-names = "ram", "regs", "rxfifo", "txfifo";
    interrupts = <GIC_SPI 128 IRQ_TYPE_LEVEL_HIGH>,
                 <GIC_SPI 129 IRQ_TYPE_LEVEL_HIGH>,
                 <GIC_SPI 146 IRQ_TYPE_LEVEL_HIGH>;
    clocks = <&audiomix_clk IMX8MP_CLK_AUDIOMIX_EARC_IPG>,
             <&audiomix_clk IMX8MP_CLK_AUDIOMIX_EARC_PHY>,
             <&audiomix_clk IMX8MP_CLK_AUDIOMIX_SPBA2_ROOT>,
             <&audiomix_clk IMX8MP_CLK_AUDIOMIX_AUDPLL_ROOT>;
    clock-names = "ipg", "phy", "spba", "pll_ipg";
    dmas = <&sdma2 30 2 0>, <&sdma2 31 2 0>;
    dma-names = "rx", "tx";
    resets = <&audiomix_reset 0>;
};