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 <[email protected]>
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 	ad_sigma_delta_disable_one(sigma_delta, channel);
343 	sigma_delta->bus_locked = false;
344 	spi_bus_unlock(sigma_delta->spi->controller);
345 
346 	return ret;
347 }
348 EXPORT_SYMBOL_NS_GPL(ad_sd_calibrate, "IIO_AD_SIGMA_DELTA");
349 
350 /**
351  * ad_sd_calibrate_all() - Performs channel calibration
352  * @sigma_delta: The sigma delta device
353  * @cb: Array of channels and calibration type to perform
354  * @n: Number of items in cb
355  *
356  * Returns 0 on success, an error code otherwise.
357  **/
ad_sd_calibrate_all(struct ad_sigma_delta * sigma_delta,const struct ad_sd_calib_data * cb,unsigned int n)358 int ad_sd_calibrate_all(struct ad_sigma_delta *sigma_delta,
359 	const struct ad_sd_calib_data *cb, unsigned int n)
360 {
361 	unsigned int i;
362 	int ret;
363 
364 	for (i = 0; i < n; i++) {
365 		ret = ad_sd_calibrate(sigma_delta, cb[i].mode, cb[i].channel);
366 		if (ret)
367 			return ret;
368 	}
369 
370 	return 0;
371 }
372 EXPORT_SYMBOL_NS_GPL(ad_sd_calibrate_all, "IIO_AD_SIGMA_DELTA");
373 
374 /**
375  * ad_sigma_delta_single_conversion() - Performs a single data conversion
376  * @indio_dev: The IIO device
377  * @chan: The conversion is done for this channel
378  * @val: Pointer to the location where to store the read value
379  *
380  * Returns: 0 on success, an error value otherwise.
381  */
ad_sigma_delta_single_conversion(struct iio_dev * indio_dev,const struct iio_chan_spec * chan,int * val)382 int ad_sigma_delta_single_conversion(struct iio_dev *indio_dev,
383 	const struct iio_chan_spec *chan, int *val)
384 {
385 	struct ad_sigma_delta *sigma_delta = iio_device_get_drvdata(indio_dev);
386 	unsigned int sample, raw_sample;
387 	unsigned int data_reg;
388 	int ret = 0;
389 
390 	ret = iio_device_claim_direct_mode(indio_dev);
391 	if (ret)
392 		return ret;
393 
394 	ad_sigma_delta_set_channel(sigma_delta, chan->address);
395 
396 	spi_bus_lock(sigma_delta->spi->controller);
397 	sigma_delta->bus_locked = true;
398 	sigma_delta->keep_cs_asserted = true;
399 	reinit_completion(&sigma_delta->completion);
400 
401 	ret = ad_sigma_delta_clear_pending_event(sigma_delta);
402 	if (ret)
403 		goto out_unlock;
404 
405 	ad_sigma_delta_set_mode(sigma_delta, AD_SD_MODE_SINGLE);
406 
407 	ad_sd_enable_irq(sigma_delta);
408 	ret = wait_for_completion_interruptible_timeout(
409 			&sigma_delta->completion, HZ);
410 
411 	if (ret == 0)
412 		ret = -EIO;
413 	if (ret < 0)
414 		goto out;
415 
416 	if (sigma_delta->info->data_reg != 0)
417 		data_reg = sigma_delta->info->data_reg;
418 	else
419 		data_reg = AD_SD_REG_DATA;
420 
421 	ret = ad_sd_read_reg(sigma_delta, data_reg,
422 		DIV_ROUND_UP(chan->scan_type.realbits + chan->scan_type.shift, 8),
423 		&raw_sample);
424 
425 out:
426 	ad_sd_disable_irq(sigma_delta);
427 
428 	ad_sigma_delta_set_mode(sigma_delta, AD_SD_MODE_IDLE);
429 	ad_sigma_delta_disable_one(sigma_delta, chan->address);
430 
431 out_unlock:
432 	sigma_delta->keep_cs_asserted = false;
433 	sigma_delta->bus_locked = false;
434 	spi_bus_unlock(sigma_delta->spi->controller);
435 	iio_device_release_direct_mode(indio_dev);
436 
437 	if (ret)
438 		return ret;
439 
440 	sample = raw_sample >> chan->scan_type.shift;
441 	sample &= (1 << chan->scan_type.realbits) - 1;
442 	*val = sample;
443 
444 	ret = ad_sigma_delta_postprocess_sample(sigma_delta, raw_sample);
445 	if (ret)
446 		return ret;
447 
448 	return IIO_VAL_INT;
449 }
450 EXPORT_SYMBOL_NS_GPL(ad_sigma_delta_single_conversion, "IIO_AD_SIGMA_DELTA");
451 
ad_sd_buffer_postenable(struct iio_dev * indio_dev)452 static int ad_sd_buffer_postenable(struct iio_dev *indio_dev)
453 {
454 	struct ad_sigma_delta *sigma_delta = iio_device_get_drvdata(indio_dev);
455 	unsigned int i, slot, samples_buf_size;
456 	unsigned int channel;
457 	uint8_t *samples_buf;
458 	int ret;
459 
460 	if (sigma_delta->num_slots == 1) {
461 		channel = find_first_bit(indio_dev->active_scan_mask,
462 					 iio_get_masklength(indio_dev));
463 		ret = ad_sigma_delta_set_channel(sigma_delta,
464 						 indio_dev->channels[channel].address);
465 		if (ret)
466 			return ret;
467 		slot = 1;
468 	} else {
469 		/*
470 		 * At this point update_scan_mode already enabled the required channels.
471 		 * For sigma-delta sequencer drivers with multiple slots, an update_scan_mode
472 		 * implementation is mandatory.
473 		 */
474 		slot = 0;
475 		iio_for_each_active_channel(indio_dev, i) {
476 			sigma_delta->slots[slot] = indio_dev->channels[i].address;
477 			slot++;
478 		}
479 	}
480 
481 	sigma_delta->active_slots = slot;
482 	sigma_delta->current_slot = 0;
483 
484 	if (sigma_delta->active_slots > 1) {
485 		ret = ad_sigma_delta_append_status(sigma_delta, true);
486 		if (ret)
487 			return ret;
488 	}
489 
490 	samples_buf_size = ALIGN(slot * indio_dev->channels[0].scan_type.storagebits, 8);
491 	samples_buf_size += sizeof(int64_t);
492 	samples_buf = devm_krealloc(&sigma_delta->spi->dev, sigma_delta->samples_buf,
493 				    samples_buf_size, GFP_KERNEL);
494 	if (!samples_buf)
495 		return -ENOMEM;
496 
497 	sigma_delta->samples_buf = samples_buf;
498 
499 	spi_bus_lock(sigma_delta->spi->controller);
500 	sigma_delta->bus_locked = true;
501 	sigma_delta->keep_cs_asserted = true;
502 
503 	ret = ad_sigma_delta_clear_pending_event(sigma_delta);
504 	if (ret)
505 		goto err_unlock;
506 
507 	ret = ad_sigma_delta_set_mode(sigma_delta, AD_SD_MODE_CONTINUOUS);
508 	if (ret)
509 		goto err_unlock;
510 
511 	ad_sd_enable_irq(sigma_delta);
512 
513 	return 0;
514 
515 err_unlock:
516 	spi_bus_unlock(sigma_delta->spi->controller);
517 
518 	return ret;
519 }
520 
ad_sd_buffer_postdisable(struct iio_dev * indio_dev)521 static int ad_sd_buffer_postdisable(struct iio_dev *indio_dev)
522 {
523 	struct ad_sigma_delta *sigma_delta = iio_device_get_drvdata(indio_dev);
524 
525 	reinit_completion(&sigma_delta->completion);
526 	wait_for_completion_timeout(&sigma_delta->completion, HZ);
527 
528 	ad_sd_disable_irq(sigma_delta);
529 
530 	sigma_delta->keep_cs_asserted = false;
531 	ad_sigma_delta_set_mode(sigma_delta, AD_SD_MODE_IDLE);
532 
533 	if (sigma_delta->status_appended)
534 		ad_sigma_delta_append_status(sigma_delta, false);
535 
536 	ad_sigma_delta_disable_all(sigma_delta);
537 	sigma_delta->bus_locked = false;
538 	return spi_bus_unlock(sigma_delta->spi->controller);
539 }
540 
ad_sd_trigger_handler(int irq,void * p)541 static irqreturn_t ad_sd_trigger_handler(int irq, void *p)
542 {
543 	struct iio_poll_func *pf = p;
544 	struct iio_dev *indio_dev = pf->indio_dev;
545 	struct ad_sigma_delta *sigma_delta = iio_device_get_drvdata(indio_dev);
546 	uint8_t *data = sigma_delta->rx_buf;
547 	unsigned int transfer_size;
548 	unsigned int sample_size;
549 	unsigned int sample_pos;
550 	unsigned int status_pos;
551 	unsigned int reg_size;
552 	unsigned int data_reg;
553 
554 	reg_size = indio_dev->channels[0].scan_type.realbits +
555 			indio_dev->channels[0].scan_type.shift;
556 	reg_size = DIV_ROUND_UP(reg_size, 8);
557 
558 	if (sigma_delta->info->data_reg != 0)
559 		data_reg = sigma_delta->info->data_reg;
560 	else
561 		data_reg = AD_SD_REG_DATA;
562 
563 	/* Status word will be appended to the sample during transfer */
564 	if (sigma_delta->status_appended)
565 		transfer_size = reg_size + 1;
566 	else
567 		transfer_size = reg_size;
568 
569 	switch (reg_size) {
570 	case 4:
571 	case 2:
572 	case 1:
573 		status_pos = reg_size;
574 		ad_sd_read_reg_raw(sigma_delta, data_reg, transfer_size, &data[0]);
575 		break;
576 	case 3:
577 		/*
578 		 * Data array after transfer will look like (if status is appended):
579 		 * data[] = { [0][sample][sample][sample][status] }
580 		 * Keeping the first byte 0 shifts the status position by 1 byte to the right.
581 		 */
582 		status_pos = reg_size + 1;
583 
584 		/* We store 24 bit samples in a 32 bit word. Keep the upper
585 		 * byte set to zero. */
586 		ad_sd_read_reg_raw(sigma_delta, data_reg, transfer_size, &data[1]);
587 		break;
588 	}
589 
590 	/*
591 	 * For devices sampling only one channel at
592 	 * once, there is no need for sample number tracking.
593 	 */
594 	if (sigma_delta->active_slots == 1) {
595 		iio_push_to_buffers_with_timestamp(indio_dev, data, pf->timestamp);
596 		goto irq_handled;
597 	}
598 
599 	if (sigma_delta->status_appended) {
600 		u8 converted_channel;
601 
602 		converted_channel = data[status_pos] & sigma_delta->info->status_ch_mask;
603 		if (converted_channel != sigma_delta->slots[sigma_delta->current_slot]) {
604 			/*
605 			 * Desync occurred during continuous sampling of multiple channels.
606 			 * Drop this incomplete sample and start from first channel again.
607 			 */
608 
609 			sigma_delta->current_slot = 0;
610 			goto irq_handled;
611 		}
612 	}
613 
614 	sample_size = indio_dev->channels[0].scan_type.storagebits / 8;
615 	sample_pos = sample_size * sigma_delta->current_slot;
616 	memcpy(&sigma_delta->samples_buf[sample_pos], data, sample_size);
617 	sigma_delta->current_slot++;
618 
619 	if (sigma_delta->current_slot == sigma_delta->active_slots) {
620 		sigma_delta->current_slot = 0;
621 		iio_push_to_buffers_with_timestamp(indio_dev, sigma_delta->samples_buf,
622 						   pf->timestamp);
623 	}
624 
625 irq_handled:
626 	iio_trigger_notify_done(indio_dev->trig);
627 	ad_sd_enable_irq(sigma_delta);
628 
629 	return IRQ_HANDLED;
630 }
631 
ad_sd_validate_scan_mask(struct iio_dev * indio_dev,const unsigned long * mask)632 static bool ad_sd_validate_scan_mask(struct iio_dev *indio_dev, const unsigned long *mask)
633 {
634 	struct ad_sigma_delta *sigma_delta = iio_device_get_drvdata(indio_dev);
635 
636 	return bitmap_weight(mask, iio_get_masklength(indio_dev)) <= sigma_delta->num_slots;
637 }
638 
639 static const struct iio_buffer_setup_ops ad_sd_buffer_setup_ops = {
640 	.postenable = &ad_sd_buffer_postenable,
641 	.postdisable = &ad_sd_buffer_postdisable,
642 	.validate_scan_mask = &ad_sd_validate_scan_mask,
643 };
644 
ad_sd_data_rdy_trig_poll(int irq,void * private)645 static irqreturn_t ad_sd_data_rdy_trig_poll(int irq, void *private)
646 {
647 	struct ad_sigma_delta *sigma_delta = private;
648 
649 	/*
650 	 * AD7124 and a few others use the same physical line for interrupt
651 	 * reporting (R̅D̅Y̅) and MISO.
652 	 * As MISO toggles when reading a register, this likely results in a
653 	 * pending interrupt. This has two consequences: a) The irq might
654 	 * trigger immediately after it's enabled even though the conversion
655 	 * isn't done yet; and b) checking the STATUS register's R̅D̅Y̅ flag is
656 	 * off-limits as reading that would trigger another irq event.
657 	 *
658 	 * So read the MOSI line as GPIO (if available) and only trigger the irq
659 	 * if the line is active. Without such a GPIO assume this is a valid
660 	 * interrupt.
661 	 *
662 	 * Also as disable_irq_nosync() is used to disable the irq, only act if
663 	 * the irq wasn't disabled before.
664 	 */
665 	if ((!sigma_delta->rdy_gpiod || gpiod_get_value(sigma_delta->rdy_gpiod)) &&
666 	    ad_sd_disable_irq(sigma_delta)) {
667 		complete(&sigma_delta->completion);
668 		iio_trigger_poll(sigma_delta->trig);
669 
670 		return IRQ_HANDLED;
671 	}
672 
673 	return IRQ_NONE;
674 }
675 
676 /**
677  * ad_sd_validate_trigger() - validate_trigger callback for ad_sigma_delta devices
678  * @indio_dev: The IIO device
679  * @trig: The new trigger
680  *
681  * Returns: 0 if the 'trig' matches the trigger registered by the ad_sigma_delta
682  * device, -EINVAL otherwise.
683  */
ad_sd_validate_trigger(struct iio_dev * indio_dev,struct iio_trigger * trig)684 int ad_sd_validate_trigger(struct iio_dev *indio_dev, struct iio_trigger *trig)
685 {
686 	struct ad_sigma_delta *sigma_delta = iio_device_get_drvdata(indio_dev);
687 
688 	if (sigma_delta->trig != trig)
689 		return -EINVAL;
690 
691 	return 0;
692 }
693 EXPORT_SYMBOL_NS_GPL(ad_sd_validate_trigger, "IIO_AD_SIGMA_DELTA");
694 
devm_ad_sd_probe_trigger(struct device * dev,struct iio_dev * indio_dev)695 static int devm_ad_sd_probe_trigger(struct device *dev, struct iio_dev *indio_dev)
696 {
697 	struct ad_sigma_delta *sigma_delta = iio_device_get_drvdata(indio_dev);
698 	unsigned long irq_flags = irq_get_trigger_type(sigma_delta->irq_line);
699 	int ret;
700 
701 	if (dev != &sigma_delta->spi->dev) {
702 		dev_err(dev, "Trigger parent should be '%s', got '%s'\n",
703 			dev_name(dev), dev_name(&sigma_delta->spi->dev));
704 		return -EFAULT;
705 	}
706 
707 	sigma_delta->trig = devm_iio_trigger_alloc(dev, "%s-dev%d", indio_dev->name,
708 						   iio_device_id(indio_dev));
709 	if (sigma_delta->trig == NULL)
710 		return -ENOMEM;
711 
712 	init_completion(&sigma_delta->completion);
713 
714 	sigma_delta->irq_dis = true;
715 
716 	/* the IRQ core clears IRQ_DISABLE_UNLAZY flag when freeing an IRQ */
717 	irq_set_status_flags(sigma_delta->irq_line, IRQ_DISABLE_UNLAZY);
718 
719 	/* Allow overwriting the flags from firmware */
720 	if (!irq_flags)
721 		irq_flags = sigma_delta->info->irq_flags;
722 
723 	ret = devm_request_irq(dev, sigma_delta->irq_line,
724 			       ad_sd_data_rdy_trig_poll,
725 			       irq_flags | IRQF_NO_AUTOEN,
726 			       indio_dev->name,
727 			       sigma_delta);
728 	if (ret)
729 		return ret;
730 
731 	iio_trigger_set_drvdata(sigma_delta->trig, sigma_delta);
732 
733 	ret = devm_iio_trigger_register(dev, sigma_delta->trig);
734 	if (ret)
735 		return ret;
736 
737 	/* select default trigger */
738 	indio_dev->trig = iio_trigger_get(sigma_delta->trig);
739 
740 	return 0;
741 }
742 
743 /**
744  * devm_ad_sd_setup_buffer_and_trigger() - Device-managed buffer & trigger setup
745  * @dev: Device object to which to bind the life-time of the resources attached
746  * @indio_dev: The IIO device
747  */
devm_ad_sd_setup_buffer_and_trigger(struct device * dev,struct iio_dev * indio_dev)748 int devm_ad_sd_setup_buffer_and_trigger(struct device *dev, struct iio_dev *indio_dev)
749 {
750 	struct ad_sigma_delta *sigma_delta = iio_device_get_drvdata(indio_dev);
751 	int ret;
752 
753 	sigma_delta->slots = devm_kcalloc(dev, sigma_delta->num_slots,
754 					  sizeof(*sigma_delta->slots), GFP_KERNEL);
755 	if (!sigma_delta->slots)
756 		return -ENOMEM;
757 
758 	ret = devm_iio_triggered_buffer_setup(dev, indio_dev,
759 					      &iio_pollfunc_store_time,
760 					      &ad_sd_trigger_handler,
761 					      &ad_sd_buffer_setup_ops);
762 	if (ret)
763 		return ret;
764 
765 	return devm_ad_sd_probe_trigger(dev, indio_dev);
766 }
767 EXPORT_SYMBOL_NS_GPL(devm_ad_sd_setup_buffer_and_trigger, "IIO_AD_SIGMA_DELTA");
768 
769 /**
770  * ad_sd_init() - Initializes a ad_sigma_delta struct
771  * @sigma_delta: The ad_sigma_delta device
772  * @indio_dev: The IIO device which the Sigma Delta device is used for
773  * @spi: The SPI device for the ad_sigma_delta device
774  * @info: Device specific callbacks and options
775  *
776  * This function needs to be called before any other operations are performed on
777  * the ad_sigma_delta struct.
778  */
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)779 int ad_sd_init(struct ad_sigma_delta *sigma_delta, struct iio_dev *indio_dev,
780 	struct spi_device *spi, const struct ad_sigma_delta_info *info)
781 {
782 	sigma_delta->spi = spi;
783 	sigma_delta->info = info;
784 
785 	/* If the field is unset in ad_sigma_delta_info, assume there can only be 1 slot. */
786 	if (!info->num_slots)
787 		sigma_delta->num_slots = 1;
788 	else
789 		sigma_delta->num_slots = info->num_slots;
790 
791 	if (sigma_delta->num_slots > 1) {
792 		if (!indio_dev->info->update_scan_mode) {
793 			dev_err(&spi->dev, "iio_dev lacks update_scan_mode().\n");
794 			return -EINVAL;
795 		}
796 
797 		if (!info->disable_all) {
798 			dev_err(&spi->dev, "ad_sigma_delta_info lacks disable_all().\n");
799 			return -EINVAL;
800 		}
801 	}
802 
803 	spin_lock_init(&sigma_delta->irq_lock);
804 
805 	if (info->irq_line)
806 		sigma_delta->irq_line = info->irq_line;
807 	else
808 		sigma_delta->irq_line = spi->irq;
809 
810 	sigma_delta->rdy_gpiod = devm_gpiod_get_optional(&spi->dev, "rdy", GPIOD_IN);
811 	if (IS_ERR(sigma_delta->rdy_gpiod))
812 		return dev_err_probe(&spi->dev, PTR_ERR(sigma_delta->rdy_gpiod),
813 				     "Failed to find rdy gpio\n");
814 
815 	if (sigma_delta->rdy_gpiod && !sigma_delta->irq_line) {
816 		sigma_delta->irq_line = gpiod_to_irq(sigma_delta->rdy_gpiod);
817 		if (sigma_delta->irq_line < 0)
818 			return sigma_delta->irq_line;
819 	}
820 
821 	iio_device_set_drvdata(indio_dev, sigma_delta);
822 
823 	return 0;
824 }
825 EXPORT_SYMBOL_NS_GPL(ad_sd_init, "IIO_AD_SIGMA_DELTA");
826 
827 MODULE_AUTHOR("Lars-Peter Clausen <[email protected]>");
828 MODULE_DESCRIPTION("Analog Devices Sigma-Delta ADCs");
829 MODULE_LICENSE("GPL v2");
830