← Documents Documentation/devicetree/bindings/media/i2c/nxp,tda1997x.txt GitHub 원문 ↗

Linux 6.18.37 · Devicetree Bindings

NXP TDA1997x HDMI Receiver

TDA19971/73의 video format, 4-bit pin group, audio와 parallel endpoint 바인딩입니다.

Source pathDocumentation/devicetree/bindings/media/i2c/nxp,tda1997x.txt
Source versionLinux v6.18.37
TranslationDUJINLABS 전문 번역 + 해설

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

1. 요약·해설

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

요약과 해설

nxp,tda1997x.txt:1-178

YUV/RGB bus width와 세 IMX6 연결 예제를 원문 차이까지 보존해 설명합니다.

2. 영어 원문 전체

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

원문 전체 펼치기
1 Device-Tree bindings for the NXP TDA1997x HDMI receiver
2
3 The TDA19971/73 are HDMI video receivers.
4
5 The TDA19971 Video port output pins can be used as follows:
6 - RGB 8bit per color (24 bits total): R[11:4] B[11:4] G[11:4]
7 - YUV444 8bit per color (24 bits total): Y[11:4] Cr[11:4] Cb[11:4]
8 - YUV422 semi-planar 8bit per component (16 bits total): Y[11:4] CbCr[11:4]
9 - YUV422 semi-planar 10bit per component (20 bits total): Y[11:2] CbCr[11:2]
10 - YUV422 semi-planar 12bit per component (24 bits total): - Y[11:0] CbCr[11:0]
11 - YUV422 BT656 8bit per component (8 bits total): YCbCr[11:4] (2-cycles)
12 - YUV422 BT656 10bit per component (10 bits total): YCbCr[11:2] (2-cycles)
13 - YUV422 BT656 12bit per component (12 bits total): YCbCr[11:0] (2-cycles)
14
15 The TDA19973 Video port output pins can be used as follows:
16 - RGB 12bit per color (36 bits total): R[11:0] B[11:0] G[11:0]
17 - YUV444 12bit per color (36 bits total): Y[11:0] Cb[11:0] Cr[11:0]
18 - YUV422 semi-planar 12bit per component (24 bits total): Y[11:0] CbCr[11:0]
19 - YUV422 BT656 12bit per component (12 bits total): YCbCr[11:0] (2-cycles)
20
21 The Video port output pins are mapped via 4-bit 'pin groups' allowing
22 for a variety of connection possibilities including swapping pin order within
23 pin groups. The video_portcfg device-tree property consists of register mapping
24 pairs which map a chip-specific VP output register to a 4-bit pin group. If
25 the pin group needs to be bit-swapped you can use the *_S pin-group defines.
26
27 Required Properties:
28 - compatible :
29 - "nxp,tda19971" for the TDA19971
30 - "nxp,tda19973" for the TDA19973
31 - reg : I2C slave address
32 - interrupts : The interrupt number
33 - DOVDD-supply : Digital I/O supply
34 - DVDD-supply : Digital Core supply
35 - AVDD-supply : Analog supply
36 - nxp,vidout-portcfg : array of pairs mapping VP output pins to pin groups.
37
38 Optional Properties:
39 - nxp,audout-format : DAI bus format: "i2s" or "spdif".
40 - nxp,audout-width : width of audio output data bus (1-4).
41 - nxp,audout-layout : data layout (0=AP0 used, 1=AP0/AP1/AP2/AP3 used).
42 - nxp,audout-mclk-fs : Multiplication factor between stream rate and codec
43 mclk.
44
45 The port node shall contain one endpoint child node for its digital
46 output video port, in accordance with the video interface bindings defined in
47 Documentation/devicetree/bindings/media/video-interfaces.txt.
48
49 Optional Endpoint Properties:
50 The following three properties are defined in video-interfaces.txt and
51 are valid for the output parallel bus endpoint:
52 - hsync-active: Horizontal synchronization polarity. Defaults to active high.
53 - vsync-active: Vertical synchronization polarity. Defaults to active high.
54 - data-active: Data polarity. Defaults to active high.
55
56 Examples:
57 - VP[15:0] connected to IMX6 CSI_DATA[19:4] for 16bit YUV422
58 16bit I2S layout0 with a 128*fs clock (A_WS, AP0, A_CLK pins)
59 hdmi-receiver@48 {
60 compatible = "nxp,tda19971";
61 pinctrl-names = "default";
62 pinctrl-0 = <&pinctrl_tda1997x>;
63 reg = <0x48>;
64 interrupt-parent = <&gpio1>;
65 interrupts = <7 IRQ_TYPE_LEVEL_LOW>;
66 DOVDD-supply = <&reg_3p3v>;
67 AVDD-supply = <&reg_1p8v>;
68 DVDD-supply = <&reg_1p8v>;
69 /* audio */
70 #sound-dai-cells = <0>;
71 nxp,audout-format = "i2s";
72 nxp,audout-layout = <0>;
73 nxp,audout-width = <16>;
74 nxp,audout-mclk-fs = <128>;
75 /*
76 * The 8bpp YUV422 semi-planar mode outputs CbCr[11:4]
77 * and Y[11:4] across 16bits in the same pixclk cycle.
78 */
79 nxp,vidout-portcfg =
80 /* Y[11:8]<->VP[15:12]<->CSI_DATA[19:16] */
81 < TDA1997X_VP24_V15_12 TDA1997X_G_Y_11_8 >,
82 /* Y[7:4]<->VP[11:08]<->CSI_DATA[15:12] */
83 < TDA1997X_VP24_V11_08 TDA1997X_G_Y_7_4 >,
84 /* CbCc[11:8]<->VP[07:04]<->CSI_DATA[11:8] */
85 < TDA1997X_VP24_V07_04 TDA1997X_R_CR_CBCR_11_8 >,
86 /* CbCr[7:4]<->VP[03:00]<->CSI_DATA[7:4] */
87 < TDA1997X_VP24_V03_00 TDA1997X_R_CR_CBCR_7_4 >;
88
89 port {
90 tda1997x_to_ipu1_csi0_mux: endpoint {
91 remote-endpoint = <&ipu1_csi0_mux_from_parallel_sensor>;
92 bus-width = <16>;
93 hsync-active = <1>;
94 vsync-active = <1>;
95 data-active = <1>;
96 };
97 };
98 };
99 - VP[15:8] connected to IMX6 CSI_DATA[19:12] for 8bit BT656
100 16bit I2S layout0 with a 128*fs clock (A_WS, AP0, A_CLK pins)
101 hdmi-receiver@48 {
102 compatible = "nxp,tda19971";
103 pinctrl-names = "default";
104 pinctrl-0 = <&pinctrl_tda1997x>;
105 reg = <0x48>;
106 interrupt-parent = <&gpio1>;
107 interrupts = <7 IRQ_TYPE_LEVEL_LOW>;
108 DOVDD-supply = <&reg_3p3v>;
109 AVDD-supply = <&reg_1p8v>;
110 DVDD-supply = <&reg_1p8v>;
111 /* audio */
112 #sound-dai-cells = <0>;
113 nxp,audout-format = "i2s";
114 nxp,audout-layout = <0>;
115 nxp,audout-width = <16>;
116 nxp,audout-mclk-fs = <128>;
117 /*
118 * The 8bpp YUV422 semi-planar mode outputs CbCr[11:4]
119 * and Y[11:4] across 16bits in the same pixclk cycle.
120 */
121 nxp,vidout-portcfg =
122 /* Y[11:8]<->VP[15:12]<->CSI_DATA[19:16] */
123 < TDA1997X_VP24_V15_12 TDA1997X_G_Y_11_8 >,
124 /* Y[7:4]<->VP[11:08]<->CSI_DATA[15:12] */
125 < TDA1997X_VP24_V11_08 TDA1997X_G_Y_7_4 >,
126 /* CbCc[11:8]<->VP[07:04]<->CSI_DATA[11:8] */
127 < TDA1997X_VP24_V07_04 TDA1997X_R_CR_CBCR_11_8 >,
128 /* CbCr[7:4]<->VP[03:00]<->CSI_DATA[7:4] */
129 < TDA1997X_VP24_V03_00 TDA1997X_R_CR_CBCR_7_4 >;
130
131 port {
132 tda1997x_to_ipu1_csi0_mux: endpoint {
133 remote-endpoint = <&ipu1_csi0_mux_from_parallel_sensor>;
134 bus-width = <16>;
135 hsync-active = <1>;
136 vsync-active = <1>;
137 data-active = <1>;
138 };
139 };
140 };
141 - VP[15:8] connected to IMX6 CSI_DATA[19:12] for 8bit BT656
142 16bit I2S layout0 with a 128*fs clock (A_WS, AP0, A_CLK pins)
143 hdmi-receiver@48 {
144 compatible = "nxp,tda19971";
145 pinctrl-names = "default";
146 pinctrl-0 = <&pinctrl_tda1997x>;
147 reg = <0x48>;
148 interrupt-parent = <&gpio1>;
149 interrupts = <7 IRQ_TYPE_LEVEL_LOW>;
150 DOVDD-supply = <&reg_3p3v>;
151 AVDD-supply = <&reg_1p8v>;
152 DVDD-supply = <&reg_1p8v>;
153 /* audio */
154 #sound-dai-cells = <0>;
155 nxp,audout-format = "i2s";
156 nxp,audout-layout = <0>;
157 nxp,audout-width = <16>;
158 nxp,audout-mclk-fs = <128>;
159 /*
160 * The 8bpp BT656 mode outputs YCbCr[11:4] across 8bits over
161 * 2 pixclk cycles.
162 */
163 nxp,vidout-portcfg =
164 /* YCbCr[11:8]<->VP[15:12]<->CSI_DATA[19:16] */
165 < TDA1997X_VP24_V15_12 TDA1997X_R_CR_CBCR_11_8 >,
166 /* YCbCr[7:4]<->VP[11:08]<->CSI_DATA[15:12] */
167 < TDA1997X_VP24_V11_08 TDA1997X_R_CR_CBCR_7_4 >,
168
169 port {
170 tda1997x_to_ipu1_csi0_mux: endpoint {
171 remote-endpoint = <&ipu1_csi0_mux_from_parallel_sensor>;
172 bus-width = <16>;
173 hsync-active = <1>;
174 vsync-active = <1>;
175 data-active = <1>;
176 };
177 };
178 };
179

