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

title: TI/National Semiconductor LP55xx and LP8501 LED Drivers

maintainers:
  - Jacek Anaszewski <jacek.anaszewski@gmail.com>
  - Pavel Machek <pavel@ucw.cz>

description: |
  Bindings for the TI/National Semiconductor LP55xx and LP8501 multi channel
  LED Drivers.

  For more product information please see the link below:
    https://www.ti.com/lit/gpn/lp5521
    https://www.ti.com/lit/gpn/lp5523
    https://www.ti.com/lit/gpn/lp55231
    https://www.ti.com/lit/gpn/lp5562
    https://www.ti.com/lit/gpn/lp8501

properties:
  compatible:
    enum:
      - national,lp5521
      - national,lp5523
      - ti,lp55231
      - ti,lp5562
      - ti,lp8501

  reg:
    maxItems: 1
    description: I2C slave address

  clock-mode:
    $ref: /schemas/types.yaml#/definitions/uint8
    description: |
      Input clock mode
    enum:
      - 0 # automode
      - 1 # internal
      - 2 # external

  enable-gpios:
    maxItems: 1
    description: |
      GPIO attached to the chip's enable pin

  label: true

  pwr-sel:
    $ref: /schemas/types.yaml#/definitions/uint8
    description: |
      LP8501 specific property. Power selection for output channels.
    enum:
      - 0 # D1~9 are connected to VDD
      - 1 # D1~6 with VDD, D7~9 with VOUT
      - 2 # D1~6 with VOUT, D7~9 with VDD
      - 3 # D1~9 are connected to VOUT

  '#address-cells':
    const: 1

  '#size-cells':
    const: 0

  ti,charge-pump-mode:
    description:
      Set the operating mode of the internal charge pump as defined in
      <dt-bindings/leds/leds-lp55xx.h>.
    $ref: /schemas/types.yaml#/definitions/uint32
    default: 3 # auto
    maximum: 3

patternProperties:
  '^multi-led@[0-8]$':
    type: object
    $ref: leds-class-multicolor.yaml#
    unevaluatedProperties: false

    properties:
      reg:
        maximum: 8

      '#address-cells':
        const: 1

      '#size-cells':
        const: 0

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

        properties:
          led-cur:
            $ref: /schemas/types.yaml#/definitions/uint8
            description: |
              Current setting at each LED channel (mA x10, 0 if LED is not connected)
            minimum: 0
            maximum: 255

          max-cur:
            $ref: /schemas/types.yaml#/definitions/uint8
            description: Maximum current at each LED channel.

          reg:
            maximum: 8

        required:
          - reg

  "^led@[0-8]$":
    type: object
    $ref: common.yaml#
    unevaluatedProperties: false

    properties:
      led-cur:
        $ref: /schemas/types.yaml#/definitions/uint8
        description: |
          Current setting at each LED channel (mA x10, 0 if LED is not connected)
        minimum: 0
        maximum: 255

      max-cur:
        $ref: /schemas/types.yaml#/definitions/uint8
        description: Maximum current at each LED channel.

      reg:
        description: |
          Output channel for the LED.  This is zero based channel identifier and
          the data sheet is a one based channel identifier.
          reg value to output to LED output number
        enum:
          - 0 # LED output D1
          - 1 # LED output D2
          - 2 # LED output D3
          - 3 # LED output D4
          - 4 # LED output D5
          - 5 # LED output D6
          - 6 # LED output D7
          - 7 # LED output D8
          - 8 # LED output D9

      chan-name:
        $ref: /schemas/types.yaml#/definitions/string
        description: name of channel

required:
  - compatible
  - reg

additionalProperties: false

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

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

        led-controller@32 {
            #address-cells = <1>;
            #size-cells = <0>;
            compatible = "ti,lp8501";
            reg = <0x32>;
            clock-mode = /bits/ 8 <2>;
            pwr-sel = /bits/ 8 <3>;	/* D1~9 connected to VOUT */
            ti,charge-pump-mode = <LP55XX_CP_BYPASS>;

            led@0 {
                reg = <0>;
                chan-name = "d1";
                led-cur = /bits/ 8 <0x14>;
                max-cur = /bits/ 8 <0x20>;
            };

            led@1 {
                reg = <1>;
                chan-name = "d2";
                led-cur = /bits/ 8 <0x14>;
                max-cur = /bits/ 8 <0x20>;
            };

            led@2 {
                reg = <2>;
                chan-name = "d3";
                led-cur = /bits/ 8 <0x14>;
                max-cur = /bits/ 8 <0x20>;
            };

            led@3 {
                reg = <3>;
                chan-name = "d4";
                led-cur = /bits/ 8 <0x14>;
                max-cur = /bits/ 8 <0x20>;
            };

            led@4 {
                reg = <4>;
                chan-name = "d5";
                led-cur = /bits/ 8 <0x14>;
                max-cur = /bits/ 8 <0x20>;
            };

            led@5 {
                reg = <5>;
                chan-name = "d6";
                led-cur = /bits/ 8 <0x14>;
                max-cur = /bits/ 8 <0x20>;
            };

            led@6 {
                reg = <6>;
                chan-name = "d7";
                led-cur = /bits/ 8 <0x14>;
                max-cur = /bits/ 8 <0x20>;
            };

            led@7 {
                reg = <7>;
                chan-name = "d8";
                led-cur = /bits/ 8 <0x14>;
                max-cur = /bits/ 8 <0x20>;
            };

            led@8 {
                reg = <8>;
                chan-name = "d9";
                led-cur = /bits/ 8 <0x14>;
                max-cur = /bits/ 8 <0x20>;
            };
        };

        led-controller@33 {
            #address-cells = <1>;
            #size-cells = <0>;
            compatible = "national,lp5523";
            reg = <0x33>;
            clock-mode = /bits/ 8 <0>;

            multi-led@2 {
                #address-cells = <1>;
                #size-cells = <0>;
                reg = <0x2>;
                color = <LED_COLOR_ID_RGB>;
                function = LED_FUNCTION_STANDBY;
                linux,default-trigger = "heartbeat";

                led@0 {
                    led-cur = /bits/ 8 <50>;
                    max-cur = /bits/ 8 <100>;
                    reg = <0x0>;
                    color = <LED_COLOR_ID_GREEN>;
                };

                led@1 {
                    led-cur = /bits/ 8 <50>;
                    max-cur = /bits/ 8 <100>;
                    reg = <0x1>;
                    color = <LED_COLOR_ID_BLUE>;
                };

                led@6 {
                    led-cur = /bits/ 8 <50>;
                    max-cur = /bits/ 8 <100>;
                    reg = <0x6>;
                    color = <LED_COLOR_ID_RED>;
                };
            };
        };
    };

...