Commit 0ff4827e authored by Krzysztof Kozlowski's avatar Krzysztof Kozlowski Committed by Lee Jones
Browse files

spi: dt-bindings: samsung: Convert to dtschema



Convert the Samsung SoC (S3C24xx, S3C64xx, S5Pv210, Exynos) SPI
controller bindings to DT schema format.

The conversion also drops requirement from providing controller-data and
its data for each of SPI peripheral device nodes.  The dtschema cannot
express this and the requirement is being relaxed in the driver now.

Signed-off-by: default avatarKrzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
Reviewed-by: default avatarSam Protsenko <semen.protsenko@linaro.org>
Acked-by: default avatarPratyush Yadav <p.yadav@ti.com>
Reviewed-by: default avatarMark Brown <broonie@kernel.org>
Reviewed-by: default avatarRob Herring <robh@kernel.org>
Signed-off-by: default avatarLee Jones <lee.jones@linaro.org>
Link: https://lore.kernel.org/r/20220124082347.32747-2-krzysztof.kozlowski@canonical.com
parent 04732ff2
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -22,7 +22,7 @@ description: |

  [1] Documentation/devicetree/bindings/serial/samsung_uart.yaml
  [2] Documentation/devicetree/bindings/i2c/i2c-exynos5.txt
  [3] Documentation/devicetree/bindings/spi/spi-samsung.txt
  [3] Documentation/devicetree/bindings/spi/samsung,spi.yaml

properties:
  $nodename:
+33 −0
Original line number Diff line number Diff line
# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/spi/samsung,spi-peripheral-props.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Peripheral-specific properties for Samsung S3C/S5P/Exynos SoC SPI controller

maintainers:
  - Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>

description:
  See spi-peripheral-props.yaml for more info.

properties:
  controller-data:
    type: object
    additionalProperties: false

    properties:
      samsung,spi-feedback-delay:
        description: |
          The sampling phase shift to be applied on the miso line (to account
          for any lag in the miso line). Valid values:
           - 0: No phase shift.
           - 1: 90 degree phase shift sampling.
           - 2: 180 degree phase shift sampling.
           - 3: 270 degree phase shift sampling.
        $ref: /schemas/types.yaml#/definitions/uint32
        enum: [0, 1, 2, 3]
        default: 0

additionalProperties: true
+187 −0
Original line number Diff line number Diff line
# 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 <krzysztof.kozlowski@canonical.com>

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:
          - samsung,s3c2443-spi # for S3C2443, S3C2416 and S3C2450
          - samsung,s3c6410-spi
          - samsung,s5pv210-spi # for S5PV210 and S5PC110
          - samsung,exynos5433-spi
      - const: samsung,exynos7-spi
        deprecated: true

  clocks:
    minItems: 2
    maxItems: 3

  clock-names:
    minItems: 2
    maxItems: 3

  cs-gpios: true

  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
  - dmas
  - dma-names
  - interrupts
  - reg

allOf:
  - $ref: spi-controller.yaml#
  - if:
      properties:
        compatible:
          contains:
            const: samsung,exynos5433-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>;
            };
        };
    };
+1 −0
Original line number Diff line number Diff line
@@ -85,5 +85,6 @@ properties:
# The controller specific properties go here.
allOf:
  - $ref: cdns,qspi-nor-peripheral-props.yaml#
  - $ref: samsung,spi-peripheral-props.yaml#

additionalProperties: true
+0 −122
Original line number Diff line number Diff line
* Samsung SPI Controller

The Samsung SPI controller is used to interface with various devices such as flash
and display controllers using the SPI communication interface.

Required SoC Specific Properties:

- compatible: should be one of the following.
    - samsung,s3c2443-spi: for s3c2443, s3c2416 and s3c2450 platforms
    - samsung,s3c6410-spi: for s3c6410 platforms
    - samsung,s5pv210-spi: for s5pv210 and s5pc110 platforms
    - samsung,exynos5433-spi: for exynos5433 compatible controllers
    - samsung,exynos7-spi: for exynos7 platforms <DEPRECATED>

- reg: physical base address of the controller and length of memory mapped
  region.

- interrupts: The interrupt number to the cpu. The interrupt specifier format
  depends on the interrupt controller.

- dmas : Two or more DMA channel specifiers following the convention outlined
  in bindings/dma/dma.txt

- dma-names: Names for the dma channels. There must be at least one channel
  named "tx" for transmit and named "rx" for receive.

- clocks: specifies the clock IDs provided to the SPI controller; they are
  required for interacting with the controller itself, for synchronizing the bus
  and as I/O clock (the latter is required by exynos5433 and exynos7).

- clock-names: string names of the clocks in the 'clocks' property; for all the
  the devices the names must be "spi", "spi_busclkN" (where N is determined by
  "samsung,spi-src-clk"), while Exynos5433 should specify a third clock
  "spi_ioclk" for the I/O clock.

Required Board Specific Properties:

- #address-cells: should be 1.
- #size-cells: should be 0.

Optional Board Specific Properties:

- samsung,spi-src-clk: 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.

- num-cs: Specifies the number of chip select lines supported. If
  not specified, the default number of chip select lines is set to 1.

- cs-gpios: should specify GPIOs used for chipselects (see spi-bus.txt)

- no-cs-readback: the CS line is disconnected, therefore the device should not
  operate based on CS signalling.

SPI Controller specific data in SPI slave nodes:

- The spi slave nodes should provide the following information which is required
  by the spi controller.

  - samsung,spi-feedback-delay: The sampling phase shift to be applied on the
    miso line (to account for any lag in the miso line). The following are the
    valid values.

      - 0: No phase shift.
      - 1: 90 degree phase shift sampling.
      - 2: 180 degree phase shift sampling.
      - 3: 270 degree phase shift sampling.

Aliases:

- 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.


Example:

- SoC Specific Portion:

	spi_0: spi@12d20000 {
		compatible = "samsung,exynos4210-spi";
		reg = <0x12d20000 0x100>;
		interrupts = <0 66 0>;
		dmas = <&pdma0 5
			&pdma0 4>;
		dma-names = "tx", "rx";
		#address-cells = <1>;
		#size-cells = <0>;
	};

- Board Specific Portion:

	spi_0: spi@12d20000 {
		#address-cells = <1>;
		#size-cells = <0>;
		pinctrl-names = "default";
		pinctrl-0 = <&spi0_bus>;
		cs-gpios = <&gpa2 5 0>;

		w25q80bw@0 {
			#address-cells = <1>;
			#size-cells = <1>;
			compatible = "w25x80";
			reg = <0>;
			spi-max-frequency = <10000>;

			controller-data {
				samsung,spi-feedback-delay = <0>;
			};

			partition@0 {
				label = "U-Boot";
				reg = <0x0 0x40000>;
				read-only;
			};

			partition@40000 {
				label = "Kernel";
				reg = <0x40000 0xc0000>;
			};
		};
	};
Loading