# 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>

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

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

  reg:
    minItems: 2
    maxItems: 3

  reg-names:
    minItems: 2
    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"
  - clocks

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;
    };