140850443SRadu Sabau // SPDX-License-Identifier: GPL-2.0-or-later
240850443SRadu Sabau /*
340850443SRadu Sabau * Copyright (C) 2024-2026 Analog Devices, Inc.
440850443SRadu Sabau * Author: Radu Sabau <radu.sabau@analog.com>
540850443SRadu Sabau */
640850443SRadu Sabau #include <linux/array_size.h>
740850443SRadu Sabau #include <linux/bitfield.h>
840850443SRadu Sabau #include <linux/bitmap.h>
940850443SRadu Sabau #include <linux/cleanup.h>
1040850443SRadu Sabau #include <linux/delay.h>
1140850443SRadu Sabau #include <linux/dev_printk.h>
1240850443SRadu Sabau #include <linux/device/devres.h>
13ad4f8513SRadu Sabau #include <linux/dmaengine.h>
1440850443SRadu Sabau #include <linux/err.h>
1541297c6bSRadu Sabau #include <linux/interrupt.h>
1641297c6bSRadu Sabau #include <linux/kstrtox.h>
1740850443SRadu Sabau #include <linux/limits.h>
1840850443SRadu Sabau #include <linux/math.h>
1940850443SRadu Sabau #include <linux/module.h>
2041297c6bSRadu Sabau #include <linux/property.h>
2141297c6bSRadu Sabau #include <linux/pwm.h>
2240850443SRadu Sabau #include <linux/regmap.h>
2340850443SRadu Sabau #include <linux/regulator/consumer.h>
2440850443SRadu Sabau #include <linux/reset.h>
2541297c6bSRadu Sabau #include <linux/string.h>
2640850443SRadu Sabau #include <linux/spi/spi.h>
27ad4f8513SRadu Sabau #include <linux/spi/offload/consumer.h>
28ad4f8513SRadu Sabau #include <linux/spi/offload/provider.h>
2940850443SRadu Sabau #include <linux/types.h>
3040850443SRadu Sabau #include <linux/units.h>
3140850443SRadu Sabau #include <linux/unaligned.h>
3240850443SRadu Sabau
3341297c6bSRadu Sabau #include <linux/iio/buffer.h>
34ad4f8513SRadu Sabau #include <linux/iio/buffer-dma.h>
35ad4f8513SRadu Sabau #include <linux/iio/buffer-dmaengine.h>
3640850443SRadu Sabau #include <linux/iio/iio.h>
3741297c6bSRadu Sabau #include <linux/iio/sysfs.h>
3841297c6bSRadu Sabau #include <linux/iio/trigger.h>
3941297c6bSRadu Sabau #include <linux/iio/triggered_buffer.h>
4041297c6bSRadu Sabau #include <linux/iio/trigger_consumer.h>
4140850443SRadu Sabau
4240850443SRadu Sabau #define AD4691_VREF_uV_MIN 2400000
4340850443SRadu Sabau #define AD4691_VREF_uV_MAX 5250000
4440850443SRadu Sabau #define AD4691_VREF_2P5_uV_MAX 2750000
4540850443SRadu Sabau #define AD4691_VREF_3P0_uV_MAX 3250000
4640850443SRadu Sabau #define AD4691_VREF_3P3_uV_MAX 3750000
4740850443SRadu Sabau #define AD4691_VREF_4P096_uV_MAX 4500000
4840850443SRadu Sabau
4940850443SRadu Sabau #define AD4691_CNV_DUTY_CYCLE_NS 380
5040850443SRadu Sabau #define AD4691_CNV_HIGH_TIME_NS 430
51ad4f8513SRadu Sabau /*
52ad4f8513SRadu Sabau * Conservative default for the manual offload periodic trigger. Low enough
53ad4f8513SRadu Sabau * to work safely out of the box across all OSR and channel count combinations.
54ad4f8513SRadu Sabau */
55ad4f8513SRadu Sabau #define AD4691_OFFLOAD_INITIAL_TRIGGER_HZ (100 * HZ_PER_KHZ)
5640850443SRadu Sabau
5740850443SRadu Sabau #define AD4691_SPI_CONFIG_A_REG 0x000
5840850443SRadu Sabau #define AD4691_SW_RESET (BIT(7) | BIT(0))
5940850443SRadu Sabau
6040850443SRadu Sabau #define AD4691_STATUS_REG 0x014
6140850443SRadu Sabau #define AD4691_CLAMP_STATUS1_REG 0x01A
6240850443SRadu Sabau #define AD4691_CLAMP_STATUS2_REG 0x01B
6340850443SRadu Sabau #define AD4691_DEVICE_SETUP 0x020
6440850443SRadu Sabau #define AD4691_MANUAL_MODE BIT(2)
6540850443SRadu Sabau #define AD4691_LDO_EN BIT(4)
6640850443SRadu Sabau #define AD4691_REF_CTRL 0x021
6740850443SRadu Sabau #define AD4691_REF_CTRL_MASK GENMASK(4, 2)
6840850443SRadu Sabau #define AD4691_REFBUF_EN BIT(0)
6940850443SRadu Sabau #define AD4691_OSC_FREQ_REG 0x023
7040850443SRadu Sabau #define AD4691_OSC_FREQ_MASK GENMASK(3, 0)
7140850443SRadu Sabau #define AD4691_STD_SEQ_CONFIG 0x025
7240850443SRadu Sabau #define AD4691_SEQ_ALL_CHANNELS_OFF 0x00
7340850443SRadu Sabau #define AD4691_SPARE_CONTROL 0x02A
7440850443SRadu Sabau
7540850443SRadu Sabau #define AD4691_MAX_CHANNELS 16
7640850443SRadu Sabau
7740850443SRadu Sabau #define AD4691_NOOP 0x00
7840850443SRadu Sabau #define AD4691_ADC_CHAN(ch) ((0x10 + (ch)) << 3)
7941297c6bSRadu Sabau #define AD4691_EXIT_COMMAND 0x5000
8040850443SRadu Sabau
8140850443SRadu Sabau #define AD4691_OSC_EN_REG 0x180
8240850443SRadu Sabau #define AD4691_STATE_RESET_REG 0x181
8340850443SRadu Sabau #define AD4691_STATE_RESET_ALL BIT(0)
8440850443SRadu Sabau #define AD4691_ADC_SETUP 0x182
8540850443SRadu Sabau #define AD4691_ADC_MODE_MASK GENMASK(1, 0)
8640850443SRadu Sabau #define AD4691_CNV_BURST_MODE 0x01
8740850443SRadu Sabau #define AD4691_AUTONOMOUS_MODE 0x02
8840850443SRadu Sabau /*
8940850443SRadu Sabau * ACC_MASK_REG covers both mask bytes via ADDR_DESCENDING SPI: writing a
9040850443SRadu Sabau * 16-bit BE value to 0x185 auto-decrements to 0x184 for the second byte.
9140850443SRadu Sabau */
9240850443SRadu Sabau #define AD4691_ACC_MASK_REG 0x185
9340850443SRadu Sabau #define AD4691_ACC_DEPTH_IN(n) (0x186 + (n))
9440850443SRadu Sabau #define AD4691_GPIO_MODE1_REG 0x196
9540850443SRadu Sabau #define AD4691_GPIO_MODE2_REG 0x197
9640850443SRadu Sabau #define AD4691_GP_MODE_MASK GENMASK(3, 0)
9740850443SRadu Sabau #define AD4691_GP_MODE_DATA_READY 0x06
9840850443SRadu Sabau #define AD4691_GPIO_READ 0x1A0
9940850443SRadu Sabau #define AD4691_ACC_STATUS_FULL1_REG 0x1B0
10040850443SRadu Sabau #define AD4691_ACC_STATUS_FULL2_REG 0x1B1
10140850443SRadu Sabau #define AD4691_ACC_STATUS_OVERRUN1_REG 0x1B2
10240850443SRadu Sabau #define AD4691_ACC_STATUS_OVERRUN2_REG 0x1B3
10340850443SRadu Sabau #define AD4691_ACC_STATUS_SAT1_REG 0x1B4
10440850443SRadu Sabau #define AD4691_ACC_STATUS_SAT2_REG 0x1BE
10540850443SRadu Sabau #define AD4691_ACC_SAT_OVR_REG(n) (0x1C0 + (n))
10640850443SRadu Sabau #define AD4691_AVG_IN(n) (0x201 + (2 * (n)))
10740850443SRadu Sabau #define AD4691_AVG_STS_IN(n) (0x222 + (3 * (n)))
10840850443SRadu Sabau #define AD4691_ACC_IN(n) (0x252 + (3 * (n)))
10940850443SRadu Sabau #define AD4691_ACC_STS_DATA(n) (0x283 + (4 * (n)))
11040850443SRadu Sabau
11140850443SRadu Sabau
11240850443SRadu Sabau static const char * const ad4691_supplies[] = { "avdd", "vio" };
11340850443SRadu Sabau
11440850443SRadu Sabau enum ad4691_ref_ctrl {
11540850443SRadu Sabau AD4691_VREF_2P5,
11640850443SRadu Sabau AD4691_VREF_3P0,
11740850443SRadu Sabau AD4691_VREF_3P3,
11840850443SRadu Sabau AD4691_VREF_4P096,
11940850443SRadu Sabau AD4691_VREF_5P0
12040850443SRadu Sabau };
12140850443SRadu Sabau
12240850443SRadu Sabau struct ad4691_channel_info {
12340850443SRadu Sabau const struct iio_chan_spec *channels __counted_by_ptr(num_channels);
124*6d9e7161SRadu Sabau const struct iio_chan_spec *manual_channels __counted_by_ptr(num_channels);
12540850443SRadu Sabau unsigned int num_channels;
12640850443SRadu Sabau };
12740850443SRadu Sabau
12840850443SRadu Sabau struct ad4691_chip_info {
12940850443SRadu Sabau const char *name;
13040850443SRadu Sabau unsigned int max_rate;
13140850443SRadu Sabau const struct ad4691_channel_info *sw_info;
132ad4f8513SRadu Sabau const struct ad4691_channel_info *offload_info;
13340850443SRadu Sabau };
13440850443SRadu Sabau
135*6d9e7161SRadu Sabau /* CNV burst mode channel — exposes oversampling ratio. */
13640850443SRadu Sabau #define AD4691_CHANNEL(ch) \
13740850443SRadu Sabau { \
13840850443SRadu Sabau .type = IIO_VOLTAGE, \
13940850443SRadu Sabau .indexed = 1, \
14040850443SRadu Sabau .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), \
14140850443SRadu Sabau .info_mask_shared_by_all = BIT(IIO_CHAN_INFO_SCALE) \
142*6d9e7161SRadu Sabau | BIT(IIO_CHAN_INFO_SAMP_FREQ) \
143*6d9e7161SRadu Sabau | BIT(IIO_CHAN_INFO_OVERSAMPLING_RATIO), \
144*6d9e7161SRadu Sabau .info_mask_shared_by_all_available = \
145*6d9e7161SRadu Sabau BIT(IIO_CHAN_INFO_SAMP_FREQ) \
146*6d9e7161SRadu Sabau | BIT(IIO_CHAN_INFO_OVERSAMPLING_RATIO), \
147*6d9e7161SRadu Sabau .channel = ch, \
148*6d9e7161SRadu Sabau .scan_index = ch, \
149*6d9e7161SRadu Sabau .scan_type = { \
150*6d9e7161SRadu Sabau .format = 'u', \
151*6d9e7161SRadu Sabau .realbits = 16, \
152*6d9e7161SRadu Sabau .storagebits = 16, \
153*6d9e7161SRadu Sabau .endianness = IIO_BE, \
154*6d9e7161SRadu Sabau }, \
155*6d9e7161SRadu Sabau }
156*6d9e7161SRadu Sabau
157*6d9e7161SRadu Sabau /*
158*6d9e7161SRadu Sabau * Manual mode channel — no oversampling ratio attribute. OSR is not
159*6d9e7161SRadu Sabau * supported in manual mode; ACC_DEPTH_IN is not configured during manual
160*6d9e7161SRadu Sabau * buffer enable.
161*6d9e7161SRadu Sabau */
162*6d9e7161SRadu Sabau #define AD4691_MANUAL_CHANNEL(ch) \
163*6d9e7161SRadu Sabau { \
164*6d9e7161SRadu Sabau .type = IIO_VOLTAGE, \
165*6d9e7161SRadu Sabau .indexed = 1, \
166*6d9e7161SRadu Sabau .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), \
167*6d9e7161SRadu Sabau .info_mask_shared_by_all = BIT(IIO_CHAN_INFO_SCALE) \
16840850443SRadu Sabau | BIT(IIO_CHAN_INFO_SAMP_FREQ), \
16940850443SRadu Sabau .info_mask_shared_by_all_available = \
17040850443SRadu Sabau BIT(IIO_CHAN_INFO_SAMP_FREQ), \
17140850443SRadu Sabau .channel = ch, \
17241297c6bSRadu Sabau .scan_index = ch, \
17340850443SRadu Sabau .scan_type = { \
17441297c6bSRadu Sabau .format = 'u', \
17540850443SRadu Sabau .realbits = 16, \
17641297c6bSRadu Sabau .storagebits = 16, \
17741297c6bSRadu Sabau .endianness = IIO_BE, \
17840850443SRadu Sabau }, \
17940850443SRadu Sabau }
18040850443SRadu Sabau
181ad4f8513SRadu Sabau /*
182ad4f8513SRadu Sabau * Offload path (bits_per_word=16): the SPI Engine assembles received
183ad4f8513SRadu Sabau * bits into native 16-bit words before DMA, so samples are in
184ad4f8513SRadu Sabau * CPU-native byte order (IIO_CPU). storagebits=16 matches the 16-bit
185ad4f8513SRadu Sabau * DMA word size.
186*6d9e7161SRadu Sabau *
187*6d9e7161SRadu Sabau * CNV burst offload configures ACC_DEPTH_IN per channel, so the
188*6d9e7161SRadu Sabau * oversampling_ratio attribute is exposed. Manual offload does not;
189*6d9e7161SRadu Sabau * use AD4691_OFFLOAD_MANUAL_CHANNEL for that path.
190ad4f8513SRadu Sabau */
191ad4f8513SRadu Sabau #define AD4691_OFFLOAD_CHANNEL(ch) \
192ad4f8513SRadu Sabau { \
193ad4f8513SRadu Sabau .type = IIO_VOLTAGE, \
194ad4f8513SRadu Sabau .indexed = 1, \
195ad4f8513SRadu Sabau .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), \
196ad4f8513SRadu Sabau .info_mask_shared_by_all = BIT(IIO_CHAN_INFO_SCALE) \
197*6d9e7161SRadu Sabau | BIT(IIO_CHAN_INFO_SAMP_FREQ) \
198*6d9e7161SRadu Sabau | BIT(IIO_CHAN_INFO_OVERSAMPLING_RATIO), \
199*6d9e7161SRadu Sabau .info_mask_shared_by_all_available = \
200*6d9e7161SRadu Sabau BIT(IIO_CHAN_INFO_SAMP_FREQ) \
201*6d9e7161SRadu Sabau | BIT(IIO_CHAN_INFO_OVERSAMPLING_RATIO), \
202*6d9e7161SRadu Sabau .channel = ch, \
203*6d9e7161SRadu Sabau .scan_index = ch, \
204*6d9e7161SRadu Sabau .scan_type = { \
205*6d9e7161SRadu Sabau .format = 'u', \
206*6d9e7161SRadu Sabau .realbits = 16, \
207*6d9e7161SRadu Sabau .storagebits = 16, \
208*6d9e7161SRadu Sabau }, \
209*6d9e7161SRadu Sabau }
210*6d9e7161SRadu Sabau
211*6d9e7161SRadu Sabau /* Manual offload — same IIO_CPU layout but no oversampling_ratio attribute. */
212*6d9e7161SRadu Sabau #define AD4691_OFFLOAD_MANUAL_CHANNEL(ch) \
213*6d9e7161SRadu Sabau { \
214*6d9e7161SRadu Sabau .type = IIO_VOLTAGE, \
215*6d9e7161SRadu Sabau .indexed = 1, \
216*6d9e7161SRadu Sabau .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), \
217*6d9e7161SRadu Sabau .info_mask_shared_by_all = BIT(IIO_CHAN_INFO_SCALE) \
218ad4f8513SRadu Sabau | BIT(IIO_CHAN_INFO_SAMP_FREQ), \
219ad4f8513SRadu Sabau .info_mask_shared_by_all_available = \
220ad4f8513SRadu Sabau BIT(IIO_CHAN_INFO_SAMP_FREQ), \
221ad4f8513SRadu Sabau .channel = ch, \
222ad4f8513SRadu Sabau .scan_index = ch, \
223ad4f8513SRadu Sabau .scan_type = { \
224ad4f8513SRadu Sabau .format = 'u', \
225ad4f8513SRadu Sabau .realbits = 16, \
226ad4f8513SRadu Sabau .storagebits = 16, \
227ad4f8513SRadu Sabau }, \
228ad4f8513SRadu Sabau }
229ad4f8513SRadu Sabau
23040850443SRadu Sabau static const struct iio_chan_spec ad4691_channels[] = {
23140850443SRadu Sabau AD4691_CHANNEL(0),
23240850443SRadu Sabau AD4691_CHANNEL(1),
23340850443SRadu Sabau AD4691_CHANNEL(2),
23440850443SRadu Sabau AD4691_CHANNEL(3),
23540850443SRadu Sabau AD4691_CHANNEL(4),
23640850443SRadu Sabau AD4691_CHANNEL(5),
23740850443SRadu Sabau AD4691_CHANNEL(6),
23840850443SRadu Sabau AD4691_CHANNEL(7),
23940850443SRadu Sabau AD4691_CHANNEL(8),
24040850443SRadu Sabau AD4691_CHANNEL(9),
24140850443SRadu Sabau AD4691_CHANNEL(10),
24240850443SRadu Sabau AD4691_CHANNEL(11),
24340850443SRadu Sabau AD4691_CHANNEL(12),
24440850443SRadu Sabau AD4691_CHANNEL(13),
24540850443SRadu Sabau AD4691_CHANNEL(14),
24640850443SRadu Sabau AD4691_CHANNEL(15),
24741297c6bSRadu Sabau IIO_CHAN_SOFT_TIMESTAMP(16),
24840850443SRadu Sabau };
24940850443SRadu Sabau
25040850443SRadu Sabau static const struct iio_chan_spec ad4693_channels[] = {
25140850443SRadu Sabau AD4691_CHANNEL(0),
25240850443SRadu Sabau AD4691_CHANNEL(1),
25340850443SRadu Sabau AD4691_CHANNEL(2),
25440850443SRadu Sabau AD4691_CHANNEL(3),
25540850443SRadu Sabau AD4691_CHANNEL(4),
25640850443SRadu Sabau AD4691_CHANNEL(5),
25740850443SRadu Sabau AD4691_CHANNEL(6),
25840850443SRadu Sabau AD4691_CHANNEL(7),
25941297c6bSRadu Sabau IIO_CHAN_SOFT_TIMESTAMP(8),
26040850443SRadu Sabau };
26140850443SRadu Sabau
262ad4f8513SRadu Sabau /*
263ad4f8513SRadu Sabau * Offload channel arrays: no IIO_CHAN_SOFT_TIMESTAMP because DMA delivers
264ad4f8513SRadu Sabau * data directly to userspace without a software timestamp.
265ad4f8513SRadu Sabau */
266ad4f8513SRadu Sabau static const struct iio_chan_spec ad4691_offload_channels[] = {
267ad4f8513SRadu Sabau AD4691_OFFLOAD_CHANNEL(0),
268ad4f8513SRadu Sabau AD4691_OFFLOAD_CHANNEL(1),
269ad4f8513SRadu Sabau AD4691_OFFLOAD_CHANNEL(2),
270ad4f8513SRadu Sabau AD4691_OFFLOAD_CHANNEL(3),
271ad4f8513SRadu Sabau AD4691_OFFLOAD_CHANNEL(4),
272ad4f8513SRadu Sabau AD4691_OFFLOAD_CHANNEL(5),
273ad4f8513SRadu Sabau AD4691_OFFLOAD_CHANNEL(6),
274ad4f8513SRadu Sabau AD4691_OFFLOAD_CHANNEL(7),
275ad4f8513SRadu Sabau AD4691_OFFLOAD_CHANNEL(8),
276ad4f8513SRadu Sabau AD4691_OFFLOAD_CHANNEL(9),
277ad4f8513SRadu Sabau AD4691_OFFLOAD_CHANNEL(10),
278ad4f8513SRadu Sabau AD4691_OFFLOAD_CHANNEL(11),
279ad4f8513SRadu Sabau AD4691_OFFLOAD_CHANNEL(12),
280ad4f8513SRadu Sabau AD4691_OFFLOAD_CHANNEL(13),
281ad4f8513SRadu Sabau AD4691_OFFLOAD_CHANNEL(14),
282ad4f8513SRadu Sabau AD4691_OFFLOAD_CHANNEL(15),
283ad4f8513SRadu Sabau };
284ad4f8513SRadu Sabau
285ad4f8513SRadu Sabau static const struct iio_chan_spec ad4693_offload_channels[] = {
286ad4f8513SRadu Sabau AD4691_OFFLOAD_CHANNEL(0),
287ad4f8513SRadu Sabau AD4691_OFFLOAD_CHANNEL(1),
288ad4f8513SRadu Sabau AD4691_OFFLOAD_CHANNEL(2),
289ad4f8513SRadu Sabau AD4691_OFFLOAD_CHANNEL(3),
290ad4f8513SRadu Sabau AD4691_OFFLOAD_CHANNEL(4),
291ad4f8513SRadu Sabau AD4691_OFFLOAD_CHANNEL(5),
292ad4f8513SRadu Sabau AD4691_OFFLOAD_CHANNEL(6),
293ad4f8513SRadu Sabau AD4691_OFFLOAD_CHANNEL(7),
294ad4f8513SRadu Sabau };
295ad4f8513SRadu Sabau
296*6d9e7161SRadu Sabau static const struct iio_chan_spec ad4691_manual_channels[] = {
297*6d9e7161SRadu Sabau AD4691_MANUAL_CHANNEL(0),
298*6d9e7161SRadu Sabau AD4691_MANUAL_CHANNEL(1),
299*6d9e7161SRadu Sabau AD4691_MANUAL_CHANNEL(2),
300*6d9e7161SRadu Sabau AD4691_MANUAL_CHANNEL(3),
301*6d9e7161SRadu Sabau AD4691_MANUAL_CHANNEL(4),
302*6d9e7161SRadu Sabau AD4691_MANUAL_CHANNEL(5),
303*6d9e7161SRadu Sabau AD4691_MANUAL_CHANNEL(6),
304*6d9e7161SRadu Sabau AD4691_MANUAL_CHANNEL(7),
305*6d9e7161SRadu Sabau AD4691_MANUAL_CHANNEL(8),
306*6d9e7161SRadu Sabau AD4691_MANUAL_CHANNEL(9),
307*6d9e7161SRadu Sabau AD4691_MANUAL_CHANNEL(10),
308*6d9e7161SRadu Sabau AD4691_MANUAL_CHANNEL(11),
309*6d9e7161SRadu Sabau AD4691_MANUAL_CHANNEL(12),
310*6d9e7161SRadu Sabau AD4691_MANUAL_CHANNEL(13),
311*6d9e7161SRadu Sabau AD4691_MANUAL_CHANNEL(14),
312*6d9e7161SRadu Sabau AD4691_MANUAL_CHANNEL(15),
313*6d9e7161SRadu Sabau IIO_CHAN_SOFT_TIMESTAMP(16),
314*6d9e7161SRadu Sabau };
315*6d9e7161SRadu Sabau
316*6d9e7161SRadu Sabau static const struct iio_chan_spec ad4693_manual_channels[] = {
317*6d9e7161SRadu Sabau AD4691_MANUAL_CHANNEL(0),
318*6d9e7161SRadu Sabau AD4691_MANUAL_CHANNEL(1),
319*6d9e7161SRadu Sabau AD4691_MANUAL_CHANNEL(2),
320*6d9e7161SRadu Sabau AD4691_MANUAL_CHANNEL(3),
321*6d9e7161SRadu Sabau AD4691_MANUAL_CHANNEL(4),
322*6d9e7161SRadu Sabau AD4691_MANUAL_CHANNEL(5),
323*6d9e7161SRadu Sabau AD4691_MANUAL_CHANNEL(6),
324*6d9e7161SRadu Sabau AD4691_MANUAL_CHANNEL(7),
325*6d9e7161SRadu Sabau IIO_CHAN_SOFT_TIMESTAMP(8),
326*6d9e7161SRadu Sabau };
327*6d9e7161SRadu Sabau
328*6d9e7161SRadu Sabau static const struct iio_chan_spec ad4691_offload_manual_channels[] = {
329*6d9e7161SRadu Sabau AD4691_OFFLOAD_MANUAL_CHANNEL(0),
330*6d9e7161SRadu Sabau AD4691_OFFLOAD_MANUAL_CHANNEL(1),
331*6d9e7161SRadu Sabau AD4691_OFFLOAD_MANUAL_CHANNEL(2),
332*6d9e7161SRadu Sabau AD4691_OFFLOAD_MANUAL_CHANNEL(3),
333*6d9e7161SRadu Sabau AD4691_OFFLOAD_MANUAL_CHANNEL(4),
334*6d9e7161SRadu Sabau AD4691_OFFLOAD_MANUAL_CHANNEL(5),
335*6d9e7161SRadu Sabau AD4691_OFFLOAD_MANUAL_CHANNEL(6),
336*6d9e7161SRadu Sabau AD4691_OFFLOAD_MANUAL_CHANNEL(7),
337*6d9e7161SRadu Sabau AD4691_OFFLOAD_MANUAL_CHANNEL(8),
338*6d9e7161SRadu Sabau AD4691_OFFLOAD_MANUAL_CHANNEL(9),
339*6d9e7161SRadu Sabau AD4691_OFFLOAD_MANUAL_CHANNEL(10),
340*6d9e7161SRadu Sabau AD4691_OFFLOAD_MANUAL_CHANNEL(11),
341*6d9e7161SRadu Sabau AD4691_OFFLOAD_MANUAL_CHANNEL(12),
342*6d9e7161SRadu Sabau AD4691_OFFLOAD_MANUAL_CHANNEL(13),
343*6d9e7161SRadu Sabau AD4691_OFFLOAD_MANUAL_CHANNEL(14),
344*6d9e7161SRadu Sabau AD4691_OFFLOAD_MANUAL_CHANNEL(15),
345*6d9e7161SRadu Sabau };
346*6d9e7161SRadu Sabau
347*6d9e7161SRadu Sabau static const struct iio_chan_spec ad4693_offload_manual_channels[] = {
348*6d9e7161SRadu Sabau AD4691_OFFLOAD_MANUAL_CHANNEL(0),
349*6d9e7161SRadu Sabau AD4691_OFFLOAD_MANUAL_CHANNEL(1),
350*6d9e7161SRadu Sabau AD4691_OFFLOAD_MANUAL_CHANNEL(2),
351*6d9e7161SRadu Sabau AD4691_OFFLOAD_MANUAL_CHANNEL(3),
352*6d9e7161SRadu Sabau AD4691_OFFLOAD_MANUAL_CHANNEL(4),
353*6d9e7161SRadu Sabau AD4691_OFFLOAD_MANUAL_CHANNEL(5),
354*6d9e7161SRadu Sabau AD4691_OFFLOAD_MANUAL_CHANNEL(6),
355*6d9e7161SRadu Sabau AD4691_OFFLOAD_MANUAL_CHANNEL(7),
356*6d9e7161SRadu Sabau };
357*6d9e7161SRadu Sabau
358*6d9e7161SRadu Sabau static const int ad4691_oversampling_ratios[] = { 1, 2, 4, 8, 16, 32 };
359*6d9e7161SRadu Sabau
36040850443SRadu Sabau static const struct ad4691_channel_info ad4691_sw_info = {
36140850443SRadu Sabau .channels = ad4691_channels,
362*6d9e7161SRadu Sabau .manual_channels = ad4691_manual_channels,
36340850443SRadu Sabau .num_channels = ARRAY_SIZE(ad4691_channels),
36440850443SRadu Sabau };
36540850443SRadu Sabau
36640850443SRadu Sabau static const struct ad4691_channel_info ad4693_sw_info = {
36740850443SRadu Sabau .channels = ad4693_channels,
368*6d9e7161SRadu Sabau .manual_channels = ad4693_manual_channels,
36940850443SRadu Sabau .num_channels = ARRAY_SIZE(ad4693_channels),
37040850443SRadu Sabau };
37140850443SRadu Sabau
372ad4f8513SRadu Sabau static const struct ad4691_channel_info ad4691_offload_info = {
373ad4f8513SRadu Sabau .channels = ad4691_offload_channels,
374*6d9e7161SRadu Sabau .manual_channels = ad4691_offload_manual_channels,
375ad4f8513SRadu Sabau .num_channels = ARRAY_SIZE(ad4691_offload_channels),
376ad4f8513SRadu Sabau };
377ad4f8513SRadu Sabau
378ad4f8513SRadu Sabau static const struct ad4691_channel_info ad4693_offload_info = {
379ad4f8513SRadu Sabau .channels = ad4693_offload_channels,
380*6d9e7161SRadu Sabau .manual_channels = ad4693_offload_manual_channels,
381ad4f8513SRadu Sabau .num_channels = ARRAY_SIZE(ad4693_offload_channels),
382ad4f8513SRadu Sabau };
383ad4f8513SRadu Sabau
38440850443SRadu Sabau /*
38540850443SRadu Sabau * Internal oscillator frequency table. Index is the OSC_FREQ_REG[3:0] value.
38640850443SRadu Sabau * Index 0 (1 MHz) is only valid for AD4692/AD4694; AD4691/AD4693 support
38740850443SRadu Sabau * up to 500 kHz and use index 1 as their highest valid rate.
38840850443SRadu Sabau */
38940850443SRadu Sabau static const int ad4691_osc_freqs_Hz[] = {
39040850443SRadu Sabau [0x0] = 1000000,
39140850443SRadu Sabau [0x1] = 500000,
39240850443SRadu Sabau [0x2] = 400000,
39340850443SRadu Sabau [0x3] = 250000,
39440850443SRadu Sabau [0x4] = 200000,
39540850443SRadu Sabau [0x5] = 167000,
39640850443SRadu Sabau [0x6] = 133000,
39740850443SRadu Sabau [0x7] = 125000,
39840850443SRadu Sabau [0x8] = 100000,
39940850443SRadu Sabau [0x9] = 50000,
40040850443SRadu Sabau [0xA] = 25000,
40140850443SRadu Sabau [0xB] = 12500,
40240850443SRadu Sabau [0xC] = 10000,
40340850443SRadu Sabau [0xD] = 5000,
40440850443SRadu Sabau [0xE] = 2500,
40540850443SRadu Sabau [0xF] = 1250,
40640850443SRadu Sabau };
40740850443SRadu Sabau
40841297c6bSRadu Sabau static const char * const ad4691_gp_names[] = { "gp0", "gp1", "gp2", "gp3" };
40941297c6bSRadu Sabau
41040850443SRadu Sabau static const struct ad4691_chip_info ad4691_chip_info = {
41140850443SRadu Sabau .name = "ad4691",
41240850443SRadu Sabau .max_rate = 500 * HZ_PER_KHZ,
41340850443SRadu Sabau .sw_info = &ad4691_sw_info,
414ad4f8513SRadu Sabau .offload_info = &ad4691_offload_info,
41540850443SRadu Sabau };
41640850443SRadu Sabau
41740850443SRadu Sabau static const struct ad4691_chip_info ad4692_chip_info = {
41840850443SRadu Sabau .name = "ad4692",
41940850443SRadu Sabau .max_rate = 1 * HZ_PER_MHZ,
42040850443SRadu Sabau .sw_info = &ad4691_sw_info,
421ad4f8513SRadu Sabau .offload_info = &ad4691_offload_info,
42240850443SRadu Sabau };
42340850443SRadu Sabau
42440850443SRadu Sabau static const struct ad4691_chip_info ad4693_chip_info = {
42540850443SRadu Sabau .name = "ad4693",
42640850443SRadu Sabau .max_rate = 500 * HZ_PER_KHZ,
42740850443SRadu Sabau .sw_info = &ad4693_sw_info,
428ad4f8513SRadu Sabau .offload_info = &ad4693_offload_info,
42940850443SRadu Sabau };
43040850443SRadu Sabau
43140850443SRadu Sabau static const struct ad4691_chip_info ad4694_chip_info = {
43240850443SRadu Sabau .name = "ad4694",
43340850443SRadu Sabau .max_rate = 1 * HZ_PER_MHZ,
43440850443SRadu Sabau .sw_info = &ad4693_sw_info,
435ad4f8513SRadu Sabau .offload_info = &ad4693_offload_info,
43640850443SRadu Sabau };
43740850443SRadu Sabau
43840850443SRadu Sabau struct ad4691_state {
43940850443SRadu Sabau const struct ad4691_chip_info *info;
44040850443SRadu Sabau struct regmap *regmap;
44140850443SRadu Sabau struct spi_device *spi;
44240850443SRadu Sabau
44341297c6bSRadu Sabau struct pwm_device *conv_trigger;
44441297c6bSRadu Sabau int irq;
44540850443SRadu Sabau int vref_uV;
44641297c6bSRadu Sabau u32 cnv_period_ns;
447*6d9e7161SRadu Sabau /*
448*6d9e7161SRadu Sabau * Snapped oscillator frequency (Hz) shared by all channels. Set when
449*6d9e7161SRadu Sabau * sampling_frequency or oversampling_ratio is written; written to
450*6d9e7161SRadu Sabau * OSC_FREQ_REG at buffer enable and single-shot time so both attributes
451*6d9e7161SRadu Sabau * can be set in any order. Reading in_voltage_sampling_frequency
452*6d9e7161SRadu Sabau * returns target_osc_freq_Hz / osr — the effective rate given the
453*6d9e7161SRadu Sabau * shared oversampling ratio.
454*6d9e7161SRadu Sabau */
455*6d9e7161SRadu Sabau u32 target_osc_freq_Hz;
456*6d9e7161SRadu Sabau /* Shared oversampling ratio across all channels; always 1 in manual mode. */
457*6d9e7161SRadu Sabau unsigned int osr;
458*6d9e7161SRadu Sabau /*
459*6d9e7161SRadu Sabau * Precomputed effective-rate lists, one row per entry in
460*6d9e7161SRadu Sabau * ad4691_oversampling_ratios[]. Populated at probe; read_avail picks
461*6d9e7161SRadu Sabau * the row for the current shared OSR. The tables are stable after
462*6d9e7161SRadu Sabau * probe so returning a pointer into them from read_avail is race-free.
463*6d9e7161SRadu Sabau */
464*6d9e7161SRadu Sabau int samp_freq_avail[ARRAY_SIZE(ad4691_oversampling_ratios)][ARRAY_SIZE(ad4691_osc_freqs_Hz)];
465*6d9e7161SRadu Sabau int samp_freq_avail_len[ARRAY_SIZE(ad4691_oversampling_ratios)];
46640850443SRadu Sabau
46741297c6bSRadu Sabau bool manual_mode;
46841297c6bSRadu Sabau bool irq_enabled;
46940850443SRadu Sabau bool refbuf_en;
47040850443SRadu Sabau bool ldo_en;
47140850443SRadu Sabau /*
47240850443SRadu Sabau * Synchronize access to members of the driver state, and ensure
47340850443SRadu Sabau * atomicity of consecutive SPI operations.
47440850443SRadu Sabau */
47540850443SRadu Sabau struct mutex lock;
476ad4f8513SRadu Sabau /* NULL when no SPI offload hardware is present. */
477ad4f8513SRadu Sabau struct spi_offload *offload;
478ad4f8513SRadu Sabau struct spi_offload_trigger *offload_trigger;
479ad4f8513SRadu Sabau u64 trigger_hz;
48041297c6bSRadu Sabau /*
48141297c6bSRadu Sabau * Per-buffer-enable lifetime resources:
48241297c6bSRadu Sabau * Manual Mode - a pre-built SPI message that clocks out N+1
48341297c6bSRadu Sabau * transfers in one go.
48441297c6bSRadu Sabau * CNV Burst Mode - a pre-built SPI message that clocks out 2*N
48541297c6bSRadu Sabau * transfers in one go.
48641297c6bSRadu Sabau */
48741297c6bSRadu Sabau struct spi_message scan_msg;
48841297c6bSRadu Sabau /*
48941297c6bSRadu Sabau * max 16 + 1 NOOP (manual) or 2*16 + 1 state-reset (CNV burst).
49041297c6bSRadu Sabau */
49141297c6bSRadu Sabau struct spi_transfer scan_xfers[34];
49241297c6bSRadu Sabau /*
49341297c6bSRadu Sabau * CNV burst: 16 AVG_IN addresses = 16. Manual: 16 channel cmds +
494ad4f8513SRadu Sabau * 1 NOOP = 17. Stored as native u16. The non-offload path fills slots
495ad4f8513SRadu Sabau * with put_unaligned_be16() (bits_per_word=8, bytes go out in memory
496ad4f8513SRadu Sabau * order). The offload path assigns native values directly
497ad4f8513SRadu Sabau * (bits_per_word=bpw, SPI reads each slot as a native 16-bit word and
498ad4f8513SRadu Sabau * shifts it out MSB-first).
49941297c6bSRadu Sabau */
50041297c6bSRadu Sabau u16 scan_tx[17] __aligned(IIO_DMA_MINALIGN);
50141297c6bSRadu Sabau /*
50241297c6bSRadu Sabau * CNV burst state-reset: 4-byte write [addr_hi, addr_lo,
50341297c6bSRadu Sabau * STATE_RESET_ALL, OSC_EN=1]. CS is asserted throughout, so
50441297c6bSRadu Sabau * ADDR_DESCENDING writes byte[3]=1 to OSC_EN_REG (0x180) as a
50541297c6bSRadu Sabau * deliberate side-write, keeping the oscillator enabled. Shared
50641297c6bSRadu Sabau * with the offload path (mutually exclusive at probe).
50741297c6bSRadu Sabau */
50841297c6bSRadu Sabau u8 scan_tx_reset[4] __aligned(IIO_DMA_MINALIGN);
50941297c6bSRadu Sabau /*
51041297c6bSRadu Sabau * Scan buffer: one BE16 slot per active channel, plus timestamp.
51141297c6bSRadu Sabau * DMA-aligned because scan_xfers point rx_buf directly into vals[].
51241297c6bSRadu Sabau */
51341297c6bSRadu Sabau IIO_DECLARE_DMA_BUFFER_WITH_TS(__be16, vals, 16);
51440850443SRadu Sabau };
51540850443SRadu Sabau
51641297c6bSRadu Sabau /*
51741297c6bSRadu Sabau * Configure the given GP pin (0-3) as DATA_READY output.
51841297c6bSRadu Sabau * GP0/GP1 → GPIO_MODE1_REG, GP2/GP3 → GPIO_MODE2_REG.
51941297c6bSRadu Sabau * Even pins occupy bits [3:0], odd pins bits [7:4].
52041297c6bSRadu Sabau */
ad4691_gpio_setup(struct ad4691_state * st,unsigned int gp_num)52141297c6bSRadu Sabau static int ad4691_gpio_setup(struct ad4691_state *st, unsigned int gp_num)
52241297c6bSRadu Sabau {
52341297c6bSRadu Sabau unsigned int bit_off = gp_num % 2;
52441297c6bSRadu Sabau unsigned int reg_off = gp_num / 2;
52541297c6bSRadu Sabau unsigned int shift = 4 * bit_off;
52641297c6bSRadu Sabau
52741297c6bSRadu Sabau return regmap_update_bits(st->regmap,
52841297c6bSRadu Sabau AD4691_GPIO_MODE1_REG + reg_off,
52941297c6bSRadu Sabau AD4691_GP_MODE_MASK << shift,
53041297c6bSRadu Sabau AD4691_GP_MODE_DATA_READY << shift);
53141297c6bSRadu Sabau }
53241297c6bSRadu Sabau
533ad4f8513SRadu Sabau static const struct spi_offload_config ad4691_offload_config = {
534ad4f8513SRadu Sabau .capability_flags = SPI_OFFLOAD_CAP_TRIGGER |
535ad4f8513SRadu Sabau SPI_OFFLOAD_CAP_RX_STREAM_DMA,
536ad4f8513SRadu Sabau };
537ad4f8513SRadu Sabau
ad4691_offload_trigger_match(struct spi_offload_trigger * trigger,enum spi_offload_trigger_type type,u64 * args,u32 nargs)538ad4f8513SRadu Sabau static bool ad4691_offload_trigger_match(struct spi_offload_trigger *trigger,
539ad4f8513SRadu Sabau enum spi_offload_trigger_type type,
540ad4f8513SRadu Sabau u64 *args, u32 nargs)
541ad4f8513SRadu Sabau {
542ad4f8513SRadu Sabau return type == SPI_OFFLOAD_TRIGGER_DATA_READY && nargs == 1 && args[0] <= 3;
543ad4f8513SRadu Sabau }
544ad4f8513SRadu Sabau
ad4691_offload_trigger_request(struct spi_offload_trigger * trigger,enum spi_offload_trigger_type type,u64 * args,u32 nargs)545ad4f8513SRadu Sabau static int ad4691_offload_trigger_request(struct spi_offload_trigger *trigger,
546ad4f8513SRadu Sabau enum spi_offload_trigger_type type,
547ad4f8513SRadu Sabau u64 *args, u32 nargs)
548ad4f8513SRadu Sabau {
549ad4f8513SRadu Sabau struct ad4691_state *st = spi_offload_trigger_get_priv(trigger);
550ad4f8513SRadu Sabau
551ad4f8513SRadu Sabau if (nargs != 1 || args[0] > 3)
552ad4f8513SRadu Sabau return -EINVAL;
553ad4f8513SRadu Sabau
554ad4f8513SRadu Sabau return ad4691_gpio_setup(st, args[0]);
555ad4f8513SRadu Sabau }
556ad4f8513SRadu Sabau
ad4691_offload_trigger_validate(struct spi_offload_trigger * trigger,struct spi_offload_trigger_config * config)557ad4f8513SRadu Sabau static int ad4691_offload_trigger_validate(struct spi_offload_trigger *trigger,
558ad4f8513SRadu Sabau struct spi_offload_trigger_config *config)
559ad4f8513SRadu Sabau {
560ad4f8513SRadu Sabau if (config->type != SPI_OFFLOAD_TRIGGER_DATA_READY)
561ad4f8513SRadu Sabau return -EINVAL;
562ad4f8513SRadu Sabau
563ad4f8513SRadu Sabau return 0;
564ad4f8513SRadu Sabau }
565ad4f8513SRadu Sabau
566ad4f8513SRadu Sabau static const struct spi_offload_trigger_ops ad4691_offload_trigger_ops = {
567ad4f8513SRadu Sabau .match = ad4691_offload_trigger_match,
568ad4f8513SRadu Sabau .request = ad4691_offload_trigger_request,
569ad4f8513SRadu Sabau .validate = ad4691_offload_trigger_validate,
570ad4f8513SRadu Sabau };
571ad4f8513SRadu Sabau
ad4691_reg_read(void * context,unsigned int reg,unsigned int * val)57240850443SRadu Sabau static int ad4691_reg_read(void *context, unsigned int reg, unsigned int *val)
57340850443SRadu Sabau {
57440850443SRadu Sabau struct spi_device *spi = context;
57540850443SRadu Sabau u8 tx[2], rx[4];
57640850443SRadu Sabau int ret;
57740850443SRadu Sabau
57840850443SRadu Sabau /* Set bit 15 to mark the operation as READ. */
57940850443SRadu Sabau put_unaligned_be16(0x8000 | reg, tx);
58040850443SRadu Sabau
58140850443SRadu Sabau switch (reg) {
58240850443SRadu Sabau case 0 ... AD4691_OSC_FREQ_REG:
58340850443SRadu Sabau case AD4691_SPARE_CONTROL ... AD4691_ACC_MASK_REG - 1:
58440850443SRadu Sabau case AD4691_ACC_MASK_REG + 1 ... AD4691_ACC_SAT_OVR_REG(15):
58540850443SRadu Sabau ret = spi_write_then_read(spi, tx, sizeof(tx), rx, 1);
58640850443SRadu Sabau if (ret)
58740850443SRadu Sabau return ret;
58840850443SRadu Sabau *val = rx[0];
58940850443SRadu Sabau return 0;
59040850443SRadu Sabau case AD4691_ACC_MASK_REG:
59140850443SRadu Sabau case AD4691_STD_SEQ_CONFIG:
59240850443SRadu Sabau case AD4691_AVG_IN(0) ... AD4691_AVG_IN(15):
59340850443SRadu Sabau ret = spi_write_then_read(spi, tx, sizeof(tx), rx, 2);
59440850443SRadu Sabau if (ret)
59540850443SRadu Sabau return ret;
59640850443SRadu Sabau *val = get_unaligned_be16(rx);
59740850443SRadu Sabau return 0;
59840850443SRadu Sabau case AD4691_AVG_STS_IN(0) ... AD4691_AVG_STS_IN(15):
59940850443SRadu Sabau case AD4691_ACC_IN(0) ... AD4691_ACC_IN(15):
60040850443SRadu Sabau ret = spi_write_then_read(spi, tx, sizeof(tx), rx, 3);
60140850443SRadu Sabau if (ret)
60240850443SRadu Sabau return ret;
60340850443SRadu Sabau *val = get_unaligned_be24(rx);
60440850443SRadu Sabau return 0;
60540850443SRadu Sabau case AD4691_ACC_STS_DATA(0) ... AD4691_ACC_STS_DATA(15):
60640850443SRadu Sabau ret = spi_write_then_read(spi, tx, sizeof(tx), rx, 4);
60740850443SRadu Sabau if (ret)
60840850443SRadu Sabau return ret;
60940850443SRadu Sabau *val = get_unaligned_be32(rx);
61040850443SRadu Sabau return 0;
61140850443SRadu Sabau default:
61240850443SRadu Sabau return -EINVAL;
61340850443SRadu Sabau }
61440850443SRadu Sabau }
61540850443SRadu Sabau
ad4691_reg_write(void * context,unsigned int reg,unsigned int val)61640850443SRadu Sabau static int ad4691_reg_write(void *context, unsigned int reg, unsigned int val)
61740850443SRadu Sabau {
61840850443SRadu Sabau struct spi_device *spi = context;
61940850443SRadu Sabau u8 tx[4];
62040850443SRadu Sabau
62140850443SRadu Sabau put_unaligned_be16(reg, tx);
62240850443SRadu Sabau
62340850443SRadu Sabau switch (reg) {
62440850443SRadu Sabau case 0 ... AD4691_OSC_FREQ_REG:
62540850443SRadu Sabau case AD4691_SPARE_CONTROL ... AD4691_ACC_MASK_REG - 1:
62640850443SRadu Sabau case AD4691_ACC_MASK_REG + 1 ... AD4691_GPIO_MODE2_REG:
62740850443SRadu Sabau if (val > U8_MAX)
62840850443SRadu Sabau return -EINVAL;
62940850443SRadu Sabau tx[2] = val;
63040850443SRadu Sabau return spi_write_then_read(spi, tx, 3, NULL, 0);
63140850443SRadu Sabau case AD4691_ACC_MASK_REG:
63240850443SRadu Sabau case AD4691_STD_SEQ_CONFIG:
63340850443SRadu Sabau if (val > U16_MAX)
63440850443SRadu Sabau return -EINVAL;
63540850443SRadu Sabau put_unaligned_be16(val, &tx[2]);
63640850443SRadu Sabau return spi_write_then_read(spi, tx, 4, NULL, 0);
63740850443SRadu Sabau default:
63840850443SRadu Sabau return -EINVAL;
63940850443SRadu Sabau }
64040850443SRadu Sabau }
64140850443SRadu Sabau
ad4691_volatile_reg(struct device * dev,unsigned int reg)64240850443SRadu Sabau static bool ad4691_volatile_reg(struct device *dev, unsigned int reg)
64340850443SRadu Sabau {
64440850443SRadu Sabau switch (reg) {
64540850443SRadu Sabau case AD4691_STATUS_REG:
64640850443SRadu Sabau case AD4691_CLAMP_STATUS1_REG:
64740850443SRadu Sabau case AD4691_CLAMP_STATUS2_REG:
64840850443SRadu Sabau case AD4691_GPIO_READ:
64940850443SRadu Sabau case AD4691_ACC_STATUS_FULL1_REG ... AD4691_ACC_STATUS_SAT2_REG:
65040850443SRadu Sabau case AD4691_ACC_SAT_OVR_REG(0) ... AD4691_ACC_SAT_OVR_REG(15):
65140850443SRadu Sabau case AD4691_AVG_IN(0) ... AD4691_AVG_IN(15):
65240850443SRadu Sabau case AD4691_AVG_STS_IN(0) ... AD4691_AVG_STS_IN(15):
65340850443SRadu Sabau case AD4691_ACC_IN(0) ... AD4691_ACC_IN(15):
65440850443SRadu Sabau case AD4691_ACC_STS_DATA(0) ... AD4691_ACC_STS_DATA(15):
65540850443SRadu Sabau return true;
65640850443SRadu Sabau default:
65740850443SRadu Sabau return false;
65840850443SRadu Sabau }
65940850443SRadu Sabau }
66040850443SRadu Sabau
ad4691_readable_reg(struct device * dev,unsigned int reg)66140850443SRadu Sabau static bool ad4691_readable_reg(struct device *dev, unsigned int reg)
66240850443SRadu Sabau {
66340850443SRadu Sabau switch (reg) {
66440850443SRadu Sabau case 0 ... AD4691_OSC_FREQ_REG:
66540850443SRadu Sabau case AD4691_SPARE_CONTROL ... AD4691_ACC_SAT_OVR_REG(15):
66640850443SRadu Sabau case AD4691_STD_SEQ_CONFIG:
66740850443SRadu Sabau return true;
66840850443SRadu Sabau default:
66940850443SRadu Sabau break;
67040850443SRadu Sabau }
67140850443SRadu Sabau
67240850443SRadu Sabau /*
67340850443SRadu Sabau * Multi-byte result registers have non-unit strides; only the base
67440850443SRadu Sabau * address of each entry is a valid single-register read.
67540850443SRadu Sabau */
67640850443SRadu Sabau if (reg >= AD4691_AVG_IN(0) && reg <= AD4691_AVG_IN(15))
67740850443SRadu Sabau return (reg - AD4691_AVG_IN(0)) % 2 == 0;
67840850443SRadu Sabau if (reg >= AD4691_AVG_STS_IN(0) && reg <= AD4691_AVG_STS_IN(15))
67940850443SRadu Sabau return (reg - AD4691_AVG_STS_IN(0)) % 3 == 0;
68040850443SRadu Sabau if (reg >= AD4691_ACC_IN(0) && reg <= AD4691_ACC_IN(15))
68140850443SRadu Sabau return (reg - AD4691_ACC_IN(0)) % 3 == 0;
68240850443SRadu Sabau if (reg >= AD4691_ACC_STS_DATA(0) && reg <= AD4691_ACC_STS_DATA(15))
68340850443SRadu Sabau return (reg - AD4691_ACC_STS_DATA(0)) % 4 == 0;
68440850443SRadu Sabau
68540850443SRadu Sabau return false;
68640850443SRadu Sabau }
68740850443SRadu Sabau
ad4691_writeable_reg(struct device * dev,unsigned int reg)68840850443SRadu Sabau static bool ad4691_writeable_reg(struct device *dev, unsigned int reg)
68940850443SRadu Sabau {
69040850443SRadu Sabau switch (reg) {
69140850443SRadu Sabau case 0 ... AD4691_OSC_FREQ_REG:
69240850443SRadu Sabau case AD4691_STD_SEQ_CONFIG:
69340850443SRadu Sabau case AD4691_SPARE_CONTROL ... AD4691_GPIO_MODE2_REG:
69440850443SRadu Sabau return true;
69540850443SRadu Sabau default:
69640850443SRadu Sabau return false;
69740850443SRadu Sabau }
69840850443SRadu Sabau }
69940850443SRadu Sabau
70040850443SRadu Sabau static const struct regmap_config ad4691_regmap_config = {
70140850443SRadu Sabau .reg_bits = 16,
70240850443SRadu Sabau .val_bits = 32,
70340850443SRadu Sabau .reg_read = ad4691_reg_read,
70440850443SRadu Sabau .reg_write = ad4691_reg_write,
70540850443SRadu Sabau .volatile_reg = ad4691_volatile_reg,
70640850443SRadu Sabau .readable_reg = ad4691_readable_reg,
70740850443SRadu Sabau .writeable_reg = ad4691_writeable_reg,
70840850443SRadu Sabau .max_register = AD4691_ACC_STS_DATA(15),
70940850443SRadu Sabau .cache_type = REGCACHE_MAPLE,
71040850443SRadu Sabau };
71140850443SRadu Sabau
71240850443SRadu Sabau /*
71340850443SRadu Sabau * Index 0 in ad4691_osc_freqs_Hz is 1 MHz — valid only for AD4692/AD4694
71440850443SRadu Sabau * (max_rate == 1 MHz). AD4691/AD4693 cap at 500 kHz so their valid range
71540850443SRadu Sabau * starts at index 1.
71640850443SRadu Sabau */
ad4691_samp_freq_start(const struct ad4691_chip_info * info)71740850443SRadu Sabau static unsigned int ad4691_samp_freq_start(const struct ad4691_chip_info *info)
71840850443SRadu Sabau {
71940850443SRadu Sabau return (info->max_rate == 1 * HZ_PER_MHZ) ? 0 : 1;
72040850443SRadu Sabau }
72140850443SRadu Sabau
722*6d9e7161SRadu Sabau /*
723*6d9e7161SRadu Sabau * Find the largest oscillator table entry that is both <= needed_osc and
724*6d9e7161SRadu Sabau * evenly divisible by osr (guaranteeing an integer effective rate on
725*6d9e7161SRadu Sabau * read-back). Returns 0 if no such entry exists in the chip's valid range.
726*6d9e7161SRadu Sabau */
ad4691_find_osc_freq(struct ad4691_state * st,unsigned int needed_osc,unsigned int osr)727*6d9e7161SRadu Sabau static unsigned int ad4691_find_osc_freq(struct ad4691_state *st,
728*6d9e7161SRadu Sabau unsigned int needed_osc,
729*6d9e7161SRadu Sabau unsigned int osr)
73040850443SRadu Sabau {
731*6d9e7161SRadu Sabau unsigned int start = ad4691_samp_freq_start(st->info);
73240850443SRadu Sabau
733*6d9e7161SRadu Sabau for (unsigned int i = start; i < ARRAY_SIZE(ad4691_osc_freqs_Hz); i++) {
734*6d9e7161SRadu Sabau if ((unsigned int)ad4691_osc_freqs_Hz[i] > needed_osc)
735*6d9e7161SRadu Sabau continue;
736*6d9e7161SRadu Sabau if (ad4691_osc_freqs_Hz[i] % osr)
737*6d9e7161SRadu Sabau continue;
738*6d9e7161SRadu Sabau return ad4691_osc_freqs_Hz[i];
739*6d9e7161SRadu Sabau }
740*6d9e7161SRadu Sabau return 0;
741*6d9e7161SRadu Sabau }
74240850443SRadu Sabau
743*6d9e7161SRadu Sabau /* Write target_osc_freq_Hz to OSC_FREQ_REG. Called at use time. */
ad4691_write_osc_freq(struct ad4691_state * st)744*6d9e7161SRadu Sabau static int ad4691_write_osc_freq(struct ad4691_state *st)
745*6d9e7161SRadu Sabau {
746*6d9e7161SRadu Sabau for (unsigned int i = 0; i < ARRAY_SIZE(ad4691_osc_freqs_Hz); i++) {
747*6d9e7161SRadu Sabau if (ad4691_osc_freqs_Hz[i] == st->target_osc_freq_Hz)
748*6d9e7161SRadu Sabau return regmap_write(st->regmap, AD4691_OSC_FREQ_REG, i);
749*6d9e7161SRadu Sabau }
750*6d9e7161SRadu Sabau return -EINVAL;
751*6d9e7161SRadu Sabau }
75240850443SRadu Sabau
753*6d9e7161SRadu Sabau /* Return the index of osr in ad4691_oversampling_ratios[], defaulting to 0. */
ad4691_osr_index(unsigned int osr)754*6d9e7161SRadu Sabau static unsigned int ad4691_osr_index(unsigned int osr)
755*6d9e7161SRadu Sabau {
756*6d9e7161SRadu Sabau for (unsigned int i = 0; i < ARRAY_SIZE(ad4691_oversampling_ratios) - 1; i++) {
757*6d9e7161SRadu Sabau if ((unsigned int)ad4691_oversampling_ratios[i] == osr)
758*6d9e7161SRadu Sabau return i;
759*6d9e7161SRadu Sabau }
760*6d9e7161SRadu Sabau return ARRAY_SIZE(ad4691_oversampling_ratios) - 1;
761*6d9e7161SRadu Sabau }
762*6d9e7161SRadu Sabau
763*6d9e7161SRadu Sabau /*
764*6d9e7161SRadu Sabau * Precompute samp_freq_avail[][]: for each OSR value, list the oscillator
765*6d9e7161SRadu Sabau * table entries that divide evenly by that OSR, expressed as effective rates
766*6d9e7161SRadu Sabau * (osc_freq / osr). Called once at probe after st->info is set.
767*6d9e7161SRadu Sabau */
ad4691_precompute_samp_freq_avail(struct ad4691_state * st)768*6d9e7161SRadu Sabau static void ad4691_precompute_samp_freq_avail(struct ad4691_state *st)
769*6d9e7161SRadu Sabau {
770*6d9e7161SRadu Sabau unsigned int start = ad4691_samp_freq_start(st->info);
771*6d9e7161SRadu Sabau
772*6d9e7161SRadu Sabau for (unsigned int i = 0; i < ARRAY_SIZE(ad4691_oversampling_ratios); i++) {
773*6d9e7161SRadu Sabau unsigned int osr = ad4691_oversampling_ratios[i];
774*6d9e7161SRadu Sabau int n = 0;
775*6d9e7161SRadu Sabau
776*6d9e7161SRadu Sabau for (unsigned int j = start; j < ARRAY_SIZE(ad4691_osc_freqs_Hz); j++) {
777*6d9e7161SRadu Sabau if (ad4691_osc_freqs_Hz[j] % osr)
778*6d9e7161SRadu Sabau continue;
779*6d9e7161SRadu Sabau st->samp_freq_avail[i][n++] = ad4691_osc_freqs_Hz[j] / osr;
780*6d9e7161SRadu Sabau }
781*6d9e7161SRadu Sabau st->samp_freq_avail_len[i] = n;
782*6d9e7161SRadu Sabau }
78340850443SRadu Sabau }
78440850443SRadu Sabau
ad4691_set_sampling_freq(struct ad4691_state * st,int freq)78540850443SRadu Sabau static int ad4691_set_sampling_freq(struct ad4691_state *st, int freq)
78640850443SRadu Sabau {
787*6d9e7161SRadu Sabau unsigned int osr, found;
78840850443SRadu Sabau
789*6d9e7161SRadu Sabau /*
790*6d9e7161SRadu Sabau * Read osr under st->lock: osr and target_osc_freq_Hz are modified
791*6d9e7161SRadu Sabau * together under the lock; reading after acquiring it ensures we see
792*6d9e7161SRadu Sabau * a consistent snapshot with no concurrent write racing us.
793*6d9e7161SRadu Sabau */
79440850443SRadu Sabau guard(mutex)(&st->lock);
795*6d9e7161SRadu Sabau osr = st->osr;
79640850443SRadu Sabau
797*6d9e7161SRadu Sabau if (freq <= 0 || (unsigned int)freq > st->info->max_rate / osr)
79840850443SRadu Sabau return -EINVAL;
799*6d9e7161SRadu Sabau
800*6d9e7161SRadu Sabau found = ad4691_find_osc_freq(st, (unsigned int)freq * osr, osr);
801*6d9e7161SRadu Sabau if (!found)
802*6d9e7161SRadu Sabau return -EINVAL;
803*6d9e7161SRadu Sabau
804*6d9e7161SRadu Sabau /*
805*6d9e7161SRadu Sabau * Store the snapped oscillator frequency; OSC_FREQ_REG is written at
806*6d9e7161SRadu Sabau * buffer enable and single-shot time so that sampling_frequency and
807*6d9e7161SRadu Sabau * oversampling_ratio can be set in any order.
808*6d9e7161SRadu Sabau */
809*6d9e7161SRadu Sabau st->target_osc_freq_Hz = found;
810*6d9e7161SRadu Sabau return 0;
81140850443SRadu Sabau }
81240850443SRadu Sabau
ad4691_read_avail(struct iio_dev * indio_dev,struct iio_chan_spec const * chan,const int ** vals,int * type,int * length,long mask)81340850443SRadu Sabau static int ad4691_read_avail(struct iio_dev *indio_dev,
81440850443SRadu Sabau struct iio_chan_spec const *chan,
81540850443SRadu Sabau const int **vals, int *type,
81640850443SRadu Sabau int *length, long mask)
81740850443SRadu Sabau {
81840850443SRadu Sabau struct ad4691_state *st = iio_priv(indio_dev);
81940850443SRadu Sabau
82040850443SRadu Sabau switch (mask) {
821*6d9e7161SRadu Sabau case IIO_CHAN_INFO_SAMP_FREQ: {
822*6d9e7161SRadu Sabau unsigned int osr_idx;
823*6d9e7161SRadu Sabau
824*6d9e7161SRadu Sabau /*
825*6d9e7161SRadu Sabau * The precomputed tables are stable after probe; only the
826*6d9e7161SRadu Sabau * current OSR needs to be read under the lock to pick the
827*6d9e7161SRadu Sabau * right row atomically.
828*6d9e7161SRadu Sabau */
829*6d9e7161SRadu Sabau guard(mutex)(&st->lock);
830*6d9e7161SRadu Sabau osr_idx = ad4691_osr_index(st->osr);
831*6d9e7161SRadu Sabau *vals = st->samp_freq_avail[osr_idx];
83240850443SRadu Sabau *type = IIO_VAL_INT;
833*6d9e7161SRadu Sabau *length = st->samp_freq_avail_len[osr_idx];
834*6d9e7161SRadu Sabau return IIO_AVAIL_LIST;
835*6d9e7161SRadu Sabau }
836*6d9e7161SRadu Sabau case IIO_CHAN_INFO_OVERSAMPLING_RATIO:
837*6d9e7161SRadu Sabau *vals = ad4691_oversampling_ratios;
838*6d9e7161SRadu Sabau *type = IIO_VAL_INT;
839*6d9e7161SRadu Sabau *length = ARRAY_SIZE(ad4691_oversampling_ratios);
84040850443SRadu Sabau return IIO_AVAIL_LIST;
84140850443SRadu Sabau default:
84240850443SRadu Sabau return -EINVAL;
84340850443SRadu Sabau }
84440850443SRadu Sabau }
84540850443SRadu Sabau
ad4691_single_shot_read(struct iio_dev * indio_dev,struct iio_chan_spec const * chan,int * val)84640850443SRadu Sabau static int ad4691_single_shot_read(struct iio_dev *indio_dev,
84740850443SRadu Sabau struct iio_chan_spec const *chan, int *val)
84840850443SRadu Sabau {
84940850443SRadu Sabau struct ad4691_state *st = iio_priv(indio_dev);
850*6d9e7161SRadu Sabau unsigned int reg_val, period_us;
85140850443SRadu Sabau int ret;
85240850443SRadu Sabau
85340850443SRadu Sabau guard(mutex)(&st->lock);
85440850443SRadu Sabau
85540850443SRadu Sabau /* Use AUTONOMOUS mode for single-shot reads. */
85640850443SRadu Sabau ret = regmap_write(st->regmap, AD4691_STATE_RESET_REG, AD4691_STATE_RESET_ALL);
85740850443SRadu Sabau if (ret)
85840850443SRadu Sabau return ret;
85940850443SRadu Sabau
86040850443SRadu Sabau ret = regmap_write(st->regmap, AD4691_STD_SEQ_CONFIG,
86140850443SRadu Sabau BIT(chan->channel));
86240850443SRadu Sabau if (ret)
86340850443SRadu Sabau return ret;
86440850443SRadu Sabau
86540850443SRadu Sabau ret = regmap_write(st->regmap, AD4691_ACC_MASK_REG,
86640850443SRadu Sabau ~BIT(chan->channel) & GENMASK(15, 0));
86740850443SRadu Sabau if (ret)
86840850443SRadu Sabau return ret;
86940850443SRadu Sabau
870*6d9e7161SRadu Sabau ret = regmap_write(st->regmap, AD4691_ACC_DEPTH_IN(0), st->osr);
871*6d9e7161SRadu Sabau if (ret)
872*6d9e7161SRadu Sabau return ret;
873*6d9e7161SRadu Sabau
874*6d9e7161SRadu Sabau ret = ad4691_write_osc_freq(st);
87540850443SRadu Sabau if (ret)
87640850443SRadu Sabau return ret;
87740850443SRadu Sabau
87840850443SRadu Sabau ret = regmap_write(st->regmap, AD4691_OSC_EN_REG, 1);
87940850443SRadu Sabau if (ret)
88040850443SRadu Sabau return ret;
88140850443SRadu Sabau
882*6d9e7161SRadu Sabau /*
883*6d9e7161SRadu Sabau * Wait osr + 1 oscillator periods: osr for accumulation, +1 for the
884*6d9e7161SRadu Sabau * pipeline margin (one extra period ensures the final result is ready).
885*6d9e7161SRadu Sabau */
886*6d9e7161SRadu Sabau period_us = DIV_ROUND_UP((st->osr + 1) * USEC_PER_SEC,
887*6d9e7161SRadu Sabau st->target_osc_freq_Hz);
88840850443SRadu Sabau fsleep(period_us);
88940850443SRadu Sabau
89040850443SRadu Sabau ret = regmap_write(st->regmap, AD4691_OSC_EN_REG, 0);
89140850443SRadu Sabau if (ret)
89240850443SRadu Sabau return ret;
89340850443SRadu Sabau
89440850443SRadu Sabau ret = regmap_read(st->regmap, AD4691_AVG_IN(chan->channel), ®_val);
89540850443SRadu Sabau if (ret)
89640850443SRadu Sabau return ret;
89740850443SRadu Sabau
89840850443SRadu Sabau *val = reg_val;
89940850443SRadu Sabau
90040850443SRadu Sabau ret = regmap_write(st->regmap, AD4691_STATE_RESET_REG, AD4691_STATE_RESET_ALL);
90140850443SRadu Sabau if (ret)
90240850443SRadu Sabau return ret;
90340850443SRadu Sabau
90440850443SRadu Sabau return IIO_VAL_INT;
90540850443SRadu Sabau }
90640850443SRadu Sabau
ad4691_read_raw(struct iio_dev * indio_dev,struct iio_chan_spec const * chan,int * val,int * val2,long info)90740850443SRadu Sabau static int ad4691_read_raw(struct iio_dev *indio_dev,
90840850443SRadu Sabau struct iio_chan_spec const *chan, int *val,
90940850443SRadu Sabau int *val2, long info)
91040850443SRadu Sabau {
91140850443SRadu Sabau struct ad4691_state *st = iio_priv(indio_dev);
91240850443SRadu Sabau
91340850443SRadu Sabau switch (info) {
91440850443SRadu Sabau case IIO_CHAN_INFO_RAW: {
91540850443SRadu Sabau IIO_DEV_ACQUIRE_DIRECT_MODE(indio_dev, claim);
91640850443SRadu Sabau if (IIO_DEV_ACQUIRE_FAILED(claim))
91740850443SRadu Sabau return -EBUSY;
91840850443SRadu Sabau
91940850443SRadu Sabau return ad4691_single_shot_read(indio_dev, chan, val);
92040850443SRadu Sabau }
921*6d9e7161SRadu Sabau case IIO_CHAN_INFO_SAMP_FREQ: {
922*6d9e7161SRadu Sabau /*
923*6d9e7161SRadu Sabau * Read target_osc_freq_Hz and osr under st->lock to get a
924*6d9e7161SRadu Sabau * consistent snapshot: write_raw for SAMP_FREQ or OSR modifies
925*6d9e7161SRadu Sabau * both fields under the lock, so a concurrent read without the
926*6d9e7161SRadu Sabau * lock could observe a new oscillator frequency with the old OSR.
927*6d9e7161SRadu Sabau */
928*6d9e7161SRadu Sabau guard(mutex)(&st->lock);
929*6d9e7161SRadu Sabau *val = st->target_osc_freq_Hz / st->osr;
930*6d9e7161SRadu Sabau return IIO_VAL_INT;
931*6d9e7161SRadu Sabau }
932*6d9e7161SRadu Sabau case IIO_CHAN_INFO_OVERSAMPLING_RATIO: {
933*6d9e7161SRadu Sabau guard(mutex)(&st->lock);
934*6d9e7161SRadu Sabau *val = st->osr;
935*6d9e7161SRadu Sabau return IIO_VAL_INT;
936*6d9e7161SRadu Sabau }
93740850443SRadu Sabau case IIO_CHAN_INFO_SCALE:
93840850443SRadu Sabau *val = st->vref_uV / (MICRO / MILLI);
93940850443SRadu Sabau *val2 = chan->scan_type.realbits;
94040850443SRadu Sabau return IIO_VAL_FRACTIONAL_LOG2;
94140850443SRadu Sabau default:
94240850443SRadu Sabau return -EINVAL;
94340850443SRadu Sabau }
94440850443SRadu Sabau }
94540850443SRadu Sabau
ad4691_write_raw(struct iio_dev * indio_dev,struct iio_chan_spec const * chan,int val,int val2,long mask)94640850443SRadu Sabau static int ad4691_write_raw(struct iio_dev *indio_dev,
94740850443SRadu Sabau struct iio_chan_spec const *chan,
94840850443SRadu Sabau int val, int val2, long mask)
94940850443SRadu Sabau {
95040850443SRadu Sabau struct ad4691_state *st = iio_priv(indio_dev);
95140850443SRadu Sabau
95240850443SRadu Sabau IIO_DEV_ACQUIRE_DIRECT_MODE(indio_dev, claim);
95340850443SRadu Sabau if (IIO_DEV_ACQUIRE_FAILED(claim))
95440850443SRadu Sabau return -EBUSY;
95540850443SRadu Sabau
95640850443SRadu Sabau switch (mask) {
95740850443SRadu Sabau case IIO_CHAN_INFO_SAMP_FREQ:
95840850443SRadu Sabau return ad4691_set_sampling_freq(st, val);
959*6d9e7161SRadu Sabau case IIO_CHAN_INFO_OVERSAMPLING_RATIO: {
960*6d9e7161SRadu Sabau unsigned int old_effective, found, osr_idx;
961*6d9e7161SRadu Sabau
962*6d9e7161SRadu Sabau osr_idx = ad4691_osr_index(val);
963*6d9e7161SRadu Sabau if (ad4691_oversampling_ratios[osr_idx] != val)
964*6d9e7161SRadu Sabau return -EINVAL;
965*6d9e7161SRadu Sabau
966*6d9e7161SRadu Sabau /*
967*6d9e7161SRadu Sabau * Hold st->lock while computing the new oscillator frequency
968*6d9e7161SRadu Sabau * and updating both target_osc_freq_Hz and osr atomically:
969*6d9e7161SRadu Sabau * read_raw for SAMP_FREQ reads both fields under the lock and
970*6d9e7161SRadu Sabau * must see a consistent pair (new osc ↔ new osr).
971*6d9e7161SRadu Sabau *
972*6d9e7161SRadu Sabau * Snap target_osc_freq_Hz to the largest table entry that is
973*6d9e7161SRadu Sabau * both <= old_effective * new_osr and evenly divisible by
974*6d9e7161SRadu Sabau * new_osr, preserving an integer read-back of
975*6d9e7161SRadu Sabau * in_voltage_sampling_frequency after the OSR change.
976*6d9e7161SRadu Sabau */
977*6d9e7161SRadu Sabau guard(mutex)(&st->lock);
978*6d9e7161SRadu Sabau old_effective = st->target_osc_freq_Hz / st->osr;
979*6d9e7161SRadu Sabau found = ad4691_find_osc_freq(st, old_effective * (unsigned int)val, val);
980*6d9e7161SRadu Sabau if (!found)
981*6d9e7161SRadu Sabau return -EINVAL;
982*6d9e7161SRadu Sabau st->target_osc_freq_Hz = found;
983*6d9e7161SRadu Sabau st->osr = val;
984*6d9e7161SRadu Sabau return 0;
985*6d9e7161SRadu Sabau }
98640850443SRadu Sabau default:
98740850443SRadu Sabau return -EINVAL;
98840850443SRadu Sabau }
98940850443SRadu Sabau }
99040850443SRadu Sabau
ad4691_reg_access(struct iio_dev * indio_dev,unsigned int reg,unsigned int writeval,unsigned int * readval)99140850443SRadu Sabau static int ad4691_reg_access(struct iio_dev *indio_dev, unsigned int reg,
99240850443SRadu Sabau unsigned int writeval, unsigned int *readval)
99340850443SRadu Sabau {
99440850443SRadu Sabau struct ad4691_state *st = iio_priv(indio_dev);
99540850443SRadu Sabau
99640850443SRadu Sabau guard(mutex)(&st->lock);
99740850443SRadu Sabau
99840850443SRadu Sabau if (readval)
99940850443SRadu Sabau return regmap_read(st->regmap, reg, readval);
100040850443SRadu Sabau
100140850443SRadu Sabau return regmap_write(st->regmap, reg, writeval);
100240850443SRadu Sabau }
100340850443SRadu Sabau
ad4691_set_pwm_freq(struct ad4691_state * st,unsigned int freq)100441297c6bSRadu Sabau static int ad4691_set_pwm_freq(struct ad4691_state *st, unsigned int freq)
100541297c6bSRadu Sabau {
100641297c6bSRadu Sabau if (!freq)
100741297c6bSRadu Sabau return -EINVAL;
100841297c6bSRadu Sabau
100941297c6bSRadu Sabau st->cnv_period_ns = DIV_ROUND_UP(NSEC_PER_SEC, freq);
101041297c6bSRadu Sabau return 0;
101141297c6bSRadu Sabau }
101241297c6bSRadu Sabau
ad4691_sampling_enable(struct ad4691_state * st,bool enable)101341297c6bSRadu Sabau static int ad4691_sampling_enable(struct ad4691_state *st, bool enable)
101441297c6bSRadu Sabau {
101541297c6bSRadu Sabau struct pwm_state conv_state = {
101641297c6bSRadu Sabau .period = st->cnv_period_ns,
101741297c6bSRadu Sabau .duty_cycle = AD4691_CNV_DUTY_CYCLE_NS,
101841297c6bSRadu Sabau .polarity = PWM_POLARITY_NORMAL,
101941297c6bSRadu Sabau .enabled = enable,
102041297c6bSRadu Sabau };
102141297c6bSRadu Sabau
102241297c6bSRadu Sabau return pwm_apply_might_sleep(st->conv_trigger, &conv_state);
102341297c6bSRadu Sabau }
102441297c6bSRadu Sabau
102541297c6bSRadu Sabau /*
102641297c6bSRadu Sabau * ad4691_enter_conversion_mode - Switch the chip to its buffer conversion mode.
102741297c6bSRadu Sabau *
102841297c6bSRadu Sabau * Configures the ADC hardware registers for the mode selected at probe
102941297c6bSRadu Sabau * (CNV_BURST or MANUAL). Called from buffer preenable before starting
103041297c6bSRadu Sabau * sampling. The chip is in AUTONOMOUS mode during idle (for read_raw).
103141297c6bSRadu Sabau */
ad4691_enter_conversion_mode(struct ad4691_state * st)103241297c6bSRadu Sabau static int ad4691_enter_conversion_mode(struct ad4691_state *st)
103341297c6bSRadu Sabau {
103441297c6bSRadu Sabau int ret;
103541297c6bSRadu Sabau
103641297c6bSRadu Sabau if (st->manual_mode)
103741297c6bSRadu Sabau return regmap_update_bits(st->regmap, AD4691_DEVICE_SETUP,
103841297c6bSRadu Sabau AD4691_MANUAL_MODE, AD4691_MANUAL_MODE);
103941297c6bSRadu Sabau
1040*6d9e7161SRadu Sabau ret = ad4691_write_osc_freq(st);
1041*6d9e7161SRadu Sabau if (ret)
1042*6d9e7161SRadu Sabau return ret;
1043*6d9e7161SRadu Sabau
104441297c6bSRadu Sabau ret = regmap_update_bits(st->regmap, AD4691_ADC_SETUP,
104541297c6bSRadu Sabau AD4691_ADC_MODE_MASK, AD4691_CNV_BURST_MODE);
104641297c6bSRadu Sabau if (ret)
104741297c6bSRadu Sabau return ret;
104841297c6bSRadu Sabau
104941297c6bSRadu Sabau return regmap_write(st->regmap, AD4691_STATE_RESET_REG,
105041297c6bSRadu Sabau AD4691_STATE_RESET_ALL);
105141297c6bSRadu Sabau }
105241297c6bSRadu Sabau
ad4691_transfer(struct ad4691_state * st,u16 cmd)105341297c6bSRadu Sabau static int ad4691_transfer(struct ad4691_state *st, u16 cmd)
105441297c6bSRadu Sabau {
105541297c6bSRadu Sabau u8 buf[2];
105641297c6bSRadu Sabau
105741297c6bSRadu Sabau put_unaligned_be16(cmd, buf);
105841297c6bSRadu Sabau
105941297c6bSRadu Sabau return spi_write_then_read(st->spi, buf, sizeof(buf), NULL, 0);
106041297c6bSRadu Sabau }
106141297c6bSRadu Sabau
106241297c6bSRadu Sabau /*
106341297c6bSRadu Sabau * ad4691_exit_conversion_mode - Return the chip to AUTONOMOUS mode.
106441297c6bSRadu Sabau *
106541297c6bSRadu Sabau * Called from buffer postdisable to restore the chip to the
106641297c6bSRadu Sabau * idle state used by read_raw. Clears the sequencer and resets state.
106741297c6bSRadu Sabau */
ad4691_exit_conversion_mode(struct ad4691_state * st)106841297c6bSRadu Sabau static int ad4691_exit_conversion_mode(struct ad4691_state *st)
106941297c6bSRadu Sabau {
107041297c6bSRadu Sabau if (st->manual_mode)
107141297c6bSRadu Sabau return ad4691_transfer(st, AD4691_EXIT_COMMAND);
107241297c6bSRadu Sabau
107341297c6bSRadu Sabau return regmap_update_bits(st->regmap, AD4691_ADC_SETUP,
107441297c6bSRadu Sabau AD4691_ADC_MODE_MASK, AD4691_AUTONOMOUS_MODE);
107541297c6bSRadu Sabau }
107641297c6bSRadu Sabau
ad4691_manual_buffer_preenable(struct iio_dev * indio_dev)107741297c6bSRadu Sabau static int ad4691_manual_buffer_preenable(struct iio_dev *indio_dev)
107841297c6bSRadu Sabau {
107941297c6bSRadu Sabau struct ad4691_state *st = iio_priv(indio_dev);
108041297c6bSRadu Sabau unsigned int k, i;
108141297c6bSRadu Sabau int ret;
108241297c6bSRadu Sabau
108341297c6bSRadu Sabau memset(st->scan_xfers, 0, sizeof(st->scan_xfers));
108441297c6bSRadu Sabau memset(st->scan_tx, 0, sizeof(st->scan_tx));
108541297c6bSRadu Sabau
108641297c6bSRadu Sabau spi_message_init(&st->scan_msg);
108741297c6bSRadu Sabau
108841297c6bSRadu Sabau k = 0;
108941297c6bSRadu Sabau iio_for_each_active_channel(indio_dev, i) {
109041297c6bSRadu Sabau /*
109141297c6bSRadu Sabau * Channel-select command occupies the first (high) byte of the
109241297c6bSRadu Sabau * 16-bit DIN frame; the second byte is a don't-care zero pad.
109341297c6bSRadu Sabau * put_unaligned_be16() writes [cmd, 0x00] in memory so the
109441297c6bSRadu Sabau * SPI controller sends the command byte first on the wire.
109541297c6bSRadu Sabau */
109641297c6bSRadu Sabau put_unaligned_be16((u16)(AD4691_ADC_CHAN(i) << 8), &st->scan_tx[k]);
109741297c6bSRadu Sabau st->scan_xfers[k].tx_buf = &st->scan_tx[k];
109841297c6bSRadu Sabau /*
109941297c6bSRadu Sabau * The pipeline means xfer[0] receives the residual from the
110041297c6bSRadu Sabau * previous sequence, not a valid sample. Discard it (rx_buf=NULL)
110141297c6bSRadu Sabau * to avoid aliasing vals[0] across two concurrent DMA mappings.
110241297c6bSRadu Sabau * xfer[1] (or the NOOP when only one channel is active) writes
110341297c6bSRadu Sabau * the real ch[0] result to vals[0]. Subsequent transfers write
110441297c6bSRadu Sabau * into vals[k-1] so each result lands at the next dense slot.
110541297c6bSRadu Sabau */
110641297c6bSRadu Sabau st->scan_xfers[k].rx_buf = (k == 0) ? NULL : &st->vals[k - 1];
110741297c6bSRadu Sabau st->scan_xfers[k].len = sizeof(*st->scan_tx);
110841297c6bSRadu Sabau st->scan_xfers[k].cs_change = 1;
110941297c6bSRadu Sabau st->scan_xfers[k].cs_change_delay.value = AD4691_CNV_HIGH_TIME_NS;
111041297c6bSRadu Sabau st->scan_xfers[k].cs_change_delay.unit = SPI_DELAY_UNIT_NSECS;
111141297c6bSRadu Sabau spi_message_add_tail(&st->scan_xfers[k], &st->scan_msg);
111241297c6bSRadu Sabau k++;
111341297c6bSRadu Sabau }
111441297c6bSRadu Sabau
111541297c6bSRadu Sabau /* Final NOOP transfer retrieves the last channel's result. */
111641297c6bSRadu Sabau st->scan_xfers[k].tx_buf = &st->scan_tx[k]; /* scan_tx[k] == 0 == NOOP */
111741297c6bSRadu Sabau st->scan_xfers[k].rx_buf = &st->vals[k - 1];
111841297c6bSRadu Sabau st->scan_xfers[k].len = sizeof(*st->scan_tx);
111941297c6bSRadu Sabau spi_message_add_tail(&st->scan_xfers[k], &st->scan_msg);
112041297c6bSRadu Sabau
112141297c6bSRadu Sabau ret = spi_optimize_message(st->spi, &st->scan_msg);
112241297c6bSRadu Sabau if (ret)
112341297c6bSRadu Sabau return ret;
112441297c6bSRadu Sabau
112541297c6bSRadu Sabau ret = ad4691_enter_conversion_mode(st);
112641297c6bSRadu Sabau if (ret) {
112741297c6bSRadu Sabau spi_unoptimize_message(&st->scan_msg);
112841297c6bSRadu Sabau return ret;
112941297c6bSRadu Sabau }
113041297c6bSRadu Sabau
113141297c6bSRadu Sabau return 0;
113241297c6bSRadu Sabau }
113341297c6bSRadu Sabau
ad4691_manual_buffer_postdisable(struct iio_dev * indio_dev)113441297c6bSRadu Sabau static int ad4691_manual_buffer_postdisable(struct iio_dev *indio_dev)
113541297c6bSRadu Sabau {
113641297c6bSRadu Sabau struct ad4691_state *st = iio_priv(indio_dev);
113741297c6bSRadu Sabau int ret;
113841297c6bSRadu Sabau
113941297c6bSRadu Sabau ret = ad4691_exit_conversion_mode(st);
114041297c6bSRadu Sabau spi_unoptimize_message(&st->scan_msg);
114141297c6bSRadu Sabau return ret;
114241297c6bSRadu Sabau }
114341297c6bSRadu Sabau
114441297c6bSRadu Sabau static const struct iio_buffer_setup_ops ad4691_manual_buffer_setup_ops = {
114541297c6bSRadu Sabau .preenable = ad4691_manual_buffer_preenable,
114641297c6bSRadu Sabau .postdisable = ad4691_manual_buffer_postdisable,
114741297c6bSRadu Sabau };
114841297c6bSRadu Sabau
ad4691_cnv_burst_buffer_preenable(struct iio_dev * indio_dev)114941297c6bSRadu Sabau static int ad4691_cnv_burst_buffer_preenable(struct iio_dev *indio_dev)
115041297c6bSRadu Sabau {
115141297c6bSRadu Sabau struct ad4691_state *st = iio_priv(indio_dev);
115241297c6bSRadu Sabau unsigned int acc_mask, std_seq_config;
115341297c6bSRadu Sabau unsigned int k, i;
115441297c6bSRadu Sabau int ret;
115541297c6bSRadu Sabau
115641297c6bSRadu Sabau memset(st->scan_xfers, 0, sizeof(st->scan_xfers));
115741297c6bSRadu Sabau memset(st->scan_tx, 0, sizeof(st->scan_tx));
115841297c6bSRadu Sabau
115941297c6bSRadu Sabau spi_message_init(&st->scan_msg);
116041297c6bSRadu Sabau
116141297c6bSRadu Sabau /*
116241297c6bSRadu Sabau * Each AVG_IN read needs two transfers: a 2-byte address write phase
116341297c6bSRadu Sabau * followed by a 2-byte data read phase. CS toggles between channels
116441297c6bSRadu Sabau * (cs_change=1 on the read phase of all but the last channel).
116541297c6bSRadu Sabau */
116641297c6bSRadu Sabau k = 0;
116741297c6bSRadu Sabau iio_for_each_active_channel(indio_dev, i) {
116841297c6bSRadu Sabau put_unaligned_be16(0x8000 | AD4691_AVG_IN(i), &st->scan_tx[k]);
116941297c6bSRadu Sabau st->scan_xfers[2 * k].tx_buf = &st->scan_tx[k];
117041297c6bSRadu Sabau st->scan_xfers[2 * k].len = sizeof(*st->scan_tx);
117141297c6bSRadu Sabau spi_message_add_tail(&st->scan_xfers[2 * k], &st->scan_msg);
117241297c6bSRadu Sabau st->scan_xfers[2 * k + 1].rx_buf = &st->vals[k];
117341297c6bSRadu Sabau st->scan_xfers[2 * k + 1].len = sizeof(*st->scan_tx);
117441297c6bSRadu Sabau st->scan_xfers[2 * k + 1].cs_change = 1;
117541297c6bSRadu Sabau spi_message_add_tail(&st->scan_xfers[2 * k + 1], &st->scan_msg);
117641297c6bSRadu Sabau k++;
117741297c6bSRadu Sabau }
117841297c6bSRadu Sabau
117941297c6bSRadu Sabau /*
118041297c6bSRadu Sabau * Append a 4-byte state-reset transfer [addr_hi, addr_lo,
118141297c6bSRadu Sabau * STATE_RESET_ALL, OSC_EN=1]. CS is asserted throughout, so
118241297c6bSRadu Sabau * ADDR_DESCENDING writes byte[3]=1 to OSC_EN_REG (0x180) as a
118341297c6bSRadu Sabau * deliberate side-write, keeping the oscillator enabled.
118441297c6bSRadu Sabau * STATE_RESET_ALL starts the next burst; the hardware does not
118541297c6bSRadu Sabau * accumulate new conversions until after a STATE_RESET pulse, so
118641297c6bSRadu Sabau * no in-progress data is lost. No cs_change here — CS must
118741297c6bSRadu Sabau * deassert normally at end of message to frame the next command.
118841297c6bSRadu Sabau */
118941297c6bSRadu Sabau put_unaligned_be16(AD4691_STATE_RESET_REG, st->scan_tx_reset);
119041297c6bSRadu Sabau st->scan_tx_reset[2] = AD4691_STATE_RESET_ALL;
119141297c6bSRadu Sabau st->scan_tx_reset[3] = 1;
119241297c6bSRadu Sabau st->scan_xfers[2 * k].tx_buf = st->scan_tx_reset;
119341297c6bSRadu Sabau st->scan_xfers[2 * k].len = sizeof(st->scan_tx_reset);
119441297c6bSRadu Sabau spi_message_add_tail(&st->scan_xfers[2 * k], &st->scan_msg);
119541297c6bSRadu Sabau
119641297c6bSRadu Sabau ret = spi_optimize_message(st->spi, &st->scan_msg);
119741297c6bSRadu Sabau if (ret)
119841297c6bSRadu Sabau return ret;
119941297c6bSRadu Sabau
120041297c6bSRadu Sabau std_seq_config = bitmap_read(indio_dev->active_scan_mask, 0,
120141297c6bSRadu Sabau iio_get_masklength(indio_dev)) & GENMASK(15, 0);
120241297c6bSRadu Sabau ret = regmap_write(st->regmap, AD4691_STD_SEQ_CONFIG, std_seq_config);
120341297c6bSRadu Sabau if (ret)
120441297c6bSRadu Sabau goto err_unoptimize;
120541297c6bSRadu Sabau
120641297c6bSRadu Sabau acc_mask = ~std_seq_config & GENMASK(15, 0);
120741297c6bSRadu Sabau ret = regmap_write(st->regmap, AD4691_ACC_MASK_REG, acc_mask);
120841297c6bSRadu Sabau if (ret)
120941297c6bSRadu Sabau goto err_unoptimize;
121041297c6bSRadu Sabau
1211*6d9e7161SRadu Sabau ret = regmap_write(st->regmap, AD4691_ACC_DEPTH_IN(0), st->osr);
1212*6d9e7161SRadu Sabau if (ret)
1213*6d9e7161SRadu Sabau goto err_unoptimize;
1214*6d9e7161SRadu Sabau
121541297c6bSRadu Sabau ret = ad4691_enter_conversion_mode(st);
121641297c6bSRadu Sabau if (ret)
121741297c6bSRadu Sabau goto err_unoptimize;
121841297c6bSRadu Sabau
121941297c6bSRadu Sabau return 0;
122041297c6bSRadu Sabau
122141297c6bSRadu Sabau err_unoptimize:
122241297c6bSRadu Sabau spi_unoptimize_message(&st->scan_msg);
122341297c6bSRadu Sabau return ret;
122441297c6bSRadu Sabau }
122541297c6bSRadu Sabau
ad4691_cnv_burst_buffer_postenable(struct iio_dev * indio_dev)122641297c6bSRadu Sabau static int ad4691_cnv_burst_buffer_postenable(struct iio_dev *indio_dev)
122741297c6bSRadu Sabau {
122841297c6bSRadu Sabau struct ad4691_state *st = iio_priv(indio_dev);
122941297c6bSRadu Sabau int ret;
123041297c6bSRadu Sabau
123141297c6bSRadu Sabau /*
123241297c6bSRadu Sabau * Start the PWM and unmask the IRQ here in postenable, not in
123341297c6bSRadu Sabau * preenable. The IIO core attaches the trigger poll function between
123441297c6bSRadu Sabau * preenable and postenable; enabling sampling or unmasking the IRQ
123541297c6bSRadu Sabau * before that point risks a DATA_READY assertion landing before the
123641297c6bSRadu Sabau * poll function is registered. iio_trigger_poll() would drop the
123741297c6bSRadu Sabau * event, disable_irq_nosync() would fire, and enable_irq() would
123841297c6bSRadu Sabau * never be called, leaving the IRQ permanently masked.
123941297c6bSRadu Sabau */
124041297c6bSRadu Sabau ret = ad4691_sampling_enable(st, true);
124141297c6bSRadu Sabau if (ret)
124241297c6bSRadu Sabau return ret;
124341297c6bSRadu Sabau
124441297c6bSRadu Sabau enable_irq(st->irq);
124541297c6bSRadu Sabau st->irq_enabled = true;
124641297c6bSRadu Sabau return 0;
124741297c6bSRadu Sabau }
124841297c6bSRadu Sabau
ad4691_cnv_burst_buffer_predisable(struct iio_dev * indio_dev)124941297c6bSRadu Sabau static int ad4691_cnv_burst_buffer_predisable(struct iio_dev *indio_dev)
125041297c6bSRadu Sabau {
125141297c6bSRadu Sabau struct ad4691_state *st = iio_priv(indio_dev);
125241297c6bSRadu Sabau
125341297c6bSRadu Sabau if (st->irq_enabled) {
125441297c6bSRadu Sabau disable_irq(st->irq);
125541297c6bSRadu Sabau st->irq_enabled = false;
125641297c6bSRadu Sabau }
125741297c6bSRadu Sabau return ad4691_sampling_enable(st, false);
125841297c6bSRadu Sabau }
125941297c6bSRadu Sabau
ad4691_cnv_burst_buffer_postdisable(struct iio_dev * indio_dev)126041297c6bSRadu Sabau static int ad4691_cnv_burst_buffer_postdisable(struct iio_dev *indio_dev)
126141297c6bSRadu Sabau {
126241297c6bSRadu Sabau struct ad4691_state *st = iio_priv(indio_dev);
126341297c6bSRadu Sabau int ret;
126441297c6bSRadu Sabau
126541297c6bSRadu Sabau ret = ad4691_exit_conversion_mode(st);
126641297c6bSRadu Sabau spi_unoptimize_message(&st->scan_msg);
126741297c6bSRadu Sabau return ret;
126841297c6bSRadu Sabau }
126941297c6bSRadu Sabau
127041297c6bSRadu Sabau static const struct iio_buffer_setup_ops ad4691_cnv_burst_buffer_setup_ops = {
127141297c6bSRadu Sabau .preenable = ad4691_cnv_burst_buffer_preenable,
127241297c6bSRadu Sabau .postenable = ad4691_cnv_burst_buffer_postenable,
127341297c6bSRadu Sabau .predisable = ad4691_cnv_burst_buffer_predisable,
127441297c6bSRadu Sabau .postdisable = ad4691_cnv_burst_buffer_postdisable,
127541297c6bSRadu Sabau };
127641297c6bSRadu Sabau
ad4691_manual_offload_buffer_postenable(struct iio_dev * indio_dev)1277ad4f8513SRadu Sabau static int ad4691_manual_offload_buffer_postenable(struct iio_dev *indio_dev)
1278ad4f8513SRadu Sabau {
1279ad4f8513SRadu Sabau struct ad4691_state *st = iio_priv(indio_dev);
1280ad4f8513SRadu Sabau struct device *dev = regmap_get_device(st->regmap);
1281ad4f8513SRadu Sabau struct spi_device *spi = to_spi_device(dev);
1282ad4f8513SRadu Sabau struct spi_offload_trigger_config config = {
1283ad4f8513SRadu Sabau .type = SPI_OFFLOAD_TRIGGER_PERIODIC,
1284ad4f8513SRadu Sabau };
1285ad4f8513SRadu Sabau unsigned int bpw = indio_dev->channels[0].scan_type.realbits;
1286ad4f8513SRadu Sabau unsigned int bit, k;
1287ad4f8513SRadu Sabau int ret;
1288ad4f8513SRadu Sabau
1289ad4f8513SRadu Sabau ret = ad4691_enter_conversion_mode(st);
1290ad4f8513SRadu Sabau if (ret)
1291ad4f8513SRadu Sabau return ret;
1292ad4f8513SRadu Sabau
1293ad4f8513SRadu Sabau memset(st->scan_xfers, 0, sizeof(st->scan_xfers));
1294ad4f8513SRadu Sabau memset(st->scan_tx, 0, sizeof(st->scan_tx));
1295ad4f8513SRadu Sabau
1296ad4f8513SRadu Sabau /*
1297ad4f8513SRadu Sabau * N+1 transfers for N channels. Each CS-low period triggers
1298ad4f8513SRadu Sabau * a conversion AND returns the previous result (pipelined).
1299ad4f8513SRadu Sabau * TX: [AD4691_ADC_CHAN(n), 0x00]
1300ad4f8513SRadu Sabau * RX: [data_hi, data_lo] (storagebits=16, shift=0)
1301ad4f8513SRadu Sabau * Transfer 0 RX is garbage; transfers 1..N carry real data.
1302ad4f8513SRadu Sabau * scan_tx is reused for TX commands (mutually exclusive with the
1303ad4f8513SRadu Sabau * non-offload triggered-buffer path).
1304ad4f8513SRadu Sabau *
1305ad4f8513SRadu Sabau * bits_per_word=bpw: the SPI controller reads tx_buf as a native
1306ad4f8513SRadu Sabau * 16-bit word and shifts it out MSB-first. Store the exact 16-bit
1307ad4f8513SRadu Sabau * value we want on the wire as a plain native u16 — no endianness
1308ad4f8513SRadu Sabau * macro — so the wire bytes are correct on both LE and BE hosts.
1309ad4f8513SRadu Sabau * The channel-select command is a single byte; shift it to the MSB
1310ad4f8513SRadu Sabau * position so SPI sends it first, with a zero pad in the LSB.
1311ad4f8513SRadu Sabau */
1312ad4f8513SRadu Sabau k = 0;
1313ad4f8513SRadu Sabau iio_for_each_active_channel(indio_dev, bit) {
1314ad4f8513SRadu Sabau st->scan_tx[k] = AD4691_ADC_CHAN(bit) << 8;
1315ad4f8513SRadu Sabau st->scan_xfers[k].tx_buf = &st->scan_tx[k];
1316ad4f8513SRadu Sabau st->scan_xfers[k].len = sizeof(*st->scan_tx);
1317ad4f8513SRadu Sabau st->scan_xfers[k].bits_per_word = bpw;
1318ad4f8513SRadu Sabau st->scan_xfers[k].cs_change = 1;
1319ad4f8513SRadu Sabau st->scan_xfers[k].cs_change_delay.value = AD4691_CNV_HIGH_TIME_NS;
1320ad4f8513SRadu Sabau st->scan_xfers[k].cs_change_delay.unit = SPI_DELAY_UNIT_NSECS;
1321ad4f8513SRadu Sabau /* First transfer RX is garbage — skip it. */
1322ad4f8513SRadu Sabau if (k > 0)
1323ad4f8513SRadu Sabau st->scan_xfers[k].offload_flags = SPI_OFFLOAD_XFER_RX_STREAM;
1324ad4f8513SRadu Sabau k++;
1325ad4f8513SRadu Sabau }
1326ad4f8513SRadu Sabau
1327ad4f8513SRadu Sabau /* Final NOOP transfer retrieves the last channel's result. */
1328ad4f8513SRadu Sabau st->scan_xfers[k].tx_buf = &st->scan_tx[k]; /* scan_tx[k] == 0 == NOOP */
1329ad4f8513SRadu Sabau st->scan_xfers[k].len = sizeof(*st->scan_tx);
1330ad4f8513SRadu Sabau st->scan_xfers[k].bits_per_word = bpw;
1331ad4f8513SRadu Sabau st->scan_xfers[k].offload_flags = SPI_OFFLOAD_XFER_RX_STREAM;
1332ad4f8513SRadu Sabau k++;
1333ad4f8513SRadu Sabau
1334ad4f8513SRadu Sabau spi_message_init_with_transfers(&st->scan_msg, st->scan_xfers, k);
1335ad4f8513SRadu Sabau st->scan_msg.offload = st->offload;
1336ad4f8513SRadu Sabau
1337ad4f8513SRadu Sabau ret = spi_optimize_message(spi, &st->scan_msg);
1338ad4f8513SRadu Sabau if (ret)
1339ad4f8513SRadu Sabau goto err_exit_conversion;
1340ad4f8513SRadu Sabau
1341ad4f8513SRadu Sabau config.periodic.frequency_hz = st->trigger_hz;
1342ad4f8513SRadu Sabau ret = spi_offload_trigger_enable(st->offload, st->offload_trigger, &config);
1343ad4f8513SRadu Sabau if (ret)
1344ad4f8513SRadu Sabau goto err_unoptimize;
1345ad4f8513SRadu Sabau
1346ad4f8513SRadu Sabau return 0;
1347ad4f8513SRadu Sabau
1348ad4f8513SRadu Sabau err_unoptimize:
1349ad4f8513SRadu Sabau spi_unoptimize_message(&st->scan_msg);
1350ad4f8513SRadu Sabau err_exit_conversion:
1351ad4f8513SRadu Sabau ad4691_exit_conversion_mode(st);
1352ad4f8513SRadu Sabau return ret;
1353ad4f8513SRadu Sabau }
1354ad4f8513SRadu Sabau
ad4691_manual_offload_buffer_predisable(struct iio_dev * indio_dev)1355ad4f8513SRadu Sabau static int ad4691_manual_offload_buffer_predisable(struct iio_dev *indio_dev)
1356ad4f8513SRadu Sabau {
1357ad4f8513SRadu Sabau struct ad4691_state *st = iio_priv(indio_dev);
1358ad4f8513SRadu Sabau
1359ad4f8513SRadu Sabau spi_offload_trigger_disable(st->offload, st->offload_trigger);
1360ad4f8513SRadu Sabau spi_unoptimize_message(&st->scan_msg);
1361ad4f8513SRadu Sabau
1362ad4f8513SRadu Sabau return ad4691_exit_conversion_mode(st);
1363ad4f8513SRadu Sabau }
1364ad4f8513SRadu Sabau
1365ad4f8513SRadu Sabau static const struct iio_buffer_setup_ops ad4691_manual_offload_buffer_setup_ops = {
1366ad4f8513SRadu Sabau .postenable = ad4691_manual_offload_buffer_postenable,
1367ad4f8513SRadu Sabau .predisable = ad4691_manual_offload_buffer_predisable,
1368ad4f8513SRadu Sabau };
1369ad4f8513SRadu Sabau
ad4691_cnv_burst_offload_buffer_postenable(struct iio_dev * indio_dev)1370ad4f8513SRadu Sabau static int ad4691_cnv_burst_offload_buffer_postenable(struct iio_dev *indio_dev)
1371ad4f8513SRadu Sabau {
1372ad4f8513SRadu Sabau struct ad4691_state *st = iio_priv(indio_dev);
1373ad4f8513SRadu Sabau struct device *dev = regmap_get_device(st->regmap);
1374ad4f8513SRadu Sabau struct spi_device *spi = to_spi_device(dev);
1375ad4f8513SRadu Sabau struct spi_offload_trigger_config config = {
1376ad4f8513SRadu Sabau .type = SPI_OFFLOAD_TRIGGER_DATA_READY,
1377ad4f8513SRadu Sabau };
1378ad4f8513SRadu Sabau unsigned int bpw = indio_dev->channels[0].scan_type.realbits;
1379ad4f8513SRadu Sabau unsigned int acc_mask, std_seq_config;
1380ad4f8513SRadu Sabau unsigned int bit, k;
1381ad4f8513SRadu Sabau int ret;
1382ad4f8513SRadu Sabau
1383ad4f8513SRadu Sabau std_seq_config = bitmap_read(indio_dev->active_scan_mask, 0,
1384ad4f8513SRadu Sabau iio_get_masklength(indio_dev)) & GENMASK(15, 0);
1385ad4f8513SRadu Sabau ret = regmap_write(st->regmap, AD4691_STD_SEQ_CONFIG, std_seq_config);
1386ad4f8513SRadu Sabau if (ret)
1387ad4f8513SRadu Sabau return ret;
1388ad4f8513SRadu Sabau
1389ad4f8513SRadu Sabau acc_mask = ~std_seq_config & GENMASK(15, 0);
1390ad4f8513SRadu Sabau ret = regmap_write(st->regmap, AD4691_ACC_MASK_REG, acc_mask);
1391ad4f8513SRadu Sabau if (ret)
1392ad4f8513SRadu Sabau return ret;
1393ad4f8513SRadu Sabau
1394*6d9e7161SRadu Sabau ret = regmap_write(st->regmap, AD4691_ACC_DEPTH_IN(0), st->osr);
1395*6d9e7161SRadu Sabau if (ret)
1396*6d9e7161SRadu Sabau return ret;
1397*6d9e7161SRadu Sabau
1398ad4f8513SRadu Sabau ret = ad4691_enter_conversion_mode(st);
1399ad4f8513SRadu Sabau if (ret)
1400ad4f8513SRadu Sabau return ret;
1401ad4f8513SRadu Sabau
1402ad4f8513SRadu Sabau memset(st->scan_xfers, 0, sizeof(st->scan_xfers));
1403ad4f8513SRadu Sabau memset(st->scan_tx, 0, sizeof(st->scan_tx));
1404ad4f8513SRadu Sabau
1405ad4f8513SRadu Sabau /*
1406ad4f8513SRadu Sabau * Each AVG_IN register read uses two transfers:
1407ad4f8513SRadu Sabau * TX: [reg_hi | 0x80, reg_lo] (address phase, CS stays asserted)
1408ad4f8513SRadu Sabau * RX: [data_hi, data_lo] (bpw-wide data phase, storagebits=16)
1409ad4f8513SRadu Sabau * Both TX and RX use bits_per_word=bpw: the SPI controller reads tx_buf
1410ad4f8513SRadu Sabau * as a native 16-bit word and shifts it out MSB-first. Store the exact
1411ad4f8513SRadu Sabau * 16-bit wire value as a plain native u16 — no endianness macro — so the
1412ad4f8513SRadu Sabau * wire bytes are correct on both LE and BE hosts. The read-address
1413ad4f8513SRadu Sabau * (0x8000 | reg) is already the 16-bit value we want on the wire.
1414ad4f8513SRadu Sabau * scan_tx is reused for TX addresses (mutually exclusive with the
1415ad4f8513SRadu Sabau * non-offload triggered-buffer path).
1416ad4f8513SRadu Sabau */
1417ad4f8513SRadu Sabau k = 0;
1418ad4f8513SRadu Sabau iio_for_each_active_channel(indio_dev, bit) {
1419ad4f8513SRadu Sabau st->scan_tx[k] = 0x8000 | AD4691_AVG_IN(bit);
1420ad4f8513SRadu Sabau
1421ad4f8513SRadu Sabau /* TX: address phase, CS stays asserted into data phase */
1422ad4f8513SRadu Sabau st->scan_xfers[2 * k].tx_buf = &st->scan_tx[k];
1423ad4f8513SRadu Sabau st->scan_xfers[2 * k].len = sizeof(*st->scan_tx);
1424ad4f8513SRadu Sabau st->scan_xfers[2 * k].bits_per_word = bpw;
1425ad4f8513SRadu Sabau
1426ad4f8513SRadu Sabau /* RX: data phase, CS toggles after to delimit the next register op */
1427ad4f8513SRadu Sabau st->scan_xfers[2 * k + 1].len = sizeof(*st->scan_tx);
1428ad4f8513SRadu Sabau st->scan_xfers[2 * k + 1].bits_per_word = bpw;
1429ad4f8513SRadu Sabau st->scan_xfers[2 * k + 1].offload_flags = SPI_OFFLOAD_XFER_RX_STREAM;
1430ad4f8513SRadu Sabau st->scan_xfers[2 * k + 1].cs_change = 1;
1431ad4f8513SRadu Sabau k++;
1432ad4f8513SRadu Sabau }
1433ad4f8513SRadu Sabau
1434ad4f8513SRadu Sabau /*
1435ad4f8513SRadu Sabau * State reset: single 4-byte write [addr_hi, addr_lo, STATE_RESET_ALL,
1436ad4f8513SRadu Sabau * OSC_EN=1]. ADDR_DESCENDING writes byte[3]=1 to OSC_EN_REG (0x180) as
1437ad4f8513SRadu Sabau * a deliberate side-write, keeping the oscillator enabled.
1438ad4f8513SRadu Sabau * scan_tx_reset is shared with the non-offload path (len=4 here vs
1439ad4f8513SRadu Sabau * len=3 there) since the two paths are mutually exclusive at probe.
1440ad4f8513SRadu Sabau */
1441ad4f8513SRadu Sabau put_unaligned_be16(AD4691_STATE_RESET_REG, st->scan_tx_reset);
1442ad4f8513SRadu Sabau st->scan_tx_reset[2] = AD4691_STATE_RESET_ALL;
1443ad4f8513SRadu Sabau st->scan_tx_reset[3] = 1;
1444ad4f8513SRadu Sabau st->scan_xfers[2 * k].tx_buf = st->scan_tx_reset;
1445ad4f8513SRadu Sabau st->scan_xfers[2 * k].len = sizeof(st->scan_tx_reset);
1446ad4f8513SRadu Sabau /*
1447ad4f8513SRadu Sabau * 4-byte u8 buffer assembled with put_unaligned_be16(); leave
1448ad4f8513SRadu Sabau * bits_per_word at the default (8) so bytes go out in memory order.
1449ad4f8513SRadu Sabau */
1450ad4f8513SRadu Sabau
1451ad4f8513SRadu Sabau spi_message_init_with_transfers(&st->scan_msg, st->scan_xfers, 2 * k + 1);
1452ad4f8513SRadu Sabau st->scan_msg.offload = st->offload;
1453ad4f8513SRadu Sabau
1454ad4f8513SRadu Sabau ret = spi_optimize_message(spi, &st->scan_msg);
1455ad4f8513SRadu Sabau if (ret)
1456ad4f8513SRadu Sabau goto err_exit_conversion;
1457ad4f8513SRadu Sabau
1458ad4f8513SRadu Sabau ret = spi_offload_trigger_enable(st->offload, st->offload_trigger, &config);
1459ad4f8513SRadu Sabau if (ret)
1460ad4f8513SRadu Sabau goto err_unoptimize;
1461ad4f8513SRadu Sabau
1462ad4f8513SRadu Sabau ret = ad4691_sampling_enable(st, true);
1463ad4f8513SRadu Sabau if (ret)
1464ad4f8513SRadu Sabau goto err_disable_trigger;
1465ad4f8513SRadu Sabau
1466ad4f8513SRadu Sabau return 0;
1467ad4f8513SRadu Sabau
1468ad4f8513SRadu Sabau err_disable_trigger:
1469ad4f8513SRadu Sabau spi_offload_trigger_disable(st->offload, st->offload_trigger);
1470ad4f8513SRadu Sabau err_unoptimize:
1471ad4f8513SRadu Sabau spi_unoptimize_message(&st->scan_msg);
1472ad4f8513SRadu Sabau err_exit_conversion:
1473ad4f8513SRadu Sabau ad4691_exit_conversion_mode(st);
1474ad4f8513SRadu Sabau return ret;
1475ad4f8513SRadu Sabau }
1476ad4f8513SRadu Sabau
ad4691_cnv_burst_offload_buffer_predisable(struct iio_dev * indio_dev)1477ad4f8513SRadu Sabau static int ad4691_cnv_burst_offload_buffer_predisable(struct iio_dev *indio_dev)
1478ad4f8513SRadu Sabau {
1479ad4f8513SRadu Sabau struct ad4691_state *st = iio_priv(indio_dev);
1480ad4f8513SRadu Sabau
1481ad4f8513SRadu Sabau ad4691_sampling_enable(st, false);
1482ad4f8513SRadu Sabau spi_offload_trigger_disable(st->offload, st->offload_trigger);
1483ad4f8513SRadu Sabau spi_unoptimize_message(&st->scan_msg);
1484ad4f8513SRadu Sabau
1485ad4f8513SRadu Sabau return ad4691_exit_conversion_mode(st);
1486ad4f8513SRadu Sabau }
1487ad4f8513SRadu Sabau
1488ad4f8513SRadu Sabau static const struct iio_buffer_setup_ops ad4691_cnv_burst_offload_buffer_setup_ops = {
1489ad4f8513SRadu Sabau .postenable = ad4691_cnv_burst_offload_buffer_postenable,
1490ad4f8513SRadu Sabau .predisable = ad4691_cnv_burst_offload_buffer_predisable,
1491ad4f8513SRadu Sabau };
1492ad4f8513SRadu Sabau
sampling_frequency_show(struct device * dev,struct device_attribute * attr,char * buf)149341297c6bSRadu Sabau static ssize_t sampling_frequency_show(struct device *dev,
149441297c6bSRadu Sabau struct device_attribute *attr,
149541297c6bSRadu Sabau char *buf)
149641297c6bSRadu Sabau {
149741297c6bSRadu Sabau struct iio_dev *indio_dev = dev_to_iio_dev(dev);
149841297c6bSRadu Sabau struct ad4691_state *st = iio_priv(indio_dev);
149941297c6bSRadu Sabau
1500ad4f8513SRadu Sabau if (st->manual_mode && st->offload)
1501ad4f8513SRadu Sabau return sysfs_emit(buf, "%llu\n", READ_ONCE(st->trigger_hz));
1502ad4f8513SRadu Sabau
150341297c6bSRadu Sabau return sysfs_emit(buf, "%lu\n", NSEC_PER_SEC / st->cnv_period_ns);
150441297c6bSRadu Sabau }
150541297c6bSRadu Sabau
sampling_frequency_store(struct device * dev,struct device_attribute * attr,const char * buf,size_t len)150641297c6bSRadu Sabau static ssize_t sampling_frequency_store(struct device *dev,
150741297c6bSRadu Sabau struct device_attribute *attr,
150841297c6bSRadu Sabau const char *buf, size_t len)
150941297c6bSRadu Sabau {
151041297c6bSRadu Sabau struct iio_dev *indio_dev = dev_to_iio_dev(dev);
151141297c6bSRadu Sabau struct ad4691_state *st = iio_priv(indio_dev);
151241297c6bSRadu Sabau unsigned int freq;
151341297c6bSRadu Sabau int ret;
151441297c6bSRadu Sabau
151541297c6bSRadu Sabau ret = kstrtouint(buf, 10, &freq);
151641297c6bSRadu Sabau if (ret)
151741297c6bSRadu Sabau return ret;
151841297c6bSRadu Sabau
151941297c6bSRadu Sabau IIO_DEV_ACQUIRE_DIRECT_MODE(indio_dev, claim);
152041297c6bSRadu Sabau if (IIO_DEV_ACQUIRE_FAILED(claim))
152141297c6bSRadu Sabau return -EBUSY;
152241297c6bSRadu Sabau
1523ad4f8513SRadu Sabau if (st->manual_mode && st->offload) {
1524ad4f8513SRadu Sabau struct spi_offload_trigger_config config = {
1525ad4f8513SRadu Sabau .type = SPI_OFFLOAD_TRIGGER_PERIODIC,
1526ad4f8513SRadu Sabau .periodic = { .frequency_hz = freq },
1527ad4f8513SRadu Sabau };
1528ad4f8513SRadu Sabau
1529ad4f8513SRadu Sabau ret = spi_offload_trigger_validate(st->offload_trigger, &config);
1530ad4f8513SRadu Sabau if (ret)
1531ad4f8513SRadu Sabau return ret;
1532ad4f8513SRadu Sabau
1533ad4f8513SRadu Sabau WRITE_ONCE(st->trigger_hz, config.periodic.frequency_hz);
1534ad4f8513SRadu Sabau return len;
1535ad4f8513SRadu Sabau }
1536ad4f8513SRadu Sabau
153741297c6bSRadu Sabau ret = ad4691_set_pwm_freq(st, freq);
153841297c6bSRadu Sabau if (ret)
153941297c6bSRadu Sabau return ret;
154041297c6bSRadu Sabau
154141297c6bSRadu Sabau return len;
154241297c6bSRadu Sabau }
154341297c6bSRadu Sabau
154441297c6bSRadu Sabau static IIO_DEVICE_ATTR_RW(sampling_frequency, 0);
154541297c6bSRadu Sabau
154641297c6bSRadu Sabau static const struct iio_dev_attr *ad4691_buffer_attrs[] = {
154741297c6bSRadu Sabau &iio_dev_attr_sampling_frequency,
154841297c6bSRadu Sabau NULL
154941297c6bSRadu Sabau };
155041297c6bSRadu Sabau
ad4691_irq(int irq,void * private)155141297c6bSRadu Sabau static irqreturn_t ad4691_irq(int irq, void *private)
155241297c6bSRadu Sabau {
155341297c6bSRadu Sabau struct iio_dev *indio_dev = private;
155441297c6bSRadu Sabau struct ad4691_state *st = iio_priv(indio_dev);
155541297c6bSRadu Sabau
155641297c6bSRadu Sabau /*
155741297c6bSRadu Sabau * Disable the IRQ before calling iio_trigger_poll(). The IRQ is
155841297c6bSRadu Sabau * re-enabled via the trigger .reenable callback, which the IIO core
155941297c6bSRadu Sabau * calls inside iio_trigger_notify_done() once use_count reaches zero.
156041297c6bSRadu Sabau * Re-enabling here (before notify_done) would race: a DATA_READY
156141297c6bSRadu Sabau * between enable_irq() and notify_done() calls iio_trigger_poll()
156241297c6bSRadu Sabau * while use_count > 0, dropping the event and permanently masking
156341297c6bSRadu Sabau * the IRQ.
156441297c6bSRadu Sabau */
156541297c6bSRadu Sabau disable_irq_nosync(st->irq);
156641297c6bSRadu Sabau iio_trigger_poll(indio_dev->trig);
156741297c6bSRadu Sabau
156841297c6bSRadu Sabau return IRQ_HANDLED;
156941297c6bSRadu Sabau }
157041297c6bSRadu Sabau
ad4691_trigger_reenable(struct iio_trigger * trig)157141297c6bSRadu Sabau static void ad4691_trigger_reenable(struct iio_trigger *trig)
157241297c6bSRadu Sabau {
157341297c6bSRadu Sabau struct ad4691_state *st = iio_trigger_get_drvdata(trig);
157441297c6bSRadu Sabau
157541297c6bSRadu Sabau enable_irq(st->irq);
157641297c6bSRadu Sabau }
157741297c6bSRadu Sabau
157841297c6bSRadu Sabau static const struct iio_trigger_ops ad4691_trigger_ops = {
157941297c6bSRadu Sabau .reenable = ad4691_trigger_reenable,
158041297c6bSRadu Sabau .validate_device = iio_trigger_validate_own_device,
158141297c6bSRadu Sabau };
158241297c6bSRadu Sabau
ad4691_read_scan(struct iio_dev * indio_dev,s64 ts)158341297c6bSRadu Sabau static void ad4691_read_scan(struct iio_dev *indio_dev, s64 ts)
158441297c6bSRadu Sabau {
158541297c6bSRadu Sabau struct ad4691_state *st = iio_priv(indio_dev);
158641297c6bSRadu Sabau int ret;
158741297c6bSRadu Sabau
158841297c6bSRadu Sabau guard(mutex)(&st->lock);
158941297c6bSRadu Sabau
159041297c6bSRadu Sabau ret = spi_sync(st->spi, &st->scan_msg);
159141297c6bSRadu Sabau if (ret) {
159241297c6bSRadu Sabau dev_err_ratelimited(regmap_get_device(st->regmap),
159341297c6bSRadu Sabau "SPI scan failed: %d\n", ret);
159441297c6bSRadu Sabau return;
159541297c6bSRadu Sabau }
159641297c6bSRadu Sabau
159741297c6bSRadu Sabau /*
159841297c6bSRadu Sabau * rx_buf pointers in scan_xfers point directly into scan.vals, so no
159941297c6bSRadu Sabau * copy is needed. The scan_msg already includes a STATE_RESET at the
160041297c6bSRadu Sabau * end (appended in preenable), so no explicit reset is needed here.
160141297c6bSRadu Sabau */
160241297c6bSRadu Sabau iio_push_to_buffers_with_ts(indio_dev, st->vals, sizeof(st->vals), ts);
160341297c6bSRadu Sabau }
160441297c6bSRadu Sabau
ad4691_trigger_handler(int irq,void * p)160541297c6bSRadu Sabau static irqreturn_t ad4691_trigger_handler(int irq, void *p)
160641297c6bSRadu Sabau {
160741297c6bSRadu Sabau struct iio_poll_func *pf = p;
160841297c6bSRadu Sabau struct iio_dev *indio_dev = pf->indio_dev;
160941297c6bSRadu Sabau
161041297c6bSRadu Sabau ad4691_read_scan(indio_dev, pf->timestamp);
161141297c6bSRadu Sabau iio_trigger_notify_done(indio_dev->trig);
161241297c6bSRadu Sabau return IRQ_HANDLED;
161341297c6bSRadu Sabau }
161441297c6bSRadu Sabau
161541297c6bSRadu Sabau /*
161641297c6bSRadu Sabau * CNV burst mode: only allow our own trigger (driven by DATA_READY IRQ).
161741297c6bSRadu Sabau * Manual mode: external triggers (e.g. iio-trig-hrtimer) must be allowed
161841297c6bSRadu Sabau * because manual mode has no DATA_READY IRQ to fire the internal trigger.
161941297c6bSRadu Sabau * iio_trigger_ops.validate_device = iio_trigger_validate_own_device is
162041297c6bSRadu Sabau * correct in both modes — it prevents other devices from hijacking our
162141297c6bSRadu Sabau * internal trigger; the distinction here is only for iio_info.validate_trigger.
162241297c6bSRadu Sabau */
162341297c6bSRadu Sabau static const struct iio_info ad4691_cnv_burst_info = {
162441297c6bSRadu Sabau .read_raw = ad4691_read_raw,
162541297c6bSRadu Sabau .write_raw = ad4691_write_raw,
162641297c6bSRadu Sabau .read_avail = ad4691_read_avail,
162741297c6bSRadu Sabau .debugfs_reg_access = ad4691_reg_access,
162841297c6bSRadu Sabau .validate_trigger = iio_validate_own_trigger,
162941297c6bSRadu Sabau };
163041297c6bSRadu Sabau
163141297c6bSRadu Sabau static const struct iio_info ad4691_manual_info = {
163240850443SRadu Sabau .read_raw = ad4691_read_raw,
163340850443SRadu Sabau .write_raw = ad4691_write_raw,
163440850443SRadu Sabau .read_avail = ad4691_read_avail,
163540850443SRadu Sabau .debugfs_reg_access = ad4691_reg_access,
163640850443SRadu Sabau };
163740850443SRadu Sabau
ad4691_pwm_setup(struct ad4691_state * st)163841297c6bSRadu Sabau static int ad4691_pwm_setup(struct ad4691_state *st)
163941297c6bSRadu Sabau {
164041297c6bSRadu Sabau struct device *dev = regmap_get_device(st->regmap);
164141297c6bSRadu Sabau
164241297c6bSRadu Sabau st->conv_trigger = devm_pwm_get(dev, "cnv");
164341297c6bSRadu Sabau if (IS_ERR(st->conv_trigger))
164441297c6bSRadu Sabau return dev_err_probe(dev, PTR_ERR(st->conv_trigger),
164541297c6bSRadu Sabau "Failed to get CNV PWM\n");
164641297c6bSRadu Sabau
164741297c6bSRadu Sabau return ad4691_set_pwm_freq(st, st->info->max_rate);
164841297c6bSRadu Sabau }
164941297c6bSRadu Sabau
ad4691_regulator_setup(struct ad4691_state * st)165040850443SRadu Sabau static int ad4691_regulator_setup(struct ad4691_state *st)
165140850443SRadu Sabau {
165240850443SRadu Sabau struct device *dev = regmap_get_device(st->regmap);
165340850443SRadu Sabau int ret;
165440850443SRadu Sabau
165540850443SRadu Sabau ret = devm_regulator_bulk_get_enable(dev, ARRAY_SIZE(ad4691_supplies),
165640850443SRadu Sabau ad4691_supplies);
165740850443SRadu Sabau if (ret)
165840850443SRadu Sabau return dev_err_probe(dev, ret, "Failed to get and enable supplies\n");
165940850443SRadu Sabau
166040850443SRadu Sabau /*
166140850443SRadu Sabau * vdd-supply and ldo-in-supply are mutually exclusive:
166240850443SRadu Sabau * vdd-supply present → external 1.8V VDD; disable internal LDO.
166340850443SRadu Sabau * vdd-supply absent → enable internal LDO fed from ldo-in-supply.
166440850443SRadu Sabau * Having both simultaneously is strongly inadvisable per the datasheet.
166540850443SRadu Sabau */
166640850443SRadu Sabau if (device_property_present(dev, "vdd-supply")) {
166740850443SRadu Sabau ret = devm_regulator_get_enable(dev, "vdd");
166840850443SRadu Sabau if (ret)
166940850443SRadu Sabau return dev_err_probe(dev, ret,
167040850443SRadu Sabau "Failed to get and enable VDD\n");
167140850443SRadu Sabau } else if (device_property_present(dev, "ldo-in-supply")) {
167240850443SRadu Sabau ret = devm_regulator_get_enable(dev, "ldo-in");
167340850443SRadu Sabau if (ret)
167440850443SRadu Sabau return dev_err_probe(dev, ret,
167540850443SRadu Sabau "Failed to get and enable LDO-IN\n");
167640850443SRadu Sabau st->ldo_en = true;
167740850443SRadu Sabau } else {
167840850443SRadu Sabau return dev_err_probe(dev, -EINVAL,
167940850443SRadu Sabau "missing one of vdd-supply, ldo-in-supply\n");
168040850443SRadu Sabau }
168140850443SRadu Sabau
168240850443SRadu Sabau if (device_property_present(dev, "ref-supply")) {
168340850443SRadu Sabau st->vref_uV = devm_regulator_get_enable_read_voltage(dev, "ref");
168440850443SRadu Sabau if (st->vref_uV < 0)
168540850443SRadu Sabau return dev_err_probe(dev, st->vref_uV,
168640850443SRadu Sabau "Failed to get REF supply voltage\n");
168740850443SRadu Sabau } else if (device_property_present(dev, "refin-supply")) {
168840850443SRadu Sabau st->vref_uV = devm_regulator_get_enable_read_voltage(dev, "refin");
168940850443SRadu Sabau if (st->vref_uV < 0)
169040850443SRadu Sabau return dev_err_probe(dev, st->vref_uV,
169140850443SRadu Sabau "Failed to get REFIN supply voltage\n");
169240850443SRadu Sabau st->refbuf_en = true;
169340850443SRadu Sabau } else {
169440850443SRadu Sabau return dev_err_probe(dev, -EINVAL,
169540850443SRadu Sabau "missing one of ref-supply, refin-supply\n");
169640850443SRadu Sabau }
169740850443SRadu Sabau
169840850443SRadu Sabau if (st->vref_uV < AD4691_VREF_uV_MIN || st->vref_uV > AD4691_VREF_uV_MAX)
169940850443SRadu Sabau return dev_err_probe(dev, -EINVAL,
170040850443SRadu Sabau "vref(%d) must be in the range [%u...%u]\n",
170140850443SRadu Sabau st->vref_uV, AD4691_VREF_uV_MIN,
170240850443SRadu Sabau AD4691_VREF_uV_MAX);
170340850443SRadu Sabau
170440850443SRadu Sabau return 0;
170540850443SRadu Sabau }
170640850443SRadu Sabau
ad4691_reset(struct ad4691_state * st)170740850443SRadu Sabau static int ad4691_reset(struct ad4691_state *st)
170840850443SRadu Sabau {
170940850443SRadu Sabau struct device *dev = regmap_get_device(st->regmap);
171040850443SRadu Sabau struct reset_control *rst;
171140850443SRadu Sabau int ret;
171240850443SRadu Sabau
171340850443SRadu Sabau rst = devm_reset_control_get_optional_exclusive(dev, NULL);
171440850443SRadu Sabau if (IS_ERR(rst))
171540850443SRadu Sabau return dev_err_probe(dev, PTR_ERR(rst), "Failed to get reset\n");
171640850443SRadu Sabau
171740850443SRadu Sabau if (rst) {
171840850443SRadu Sabau /*
171940850443SRadu Sabau * Assert the reset line to guarantee a clean reset pulse on
172040850443SRadu Sabau * every probe, including driver reloads where the line may
172140850443SRadu Sabau * already be deasserted (reset_control_put() does not
172240850443SRadu Sabau * re-assert on release). tRESETL (minimum pulse width) = 10 ns
172340850443SRadu Sabau * (Table 5); kernel function-call overhead alone exceeds this,
172440850443SRadu Sabau * so no explicit delay is needed between assert and deassert.
172540850443SRadu Sabau */
172640850443SRadu Sabau reset_control_assert(rst);
172740850443SRadu Sabau ret = reset_control_deassert(rst);
172840850443SRadu Sabau if (ret)
172940850443SRadu Sabau return ret;
173040850443SRadu Sabau } else {
173140850443SRadu Sabau /* No hardware reset available, fall back to software reset. */
173240850443SRadu Sabau ret = regmap_write(st->regmap, AD4691_SPI_CONFIG_A_REG,
173340850443SRadu Sabau AD4691_SW_RESET);
173440850443SRadu Sabau if (ret)
173540850443SRadu Sabau return ret;
173640850443SRadu Sabau }
173740850443SRadu Sabau
173840850443SRadu Sabau /*
173940850443SRadu Sabau * Wait 300 µs (Table 5) for the device to complete its internal reset
174040850443SRadu Sabau * sequence before accepting SPI commands.
174140850443SRadu Sabau */
174240850443SRadu Sabau fsleep(300);
174340850443SRadu Sabau return 0;
174440850443SRadu Sabau }
174540850443SRadu Sabau
ad4691_config(struct ad4691_state * st)174640850443SRadu Sabau static int ad4691_config(struct ad4691_state *st)
174740850443SRadu Sabau {
174840850443SRadu Sabau struct device *dev = regmap_get_device(st->regmap);
174940850443SRadu Sabau enum ad4691_ref_ctrl ref_val;
175040850443SRadu Sabau unsigned int val;
175140850443SRadu Sabau int ret;
175240850443SRadu Sabau
175341297c6bSRadu Sabau /*
175441297c6bSRadu Sabau * Determine buffer conversion mode from DT: if a PWM is provided it
175541297c6bSRadu Sabau * drives the CNV pin (CNV_BURST_MODE); otherwise CNV is tied to CS
175641297c6bSRadu Sabau * and each SPI transfer triggers a conversion (MANUAL_MODE).
175741297c6bSRadu Sabau * Both modes idle in AUTONOMOUS mode so that read_raw can use the
175841297c6bSRadu Sabau * internal oscillator without disturbing the hardware configuration.
175941297c6bSRadu Sabau */
176041297c6bSRadu Sabau if (device_property_present(dev, "pwms")) {
176141297c6bSRadu Sabau st->manual_mode = false;
176241297c6bSRadu Sabau ret = ad4691_pwm_setup(st);
176341297c6bSRadu Sabau if (ret)
176441297c6bSRadu Sabau return ret;
176541297c6bSRadu Sabau } else {
176641297c6bSRadu Sabau st->manual_mode = true;
176741297c6bSRadu Sabau }
176841297c6bSRadu Sabau
176940850443SRadu Sabau switch (st->vref_uV) {
177040850443SRadu Sabau case AD4691_VREF_uV_MIN ... AD4691_VREF_2P5_uV_MAX:
177140850443SRadu Sabau ref_val = AD4691_VREF_2P5;
177240850443SRadu Sabau break;
177340850443SRadu Sabau case AD4691_VREF_2P5_uV_MAX + 1 ... AD4691_VREF_3P0_uV_MAX:
177440850443SRadu Sabau ref_val = AD4691_VREF_3P0;
177540850443SRadu Sabau break;
177640850443SRadu Sabau case AD4691_VREF_3P0_uV_MAX + 1 ... AD4691_VREF_3P3_uV_MAX:
177740850443SRadu Sabau ref_val = AD4691_VREF_3P3;
177840850443SRadu Sabau break;
177940850443SRadu Sabau case AD4691_VREF_3P3_uV_MAX + 1 ... AD4691_VREF_4P096_uV_MAX:
178040850443SRadu Sabau ref_val = AD4691_VREF_4P096;
178140850443SRadu Sabau break;
178240850443SRadu Sabau case AD4691_VREF_4P096_uV_MAX + 1 ... AD4691_VREF_uV_MAX:
178340850443SRadu Sabau ref_val = AD4691_VREF_5P0;
178440850443SRadu Sabau break;
178540850443SRadu Sabau default:
178640850443SRadu Sabau return dev_err_probe(dev, -EINVAL,
178740850443SRadu Sabau "Unsupported vref voltage: %d uV\n",
178840850443SRadu Sabau st->vref_uV);
178940850443SRadu Sabau }
179040850443SRadu Sabau
179140850443SRadu Sabau val = FIELD_PREP(AD4691_REF_CTRL_MASK, ref_val);
179240850443SRadu Sabau if (st->refbuf_en)
179340850443SRadu Sabau val |= AD4691_REFBUF_EN;
179440850443SRadu Sabau
179540850443SRadu Sabau ret = regmap_write(st->regmap, AD4691_REF_CTRL, val);
179640850443SRadu Sabau if (ret)
179740850443SRadu Sabau return dev_err_probe(dev, ret, "Failed to write REF_CTRL\n");
179840850443SRadu Sabau
179940850443SRadu Sabau ret = regmap_assign_bits(st->regmap, AD4691_DEVICE_SETUP,
180040850443SRadu Sabau AD4691_LDO_EN, st->ldo_en);
180140850443SRadu Sabau if (ret)
180240850443SRadu Sabau return dev_err_probe(dev, ret, "Failed to write DEVICE_SETUP\n");
180340850443SRadu Sabau
180440850443SRadu Sabau /*
180540850443SRadu Sabau * Set the internal oscillator to the highest rate this chip supports.
180640850443SRadu Sabau * Index 0 (1 MHz) exceeds the 500 kHz max of AD4691/AD4693, so those
180740850443SRadu Sabau * chips start at index 1 (500 kHz).
180840850443SRadu Sabau */
180940850443SRadu Sabau ret = regmap_write(st->regmap, AD4691_OSC_FREQ_REG,
181040850443SRadu Sabau ad4691_samp_freq_start(st->info));
181140850443SRadu Sabau if (ret)
181240850443SRadu Sabau return dev_err_probe(dev, ret, "Failed to write OSC_FREQ\n");
181340850443SRadu Sabau
1814*6d9e7161SRadu Sabau st->target_osc_freq_Hz = ad4691_osc_freqs_Hz[ad4691_samp_freq_start(st->info)];
1815*6d9e7161SRadu Sabau
181640850443SRadu Sabau ret = regmap_update_bits(st->regmap, AD4691_ADC_SETUP,
181740850443SRadu Sabau AD4691_ADC_MODE_MASK, AD4691_AUTONOMOUS_MODE);
181840850443SRadu Sabau if (ret)
181940850443SRadu Sabau return dev_err_probe(dev, ret, "Failed to write ADC_SETUP\n");
182040850443SRadu Sabau
1821*6d9e7161SRadu Sabau ad4691_precompute_samp_freq_avail(st);
1822*6d9e7161SRadu Sabau
182340850443SRadu Sabau return 0;
182440850443SRadu Sabau }
182540850443SRadu Sabau
ad4691_setup_triggered_buffer(struct iio_dev * indio_dev,struct ad4691_state * st)182641297c6bSRadu Sabau static int ad4691_setup_triggered_buffer(struct iio_dev *indio_dev,
182741297c6bSRadu Sabau struct ad4691_state *st)
182841297c6bSRadu Sabau {
182941297c6bSRadu Sabau struct device *dev = regmap_get_device(st->regmap);
183041297c6bSRadu Sabau struct iio_trigger *trig;
183141297c6bSRadu Sabau unsigned int i;
183241297c6bSRadu Sabau int irq, ret;
183341297c6bSRadu Sabau
1834*6d9e7161SRadu Sabau /*
1835*6d9e7161SRadu Sabau * Manual mode exposes channels without the oversampling_ratio attribute
1836*6d9e7161SRadu Sabau * because ACC_DEPTH_IN is not configured in manual mode.
1837*6d9e7161SRadu Sabau */
1838*6d9e7161SRadu Sabau if (st->manual_mode)
1839*6d9e7161SRadu Sabau indio_dev->channels = st->info->sw_info->manual_channels;
1840*6d9e7161SRadu Sabau else
184141297c6bSRadu Sabau indio_dev->channels = st->info->sw_info->channels;
184241297c6bSRadu Sabau indio_dev->num_channels = st->info->sw_info->num_channels;
184341297c6bSRadu Sabau indio_dev->info = st->manual_mode ? &ad4691_manual_info : &ad4691_cnv_burst_info;
184441297c6bSRadu Sabau
184541297c6bSRadu Sabau /*
184641297c6bSRadu Sabau * Manual mode relies on an external trigger (e.g. iio-trig-hrtimer);
184741297c6bSRadu Sabau * no internal trigger is needed or registered.
184841297c6bSRadu Sabau */
184941297c6bSRadu Sabau if (st->manual_mode)
185041297c6bSRadu Sabau return devm_iio_triggered_buffer_setup(dev, indio_dev,
185141297c6bSRadu Sabau iio_pollfunc_store_time,
185241297c6bSRadu Sabau ad4691_trigger_handler,
185341297c6bSRadu Sabau &ad4691_manual_buffer_setup_ops);
185441297c6bSRadu Sabau
185541297c6bSRadu Sabau /*
185641297c6bSRadu Sabau * CNV burst mode: allocate an internal trigger driven by the
185741297c6bSRadu Sabau * DATA_READY IRQ on the GP pin.
185841297c6bSRadu Sabau */
185941297c6bSRadu Sabau trig = devm_iio_trigger_alloc(dev, "%s-dev%d", indio_dev->name,
186041297c6bSRadu Sabau iio_device_id(indio_dev));
186141297c6bSRadu Sabau if (!trig)
186241297c6bSRadu Sabau return -ENOMEM;
186341297c6bSRadu Sabau
186441297c6bSRadu Sabau trig->ops = &ad4691_trigger_ops;
186541297c6bSRadu Sabau iio_trigger_set_drvdata(trig, st);
186641297c6bSRadu Sabau
186741297c6bSRadu Sabau ret = devm_iio_trigger_register(dev, trig);
186841297c6bSRadu Sabau if (ret)
186941297c6bSRadu Sabau return dev_err_probe(dev, ret, "IIO trigger register failed\n");
187041297c6bSRadu Sabau
187141297c6bSRadu Sabau indio_dev->trig = iio_trigger_get(trig);
187241297c6bSRadu Sabau
187341297c6bSRadu Sabau /*
187441297c6bSRadu Sabau * The GP pin named in interrupt-names asserts at end-of-conversion.
187541297c6bSRadu Sabau * The IRQ handler fires the IIO trigger so the trigger handler can
187641297c6bSRadu Sabau * read and push the sample to the buffer. The IRQ is kept disabled
187741297c6bSRadu Sabau * until the buffer is enabled.
187841297c6bSRadu Sabau */
187941297c6bSRadu Sabau irq = -ENXIO;
188041297c6bSRadu Sabau for (i = 0; i < ARRAY_SIZE(ad4691_gp_names); i++) {
188141297c6bSRadu Sabau irq = fwnode_irq_get_byname(dev_fwnode(dev),
188241297c6bSRadu Sabau ad4691_gp_names[i]);
188341297c6bSRadu Sabau if (irq > 0 || irq == -EPROBE_DEFER)
188441297c6bSRadu Sabau break;
188541297c6bSRadu Sabau }
188641297c6bSRadu Sabau if (irq < 0)
188741297c6bSRadu Sabau return dev_err_probe(dev, irq, "failed to get GP interrupt\n");
188841297c6bSRadu Sabau
188941297c6bSRadu Sabau st->irq = irq;
189041297c6bSRadu Sabau
189141297c6bSRadu Sabau ret = ad4691_gpio_setup(st, i);
189241297c6bSRadu Sabau if (ret)
189341297c6bSRadu Sabau return ret;
189441297c6bSRadu Sabau
189541297c6bSRadu Sabau /*
189641297c6bSRadu Sabau * The handler only calls disable_irq_nosync() and iio_trigger_poll(),
189741297c6bSRadu Sabau * both safe in hardirq context, so register as a hard IRQ handler.
189841297c6bSRadu Sabau * IRQF_NO_AUTOEN keeps it disabled until the buffer is enabled.
189941297c6bSRadu Sabau */
190041297c6bSRadu Sabau ret = devm_request_irq(dev, irq, ad4691_irq, IRQF_NO_AUTOEN,
190141297c6bSRadu Sabau indio_dev->name, indio_dev);
190241297c6bSRadu Sabau if (ret)
190341297c6bSRadu Sabau return ret;
190441297c6bSRadu Sabau
190541297c6bSRadu Sabau return devm_iio_triggered_buffer_setup_ext(dev, indio_dev,
190641297c6bSRadu Sabau iio_pollfunc_store_time,
190741297c6bSRadu Sabau ad4691_trigger_handler,
190841297c6bSRadu Sabau IIO_BUFFER_DIRECTION_IN,
190941297c6bSRadu Sabau &ad4691_cnv_burst_buffer_setup_ops,
191041297c6bSRadu Sabau ad4691_buffer_attrs);
191141297c6bSRadu Sabau }
191241297c6bSRadu Sabau
ad4691_setup_offload(struct iio_dev * indio_dev,struct ad4691_state * st,struct spi_offload * spi_offload)1913ad4f8513SRadu Sabau static int ad4691_setup_offload(struct iio_dev *indio_dev,
1914ad4f8513SRadu Sabau struct ad4691_state *st,
1915ad4f8513SRadu Sabau struct spi_offload *spi_offload)
1916ad4f8513SRadu Sabau {
1917ad4f8513SRadu Sabau struct device *dev = regmap_get_device(st->regmap);
1918ad4f8513SRadu Sabau struct dma_chan *rx_dma;
1919ad4f8513SRadu Sabau int ret;
1920ad4f8513SRadu Sabau
1921ad4f8513SRadu Sabau st->offload = spi_offload;
1922ad4f8513SRadu Sabau
1923*6d9e7161SRadu Sabau /*
1924*6d9e7161SRadu Sabau * CNV burst offload exposes oversampling_ratio (ACC_DEPTH_IN is
1925*6d9e7161SRadu Sabau * configured per channel at buffer enable). Manual offload does not
1926*6d9e7161SRadu Sabau * configure ACC_DEPTH_IN, so it uses a separate channel array
1927*6d9e7161SRadu Sabau * without the oversampling_ratio attribute. Both paths use IIO_CPU
1928*6d9e7161SRadu Sabau * (no .endianness annotation) because bits_per_word=16 causes the
1929*6d9e7161SRadu Sabau * SPI Engine to produce native 16-bit DMA words.
1930*6d9e7161SRadu Sabau */
1931*6d9e7161SRadu Sabau if (st->manual_mode)
1932*6d9e7161SRadu Sabau indio_dev->channels = st->info->offload_info->manual_channels;
1933*6d9e7161SRadu Sabau else
1934ad4f8513SRadu Sabau indio_dev->channels = st->info->offload_info->channels;
1935ad4f8513SRadu Sabau indio_dev->num_channels = st->info->offload_info->num_channels;
1936ad4f8513SRadu Sabau /*
1937ad4f8513SRadu Sabau * Offload path uses DMA directly; no IIO trigger is involved, so
1938ad4f8513SRadu Sabau * external triggers are not restricted (no validate_trigger).
1939ad4f8513SRadu Sabau */
1940ad4f8513SRadu Sabau indio_dev->info = &ad4691_manual_info;
1941ad4f8513SRadu Sabau
1942ad4f8513SRadu Sabau if (st->manual_mode) {
1943ad4f8513SRadu Sabau st->offload_trigger =
1944ad4f8513SRadu Sabau devm_spi_offload_trigger_get(dev, st->offload,
1945ad4f8513SRadu Sabau SPI_OFFLOAD_TRIGGER_PERIODIC);
1946ad4f8513SRadu Sabau if (IS_ERR(st->offload_trigger))
1947ad4f8513SRadu Sabau return dev_err_probe(dev, PTR_ERR(st->offload_trigger),
1948ad4f8513SRadu Sabau "Failed to get periodic offload trigger\n");
1949ad4f8513SRadu Sabau
1950ad4f8513SRadu Sabau st->trigger_hz = AD4691_OFFLOAD_INITIAL_TRIGGER_HZ;
1951ad4f8513SRadu Sabau } else {
1952ad4f8513SRadu Sabau struct spi_offload_trigger_info trigger_info = {
1953ad4f8513SRadu Sabau .fwnode = dev_fwnode(dev),
1954ad4f8513SRadu Sabau .ops = &ad4691_offload_trigger_ops,
1955ad4f8513SRadu Sabau .priv = st,
1956ad4f8513SRadu Sabau };
1957ad4f8513SRadu Sabau
1958ad4f8513SRadu Sabau ret = devm_spi_offload_trigger_register(dev, &trigger_info);
1959ad4f8513SRadu Sabau if (ret)
1960ad4f8513SRadu Sabau return dev_err_probe(dev, ret,
1961ad4f8513SRadu Sabau "Failed to register offload trigger\n");
1962ad4f8513SRadu Sabau
1963ad4f8513SRadu Sabau st->offload_trigger =
1964ad4f8513SRadu Sabau devm_spi_offload_trigger_get(dev, st->offload,
1965ad4f8513SRadu Sabau SPI_OFFLOAD_TRIGGER_DATA_READY);
1966ad4f8513SRadu Sabau if (IS_ERR(st->offload_trigger))
1967ad4f8513SRadu Sabau return dev_err_probe(dev, PTR_ERR(st->offload_trigger),
1968ad4f8513SRadu Sabau "Failed to get DATA_READY offload trigger\n");
1969ad4f8513SRadu Sabau }
1970ad4f8513SRadu Sabau
1971ad4f8513SRadu Sabau rx_dma = devm_spi_offload_rx_stream_request_dma_chan(dev, st->offload);
1972ad4f8513SRadu Sabau if (IS_ERR(rx_dma))
1973ad4f8513SRadu Sabau return dev_err_probe(dev, PTR_ERR(rx_dma),
1974ad4f8513SRadu Sabau "Failed to get offload RX DMA channel\n");
1975ad4f8513SRadu Sabau
1976ad4f8513SRadu Sabau if (st->manual_mode)
1977ad4f8513SRadu Sabau indio_dev->setup_ops = &ad4691_manual_offload_buffer_setup_ops;
1978ad4f8513SRadu Sabau else
1979ad4f8513SRadu Sabau indio_dev->setup_ops = &ad4691_cnv_burst_offload_buffer_setup_ops;
1980ad4f8513SRadu Sabau
1981ad4f8513SRadu Sabau ret = devm_iio_dmaengine_buffer_setup_with_handle(dev, indio_dev, rx_dma,
1982ad4f8513SRadu Sabau IIO_BUFFER_DIRECTION_IN);
1983ad4f8513SRadu Sabau if (ret)
1984ad4f8513SRadu Sabau return ret;
1985ad4f8513SRadu Sabau
1986ad4f8513SRadu Sabau indio_dev->buffer->attrs = ad4691_buffer_attrs;
1987ad4f8513SRadu Sabau
1988ad4f8513SRadu Sabau return 0;
1989ad4f8513SRadu Sabau }
1990ad4f8513SRadu Sabau
ad4691_probe(struct spi_device * spi)199140850443SRadu Sabau static int ad4691_probe(struct spi_device *spi)
199240850443SRadu Sabau {
199340850443SRadu Sabau struct device *dev = &spi->dev;
1994ad4f8513SRadu Sabau struct spi_offload *spi_offload;
199540850443SRadu Sabau struct iio_dev *indio_dev;
199640850443SRadu Sabau struct ad4691_state *st;
199740850443SRadu Sabau int ret;
199840850443SRadu Sabau
199940850443SRadu Sabau indio_dev = devm_iio_device_alloc(dev, sizeof(*st));
200040850443SRadu Sabau if (!indio_dev)
200140850443SRadu Sabau return -ENOMEM;
200240850443SRadu Sabau
200340850443SRadu Sabau st = iio_priv(indio_dev);
200440850443SRadu Sabau st->spi = spi;
200540850443SRadu Sabau st->info = spi_get_device_match_data(spi);
200640850443SRadu Sabau if (!st->info)
200740850443SRadu Sabau return -ENODEV;
2008*6d9e7161SRadu Sabau st->osr = 1;
200940850443SRadu Sabau
201040850443SRadu Sabau ret = devm_mutex_init(dev, &st->lock);
201140850443SRadu Sabau if (ret)
201240850443SRadu Sabau return ret;
201340850443SRadu Sabau
201440850443SRadu Sabau st->regmap = devm_regmap_init(dev, NULL, spi, &ad4691_regmap_config);
201540850443SRadu Sabau if (IS_ERR(st->regmap))
201640850443SRadu Sabau return dev_err_probe(dev, PTR_ERR(st->regmap),
201740850443SRadu Sabau "Failed to initialize regmap\n");
201840850443SRadu Sabau
201940850443SRadu Sabau ret = ad4691_regulator_setup(st);
202040850443SRadu Sabau if (ret)
202140850443SRadu Sabau return ret;
202240850443SRadu Sabau
202340850443SRadu Sabau ret = ad4691_reset(st);
202440850443SRadu Sabau if (ret)
202540850443SRadu Sabau return ret;
202640850443SRadu Sabau
202740850443SRadu Sabau ret = ad4691_config(st);
202840850443SRadu Sabau if (ret)
202940850443SRadu Sabau return ret;
203040850443SRadu Sabau
2031ad4f8513SRadu Sabau spi_offload = devm_spi_offload_get(dev, spi, &ad4691_offload_config);
2032ad4f8513SRadu Sabau ret = PTR_ERR_OR_ZERO(spi_offload);
2033ad4f8513SRadu Sabau if (ret == -ENODEV)
2034ad4f8513SRadu Sabau spi_offload = NULL;
2035ad4f8513SRadu Sabau else if (ret)
2036ad4f8513SRadu Sabau return dev_err_probe(dev, ret, "Failed to get SPI offload\n");
2037ad4f8513SRadu Sabau
203840850443SRadu Sabau indio_dev->name = st->info->name;
203940850443SRadu Sabau indio_dev->modes = INDIO_DIRECT_MODE;
204040850443SRadu Sabau
2041ad4f8513SRadu Sabau if (spi_offload)
2042ad4f8513SRadu Sabau ret = ad4691_setup_offload(indio_dev, st, spi_offload);
2043ad4f8513SRadu Sabau else
204441297c6bSRadu Sabau ret = ad4691_setup_triggered_buffer(indio_dev, st);
204541297c6bSRadu Sabau if (ret)
204641297c6bSRadu Sabau return ret;
204740850443SRadu Sabau
204840850443SRadu Sabau return devm_iio_device_register(dev, indio_dev);
204940850443SRadu Sabau }
205040850443SRadu Sabau
205140850443SRadu Sabau static const struct of_device_id ad4691_of_match[] = {
205240850443SRadu Sabau { .compatible = "adi,ad4691", .data = &ad4691_chip_info },
205340850443SRadu Sabau { .compatible = "adi,ad4692", .data = &ad4692_chip_info },
205440850443SRadu Sabau { .compatible = "adi,ad4693", .data = &ad4693_chip_info },
205540850443SRadu Sabau { .compatible = "adi,ad4694", .data = &ad4694_chip_info },
205640850443SRadu Sabau { }
205740850443SRadu Sabau };
205840850443SRadu Sabau MODULE_DEVICE_TABLE(of, ad4691_of_match);
205940850443SRadu Sabau
206040850443SRadu Sabau static const struct spi_device_id ad4691_id[] = {
206140850443SRadu Sabau { .name = "ad4691", .driver_data = (kernel_ulong_t)&ad4691_chip_info },
206240850443SRadu Sabau { .name = "ad4692", .driver_data = (kernel_ulong_t)&ad4692_chip_info },
206340850443SRadu Sabau { .name = "ad4693", .driver_data = (kernel_ulong_t)&ad4693_chip_info },
206440850443SRadu Sabau { .name = "ad4694", .driver_data = (kernel_ulong_t)&ad4694_chip_info },
206540850443SRadu Sabau { }
206640850443SRadu Sabau };
206740850443SRadu Sabau MODULE_DEVICE_TABLE(spi, ad4691_id);
206840850443SRadu Sabau
206940850443SRadu Sabau static struct spi_driver ad4691_driver = {
207040850443SRadu Sabau .driver = {
207140850443SRadu Sabau .name = "ad4691",
207240850443SRadu Sabau .of_match_table = ad4691_of_match,
207340850443SRadu Sabau },
207440850443SRadu Sabau .probe = ad4691_probe,
207540850443SRadu Sabau .id_table = ad4691_id,
207640850443SRadu Sabau };
207740850443SRadu Sabau module_spi_driver(ad4691_driver);
207840850443SRadu Sabau
207940850443SRadu Sabau MODULE_AUTHOR("Radu Sabau <radu.sabau@analog.com>");
208040850443SRadu Sabau MODULE_DESCRIPTION("Analog Devices AD4691 Family ADC Driver");
208140850443SRadu Sabau MODULE_LICENSE("GPL");
2082ad4f8513SRadu Sabau MODULE_IMPORT_NS("IIO_DMA_BUFFER");
2083ad4f8513SRadu Sabau MODULE_IMPORT_NS("IIO_DMAENGINE_BUFFER");
2084