# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/gpio/gpio-latch.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: GPIO latch controller

maintainers:
  - Sascha Hauer <s.hauer@pengutronix.de>

description: |
  This binding describes a GPIO multiplexer based on latches connected to
  other GPIOs, like this:

  CLK0 ----------------------.        ,--------.
  CLK1 -------------------.  `--------|>    #0 |
                          |           |        |
  OUT0 ----------------+--|-----------|D0    Q0|-----|<
  OUT1 --------------+-|--|-----------|D1    Q1|-----|<
  OUT2 ------------+-|-|--|-----------|D2    Q2|-----|<
  OUT3 ----------+-|-|-|--|-----------|D3    Q3|-----|<
  OUT4 --------+-|-|-|-|--|-----------|D4    Q4|-----|<
  OUT5 ------+-|-|-|-|-|--|-----------|D5    Q5|-----|<
  OUT6 ----+-|-|-|-|-|-|--|-----------|D6    Q6|-----|<
  OUT7 --+-|-|-|-|-|-|-|--|-----------|D7    Q7|-----|<
         | | | | | | | |  |           `--------'
         | | | | | | | |  |
         | | | | | | | |  |           ,--------.
         | | | | | | | |  `-----------|>    #1 |
         | | | | | | | |              |        |
         | | | | | | | `--------------|D0    Q0|-----|<
         | | | | | | `----------------|D1    Q1|-----|<
         | | | | | `------------------|D2    Q2|-----|<
         | | | | `--------------------|D3    Q3|-----|<
         | | | `----------------------|D4    Q4|-----|<
         | | `------------------------|D5    Q5|-----|<
         | `--------------------------|D6    Q6|-----|<
         `----------------------------|D7    Q7|-----|<
                                      `--------'

  The number of clk-gpios and latched-gpios is not fixed. The actual number
  of number of latches and the number of inputs per latch is derived from
  the number of GPIOs given in the corresponding device tree properties.

properties:
  compatible:
    const: gpio-latch
  "#gpio-cells":
    const: 2

  clk-gpios:
    description: Array of GPIOs to be used to clock a latch

  latched-gpios:
    description: Array of GPIOs to be used as inputs per latch

  setup-duration-ns:
    description: Delay in nanoseconds to wait after the latch inputs have been
      set up

  clock-duration-ns:
    description: Delay in nanoseconds to wait between clock output changes

  gpio-controller: true

  gpio-line-names: true

required:
  - compatible
  - "#gpio-cells"
  - gpio-controller
  - clk-gpios
  - latched-gpios

additionalProperties: false

examples:
  - |
    gpio-latch {
        #gpio-cells = <2>;
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_di_do_leds>;
        compatible = "gpio-latch";
        gpio-controller;
        setup-duration-ns = <100>;
        clock-duration-ns = <100>;

        clk-gpios = <&gpio3 7 0>, <&gpio3 8 0>;
        latched-gpios = <&gpio3 21 0>, <&gpio3 22 0>,
                       <&gpio3 23 0>, <&gpio3 24 0>,
                       <&gpio3 25 0>, <&gpio3 26 0>,
                       <&gpio3 27 0>, <&gpio3 28 0>;
    };
