1# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
2%YAML 1.2
3---
4$id: http://devicetree.org/schemas/mfd/gateworks-gsc.yaml#
5$schema: http://devicetree.org/meta-schemas/core.yaml#
6
7title: Gateworks System Controller
8
9description: |
10  The Gateworks System Controller (GSC) is a device present across various
11  Gateworks product families that provides a set of system related features
12  such as the following (refer to the board hardware user manuals to see what
13  features are present)
14   - Watchdog Timer
15   - GPIO
16   - Pushbutton controller
17   - Hardware monitor with ADC's for temperature and voltage rails and
18     fan controller
19
20maintainers:
21  - Tim Harvey <tharvey@gateworks.com>
22
23properties:
24  $nodename:
25    pattern: "gsc@[0-9a-f]{1,2}"
26  compatible:
27    const: gw,gsc
28
29  reg:
30    description: I2C device address
31    maxItems: 1
32
33  interrupts:
34    maxItems: 1
35
36  interrupt-controller: true
37
38  "#interrupt-cells":
39    const: 1
40
41  "#address-cells":
42    const: 1
43
44  "#size-cells":
45    const: 0
46
47  adc:
48    type: object
49    description: Optional hardware monitoring module
50
51    properties:
52      compatible:
53        const: gw,gsc-adc
54
55      "#address-cells":
56        const: 1
57
58      "#size-cells":
59        const: 0
60
61    patternProperties:
62      "^channel@[0-9]+$":
63        type: object
64        description: |
65          Properties for a single ADC which can report cooked values
66          (i.e. temperature sensor based on thermister), raw values
67          (i.e. voltage rail with a pre-scaling resistor divider).
68
69        properties:
70          reg:
71            description: Register of the ADC
72            maxItems: 1
73
74          label:
75            description: Name of the ADC input
76
77          gw,mode:
78            description: |
79              conversion mode:
80                0 - temperature, in C*10
81                1 - pre-scaled 24-bit voltage value
82                2 - scaled voltage based on an optional resistor divider
83                    and optional offset
84                3 - pre-scaled 16-bit voltage value
85                4 - fan tach input to report RPM's
86            $ref: /schemas/types.yaml#/definitions/uint32
87            enum: [0, 1, 2, 3, 4]
88
89          gw,voltage-divider-ohms:
90            description: Values of resistors for divider on raw ADC input
91            maxItems: 2
92            items:
93              minimum: 1000
94              maximum: 1000000
95
96          gw,voltage-offset-microvolt:
97            description: |
98              A positive voltage offset to apply to a raw ADC
99              (i.e. to compensate for a diode drop).
100            minimum: 0
101            maximum: 1000000
102
103        required:
104          - gw,mode
105          - reg
106          - label
107
108    required:
109      - compatible
110      - "#address-cells"
111      - "#size-cells"
112
113patternProperties:
114  "^fan-controller@[0-9a-f]+$":
115    type: object
116    description: Optional fan controller
117
118    properties:
119      compatible:
120        const: gw,gsc-fan
121
122      "#address-cells":
123        const: 1
124
125      "#size-cells":
126        const: 0
127
128      reg:
129        description: The fan controller base address
130        maxItems: 1
131
132    required:
133      - compatible
134      - reg
135      - "#address-cells"
136      - "#size-cells"
137
138required:
139  - compatible
140  - reg
141  - interrupts
142  - interrupt-controller
143  - "#interrupt-cells"
144  - "#address-cells"
145  - "#size-cells"
146
147additionalProperties: false
148
149examples:
150  - |
151    #include <dt-bindings/gpio/gpio.h>
152    #include <dt-bindings/interrupt-controller/irq.h>
153    i2c {
154        #address-cells = <1>;
155        #size-cells = <0>;
156
157        gsc@20 {
158            compatible = "gw,gsc";
159            reg = <0x20>;
160            interrupt-parent = <&gpio1>;
161            interrupts = <4 IRQ_TYPE_LEVEL_LOW>;
162            interrupt-controller;
163            #interrupt-cells = <1>;
164            #address-cells = <1>;
165            #size-cells = <0>;
166
167            adc {
168                compatible = "gw,gsc-adc";
169                #address-cells = <1>;
170                #size-cells = <0>;
171
172                channel@0 { /* A0: Board Temperature */
173                    reg = <0x00>;
174                    label = "temp";
175                    gw,mode = <0>;
176                };
177
178                channel@2 { /* A1: Input Voltage (raw ADC) */
179                    reg = <0x02>;
180                    label = "vdd_vin";
181                    gw,mode = <1>;
182                    gw,voltage-divider-ohms = <22100 1000>;
183                    gw,voltage-offset-microvolt = <800000>;
184                };
185
186                channel@b { /* A2: Battery voltage */
187                    reg = <0x0b>;
188                    label = "vdd_bat";
189                    gw,mode = <1>;
190                };
191            };
192
193            fan-controller@2c {
194                #address-cells = <1>;
195                #size-cells = <0>;
196                compatible = "gw,gsc-fan";
197                reg = <0x2c>;
198            };
199        };
200    };
201