요약·해설과 원문, 전문 번역을 서로 분리했습니다. API 이름, symbol, source path는 원문 표기를 사용합니다.
1. 요약·해설
원문의 핵심 논리와 kernel programming 관점의 보충 설명입니다. 아래의 전문 번역과는 별도로 작성했습니다.
2. 영어 원문 전체
번역 기준이 된 Linux v6.18.37 원문입니다. 줄 번호는 이 버전의 파일 좌표입니다.
원문 전체 펼치기
Texas Instruments OMAP Display Subsystem
========================================
Generic Description
-------------------
This document is a generic description of the OMAP Display Subsystem bindings.
Binding details for each OMAP SoC version are described in respective binding
documentation.
The OMAP Display Subsystem (DSS) hardware consists of DSS Core, DISPC module and
a number of encoder modules. All DSS versions contain DSS Core and DISPC, but
the encoder modules vary.
The DSS Core is the parent of the other DSS modules, and manages clock routing,
integration to the SoC, etc.
DISPC is the display controller, which reads pixels from the memory and outputs
a RGB pixel stream to encoders.
The encoder modules encode the received RGB pixel stream to a video output like
HDMI, MIPI DPI, etc.
Video Ports
-----------
The DSS Core and the encoders have video port outputs. The structure of the
video ports is described in Documentation/devicetree/bindings/graph.txt,
and the properties for the ports and endpoints for each encoder are
described in the SoC's DSS binding documentation.
The video ports are used to describe the connections to external hardware, like
panels or external encoders.
Aliases
-------
The board dts file may define aliases for displays to assign "displayX" style
name for each display. If no aliases are defined, a semi-random number is used
for the display.
Example
-------
A shortened example of the DSS description for OMAP4, with non-relevant parts
removed, defined in omap4.dtsi:
dss: dss@58000000 {
compatible = "ti,omap4-dss";
reg = <0x58000000 0x80>;
status = "disabled";
ti,hwmods = "dss_core";
clocks = <&dss_dss_clk>;
clock-names = "fck";
#address-cells = <1>;
#size-cells = <1>;
ranges;
dispc@58001000 {
compatible = "ti,omap4-dispc";
reg = <0x58001000 0x1000>;
interrupts = <GIC_SPI 25 IRQ_TYPE_LEVEL_HIGH>;
ti,hwmods = "dss_dispc";
clocks = <&dss_dss_clk>;
clock-names = "fck";
};
hdmi: encoder@58006000 {
compatible = "ti,omap4-hdmi";
reg = <0x58006000 0x200>,
<0x58006200 0x100>,
<0x58006300 0x100>,
<0x58006400 0x1000>;
reg-names = "wp", "pll", "phy", "core";
interrupts = <GIC_SPI 101 IRQ_TYPE_LEVEL_HIGH>;
status = "disabled";
ti,hwmods = "dss_hdmi";
clocks = <&dss_48mhz_clk>, <&dss_sys_clk>;
clock-names = "fck", "sys_clk";
};
};
A shortened example of the board description for OMAP4 Panda board, defined in
omap4-panda.dts.
The Panda board has a DVI and a HDMI connector, and the board contains a TFP410
chip (MIPI DPI to DVI encoder) and a TPD12S015 chip (HDMI ESD protection & level
shifter). The video pipelines for the connectors are formed as follows:
DSS Core --(MIPI DPI)--> TFP410 --(DVI)--> DVI Connector
OMAP HDMI --(HDMI)--> TPD12S015 --(HDMI)--> HDMI Connector
/ {
aliases {
display0 = &dvi0;
display1 = &hdmi0;
};
tfp410: encoder@0 {
compatible = "ti,tfp410";
gpios = <&gpio1 0 GPIO_ACTIVE_LOW>; /* 0, power-down */
pinctrl-names = "default";
pinctrl-0 = <&tfp410_pins>;
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
tfp410_in: endpoint@0 {
remote-endpoint = <&dpi_out>;
};
};
port@1 {
reg = <1>;
tfp410_out: endpoint@0 {
remote-endpoint = <&dvi_connector_in>;
};
};
};
};
dvi0: connector@0 {
compatible = "dvi-connector";
label = "dvi";
i2c-bus = <&i2c3>;
port {
dvi_connector_in: endpoint {
remote-endpoint = <&tfp410_out>;
};
};
};
tpd12s015: encoder@1 {
compatible = "ti,tpd12s015";
pinctrl-names = "default";
pinctrl-0 = <&tpd12s015_pins>;
gpios = <&gpio2 28 GPIO_ACTIVE_HIGH>, /* 60, CT CP HPD */
<&gpio2 9 GPIO_ACTIVE_HIGH>, /* 41, LS OE */
<&gpio2 31 GPIO_ACTIVE_HIGH>; /* 63, HPD */
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
tpd12s015_in: endpoint@0 {
remote-endpoint = <&hdmi_out>;
};
};
port@1 {
reg = <1>;
tpd12s015_out: endpoint@0 {
remote-endpoint = <&hdmi_connector_in>;
};
};
};
};
hdmi0: connector@1 {
compatible = "hdmi-connector";
label = "hdmi";
port {
hdmi_connector_in: endpoint {
remote-endpoint = <&tpd12s015_out>;
};
};
};
};
&dss {
status = "ok";
pinctrl-names = "default";
pinctrl-0 = <&dss_dpi_pins>;
port {
dpi_out: endpoint {
remote-endpoint = <&tfp410_in>;
data-lines = <24>;
};
};
};
&hdmi {
status = "ok";
vdda-supply = <&vdac>;
pinctrl-names = "default";
pinctrl-0 = <&dss_hdmi_pins>;
port {
hdmi_out: endpoint {
remote-endpoint = <&tpd12s015_in>;
};
};
};
3. 한국어 전문 번역
영어 원문의 문단 순서와 의미를 유지한 전체 번역입니다. 코드, 함수명, symbol과 URL은 원문 표기를 유지합니다.
OMAP Display Subsystem 공통 구조
1-23Texas Instruments OMAP Display Subsystem 바인딩의 공통 설명입니다. 각 OMAP SoC version의 세부 사항은 해당 version별 binding 문서에서 정의합니다.
OMAP DSS hardware는 DSS Core, DISPC module과 여러 encoder module로 구성됩니다. 모든 DSS version에는 DSS Core와 DISPC가 있지만 encoder 종류는 version마다 다릅니다.
DSS Core는 다른 DSS module의 parent이며 clock routing과 SoC integration 등을 관리합니다. DISPC는 memory에서 pixel을 읽어 RGB pixel stream을 encoder로 출력하는 display controller입니다.
Encoder module은 받은 RGB pixel stream을 HDMI, MIPI DPI 같은 video output 형식으로 encode합니다.
DSS Core가 clock과 integration을 관리하고 DISPC pixel stream을 encoder가 외부 video 형식으로 변환합니다.
Video port와 display alias
24-41DSS Core와 encoder에는 video output port가 있습니다. Port 구조는 `Documentation/devicetree/bindings/graph.txt`를 따르고, 각 encoder의 port 및 endpoint 속성은 SoC별 DSS binding 문서에서 설명합니다.
Video port는 panel이나 외부 encoder 같은 external hardware와의 연결을 표현합니다.
Board DTS는 각 display에 `displayX` 형식 이름을 부여하는 alias를 정의할 수 있습니다. Alias가 없으면 display 번호는 반무작위로 정해집니다.
OMAP4 SoC DSS 예제
42-82비관련 부분을 제거한 `omap4.dtsi` 예제입니다. DSS core는 `ti,omap4-dss`, functional clock, address/size cell과 빈 `ranges`를 선언하고 기본 상태를 `disabled`로 둡니다.
Child DISPC는 GIC interrupt 25와 `dss_dispc` hwmod를 사용합니다. HDMI encoder는 `wp`, `pll`, `phy`, `core`의 네 register 영역, GIC interrupt 101, `fck`와 `sys_clk`를 사용합니다.
dss: dss@58000000 {
compatible = "ti,omap4-dss";
reg = <0x58000000 0x80>;
status = "disabled";
ti,hwmods = "dss_core";
clocks = <&dss_dss_clk>;
clock-names = "fck";
#address-cells = <1>;
#size-cells = <1>;
ranges;
dispc@58001000 {
compatible = "ti,omap4-dispc";
reg = <0x58001000 0x1000>;
interrupts = <GIC_SPI 25 IRQ_TYPE_LEVEL_HIGH>;
ti,hwmods = "dss_dispc";
clocks = <&dss_dss_clk>;
clock-names = "fck";
};
hdmi: encoder@58006000 {
compatible = "ti,omap4-hdmi";
reg = <0x58006000 0x200>,
<0x58006200 0x100>,
<0x58006300 0x100>,
<0x58006400 0x1000>;
reg-names = "wp", "pll", "phy", "core";
interrupts = <GIC_SPI 101 IRQ_TYPE_LEVEL_HIGH>;
status = "disabled";
ti,hwmods = "dss_hdmi";
clocks = <&dss_48mhz_clk>, <&dss_sys_clk>;
clock-names = "fck", "sys_clk";
};
};
Panda board의 DVI와 HDMI pipeline
83-92`omap4-panda.dts`의 축약 board 예제입니다. Panda board에는 DVI와 HDMI connector가 있고, MIPI DPI-to-DVI encoder인 TFP410과 HDMI ESD protection/level shifter인 TPD12S015가 있습니다.
DVI 경로는 `DSS Core --(MIPI DPI)--> TFP410 --(DVI)--> DVI Connector`, HDMI 경로는 `OMAP HDMI --(HDMI)--> TPD12S015 --(HDMI)--> HDMI Connector`입니다.
두 connector가 서로 독립적인 encoder/protection 경로를 사용합니다.
Panda board DVI graph 예제
93-140Alias `display0`은 DVI connector, `display1`은 HDMI connector를 가리킵니다. TFP410의 input `port@0`은 `dpi_out`, output `port@1`은 `dvi_connector_in`과 상호 참조합니다.
DVI connector는 `dvi-connector`, label `dvi`, EDID용 `i2c3` bus를 사용하고 endpoint에서 `tfp410_out`을 가리킵니다.
/ {
aliases {
display0 = &dvi0;
display1 = &hdmi0;
};
tfp410: encoder@0 {
compatible = "ti,tfp410";
gpios = <&gpio1 0 GPIO_ACTIVE_LOW>; /* 0, power-down */
pinctrl-names = "default";
pinctrl-0 = <&tfp410_pins>;
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
tfp410_in: endpoint@0 {
remote-endpoint = <&dpi_out>;
};
};
port@1 {
reg = <1>;
tfp410_out: endpoint@0 {
remote-endpoint = <&dvi_connector_in>;
};
};
};
};
dvi0: connector@0 {
compatible = "dvi-connector";
label = "dvi";
i2c-bus = <&i2c3>;
port {
dvi_connector_in: endpoint {
remote-endpoint = <&tfp410_out>;
};
};
};
Panda board HDMI graph 예제
141-184TPD12S015 encoder는 `ti,tpd12s015`, default pinctrl과 CT CP HPD, LS OE, HPD의 active-high GPIO 세 개를 사용합니다. Input `port@0`은 `hdmi_out`, output `port@1`은 `hdmi_connector_in`과 연결됩니다.
HDMI connector는 `hdmi-connector`, label `hdmi`이며 endpoint에서 `tpd12s015_out`을 상호 참조합니다.
tpd12s015: encoder@1 {
compatible = "ti,tpd12s015";
pinctrl-names = "default";
pinctrl-0 = <&tpd12s015_pins>;
gpios = <&gpio2 28 GPIO_ACTIVE_HIGH>, /* 60, CT CP HPD */
<&gpio2 9 GPIO_ACTIVE_HIGH>, /* 41, LS OE */
<&gpio2 31 GPIO_ACTIVE_HIGH>; /* 63, HPD */
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
tpd12s015_in: endpoint@0 {
remote-endpoint = <&hdmi_out>;
};
};
port@1 {
reg = <1>;
tpd12s015_out: endpoint@0 {
remote-endpoint = <&hdmi_connector_in>;
};
};
};
};
hdmi0: connector@1 {
compatible = "hdmi-connector";
label = "hdmi";
port {
hdmi_connector_in: endpoint {
remote-endpoint = <&tpd12s015_out>;
};
};
};
};
DSS와 HDMI 활성화 예제
185-211`&dss`를 `ok` 상태로 활성화하고 default DPI pinctrl을 적용합니다. `dpi_out` endpoint는 `tfp410_in`을 가리키며 24개의 `data-lines`를 사용합니다.
`&hdmi`도 `ok`로 활성화하고 `vdac`을 `vdda-supply`로 연결한 뒤 HDMI pinctrl을 적용합니다. `hdmi_out` endpoint는 `tpd12s015_in`을 가리킵니다.
&dss {
status = "ok";
pinctrl-names = "default";
pinctrl-0 = <&dss_dpi_pins>;
port {
dpi_out: endpoint {
remote-endpoint = <&tfp410_in>;
data-lines = <24>;
};
};
};
&hdmi {
status = "ok";
vdda-supply = <&vdac>;
pinctrl-names = "default";
pinctrl-0 = <&dss_hdmi_pins>;
port {
hdmi_out: endpoint {
remote-endpoint = <&tpd12s015_in>;
};
};
};
요약과 해설
ti,omap-dss.txt:1-211DSS Core, DISPC, encoder와 external display pipeline을 설명합니다.