mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/chenhuacai/linux-loongson
synced 2025-09-05 11:53:41 +00:00

For the AD7124 chip and some of its cousins the logical irq line (R̅D̅Y̅) is physically on the same pin as the spi MISO output (DOUT) and so reading a register might trigger an interrupt. For correct operation it's critical that the actual state of the pin can be read to judge if an interrupt event is a real one or just a spurious one triggered by toggling the line in its MISO mode. Allow specification of an "rdy-gpios" property that references a GPIO that can be used for that purpose. While this is typically the same GPIO also used (implicitly) as interrupt source, it is still supposed that the interrupt is specified as before and usual. Acked-by: Conor Dooley <conor.dooley@microchip.com> Signed-off-by: Uwe Kleine-König <u.kleine-koenig@baylibre.com> Link: https://patch.msgid.link/7fc92a8539e55802d514332e70ee836a3ed08b66.1733504533.git.u.kleine-koenig@baylibre.com Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
171 lines
4.0 KiB
YAML
171 lines
4.0 KiB
YAML
# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
|
||
# Copyright 2019 Analog Devices Inc.
|
||
%YAML 1.2
|
||
---
|
||
$id: http://devicetree.org/schemas/iio/adc/adi,ad7124.yaml#
|
||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||
|
||
title: Analog Devices AD7124 ADC device driver
|
||
|
||
maintainers:
|
||
- Stefan Popa <stefan.popa@analog.com>
|
||
|
||
description: |
|
||
Bindings for the Analog Devices AD7124 ADC device. Datasheet can be
|
||
found here:
|
||
https://www.analog.com/media/en/technical-documentation/data-sheets/AD7124-8.pdf
|
||
|
||
properties:
|
||
compatible:
|
||
enum:
|
||
- adi,ad7124-4
|
||
- adi,ad7124-8
|
||
|
||
reg:
|
||
description: SPI chip select number for the device
|
||
maxItems: 1
|
||
|
||
clocks:
|
||
maxItems: 1
|
||
description: phandle to the master clock (mclk)
|
||
|
||
clock-names:
|
||
items:
|
||
- const: mclk
|
||
|
||
interrupts:
|
||
description: IRQ line for the ADC
|
||
maxItems: 1
|
||
|
||
rdy-gpios:
|
||
description:
|
||
GPIO reading the R̅D̅Y̅ line. Having such a GPIO is technically optional but
|
||
highly recommended because DOUT/R̅D̅Y̅ toggles during SPI transfers (in its
|
||
DOUT aka MISO role) and so usually triggers a spurious interrupt. The
|
||
distinction between such a spurious event and a real one can only be done
|
||
by reading such a GPIO. (There is a register telling the same
|
||
information, but accessing that one needs a SPI transfer which then
|
||
triggers another interrupt event.)
|
||
maxItems: 1
|
||
|
||
'#address-cells':
|
||
const: 1
|
||
|
||
'#size-cells':
|
||
const: 0
|
||
|
||
refin1-supply:
|
||
description: refin1 supply can be used as reference for conversion.
|
||
|
||
refin2-supply:
|
||
description: refin2 supply can be used as reference for conversion.
|
||
|
||
avdd-supply:
|
||
description: avdd supply can be used as reference for conversion.
|
||
|
||
required:
|
||
- compatible
|
||
- reg
|
||
- clocks
|
||
- clock-names
|
||
- interrupts
|
||
|
||
patternProperties:
|
||
"^channel@([0-9]|1[0-5])$":
|
||
$ref: adc.yaml
|
||
type: object
|
||
description: |
|
||
Represents the external channels which are connected to the ADC.
|
||
|
||
properties:
|
||
reg:
|
||
description: |
|
||
The channel number. It can have up to 8 channels on ad7124-4
|
||
and 16 channels on ad7124-8, numbered from 0 to 15.
|
||
items:
|
||
minimum: 0
|
||
maximum: 15
|
||
|
||
adi,reference-select:
|
||
description: |
|
||
Select the reference source to use when converting on
|
||
the specific channel. Valid values are:
|
||
0: REFIN1(+)/REFIN1(−).
|
||
1: REFIN2(+)/REFIN2(−).
|
||
3: AVDD
|
||
If this field is left empty, internal reference is selected.
|
||
$ref: /schemas/types.yaml#/definitions/uint32
|
||
enum: [0, 1, 3]
|
||
|
||
diff-channels: true
|
||
|
||
bipolar: true
|
||
|
||
adi,buffered-positive:
|
||
description: Enable buffered mode for positive input.
|
||
type: boolean
|
||
|
||
adi,buffered-negative:
|
||
description: Enable buffered mode for negative input.
|
||
type: boolean
|
||
|
||
required:
|
||
- reg
|
||
- diff-channels
|
||
|
||
additionalProperties: false
|
||
|
||
allOf:
|
||
- $ref: /schemas/spi/spi-peripheral-props.yaml#
|
||
|
||
unevaluatedProperties: false
|
||
|
||
examples:
|
||
- |
|
||
#include <dt-bindings/gpio/gpio.h>
|
||
spi {
|
||
#address-cells = <1>;
|
||
#size-cells = <0>;
|
||
|
||
adc@0 {
|
||
compatible = "adi,ad7124-4";
|
||
reg = <0>;
|
||
spi-max-frequency = <5000000>;
|
||
interrupts = <25 2>;
|
||
interrupt-parent = <&gpio>;
|
||
rdy-gpios = <&gpio 25 GPIO_ACTIVE_LOW>;
|
||
refin1-supply = <&adc_vref>;
|
||
clocks = <&ad7124_mclk>;
|
||
clock-names = "mclk";
|
||
|
||
#address-cells = <1>;
|
||
#size-cells = <0>;
|
||
|
||
channel@0 {
|
||
reg = <0>;
|
||
diff-channels = <0 1>;
|
||
adi,reference-select = <0>;
|
||
adi,buffered-positive;
|
||
};
|
||
|
||
channel@1 {
|
||
reg = <1>;
|
||
bipolar;
|
||
diff-channels = <2 3>;
|
||
adi,reference-select = <0>;
|
||
adi,buffered-positive;
|
||
adi,buffered-negative;
|
||
};
|
||
|
||
channel@2 {
|
||
reg = <2>;
|
||
diff-channels = <4 5>;
|
||
};
|
||
|
||
channel@3 {
|
||
reg = <3>;
|
||
diff-channels = <6 7>;
|
||
};
|
||
};
|
||
};
|