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