3. 한국어 전문 번역

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

TDA19971/73 video output 형식

1-20

NXP TDA19971과 TDA19973은 HDMI video receiver입니다. TDA19971 video port는 24-bit RGB 8-bit/color, 24-bit YUV444 8-bit/color, 16·20·24-bit YUV422 semi-planar 8·10·12-bit/component, 그리고 8·10·12-bit YUV422 BT656 two-cycle output을 지원합니다.

TDA19973 video port는 36-bit RGB 12-bit/color, 36-bit YUV444 12-bit/color, 24-bit YUV422 semi-planar 12-bit/component, 12-bit YUV422 BT656 two-cycle output을 지원합니다.

TDA1997x video port 형식
ChipFormatComponent depthTotal width / pins
TDA19971RGB8-bit/color24-bit, R/B/G[11:4]
TDA19971YUV4448-bit/color24-bit, Y/Cr/Cb[11:4]
TDA19971YUV422 semi-planar8/10/12-bit16/20/24-bit
TDA19971YUV422 BT6568/10/12-bit8/10/12-bit, 2 cycles
TDA19973RGB 또는 YUV44412-bit/color36-bit
TDA19973YUV422 semi-planar12-bit24-bit
TDA19973YUV422 BT65612-bit12-bit, 2 cycles

