Commit d766dfee authored by Geert Uytterhoeven's avatar Geert Uytterhoeven Committed by Bartosz Golaszewski
Browse files

dt-bindings: gpio: pcf857x: Convert to json-schema



Convert the PCF857x-compatible I/O expanders Device Tree binding
documentation to json-schema.

Document missing compatible values, properties, and gpio hogs.

Signed-off-by: default avatarGeert Uytterhoeven <geert+renesas@glider.be>
Reviewed-by: default avatarRob Herring <robh@kernel.org>
Reviewed-by: default avatarLinus Walleij <linus.walleij@linaro.org>
Signed-off-by: default avatarBartosz Golaszewski <bgolaszewski@baylibre.com>
parent cdee1d62
Loading
Loading
Loading
Loading
+0 −69
Original line number Diff line number Diff line
* PCF857x-compatible I/O expanders

The PCF857x-compatible chips have "quasi-bidirectional" I/O lines that can be
driven high by a pull-up current source or driven low to ground. This combines
the direction and output level into a single bit per line, which can't be read
back. We can't actually know at initialization time whether a line is configured
(a) as output and driving the signal low/high, or (b) as input and reporting a
low/high value, without knowing the last value written since the chip came out
of reset (if any). The only reliable solution for setting up line direction is
thus to do it explicitly.

Required Properties:

  - compatible: should be one of the following.
    - "maxim,max7328": For the Maxim MAX7378
    - "maxim,max7329": For the Maxim MAX7329
    - "nxp,pca8574": For the NXP PCA8574
    - "nxp,pca8575": For the NXP PCA8575
    - "nxp,pca9670": For the NXP PCA9670
    - "nxp,pca9671": For the NXP PCA9671
    - "nxp,pca9672": For the NXP PCA9672
    - "nxp,pca9673": For the NXP PCA9673
    - "nxp,pca9674": For the NXP PCA9674
    - "nxp,pca9675": For the NXP PCA9675
    - "nxp,pcf8574": For the NXP PCF8574
    - "nxp,pcf8574a": For the NXP PCF8574A
    - "nxp,pcf8575": For the NXP PCF8575

  - reg: I2C slave address.

  - gpio-controller: Marks the device node as a gpio controller.
  - #gpio-cells: Should be 2. The first cell is the GPIO number and the second
    cell specifies GPIO flags, as defined in <dt-bindings/gpio/gpio.h>. Only the
    GPIO_ACTIVE_HIGH and GPIO_ACTIVE_LOW flags are supported.

Optional Properties:

  - lines-initial-states: Bitmask that specifies the initial state of each
  line. When a bit is set to zero, the corresponding line will be initialized to
  the input (pulled-up) state. When the  bit is set to one, the line will be
  initialized the low-level output state. If the property is not specified
  all lines will be initialized to the input state.

  The I/O expander can detect input state changes, and thus optionally act as
  an interrupt controller. When the expander interrupt line is connected all the
  following properties must be set. For more information please see the
  interrupt controller device tree bindings documentation available at
  Documentation/devicetree/bindings/interrupt-controller/interrupts.txt.

  - interrupt-controller: Identifies the node as an interrupt controller.
  - #interrupt-cells: Number of cells to encode an interrupt source, shall be 2.
  - interrupts: Interrupt specifier for the controllers interrupt.


Please refer to gpio.txt in this directory for details of the common GPIO
bindings used by client devices.

Example: PCF8575 I/O expander node

	pcf8575: gpio@20 {
		compatible = "nxp,pcf8575";
		reg = <0x20>;
		interrupt-parent = <&irqpin2>;
		interrupts = <3 0>;
		gpio-controller;
		#gpio-cells = <2>;
		interrupt-controller;
		#interrupt-cells = <2>;
	};
+103 −0
Original line number Diff line number Diff line
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/gpio/nxp,pcf8575.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: PCF857x-compatible I/O expanders

maintainers:
  - Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>

description:
  The PCF857x-compatible chips have "quasi-bidirectional" I/O lines that can be
  driven high by a pull-up current source or driven low to ground. This
  combines the direction and output level into a single bit per line, which
  can't be read back. We can't actually know at initialization time whether a
  line is configured (a) as output and driving the signal low/high, or (b) as
  input and reporting a low/high value, without knowing the last value written
  since the chip came out of reset (if any). The only reliable solution for
  setting up line direction is thus to do it explicitly.

properties:
  compatible:
    enum:
      - maxim,max7328
      - maxim,max7329
      - nxp,pca8574
      - nxp,pca8575
      - nxp,pca9670
      - nxp,pca9671
      - nxp,pca9672
      - nxp,pca9673
      - nxp,pca9674
      - nxp,pca9675
      - nxp,pcf8574
      - nxp,pcf8574a
      - nxp,pcf8575

  reg:
    maxItems: 1

  gpio-controller: true

  '#gpio-cells':
    const: 2
    description:
      The first cell is the GPIO number and the second cell specifies GPIO
      flags, as defined in <dt-bindings/gpio/gpio.h>. Only the GPIO_ACTIVE_HIGH
      and GPIO_ACTIVE_LOW flags are supported.

  lines-initial-states:
    $ref: /schemas/types.yaml#/definitions/uint32
    description:
      Bitmask that specifies the initial state of each line.
      When a bit is set to zero, the corresponding line will be initialized to
      the input (pulled-up) state.
      When the  bit is set to one, the line will be initialized to the
      low-level output state.
      If the property is not specified all lines will be initialized to the
      input state.

  interrupts:
    maxItems: 1

  interrupt-controller: true

  '#interrupt-cells':
    const: 2

  wakeup-source: true

patternProperties:
  "^(.+-hog(-[0-9]+)?)$":
    type: object

    required:
      - gpio-hog

required:
  - compatible
  - reg
  - gpio-controller
  - '#gpio-cells'

additionalProperties: false

examples:
  - |
    i2c {
            #address-cells = <1>;
            #size-cells = <0>;

            pcf8575: gpio@20 {
                    compatible = "nxp,pcf8575";
                    reg = <0x20>;
                    interrupt-parent = <&irqpin2>;
                    interrupts = <3 0>;
                    gpio-controller;
                    #gpio-cells = <2>;
                    interrupt-controller;
                    #interrupt-cells = <2>;
            };
    };