xref: /linux/drivers/iio/industrialio-core.c (revision 2ba9268dd603d23e17643437b2246acb6844953b)
1 /* The industrial I/O core
2  *
3  * Copyright (c) 2008 Jonathan Cameron
4  *
5  * This program is free software; you can redistribute it and/or modify it
6  * under the terms of the GNU General Public License version 2 as published by
7  * the Free Software Foundation.
8  *
9  * Based on elements of hwmon and input subsystems.
10  */
11 
12 #define pr_fmt(fmt) "iio-core: " fmt
13 
14 #include <linux/kernel.h>
15 #include <linux/module.h>
16 #include <linux/idr.h>
17 #include <linux/kdev_t.h>
18 #include <linux/err.h>
19 #include <linux/device.h>
20 #include <linux/fs.h>
21 #include <linux/poll.h>
22 #include <linux/sched.h>
23 #include <linux/wait.h>
24 #include <linux/cdev.h>
25 #include <linux/slab.h>
26 #include <linux/anon_inodes.h>
27 #include <linux/debugfs.h>
28 #include <linux/iio/iio.h>
29 #include "iio_core.h"
30 #include "iio_core_trigger.h"
31 #include <linux/iio/sysfs.h>
32 #include <linux/iio/events.h>
33 #include <linux/iio/buffer.h>
34 
35 /* IDA to assign each registered device a unique id */
36 static DEFINE_IDA(iio_ida);
37 
38 static dev_t iio_devt;
39 
40 #define IIO_DEV_MAX 256
41 struct bus_type iio_bus_type = {
42 	.name = "iio",
43 };
44 EXPORT_SYMBOL(iio_bus_type);
45 
46 static struct dentry *iio_debugfs_dentry;
47 
48 static const char * const iio_direction[] = {
49 	[0] = "in",
50 	[1] = "out",
51 };
52 
53 static const char * const iio_chan_type_name_spec[] = {
54 	[IIO_VOLTAGE] = "voltage",
55 	[IIO_CURRENT] = "current",
56 	[IIO_POWER] = "power",
57 	[IIO_ACCEL] = "accel",
58 	[IIO_ANGL_VEL] = "anglvel",
59 	[IIO_MAGN] = "magn",
60 	[IIO_LIGHT] = "illuminance",
61 	[IIO_INTENSITY] = "intensity",
62 	[IIO_PROXIMITY] = "proximity",
63 	[IIO_TEMP] = "temp",
64 	[IIO_INCLI] = "incli",
65 	[IIO_ROT] = "rot",
66 	[IIO_ANGL] = "angl",
67 	[IIO_TIMESTAMP] = "timestamp",
68 	[IIO_CAPACITANCE] = "capacitance",
69 	[IIO_ALTVOLTAGE] = "altvoltage",
70 	[IIO_CCT] = "cct",
71 	[IIO_PRESSURE] = "pressure",
72 	[IIO_HUMIDITYRELATIVE] = "humidityrelative",
73 	[IIO_ACTIVITY] = "activity",
74 	[IIO_STEPS] = "steps",
75 	[IIO_ENERGY] = "energy",
76 	[IIO_DISTANCE] = "distance",
77 	[IIO_VELOCITY] = "velocity",
78 };
79 
80 static const char * const iio_modifier_names[] = {
81 	[IIO_MOD_X] = "x",
82 	[IIO_MOD_Y] = "y",
83 	[IIO_MOD_Z] = "z",
84 	[IIO_MOD_ROOT_SUM_SQUARED_X_Y] = "sqrt(x^2+y^2)",
85 	[IIO_MOD_SUM_SQUARED_X_Y_Z] = "x^2+y^2+z^2",
86 	[IIO_MOD_LIGHT_BOTH] = "both",
87 	[IIO_MOD_LIGHT_IR] = "ir",
88 	[IIO_MOD_LIGHT_CLEAR] = "clear",
89 	[IIO_MOD_LIGHT_RED] = "red",
90 	[IIO_MOD_LIGHT_GREEN] = "green",
91 	[IIO_MOD_LIGHT_BLUE] = "blue",
92 	[IIO_MOD_QUATERNION] = "quaternion",
93 	[IIO_MOD_TEMP_AMBIENT] = "ambient",
94 	[IIO_MOD_TEMP_OBJECT] = "object",
95 	[IIO_MOD_NORTH_MAGN] = "from_north_magnetic",
96 	[IIO_MOD_NORTH_TRUE] = "from_north_true",
97 	[IIO_MOD_NORTH_MAGN_TILT_COMP] = "from_north_magnetic_tilt_comp",
98 	[IIO_MOD_NORTH_TRUE_TILT_COMP] = "from_north_true_tilt_comp",
99 	[IIO_MOD_RUNNING] = "running",
100 	[IIO_MOD_JOGGING] = "jogging",
101 	[IIO_MOD_WALKING] = "walking",
102 	[IIO_MOD_STILL] = "still",
103 	[IIO_MOD_ROOT_SUM_SQUARED_X_Y_Z] = "sqrt(x^2+y^2+z^2)",
104 };
105 
106 /* relies on pairs of these shared then separate */
107 static const char * const iio_chan_info_postfix[] = {
108 	[IIO_CHAN_INFO_RAW] = "raw",
109 	[IIO_CHAN_INFO_PROCESSED] = "input",
110 	[IIO_CHAN_INFO_SCALE] = "scale",
111 	[IIO_CHAN_INFO_OFFSET] = "offset",
112 	[IIO_CHAN_INFO_CALIBSCALE] = "calibscale",
113 	[IIO_CHAN_INFO_CALIBBIAS] = "calibbias",
114 	[IIO_CHAN_INFO_PEAK] = "peak_raw",
115 	[IIO_CHAN_INFO_PEAK_SCALE] = "peak_scale",
116 	[IIO_CHAN_INFO_QUADRATURE_CORRECTION_RAW] = "quadrature_correction_raw",
117 	[IIO_CHAN_INFO_AVERAGE_RAW] = "mean_raw",
118 	[IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY]
119 	= "filter_low_pass_3db_frequency",
120 	[IIO_CHAN_INFO_SAMP_FREQ] = "sampling_frequency",
121 	[IIO_CHAN_INFO_FREQUENCY] = "frequency",
122 	[IIO_CHAN_INFO_PHASE] = "phase",
123 	[IIO_CHAN_INFO_HARDWAREGAIN] = "hardwaregain",
124 	[IIO_CHAN_INFO_HYSTERESIS] = "hysteresis",
125 	[IIO_CHAN_INFO_INT_TIME] = "integration_time",
126 	[IIO_CHAN_INFO_ENABLE] = "en",
127 	[IIO_CHAN_INFO_CALIBHEIGHT] = "calibheight",
128 	[IIO_CHAN_INFO_CALIBWEIGHT] = "calibweight",
129 	[IIO_CHAN_INFO_DEBOUNCE_COUNT] = "debounce_count",
130 	[IIO_CHAN_INFO_DEBOUNCE_TIME] = "debounce_time",
131 };
132 
133 /**
134  * iio_find_channel_from_si() - get channel from its scan index
135  * @indio_dev:		device
136  * @si:			scan index to match
137  */
138 const struct iio_chan_spec
139 *iio_find_channel_from_si(struct iio_dev *indio_dev, int si)
140 {
141 	int i;
142 
143 	for (i = 0; i < indio_dev->num_channels; i++)
144 		if (indio_dev->channels[i].scan_index == si)
145 			return &indio_dev->channels[i];
146 	return NULL;
147 }
148 
149 /* This turns up an awful lot */
150 ssize_t iio_read_const_attr(struct device *dev,
151 			    struct device_attribute *attr,
152 			    char *buf)
153 {
154 	return sprintf(buf, "%s\n", to_iio_const_attr(attr)->string);
155 }
156 EXPORT_SYMBOL(iio_read_const_attr);
157 
158 static int __init iio_init(void)
159 {
160 	int ret;
161 
162 	/* Register sysfs bus */
163 	ret  = bus_register(&iio_bus_type);
164 	if (ret < 0) {
165 		pr_err("could not register bus type\n");
166 		goto error_nothing;
167 	}
168 
169 	ret = alloc_chrdev_region(&iio_devt, 0, IIO_DEV_MAX, "iio");
170 	if (ret < 0) {
171 		pr_err("failed to allocate char dev region\n");
172 		goto error_unregister_bus_type;
173 	}
174 
175 	iio_debugfs_dentry = debugfs_create_dir("iio", NULL);
176 
177 	return 0;
178 
179 error_unregister_bus_type:
180 	bus_unregister(&iio_bus_type);
181 error_nothing:
182 	return ret;
183 }
184 
185 static void __exit iio_exit(void)
186 {
187 	if (iio_devt)
188 		unregister_chrdev_region(iio_devt, IIO_DEV_MAX);
189 	bus_unregister(&iio_bus_type);
190 	debugfs_remove(iio_debugfs_dentry);
191 }
192 
193 #if defined(CONFIG_DEBUG_FS)
194 static ssize_t iio_debugfs_read_reg(struct file *file, char __user *userbuf,
195 			      size_t count, loff_t *ppos)
196 {
197 	struct iio_dev *indio_dev = file->private_data;
198 	char buf[20];
199 	unsigned val = 0;
200 	ssize_t len;
201 	int ret;
202 
203 	ret = indio_dev->info->debugfs_reg_access(indio_dev,
204 						  indio_dev->cached_reg_addr,
205 						  0, &val);
206 	if (ret)
207 		dev_err(indio_dev->dev.parent, "%s: read failed\n", __func__);
208 
209 	len = snprintf(buf, sizeof(buf), "0x%X\n", val);
210 
211 	return simple_read_from_buffer(userbuf, count, ppos, buf, len);
212 }
213 
214 static ssize_t iio_debugfs_write_reg(struct file *file,
215 		     const char __user *userbuf, size_t count, loff_t *ppos)
216 {
217 	struct iio_dev *indio_dev = file->private_data;
218 	unsigned reg, val;
219 	char buf[80];
220 	int ret;
221 
222 	count = min_t(size_t, count, (sizeof(buf)-1));
223 	if (copy_from_user(buf, userbuf, count))
224 		return -EFAULT;
225 
226 	buf[count] = 0;
227 
228 	ret = sscanf(buf, "%i %i", &reg, &val);
229 
230 	switch (ret) {
231 	case 1:
232 		indio_dev->cached_reg_addr = reg;
233 		break;
234 	case 2:
235 		indio_dev->cached_reg_addr = reg;
236 		ret = indio_dev->info->debugfs_reg_access(indio_dev, reg,
237 							  val, NULL);
238 		if (ret) {
239 			dev_err(indio_dev->dev.parent, "%s: write failed\n",
240 				__func__);
241 			return ret;
242 		}
243 		break;
244 	default:
245 		return -EINVAL;
246 	}
247 
248 	return count;
249 }
250 
251 static const struct file_operations iio_debugfs_reg_fops = {
252 	.open = simple_open,
253 	.read = iio_debugfs_read_reg,
254 	.write = iio_debugfs_write_reg,
255 };
256 
257 static void iio_device_unregister_debugfs(struct iio_dev *indio_dev)
258 {
259 	debugfs_remove_recursive(indio_dev->debugfs_dentry);
260 }
261 
262 static int iio_device_register_debugfs(struct iio_dev *indio_dev)
263 {
264 	struct dentry *d;
265 
266 	if (indio_dev->info->debugfs_reg_access == NULL)
267 		return 0;
268 
269 	if (!iio_debugfs_dentry)
270 		return 0;
271 
272 	indio_dev->debugfs_dentry =
273 		debugfs_create_dir(dev_name(&indio_dev->dev),
274 				   iio_debugfs_dentry);
275 	if (indio_dev->debugfs_dentry == NULL) {
276 		dev_warn(indio_dev->dev.parent,
277 			 "Failed to create debugfs directory\n");
278 		return -EFAULT;
279 	}
280 
281 	d = debugfs_create_file("direct_reg_access", 0644,
282 				indio_dev->debugfs_dentry,
283 				indio_dev, &iio_debugfs_reg_fops);
284 	if (!d) {
285 		iio_device_unregister_debugfs(indio_dev);
286 		return -ENOMEM;
287 	}
288 
289 	return 0;
290 }
291 #else
292 static int iio_device_register_debugfs(struct iio_dev *indio_dev)
293 {
294 	return 0;
295 }
296 
297 static void iio_device_unregister_debugfs(struct iio_dev *indio_dev)
298 {
299 }
300 #endif /* CONFIG_DEBUG_FS */
301 
302 static ssize_t iio_read_channel_ext_info(struct device *dev,
303 				     struct device_attribute *attr,
304 				     char *buf)
305 {
306 	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
307 	struct iio_dev_attr *this_attr = to_iio_dev_attr(attr);
308 	const struct iio_chan_spec_ext_info *ext_info;
309 
310 	ext_info = &this_attr->c->ext_info[this_attr->address];
311 
312 	return ext_info->read(indio_dev, ext_info->private, this_attr->c, buf);
313 }
314 
315 static ssize_t iio_write_channel_ext_info(struct device *dev,
316 				     struct device_attribute *attr,
317 				     const char *buf,
318 					 size_t len)
319 {
320 	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
321 	struct iio_dev_attr *this_attr = to_iio_dev_attr(attr);
322 	const struct iio_chan_spec_ext_info *ext_info;
323 
324 	ext_info = &this_attr->c->ext_info[this_attr->address];
325 
326 	return ext_info->write(indio_dev, ext_info->private,
327 			       this_attr->c, buf, len);
328 }
329 
330 ssize_t iio_enum_available_read(struct iio_dev *indio_dev,
331 	uintptr_t priv, const struct iio_chan_spec *chan, char *buf)
332 {
333 	const struct iio_enum *e = (const struct iio_enum *)priv;
334 	unsigned int i;
335 	size_t len = 0;
336 
337 	if (!e->num_items)
338 		return 0;
339 
340 	for (i = 0; i < e->num_items; ++i)
341 		len += scnprintf(buf + len, PAGE_SIZE - len, "%s ", e->items[i]);
342 
343 	/* replace last space with a newline */
344 	buf[len - 1] = '\n';
345 
346 	return len;
347 }
348 EXPORT_SYMBOL_GPL(iio_enum_available_read);
349 
350 ssize_t iio_enum_read(struct iio_dev *indio_dev,
351 	uintptr_t priv, const struct iio_chan_spec *chan, char *buf)
352 {
353 	const struct iio_enum *e = (const struct iio_enum *)priv;
354 	int i;
355 
356 	if (!e->get)
357 		return -EINVAL;
358 
359 	i = e->get(indio_dev, chan);
360 	if (i < 0)
361 		return i;
362 	else if (i >= e->num_items)
363 		return -EINVAL;
364 
365 	return snprintf(buf, PAGE_SIZE, "%s\n", e->items[i]);
366 }
367 EXPORT_SYMBOL_GPL(iio_enum_read);
368 
369 ssize_t iio_enum_write(struct iio_dev *indio_dev,
370 	uintptr_t priv, const struct iio_chan_spec *chan, const char *buf,
371 	size_t len)
372 {
373 	const struct iio_enum *e = (const struct iio_enum *)priv;
374 	unsigned int i;
375 	int ret;
376 
377 	if (!e->set)
378 		return -EINVAL;
379 
380 	for (i = 0; i < e->num_items; i++) {
381 		if (sysfs_streq(buf, e->items[i]))
382 			break;
383 	}
384 
385 	if (i == e->num_items)
386 		return -EINVAL;
387 
388 	ret = e->set(indio_dev, chan, i);
389 	return ret ? ret : len;
390 }
391 EXPORT_SYMBOL_GPL(iio_enum_write);
392 
393 /**
394  * iio_format_value() - Formats a IIO value into its string representation
395  * @buf: The buffer to which the formated value gets written
396  * @type: One of the IIO_VAL_... constants. This decides how the val and val2
397  *        parameters are formatted.
398  * @vals: pointer to the values, exact meaning depends on the type parameter.
399  */
400 ssize_t iio_format_value(char *buf, unsigned int type, int size, int *vals)
401 {
402 	unsigned long long tmp;
403 	bool scale_db = false;
404 
405 	switch (type) {
406 	case IIO_VAL_INT:
407 		return sprintf(buf, "%d\n", vals[0]);
408 	case IIO_VAL_INT_PLUS_MICRO_DB:
409 		scale_db = true;
410 	case IIO_VAL_INT_PLUS_MICRO:
411 		if (vals[1] < 0)
412 			return sprintf(buf, "-%ld.%06u%s\n", abs(vals[0]),
413 					-vals[1],
414 				scale_db ? " dB" : "");
415 		else
416 			return sprintf(buf, "%d.%06u%s\n", vals[0], vals[1],
417 				scale_db ? " dB" : "");
418 	case IIO_VAL_INT_PLUS_NANO:
419 		if (vals[1] < 0)
420 			return sprintf(buf, "-%ld.%09u\n", abs(vals[0]),
421 					-vals[1]);
422 		else
423 			return sprintf(buf, "%d.%09u\n", vals[0], vals[1]);
424 	case IIO_VAL_FRACTIONAL:
425 		tmp = div_s64((s64)vals[0] * 1000000000LL, vals[1]);
426 		vals[1] = do_div(tmp, 1000000000LL);
427 		vals[0] = tmp;
428 		return sprintf(buf, "%d.%09u\n", vals[0], vals[1]);
429 	case IIO_VAL_FRACTIONAL_LOG2:
430 		tmp = (s64)vals[0] * 1000000000LL >> vals[1];
431 		vals[1] = do_div(tmp, 1000000000LL);
432 		vals[0] = tmp;
433 		return sprintf(buf, "%d.%09u\n", vals[0], vals[1]);
434 	case IIO_VAL_INT_MULTIPLE:
435 	{
436 		int i;
437 		int len = 0;
438 
439 		for (i = 0; i < size; ++i)
440 			len += snprintf(&buf[len], PAGE_SIZE - len, "%d ",
441 								vals[i]);
442 		len += snprintf(&buf[len], PAGE_SIZE - len, "\n");
443 		return len;
444 	}
445 	default:
446 		return 0;
447 	}
448 }
449 
450 static ssize_t iio_read_channel_info(struct device *dev,
451 				     struct device_attribute *attr,
452 				     char *buf)
453 {
454 	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
455 	struct iio_dev_attr *this_attr = to_iio_dev_attr(attr);
456 	int vals[INDIO_MAX_RAW_ELEMENTS];
457 	int ret;
458 	int val_len = 2;
459 
460 	if (indio_dev->info->read_raw_multi)
461 		ret = indio_dev->info->read_raw_multi(indio_dev, this_attr->c,
462 							INDIO_MAX_RAW_ELEMENTS,
463 							vals, &val_len,
464 							this_attr->address);
465 	else
466 		ret = indio_dev->info->read_raw(indio_dev, this_attr->c,
467 				    &vals[0], &vals[1], this_attr->address);
468 
469 	if (ret < 0)
470 		return ret;
471 
472 	return iio_format_value(buf, ret, val_len, vals);
473 }
474 
475 /**
476  * iio_str_to_fixpoint() - Parse a fixed-point number from a string
477  * @str: The string to parse
478  * @fract_mult: Multiplier for the first decimal place, should be a power of 10
479  * @integer: The integer part of the number
480  * @fract: The fractional part of the number
481  *
482  * Returns 0 on success, or a negative error code if the string could not be
483  * parsed.
484  */
485 int iio_str_to_fixpoint(const char *str, int fract_mult,
486 	int *integer, int *fract)
487 {
488 	int i = 0, f = 0;
489 	bool integer_part = true, negative = false;
490 
491 	if (str[0] == '-') {
492 		negative = true;
493 		str++;
494 	} else if (str[0] == '+') {
495 		str++;
496 	}
497 
498 	while (*str) {
499 		if ('0' <= *str && *str <= '9') {
500 			if (integer_part) {
501 				i = i * 10 + *str - '0';
502 			} else {
503 				f += fract_mult * (*str - '0');
504 				fract_mult /= 10;
505 			}
506 		} else if (*str == '\n') {
507 			if (*(str + 1) == '\0')
508 				break;
509 			else
510 				return -EINVAL;
511 		} else if (*str == '.' && integer_part) {
512 			integer_part = false;
513 		} else {
514 			return -EINVAL;
515 		}
516 		str++;
517 	}
518 
519 	if (negative) {
520 		if (i)
521 			i = -i;
522 		else
523 			f = -f;
524 	}
525 
526 	*integer = i;
527 	*fract = f;
528 
529 	return 0;
530 }
531 EXPORT_SYMBOL_GPL(iio_str_to_fixpoint);
532 
533 static ssize_t iio_write_channel_info(struct device *dev,
534 				      struct device_attribute *attr,
535 				      const char *buf,
536 				      size_t len)
537 {
538 	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
539 	struct iio_dev_attr *this_attr = to_iio_dev_attr(attr);
540 	int ret, fract_mult = 100000;
541 	int integer, fract;
542 
543 	/* Assumes decimal - precision based on number of digits */
544 	if (!indio_dev->info->write_raw)
545 		return -EINVAL;
546 
547 	if (indio_dev->info->write_raw_get_fmt)
548 		switch (indio_dev->info->write_raw_get_fmt(indio_dev,
549 			this_attr->c, this_attr->address)) {
550 		case IIO_VAL_INT_PLUS_MICRO:
551 			fract_mult = 100000;
552 			break;
553 		case IIO_VAL_INT_PLUS_NANO:
554 			fract_mult = 100000000;
555 			break;
556 		default:
557 			return -EINVAL;
558 		}
559 
560 	ret = iio_str_to_fixpoint(buf, fract_mult, &integer, &fract);
561 	if (ret)
562 		return ret;
563 
564 	ret = indio_dev->info->write_raw(indio_dev, this_attr->c,
565 					 integer, fract, this_attr->address);
566 	if (ret)
567 		return ret;
568 
569 	return len;
570 }
571 
572 static
573 int __iio_device_attr_init(struct device_attribute *dev_attr,
574 			   const char *postfix,
575 			   struct iio_chan_spec const *chan,
576 			   ssize_t (*readfunc)(struct device *dev,
577 					       struct device_attribute *attr,
578 					       char *buf),
579 			   ssize_t (*writefunc)(struct device *dev,
580 						struct device_attribute *attr,
581 						const char *buf,
582 						size_t len),
583 			   enum iio_shared_by shared_by)
584 {
585 	int ret = 0;
586 	char *name = NULL;
587 	char *full_postfix;
588 	sysfs_attr_init(&dev_attr->attr);
589 
590 	/* Build up postfix of <extend_name>_<modifier>_postfix */
591 	if (chan->modified && (shared_by == IIO_SEPARATE)) {
592 		if (chan->extend_name)
593 			full_postfix = kasprintf(GFP_KERNEL, "%s_%s_%s",
594 						 iio_modifier_names[chan
595 								    ->channel2],
596 						 chan->extend_name,
597 						 postfix);
598 		else
599 			full_postfix = kasprintf(GFP_KERNEL, "%s_%s",
600 						 iio_modifier_names[chan
601 								    ->channel2],
602 						 postfix);
603 	} else {
604 		if (chan->extend_name == NULL || shared_by != IIO_SEPARATE)
605 			full_postfix = kstrdup(postfix, GFP_KERNEL);
606 		else
607 			full_postfix = kasprintf(GFP_KERNEL,
608 						 "%s_%s",
609 						 chan->extend_name,
610 						 postfix);
611 	}
612 	if (full_postfix == NULL)
613 		return -ENOMEM;
614 
615 	if (chan->differential) { /* Differential can not have modifier */
616 		switch (shared_by) {
617 		case IIO_SHARED_BY_ALL:
618 			name = kasprintf(GFP_KERNEL, "%s", full_postfix);
619 			break;
620 		case IIO_SHARED_BY_DIR:
621 			name = kasprintf(GFP_KERNEL, "%s_%s",
622 						iio_direction[chan->output],
623 						full_postfix);
624 			break;
625 		case IIO_SHARED_BY_TYPE:
626 			name = kasprintf(GFP_KERNEL, "%s_%s-%s_%s",
627 					    iio_direction[chan->output],
628 					    iio_chan_type_name_spec[chan->type],
629 					    iio_chan_type_name_spec[chan->type],
630 					    full_postfix);
631 			break;
632 		case IIO_SEPARATE:
633 			if (!chan->indexed) {
634 				WARN_ON("Differential channels must be indexed\n");
635 				ret = -EINVAL;
636 				goto error_free_full_postfix;
637 			}
638 			name = kasprintf(GFP_KERNEL,
639 					    "%s_%s%d-%s%d_%s",
640 					    iio_direction[chan->output],
641 					    iio_chan_type_name_spec[chan->type],
642 					    chan->channel,
643 					    iio_chan_type_name_spec[chan->type],
644 					    chan->channel2,
645 					    full_postfix);
646 			break;
647 		}
648 	} else { /* Single ended */
649 		switch (shared_by) {
650 		case IIO_SHARED_BY_ALL:
651 			name = kasprintf(GFP_KERNEL, "%s", full_postfix);
652 			break;
653 		case IIO_SHARED_BY_DIR:
654 			name = kasprintf(GFP_KERNEL, "%s_%s",
655 						iio_direction[chan->output],
656 						full_postfix);
657 			break;
658 		case IIO_SHARED_BY_TYPE:
659 			name = kasprintf(GFP_KERNEL, "%s_%s_%s",
660 					    iio_direction[chan->output],
661 					    iio_chan_type_name_spec[chan->type],
662 					    full_postfix);
663 			break;
664 
665 		case IIO_SEPARATE:
666 			if (chan->indexed)
667 				name = kasprintf(GFP_KERNEL, "%s_%s%d_%s",
668 						    iio_direction[chan->output],
669 						    iio_chan_type_name_spec[chan->type],
670 						    chan->channel,
671 						    full_postfix);
672 			else
673 				name = kasprintf(GFP_KERNEL, "%s_%s_%s",
674 						    iio_direction[chan->output],
675 						    iio_chan_type_name_spec[chan->type],
676 						    full_postfix);
677 			break;
678 		}
679 	}
680 	if (name == NULL) {
681 		ret = -ENOMEM;
682 		goto error_free_full_postfix;
683 	}
684 	dev_attr->attr.name = name;
685 
686 	if (readfunc) {
687 		dev_attr->attr.mode |= S_IRUGO;
688 		dev_attr->show = readfunc;
689 	}
690 
691 	if (writefunc) {
692 		dev_attr->attr.mode |= S_IWUSR;
693 		dev_attr->store = writefunc;
694 	}
695 
696 error_free_full_postfix:
697 	kfree(full_postfix);
698 
699 	return ret;
700 }
701 
702 static void __iio_device_attr_deinit(struct device_attribute *dev_attr)
703 {
704 	kfree(dev_attr->attr.name);
705 }
706 
707 int __iio_add_chan_devattr(const char *postfix,
708 			   struct iio_chan_spec const *chan,
709 			   ssize_t (*readfunc)(struct device *dev,
710 					       struct device_attribute *attr,
711 					       char *buf),
712 			   ssize_t (*writefunc)(struct device *dev,
713 						struct device_attribute *attr,
714 						const char *buf,
715 						size_t len),
716 			   u64 mask,
717 			   enum iio_shared_by shared_by,
718 			   struct device *dev,
719 			   struct list_head *attr_list)
720 {
721 	int ret;
722 	struct iio_dev_attr *iio_attr, *t;
723 
724 	iio_attr = kzalloc(sizeof(*iio_attr), GFP_KERNEL);
725 	if (iio_attr == NULL)
726 		return -ENOMEM;
727 	ret = __iio_device_attr_init(&iio_attr->dev_attr,
728 				     postfix, chan,
729 				     readfunc, writefunc, shared_by);
730 	if (ret)
731 		goto error_iio_dev_attr_free;
732 	iio_attr->c = chan;
733 	iio_attr->address = mask;
734 	list_for_each_entry(t, attr_list, l)
735 		if (strcmp(t->dev_attr.attr.name,
736 			   iio_attr->dev_attr.attr.name) == 0) {
737 			if (shared_by == IIO_SEPARATE)
738 				dev_err(dev, "tried to double register : %s\n",
739 					t->dev_attr.attr.name);
740 			ret = -EBUSY;
741 			goto error_device_attr_deinit;
742 		}
743 	list_add(&iio_attr->l, attr_list);
744 
745 	return 0;
746 
747 error_device_attr_deinit:
748 	__iio_device_attr_deinit(&iio_attr->dev_attr);
749 error_iio_dev_attr_free:
750 	kfree(iio_attr);
751 	return ret;
752 }
753 
754 static int iio_device_add_info_mask_type(struct iio_dev *indio_dev,
755 					 struct iio_chan_spec const *chan,
756 					 enum iio_shared_by shared_by,
757 					 const long *infomask)
758 {
759 	int i, ret, attrcount = 0;
760 
761 	for_each_set_bit(i, infomask, sizeof(infomask)*8) {
762 		if (i >= ARRAY_SIZE(iio_chan_info_postfix))
763 			return -EINVAL;
764 		ret = __iio_add_chan_devattr(iio_chan_info_postfix[i],
765 					     chan,
766 					     &iio_read_channel_info,
767 					     &iio_write_channel_info,
768 					     i,
769 					     shared_by,
770 					     &indio_dev->dev,
771 					     &indio_dev->channel_attr_list);
772 		if ((ret == -EBUSY) && (shared_by != IIO_SEPARATE))
773 			continue;
774 		else if (ret < 0)
775 			return ret;
776 		attrcount++;
777 	}
778 
779 	return attrcount;
780 }
781 
782 static int iio_device_add_channel_sysfs(struct iio_dev *indio_dev,
783 					struct iio_chan_spec const *chan)
784 {
785 	int ret, attrcount = 0;
786 	const struct iio_chan_spec_ext_info *ext_info;
787 
788 	if (chan->channel < 0)
789 		return 0;
790 	ret = iio_device_add_info_mask_type(indio_dev, chan,
791 					    IIO_SEPARATE,
792 					    &chan->info_mask_separate);
793 	if (ret < 0)
794 		return ret;
795 	attrcount += ret;
796 
797 	ret = iio_device_add_info_mask_type(indio_dev, chan,
798 					    IIO_SHARED_BY_TYPE,
799 					    &chan->info_mask_shared_by_type);
800 	if (ret < 0)
801 		return ret;
802 	attrcount += ret;
803 
804 	ret = iio_device_add_info_mask_type(indio_dev, chan,
805 					    IIO_SHARED_BY_DIR,
806 					    &chan->info_mask_shared_by_dir);
807 	if (ret < 0)
808 		return ret;
809 	attrcount += ret;
810 
811 	ret = iio_device_add_info_mask_type(indio_dev, chan,
812 					    IIO_SHARED_BY_ALL,
813 					    &chan->info_mask_shared_by_all);
814 	if (ret < 0)
815 		return ret;
816 	attrcount += ret;
817 
818 	if (chan->ext_info) {
819 		unsigned int i = 0;
820 		for (ext_info = chan->ext_info; ext_info->name; ext_info++) {
821 			ret = __iio_add_chan_devattr(ext_info->name,
822 					chan,
823 					ext_info->read ?
824 					    &iio_read_channel_ext_info : NULL,
825 					ext_info->write ?
826 					    &iio_write_channel_ext_info : NULL,
827 					i,
828 					ext_info->shared,
829 					&indio_dev->dev,
830 					&indio_dev->channel_attr_list);
831 			i++;
832 			if (ret == -EBUSY && ext_info->shared)
833 				continue;
834 
835 			if (ret)
836 				return ret;
837 
838 			attrcount++;
839 		}
840 	}
841 
842 	return attrcount;
843 }
844 
845 /**
846  * iio_free_chan_devattr_list() - Free a list of IIO device attributes
847  * @attr_list: List of IIO device attributes
848  *
849  * This function frees the memory allocated for each of the IIO device
850  * attributes in the list.
851  */
852 void iio_free_chan_devattr_list(struct list_head *attr_list)
853 {
854 	struct iio_dev_attr *p, *n;
855 
856 	list_for_each_entry_safe(p, n, attr_list, l) {
857 		kfree(p->dev_attr.attr.name);
858 		list_del(&p->l);
859 		kfree(p);
860 	}
861 }
862 
863 static ssize_t iio_show_dev_name(struct device *dev,
864 				 struct device_attribute *attr,
865 				 char *buf)
866 {
867 	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
868 	return snprintf(buf, PAGE_SIZE, "%s\n", indio_dev->name);
869 }
870 
871 static DEVICE_ATTR(name, S_IRUGO, iio_show_dev_name, NULL);
872 
873 static int iio_device_register_sysfs(struct iio_dev *indio_dev)
874 {
875 	int i, ret = 0, attrcount, attrn, attrcount_orig = 0;
876 	struct iio_dev_attr *p;
877 	struct attribute **attr;
878 
879 	/* First count elements in any existing group */
880 	if (indio_dev->info->attrs) {
881 		attr = indio_dev->info->attrs->attrs;
882 		while (*attr++ != NULL)
883 			attrcount_orig++;
884 	}
885 	attrcount = attrcount_orig;
886 	/*
887 	 * New channel registration method - relies on the fact a group does
888 	 * not need to be initialized if its name is NULL.
889 	 */
890 	if (indio_dev->channels)
891 		for (i = 0; i < indio_dev->num_channels; i++) {
892 			ret = iio_device_add_channel_sysfs(indio_dev,
893 							   &indio_dev
894 							   ->channels[i]);
895 			if (ret < 0)
896 				goto error_clear_attrs;
897 			attrcount += ret;
898 		}
899 
900 	if (indio_dev->name)
901 		attrcount++;
902 
903 	indio_dev->chan_attr_group.attrs = kcalloc(attrcount + 1,
904 						   sizeof(indio_dev->chan_attr_group.attrs[0]),
905 						   GFP_KERNEL);
906 	if (indio_dev->chan_attr_group.attrs == NULL) {
907 		ret = -ENOMEM;
908 		goto error_clear_attrs;
909 	}
910 	/* Copy across original attributes */
911 	if (indio_dev->info->attrs)
912 		memcpy(indio_dev->chan_attr_group.attrs,
913 		       indio_dev->info->attrs->attrs,
914 		       sizeof(indio_dev->chan_attr_group.attrs[0])
915 		       *attrcount_orig);
916 	attrn = attrcount_orig;
917 	/* Add all elements from the list. */
918 	list_for_each_entry(p, &indio_dev->channel_attr_list, l)
919 		indio_dev->chan_attr_group.attrs[attrn++] = &p->dev_attr.attr;
920 	if (indio_dev->name)
921 		indio_dev->chan_attr_group.attrs[attrn++] = &dev_attr_name.attr;
922 
923 	indio_dev->groups[indio_dev->groupcounter++] =
924 		&indio_dev->chan_attr_group;
925 
926 	return 0;
927 
928 error_clear_attrs:
929 	iio_free_chan_devattr_list(&indio_dev->channel_attr_list);
930 
931 	return ret;
932 }
933 
934 static void iio_device_unregister_sysfs(struct iio_dev *indio_dev)
935 {
936 
937 	iio_free_chan_devattr_list(&indio_dev->channel_attr_list);
938 	kfree(indio_dev->chan_attr_group.attrs);
939 	indio_dev->chan_attr_group.attrs = NULL;
940 }
941 
942 static void iio_dev_release(struct device *device)
943 {
944 	struct iio_dev *indio_dev = dev_to_iio_dev(device);
945 	if (indio_dev->modes & INDIO_BUFFER_TRIGGERED)
946 		iio_device_unregister_trigger_consumer(indio_dev);
947 	iio_device_unregister_eventset(indio_dev);
948 	iio_device_unregister_sysfs(indio_dev);
949 
950 	iio_buffer_put(indio_dev->buffer);
951 
952 	ida_simple_remove(&iio_ida, indio_dev->id);
953 	kfree(indio_dev);
954 }
955 
956 struct device_type iio_device_type = {
957 	.name = "iio_device",
958 	.release = iio_dev_release,
959 };
960 
961 /**
962  * iio_device_alloc() - allocate an iio_dev from a driver
963  * @sizeof_priv:	Space to allocate for private structure.
964  **/
965 struct iio_dev *iio_device_alloc(int sizeof_priv)
966 {
967 	struct iio_dev *dev;
968 	size_t alloc_size;
969 
970 	alloc_size = sizeof(struct iio_dev);
971 	if (sizeof_priv) {
972 		alloc_size = ALIGN(alloc_size, IIO_ALIGN);
973 		alloc_size += sizeof_priv;
974 	}
975 	/* ensure 32-byte alignment of whole construct ? */
976 	alloc_size += IIO_ALIGN - 1;
977 
978 	dev = kzalloc(alloc_size, GFP_KERNEL);
979 
980 	if (dev) {
981 		dev->dev.groups = dev->groups;
982 		dev->dev.type = &iio_device_type;
983 		dev->dev.bus = &iio_bus_type;
984 		device_initialize(&dev->dev);
985 		dev_set_drvdata(&dev->dev, (void *)dev);
986 		mutex_init(&dev->mlock);
987 		mutex_init(&dev->info_exist_lock);
988 		INIT_LIST_HEAD(&dev->channel_attr_list);
989 
990 		dev->id = ida_simple_get(&iio_ida, 0, 0, GFP_KERNEL);
991 		if (dev->id < 0) {
992 			/* cannot use a dev_err as the name isn't available */
993 			pr_err("failed to get device id\n");
994 			kfree(dev);
995 			return NULL;
996 		}
997 		dev_set_name(&dev->dev, "iio:device%d", dev->id);
998 		INIT_LIST_HEAD(&dev->buffer_list);
999 	}
1000 
1001 	return dev;
1002 }
1003 EXPORT_SYMBOL(iio_device_alloc);
1004 
1005 /**
1006  * iio_device_free() - free an iio_dev from a driver
1007  * @dev:		the iio_dev associated with the device
1008  **/
1009 void iio_device_free(struct iio_dev *dev)
1010 {
1011 	if (dev)
1012 		put_device(&dev->dev);
1013 }
1014 EXPORT_SYMBOL(iio_device_free);
1015 
1016 static void devm_iio_device_release(struct device *dev, void *res)
1017 {
1018 	iio_device_free(*(struct iio_dev **)res);
1019 }
1020 
1021 static int devm_iio_device_match(struct device *dev, void *res, void *data)
1022 {
1023 	struct iio_dev **r = res;
1024 	if (!r || !*r) {
1025 		WARN_ON(!r || !*r);
1026 		return 0;
1027 	}
1028 	return *r == data;
1029 }
1030 
1031 /**
1032  * devm_iio_device_alloc - Resource-managed iio_device_alloc()
1033  * @dev:		Device to allocate iio_dev for
1034  * @sizeof_priv:	Space to allocate for private structure.
1035  *
1036  * Managed iio_device_alloc. iio_dev allocated with this function is
1037  * automatically freed on driver detach.
1038  *
1039  * If an iio_dev allocated with this function needs to be freed separately,
1040  * devm_iio_device_free() must be used.
1041  *
1042  * RETURNS:
1043  * Pointer to allocated iio_dev on success, NULL on failure.
1044  */
1045 struct iio_dev *devm_iio_device_alloc(struct device *dev, int sizeof_priv)
1046 {
1047 	struct iio_dev **ptr, *iio_dev;
1048 
1049 	ptr = devres_alloc(devm_iio_device_release, sizeof(*ptr),
1050 			   GFP_KERNEL);
1051 	if (!ptr)
1052 		return NULL;
1053 
1054 	iio_dev = iio_device_alloc(sizeof_priv);
1055 	if (iio_dev) {
1056 		*ptr = iio_dev;
1057 		devres_add(dev, ptr);
1058 	} else {
1059 		devres_free(ptr);
1060 	}
1061 
1062 	return iio_dev;
1063 }
1064 EXPORT_SYMBOL_GPL(devm_iio_device_alloc);
1065 
1066 /**
1067  * devm_iio_device_free - Resource-managed iio_device_free()
1068  * @dev:		Device this iio_dev belongs to
1069  * @iio_dev:		the iio_dev associated with the device
1070  *
1071  * Free iio_dev allocated with devm_iio_device_alloc().
1072  */
1073 void devm_iio_device_free(struct device *dev, struct iio_dev *iio_dev)
1074 {
1075 	int rc;
1076 
1077 	rc = devres_release(dev, devm_iio_device_release,
1078 			    devm_iio_device_match, iio_dev);
1079 	WARN_ON(rc);
1080 }
1081 EXPORT_SYMBOL_GPL(devm_iio_device_free);
1082 
1083 /**
1084  * iio_chrdev_open() - chrdev file open for buffer access and ioctls
1085  **/
1086 static int iio_chrdev_open(struct inode *inode, struct file *filp)
1087 {
1088 	struct iio_dev *indio_dev = container_of(inode->i_cdev,
1089 						struct iio_dev, chrdev);
1090 
1091 	if (test_and_set_bit(IIO_BUSY_BIT_POS, &indio_dev->flags))
1092 		return -EBUSY;
1093 
1094 	iio_device_get(indio_dev);
1095 
1096 	filp->private_data = indio_dev;
1097 
1098 	return 0;
1099 }
1100 
1101 /**
1102  * iio_chrdev_release() - chrdev file close buffer access and ioctls
1103  **/
1104 static int iio_chrdev_release(struct inode *inode, struct file *filp)
1105 {
1106 	struct iio_dev *indio_dev = container_of(inode->i_cdev,
1107 						struct iio_dev, chrdev);
1108 	clear_bit(IIO_BUSY_BIT_POS, &indio_dev->flags);
1109 	iio_device_put(indio_dev);
1110 
1111 	return 0;
1112 }
1113 
1114 /* Somewhat of a cross file organization violation - ioctls here are actually
1115  * event related */
1116 static long iio_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
1117 {
1118 	struct iio_dev *indio_dev = filp->private_data;
1119 	int __user *ip = (int __user *)arg;
1120 	int fd;
1121 
1122 	if (!indio_dev->info)
1123 		return -ENODEV;
1124 
1125 	if (cmd == IIO_GET_EVENT_FD_IOCTL) {
1126 		fd = iio_event_getfd(indio_dev);
1127 		if (copy_to_user(ip, &fd, sizeof(fd)))
1128 			return -EFAULT;
1129 		return 0;
1130 	}
1131 	return -EINVAL;
1132 }
1133 
1134 static const struct file_operations iio_buffer_fileops = {
1135 	.read = iio_buffer_read_first_n_outer_addr,
1136 	.release = iio_chrdev_release,
1137 	.open = iio_chrdev_open,
1138 	.poll = iio_buffer_poll_addr,
1139 	.owner = THIS_MODULE,
1140 	.llseek = noop_llseek,
1141 	.unlocked_ioctl = iio_ioctl,
1142 	.compat_ioctl = iio_ioctl,
1143 };
1144 
1145 static int iio_check_unique_scan_index(struct iio_dev *indio_dev)
1146 {
1147 	int i, j;
1148 	const struct iio_chan_spec *channels = indio_dev->channels;
1149 
1150 	if (!(indio_dev->modes & INDIO_ALL_BUFFER_MODES))
1151 		return 0;
1152 
1153 	for (i = 0; i < indio_dev->num_channels - 1; i++) {
1154 		if (channels[i].scan_index < 0)
1155 			continue;
1156 		for (j = i + 1; j < indio_dev->num_channels; j++)
1157 			if (channels[i].scan_index == channels[j].scan_index) {
1158 				dev_err(&indio_dev->dev,
1159 					"Duplicate scan index %d\n",
1160 					channels[i].scan_index);
1161 				return -EINVAL;
1162 			}
1163 	}
1164 
1165 	return 0;
1166 }
1167 
1168 static const struct iio_buffer_setup_ops noop_ring_setup_ops;
1169 
1170 /**
1171  * iio_device_register() - register a device with the IIO subsystem
1172  * @indio_dev:		Device structure filled by the device driver
1173  **/
1174 int iio_device_register(struct iio_dev *indio_dev)
1175 {
1176 	int ret;
1177 
1178 	/* If the calling driver did not initialize of_node, do it here */
1179 	if (!indio_dev->dev.of_node && indio_dev->dev.parent)
1180 		indio_dev->dev.of_node = indio_dev->dev.parent->of_node;
1181 
1182 	ret = iio_check_unique_scan_index(indio_dev);
1183 	if (ret < 0)
1184 		return ret;
1185 
1186 	/* configure elements for the chrdev */
1187 	indio_dev->dev.devt = MKDEV(MAJOR(iio_devt), indio_dev->id);
1188 
1189 	ret = iio_device_register_debugfs(indio_dev);
1190 	if (ret) {
1191 		dev_err(indio_dev->dev.parent,
1192 			"Failed to register debugfs interfaces\n");
1193 		return ret;
1194 	}
1195 
1196 	ret = iio_buffer_alloc_sysfs_and_mask(indio_dev);
1197 	if (ret) {
1198 		dev_err(indio_dev->dev.parent,
1199 			"Failed to create buffer sysfs interfaces\n");
1200 		goto error_unreg_debugfs;
1201 	}
1202 
1203 	ret = iio_device_register_sysfs(indio_dev);
1204 	if (ret) {
1205 		dev_err(indio_dev->dev.parent,
1206 			"Failed to register sysfs interfaces\n");
1207 		goto error_buffer_free_sysfs;
1208 	}
1209 	ret = iio_device_register_eventset(indio_dev);
1210 	if (ret) {
1211 		dev_err(indio_dev->dev.parent,
1212 			"Failed to register event set\n");
1213 		goto error_free_sysfs;
1214 	}
1215 	if (indio_dev->modes & INDIO_BUFFER_TRIGGERED)
1216 		iio_device_register_trigger_consumer(indio_dev);
1217 
1218 	if ((indio_dev->modes & INDIO_ALL_BUFFER_MODES) &&
1219 		indio_dev->setup_ops == NULL)
1220 		indio_dev->setup_ops = &noop_ring_setup_ops;
1221 
1222 	cdev_init(&indio_dev->chrdev, &iio_buffer_fileops);
1223 	indio_dev->chrdev.owner = indio_dev->info->driver_module;
1224 	indio_dev->chrdev.kobj.parent = &indio_dev->dev.kobj;
1225 	ret = cdev_add(&indio_dev->chrdev, indio_dev->dev.devt, 1);
1226 	if (ret < 0)
1227 		goto error_unreg_eventset;
1228 
1229 	ret = device_add(&indio_dev->dev);
1230 	if (ret < 0)
1231 		goto error_cdev_del;
1232 
1233 	return 0;
1234 error_cdev_del:
1235 	cdev_del(&indio_dev->chrdev);
1236 error_unreg_eventset:
1237 	iio_device_unregister_eventset(indio_dev);
1238 error_free_sysfs:
1239 	iio_device_unregister_sysfs(indio_dev);
1240 error_buffer_free_sysfs:
1241 	iio_buffer_free_sysfs_and_mask(indio_dev);
1242 error_unreg_debugfs:
1243 	iio_device_unregister_debugfs(indio_dev);
1244 	return ret;
1245 }
1246 EXPORT_SYMBOL(iio_device_register);
1247 
1248 /**
1249  * iio_device_unregister() - unregister a device from the IIO subsystem
1250  * @indio_dev:		Device structure representing the device.
1251  **/
1252 void iio_device_unregister(struct iio_dev *indio_dev)
1253 {
1254 	mutex_lock(&indio_dev->info_exist_lock);
1255 
1256 	device_del(&indio_dev->dev);
1257 
1258 	if (indio_dev->chrdev.dev)
1259 		cdev_del(&indio_dev->chrdev);
1260 	iio_device_unregister_debugfs(indio_dev);
1261 
1262 	iio_disable_all_buffers(indio_dev);
1263 
1264 	indio_dev->info = NULL;
1265 
1266 	iio_device_wakeup_eventset(indio_dev);
1267 	iio_buffer_wakeup_poll(indio_dev);
1268 
1269 	mutex_unlock(&indio_dev->info_exist_lock);
1270 
1271 	iio_buffer_free_sysfs_and_mask(indio_dev);
1272 }
1273 EXPORT_SYMBOL(iio_device_unregister);
1274 
1275 static void devm_iio_device_unreg(struct device *dev, void *res)
1276 {
1277 	iio_device_unregister(*(struct iio_dev **)res);
1278 }
1279 
1280 /**
1281  * devm_iio_device_register - Resource-managed iio_device_register()
1282  * @dev:	Device to allocate iio_dev for
1283  * @indio_dev:	Device structure filled by the device driver
1284  *
1285  * Managed iio_device_register.  The IIO device registered with this
1286  * function is automatically unregistered on driver detach. This function
1287  * calls iio_device_register() internally. Refer to that function for more
1288  * information.
1289  *
1290  * If an iio_dev registered with this function needs to be unregistered
1291  * separately, devm_iio_device_unregister() must be used.
1292  *
1293  * RETURNS:
1294  * 0 on success, negative error number on failure.
1295  */
1296 int devm_iio_device_register(struct device *dev, struct iio_dev *indio_dev)
1297 {
1298 	struct iio_dev **ptr;
1299 	int ret;
1300 
1301 	ptr = devres_alloc(devm_iio_device_unreg, sizeof(*ptr), GFP_KERNEL);
1302 	if (!ptr)
1303 		return -ENOMEM;
1304 
1305 	*ptr = indio_dev;
1306 	ret = iio_device_register(indio_dev);
1307 	if (!ret)
1308 		devres_add(dev, ptr);
1309 	else
1310 		devres_free(ptr);
1311 
1312 	return ret;
1313 }
1314 EXPORT_SYMBOL_GPL(devm_iio_device_register);
1315 
1316 /**
1317  * devm_iio_device_unregister - Resource-managed iio_device_unregister()
1318  * @dev:	Device this iio_dev belongs to
1319  * @indio_dev:	the iio_dev associated with the device
1320  *
1321  * Unregister iio_dev registered with devm_iio_device_register().
1322  */
1323 void devm_iio_device_unregister(struct device *dev, struct iio_dev *indio_dev)
1324 {
1325 	int rc;
1326 
1327 	rc = devres_release(dev, devm_iio_device_unreg,
1328 			    devm_iio_device_match, indio_dev);
1329 	WARN_ON(rc);
1330 }
1331 EXPORT_SYMBOL_GPL(devm_iio_device_unregister);
1332 
1333 subsys_initcall(iio_init);
1334 module_exit(iio_exit);
1335 
1336 MODULE_AUTHOR("Jonathan Cameron <jic23@kernel.org>");
1337 MODULE_DESCRIPTION("Industrial I/O core");
1338 MODULE_LICENSE("GPL");
1339