summaryrefslogtreecommitdiffstats
path: root/Documentation/devicetree/bindings/spmi/mediatek,mt8196-spmi.yaml
blob: 7a534f0a1d87ff5dae0df86513066edf6f6620c6 (plain)
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";
        };
      };
    };
...