# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
%YAML 1.2
---
$id: http://devicetree.org/schemas/soc/bcm/brcm,bcm2835-pm.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: BCM2835 PM (Power domains, watchdog)

description: |
  The PM block controls power domains and some reset lines, and includes a
  watchdog timer.

maintainers:
  - Nicolas Saenz Julienne <nsaenz@kernel.org>

properties:
  compatible:
    items:
      - enum:
          - brcm,bcm2835-pm
          - brcm,bcm2711-pm
          - brcm,bcm2712-pm
      - const: brcm,bcm2835-pm-wdt

  reg:
    minItems: 1
    maxItems: 3

  reg-names:
    minItems: 1
    items:
      - const: pm
      - const: asb
      - const: rpivid_asb

  "#power-domain-cells":
    const: 1

  "#reset-cells":
    const: 1

  clocks:
    minItems: 4
    maxItems: 4

  clock-names:
    items:
      - const: v3d
      - const: peri_image
      - const: h264
      - const: isp

  system-power-controller:
    type: boolean

  timeout-sec: true

required:
  - compatible
  - reg
  - "#power-domain-cells"
  - "#reset-cells"

allOf:
  - $ref: /schemas/watchdog/watchdog.yaml#

  - if:
      properties:
        compatible:
          contains:
            enum:
              - brcm,bcm2835-pm
              - brcm,bcm2711-pm
    then:
      required:
        - clocks

      properties:
        reg:
          minItems: 2

        reg-names:
          minItems: 2

    else:
      properties:
        reg:
          maxItems: 1

        reg-names:
          maxItems: 1

additionalProperties: false

examples:
  - |
    #include <dt-bindings/clock/bcm2835.h>

    watchdog@7e100000 {
        compatible = "brcm,bcm2835-pm", "brcm,bcm2835-pm-wdt";
        #power-domain-cells = <1>;
        #reset-cells = <1>;
        reg = <0x7e100000 0x114>,
              <0x7e00a000 0x24>;
        reg-names = "pm", "asb";
        clocks = <&clocks BCM2835_CLOCK_V3D>,
               <&clocks BCM2835_CLOCK_PERI_IMAGE>,
               <&clocks BCM2835_CLOCK_H264>,
               <&clocks BCM2835_CLOCK_ISP>;
        clock-names = "v3d", "peri_image", "h264", "isp";
        system-power-controller;
    };