1 /*
2  * AD7606 SPI ADC driver
3  *
4  * Copyright 2011 Analog Devices Inc.
5  *
6  * Licensed under the GPL-2.
7  */
8 
9 #include <linux/interrupt.h>
10 #include <linux/device.h>
11 #include <linux/kernel.h>
12 #include <linux/slab.h>
13 #include <linux/sysfs.h>
14 #include <linux/regulator/consumer.h>
15 #include <linux/err.h>
16 #include <linux/gpio.h>
17 #include <linux/delay.h>
18 #include <linux/sched.h>
19 #include <linux/module.h>
20 
21 #include <linux/iio/iio.h>
22 #include <linux/iio/sysfs.h>
23 #include <linux/iio/buffer.h>
24 
25 #include "ad7606.h"
26 
ad7606_reset(struct ad7606_state * st)27 int ad7606_reset(struct ad7606_state *st)
28 {
29 	if (gpio_is_valid(st->pdata->gpio_reset)) {
30 		gpio_set_value(st->pdata->gpio_reset, 1);
31 		ndelay(100); /* t_reset >= 100ns */
32 		gpio_set_value(st->pdata->gpio_reset, 0);
33 		return 0;
34 	}
35 
36 	return -ENODEV;
37 }
38 
ad7606_scan_direct(struct iio_dev * indio_dev,unsigned ch)39 static int ad7606_scan_direct(struct iio_dev *indio_dev, unsigned ch)
40 {
41 	struct ad7606_state *st = iio_priv(indio_dev);
42 	int ret;
43 
44 	st->done = false;
45 	gpio_set_value(st->pdata->gpio_convst, 1);
46 
47 	ret = wait_event_interruptible(st->wq_data_avail, st->done);
48 	if (ret)
49 		goto error_ret;
50 
51 	if (gpio_is_valid(st->pdata->gpio_frstdata)) {
52 		ret = st->bops->read_block(st->dev, 1, st->data);
53 		if (ret)
54 			goto error_ret;
55 		if (!gpio_get_value(st->pdata->gpio_frstdata)) {
56 			/* This should never happen */
57 			ad7606_reset(st);
58 			ret = -EIO;
59 			goto error_ret;
60 		}
61 		ret = st->bops->read_block(st->dev,
62 			st->chip_info->num_channels - 1, &st->data[1]);
63 		if (ret)
64 			goto error_ret;
65 	} else {
66 		ret = st->bops->read_block(st->dev,
67 			st->chip_info->num_channels, st->data);
68 		if (ret)
69 			goto error_ret;
70 	}
71 
72 	ret = st->data[ch];
73 
74 error_ret:
75 	gpio_set_value(st->pdata->gpio_convst, 0);
76 
77 	return ret;
78 }
79 
ad7606_read_raw(struct iio_dev * indio_dev,struct iio_chan_spec const * chan,int * val,int * val2,long m)80 static int ad7606_read_raw(struct iio_dev *indio_dev,
81 			   struct iio_chan_spec const *chan,
82 			   int *val,
83 			   int *val2,
84 			   long m)
85 {
86 	int ret;
87 	struct ad7606_state *st = iio_priv(indio_dev);
88 
89 	switch (m) {
90 	case IIO_CHAN_INFO_RAW:
91 		mutex_lock(&indio_dev->mlock);
92 		if (iio_buffer_enabled(indio_dev))
93 			ret = -EBUSY;
94 		else
95 			ret = ad7606_scan_direct(indio_dev, chan->address);
96 		mutex_unlock(&indio_dev->mlock);
97 
98 		if (ret < 0)
99 			return ret;
100 		*val = (short) ret;
101 		return IIO_VAL_INT;
102 	case IIO_CHAN_INFO_SCALE:
103 		*val = st->range * 2;
104 		*val2 = st->chip_info->channels[0].scan_type.realbits;
105 		return IIO_VAL_FRACTIONAL_LOG2;
106 	}
107 	return -EINVAL;
108 }
109 
ad7606_show_range(struct device * dev,struct device_attribute * attr,char * buf)110 static ssize_t ad7606_show_range(struct device *dev,
111 			struct device_attribute *attr, char *buf)
112 {
113 	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
114 	struct ad7606_state *st = iio_priv(indio_dev);
115 
116 	return sprintf(buf, "%u\n", st->range);
117 }
118 
ad7606_store_range(struct device * dev,struct device_attribute * attr,const char * buf,size_t count)119 static ssize_t ad7606_store_range(struct device *dev,
120 		struct device_attribute *attr, const char *buf, size_t count)
121 {
122 	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
123 	struct ad7606_state *st = iio_priv(indio_dev);
124 	unsigned long lval;
125 	int ret;
126 
127 	ret = kstrtoul(buf, 10, &lval);
128 	if (ret)
129 		return ret;
130 
131 	if (!(lval == 5000 || lval == 10000)) {
132 		dev_err(dev, "range is not supported\n");
133 		return -EINVAL;
134 	}
135 	mutex_lock(&indio_dev->mlock);
136 	gpio_set_value(st->pdata->gpio_range, lval == 10000);
137 	st->range = lval;
138 	mutex_unlock(&indio_dev->mlock);
139 
140 	return count;
141 }
142 
143 static IIO_DEVICE_ATTR(in_voltage_range, S_IRUGO | S_IWUSR,
144 		       ad7606_show_range, ad7606_store_range, 0);
145 static IIO_CONST_ATTR(in_voltage_range_available, "5000 10000");
146 
ad7606_show_oversampling_ratio(struct device * dev,struct device_attribute * attr,char * buf)147 static ssize_t ad7606_show_oversampling_ratio(struct device *dev,
148 			struct device_attribute *attr, char *buf)
149 {
150 	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
151 	struct ad7606_state *st = iio_priv(indio_dev);
152 
153 	return sprintf(buf, "%u\n", st->oversampling);
154 }
155 
ad7606_oversampling_get_index(unsigned val)156 static int ad7606_oversampling_get_index(unsigned val)
157 {
158 	unsigned char supported[] = {0, 2, 4, 8, 16, 32, 64};
159 	int i;
160 
161 	for (i = 0; i < ARRAY_SIZE(supported); i++)
162 		if (val == supported[i])
163 			return i;
164 
165 	return -EINVAL;
166 }
167 
ad7606_store_oversampling_ratio(struct device * dev,struct device_attribute * attr,const char * buf,size_t count)168 static ssize_t ad7606_store_oversampling_ratio(struct device *dev,
169 		struct device_attribute *attr, const char *buf, size_t count)
170 {
171 	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
172 	struct ad7606_state *st = iio_priv(indio_dev);
173 	unsigned long lval;
174 	int ret;
175 
176 	ret = kstrtoul(buf, 10, &lval);
177 	if (ret)
178 		return ret;
179 
180 	ret = ad7606_oversampling_get_index(lval);
181 	if (ret < 0) {
182 		dev_err(dev, "oversampling %lu is not supported\n", lval);
183 		return ret;
184 	}
185 
186 	mutex_lock(&indio_dev->mlock);
187 	gpio_set_value(st->pdata->gpio_os0, (ret >> 0) & 1);
188 	gpio_set_value(st->pdata->gpio_os1, (ret >> 1) & 1);
189 	gpio_set_value(st->pdata->gpio_os1, (ret >> 2) & 1);
190 	st->oversampling = lval;
191 	mutex_unlock(&indio_dev->mlock);
192 
193 	return count;
194 }
195 
196 static IIO_DEVICE_ATTR(oversampling_ratio, S_IRUGO | S_IWUSR,
197 		       ad7606_show_oversampling_ratio,
198 		       ad7606_store_oversampling_ratio, 0);
199 static IIO_CONST_ATTR(oversampling_ratio_available, "0 2 4 8 16 32 64");
200 
201 static struct attribute *ad7606_attributes_os_and_range[] = {
202 	&iio_dev_attr_in_voltage_range.dev_attr.attr,
203 	&iio_const_attr_in_voltage_range_available.dev_attr.attr,
204 	&iio_dev_attr_oversampling_ratio.dev_attr.attr,
205 	&iio_const_attr_oversampling_ratio_available.dev_attr.attr,
206 	NULL,
207 };
208 
209 static const struct attribute_group ad7606_attribute_group_os_and_range = {
210 	.attrs = ad7606_attributes_os_and_range,
211 };
212 
213 static struct attribute *ad7606_attributes_os[] = {
214 	&iio_dev_attr_oversampling_ratio.dev_attr.attr,
215 	&iio_const_attr_oversampling_ratio_available.dev_attr.attr,
216 	NULL,
217 };
218 
219 static const struct attribute_group ad7606_attribute_group_os = {
220 	.attrs = ad7606_attributes_os,
221 };
222 
223 static struct attribute *ad7606_attributes_range[] = {
224 	&iio_dev_attr_in_voltage_range.dev_attr.attr,
225 	&iio_const_attr_in_voltage_range_available.dev_attr.attr,
226 	NULL,
227 };
228 
229 static const struct attribute_group ad7606_attribute_group_range = {
230 	.attrs = ad7606_attributes_range,
231 };
232 
233 #define AD7606_CHANNEL(num)					\
234 	{							\
235 		.type = IIO_VOLTAGE,				\
236 		.indexed = 1,					\
237 		.channel = num,					\
238 		.address = num,					\
239 		.info_mask_separate = BIT(IIO_CHAN_INFO_RAW),	\
240 		.info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE),\
241 		.scan_index = num,				\
242 		.scan_type = {					\
243 			.sign = 's',				\
244 			.realbits = 16,				\
245 			.storagebits = 16,			\
246 			.endianness = IIO_CPU,			\
247 		},						\
248 	}
249 
250 static const struct iio_chan_spec ad7606_8_channels[] = {
251 	AD7606_CHANNEL(0),
252 	AD7606_CHANNEL(1),
253 	AD7606_CHANNEL(2),
254 	AD7606_CHANNEL(3),
255 	AD7606_CHANNEL(4),
256 	AD7606_CHANNEL(5),
257 	AD7606_CHANNEL(6),
258 	AD7606_CHANNEL(7),
259 	IIO_CHAN_SOFT_TIMESTAMP(8),
260 };
261 
262 static const struct iio_chan_spec ad7606_6_channels[] = {
263 	AD7606_CHANNEL(0),
264 	AD7606_CHANNEL(1),
265 	AD7606_CHANNEL(2),
266 	AD7606_CHANNEL(3),
267 	AD7606_CHANNEL(4),
268 	AD7606_CHANNEL(5),
269 	IIO_CHAN_SOFT_TIMESTAMP(6),
270 };
271 
272 static const struct iio_chan_spec ad7606_4_channels[] = {
273 	AD7606_CHANNEL(0),
274 	AD7606_CHANNEL(1),
275 	AD7606_CHANNEL(2),
276 	AD7606_CHANNEL(3),
277 	IIO_CHAN_SOFT_TIMESTAMP(4),
278 };
279 
280 static const struct ad7606_chip_info ad7606_chip_info_tbl[] = {
281 	/*
282 	 * More devices added in future
283 	 */
284 	[ID_AD7606_8] = {
285 		.name = "ad7606",
286 		.int_vref_mv = 2500,
287 		.channels = ad7606_8_channels,
288 		.num_channels = 8,
289 	},
290 	[ID_AD7606_6] = {
291 		.name = "ad7606-6",
292 		.int_vref_mv = 2500,
293 		.channels = ad7606_6_channels,
294 		.num_channels = 6,
295 	},
296 	[ID_AD7606_4] = {
297 		.name = "ad7606-4",
298 		.int_vref_mv = 2500,
299 		.channels = ad7606_4_channels,
300 		.num_channels = 4,
301 	},
302 };
303 
ad7606_request_gpios(struct ad7606_state * st)304 static int ad7606_request_gpios(struct ad7606_state *st)
305 {
306 	struct gpio gpio_array[3] = {
307 		[0] = {
308 			.gpio =  st->pdata->gpio_os0,
309 			.flags = GPIOF_DIR_OUT | ((st->oversampling & 1) ?
310 				 GPIOF_INIT_HIGH : GPIOF_INIT_LOW),
311 			.label = "AD7606_OS0",
312 		},
313 		[1] = {
314 			.gpio =  st->pdata->gpio_os1,
315 			.flags = GPIOF_DIR_OUT | ((st->oversampling & 2) ?
316 				 GPIOF_INIT_HIGH : GPIOF_INIT_LOW),
317 			.label = "AD7606_OS1",
318 		},
319 		[2] = {
320 			.gpio =  st->pdata->gpio_os2,
321 			.flags = GPIOF_DIR_OUT | ((st->oversampling & 4) ?
322 				 GPIOF_INIT_HIGH : GPIOF_INIT_LOW),
323 			.label = "AD7606_OS2",
324 		},
325 	};
326 	int ret;
327 
328 	if (gpio_is_valid(st->pdata->gpio_convst)) {
329 		ret = gpio_request_one(st->pdata->gpio_convst,
330 				       GPIOF_OUT_INIT_LOW,
331 				       "AD7606_CONVST");
332 		if (ret) {
333 			dev_err(st->dev, "failed to request GPIO CONVST\n");
334 			goto error_ret;
335 		}
336 	} else {
337 		ret = -EIO;
338 		goto error_ret;
339 	}
340 
341 	if (gpio_is_valid(st->pdata->gpio_os0) &&
342 	    gpio_is_valid(st->pdata->gpio_os1) &&
343 	    gpio_is_valid(st->pdata->gpio_os2)) {
344 		ret = gpio_request_array(gpio_array, ARRAY_SIZE(gpio_array));
345 		if (ret < 0)
346 			goto error_free_convst;
347 	}
348 
349 	if (gpio_is_valid(st->pdata->gpio_reset)) {
350 		ret = gpio_request_one(st->pdata->gpio_reset,
351 				       GPIOF_OUT_INIT_LOW,
352 				       "AD7606_RESET");
353 		if (ret < 0)
354 			goto error_free_os;
355 	}
356 
357 	if (gpio_is_valid(st->pdata->gpio_range)) {
358 		ret = gpio_request_one(st->pdata->gpio_range, GPIOF_DIR_OUT |
359 				       ((st->range == 10000) ? GPIOF_INIT_HIGH :
360 					GPIOF_INIT_LOW), "AD7606_RANGE");
361 		if (ret < 0)
362 			goto error_free_reset;
363 	}
364 	if (gpio_is_valid(st->pdata->gpio_stby)) {
365 		ret = gpio_request_one(st->pdata->gpio_stby,
366 				       GPIOF_OUT_INIT_HIGH,
367 				       "AD7606_STBY");
368 		if (ret < 0)
369 			goto error_free_range;
370 	}
371 
372 	if (gpio_is_valid(st->pdata->gpio_frstdata)) {
373 		ret = gpio_request_one(st->pdata->gpio_frstdata, GPIOF_IN,
374 				       "AD7606_FRSTDATA");
375 		if (ret < 0)
376 			goto error_free_stby;
377 	}
378 
379 	return 0;
380 
381 error_free_stby:
382 	if (gpio_is_valid(st->pdata->gpio_stby))
383 		gpio_free(st->pdata->gpio_stby);
384 error_free_range:
385 	if (gpio_is_valid(st->pdata->gpio_range))
386 		gpio_free(st->pdata->gpio_range);
387 error_free_reset:
388 	if (gpio_is_valid(st->pdata->gpio_reset))
389 		gpio_free(st->pdata->gpio_reset);
390 error_free_os:
391 	if (gpio_is_valid(st->pdata->gpio_os0) &&
392 	    gpio_is_valid(st->pdata->gpio_os1) &&
393 	    gpio_is_valid(st->pdata->gpio_os2))
394 		gpio_free_array(gpio_array, ARRAY_SIZE(gpio_array));
395 error_free_convst:
396 	gpio_free(st->pdata->gpio_convst);
397 error_ret:
398 	return ret;
399 }
400 
ad7606_free_gpios(struct ad7606_state * st)401 static void ad7606_free_gpios(struct ad7606_state *st)
402 {
403 	if (gpio_is_valid(st->pdata->gpio_frstdata))
404 		gpio_free(st->pdata->gpio_frstdata);
405 	if (gpio_is_valid(st->pdata->gpio_stby))
406 		gpio_free(st->pdata->gpio_stby);
407 	if (gpio_is_valid(st->pdata->gpio_range))
408 		gpio_free(st->pdata->gpio_range);
409 	if (gpio_is_valid(st->pdata->gpio_reset))
410 		gpio_free(st->pdata->gpio_reset);
411 	if (gpio_is_valid(st->pdata->gpio_os0) &&
412 	    gpio_is_valid(st->pdata->gpio_os1) &&
413 	    gpio_is_valid(st->pdata->gpio_os2)) {
414 		gpio_free(st->pdata->gpio_os2);
415 		gpio_free(st->pdata->gpio_os1);
416 		gpio_free(st->pdata->gpio_os0);
417 	}
418 	gpio_free(st->pdata->gpio_convst);
419 }
420 
421 /**
422  *  Interrupt handler
423  */
ad7606_interrupt(int irq,void * dev_id)424 static irqreturn_t ad7606_interrupt(int irq, void *dev_id)
425 {
426 	struct iio_dev *indio_dev = dev_id;
427 	struct ad7606_state *st = iio_priv(indio_dev);
428 
429 	if (iio_buffer_enabled(indio_dev)) {
430 		schedule_work(&st->poll_work);
431 	} else {
432 		st->done = true;
433 		wake_up_interruptible(&st->wq_data_avail);
434 	}
435 
436 	return IRQ_HANDLED;
437 };
438 
439 static const struct iio_info ad7606_info_no_os_or_range = {
440 	.driver_module = THIS_MODULE,
441 	.read_raw = &ad7606_read_raw,
442 };
443 
444 static const struct iio_info ad7606_info_os_and_range = {
445 	.driver_module = THIS_MODULE,
446 	.read_raw = &ad7606_read_raw,
447 	.attrs = &ad7606_attribute_group_os_and_range,
448 };
449 
450 static const struct iio_info ad7606_info_os = {
451 	.driver_module = THIS_MODULE,
452 	.read_raw = &ad7606_read_raw,
453 	.attrs = &ad7606_attribute_group_os,
454 };
455 
456 static const struct iio_info ad7606_info_range = {
457 	.driver_module = THIS_MODULE,
458 	.read_raw = &ad7606_read_raw,
459 	.attrs = &ad7606_attribute_group_range,
460 };
461 
ad7606_probe(struct device * dev,int irq,void __iomem * base_address,unsigned id,const struct ad7606_bus_ops * bops)462 struct iio_dev *ad7606_probe(struct device *dev, int irq,
463 			      void __iomem *base_address,
464 			      unsigned id,
465 			      const struct ad7606_bus_ops *bops)
466 {
467 	struct ad7606_platform_data *pdata = dev->platform_data;
468 	struct ad7606_state *st;
469 	int ret;
470 	struct iio_dev *indio_dev;
471 
472 	indio_dev = devm_iio_device_alloc(dev, sizeof(*st));
473 	if (!indio_dev)
474 		return ERR_PTR(-ENOMEM);
475 
476 	st = iio_priv(indio_dev);
477 
478 	st->dev = dev;
479 	st->bops = bops;
480 	st->base_address = base_address;
481 	st->range = pdata->default_range == 10000 ? 10000 : 5000;
482 
483 	ret = ad7606_oversampling_get_index(pdata->default_os);
484 	if (ret < 0) {
485 		dev_warn(dev, "oversampling %d is not supported\n",
486 			 pdata->default_os);
487 		st->oversampling = 0;
488 	} else {
489 		st->oversampling = pdata->default_os;
490 	}
491 
492 	st->reg = devm_regulator_get(dev, "vcc");
493 	if (!IS_ERR(st->reg)) {
494 		ret = regulator_enable(st->reg);
495 		if (ret)
496 			return ERR_PTR(ret);
497 	}
498 
499 	st->pdata = pdata;
500 	st->chip_info = &ad7606_chip_info_tbl[id];
501 
502 	indio_dev->dev.parent = dev;
503 	if (gpio_is_valid(st->pdata->gpio_os0) &&
504 	    gpio_is_valid(st->pdata->gpio_os1) &&
505 	    gpio_is_valid(st->pdata->gpio_os2)) {
506 		if (gpio_is_valid(st->pdata->gpio_range))
507 			indio_dev->info = &ad7606_info_os_and_range;
508 		else
509 			indio_dev->info = &ad7606_info_os;
510 	} else {
511 		if (gpio_is_valid(st->pdata->gpio_range))
512 			indio_dev->info = &ad7606_info_range;
513 		else
514 			indio_dev->info = &ad7606_info_no_os_or_range;
515 	}
516 	indio_dev->modes = INDIO_DIRECT_MODE;
517 	indio_dev->name = st->chip_info->name;
518 	indio_dev->channels = st->chip_info->channels;
519 	indio_dev->num_channels = st->chip_info->num_channels;
520 
521 	init_waitqueue_head(&st->wq_data_avail);
522 
523 	ret = ad7606_request_gpios(st);
524 	if (ret)
525 		goto error_disable_reg;
526 
527 	ret = ad7606_reset(st);
528 	if (ret)
529 		dev_warn(st->dev, "failed to RESET: no RESET GPIO specified\n");
530 
531 	ret = request_irq(irq, ad7606_interrupt,
532 		IRQF_TRIGGER_FALLING, st->chip_info->name, indio_dev);
533 	if (ret)
534 		goto error_free_gpios;
535 
536 	ret = ad7606_register_ring_funcs_and_init(indio_dev);
537 	if (ret)
538 		goto error_free_irq;
539 
540 	ret = iio_device_register(indio_dev);
541 	if (ret)
542 		goto error_unregister_ring;
543 
544 	return indio_dev;
545 error_unregister_ring:
546 	ad7606_ring_cleanup(indio_dev);
547 
548 error_free_irq:
549 	free_irq(irq, indio_dev);
550 
551 error_free_gpios:
552 	ad7606_free_gpios(st);
553 
554 error_disable_reg:
555 	if (!IS_ERR(st->reg))
556 		regulator_disable(st->reg);
557 	return ERR_PTR(ret);
558 }
559 
ad7606_remove(struct iio_dev * indio_dev,int irq)560 int ad7606_remove(struct iio_dev *indio_dev, int irq)
561 {
562 	struct ad7606_state *st = iio_priv(indio_dev);
563 
564 	iio_device_unregister(indio_dev);
565 	ad7606_ring_cleanup(indio_dev);
566 
567 	free_irq(irq, indio_dev);
568 	if (!IS_ERR(st->reg))
569 		regulator_disable(st->reg);
570 
571 	ad7606_free_gpios(st);
572 
573 	return 0;
574 }
575 
ad7606_suspend(struct iio_dev * indio_dev)576 void ad7606_suspend(struct iio_dev *indio_dev)
577 {
578 	struct ad7606_state *st = iio_priv(indio_dev);
579 
580 	if (gpio_is_valid(st->pdata->gpio_stby)) {
581 		if (gpio_is_valid(st->pdata->gpio_range))
582 			gpio_set_value(st->pdata->gpio_range, 1);
583 		gpio_set_value(st->pdata->gpio_stby, 0);
584 	}
585 }
586 
ad7606_resume(struct iio_dev * indio_dev)587 void ad7606_resume(struct iio_dev *indio_dev)
588 {
589 	struct ad7606_state *st = iio_priv(indio_dev);
590 
591 	if (gpio_is_valid(st->pdata->gpio_stby)) {
592 		if (gpio_is_valid(st->pdata->gpio_range))
593 			gpio_set_value(st->pdata->gpio_range,
594 					st->range == 10000);
595 
596 		gpio_set_value(st->pdata->gpio_stby, 1);
597 		ad7606_reset(st);
598 	}
599 }
600 
601 MODULE_AUTHOR("Michael Hennerich <hennerich@blackfin.uclinux.org>");
602 MODULE_DESCRIPTION("Analog Devices AD7606 ADC");
603 MODULE_LICENSE("GPL v2");
604