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