Chip별 component depth와 전체 bus width를 원문의 pin slice와 함께 정리합니다.

Pin group mapping과 필수 전원

21-37

Video port output pin은 4-bit `pin group`으로 mapping하므로 group 안의 pin 순서를 바꾸는 등 다양한 연결이 가능합니다. `nxp,vidout-portcfg`는 chip-specific VP output register와 4-bit pin group을 한 쌍씩 배열로 연결합니다. Pin group의 bit 순서를 뒤집어야 하면 `*_S` pin-group define을 사용합니다.

필수 `compatible`은 TDA19971의 `nxp,tda19971` 또는 TDA19973의 `nxp,tda19973`입니다. `reg`는 I2C slave address, `interrupts`는 interrupt number입니다. `DOVDD-supply`, `DVDD-supply`, `AVDD-supply`는 각각 digital I/O, digital core, analog supply이며 `nxp,vidout-portcfg`는 VP output pin과 pin group의 mapping pair 배열입니다.

TDA1997x pin group mapping
HDMI pixel formatY / CbCr 또는 RGB component
Chip VP output register4-bit pin group
nxp,vidout-portcfg pair선택적 *_S bit swap
SoC CSI_DATA pinsParallel capture bus

Chip VP register의 4-bit slice를 SoC capture bus의 4-bit slice에 연결합니다.

