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

title: Broadcom's BCM63138 LEDs controller

maintainers:
  - Rafał Miłecki <rafal@milecki.pl>

description: |
  This LEDs controller was first used on BCM63138 and later reused on BCM4908,
  BCM6848, BCM6858, BCM63138, BCM63148, BCM63381 and BCM68360 SoCs.

  It supports up to 32 LEDs that can be connected parallelly or serially. It
  also includes limited support for hardware blinking.

  Binding serially connected LEDs isn't documented yet.

properties:
  compatible:
    oneOf:
      - items:
          - enum:
              - brcm,bcm4908-leds
              - brcm,bcm6848-leds
              - brcm,bcm6858-leds
              - brcm,bcm63148-leds
              - brcm,bcm63381-leds
              - brcm,bcm68360-leds
          - const: brcm,bcm63138-leds
      - const: brcm,bcm63138-leds

  reg:
    maxItems: 1

  "#address-cells":
    const: 1

  "#size-cells":
    const: 0

  brcm,serial-shift-bits:
    minimum: 1
    maximum: 32
    description:
      This describes the number of 8-bit serial shifters connected to the LED
      controller block. The hardware is typically using 8-bit shift registers
      with 8 LEDs per shift register, so 4 shifters results in 32 LEDs or 2
      shifters give 16 LEDs etc, but the hardware supports any odd number of
      registers. If left unspecified, the hardware boot-time default is used.

patternProperties:
  "^led@[a-f0-9]+$":
    type: object

    $ref: common.yaml#

    properties:
      reg:
        maxItems: 1
        description: LED pin number

    required:
      - reg

    unevaluatedProperties: false

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

additionalProperties: false

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

    leds@ff800800 {
        compatible = "brcm,bcm4908-leds", "brcm,bcm63138-leds";
        reg = <0xff800800 0xdc>;
        brcm,serial-shift-bits = <16>;

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

        led@0 {
            reg = <0x0>;
            function = LED_FUNCTION_POWER;
            color = <LED_COLOR_ID_GREEN>;
            default-state = "on";
        };

        led@3 {
            reg = <0x3>;
            function = LED_FUNCTION_STATUS;
            color = <LED_COLOR_ID_GREEN>;
            active-low;
        };
    };
