Documentation / devicetree / bindings / gpio / nxp,pcf8575.yaml


Based on kernel version 6.15. Page generated on 2025-05-29 09:08 EST.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144
# 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-line-names:
    minItems: 1
    maxItems: 16

  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

  reset-gpios:
    maxItems: 1
    description:
      GPIO controlling the (reset active LOW) RESET# pin.
 
      The active polarity of the GPIO must translate to the low state of the
      RESET# pin on the IC, i.e. if a GPIO is directly routed to the RESET# pin
      without any inverter, GPIO_ACTIVE_LOW is expected.
 
      Performing a reset makes all lines initialized to their input (pulled-up)
      state.

allOf:
  - if:
      properties:
        compatible:
          not:
            contains:
              enum:
                - nxp,pca9670
                - nxp,pca9671
                - nxp,pca9672
                - nxp,pca9673
    then:
      properties:
        reset-gpios: false
 
  # lines-initial-states XOR reset-gpios
  # Performing a reset reinitializes all lines to a known state which
  # may not match passed lines-initial-states
  - if:
      required:
        - lines-initial-states
    then:
      properties:
        reset-gpios: false

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>;
            };
    };