# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
%YAML 1.2
---
$id: http://devicetree.org/schemas/leds/nxp,pca955x.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: NXP PCA955X LED controllers

maintainers:
  - Nate Case <ncase@xes-inc.com>

description: |
  The PCA955x family of chips are I2C LED blinkers whose pins not used
  to control LEDs can be used as general purpose I/Os. The GPIO pins can
  be input or output, and output pins can also be pulse-width controlled.

  For more product information please see the link below:
  - https://www.nxp.com/docs/en/data-sheet/PCA9552.pdf

properties:
  compatible:
    enum:
      - nxp,pca9550
      - nxp,pca9551
      - nxp,pca9552
      - ibm,pca9552
      - nxp,pca9553

  reg:
    maxItems: 1

  "#address-cells":
    const: 1

  "#size-cells":
    const: 0

  gpio-controller: true

  gpio-line-names:
    minItems: 1
    maxItems: 16

  "#gpio-cells":
    const: 2

patternProperties:
  "^led@[0-9a-f]$":
    type: object
    $ref: common.yaml#
    unevaluatedProperties: false

    properties:
      reg:
        maxItems: 1
      type:
        description: |
          Output configuration, see include/dt-bindings/leds/leds-pca955x.h
        $ref: /schemas/types.yaml#/definitions/uint32
        default: 0
        minimum: 0
        maximum: 2

    required:
      - reg

allOf:
  - if:
      properties:
        compatible:
          contains:
            enum:
              - nxp,pca9550
    then:
      patternProperties:
        "^led@[0-9a-f]$":
          properties:
            reg:
              maximum: 1
  - if:
      properties:
        compatible:
          contains:
            enum:
              - nxp,pca9551
    then:
      patternProperties:
        "^led@[0-9a-f]$":
          properties:
            reg:
              maximum: 7
  - if:
      properties:
        compatible:
          contains:
            enum:
              - nxp,pca9552
              - ibm,pca9552
    then:
      patternProperties:
        "^led@[0-9a-f]$":
          properties:
            reg:
              maximum: 15
  - if:
      properties:
        compatible:
          contains:
            enum:
              - nxp,pca9553
    then:
      patternProperties:
        "^led@[0-9a-f]$":
          properties:
            reg:
              maximum: 3

additionalProperties: false

examples:
  - |
    #include <dt-bindings/leds/leds-pca955x.h>

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

        led-controller@60 {
            compatible = "nxp,pca9552";
            reg = <0x60>;
            #address-cells = <1>;
            #size-cells = <0>;

            led@0 {
                reg = <0>;
                label = "red:power";
                linux,default-trigger = "default-on";
                type = <PCA955X_TYPE_LED>;
            };
            led@1 {
                reg = <1>;
                label = "green:power";
                type = <PCA955X_TYPE_LED>;
            };
            led@2 {
                reg = <2>;
                label = "pca9552:yellow";
                type = <PCA955X_TYPE_LED>;
            };
            led@3 {
                reg = <3>;
                label = "pca9552:white";
                type = <PCA955X_TYPE_LED>;
            };
        };
    };

...
