Documentation / devicetree / bindings / spmi / mediatek,mt8196-spmi.yaml


Based on kernel version 7.0. Page generated on 2026-04-23 09:49 EST.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138
# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/spmi/mediatek,mt8196-spmi.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: MediaTek MT8196 SPMI 2.0 Controller

maintainers:
  - Hsin-Hsiung Wang <hsin-hsiung.wang@mediatek.com>
  - AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>

description:
  The MediaTek MT8196 SoC features a SPMI version 2.0 compliant controller,
  with internal wrapping arbitration logic to allow for multiple on-chip
  devices to control up to two SPMI buses.
  The main arbiter also acts as an interrupt controller, arbitering also
  the interrupts coming from SPMI-connected devices into each of the nested
  interrupt controllers from any of the present SPMI buses.

properties:
  compatible:
    oneOf:
      - enum:
          - mediatek,mt8196-spmi
      - items:
          - enum:
              - mediatek,mt6991-spmi
          - const: mediatek,mt8196-spmi

  ranges: true
 
  '#address-cells':
    const: 1
 
  '#size-cells':
    const: 1

patternProperties:
  "^spmi@[a-f0-9]+$":
    type: object
    $ref: /schemas/spmi/spmi.yaml
    unevaluatedProperties: false

    properties:
      reg:
        items:
          - description: controller interface registers
          - description: spmi master controller registers

      reg-names:
        items:
          - const: pmif
          - const: spmimst

      clocks:
        items:
          - description: controller interface system clock
          - description: controller interface timer clock
          - description: spmi controller master clock

      clock-names:
        items:
          - const: pmif_sys_ck
          - const: pmif_tmr_ck
          - const: spmimst_clk_mux

      interrupts:
        maxItems: 1

      interrupt-names:
        const: rcs

      interrupt-controller: true
 
      "#interrupt-cells":
        const: 3
        description: |
          cell 1: slave ID for the requested interrupt (0-15)
          cell 2: the requested peripheral interrupt (0-7)
          cell 3: interrupt flags indicating level-sense information,
                  as defined in dt-bindings/interrupt-controller/irq.h
    required:
      - reg
      - reg-names
      - clocks
      - clock-names
      - interrupts
      - interrupt-names
      - interrupt-controller
      - "#interrupt-cells"

required:
  - compatible
  - ranges
  - '#address-cells'
  - '#size-cells'

additionalProperties: false

examples:
  - |
    #include <dt-bindings/interrupt-controller/arm-gic.h>
 
    soc {
      #address-cells = <2>;
      #size-cells = <2>;
 
      spmi-arbiter@1c018000 {
        compatible = "mediatek,mt8196-spmi";
        ranges = <0 0 0x1c018000 0x4900>;
        #address-cells = <1>;
        #size-cells = <1>;
 
        spmi@0 {
          reg = <0 0x900>, <0x4800 0x100>;
          reg-names = "pmif", "spmimst";
          interrupts-extended = <&pio 292 IRQ_TYPE_LEVEL_HIGH>;
          interrupt-names = "rcs";
          interrupt-controller;
          #interrupt-cells = <3>;
          clocks = <&pmif_sys>, <&pmif_tmr>, <&spmi_mst>;
          clock-names = "pmif_sys_ck", "pmif_tmr_ck", "spmimst_clk_mux";
        };
 
        spmi@2000 {
          reg = <0x2000 0x900>, <0x4000 0x100>;
          reg-names = "pmif", "spmimst";
          interrupts-extended = <&pio 291 IRQ_TYPE_LEVEL_HIGH>;
          interrupt-names = "rcs";
          interrupt-controller;
          #interrupt-cells = <3>;
          clocks = <&pmif_sys>, <&pmif_tmr>, <&spmi_mst>;
          clock-names = "pmif_sys_ck", "pmif_tmr_ck", "spmimst_clk_mux";
        };
      };
    };
...