# Copyright (c) 2018, I-SENSE group of ICCS
# SPDX-License-Identifier: Apache-2.0

# Common fields for SPI controllers

include: base.yaml

bus: spi

properties:
  clock-frequency:
    type: int
    description: |
      Clock frequency the SPI peripheral is being driven at, in Hz.
  "#address-cells":
    required: true
    const: 1
  "#size-cells":
    required: true
    const: 0
  cs-gpios:
    type: phandle-array
    description: |
      An array of chip select GPIOs to use. Each element
      in the array specifies a GPIO. The index in the array
      corresponds to the child node that the CS gpio controls.

      Example:

        spi@... {
                cs-gpios = <&gpio0 23 GPIO_ACTIVE_LOW>,
                              <&gpio1 10 GPIO_ACTIVE_LOW>,
                              ...;

                spi-device@0 {
                        reg = <0>;
                        ...
                };
                spi-device@1 {
                        reg = <1>;
                        ...
                };
                ...
        };

      The child node "spi-device@0" specifies a SPI device with
      chip select controller gpio0, pin 23, and devicetree
      GPIO flags GPIO_ACTIVE_LOW. Similarly, "spi-device@1" has CS GPIO
      controller gpio1, pin 10, and flags GPIO_ACTIVE_LOW. Additional
      devices can be configured in the same way.

      If unsure about the flags cell, GPIO_ACTIVE_LOW is generally a safe
      choice for a typical "CSn" pin. GPIO_ACTIVE_HIGH may be used if
      intervening hardware inverts the signal to the peripheral device or
      the line itself is active high.

      If this property is not defined, no chip select GPIOs are set.
      SPI controllers with dedicated CS pins do not need to define
      the cs-gpios property.
