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

title: ISSI LED Controllers for IS31FL319{0,1,3,6,9}

maintainers:
  - Vincent Knecht <vincent.knecht@mailoo.org>

description: |
  The IS31FL319X are LED controllers with I2C interface.
  Previously known as Si-En SN319{0,1,3,6,9}.

  For more product information please see the links below:
    https://lumissil.com/assets/pdf/core/IS31FL3190_DS.pdf
    https://lumissil.com/assets/pdf/core/IS31FL3191_DS.pdf
    https://lumissil.com/assets/pdf/core/IS31FL3193_DS.pdf
    https://lumissil.com/assets/pdf/core/IS31FL3196_DS.pdf
    https://lumissil.com/assets/pdf/core/IS31FL3199_DS.pdf

properties:
  compatible:
    enum:
      - issi,is31fl3190
      - issi,is31fl3191
      - issi,is31fl3193
      - issi,is31fl3196
      - issi,is31fl3199
      - si-en,sn3190
      - si-en,sn3191
      - si-en,sn3193
      - si-en,sn3196
      - si-en,sn3199

  reg:
    maxItems: 1

  shutdown-gpios:
    maxItems: 1
    description: GPIO attached to the SDB pin.

  audio-gain-db:
    default: 0
    description: Audio gain selection for external analog modulation input.
    enum: [0, 3, 6, 9, 12, 15, 18, 21]

  "#address-cells":
    const: 1

  "#size-cells":
    const: 0

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

    properties:
      reg:
        description: Index of the LED.
        minimum: 1
        maximum: 9

      led-max-microamp:
        description:
          Note that a driver will take the lowest of all LED limits
          since the chip has a single global setting. The lowest value
          will be chosen due to the PWM specificity, where lower
          brightness is achieved by reducing the duty-cycle of pulses
          and not the current, which will always have its peak value
          equal to led-max-microamp.

allOf:
  - if:
      properties:
        compatible:
          contains:
            enum:
              - issi,is31fl3190
              - issi,is31fl3191
              - issi,is31fl3193
              - si-en,sn3190
              - si-en,sn3191
              - si-en,sn3193
    then:
      properties:
        reg:
          enum: [0x68, 0x69, 0x6a, 0x6b]

        audio-gain-db: false

      patternProperties:
        "^led@[1-9]$":
          properties:
            led-max-microamp:
              default: 42000
              enum: [5000, 10000, 17500, 30000, 42000]
    else:
      properties:
        reg:
          enum: [0x64, 0x65, 0x66, 0x67]

      patternProperties:
        "^led@[1-9]$":
          properties:
            led-max-microamp:
              default: 20000
              enum: [5000, 10000, 15000, 20000, 25000, 30000, 35000, 40000]
  - if:
      properties:
        compatible:
          contains:
            enum:
              - issi,is31fl3190
              - issi,is31fl3191
              - si-en,sn3190
              - si-en,sn3191
    then:
      patternProperties:
        "^led@[1-9]$":
          properties:
            reg:
              maximum: 1
  - if:
      properties:
        compatible:
          contains:
            enum:
              - issi,is31fl3193
              - si-en,sn3193
    then:
      patternProperties:
        "^led@[1-9]$":
          properties:
            reg:
              maximum: 3
  - if:
      properties:
        compatible:
          contains:
            enum:
              - issi,is31fl3196
              - si-en,sn3196
    then:
      patternProperties:
        "^led@[1-9]$":
          properties:
            reg:
              maximum: 6

required:
  - compatible
  - reg
  - "#address-cells"
  - "#size-cells"

additionalProperties: false

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

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

        led-controller@65 {
            compatible = "issi,is31fl3196";
            reg = <0x65>;
            #address-cells = <1>;
            #size-cells = <0>;

            shutdown-gpios = <&gpio0 11 GPIO_ACTIVE_HIGH>;

            led@1 {
                reg = <1>;
                label = "red:aux";
                led-max-microamp = <10000>;
            };

            led@5 {
                reg = <5>;
                label = "green:power";
                linux,default-trigger = "default-on";
            };
        };
    };
...

