요약·해설과 원문, 전문 번역을 서로 분리했습니다. API 이름, symbol, source path는 원문 표기를 사용합니다.
1. 요약·해설
원문의 핵심 논리와 kernel programming 관점의 보충 설명입니다. 아래의 전문 번역과는 별도로 작성했습니다.
2. 영어 원문 전체
번역 기준이 된 Linux v6.18.37 원문입니다. 줄 번호는 이 버전의 파일 좌표입니다.
원문 전체 펼치기
# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/spi/samsung,spi.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#
title: Samsung S3C/S5P/Exynos SoC SPI controller
maintainers:
- Krzysztof Kozlowski <[email protected]>
description:
All the SPI controller nodes should be represented in the aliases node using
the following format 'spi{n}' where n is a unique number for the alias.
properties:
compatible:
oneOf:
- enum:
- google,gs101-spi
- samsung,s3c6410-spi
- samsung,s5pv210-spi # for S5PV210 and S5PC110
- samsung,exynos4210-spi
- samsung,exynos5433-spi
- samsung,exynos850-spi
- samsung,exynosautov9-spi
- tesla,fsd-spi
- items:
- enum:
- samsung,exynos8895-spi
- samsung,exynosautov920-spi
- const: samsung,exynos850-spi
- const: samsung,exynos7-spi
deprecated: true
clocks:
minItems: 2
maxItems: 3
clock-names:
minItems: 2
maxItems: 3
dmas:
minItems: 2
maxItems: 2
dma-names:
items:
- const: tx
- const: rx
interrupts:
maxItems: 1
no-cs-readback:
description:
The CS line is disconnected, therefore the device should not operate
based on CS signalling.
type: boolean
num-cs:
minimum: 1
maximum: 4
default: 1
samsung,spi-src-clk:
description:
If the spi controller includes a internal clock mux to select the clock
source for the spi bus clock, this property can be used to indicate the
clock to be used for driving the spi bus clock. If not specified, the
clock number 0 is used as default.
$ref: /schemas/types.yaml#/definitions/uint32
default: 0
reg:
maxItems: 1
required:
- compatible
- clocks
- clock-names
- interrupts
- reg
allOf:
- $ref: spi-controller.yaml#
- if:
properties:
compatible:
contains:
enum:
- samsung,exynos5433-spi
- samsung,exynosautov9-spi
then:
properties:
clocks:
minItems: 3
maxItems: 3
clock-names:
items:
- const: spi
- enum:
- spi_busclk0
- spi_busclk1
- spi_busclk2
- spi_busclk3
- const: spi_ioclk
else:
properties:
clocks:
minItems: 2
maxItems: 2
clock-names:
items:
- const: spi
- enum:
- spi_busclk0
- spi_busclk1
- spi_busclk2
- spi_busclk3
unevaluatedProperties: false
examples:
- |
#include <dt-bindings/clock/exynos5433.h>
#include <dt-bindings/clock/samsung,s2mps11.h>
#include <dt-bindings/interrupt-controller/arm-gic.h>
#include <dt-bindings/gpio/gpio.h>
spi@14d30000 {
compatible = "samsung,exynos5433-spi";
reg = <0x14d30000 0x100>;
interrupts = <GIC_SPI 433 IRQ_TYPE_LEVEL_HIGH>;
dmas = <&pdma0 11>, <&pdma0 10>;
dma-names = "tx", "rx";
#address-cells = <1>;
#size-cells = <0>;
clocks = <&cmu_peric CLK_PCLK_SPI1>,
<&cmu_peric CLK_SCLK_SPI1>,
<&cmu_peric CLK_SCLK_IOCLK_SPI1>;
clock-names = "spi",
"spi_busclk0",
"spi_ioclk";
samsung,spi-src-clk = <0>;
pinctrl-names = "default";
pinctrl-0 = <&spi1_bus>;
num-cs = <1>;
cs-gpios = <&gpd6 3 GPIO_ACTIVE_HIGH>;
audio-codec@0 {
compatible = "wlf,wm5110";
reg = <0x0>;
spi-max-frequency = <20000000>;
interrupt-parent = <&gpa0>;
interrupts = <4 IRQ_TYPE_NONE>;
clocks = <&pmu_system_controller 0>,
<&s2mps13_osc S2MPS11_CLK_BT>;
clock-names = "mclk1", "mclk2";
gpio-controller;
#gpio-cells = <2>;
interrupt-controller;
#interrupt-cells = <2>;
wlf,micd-detect-debounce = <300>;
wlf,micd-bias-start-time = <0x1>;
wlf,micd-rate = <0x7>;
wlf,micd-dbtime = <0x2>;
wlf,micd-force-micbias;
wlf,micd-configs = <0x0 1 0>;
wlf,hpdet-channel = <1>;
wlf,gpsw = <0x1>;
wlf,inmode = <2 0 2 0>;
wlf,reset = <&gpc0 7 GPIO_ACTIVE_HIGH>;
wlf,ldoena = <&gpf0 0 GPIO_ACTIVE_HIGH>;
/* core supplies */
AVDD-supply = <&ldo18_reg>;
DBVDD1-supply = <&ldo18_reg>;
CPVDD-supply = <&ldo18_reg>;
DBVDD2-supply = <&ldo18_reg>;
DBVDD3-supply = <&ldo18_reg>;
SPKVDDL-supply = <&ldo18_reg>;
SPKVDDR-supply = <&ldo18_reg>;
controller-data {
samsung,spi-feedback-delay = <0>;
};
};
};
3. 한국어 전문 번역
영어 원문의 문단 순서와 의미를 유지한 전체 번역입니다. 코드, 함수명, symbol과 URL은 원문 표기를 유지합니다.
Samsung S3C/S5P/Exynos SPI schema
1-15이 GPL-2.0 또는 BSD-2-Clause YAML schema는 Samsung S3C/S5P/Exynos SoC SPI controller를 정의합니다. Schema ID는 `http://devicetree.org/schemas/spi/samsung,spi.yaml#`, maintainer는 Krzysztof Kozlowski입니다.
모든 SPI controller node는 aliases node에 `spi{n}` 형식으로 표시해야 하며 `n`은 alias마다 고유한 번호입니다.
SoC compatible과 fallback
16-35단독 compatible은 `google,gs101-spi`, `samsung,s3c6410-spi`, S5PV210/S5PC110용 `samsung,s5pv210-spi`, `samsung,exynos4210-spi`, `samsung,exynos5433-spi`, `samsung,exynos850-spi`, `samsung,exynosautov9-spi`, `tesla,fsd-spi` 중 하나입니다.
`samsung,exynos8895-spi`와 `samsung,exynosautov920-spi`는 첫 항목에 두고 둘째 항목에 fallback `samsung,exynos850-spi`를 둡니다. 단독 `samsung,exynos7-spi`는 deprecated입니다.
Clock, DMA와 chip-select
36-65`clocks`와 `clock-names`는 최소 두 항목, 최대 세 항목입니다. 실제 항목 수와 이름은 뒤의 SoC별 조건에서 정합니다.
`dmas`는 정확히 두 항목이고 `dma-names`는 `tx`, `rx` 순서입니다. `interrupts`는 최대 한 항목입니다.
Boolean `no-cs-readback`은 CS line이 연결되지 않아 장치가 CS signalling에 기반해 동작하면 안 됨을 나타냅니다. `num-cs` 범위는 1~4이고 기본값은 1입니다.
SPI source clock과 공통 필수 속성
66-85Controller에 SPI bus clock source를 선택하는 internal clock mux가 있으면 `samsung,spi-src-clk`로 구동 clock 번호를 지정할 수 있습니다. 지정하지 않으면 clock 0이 기본값입니다. `reg`는 최대 한 항목입니다.
필수 속성은 `compatible`, `clocks`, `clock-names`, `interrupts`, `reg`입니다.
Exynos5433·AutoV9 세 clock 조건
86-108공통 `spi-controller.yaml#`을 상속합니다. Compatible에 `samsung,exynos5433-spi` 또는 `samsung,exynosautov9-spi`가 포함되면 `clocks`는 정확히 세 항목입니다.
이 두 controller의 `clock-names`는 첫째 `spi`, 둘째 `spi_busclk0`·`spi_busclk1`·`spi_busclk2`·`spi_busclk3` 중 하나, 셋째 `spi_ioclk` 순서입니다.
그 밖의 SoC 두 clock 조건
109-124위 두 compatible이 아니면 `clocks`는 정확히 두 항목입니다. `clock-names`는 첫째 `spi`, 둘째 `spi_busclk0`·`spi_busclk1`·`spi_busclk2`·`spi_busclk3` 중 하나입니다.
`unevaluatedProperties: false`로 이 schema와 공통 SPI schema에서 평가되지 않은 추가 속성을 금지합니다.
Exynos5433 SPI와 WM5110 codec 예제
125-194예제의 `spi@14d30000`은 `samsung,exynos5433-spi`, GIC SPI 433, PDMA0의 TX/RX channel 11·10과 `spi`, `spi_busclk0`, `spi_ioclk` 세 clock을 사용합니다. Source clock은 0이고 chip select 하나를 GPIO active-high로 구동합니다.
Chip select 0의 `wlf,wm5110` audio codec은 최대 20MHz, 두 clock, GPIO·interrupt controller 기능, microphone detection과 headphone 설정, reset·LDO enable GPIO 및 core supply들을 지정합니다. `controller-data`의 `samsung,spi-feedback-delay`는 0입니다.
#include <dt-bindings/clock/exynos5433.h>
#include <dt-bindings/clock/samsung,s2mps11.h>
#include <dt-bindings/interrupt-controller/arm-gic.h>
#include <dt-bindings/gpio/gpio.h>
spi@14d30000 {
compatible = "samsung,exynos5433-spi";
reg = <0x14d30000 0x100>;
interrupts = <GIC_SPI 433 IRQ_TYPE_LEVEL_HIGH>;
dmas = <&pdma0 11>, <&pdma0 10>;
dma-names = "tx", "rx";
#address-cells = <1>;
#size-cells = <0>;
clocks = <&cmu_peric CLK_PCLK_SPI1>,
<&cmu_peric CLK_SCLK_SPI1>,
<&cmu_peric CLK_SCLK_IOCLK_SPI1>;
clock-names = "spi",
"spi_busclk0",
"spi_ioclk";
samsung,spi-src-clk = <0>;
pinctrl-names = "default";
pinctrl-0 = <&spi1_bus>;
num-cs = <1>;
cs-gpios = <&gpd6 3 GPIO_ACTIVE_HIGH>;
audio-codec@0 {
compatible = "wlf,wm5110";
reg = <0x0>;
spi-max-frequency = <20000000>;
interrupt-parent = <&gpa0>;
interrupts = <4 IRQ_TYPE_NONE>;
clocks = <&pmu_system_controller 0>,
<&s2mps13_osc S2MPS11_CLK_BT>;
clock-names = "mclk1", "mclk2";
gpio-controller;
#gpio-cells = <2>;
interrupt-controller;
#interrupt-cells = <2>;
wlf,micd-detect-debounce = <300>;
wlf,micd-bias-start-time = <0x1>;
wlf,micd-rate = <0x7>;
wlf,micd-dbtime = <0x2>;
wlf,micd-force-micbias;
wlf,micd-configs = <0x0 1 0>;
wlf,hpdet-channel = <1>;
wlf,gpsw = <0x1>;
wlf,inmode = <2 0 2 0>;
wlf,reset = <&gpc0 7 GPIO_ACTIVE_HIGH>;
wlf,ldoena = <&gpf0 0 GPIO_ACTIVE_HIGH>;
/* core supplies */
AVDD-supply = <&ldo18_reg>;
DBVDD1-supply = <&ldo18_reg>;
CPVDD-supply = <&ldo18_reg>;
DBVDD2-supply = <&ldo18_reg>;
DBVDD3-supply = <&ldo18_reg>;
SPKVDDL-supply = <&ldo18_reg>;
SPKVDDR-supply = <&ldo18_reg>;
controller-data {
samsung,spi-feedback-delay = <0>;
};
};
};
요약과 해설
samsung,spi.yaml:1-194Samsung SPI의 SoC별 compatible, clock 조건, DMA·chip-select와 codec 예제를 설명합니다. 접을 수 있는 영어 원문 전체와 줄 좌표를 보존하고, 한국어 전문 번역에서는 compatible·property·phandle·interrupt·clock/DMA·chip-select 순서·수치·조건부 제약·예제 코드를 원형대로 유지합니다.