xref: /linux/drivers/iio/adc/ad_sigma_delta.c (revision 2c1ed907520c50326b8f604907a8478b27881a2e)
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * Support code for Analog Devices Sigma-Delta ADCs
4  *
5  * Copyright 2012 Analog Devices Inc.
6  *  Author: Lars-Peter Clausen <lars@metafoo.de>
7  */
8 
9 #include <linux/align.h>
10 #include <linux/interrupt.h>
11 #include <linux/device.h>
12 #include <linux/kernel.h>
13 #include <linux/slab.h>
14 #include <linux/spi/spi.h>
15 #include <linux/err.h>
16 #include <linux/module.h>
17 
18 #include <linux/iio/iio.h>
19 #include <linux/iio/sysfs.h>
20 #include <linux/iio/buffer.h>
21 #include <linux/iio/trigger.h>
22 #include <linux/iio/trigger_consumer.h>
23 #include <linux/iio/triggered_buffer.h>
24 #include <linux/iio/adc/ad_sigma_delta.h>
25 
26 #include <linux/unaligned.h>
27 
28 
29 #define AD_SD_COMM_CHAN_MASK	0x3
30 
31 #define AD_SD_REG_COMM		0x00
32 #define AD_SD_REG_STATUS	0x00
33 #define AD_SD_REG_DATA		0x03
34 
35 #define AD_SD_REG_STATUS_RDY	0x80
36 
37 /**
38  * ad_sd_set_comm() - Set communications register
39  *
40  * @sigma_delta: The sigma delta device
41  * @comm: New value for the communications register
42  */
ad_sd_set_comm(struct ad_sigma_delta * sigma_delta,uint8_t comm)43 void ad_sd_set_comm(struct ad_sigma_delta *sigma_delta, uint8_t comm)
44 {
45 	/* Some variants use the lower two bits of the communications register
46 	 * to select the channel */
47 	sigma_delta->comm = comm & AD_SD_COMM_CHAN_MASK;
48 }
49 EXPORT_SYMBOL_NS_GPL(ad_sd_set_comm, "IIO_AD_SIGMA_DELTA");
50 
51 /**
52  * ad_sd_write_reg() - Write a register
53  *
54  * @sigma_delta: The sigma delta device
55  * @reg: Address of the register
56  * @size: Size of the register (0-3)
57  * @val: Value to write to the register
58  *
59  * Returns 0 on success, an error code otherwise.
60  **/
ad_sd_write_reg(struct ad_sigma_delta * sigma_delta,unsigned int reg,unsigned int size,unsigned int val)61 int ad_sd_write_reg(struct ad_sigma_delta *sigma_delta, unsigned int reg,
62 	unsigned int size, unsigned int val)
63 {
64 	uint8_t *data = sigma_delta->tx_buf;
65 	struct spi_transfer t = {
66 		.tx_buf		= data,
67 		.len		= size + 1,
68 		.cs_change	= sigma_delta->keep_cs_asserted,
69 	};
70 	struct spi_message m;
71 	int ret;
72 
73 	data[0] = (reg << sigma_delta->info->addr_shift) | sigma_delta->comm;
74 
75 	switch (size) {
76 	case 3:
77 		put_unaligned_be24(val, &data[1]);
78 		break;
79 	case 2:
80 		put_unaligned_be16(val, &data[1]);
81 		break;
82 	case 1:
83 		data[1] = val;
84 		break;
85 	case 0:
86 		break;
87 	default:
88 		return -EINVAL;
89 	}
90 
91 	spi_message_init(&m);
92 	spi_message_add_tail(&t, &m);
93 
94 	if (sigma_delta->bus_locked)
95 		ret = spi_sync_locked(sigma_delta->spi, &m);
96 	else
97 		ret = spi_sync(sigma_delta->spi, &m);
98 
99 	return ret;
100 }
101 EXPORT_SYMBOL_NS_GPL(ad_sd_write_reg, "IIO_AD_SIGMA_DELTA");
102 
ad_sd_read_reg_raw(struct ad_sigma_delta * sigma_delta,unsigned int reg,unsigned int size,uint8_t * val)103 static int ad_sd_read_reg_raw(struct ad_sigma_delta *sigma_delta,
104 	unsigned int reg, unsigned int size, uint8_t *val)
105 {
106 	uint8_t *data = sigma_delta->tx_buf;
107 	int ret;
108 	struct spi_transfer t[] = {
109 		{
110 			.tx_buf = data,
111 			.len = 1,
112 		}, {
113 			.rx_buf = val,
114 			.len = size,
115 			.cs_change = sigma_delta->keep_cs_asserted,
116 		},
117 	};
118 	struct spi_message m;
119 
120 	spi_message_init(&m);
121 
122 	if (sigma_delta->info->has_registers) {
123 		data[0] = reg << sigma_delta->info->addr_shift;
124 		data[0] |= sigma_delta->info->read_mask;
125 		data[0] |= sigma_delta->comm;
126 		spi_message_add_tail(&t[0], &m);
127 	}
128 	spi_message_add_tail(&t[1], &m);
129 
130 	if (sigma_delta->bus_locked)
131 		ret = spi_sync_locked(sigma_delta->spi, &m);
132 	else
133 		ret = spi_sync(sigma_delta->spi, &m);
134 
135 	return ret;
136 }
137 
138 /**
139  * ad_sd_read_reg() - Read a register
140  *
141  * @sigma_delta: The sigma delta device
142  * @reg: Address of the register
143  * @size: Size of the register (1-4)
144  * @val: Read value
145  *
146  * Returns 0 on success, an error code otherwise.
147  **/
ad_sd_read_reg(struct ad_sigma_delta * sigma_delta,unsigned int reg,unsigned int size,unsigned int * val)148 int ad_sd_read_reg(struct ad_sigma_delta *sigma_delta,
149 	unsigned int reg, unsigned int size, unsigned int *val)
150 {
151 	int ret;
152 
153 	ret = ad_sd_read_reg_raw(sigma_delta, reg, size, sigma_delta->rx_buf);
154 	if (ret < 0)
155 		goto out;
156 
157 	switch (size) {
158 	case 4:
159 		*val = get_unaligned_be32(sigma_delta->rx_buf);
160 		break;
161 	case 3:
162 		*val = get_unaligned_be24(sigma_delta->rx_buf);
163 		break;
164 	case 2:
165 		*val = get_unaligned_be16(sigma_delta->rx_buf);
166 		break;
167 	case 1:
168 		*val = sigma_delta->rx_buf[0];
169 		break;
170 	default:
171 		ret = -EINVAL;
172 		break;
173 	}
174 
175 out:
176 	return ret;
177 }
178 EXPORT_SYMBOL_NS_GPL(ad_sd_read_reg, "IIO_AD_SIGMA_DELTA");
179 
180 /**
181  * ad_sd_reset() - Reset the serial interface
182  *
183  * @sigma_delta: The sigma delta device
184  *
185  * Returns 0 on success, an error code otherwise.
186  **/
ad_sd_reset(struct ad_sigma_delta * sigma_delta)187 int ad_sd_reset(struct ad_sigma_delta *sigma_delta)
188 {
189 	unsigned int reset_length = sigma_delta->info->num_resetclks;
190 	uint8_t *buf;
191 	unsigned int size;
192 	int ret;
193 
194 	size = DIV_ROUND_UP(reset_length, 8);
195 	buf = kcalloc(size, sizeof(*buf), GFP_KERNEL);
196 	if (!buf)
197 		return -ENOMEM;
198 
199 	memset(buf, 0xff, size);
200 	ret = spi_write(sigma_delta->spi, buf, size);
201 	kfree(buf);
202 
203 	return ret;
204 }
205 EXPORT_SYMBOL_NS_GPL(ad_sd_reset, "IIO_AD_SIGMA_DELTA");
206 
ad_sd_disable_irq(struct ad_sigma_delta * sigma_delta)207 static bool ad_sd_disable_irq(struct ad_sigma_delta *sigma_delta)
208 {
209 	guard(spinlock_irqsave)(&sigma_delta->irq_lock);
210 
211 	/* It's already off, return false to indicate nothing was changed */
212 	if (sigma_delta->irq_dis)
213 		return false;
214 
215 	sigma_delta->irq_dis = true;
216 	disable_irq_nosync(sigma_delta->irq_line);
217 	return true;
218 }
219 
ad_sd_enable_irq(struct ad_sigma_delta * sigma_delta)220 static void ad_sd_enable_irq(struct ad_sigma_delta *sigma_delta)
221 {
222 	guard(spinlock_irqsave)(&sigma_delta->irq_lock);
223 
224 	sigma_delta->irq_dis = false;
225 	enable_irq(sigma_delta->irq_line);
226 }
227 
228 #define AD_SD_CLEAR_DATA_BUFLEN 9
229 
230 /* Called with `sigma_delta->bus_locked == true` only. */
ad_sigma_delta_clear_pending_event(struct ad_sigma_delta * sigma_delta)231 static int ad_sigma_delta_clear_pending_event(struct ad_sigma_delta *sigma_delta)
232 {
233 	bool pending_event;
234 	unsigned int data_read_len = BITS_TO_BYTES(sigma_delta->info->num_resetclks);
235 	u8 *data;
236 	struct spi_transfer t[] = {
237 		{
238 			.len = 1,
239 		}, {
240 			.len = data_read_len,
241 		}
242 	};
243 	struct spi_message m;
244 	int ret;
245 
246 	/*
247 	 * Read R̅D̅Y̅ pin (if possible) or status register to check if there is an
248 	 * old event.
249 	 */
250 	if (sigma_delta->rdy_gpiod) {
251 		pending_event = gpiod_get_value(sigma_delta->rdy_gpiod);
252 	} else {
253 		unsigned int status_reg;
254 
255 		ret = ad_sd_read_reg(sigma_delta, AD_SD_REG_STATUS, 1, &status_reg);
256 		if (ret)
257 			return ret;
258 
259 		pending_event = !(status_reg & AD_SD_REG_STATUS_RDY);
260 	}
261 
262 	if (!pending_event)
263 		return 0;
264 
265 	/*
266 	 * In general the size of the data register is unknown. It varies from
267 	 * device to device, might be one byte longer if CONTROL.DATA_STATUS is
268 	 * set and even varies on some devices depending on which input is
269 	 * selected. So send one byte to start reading the data register and
270 	 * then just clock for some bytes with DIN (aka MOSI) high to not
271 	 * confuse the register access state machine after the data register was
272 	 * completely read. Note however that the sequence length must be
273 	 * shorter than the reset procedure.
274 	 */
275 
276 	data = kzalloc(data_read_len + 1, GFP_KERNEL);
277 	if (!data)
278 		return -ENOMEM;
279 
280 	spi_message_init(&m);
281 	if (sigma_delta->info->has_registers) {
282 		unsigned int data_reg = sigma_delta->info->data_reg ?: AD_SD_REG_DATA;
283 
284 		data[0] = data_reg << sigma_delta->info->addr_shift;
285 		data[0] |= sigma_delta->info->read_mask;
286 		data[0] |= sigma_delta->comm;
287 		t[0].tx_buf = data;
288 		spi_message_add_tail(&t[0], &m);
289 	}
290 
291 	/*
292 	 * The first transferred byte is part of the real data register,
293 	 * so this doesn't need to be 0xff. In the remaining
294 	 * `data_read_len - 1` bytes are less than $num_resetclks ones.
295 	 */
296 	t[1].tx_buf = data + 1;
297 	data[1] = 0x00;
298 	memset(data + 2, 0xff, data_read_len - 1);
299 	spi_message_add_tail(&t[1], &m);
300 
301 	ret = spi_sync_locked(sigma_delta->spi, &m);
302 
303 	kfree(data);
304 
305 	return ret;
306 }
307 
ad_sd_calibrate(struct ad_sigma_delta * sigma_delta,unsigned int mode,unsigned int channel)308 int ad_sd_calibrate(struct ad_sigma_delta *sigma_delta,
309 	unsigned int mode, unsigned int channel)
310 {
311 	int ret;
312 	unsigned long time_left;
313 
314 	ret = ad_sigma_delta_set_channel(sigma_delta, channel);
315 	if (ret)
316 		return ret;
317 
318 	spi_bus_lock(sigma_delta->spi->controller);
319 	sigma_delta->bus_locked = true;
320 	sigma_delta->keep_cs_asserted = true;
321 	reinit_completion(&sigma_delta->completion);
322 
323 	ret = ad_sigma_delta_clear_pending_event(sigma_delta);
324 	if (ret)
325 		goto out;
326 
327 	ret = ad_sigma_delta_set_mode(sigma_delta, mode);
328 	if (ret < 0)
329 		goto out;
330 
331 	ad_sd_enable_irq(sigma_delta);
332 	time_left = wait_for_completion_timeout(&sigma_delta->completion, 2 * HZ);
333 	if (time_left == 0) {
334 		ad_sd_disable_irq(sigma_delta);
335 		ret = -EIO;
336 	} else {
337 		ret = 0;
338 	}
339 out:
340 	sigma_delta->keep_cs_asserted = false;
341 	ad_sigma_delta_set_mode(sigma_delta, AD_SD_MODE_IDLE);
342 	sigma_delta->bus_locked = false;
343 	spi_bus_unlock(sigma_delta->spi->controller);
344 
345 	return ret;
346 }
347 EXPORT_SYMBOL_NS_GPL(ad_sd_calibrate, "IIO_AD_SIGMA_DELTA");
348 
349 /**
350  * ad_sd_calibrate_all() - Performs channel calibration
351  * @sigma_delta: The sigma delta device
352  * @cb: Array of channels and calibration type to perform
353  * @n: Number of items in cb
354  *
355  * Returns 0 on success, an error code otherwise.
356  **/
ad_sd_calibrate_all(struct ad_sigma_delta * sigma_delta,const struct ad_sd_calib_data * cb,unsigned int n)357 int ad_sd_calibrate_all(struct ad_sigma_delta *sigma_delta,
358 	const struct ad_sd_calib_data *cb, unsigned int n)
359 {
360 	unsigned int i;
361 	int ret;
362 
363 	for (i = 0; i < n; i++) {
364 		ret = ad_sd_calibrate(sigma_delta, cb[i].mode, cb[i].channel);
365 		if (ret)
366 			return ret;
367 	}
368 
369 	return 0;
370 }
371 EXPORT_SYMBOL_NS_GPL(ad_sd_calibrate_all, "IIO_AD_SIGMA_DELTA");
372 
373 /**
374  * ad_sigma_delta_single_conversion() - Performs a single data conversion
375  * @indio_dev: The IIO device
376  * @chan: The conversion is done for this channel
377  * @val: Pointer to the location where to store the read value
378  *
379  * Returns: 0 on success, an error value otherwise.
380  */
ad_sigma_delta_single_conversion(struct iio_dev * indio_dev,const struct iio_chan_spec * chan,int * val)381 int ad_sigma_delta_single_conversion(struct iio_dev *indio_dev,
382 	const struct iio_chan_spec *chan, int *val)
383 {
384 	struct ad_sigma_delta *sigma_delta = iio_device_get_drvdata(indio_dev);
385 	unsigned int sample, raw_sample;
386 	unsigned int data_reg;
387 	int ret = 0;
388 
389 	ret = iio_device_claim_direct_mode(indio_dev);
390 	if (ret)
391 		return ret;
392 
393 	ad_sigma_delta_set_channel(sigma_delta, chan->address);
394 
395 	spi_bus_lock(sigma_delta->spi->controller);
396 	sigma_delta->bus_locked = true;
397 	sigma_delta->keep_cs_asserted = true;
398 	reinit_completion(&sigma_delta->completion);
399 
400 	ret = ad_sigma_delta_clear_pending_event(sigma_delta);
401 	if (ret)
402 		goto out_unlock;
403 
404 	ad_sigma_delta_set_mode(sigma_delta, AD_SD_MODE_SINGLE);
405 
406 	ad_sd_enable_irq(sigma_delta);
407 	ret = wait_for_completion_interruptible_timeout(
408 			&sigma_delta->completion, HZ);
409 
410 	if (ret == 0)
411 		ret = -EIO;
412 	if (ret < 0)
413 		goto out;
414 
415 	if (sigma_delta->info->data_reg != 0)
416 		data_reg = sigma_delta->info->data_reg;
417 	else
418 		data_reg = AD_SD_REG_DATA;
419 
420 	ret = ad_sd_read_reg(sigma_delta, data_reg,
421 		DIV_ROUND_UP(chan->scan_type.realbits + chan->scan_type.shift, 8),
422 		&raw_sample);
423 
424 out:
425 	ad_sd_disable_irq(sigma_delta);
426 
427 	ad_sigma_delta_set_mode(sigma_delta, AD_SD_MODE_IDLE);
428 	ad_sigma_delta_disable_one(sigma_delta, chan->address);
429 
430 out_unlock:
431 	sigma_delta->keep_cs_asserted = false;
432 	sigma_delta->bus_locked = false;
433 	spi_bus_unlock(sigma_delta->spi->controller);
434 	iio_device_release_direct_mode(indio_dev);
435 
436 	if (ret)
437 		return ret;
438 
439 	sample = raw_sample >> chan->scan_type.shift;
440 	sample &= (1 << chan->scan_type.realbits) - 1;
441 	*val = sample;
442 
443 	ret = ad_sigma_delta_postprocess_sample(sigma_delta, raw_sample);
444 	if (ret)
445 		return ret;
446 
447 	return IIO_VAL_INT;
448 }
449 EXPORT_SYMBOL_NS_GPL(ad_sigma_delta_single_conversion, "IIO_AD_SIGMA_DELTA");
450 
ad_sd_buffer_postenable(struct iio_dev * indio_dev)451 static int ad_sd_buffer_postenable(struct iio_dev *indio_dev)
452 {
453 	struct ad_sigma_delta *sigma_delta = iio_device_get_drvdata(indio_dev);
454 	unsigned int i, slot, samples_buf_size;
455 	unsigned int channel;
456 	uint8_t *samples_buf;
457 	int ret;
458 
459 	if (sigma_delta->num_slots == 1) {
460 		channel = find_first_bit(indio_dev->active_scan_mask,
461 					 iio_get_masklength(indio_dev));
462 		ret = ad_sigma_delta_set_channel(sigma_delta,
463 						 indio_dev->channels[channel].address);
464 		if (ret)
465 			return ret;
466 		slot = 1;
467 	} else {
468 		/*
469 		 * At this point update_scan_mode already enabled the required channels.
470 		 * For sigma-delta sequencer drivers with multiple slots, an update_scan_mode
471 		 * implementation is mandatory.
472 		 */
473 		slot = 0;
474 		iio_for_each_active_channel(indio_dev, i) {
475 			sigma_delta->slots[slot] = indio_dev->channels[i].address;
476 			slot++;
477 		}
478 	}
479 
480 	sigma_delta->active_slots = slot;
481 	sigma_delta->current_slot = 0;
482 
483 	if (sigma_delta->active_slots > 1) {
484 		ret = ad_sigma_delta_append_status(sigma_delta, true);
485 		if (ret)
486 			return ret;
487 	}
488 
489 	samples_buf_size = ALIGN(slot * indio_dev->channels[0].scan_type.storagebits, 8);
490 	samples_buf_size += sizeof(int64_t);
491 	samples_buf = devm_krealloc(&sigma_delta->spi->dev, sigma_delta->samples_buf,
492 				    samples_buf_size, GFP_KERNEL);
493 	if (!samples_buf)
494 		return -ENOMEM;
495 
496 	sigma_delta->samples_buf = samples_buf;
497 
498 	spi_bus_lock(sigma_delta->spi->controller);
499 	sigma_delta->bus_locked = true;
500 	sigma_delta->keep_cs_asserted = true;
501 
502 	ret = ad_sigma_delta_clear_pending_event(sigma_delta);
503 	if (ret)
504 		goto err_unlock;
505 
506 	ret = ad_sigma_delta_set_mode(sigma_delta, AD_SD_MODE_CONTINUOUS);
507 	if (ret)
508 		goto err_unlock;
509 
510 	ad_sd_enable_irq(sigma_delta);
511 
512 	return 0;
513 
514 err_unlock:
515 	spi_bus_unlock(sigma_delta->spi->controller);
516 
517 	return ret;
518 }
519 
ad_sd_buffer_postdisable(struct iio_dev * indio_dev)520 static int ad_sd_buffer_postdisable(struct iio_dev *indio_dev)
521 {
522 	struct ad_sigma_delta *sigma_delta = iio_device_get_drvdata(indio_dev);
523 
524 	reinit_completion(&sigma_delta->completion);
525 	wait_for_completion_timeout(&sigma_delta->completion, HZ);
526 
527 	ad_sd_disable_irq(sigma_delta);
528 
529 	sigma_delta->keep_cs_asserted = false;
530 	ad_sigma_delta_set_mode(sigma_delta, AD_SD_MODE_IDLE);
531 
532 	if (sigma_delta->status_appended)
533 		ad_sigma_delta_append_status(sigma_delta, false);
534 
535 	ad_sigma_delta_disable_all(sigma_delta);
536 	sigma_delta->bus_locked = false;
537 	return spi_bus_unlock(sigma_delta->spi->controller);
538 }
539 
ad_sd_trigger_handler(int irq,void * p)540 static irqreturn_t ad_sd_trigger_handler(int irq, void *p)
541 {
542 	struct iio_poll_func *pf = p;
543 	struct iio_dev *indio_dev = pf->indio_dev;
544 	struct ad_sigma_delta *sigma_delta = iio_device_get_drvdata(indio_dev);
545 	uint8_t *data = sigma_delta->rx_buf;
546 	unsigned int transfer_size;
547 	unsigned int sample_size;
548 	unsigned int sample_pos;
549 	unsigned int status_pos;
550 	unsigned int reg_size;
551 	unsigned int data_reg;
552 
553 	reg_size = indio_dev->channels[0].scan_type.realbits +
554 			indio_dev->channels[0].scan_type.shift;
555 	reg_size = DIV_ROUND_UP(reg_size, 8);
556 
557 	if (sigma_delta->info->data_reg != 0)
558 		data_reg = sigma_delta->info->data_reg;
559 	else
560 		data_reg = AD_SD_REG_DATA;
561 
562 	/* Status word will be appended to the sample during transfer */
563 	if (sigma_delta->status_appended)
564 		transfer_size = reg_size + 1;
565 	else
566 		transfer_size = reg_size;
567 
568 	switch (reg_size) {
569 	case 4:
570 	case 2:
571 	case 1:
572 		status_pos = reg_size;
573 		ad_sd_read_reg_raw(sigma_delta, data_reg, transfer_size, &data[0]);
574 		break;
575 	case 3:
576 		/*
577 		 * Data array after transfer will look like (if status is appended):
578 		 * data[] = { [0][sample][sample][sample][status] }
579 		 * Keeping the first byte 0 shifts the status position by 1 byte to the right.
580 		 */
581 		status_pos = reg_size + 1;
582 
583 		/* We store 24 bit samples in a 32 bit word. Keep the upper
584 		 * byte set to zero. */
585 		ad_sd_read_reg_raw(sigma_delta, data_reg, transfer_size, &data[1]);
586 		break;
587 	}
588 
589 	/*
590 	 * For devices sampling only one channel at
591 	 * once, there is no need for sample number tracking.
592 	 */
593 	if (sigma_delta->active_slots == 1) {
594 		iio_push_to_buffers_with_timestamp(indio_dev, data, pf->timestamp);
595 		goto irq_handled;
596 	}
597 
598 	if (sigma_delta->status_appended) {
599 		u8 converted_channel;
600 
601 		converted_channel = data[status_pos] & sigma_delta->info->status_ch_mask;
602 		if (converted_channel != sigma_delta->slots[sigma_delta->current_slot]) {
603 			/*
604 			 * Desync occurred during continuous sampling of multiple channels.
605 			 * Drop this incomplete sample and start from first channel again.
606 			 */
607 
608 			sigma_delta->current_slot = 0;
609 			goto irq_handled;
610 		}
611 	}
612 
613 	sample_size = indio_dev->channels[0].scan_type.storagebits / 8;
614 	sample_pos = sample_size * sigma_delta->current_slot;
615 	memcpy(&sigma_delta->samples_buf[sample_pos], data, sample_size);
616 	sigma_delta->current_slot++;
617 
618 	if (sigma_delta->current_slot == sigma_delta->active_slots) {
619 		sigma_delta->current_slot = 0;
620 		iio_push_to_buffers_with_timestamp(indio_dev, sigma_delta->samples_buf,
621 						   pf->timestamp);
622 	}
623 
624 irq_handled:
625 	iio_trigger_notify_done(indio_dev->trig);
626 	ad_sd_enable_irq(sigma_delta);
627 
628 	return IRQ_HANDLED;
629 }
630 
ad_sd_validate_scan_mask(struct iio_dev * indio_dev,const unsigned long * mask)631 static bool ad_sd_validate_scan_mask(struct iio_dev *indio_dev, const unsigned long *mask)
632 {
633 	struct ad_sigma_delta *sigma_delta = iio_device_get_drvdata(indio_dev);
634 
635 	return bitmap_weight(mask, iio_get_masklength(indio_dev)) <= sigma_delta->num_slots;
636 }
637 
638 static const struct iio_buffer_setup_ops ad_sd_buffer_setup_ops = {
639 	.postenable = &ad_sd_buffer_postenable,
640 	.postdisable = &ad_sd_buffer_postdisable,
641 	.validate_scan_mask = &ad_sd_validate_scan_mask,
642 };
643 
ad_sd_data_rdy_trig_poll(int irq,void * private)644 static irqreturn_t ad_sd_data_rdy_trig_poll(int irq, void *private)
645 {
646 	struct ad_sigma_delta *sigma_delta = private;
647 
648 	/*
649 	 * AD7124 and a few others use the same physical line for interrupt
650 	 * reporting (R̅D̅Y̅) and MISO.
651 	 * As MISO toggles when reading a register, this likely results in a
652 	 * pending interrupt. This has two consequences: a) The irq might
653 	 * trigger immediately after it's enabled even though the conversion
654 	 * isn't done yet; and b) checking the STATUS register's R̅D̅Y̅ flag is
655 	 * off-limits as reading that would trigger another irq event.
656 	 *
657 	 * So read the MOSI line as GPIO (if available) and only trigger the irq
658 	 * if the line is active. Without such a GPIO assume this is a valid
659 	 * interrupt.
660 	 *
661 	 * Also as disable_irq_nosync() is used to disable the irq, only act if
662 	 * the irq wasn't disabled before.
663 	 */
664 	if ((!sigma_delta->rdy_gpiod || gpiod_get_value(sigma_delta->rdy_gpiod)) &&
665 	    ad_sd_disable_irq(sigma_delta)) {
666 		complete(&sigma_delta->completion);
667 		iio_trigger_poll(sigma_delta->trig);
668 
669 		return IRQ_HANDLED;
670 	}
671 
672 	return IRQ_NONE;
673 }
674 
675 /**
676  * ad_sd_validate_trigger() - validate_trigger callback for ad_sigma_delta devices
677  * @indio_dev: The IIO device
678  * @trig: The new trigger
679  *
680  * Returns: 0 if the 'trig' matches the trigger registered by the ad_sigma_delta
681  * device, -EINVAL otherwise.
682  */
ad_sd_validate_trigger(struct iio_dev * indio_dev,struct iio_trigger * trig)683 int ad_sd_validate_trigger(struct iio_dev *indio_dev, struct iio_trigger *trig)
684 {
685 	struct ad_sigma_delta *sigma_delta = iio_device_get_drvdata(indio_dev);
686 
687 	if (sigma_delta->trig != trig)
688 		return -EINVAL;
689 
690 	return 0;
691 }
692 EXPORT_SYMBOL_NS_GPL(ad_sd_validate_trigger, "IIO_AD_SIGMA_DELTA");
693 
devm_ad_sd_probe_trigger(struct device * dev,struct iio_dev * indio_dev)694 static int devm_ad_sd_probe_trigger(struct device *dev, struct iio_dev *indio_dev)
695 {
696 	struct ad_sigma_delta *sigma_delta = iio_device_get_drvdata(indio_dev);
697 	unsigned long irq_flags = irq_get_trigger_type(sigma_delta->irq_line);
698 	int ret;
699 
700 	if (dev != &sigma_delta->spi->dev) {
701 		dev_err(dev, "Trigger parent should be '%s', got '%s'\n",
702 			dev_name(dev), dev_name(&sigma_delta->spi->dev));
703 		return -EFAULT;
704 	}
705 
706 	sigma_delta->trig = devm_iio_trigger_alloc(dev, "%s-dev%d", indio_dev->name,
707 						   iio_device_id(indio_dev));
708 	if (sigma_delta->trig == NULL)
709 		return -ENOMEM;
710 
711 	init_completion(&sigma_delta->completion);
712 
713 	sigma_delta->irq_dis = true;
714 
715 	/* the IRQ core clears IRQ_DISABLE_UNLAZY flag when freeing an IRQ */
716 	irq_set_status_flags(sigma_delta->irq_line, IRQ_DISABLE_UNLAZY);
717 
718 	/* Allow overwriting the flags from firmware */
719 	if (!irq_flags)
720 		irq_flags = sigma_delta->info->irq_flags;
721 
722 	ret = devm_request_irq(dev, sigma_delta->irq_line,
723 			       ad_sd_data_rdy_trig_poll,
724 			       irq_flags | IRQF_NO_AUTOEN,
725 			       indio_dev->name,
726 			       sigma_delta);
727 	if (ret)
728 		return ret;
729 
730 	iio_trigger_set_drvdata(sigma_delta->trig, sigma_delta);
731 
732 	ret = devm_iio_trigger_register(dev, sigma_delta->trig);
733 	if (ret)
734 		return ret;
735 
736 	/* select default trigger */
737 	indio_dev->trig = iio_trigger_get(sigma_delta->trig);
738 
739 	return 0;
740 }
741 
742 /**
743  * devm_ad_sd_setup_buffer_and_trigger() - Device-managed buffer & trigger setup
744  * @dev: Device object to which to bind the life-time of the resources attached
745  * @indio_dev: The IIO device
746  */
devm_ad_sd_setup_buffer_and_trigger(struct device * dev,struct iio_dev * indio_dev)747 int devm_ad_sd_setup_buffer_and_trigger(struct device *dev, struct iio_dev *indio_dev)
748 {
749 	struct ad_sigma_delta *sigma_delta = iio_device_get_drvdata(indio_dev);
750 	int ret;
751 
752 	sigma_delta->slots = devm_kcalloc(dev, sigma_delta->num_slots,
753 					  sizeof(*sigma_delta->slots), GFP_KERNEL);
754 	if (!sigma_delta->slots)
755 		return -ENOMEM;
756 
757 	ret = devm_iio_triggered_buffer_setup(dev, indio_dev,
758 					      &iio_pollfunc_store_time,
759 					      &ad_sd_trigger_handler,
760 					      &ad_sd_buffer_setup_ops);
761 	if (ret)
762 		return ret;
763 
764 	return devm_ad_sd_probe_trigger(dev, indio_dev);
765 }
766 EXPORT_SYMBOL_NS_GPL(devm_ad_sd_setup_buffer_and_trigger, "IIO_AD_SIGMA_DELTA");
767 
768 /**
769  * ad_sd_init() - Initializes a ad_sigma_delta struct
770  * @sigma_delta: The ad_sigma_delta device
771  * @indio_dev: The IIO device which the Sigma Delta device is used for
772  * @spi: The SPI device for the ad_sigma_delta device
773  * @info: Device specific callbacks and options
774  *
775  * This function needs to be called before any other operations are performed on
776  * the ad_sigma_delta struct.
777  */
ad_sd_init(struct ad_sigma_delta * sigma_delta,struct iio_dev * indio_dev,struct spi_device * spi,const struct ad_sigma_delta_info * info)778 int ad_sd_init(struct ad_sigma_delta *sigma_delta, struct iio_dev *indio_dev,
779 	struct spi_device *spi, const struct ad_sigma_delta_info *info)
780 {
781 	sigma_delta->spi = spi;
782 	sigma_delta->info = info;
783 
784 	/* If the field is unset in ad_sigma_delta_info, assume there can only be 1 slot. */
785 	if (!info->num_slots)
786 		sigma_delta->num_slots = 1;
787 	else
788 		sigma_delta->num_slots = info->num_slots;
789 
790 	if (sigma_delta->num_slots > 1) {
791 		if (!indio_dev->info->update_scan_mode) {
792 			dev_err(&spi->dev, "iio_dev lacks update_scan_mode().\n");
793 			return -EINVAL;
794 		}
795 
796 		if (!info->disable_all) {
797 			dev_err(&spi->dev, "ad_sigma_delta_info lacks disable_all().\n");
798 			return -EINVAL;
799 		}
800 	}
801 
802 	spin_lock_init(&sigma_delta->irq_lock);
803 
804 	if (info->irq_line)
805 		sigma_delta->irq_line = info->irq_line;
806 	else
807 		sigma_delta->irq_line = spi->irq;
808 
809 	sigma_delta->rdy_gpiod = devm_gpiod_get_optional(&spi->dev, "rdy", GPIOD_IN);
810 	if (IS_ERR(sigma_delta->rdy_gpiod))
811 		return dev_err_probe(&spi->dev, PTR_ERR(sigma_delta->rdy_gpiod),
812 				     "Failed to find rdy gpio\n");
813 
814 	if (sigma_delta->rdy_gpiod && !sigma_delta->irq_line) {
815 		sigma_delta->irq_line = gpiod_to_irq(sigma_delta->rdy_gpiod);
816 		if (sigma_delta->irq_line < 0)
817 			return sigma_delta->irq_line;
818 	}
819 
820 	iio_device_set_drvdata(indio_dev, sigma_delta);
821 
822 	return 0;
823 }
824 EXPORT_SYMBOL_NS_GPL(ad_sd_init, "IIO_AD_SIGMA_DELTA");
825 
826 MODULE_AUTHOR("Lars-Peter Clausen <lars@metafoo.de>");
827 MODULE_DESCRIPTION("Analog Devices Sigma-Delta ADCs");
828 MODULE_LICENSE("GPL v2");
829