# 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
      required: false
      description: |
        Clock frequency the SPI peripheral is being driven at, in Hz.
    "#address-cells":
      required: true
      const: 1
    "#size-cells":
      required: true
      const: 0
    label:
      required: true
    cs-gpios:
      type: phandle-array
      required: false
      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.