Audio output과 parallel endpoint

38-55

선택적인 `nxp,audout-format`은 DAI bus format인 `i2s` 또는 `spdif`입니다. `nxp,audout-width`는 audio output data bus width 1~4, `nxp,audout-layout`은 0일 때 AP0만 사용하고 1일 때 AP0/AP1/AP2/AP3를 사용합니다. `nxp,audout-mclk-fs`는 stream rate와 codec mclk 사이의 multiplication factor입니다.

장치의 `port` node는 `Documentation/devicetree/bindings/media/video-interfaces.txt`에 따라 digital output video port용 endpoint child 하나를 포함해야 합니다. Parallel bus endpoint에서 `hsync-active`, `vsync-active`, `data-active`를 선택할 수 있으며 세 polarity의 기본값은 모두 active high입니다.

16-bit YUV422 semi-planar 예제

56-98

첫 예제는 VP[15:0]을 IMX6 CSI_DATA[19:4]에 연결해 16-bit YUV422를 전송하고, A_WS·AP0·A_CLK pin의 16-bit I2S layout 0과 128×fs mclk를 사용합니다. I2C 주소는 `0x48`, interrupt는 GPIO1 line 7 active-low이며 digital I/O 3.3V와 analog·core 1.8V supply를 연결합니다.

8bpp YUV422 semi-planar의 Y[11:4]와 CbCr[11:4]를 한 pixel clock cycle의 16-bit bus에 배치합니다. 네 mapping pair가 VP[15:0]을 4-bit씩 IMX6 CSI_DATA[19:4]에 연결하고 endpoint는 16-bit bus와 active-high HSYNC·VSYNC·data를 선언합니다.

hdmi-receiver@48 {
        compatible = "nxp,tda19971";
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_tda1997x>;
        reg = <0x48>;
        interrupt-parent = <&gpio1>;
        interrupts = <7 IRQ_TYPE_LEVEL_LOW>;
        DOVDD-supply = <&reg_3p3v>;
        AVDD-supply = <&reg_1p8v>;
        DVDD-supply = <&reg_1p8v>;
        /* audio */
        #sound-dai-cells = <0>;
        nxp,audout-format = "i2s";
        nxp,audout-layout = <0>;
        nxp,audout-width = <16>;
        nxp,audout-mclk-fs = <128>;
        /*
         * The 8bpp YUV422 semi-planar mode outputs CbCr[11:4]
         * and Y[11:4] across 16bits in the same pixclk cycle.
         */
        nxp,vidout-portcfg =
                /* Y[11:8]<->VP[15:12]<->CSI_DATA[19:16] */
                < TDA1997X_VP24_V15_12 TDA1997X_G_Y_11_8 >,
                /* Y[7:4]<->VP[11:08]<->CSI_DATA[15:12] */
                < TDA1997X_VP24_V11_08 TDA1997X_G_Y_7_4 >,
                /* CbCc[11:8]<->VP[07:04]<->CSI_DATA[11:8] */
                < TDA1997X_VP24_V07_04 TDA1997X_R_CR_CBCR_11_8 >,
                /* CbCr[7:4]<->VP[03:00]<->CSI_DATA[7:4] */
                < TDA1997X_VP24_V03_00 TDA1997X_R_CR_CBCR_7_4 >;

        port {
                tda1997x_to_ipu1_csi0_mux: endpoint {
                        remote-endpoint = <&ipu1_csi0_mux_from_parallel_sensor>;
                        bus-width = <16>;
                        hsync-active = <1>;
                        vsync-active = <1>;
                        data-active = <1>;
                };
        };
};

두 번째 8-bit BT656 표기 예제

99-140

두 번째 예제의 설명은 VP[15:8]을 IMX6 CSI_DATA[19:12]에 연결하는 8-bit BT656과 같은 16-bit I2S layout을 말합니다. 그러나 이어지는 원문 DTS와 주석은 첫 예제와 동일하게 16-bit YUV422 semi-planar mapping 네 쌍과 `bus-width = <16>`을 담고 있습니다. 이 불일치는 수정하지 않고 원문 그대로 보존합니다.

