hc
2024-01-03 2f7c68cb55ecb7331f2381deb497c27155f32faf
kernel/drivers/iio/adc/ad7791.c
....@@ -1,10 +1,9 @@
1
+// SPDX-License-Identifier: GPL-2.0-only
12 /*
23 * AD7787/AD7788/AD7789/AD7790/AD7791 SPI ADC driver
34 *
45 * Copyright 2012 Analog Devices Inc.
56 * Author: Lars-Peter Clausen <lars@metafoo.de>
6
- *
7
- * Licensed under the GPL-2.
87 */
98
109 #include <linux/interrupt.h>
....@@ -65,25 +64,73 @@
6564 #define AD7791_MODE_SEL_MASK (0x3 << 6)
6665 #define AD7791_MODE_SEL(x) ((x) << 6)
6766
67
+#define __AD7991_CHANNEL(_si, _channel1, _channel2, _address, _bits, \
68
+ _storagebits, _shift, _extend_name, _type, _mask_all) \
69
+ { \
70
+ .type = (_type), \
71
+ .differential = (_channel2 == -1 ? 0 : 1), \
72
+ .indexed = 1, \
73
+ .channel = (_channel1), \
74
+ .channel2 = (_channel2), \
75
+ .address = (_address), \
76
+ .extend_name = (_extend_name), \
77
+ .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | \
78
+ BIT(IIO_CHAN_INFO_OFFSET), \
79
+ .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE), \
80
+ .info_mask_shared_by_all = _mask_all, \
81
+ .scan_index = (_si), \
82
+ .scan_type = { \
83
+ .sign = 'u', \
84
+ .realbits = (_bits), \
85
+ .storagebits = (_storagebits), \
86
+ .shift = (_shift), \
87
+ .endianness = IIO_BE, \
88
+ }, \
89
+ }
90
+
91
+#define AD7991_SHORTED_CHANNEL(_si, _channel, _address, _bits, \
92
+ _storagebits, _shift) \
93
+ __AD7991_CHANNEL(_si, _channel, _channel, _address, _bits, \
94
+ _storagebits, _shift, "shorted", IIO_VOLTAGE, \
95
+ BIT(IIO_CHAN_INFO_SAMP_FREQ))
96
+
97
+#define AD7991_CHANNEL(_si, _channel, _address, _bits, \
98
+ _storagebits, _shift) \
99
+ __AD7991_CHANNEL(_si, _channel, -1, _address, _bits, \
100
+ _storagebits, _shift, NULL, IIO_VOLTAGE, \
101
+ BIT(IIO_CHAN_INFO_SAMP_FREQ))
102
+
103
+#define AD7991_DIFF_CHANNEL(_si, _channel1, _channel2, _address, _bits, \
104
+ _storagebits, _shift) \
105
+ __AD7991_CHANNEL(_si, _channel1, _channel2, _address, _bits, \
106
+ _storagebits, _shift, NULL, IIO_VOLTAGE, \
107
+ BIT(IIO_CHAN_INFO_SAMP_FREQ))
108
+
109
+#define AD7991_SUPPLY_CHANNEL(_si, _channel, _address, _bits, _storagebits, \
110
+ _shift) \
111
+ __AD7991_CHANNEL(_si, _channel, -1, _address, _bits, \
112
+ _storagebits, _shift, "supply", IIO_VOLTAGE, \
113
+ BIT(IIO_CHAN_INFO_SAMP_FREQ))
114
+
68115 #define DECLARE_AD7787_CHANNELS(name, bits, storagebits) \
69116 const struct iio_chan_spec name[] = { \
70
- AD_SD_DIFF_CHANNEL(0, 0, 0, AD7791_CH_AIN1P_AIN1N, \
117
+ AD7991_DIFF_CHANNEL(0, 0, 0, AD7791_CH_AIN1P_AIN1N, \
71118 (bits), (storagebits), 0), \
72
- AD_SD_CHANNEL(1, 1, AD7791_CH_AIN2, (bits), (storagebits), 0), \
73
- AD_SD_SHORTED_CHANNEL(2, 0, AD7791_CH_AIN1N_AIN1N, \
119
+ AD7991_CHANNEL(1, 1, AD7791_CH_AIN2, (bits), (storagebits), 0), \
120
+ AD7991_SHORTED_CHANNEL(2, 0, AD7791_CH_AIN1N_AIN1N, \
74121 (bits), (storagebits), 0), \
75
- AD_SD_SUPPLY_CHANNEL(3, 2, AD7791_CH_AVDD_MONITOR, \
122
+ AD7991_SUPPLY_CHANNEL(3, 2, AD7791_CH_AVDD_MONITOR, \
76123 (bits), (storagebits), 0), \
77124 IIO_CHAN_SOFT_TIMESTAMP(4), \
78125 }
79126
80127 #define DECLARE_AD7791_CHANNELS(name, bits, storagebits) \
81128 const struct iio_chan_spec name[] = { \
82
- AD_SD_DIFF_CHANNEL(0, 0, 0, AD7791_CH_AIN1P_AIN1N, \
129
+ AD7991_DIFF_CHANNEL(0, 0, 0, AD7791_CH_AIN1P_AIN1N, \
83130 (bits), (storagebits), 0), \
84
- AD_SD_SHORTED_CHANNEL(1, 0, AD7791_CH_AIN1N_AIN1N, \
131
+ AD7991_SHORTED_CHANNEL(1, 0, AD7791_CH_AIN1N_AIN1N, \
85132 (bits), (storagebits), 0), \
86
- AD_SD_SUPPLY_CHANNEL(2, 1, AD7791_CH_AVDD_MONITOR, \
133
+ AD7991_SUPPLY_CHANNEL(2, 1, AD7791_CH_AVDD_MONITOR, \
87134 (bits), (storagebits), 0), \
88135 IIO_CHAN_SOFT_TIMESTAMP(3), \
89136 }
....@@ -206,6 +253,7 @@
206253 .has_registers = true,
207254 .addr_shift = 4,
208255 .read_mask = BIT(3),
256
+ .irq_flags = IRQF_TRIGGER_FALLING,
209257 };
210258
211259 static int ad7791_read_raw(struct iio_dev *indio_dev,
....@@ -377,8 +425,6 @@
377425
378426 spi_set_drvdata(spi, indio_dev);
379427
380
- indio_dev->dev.parent = &spi->dev;
381
- indio_dev->dev.of_node = spi->dev.of_node;
382428 indio_dev->name = spi_get_device_id(spi)->name;
383429 indio_dev->modes = INDIO_DIRECT_MODE;
384430 indio_dev->channels = st->info->channels;
....@@ -444,5 +490,5 @@
444490 module_spi_driver(ad7791_driver);
445491
446492 MODULE_AUTHOR("Lars-Peter Clausen <lars@metafoo.de>");
447
-MODULE_DESCRIPTION("Analog Device AD7787/AD7788/AD7789/AD7790/AD7791 ADC driver");
493
+MODULE_DESCRIPTION("Analog Devices AD7787/AD7788/AD7789/AD7790/AD7791 ADC driver");
448494 MODULE_LICENSE("GPL v2");