summaryrefslogtreecommitdiffstats
path: root/Documentation/devicetree/bindings/iio/adc/adi,ad7606.yaml
blob: ab5881d0d017f565cf79cfc4a2f2f8c8ba84dc76 (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
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
# SPDX-License-Identifier: GPL-2.0
%YAML 1.2
---
$id: http://devicetree.org/schemas/iio/adc/adi,ad7606.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Analog Devices AD7606 Simultaneous Sampling ADC

maintainers:
  - Michael Hennerich <michael.hennerich@analog.com>

description: |
  Analog Devices AD7606 Simultaneous Sampling ADC
  https://www.analog.com/media/en/technical-documentation/data-sheets/AD7605-4.pdf
  https://www.analog.com/media/en/technical-documentation/data-sheets/ad7606_7606-6_7606-4.pdf
  https://www.analog.com/media/en/technical-documentation/data-sheets/AD7606B.pdf
  https://www.analog.com/media/en/technical-documentation/data-sheets/ad7606c-16.pdf
  https://www.analog.com/media/en/technical-documentation/data-sheets/ad7606c-18.pdf
  https://www.analog.com/media/en/technical-documentation/data-sheets/ad7607.pdf
  https://www.analog.com/media/en/technical-documentation/data-sheets/ad7608.pdf
  https://www.analog.com/media/en/technical-documentation/data-sheets/ad7609.pdf
  https://www.analog.com/media/en/technical-documentation/data-sheets/AD7616.pdf

properties:
  compatible:
    enum:
      - adi,ad7605-4
      - adi,ad7606-4
      - adi,ad7606-6
      - adi,ad7606-8  # Referred to as AD7606 (without -8) in the datasheet
      - adi,ad7606b
      - adi,ad7606c-16
      - adi,ad7606c-18
      - adi,ad7607
      - adi,ad7608
      - adi,ad7609
      - adi,ad7616

  reg:
    maxItems: 1

  "#address-cells":
    const: 1

  "#size-cells":
    const: 0

  # According to the datasheet, "Data is clocked in from SDI on the falling
  # edge of SCLK, while data is clocked out on DOUTA on the rising edge of
  # SCLK".  Also, even if not stated textually in the datasheet, it is made
  # clear on the diagrams that sclk idles at high.  Subsequently, in case SPI
  # interface is used, the correct way is to only set spi-cpol.
  spi-cpha: true

  spi-cpol: true

  avcc-supply: true

  vdrive-supply:
    description:
      Determines the voltage level at which the interface logic pins will
      operate.

  refin-supply:
    description:
      The voltage supply for optional external reference voltage.

  interrupts:
    description:
      The BUSY pin falling edge indicates that the conversion is over, and thus
      new data is available.
    maxItems: 1

  adi,conversion-start-gpios:
    description:
      Must be the device tree identifier of the CONVST pin(s). This logic input
      is used to initiate conversions on the analog input channels. As the line
      is active high, it should be marked GPIO_ACTIVE_HIGH.
    minItems: 1
    maxItems: 2

  reset-gpios:
    description:
      Must be the device tree identifier of the RESET pin. If specified, it will
      be asserted during driver probe. On the AD7606x, as the line is active
      high, it should be marked GPIO_ACTIVE_HIGH. On the AD7616, as the line is
      active low, it should be marked GPIO_ACTIVE_LOW.
    maxItems: 1

  standby-gpios:
    description:
      Must be the device tree identifier of the STBY pin. This pin is used to
      place the AD7606 into one of two power-down modes, Standby mode or
      Shutdown mode. As the line is active low, it should be marked
      GPIO_ACTIVE_LOW.
    maxItems: 1

  adi,first-data-gpios:
    description:
      Must be the device tree identifier of the FRSTDATA pin. The FRSTDATA
      output indicates when the first channel, V1, is being read back on either
      the parallel, byte or serial interface. As the line is active high, it
      should be marked GPIO_ACTIVE_HIGH.
    maxItems: 1

  adi,range-gpios:
    description:
      Must be the device tree identifier of the RANGE pin. The state on this
      pin determines the input range of the analog input channels. If this pin
      is tied to a logic high, the analog input range is ±10V for all channels.
      On the AD760X, if this pin is tied to a logic low, the analog input range
      is ±5V for all channels. As the line is active high, it should be marked
      GPIO_ACTIVE_HIGH. On the AD7616, there are 2 pins, and if the 2 pins are
      tied to a logic high, software mode is enabled, otherwise one of the 3
      possible range values is selected.
    minItems: 1
    maxItems: 2

  adi,oversampling-ratio-gpios:
    description:
      Must be the device tree identifier of the over-sampling mode pins. As the
      line is active high, it should be marked GPIO_ACTIVE_HIGH. On the AD7606X
      parts that support it, if all 3 pins are tied to a logic high, software
      mode is enabled.
    maxItems: 3

  adi,sw-mode:
    description:
      Software mode of operation, so far available only for AD7616 and AD7606B.
      It is enabled when all three oversampling mode pins are connected to high
      level for the AD7606B, or both the range selection are connected to high
      level for the AD7616. The device is configured by the corresponding
      registers. If the adi,oversampling-ratio-gpios property is defined, then
      the driver will set the oversampling gpios to high. Otherwise, it is
      assumed that the pins are hardwired to VDD.
    type: boolean

  pwms:
    description:
      In case the conversion is triggered by a PWM instead of a GPIO plugged to
      the CONVST pin, the PWM must be referenced.
      The first is the PWM connected to CONVST or CONVST1 for the chips with the
      2nd PWM connected to CONVST2, if CONVST2 is available and not shorted to
      CONVST1.
    minItems: 1
    maxItems: 2

  pwm-names:
    items:
      - const: convst1
      - const: convst2

  io-backends:
    description:
      A reference to the iio-backend, which is responsible handling the BUSY
      pin's falling edge and communication.
      An example of backend can be found at
      http://analogdevicesinc.github.io/hdl/library/axi_ad7606x/index.html


patternProperties:
  "^channel@[1-8]$":
    type: object
    $ref: adc.yaml
    unevaluatedProperties: false

    properties:
      reg:
        description:
          The channel number, as specified in the datasheet (from 1 to 8).
        minimum: 1
        maximum: 8

      diff-channels:
        description:
          Each channel can be configured as a bipolar differential channel.
          The ADC uses the same positive and negative inputs for this.
          This property must be specified as 'reg' (or the channel number) for
          both positive and negative inputs (i.e. diff-channels = <reg reg>).
          Since the configuration is bipolar differential, the 'bipolar'
          property is required.
        items:
          minimum: 1
          maximum: 8

      bipolar:
        description:
          The ADC channels can be configured as
             * Bipolar single-ended
             * Unipolar single-ended
             * Bipolar differential
          Therefore in the DT, if no channel node is specified, it is considered
          'unipolar single-ended'. So for the other configurations the 'bipolar'
          property must be specified. If 'diff-channels' is specified, it is
          considered a bipolar differential channel. Otherwise it is bipolar
          single-ended.

    required:
      - reg
      - bipolar

required:
  - compatible
  - reg
  - avcc-supply
  - vdrive-supply

allOf:
  - $ref: /schemas/spi/spi-peripheral-props.yaml#

  - oneOf:
      - required:
          - adi,conversion-start-gpios
      - required:
          - pwms

  - oneOf:
      - required:
          - interrupts
      - required:
          - io-backends

  - if:
      properties:
        compatible:
          contains:
            const: adi,ad7616
    then:
      properties:
        adi,first-data-gpios: false
        standby-gpios: false
        adi,range-gpios:
          maxItems: 2
    else:
      properties:
        adi,range-gpios:
          maxItems: 1

  - if:
      properties:
        compatible:
          contains:
            enum:
              - adi,ad7605-4
              - adi,ad7616
    then:
      properties:
        adi,oversampling-ratio-gpios: false

  - if:
      properties:
        compatible:
          contains:
            enum:
              - adi,ad7605-4
              - adi,ad7606-4
              - adi,ad7606-6
              - adi,ad7606-8
              - adi,ad7607
              - adi,ad7608
              - adi,ad7609
    then:
      properties:
        adi,sw-mode: false
    else:
      properties:
        pwms:
          maxItems: 1
        pwm-names:
          maxItems: 1
        adi,conversion-start-gpios:
          maxItems: 1

  - if:
      not:
        required:
          - adi,sw-mode
    then:
      patternProperties:
        "^channel@[1-8]$": false

  - if:
      not:
        properties:
          compatible:
            enum:
              - adi,ad7606c-16
              - adi,ad7606c-18
    then:
      patternProperties:
        "^channel@[1-8]$": false

unevaluatedProperties: false

examples:
  - |
    #include <dt-bindings/gpio/gpio.h>
    iio-backend {
        #address-cells = <1>;
        #size-cells = <0>;
        adi_adc@0 {
            compatible = "adi,ad7606b";
            reg = <0>;
            pwms = <&axi_pwm_gen 0 0>;

            avcc-supply = <&adc_vref>;
            vdrive-supply = <&vdd_supply>;

            reset-gpios = <&gpio0 91 GPIO_ACTIVE_HIGH>;
            standby-gpios = <&gpio0 90 GPIO_ACTIVE_LOW>;
            adi,range-gpios = <&gpio0 89 GPIO_ACTIVE_HIGH>;
            adi,oversampling-ratio-gpios = <&gpio0 88 GPIO_ACTIVE_HIGH
                                            &gpio0 87 GPIO_ACTIVE_HIGH
                                            &gpio0 86 GPIO_ACTIVE_HIGH>;
            io-backends = <&iio_backend>;
        };
    };

  - |
    #include <dt-bindings/gpio/gpio.h>
    #include <dt-bindings/interrupt-controller/irq.h>
    spi {
        #address-cells = <1>;
        #size-cells = <0>;

        adc@0 {
            compatible = "adi,ad7606-8";
            reg = <0>;
            spi-max-frequency = <1000000>;
            spi-cpol;

            avcc-supply = <&adc_vref>;
            vdrive-supply = <&vdd_supply>;

            interrupts = <25 IRQ_TYPE_EDGE_FALLING>;
            interrupt-parent = <&gpio>;

            adi,conversion-start-gpios = <&gpio 17 GPIO_ACTIVE_HIGH>;
            reset-gpios = <&gpio 27 GPIO_ACTIVE_HIGH>;
            adi,first-data-gpios = <&gpio 22 GPIO_ACTIVE_HIGH>;
            adi,oversampling-ratio-gpios = <&gpio 18 GPIO_ACTIVE_HIGH>,
                                           <&gpio 23 GPIO_ACTIVE_HIGH>,
                                           <&gpio 26 GPIO_ACTIVE_HIGH>;
            standby-gpios = <&gpio 24 GPIO_ACTIVE_LOW>;
        };
    };
  - |
    #include <dt-bindings/gpio/gpio.h>
    #include <dt-bindings/interrupt-controller/irq.h>
    spi {
        #address-cells = <1>;
        #size-cells = <0>;

        adc@0 {
            compatible = "adi,ad7606c-18";
            reg = <0>;

            #address-cells = <1>;
            #size-cells = <0>;

            spi-max-frequency = <1000000>;
            spi-cpol;

            avcc-supply = <&adc_vref>;
            vdrive-supply = <&vdd_supply>;

            interrupts = <25 IRQ_TYPE_EDGE_FALLING>;
            interrupt-parent = <&gpio>;

            adi,conversion-start-gpios = <&gpio 17 GPIO_ACTIVE_HIGH>;
            reset-gpios = <&gpio 27 GPIO_ACTIVE_HIGH>;
            adi,first-data-gpios = <&gpio 22 GPIO_ACTIVE_HIGH>;
            standby-gpios = <&gpio 24 GPIO_ACTIVE_LOW>;

            adi,sw-mode;

            channel@1 {
                reg = <1>;
                diff-channels = <1 1>;
                bipolar;
            };

            channel@3 {
                reg = <3>;
                bipolar;
            };

            channel@8 {
                reg = <8>;
                diff-channels = <8 8>;
                bipolar;
            };

        };
    };
...