hdmi-receiver@48 {
        compatible = "nxp,tda19971";
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_tda1997x>;
        reg = <0x48>;
        interrupt-parent = <&gpio1>;
        interrupts = <7 IRQ_TYPE_LEVEL_LOW>;
        DOVDD-supply = <&reg_3p3v>;
        AVDD-supply = <&reg_1p8v>;
        DVDD-supply = <&reg_1p8v>;
        /* audio */
        #sound-dai-cells = <0>;
        nxp,audout-format = "i2s";
        nxp,audout-layout = <0>;
        nxp,audout-width = <16>;
        nxp,audout-mclk-fs = <128>;
        /*
         * The 8bpp YUV422 semi-planar mode outputs CbCr[11:4]
         * and Y[11:4] across 16bits in the same pixclk cycle.
         */
        nxp,vidout-portcfg =
                /* Y[11:8]<->VP[15:12]<->CSI_DATA[19:16] */
                < TDA1997X_VP24_V15_12 TDA1997X_G_Y_11_8 >,
                /* Y[7:4]<->VP[11:08]<->CSI_DATA[15:12] */
                < TDA1997X_VP24_V11_08 TDA1997X_G_Y_7_4 >,
                /* CbCc[11:8]<->VP[07:04]<->CSI_DATA[11:8] */
                < TDA1997X_VP24_V07_04 TDA1997X_R_CR_CBCR_11_8 >,
                /* CbCr[7:4]<->VP[03:00]<->CSI_DATA[7:4] */
                < TDA1997X_VP24_V03_00 TDA1997X_R_CR_CBCR_7_4 >;

        port {
                tda1997x_to_ipu1_csi0_mux: endpoint {
                        remote-endpoint = <&ipu1_csi0_mux_from_parallel_sensor>;
                        bus-width = <16>;
                        hsync-active = <1>;
                        vsync-active = <1>;
                        data-active = <1>;
                };
        };
};

실제 8-bit BT656 two-cycle 예제

141-178

세 번째 예제도 VP[15:8]과 IMX6 CSI_DATA[19:12], 16-bit I2S layout 0, 128×fs audio clock을 사용합니다. 이 DTS는 8bpp BT656 YCbCr[11:4]를 8-bit bus에서 두 pixel clock cycle에 걸쳐 출력한다는 주석과 두 mapping pair를 명시합니다.

VP[15:12]에는 YCbCr[11:8], VP[11:8]에는 YCbCr[7:4]를 연결합니다. 다만 endpoint의 원문 `bus-width`는 여전히 16으로 기재되어 있으며 이 값 역시 원문 그대로 유지합니다.

hdmi-receiver@48 {
        compatible = "nxp,tda19971";
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_tda1997x>;
        reg = <0x48>;
        interrupt-parent = <&gpio1>;
        interrupts = <7 IRQ_TYPE_LEVEL_LOW>;
        DOVDD-supply = <&reg_3p3v>;
        AVDD-supply = <&reg_1p8v>;
        DVDD-supply = <&reg_1p8v>;
        /* audio */
        #sound-dai-cells = <0>;
        nxp,audout-format = "i2s";
        nxp,audout-layout = <0>;
        nxp,audout-width = <16>;
        nxp,audout-mclk-fs = <128>;
        /*
         * The 8bpp BT656 mode outputs YCbCr[11:4] across 8bits over
         * 2 pixclk cycles.
         */
        nxp,vidout-portcfg =
                /* YCbCr[11:8]<->VP[15:12]<->CSI_DATA[19:16] */
                < TDA1997X_VP24_V15_12 TDA1997X_R_CR_CBCR_11_8 >,
                /* YCbCr[7:4]<->VP[11:08]<->CSI_DATA[15:12] */
                < TDA1997X_VP24_V11_08 TDA1997X_R_CR_CBCR_7_4 >,

        port {
                tda1997x_to_ipu1_csi0_mux: endpoint {
                        remote-endpoint = <&ipu1_csi0_mux_from_parallel_sensor>;
                        bus-width = <16>;
                        hsync-active = <1>;
                        vsync-active = <1>;
                        data-active = <1>;
                };
        };
};