cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

industrialio-core.c (55067B)


      1// SPDX-License-Identifier: GPL-2.0-only
      2/* The industrial I/O core
      3 *
      4 * Copyright (c) 2008 Jonathan Cameron
      5 *
      6 * Based on elements of hwmon and input subsystems.
      7 */
      8
      9#define pr_fmt(fmt) "iio-core: " fmt
     10
     11#include <linux/kernel.h>
     12#include <linux/module.h>
     13#include <linux/idr.h>
     14#include <linux/kdev_t.h>
     15#include <linux/err.h>
     16#include <linux/device.h>
     17#include <linux/fs.h>
     18#include <linux/poll.h>
     19#include <linux/property.h>
     20#include <linux/sched.h>
     21#include <linux/wait.h>
     22#include <linux/cdev.h>
     23#include <linux/slab.h>
     24#include <linux/anon_inodes.h>
     25#include <linux/debugfs.h>
     26#include <linux/mutex.h>
     27#include <linux/iio/iio.h>
     28#include <linux/iio/iio-opaque.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#include <linux/iio/buffer_impl.h>
     35
     36/* IDA to assign each registered device a unique id */
     37static DEFINE_IDA(iio_ida);
     38
     39static dev_t iio_devt;
     40
     41#define IIO_DEV_MAX 256
     42struct bus_type iio_bus_type = {
     43	.name = "iio",
     44};
     45EXPORT_SYMBOL(iio_bus_type);
     46
     47static struct dentry *iio_debugfs_dentry;
     48
     49static const char * const iio_direction[] = {
     50	[0] = "in",
     51	[1] = "out",
     52};
     53
     54static 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	[IIO_ELECTRICALCONDUCTIVITY] = "electricalconductivity",
     84	[IIO_COUNT] = "count",
     85	[IIO_INDEX] = "index",
     86	[IIO_GRAVITY]  = "gravity",
     87	[IIO_POSITIONRELATIVE]  = "positionrelative",
     88	[IIO_PHASE] = "phase",
     89	[IIO_MASSCONCENTRATION] = "massconcentration",
     90};
     91
     92static const char * const iio_modifier_names[] = {
     93	[IIO_MOD_X] = "x",
     94	[IIO_MOD_Y] = "y",
     95	[IIO_MOD_Z] = "z",
     96	[IIO_MOD_X_AND_Y] = "x&y",
     97	[IIO_MOD_X_AND_Z] = "x&z",
     98	[IIO_MOD_Y_AND_Z] = "y&z",
     99	[IIO_MOD_X_AND_Y_AND_Z] = "x&y&z",
    100	[IIO_MOD_X_OR_Y] = "x|y",
    101	[IIO_MOD_X_OR_Z] = "x|z",
    102	[IIO_MOD_Y_OR_Z] = "y|z",
    103	[IIO_MOD_X_OR_Y_OR_Z] = "x|y|z",
    104	[IIO_MOD_ROOT_SUM_SQUARED_X_Y] = "sqrt(x^2+y^2)",
    105	[IIO_MOD_SUM_SQUARED_X_Y_Z] = "x^2+y^2+z^2",
    106	[IIO_MOD_LIGHT_BOTH] = "both",
    107	[IIO_MOD_LIGHT_IR] = "ir",
    108	[IIO_MOD_LIGHT_CLEAR] = "clear",
    109	[IIO_MOD_LIGHT_RED] = "red",
    110	[IIO_MOD_LIGHT_GREEN] = "green",
    111	[IIO_MOD_LIGHT_BLUE] = "blue",
    112	[IIO_MOD_LIGHT_UV] = "uv",
    113	[IIO_MOD_LIGHT_DUV] = "duv",
    114	[IIO_MOD_QUATERNION] = "quaternion",
    115	[IIO_MOD_TEMP_AMBIENT] = "ambient",
    116	[IIO_MOD_TEMP_OBJECT] = "object",
    117	[IIO_MOD_NORTH_MAGN] = "from_north_magnetic",
    118	[IIO_MOD_NORTH_TRUE] = "from_north_true",
    119	[IIO_MOD_NORTH_MAGN_TILT_COMP] = "from_north_magnetic_tilt_comp",
    120	[IIO_MOD_NORTH_TRUE_TILT_COMP] = "from_north_true_tilt_comp",
    121	[IIO_MOD_RUNNING] = "running",
    122	[IIO_MOD_JOGGING] = "jogging",
    123	[IIO_MOD_WALKING] = "walking",
    124	[IIO_MOD_STILL] = "still",
    125	[IIO_MOD_ROOT_SUM_SQUARED_X_Y_Z] = "sqrt(x^2+y^2+z^2)",
    126	[IIO_MOD_I] = "i",
    127	[IIO_MOD_Q] = "q",
    128	[IIO_MOD_CO2] = "co2",
    129	[IIO_MOD_VOC] = "voc",
    130	[IIO_MOD_PM1] = "pm1",
    131	[IIO_MOD_PM2P5] = "pm2p5",
    132	[IIO_MOD_PM4] = "pm4",
    133	[IIO_MOD_PM10] = "pm10",
    134	[IIO_MOD_ETHANOL] = "ethanol",
    135	[IIO_MOD_H2] = "h2",
    136	[IIO_MOD_O2] = "o2",
    137};
    138
    139/* relies on pairs of these shared then separate */
    140static const char * const iio_chan_info_postfix[] = {
    141	[IIO_CHAN_INFO_RAW] = "raw",
    142	[IIO_CHAN_INFO_PROCESSED] = "input",
    143	[IIO_CHAN_INFO_SCALE] = "scale",
    144	[IIO_CHAN_INFO_OFFSET] = "offset",
    145	[IIO_CHAN_INFO_CALIBSCALE] = "calibscale",
    146	[IIO_CHAN_INFO_CALIBBIAS] = "calibbias",
    147	[IIO_CHAN_INFO_PEAK] = "peak_raw",
    148	[IIO_CHAN_INFO_PEAK_SCALE] = "peak_scale",
    149	[IIO_CHAN_INFO_QUADRATURE_CORRECTION_RAW] = "quadrature_correction_raw",
    150	[IIO_CHAN_INFO_AVERAGE_RAW] = "mean_raw",
    151	[IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY]
    152	= "filter_low_pass_3db_frequency",
    153	[IIO_CHAN_INFO_HIGH_PASS_FILTER_3DB_FREQUENCY]
    154	= "filter_high_pass_3db_frequency",
    155	[IIO_CHAN_INFO_SAMP_FREQ] = "sampling_frequency",
    156	[IIO_CHAN_INFO_FREQUENCY] = "frequency",
    157	[IIO_CHAN_INFO_PHASE] = "phase",
    158	[IIO_CHAN_INFO_HARDWAREGAIN] = "hardwaregain",
    159	[IIO_CHAN_INFO_HYSTERESIS] = "hysteresis",
    160	[IIO_CHAN_INFO_HYSTERESIS_RELATIVE] = "hysteresis_relative",
    161	[IIO_CHAN_INFO_INT_TIME] = "integration_time",
    162	[IIO_CHAN_INFO_ENABLE] = "en",
    163	[IIO_CHAN_INFO_CALIBHEIGHT] = "calibheight",
    164	[IIO_CHAN_INFO_CALIBWEIGHT] = "calibweight",
    165	[IIO_CHAN_INFO_DEBOUNCE_COUNT] = "debounce_count",
    166	[IIO_CHAN_INFO_DEBOUNCE_TIME] = "debounce_time",
    167	[IIO_CHAN_INFO_CALIBEMISSIVITY] = "calibemissivity",
    168	[IIO_CHAN_INFO_OVERSAMPLING_RATIO] = "oversampling_ratio",
    169	[IIO_CHAN_INFO_THERMOCOUPLE_TYPE] = "thermocouple_type",
    170	[IIO_CHAN_INFO_CALIBAMBIENT] = "calibambient",
    171};
    172/**
    173 * iio_device_id() - query the unique ID for the device
    174 * @indio_dev:		Device structure whose ID is being queried
    175 *
    176 * The IIO device ID is a unique index used for example for the naming
    177 * of the character device /dev/iio\:device[ID]
    178 */
    179int iio_device_id(struct iio_dev *indio_dev)
    180{
    181	struct iio_dev_opaque *iio_dev_opaque = to_iio_dev_opaque(indio_dev);
    182
    183	return iio_dev_opaque->id;
    184}
    185EXPORT_SYMBOL_GPL(iio_device_id);
    186
    187/**
    188 * iio_buffer_enabled() - helper function to test if the buffer is enabled
    189 * @indio_dev:		IIO device structure for device
    190 */
    191bool iio_buffer_enabled(struct iio_dev *indio_dev)
    192{
    193	struct iio_dev_opaque *iio_dev_opaque = to_iio_dev_opaque(indio_dev);
    194
    195	return iio_dev_opaque->currentmode
    196		& (INDIO_BUFFER_TRIGGERED | INDIO_BUFFER_HARDWARE |
    197		   INDIO_BUFFER_SOFTWARE);
    198}
    199EXPORT_SYMBOL_GPL(iio_buffer_enabled);
    200
    201/**
    202 * iio_sysfs_match_string_with_gaps - matches given string in an array with gaps
    203 * @array: array of strings
    204 * @n: number of strings in the array
    205 * @str: string to match with
    206 *
    207 * Returns index of @str in the @array or -EINVAL, similar to match_string().
    208 * Uses sysfs_streq instead of strcmp for matching.
    209 *
    210 * This routine will look for a string in an array of strings.
    211 * The search will continue until the element is found or the n-th element
    212 * is reached, regardless of any NULL elements in the array.
    213 */
    214static int iio_sysfs_match_string_with_gaps(const char * const *array, size_t n,
    215					    const char *str)
    216{
    217	const char *item;
    218	int index;
    219
    220	for (index = 0; index < n; index++) {
    221		item = array[index];
    222		if (!item)
    223			continue;
    224		if (sysfs_streq(item, str))
    225			return index;
    226	}
    227
    228	return -EINVAL;
    229}
    230
    231#if defined(CONFIG_DEBUG_FS)
    232/*
    233 * There's also a CONFIG_DEBUG_FS guard in include/linux/iio/iio.h for
    234 * iio_get_debugfs_dentry() to make it inline if CONFIG_DEBUG_FS is undefined
    235 */
    236struct dentry *iio_get_debugfs_dentry(struct iio_dev *indio_dev)
    237{
    238	struct iio_dev_opaque *iio_dev_opaque = to_iio_dev_opaque(indio_dev);
    239	return iio_dev_opaque->debugfs_dentry;
    240}
    241EXPORT_SYMBOL_GPL(iio_get_debugfs_dentry);
    242#endif
    243
    244/**
    245 * iio_find_channel_from_si() - get channel from its scan index
    246 * @indio_dev:		device
    247 * @si:			scan index to match
    248 */
    249const struct iio_chan_spec
    250*iio_find_channel_from_si(struct iio_dev *indio_dev, int si)
    251{
    252	int i;
    253
    254	for (i = 0; i < indio_dev->num_channels; i++)
    255		if (indio_dev->channels[i].scan_index == si)
    256			return &indio_dev->channels[i];
    257	return NULL;
    258}
    259
    260/* This turns up an awful lot */
    261ssize_t iio_read_const_attr(struct device *dev,
    262			    struct device_attribute *attr,
    263			    char *buf)
    264{
    265	return sysfs_emit(buf, "%s\n", to_iio_const_attr(attr)->string);
    266}
    267EXPORT_SYMBOL(iio_read_const_attr);
    268
    269/**
    270 * iio_device_set_clock() - Set current timestamping clock for the device
    271 * @indio_dev: IIO device structure containing the device
    272 * @clock_id: timestamping clock posix identifier to set.
    273 */
    274int iio_device_set_clock(struct iio_dev *indio_dev, clockid_t clock_id)
    275{
    276	int ret;
    277	struct iio_dev_opaque *iio_dev_opaque = to_iio_dev_opaque(indio_dev);
    278	const struct iio_event_interface *ev_int = iio_dev_opaque->event_interface;
    279
    280	ret = mutex_lock_interruptible(&indio_dev->mlock);
    281	if (ret)
    282		return ret;
    283	if ((ev_int && iio_event_enabled(ev_int)) ||
    284	    iio_buffer_enabled(indio_dev)) {
    285		mutex_unlock(&indio_dev->mlock);
    286		return -EBUSY;
    287	}
    288	iio_dev_opaque->clock_id = clock_id;
    289	mutex_unlock(&indio_dev->mlock);
    290
    291	return 0;
    292}
    293EXPORT_SYMBOL(iio_device_set_clock);
    294
    295/**
    296 * iio_device_get_clock() - Retrieve current timestamping clock for the device
    297 * @indio_dev: IIO device structure containing the device
    298 */
    299clockid_t iio_device_get_clock(const struct iio_dev *indio_dev)
    300{
    301	struct iio_dev_opaque *iio_dev_opaque = to_iio_dev_opaque(indio_dev);
    302
    303	return iio_dev_opaque->clock_id;
    304}
    305EXPORT_SYMBOL(iio_device_get_clock);
    306
    307/**
    308 * iio_get_time_ns() - utility function to get a time stamp for events etc
    309 * @indio_dev: device
    310 */
    311s64 iio_get_time_ns(const struct iio_dev *indio_dev)
    312{
    313	struct timespec64 tp;
    314
    315	switch (iio_device_get_clock(indio_dev)) {
    316	case CLOCK_REALTIME:
    317		return ktime_get_real_ns();
    318	case CLOCK_MONOTONIC:
    319		return ktime_get_ns();
    320	case CLOCK_MONOTONIC_RAW:
    321		return ktime_get_raw_ns();
    322	case CLOCK_REALTIME_COARSE:
    323		return ktime_to_ns(ktime_get_coarse_real());
    324	case CLOCK_MONOTONIC_COARSE:
    325		ktime_get_coarse_ts64(&tp);
    326		return timespec64_to_ns(&tp);
    327	case CLOCK_BOOTTIME:
    328		return ktime_get_boottime_ns();
    329	case CLOCK_TAI:
    330		return ktime_get_clocktai_ns();
    331	default:
    332		BUG();
    333	}
    334}
    335EXPORT_SYMBOL(iio_get_time_ns);
    336
    337/**
    338 * iio_get_time_res() - utility function to get time stamp clock resolution in
    339 *                      nano seconds.
    340 * @indio_dev: device
    341 */
    342unsigned int iio_get_time_res(const struct iio_dev *indio_dev)
    343{
    344	switch (iio_device_get_clock(indio_dev)) {
    345	case CLOCK_REALTIME:
    346	case CLOCK_MONOTONIC:
    347	case CLOCK_MONOTONIC_RAW:
    348	case CLOCK_BOOTTIME:
    349	case CLOCK_TAI:
    350		return hrtimer_resolution;
    351	case CLOCK_REALTIME_COARSE:
    352	case CLOCK_MONOTONIC_COARSE:
    353		return LOW_RES_NSEC;
    354	default:
    355		BUG();
    356	}
    357}
    358EXPORT_SYMBOL(iio_get_time_res);
    359
    360static int __init iio_init(void)
    361{
    362	int ret;
    363
    364	/* Register sysfs bus */
    365	ret  = bus_register(&iio_bus_type);
    366	if (ret < 0) {
    367		pr_err("could not register bus type\n");
    368		goto error_nothing;
    369	}
    370
    371	ret = alloc_chrdev_region(&iio_devt, 0, IIO_DEV_MAX, "iio");
    372	if (ret < 0) {
    373		pr_err("failed to allocate char dev region\n");
    374		goto error_unregister_bus_type;
    375	}
    376
    377	iio_debugfs_dentry = debugfs_create_dir("iio", NULL);
    378
    379	return 0;
    380
    381error_unregister_bus_type:
    382	bus_unregister(&iio_bus_type);
    383error_nothing:
    384	return ret;
    385}
    386
    387static void __exit iio_exit(void)
    388{
    389	if (iio_devt)
    390		unregister_chrdev_region(iio_devt, IIO_DEV_MAX);
    391	bus_unregister(&iio_bus_type);
    392	debugfs_remove(iio_debugfs_dentry);
    393}
    394
    395#if defined(CONFIG_DEBUG_FS)
    396static ssize_t iio_debugfs_read_reg(struct file *file, char __user *userbuf,
    397			      size_t count, loff_t *ppos)
    398{
    399	struct iio_dev *indio_dev = file->private_data;
    400	struct iio_dev_opaque *iio_dev_opaque = to_iio_dev_opaque(indio_dev);
    401	unsigned val = 0;
    402	int ret;
    403
    404	if (*ppos > 0)
    405		return simple_read_from_buffer(userbuf, count, ppos,
    406					       iio_dev_opaque->read_buf,
    407					       iio_dev_opaque->read_buf_len);
    408
    409	ret = indio_dev->info->debugfs_reg_access(indio_dev,
    410						  iio_dev_opaque->cached_reg_addr,
    411						  0, &val);
    412	if (ret) {
    413		dev_err(indio_dev->dev.parent, "%s: read failed\n", __func__);
    414		return ret;
    415	}
    416
    417	iio_dev_opaque->read_buf_len = snprintf(iio_dev_opaque->read_buf,
    418					      sizeof(iio_dev_opaque->read_buf),
    419					      "0x%X\n", val);
    420
    421	return simple_read_from_buffer(userbuf, count, ppos,
    422				       iio_dev_opaque->read_buf,
    423				       iio_dev_opaque->read_buf_len);
    424}
    425
    426static ssize_t iio_debugfs_write_reg(struct file *file,
    427		     const char __user *userbuf, size_t count, loff_t *ppos)
    428{
    429	struct iio_dev *indio_dev = file->private_data;
    430	struct iio_dev_opaque *iio_dev_opaque = to_iio_dev_opaque(indio_dev);
    431	unsigned reg, val;
    432	char buf[80];
    433	int ret;
    434
    435	count = min_t(size_t, count, (sizeof(buf)-1));
    436	if (copy_from_user(buf, userbuf, count))
    437		return -EFAULT;
    438
    439	buf[count] = 0;
    440
    441	ret = sscanf(buf, "%i %i", &reg, &val);
    442
    443	switch (ret) {
    444	case 1:
    445		iio_dev_opaque->cached_reg_addr = reg;
    446		break;
    447	case 2:
    448		iio_dev_opaque->cached_reg_addr = reg;
    449		ret = indio_dev->info->debugfs_reg_access(indio_dev, reg,
    450							  val, NULL);
    451		if (ret) {
    452			dev_err(indio_dev->dev.parent, "%s: write failed\n",
    453				__func__);
    454			return ret;
    455		}
    456		break;
    457	default:
    458		return -EINVAL;
    459	}
    460
    461	return count;
    462}
    463
    464static const struct file_operations iio_debugfs_reg_fops = {
    465	.open = simple_open,
    466	.read = iio_debugfs_read_reg,
    467	.write = iio_debugfs_write_reg,
    468};
    469
    470static void iio_device_unregister_debugfs(struct iio_dev *indio_dev)
    471{
    472	struct iio_dev_opaque *iio_dev_opaque = to_iio_dev_opaque(indio_dev);
    473	debugfs_remove_recursive(iio_dev_opaque->debugfs_dentry);
    474}
    475
    476static void iio_device_register_debugfs(struct iio_dev *indio_dev)
    477{
    478	struct iio_dev_opaque *iio_dev_opaque;
    479
    480	if (indio_dev->info->debugfs_reg_access == NULL)
    481		return;
    482
    483	if (!iio_debugfs_dentry)
    484		return;
    485
    486	iio_dev_opaque = to_iio_dev_opaque(indio_dev);
    487
    488	iio_dev_opaque->debugfs_dentry =
    489		debugfs_create_dir(dev_name(&indio_dev->dev),
    490				   iio_debugfs_dentry);
    491
    492	debugfs_create_file("direct_reg_access", 0644,
    493			    iio_dev_opaque->debugfs_dentry, indio_dev,
    494			    &iio_debugfs_reg_fops);
    495}
    496#else
    497static void iio_device_register_debugfs(struct iio_dev *indio_dev)
    498{
    499}
    500
    501static void iio_device_unregister_debugfs(struct iio_dev *indio_dev)
    502{
    503}
    504#endif /* CONFIG_DEBUG_FS */
    505
    506static ssize_t iio_read_channel_ext_info(struct device *dev,
    507				     struct device_attribute *attr,
    508				     char *buf)
    509{
    510	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
    511	struct iio_dev_attr *this_attr = to_iio_dev_attr(attr);
    512	const struct iio_chan_spec_ext_info *ext_info;
    513
    514	ext_info = &this_attr->c->ext_info[this_attr->address];
    515
    516	return ext_info->read(indio_dev, ext_info->private, this_attr->c, buf);
    517}
    518
    519static ssize_t iio_write_channel_ext_info(struct device *dev,
    520				     struct device_attribute *attr,
    521				     const char *buf,
    522					 size_t len)
    523{
    524	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
    525	struct iio_dev_attr *this_attr = to_iio_dev_attr(attr);
    526	const struct iio_chan_spec_ext_info *ext_info;
    527
    528	ext_info = &this_attr->c->ext_info[this_attr->address];
    529
    530	return ext_info->write(indio_dev, ext_info->private,
    531			       this_attr->c, buf, len);
    532}
    533
    534ssize_t iio_enum_available_read(struct iio_dev *indio_dev,
    535	uintptr_t priv, const struct iio_chan_spec *chan, char *buf)
    536{
    537	const struct iio_enum *e = (const struct iio_enum *)priv;
    538	unsigned int i;
    539	size_t len = 0;
    540
    541	if (!e->num_items)
    542		return 0;
    543
    544	for (i = 0; i < e->num_items; ++i) {
    545		if (!e->items[i])
    546			continue;
    547		len += sysfs_emit_at(buf, len, "%s ", e->items[i]);
    548	}
    549
    550	/* replace last space with a newline */
    551	buf[len - 1] = '\n';
    552
    553	return len;
    554}
    555EXPORT_SYMBOL_GPL(iio_enum_available_read);
    556
    557ssize_t iio_enum_read(struct iio_dev *indio_dev,
    558	uintptr_t priv, const struct iio_chan_spec *chan, char *buf)
    559{
    560	const struct iio_enum *e = (const struct iio_enum *)priv;
    561	int i;
    562
    563	if (!e->get)
    564		return -EINVAL;
    565
    566	i = e->get(indio_dev, chan);
    567	if (i < 0)
    568		return i;
    569	else if (i >= e->num_items || !e->items[i])
    570		return -EINVAL;
    571
    572	return sysfs_emit(buf, "%s\n", e->items[i]);
    573}
    574EXPORT_SYMBOL_GPL(iio_enum_read);
    575
    576ssize_t iio_enum_write(struct iio_dev *indio_dev,
    577	uintptr_t priv, const struct iio_chan_spec *chan, const char *buf,
    578	size_t len)
    579{
    580	const struct iio_enum *e = (const struct iio_enum *)priv;
    581	int ret;
    582
    583	if (!e->set)
    584		return -EINVAL;
    585
    586	ret = iio_sysfs_match_string_with_gaps(e->items, e->num_items, buf);
    587	if (ret < 0)
    588		return ret;
    589
    590	ret = e->set(indio_dev, chan, ret);
    591	return ret ? ret : len;
    592}
    593EXPORT_SYMBOL_GPL(iio_enum_write);
    594
    595static const struct iio_mount_matrix iio_mount_idmatrix = {
    596	.rotation = {
    597		"1", "0", "0",
    598		"0", "1", "0",
    599		"0", "0", "1"
    600	}
    601};
    602
    603static int iio_setup_mount_idmatrix(const struct device *dev,
    604				    struct iio_mount_matrix *matrix)
    605{
    606	*matrix = iio_mount_idmatrix;
    607	dev_info(dev, "mounting matrix not found: using identity...\n");
    608	return 0;
    609}
    610
    611ssize_t iio_show_mount_matrix(struct iio_dev *indio_dev, uintptr_t priv,
    612			      const struct iio_chan_spec *chan, char *buf)
    613{
    614	const struct iio_mount_matrix *mtx = ((iio_get_mount_matrix_t *)
    615					      priv)(indio_dev, chan);
    616
    617	if (IS_ERR(mtx))
    618		return PTR_ERR(mtx);
    619
    620	if (!mtx)
    621		mtx = &iio_mount_idmatrix;
    622
    623	return sysfs_emit(buf, "%s, %s, %s; %s, %s, %s; %s, %s, %s\n",
    624			  mtx->rotation[0], mtx->rotation[1], mtx->rotation[2],
    625			  mtx->rotation[3], mtx->rotation[4], mtx->rotation[5],
    626			  mtx->rotation[6], mtx->rotation[7], mtx->rotation[8]);
    627}
    628EXPORT_SYMBOL_GPL(iio_show_mount_matrix);
    629
    630/**
    631 * iio_read_mount_matrix() - retrieve iio device mounting matrix from
    632 *                           device "mount-matrix" property
    633 * @dev:	device the mounting matrix property is assigned to
    634 * @matrix:	where to store retrieved matrix
    635 *
    636 * If device is assigned no mounting matrix property, a default 3x3 identity
    637 * matrix will be filled in.
    638 *
    639 * Return: 0 if success, or a negative error code on failure.
    640 */
    641int iio_read_mount_matrix(struct device *dev, struct iio_mount_matrix *matrix)
    642{
    643	size_t len = ARRAY_SIZE(iio_mount_idmatrix.rotation);
    644	int err;
    645
    646	err = device_property_read_string_array(dev, "mount-matrix", matrix->rotation, len);
    647	if (err == len)
    648		return 0;
    649
    650	if (err >= 0)
    651		/* Invalid number of matrix entries. */
    652		return -EINVAL;
    653
    654	if (err != -EINVAL)
    655		/* Invalid matrix declaration format. */
    656		return err;
    657
    658	/* Matrix was not declared at all: fallback to identity. */
    659	return iio_setup_mount_idmatrix(dev, matrix);
    660}
    661EXPORT_SYMBOL(iio_read_mount_matrix);
    662
    663static ssize_t __iio_format_value(char *buf, size_t offset, unsigned int type,
    664				  int size, const int *vals)
    665{
    666	int tmp0, tmp1;
    667	s64 tmp2;
    668	bool scale_db = false;
    669
    670	switch (type) {
    671	case IIO_VAL_INT:
    672		return sysfs_emit_at(buf, offset, "%d", vals[0]);
    673	case IIO_VAL_INT_PLUS_MICRO_DB:
    674		scale_db = true;
    675		fallthrough;
    676	case IIO_VAL_INT_PLUS_MICRO:
    677		if (vals[1] < 0)
    678			return sysfs_emit_at(buf, offset, "-%d.%06u%s",
    679					     abs(vals[0]), -vals[1],
    680					     scale_db ? " dB" : "");
    681		else
    682			return sysfs_emit_at(buf, offset, "%d.%06u%s", vals[0],
    683					     vals[1], scale_db ? " dB" : "");
    684	case IIO_VAL_INT_PLUS_NANO:
    685		if (vals[1] < 0)
    686			return sysfs_emit_at(buf, offset, "-%d.%09u",
    687					     abs(vals[0]), -vals[1]);
    688		else
    689			return sysfs_emit_at(buf, offset, "%d.%09u", vals[0],
    690					     vals[1]);
    691	case IIO_VAL_FRACTIONAL:
    692		tmp2 = div_s64((s64)vals[0] * 1000000000LL, vals[1]);
    693		tmp1 = vals[1];
    694		tmp0 = (int)div_s64_rem(tmp2, 1000000000, &tmp1);
    695		if ((tmp2 < 0) && (tmp0 == 0))
    696			return sysfs_emit_at(buf, offset, "-0.%09u", abs(tmp1));
    697		else
    698			return sysfs_emit_at(buf, offset, "%d.%09u", tmp0,
    699					     abs(tmp1));
    700	case IIO_VAL_FRACTIONAL_LOG2:
    701		tmp2 = shift_right((s64)vals[0] * 1000000000LL, vals[1]);
    702		tmp0 = (int)div_s64_rem(tmp2, 1000000000LL, &tmp1);
    703		if (tmp0 == 0 && tmp2 < 0)
    704			return sysfs_emit_at(buf, offset, "-0.%09u", abs(tmp1));
    705		else
    706			return sysfs_emit_at(buf, offset, "%d.%09u", tmp0,
    707					     abs(tmp1));
    708	case IIO_VAL_INT_MULTIPLE:
    709	{
    710		int i;
    711		int l = 0;
    712
    713		for (i = 0; i < size; ++i)
    714			l += sysfs_emit_at(buf, offset + l, "%d ", vals[i]);
    715		return l;
    716	}
    717	case IIO_VAL_CHAR:
    718		return sysfs_emit_at(buf, offset, "%c", (char)vals[0]);
    719	case IIO_VAL_INT_64:
    720		tmp2 = (s64)((((u64)vals[1]) << 32) | (u32)vals[0]);
    721		return sysfs_emit_at(buf, offset, "%lld", tmp2);
    722	default:
    723		return 0;
    724	}
    725}
    726
    727/**
    728 * iio_format_value() - Formats a IIO value into its string representation
    729 * @buf:	The buffer to which the formatted value gets written
    730 *		which is assumed to be big enough (i.e. PAGE_SIZE).
    731 * @type:	One of the IIO_VAL_* constants. This decides how the val
    732 *		and val2 parameters are formatted.
    733 * @size:	Number of IIO value entries contained in vals
    734 * @vals:	Pointer to the values, exact meaning depends on the
    735 *		type parameter.
    736 *
    737 * Return: 0 by default, a negative number on failure or the
    738 *	   total number of characters written for a type that belongs
    739 *	   to the IIO_VAL_* constant.
    740 */
    741ssize_t iio_format_value(char *buf, unsigned int type, int size, int *vals)
    742{
    743	ssize_t len;
    744
    745	len = __iio_format_value(buf, 0, type, size, vals);
    746	if (len >= PAGE_SIZE - 1)
    747		return -EFBIG;
    748
    749	return len + sysfs_emit_at(buf, len, "\n");
    750}
    751EXPORT_SYMBOL_GPL(iio_format_value);
    752
    753static ssize_t iio_read_channel_label(struct device *dev,
    754				      struct device_attribute *attr,
    755				      char *buf)
    756{
    757	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
    758	struct iio_dev_attr *this_attr = to_iio_dev_attr(attr);
    759
    760	if (indio_dev->info->read_label)
    761		return indio_dev->info->read_label(indio_dev, this_attr->c, buf);
    762
    763	if (this_attr->c->extend_name)
    764		return sysfs_emit(buf, "%s\n", this_attr->c->extend_name);
    765
    766	return -EINVAL;
    767}
    768
    769static ssize_t iio_read_channel_info(struct device *dev,
    770				     struct device_attribute *attr,
    771				     char *buf)
    772{
    773	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
    774	struct iio_dev_attr *this_attr = to_iio_dev_attr(attr);
    775	int vals[INDIO_MAX_RAW_ELEMENTS];
    776	int ret;
    777	int val_len = 2;
    778
    779	if (indio_dev->info->read_raw_multi)
    780		ret = indio_dev->info->read_raw_multi(indio_dev, this_attr->c,
    781							INDIO_MAX_RAW_ELEMENTS,
    782							vals, &val_len,
    783							this_attr->address);
    784	else
    785		ret = indio_dev->info->read_raw(indio_dev, this_attr->c,
    786				    &vals[0], &vals[1], this_attr->address);
    787
    788	if (ret < 0)
    789		return ret;
    790
    791	return iio_format_value(buf, ret, val_len, vals);
    792}
    793
    794static ssize_t iio_format_list(char *buf, const int *vals, int type, int length,
    795			       const char *prefix, const char *suffix)
    796{
    797	ssize_t len;
    798	int stride;
    799	int i;
    800
    801	switch (type) {
    802	case IIO_VAL_INT:
    803		stride = 1;
    804		break;
    805	default:
    806		stride = 2;
    807		break;
    808	}
    809
    810	len = sysfs_emit(buf, prefix);
    811
    812	for (i = 0; i <= length - stride; i += stride) {
    813		if (i != 0) {
    814			len += sysfs_emit_at(buf, len, " ");
    815			if (len >= PAGE_SIZE)
    816				return -EFBIG;
    817		}
    818
    819		len += __iio_format_value(buf, len, type, stride, &vals[i]);
    820		if (len >= PAGE_SIZE)
    821			return -EFBIG;
    822	}
    823
    824	len += sysfs_emit_at(buf, len, "%s\n", suffix);
    825
    826	return len;
    827}
    828
    829static ssize_t iio_format_avail_list(char *buf, const int *vals,
    830				     int type, int length)
    831{
    832
    833	return iio_format_list(buf, vals, type, length, "", "");
    834}
    835
    836static ssize_t iio_format_avail_range(char *buf, const int *vals, int type)
    837{
    838	return iio_format_list(buf, vals, type, 3, "[", "]");
    839}
    840
    841static ssize_t iio_read_channel_info_avail(struct device *dev,
    842					   struct device_attribute *attr,
    843					   char *buf)
    844{
    845	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
    846	struct iio_dev_attr *this_attr = to_iio_dev_attr(attr);
    847	const int *vals;
    848	int ret;
    849	int length;
    850	int type;
    851
    852	ret = indio_dev->info->read_avail(indio_dev, this_attr->c,
    853					  &vals, &type, &length,
    854					  this_attr->address);
    855
    856	if (ret < 0)
    857		return ret;
    858	switch (ret) {
    859	case IIO_AVAIL_LIST:
    860		return iio_format_avail_list(buf, vals, type, length);
    861	case IIO_AVAIL_RANGE:
    862		return iio_format_avail_range(buf, vals, type);
    863	default:
    864		return -EINVAL;
    865	}
    866}
    867
    868/**
    869 * __iio_str_to_fixpoint() - Parse a fixed-point number from a string
    870 * @str: The string to parse
    871 * @fract_mult: Multiplier for the first decimal place, should be a power of 10
    872 * @integer: The integer part of the number
    873 * @fract: The fractional part of the number
    874 * @scale_db: True if this should parse as dB
    875 *
    876 * Returns 0 on success, or a negative error code if the string could not be
    877 * parsed.
    878 */
    879static int __iio_str_to_fixpoint(const char *str, int fract_mult,
    880				 int *integer, int *fract, bool scale_db)
    881{
    882	int i = 0, f = 0;
    883	bool integer_part = true, negative = false;
    884
    885	if (fract_mult == 0) {
    886		*fract = 0;
    887
    888		return kstrtoint(str, 0, integer);
    889	}
    890
    891	if (str[0] == '-') {
    892		negative = true;
    893		str++;
    894	} else if (str[0] == '+') {
    895		str++;
    896	}
    897
    898	while (*str) {
    899		if ('0' <= *str && *str <= '9') {
    900			if (integer_part) {
    901				i = i * 10 + *str - '0';
    902			} else {
    903				f += fract_mult * (*str - '0');
    904				fract_mult /= 10;
    905			}
    906		} else if (*str == '\n') {
    907			if (*(str + 1) == '\0')
    908				break;
    909			return -EINVAL;
    910		} else if (!strncmp(str, " dB", sizeof(" dB") - 1) && scale_db) {
    911			/* Ignore the dB suffix */
    912			str += sizeof(" dB") - 1;
    913			continue;
    914		} else if (!strncmp(str, "dB", sizeof("dB") - 1) && scale_db) {
    915			/* Ignore the dB suffix */
    916			str += sizeof("dB") - 1;
    917			continue;
    918		} else if (*str == '.' && integer_part) {
    919			integer_part = false;
    920		} else {
    921			return -EINVAL;
    922		}
    923		str++;
    924	}
    925
    926	if (negative) {
    927		if (i)
    928			i = -i;
    929		else
    930			f = -f;
    931	}
    932
    933	*integer = i;
    934	*fract = f;
    935
    936	return 0;
    937}
    938
    939/**
    940 * iio_str_to_fixpoint() - Parse a fixed-point number from a string
    941 * @str: The string to parse
    942 * @fract_mult: Multiplier for the first decimal place, should be a power of 10
    943 * @integer: The integer part of the number
    944 * @fract: The fractional part of the number
    945 *
    946 * Returns 0 on success, or a negative error code if the string could not be
    947 * parsed.
    948 */
    949int iio_str_to_fixpoint(const char *str, int fract_mult,
    950			int *integer, int *fract)
    951{
    952	return __iio_str_to_fixpoint(str, fract_mult, integer, fract, false);
    953}
    954EXPORT_SYMBOL_GPL(iio_str_to_fixpoint);
    955
    956static ssize_t iio_write_channel_info(struct device *dev,
    957				      struct device_attribute *attr,
    958				      const char *buf,
    959				      size_t len)
    960{
    961	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
    962	struct iio_dev_attr *this_attr = to_iio_dev_attr(attr);
    963	int ret, fract_mult = 100000;
    964	int integer, fract = 0;
    965	bool is_char = false;
    966	bool scale_db = false;
    967
    968	/* Assumes decimal - precision based on number of digits */
    969	if (!indio_dev->info->write_raw)
    970		return -EINVAL;
    971
    972	if (indio_dev->info->write_raw_get_fmt)
    973		switch (indio_dev->info->write_raw_get_fmt(indio_dev,
    974			this_attr->c, this_attr->address)) {
    975		case IIO_VAL_INT:
    976			fract_mult = 0;
    977			break;
    978		case IIO_VAL_INT_PLUS_MICRO_DB:
    979			scale_db = true;
    980			fallthrough;
    981		case IIO_VAL_INT_PLUS_MICRO:
    982			fract_mult = 100000;
    983			break;
    984		case IIO_VAL_INT_PLUS_NANO:
    985			fract_mult = 100000000;
    986			break;
    987		case IIO_VAL_CHAR:
    988			is_char = true;
    989			break;
    990		default:
    991			return -EINVAL;
    992		}
    993
    994	if (is_char) {
    995		char ch;
    996
    997		if (sscanf(buf, "%c", &ch) != 1)
    998			return -EINVAL;
    999		integer = ch;
   1000	} else {
   1001		ret = __iio_str_to_fixpoint(buf, fract_mult, &integer, &fract,
   1002					    scale_db);
   1003		if (ret)
   1004			return ret;
   1005	}
   1006
   1007	ret = indio_dev->info->write_raw(indio_dev, this_attr->c,
   1008					 integer, fract, this_attr->address);
   1009	if (ret)
   1010		return ret;
   1011
   1012	return len;
   1013}
   1014
   1015static
   1016int __iio_device_attr_init(struct device_attribute *dev_attr,
   1017			   const char *postfix,
   1018			   struct iio_chan_spec const *chan,
   1019			   ssize_t (*readfunc)(struct device *dev,
   1020					       struct device_attribute *attr,
   1021					       char *buf),
   1022			   ssize_t (*writefunc)(struct device *dev,
   1023						struct device_attribute *attr,
   1024						const char *buf,
   1025						size_t len),
   1026			   enum iio_shared_by shared_by)
   1027{
   1028	int ret = 0;
   1029	char *name = NULL;
   1030	char *full_postfix;
   1031	sysfs_attr_init(&dev_attr->attr);
   1032
   1033	/* Build up postfix of <extend_name>_<modifier>_postfix */
   1034	if (chan->modified && (shared_by == IIO_SEPARATE)) {
   1035		if (chan->extend_name)
   1036			full_postfix = kasprintf(GFP_KERNEL, "%s_%s_%s",
   1037						 iio_modifier_names[chan
   1038								    ->channel2],
   1039						 chan->extend_name,
   1040						 postfix);
   1041		else
   1042			full_postfix = kasprintf(GFP_KERNEL, "%s_%s",
   1043						 iio_modifier_names[chan
   1044								    ->channel2],
   1045						 postfix);
   1046	} else {
   1047		if (chan->extend_name == NULL || shared_by != IIO_SEPARATE)
   1048			full_postfix = kstrdup(postfix, GFP_KERNEL);
   1049		else
   1050			full_postfix = kasprintf(GFP_KERNEL,
   1051						 "%s_%s",
   1052						 chan->extend_name,
   1053						 postfix);
   1054	}
   1055	if (full_postfix == NULL)
   1056		return -ENOMEM;
   1057
   1058	if (chan->differential) { /* Differential can not have modifier */
   1059		switch (shared_by) {
   1060		case IIO_SHARED_BY_ALL:
   1061			name = kasprintf(GFP_KERNEL, "%s", full_postfix);
   1062			break;
   1063		case IIO_SHARED_BY_DIR:
   1064			name = kasprintf(GFP_KERNEL, "%s_%s",
   1065						iio_direction[chan->output],
   1066						full_postfix);
   1067			break;
   1068		case IIO_SHARED_BY_TYPE:
   1069			name = kasprintf(GFP_KERNEL, "%s_%s-%s_%s",
   1070					    iio_direction[chan->output],
   1071					    iio_chan_type_name_spec[chan->type],
   1072					    iio_chan_type_name_spec[chan->type],
   1073					    full_postfix);
   1074			break;
   1075		case IIO_SEPARATE:
   1076			if (!chan->indexed) {
   1077				WARN(1, "Differential channels must be indexed\n");
   1078				ret = -EINVAL;
   1079				goto error_free_full_postfix;
   1080			}
   1081			name = kasprintf(GFP_KERNEL,
   1082					    "%s_%s%d-%s%d_%s",
   1083					    iio_direction[chan->output],
   1084					    iio_chan_type_name_spec[chan->type],
   1085					    chan->channel,
   1086					    iio_chan_type_name_spec[chan->type],
   1087					    chan->channel2,
   1088					    full_postfix);
   1089			break;
   1090		}
   1091	} else { /* Single ended */
   1092		switch (shared_by) {
   1093		case IIO_SHARED_BY_ALL:
   1094			name = kasprintf(GFP_KERNEL, "%s", full_postfix);
   1095			break;
   1096		case IIO_SHARED_BY_DIR:
   1097			name = kasprintf(GFP_KERNEL, "%s_%s",
   1098						iio_direction[chan->output],
   1099						full_postfix);
   1100			break;
   1101		case IIO_SHARED_BY_TYPE:
   1102			name = kasprintf(GFP_KERNEL, "%s_%s_%s",
   1103					    iio_direction[chan->output],
   1104					    iio_chan_type_name_spec[chan->type],
   1105					    full_postfix);
   1106			break;
   1107
   1108		case IIO_SEPARATE:
   1109			if (chan->indexed)
   1110				name = kasprintf(GFP_KERNEL, "%s_%s%d_%s",
   1111						    iio_direction[chan->output],
   1112						    iio_chan_type_name_spec[chan->type],
   1113						    chan->channel,
   1114						    full_postfix);
   1115			else
   1116				name = kasprintf(GFP_KERNEL, "%s_%s_%s",
   1117						    iio_direction[chan->output],
   1118						    iio_chan_type_name_spec[chan->type],
   1119						    full_postfix);
   1120			break;
   1121		}
   1122	}
   1123	if (name == NULL) {
   1124		ret = -ENOMEM;
   1125		goto error_free_full_postfix;
   1126	}
   1127	dev_attr->attr.name = name;
   1128
   1129	if (readfunc) {
   1130		dev_attr->attr.mode |= S_IRUGO;
   1131		dev_attr->show = readfunc;
   1132	}
   1133
   1134	if (writefunc) {
   1135		dev_attr->attr.mode |= S_IWUSR;
   1136		dev_attr->store = writefunc;
   1137	}
   1138
   1139error_free_full_postfix:
   1140	kfree(full_postfix);
   1141
   1142	return ret;
   1143}
   1144
   1145static void __iio_device_attr_deinit(struct device_attribute *dev_attr)
   1146{
   1147	kfree(dev_attr->attr.name);
   1148}
   1149
   1150int __iio_add_chan_devattr(const char *postfix,
   1151			   struct iio_chan_spec const *chan,
   1152			   ssize_t (*readfunc)(struct device *dev,
   1153					       struct device_attribute *attr,
   1154					       char *buf),
   1155			   ssize_t (*writefunc)(struct device *dev,
   1156						struct device_attribute *attr,
   1157						const char *buf,
   1158						size_t len),
   1159			   u64 mask,
   1160			   enum iio_shared_by shared_by,
   1161			   struct device *dev,
   1162			   struct iio_buffer *buffer,
   1163			   struct list_head *attr_list)
   1164{
   1165	int ret;
   1166	struct iio_dev_attr *iio_attr, *t;
   1167
   1168	iio_attr = kzalloc(sizeof(*iio_attr), GFP_KERNEL);
   1169	if (iio_attr == NULL)
   1170		return -ENOMEM;
   1171	ret = __iio_device_attr_init(&iio_attr->dev_attr,
   1172				     postfix, chan,
   1173				     readfunc, writefunc, shared_by);
   1174	if (ret)
   1175		goto error_iio_dev_attr_free;
   1176	iio_attr->c = chan;
   1177	iio_attr->address = mask;
   1178	iio_attr->buffer = buffer;
   1179	list_for_each_entry(t, attr_list, l)
   1180		if (strcmp(t->dev_attr.attr.name,
   1181			   iio_attr->dev_attr.attr.name) == 0) {
   1182			if (shared_by == IIO_SEPARATE)
   1183				dev_err(dev, "tried to double register : %s\n",
   1184					t->dev_attr.attr.name);
   1185			ret = -EBUSY;
   1186			goto error_device_attr_deinit;
   1187		}
   1188	list_add(&iio_attr->l, attr_list);
   1189
   1190	return 0;
   1191
   1192error_device_attr_deinit:
   1193	__iio_device_attr_deinit(&iio_attr->dev_attr);
   1194error_iio_dev_attr_free:
   1195	kfree(iio_attr);
   1196	return ret;
   1197}
   1198
   1199static int iio_device_add_channel_label(struct iio_dev *indio_dev,
   1200					 struct iio_chan_spec const *chan)
   1201{
   1202	struct iio_dev_opaque *iio_dev_opaque = to_iio_dev_opaque(indio_dev);
   1203	int ret;
   1204
   1205	if (!indio_dev->info->read_label && !chan->extend_name)
   1206		return 0;
   1207
   1208	ret = __iio_add_chan_devattr("label",
   1209				     chan,
   1210				     &iio_read_channel_label,
   1211				     NULL,
   1212				     0,
   1213				     IIO_SEPARATE,
   1214				     &indio_dev->dev,
   1215				     NULL,
   1216				     &iio_dev_opaque->channel_attr_list);
   1217	if (ret < 0)
   1218		return ret;
   1219
   1220	return 1;
   1221}
   1222
   1223static int iio_device_add_info_mask_type(struct iio_dev *indio_dev,
   1224					 struct iio_chan_spec const *chan,
   1225					 enum iio_shared_by shared_by,
   1226					 const long *infomask)
   1227{
   1228	struct iio_dev_opaque *iio_dev_opaque = to_iio_dev_opaque(indio_dev);
   1229	int i, ret, attrcount = 0;
   1230
   1231	for_each_set_bit(i, infomask, sizeof(*infomask)*8) {
   1232		if (i >= ARRAY_SIZE(iio_chan_info_postfix))
   1233			return -EINVAL;
   1234		ret = __iio_add_chan_devattr(iio_chan_info_postfix[i],
   1235					     chan,
   1236					     &iio_read_channel_info,
   1237					     &iio_write_channel_info,
   1238					     i,
   1239					     shared_by,
   1240					     &indio_dev->dev,
   1241					     NULL,
   1242					     &iio_dev_opaque->channel_attr_list);
   1243		if ((ret == -EBUSY) && (shared_by != IIO_SEPARATE))
   1244			continue;
   1245		else if (ret < 0)
   1246			return ret;
   1247		attrcount++;
   1248	}
   1249
   1250	return attrcount;
   1251}
   1252
   1253static int iio_device_add_info_mask_type_avail(struct iio_dev *indio_dev,
   1254					       struct iio_chan_spec const *chan,
   1255					       enum iio_shared_by shared_by,
   1256					       const long *infomask)
   1257{
   1258	struct iio_dev_opaque *iio_dev_opaque = to_iio_dev_opaque(indio_dev);
   1259	int i, ret, attrcount = 0;
   1260	char *avail_postfix;
   1261
   1262	for_each_set_bit(i, infomask, sizeof(*infomask) * 8) {
   1263		if (i >= ARRAY_SIZE(iio_chan_info_postfix))
   1264			return -EINVAL;
   1265		avail_postfix = kasprintf(GFP_KERNEL,
   1266					  "%s_available",
   1267					  iio_chan_info_postfix[i]);
   1268		if (!avail_postfix)
   1269			return -ENOMEM;
   1270
   1271		ret = __iio_add_chan_devattr(avail_postfix,
   1272					     chan,
   1273					     &iio_read_channel_info_avail,
   1274					     NULL,
   1275					     i,
   1276					     shared_by,
   1277					     &indio_dev->dev,
   1278					     NULL,
   1279					     &iio_dev_opaque->channel_attr_list);
   1280		kfree(avail_postfix);
   1281		if ((ret == -EBUSY) && (shared_by != IIO_SEPARATE))
   1282			continue;
   1283		else if (ret < 0)
   1284			return ret;
   1285		attrcount++;
   1286	}
   1287
   1288	return attrcount;
   1289}
   1290
   1291static int iio_device_add_channel_sysfs(struct iio_dev *indio_dev,
   1292					struct iio_chan_spec const *chan)
   1293{
   1294	struct iio_dev_opaque *iio_dev_opaque = to_iio_dev_opaque(indio_dev);
   1295	int ret, attrcount = 0;
   1296	const struct iio_chan_spec_ext_info *ext_info;
   1297
   1298	if (chan->channel < 0)
   1299		return 0;
   1300	ret = iio_device_add_info_mask_type(indio_dev, chan,
   1301					    IIO_SEPARATE,
   1302					    &chan->info_mask_separate);
   1303	if (ret < 0)
   1304		return ret;
   1305	attrcount += ret;
   1306
   1307	ret = iio_device_add_info_mask_type_avail(indio_dev, chan,
   1308						  IIO_SEPARATE,
   1309						  &chan->
   1310						  info_mask_separate_available);
   1311	if (ret < 0)
   1312		return ret;
   1313	attrcount += ret;
   1314
   1315	ret = iio_device_add_info_mask_type(indio_dev, chan,
   1316					    IIO_SHARED_BY_TYPE,
   1317					    &chan->info_mask_shared_by_type);
   1318	if (ret < 0)
   1319		return ret;
   1320	attrcount += ret;
   1321
   1322	ret = iio_device_add_info_mask_type_avail(indio_dev, chan,
   1323						  IIO_SHARED_BY_TYPE,
   1324						  &chan->
   1325						  info_mask_shared_by_type_available);
   1326	if (ret < 0)
   1327		return ret;
   1328	attrcount += ret;
   1329
   1330	ret = iio_device_add_info_mask_type(indio_dev, chan,
   1331					    IIO_SHARED_BY_DIR,
   1332					    &chan->info_mask_shared_by_dir);
   1333	if (ret < 0)
   1334		return ret;
   1335	attrcount += ret;
   1336
   1337	ret = iio_device_add_info_mask_type_avail(indio_dev, chan,
   1338						  IIO_SHARED_BY_DIR,
   1339						  &chan->info_mask_shared_by_dir_available);
   1340	if (ret < 0)
   1341		return ret;
   1342	attrcount += ret;
   1343
   1344	ret = iio_device_add_info_mask_type(indio_dev, chan,
   1345					    IIO_SHARED_BY_ALL,
   1346					    &chan->info_mask_shared_by_all);
   1347	if (ret < 0)
   1348		return ret;
   1349	attrcount += ret;
   1350
   1351	ret = iio_device_add_info_mask_type_avail(indio_dev, chan,
   1352						  IIO_SHARED_BY_ALL,
   1353						  &chan->info_mask_shared_by_all_available);
   1354	if (ret < 0)
   1355		return ret;
   1356	attrcount += ret;
   1357
   1358	ret = iio_device_add_channel_label(indio_dev, chan);
   1359	if (ret < 0)
   1360		return ret;
   1361	attrcount += ret;
   1362
   1363	if (chan->ext_info) {
   1364		unsigned int i = 0;
   1365		for (ext_info = chan->ext_info; ext_info->name; ext_info++) {
   1366			ret = __iio_add_chan_devattr(ext_info->name,
   1367					chan,
   1368					ext_info->read ?
   1369					    &iio_read_channel_ext_info : NULL,
   1370					ext_info->write ?
   1371					    &iio_write_channel_ext_info : NULL,
   1372					i,
   1373					ext_info->shared,
   1374					&indio_dev->dev,
   1375					NULL,
   1376					&iio_dev_opaque->channel_attr_list);
   1377			i++;
   1378			if (ret == -EBUSY && ext_info->shared)
   1379				continue;
   1380
   1381			if (ret)
   1382				return ret;
   1383
   1384			attrcount++;
   1385		}
   1386	}
   1387
   1388	return attrcount;
   1389}
   1390
   1391/**
   1392 * iio_free_chan_devattr_list() - Free a list of IIO device attributes
   1393 * @attr_list: List of IIO device attributes
   1394 *
   1395 * This function frees the memory allocated for each of the IIO device
   1396 * attributes in the list.
   1397 */
   1398void iio_free_chan_devattr_list(struct list_head *attr_list)
   1399{
   1400	struct iio_dev_attr *p, *n;
   1401
   1402	list_for_each_entry_safe(p, n, attr_list, l) {
   1403		kfree_const(p->dev_attr.attr.name);
   1404		list_del(&p->l);
   1405		kfree(p);
   1406	}
   1407}
   1408
   1409static ssize_t iio_show_dev_name(struct device *dev,
   1410				 struct device_attribute *attr,
   1411				 char *buf)
   1412{
   1413	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
   1414	return sysfs_emit(buf, "%s\n", indio_dev->name);
   1415}
   1416
   1417static DEVICE_ATTR(name, S_IRUGO, iio_show_dev_name, NULL);
   1418
   1419static ssize_t iio_show_dev_label(struct device *dev,
   1420				 struct device_attribute *attr,
   1421				 char *buf)
   1422{
   1423	struct iio_dev *indio_dev = dev_to_iio_dev(dev);
   1424	return sysfs_emit(buf, "%s\n", indio_dev->label);
   1425}
   1426
   1427static DEVICE_ATTR(label, S_IRUGO, iio_show_dev_label, NULL);
   1428
   1429static ssize_t iio_show_timestamp_clock(struct device *dev,
   1430					struct device_attribute *attr,
   1431					char *buf)
   1432{
   1433	const struct iio_dev *indio_dev = dev_to_iio_dev(dev);
   1434	const clockid_t clk = iio_device_get_clock(indio_dev);
   1435	const char *name;
   1436	ssize_t sz;
   1437
   1438	switch (clk) {
   1439	case CLOCK_REALTIME:
   1440		name = "realtime\n";
   1441		sz = sizeof("realtime\n");
   1442		break;
   1443	case CLOCK_MONOTONIC:
   1444		name = "monotonic\n";
   1445		sz = sizeof("monotonic\n");
   1446		break;
   1447	case CLOCK_MONOTONIC_RAW:
   1448		name = "monotonic_raw\n";
   1449		sz = sizeof("monotonic_raw\n");
   1450		break;
   1451	case CLOCK_REALTIME_COARSE:
   1452		name = "realtime_coarse\n";
   1453		sz = sizeof("realtime_coarse\n");
   1454		break;
   1455	case CLOCK_MONOTONIC_COARSE:
   1456		name = "monotonic_coarse\n";
   1457		sz = sizeof("monotonic_coarse\n");
   1458		break;
   1459	case CLOCK_BOOTTIME:
   1460		name = "boottime\n";
   1461		sz = sizeof("boottime\n");
   1462		break;
   1463	case CLOCK_TAI:
   1464		name = "tai\n";
   1465		sz = sizeof("tai\n");
   1466		break;
   1467	default:
   1468		BUG();
   1469	}
   1470
   1471	memcpy(buf, name, sz);
   1472	return sz;
   1473}
   1474
   1475static ssize_t iio_store_timestamp_clock(struct device *dev,
   1476					 struct device_attribute *attr,
   1477					 const char *buf, size_t len)
   1478{
   1479	clockid_t clk;
   1480	int ret;
   1481
   1482	if (sysfs_streq(buf, "realtime"))
   1483		clk = CLOCK_REALTIME;
   1484	else if (sysfs_streq(buf, "monotonic"))
   1485		clk = CLOCK_MONOTONIC;
   1486	else if (sysfs_streq(buf, "monotonic_raw"))
   1487		clk = CLOCK_MONOTONIC_RAW;
   1488	else if (sysfs_streq(buf, "realtime_coarse"))
   1489		clk = CLOCK_REALTIME_COARSE;
   1490	else if (sysfs_streq(buf, "monotonic_coarse"))
   1491		clk = CLOCK_MONOTONIC_COARSE;
   1492	else if (sysfs_streq(buf, "boottime"))
   1493		clk = CLOCK_BOOTTIME;
   1494	else if (sysfs_streq(buf, "tai"))
   1495		clk = CLOCK_TAI;
   1496	else
   1497		return -EINVAL;
   1498
   1499	ret = iio_device_set_clock(dev_to_iio_dev(dev), clk);
   1500	if (ret)
   1501		return ret;
   1502
   1503	return len;
   1504}
   1505
   1506int iio_device_register_sysfs_group(struct iio_dev *indio_dev,
   1507				    const struct attribute_group *group)
   1508{
   1509	struct iio_dev_opaque *iio_dev_opaque = to_iio_dev_opaque(indio_dev);
   1510	const struct attribute_group **new, **old = iio_dev_opaque->groups;
   1511	unsigned int cnt = iio_dev_opaque->groupcounter;
   1512
   1513	new = krealloc(old, sizeof(*new) * (cnt + 2), GFP_KERNEL);
   1514	if (!new)
   1515		return -ENOMEM;
   1516
   1517	new[iio_dev_opaque->groupcounter++] = group;
   1518	new[iio_dev_opaque->groupcounter] = NULL;
   1519
   1520	iio_dev_opaque->groups = new;
   1521
   1522	return 0;
   1523}
   1524
   1525static DEVICE_ATTR(current_timestamp_clock, S_IRUGO | S_IWUSR,
   1526		   iio_show_timestamp_clock, iio_store_timestamp_clock);
   1527
   1528static int iio_device_register_sysfs(struct iio_dev *indio_dev)
   1529{
   1530	struct iio_dev_opaque *iio_dev_opaque = to_iio_dev_opaque(indio_dev);
   1531	int i, ret = 0, attrcount, attrn, attrcount_orig = 0;
   1532	struct iio_dev_attr *p;
   1533	struct attribute **attr, *clk = NULL;
   1534
   1535	/* First count elements in any existing group */
   1536	if (indio_dev->info->attrs) {
   1537		attr = indio_dev->info->attrs->attrs;
   1538		while (*attr++ != NULL)
   1539			attrcount_orig++;
   1540	}
   1541	attrcount = attrcount_orig;
   1542	/*
   1543	 * New channel registration method - relies on the fact a group does
   1544	 * not need to be initialized if its name is NULL.
   1545	 */
   1546	if (indio_dev->channels)
   1547		for (i = 0; i < indio_dev->num_channels; i++) {
   1548			const struct iio_chan_spec *chan =
   1549				&indio_dev->channels[i];
   1550
   1551			if (chan->type == IIO_TIMESTAMP)
   1552				clk = &dev_attr_current_timestamp_clock.attr;
   1553
   1554			ret = iio_device_add_channel_sysfs(indio_dev, chan);
   1555			if (ret < 0)
   1556				goto error_clear_attrs;
   1557			attrcount += ret;
   1558		}
   1559
   1560	if (iio_dev_opaque->event_interface)
   1561		clk = &dev_attr_current_timestamp_clock.attr;
   1562
   1563	if (indio_dev->name)
   1564		attrcount++;
   1565	if (indio_dev->label)
   1566		attrcount++;
   1567	if (clk)
   1568		attrcount++;
   1569
   1570	iio_dev_opaque->chan_attr_group.attrs =
   1571		kcalloc(attrcount + 1,
   1572			sizeof(iio_dev_opaque->chan_attr_group.attrs[0]),
   1573			GFP_KERNEL);
   1574	if (iio_dev_opaque->chan_attr_group.attrs == NULL) {
   1575		ret = -ENOMEM;
   1576		goto error_clear_attrs;
   1577	}
   1578	/* Copy across original attributes */
   1579	if (indio_dev->info->attrs) {
   1580		memcpy(iio_dev_opaque->chan_attr_group.attrs,
   1581		       indio_dev->info->attrs->attrs,
   1582		       sizeof(iio_dev_opaque->chan_attr_group.attrs[0])
   1583		       *attrcount_orig);
   1584		iio_dev_opaque->chan_attr_group.is_visible =
   1585			indio_dev->info->attrs->is_visible;
   1586	}
   1587	attrn = attrcount_orig;
   1588	/* Add all elements from the list. */
   1589	list_for_each_entry(p, &iio_dev_opaque->channel_attr_list, l)
   1590		iio_dev_opaque->chan_attr_group.attrs[attrn++] = &p->dev_attr.attr;
   1591	if (indio_dev->name)
   1592		iio_dev_opaque->chan_attr_group.attrs[attrn++] = &dev_attr_name.attr;
   1593	if (indio_dev->label)
   1594		iio_dev_opaque->chan_attr_group.attrs[attrn++] = &dev_attr_label.attr;
   1595	if (clk)
   1596		iio_dev_opaque->chan_attr_group.attrs[attrn++] = clk;
   1597
   1598	ret = iio_device_register_sysfs_group(indio_dev,
   1599					      &iio_dev_opaque->chan_attr_group);
   1600	if (ret)
   1601		goto error_clear_attrs;
   1602
   1603	return 0;
   1604
   1605error_clear_attrs:
   1606	iio_free_chan_devattr_list(&iio_dev_opaque->channel_attr_list);
   1607
   1608	return ret;
   1609}
   1610
   1611static void iio_device_unregister_sysfs(struct iio_dev *indio_dev)
   1612{
   1613	struct iio_dev_opaque *iio_dev_opaque = to_iio_dev_opaque(indio_dev);
   1614
   1615	iio_free_chan_devattr_list(&iio_dev_opaque->channel_attr_list);
   1616	kfree(iio_dev_opaque->chan_attr_group.attrs);
   1617	iio_dev_opaque->chan_attr_group.attrs = NULL;
   1618	kfree(iio_dev_opaque->groups);
   1619	iio_dev_opaque->groups = NULL;
   1620}
   1621
   1622static void iio_dev_release(struct device *device)
   1623{
   1624	struct iio_dev *indio_dev = dev_to_iio_dev(device);
   1625	struct iio_dev_opaque *iio_dev_opaque = to_iio_dev_opaque(indio_dev);
   1626
   1627	if (indio_dev->modes & INDIO_ALL_TRIGGERED_MODES)
   1628		iio_device_unregister_trigger_consumer(indio_dev);
   1629	iio_device_unregister_eventset(indio_dev);
   1630	iio_device_unregister_sysfs(indio_dev);
   1631
   1632	iio_device_detach_buffers(indio_dev);
   1633
   1634	ida_simple_remove(&iio_ida, iio_dev_opaque->id);
   1635	kfree(iio_dev_opaque);
   1636}
   1637
   1638const struct device_type iio_device_type = {
   1639	.name = "iio_device",
   1640	.release = iio_dev_release,
   1641};
   1642
   1643/**
   1644 * iio_device_alloc() - allocate an iio_dev from a driver
   1645 * @parent:		Parent device.
   1646 * @sizeof_priv:	Space to allocate for private structure.
   1647 **/
   1648struct iio_dev *iio_device_alloc(struct device *parent, int sizeof_priv)
   1649{
   1650	struct iio_dev_opaque *iio_dev_opaque;
   1651	struct iio_dev *indio_dev;
   1652	size_t alloc_size;
   1653
   1654	alloc_size = sizeof(struct iio_dev_opaque);
   1655	if (sizeof_priv) {
   1656		alloc_size = ALIGN(alloc_size, IIO_ALIGN);
   1657		alloc_size += sizeof_priv;
   1658	}
   1659
   1660	iio_dev_opaque = kzalloc(alloc_size, GFP_KERNEL);
   1661	if (!iio_dev_opaque)
   1662		return NULL;
   1663
   1664	indio_dev = &iio_dev_opaque->indio_dev;
   1665	indio_dev->priv = (char *)iio_dev_opaque +
   1666		ALIGN(sizeof(struct iio_dev_opaque), IIO_ALIGN);
   1667
   1668	indio_dev->dev.parent = parent;
   1669	indio_dev->dev.type = &iio_device_type;
   1670	indio_dev->dev.bus = &iio_bus_type;
   1671	device_initialize(&indio_dev->dev);
   1672	mutex_init(&indio_dev->mlock);
   1673	mutex_init(&iio_dev_opaque->info_exist_lock);
   1674	INIT_LIST_HEAD(&iio_dev_opaque->channel_attr_list);
   1675
   1676	iio_dev_opaque->id = ida_simple_get(&iio_ida, 0, 0, GFP_KERNEL);
   1677	if (iio_dev_opaque->id < 0) {
   1678		/* cannot use a dev_err as the name isn't available */
   1679		pr_err("failed to get device id\n");
   1680		kfree(iio_dev_opaque);
   1681		return NULL;
   1682	}
   1683
   1684	if (dev_set_name(&indio_dev->dev, "iio:device%d", iio_dev_opaque->id)) {
   1685		ida_simple_remove(&iio_ida, iio_dev_opaque->id);
   1686		kfree(iio_dev_opaque);
   1687		return NULL;
   1688	}
   1689
   1690	INIT_LIST_HEAD(&iio_dev_opaque->buffer_list);
   1691	INIT_LIST_HEAD(&iio_dev_opaque->ioctl_handlers);
   1692
   1693	return indio_dev;
   1694}
   1695EXPORT_SYMBOL(iio_device_alloc);
   1696
   1697/**
   1698 * iio_device_free() - free an iio_dev from a driver
   1699 * @dev:		the iio_dev associated with the device
   1700 **/
   1701void iio_device_free(struct iio_dev *dev)
   1702{
   1703	if (dev)
   1704		put_device(&dev->dev);
   1705}
   1706EXPORT_SYMBOL(iio_device_free);
   1707
   1708static void devm_iio_device_release(void *iio_dev)
   1709{
   1710	iio_device_free(iio_dev);
   1711}
   1712
   1713/**
   1714 * devm_iio_device_alloc - Resource-managed iio_device_alloc()
   1715 * @parent:		Device to allocate iio_dev for, and parent for this IIO device
   1716 * @sizeof_priv:	Space to allocate for private structure.
   1717 *
   1718 * Managed iio_device_alloc. iio_dev allocated with this function is
   1719 * automatically freed on driver detach.
   1720 *
   1721 * RETURNS:
   1722 * Pointer to allocated iio_dev on success, NULL on failure.
   1723 */
   1724struct iio_dev *devm_iio_device_alloc(struct device *parent, int sizeof_priv)
   1725{
   1726	struct iio_dev *iio_dev;
   1727	int ret;
   1728
   1729	iio_dev = iio_device_alloc(parent, sizeof_priv);
   1730	if (!iio_dev)
   1731		return NULL;
   1732
   1733	ret = devm_add_action_or_reset(parent, devm_iio_device_release,
   1734				       iio_dev);
   1735	if (ret)
   1736		return NULL;
   1737
   1738	return iio_dev;
   1739}
   1740EXPORT_SYMBOL_GPL(devm_iio_device_alloc);
   1741
   1742/**
   1743 * iio_chrdev_open() - chrdev file open for buffer access and ioctls
   1744 * @inode:	Inode structure for identifying the device in the file system
   1745 * @filp:	File structure for iio device used to keep and later access
   1746 *		private data
   1747 *
   1748 * Return: 0 on success or -EBUSY if the device is already opened
   1749 **/
   1750static int iio_chrdev_open(struct inode *inode, struct file *filp)
   1751{
   1752	struct iio_dev_opaque *iio_dev_opaque =
   1753		container_of(inode->i_cdev, struct iio_dev_opaque, chrdev);
   1754	struct iio_dev *indio_dev = &iio_dev_opaque->indio_dev;
   1755	struct iio_dev_buffer_pair *ib;
   1756
   1757	if (test_and_set_bit(IIO_BUSY_BIT_POS, &iio_dev_opaque->flags))
   1758		return -EBUSY;
   1759
   1760	iio_device_get(indio_dev);
   1761
   1762	ib = kmalloc(sizeof(*ib), GFP_KERNEL);
   1763	if (!ib) {
   1764		iio_device_put(indio_dev);
   1765		clear_bit(IIO_BUSY_BIT_POS, &iio_dev_opaque->flags);
   1766		return -ENOMEM;
   1767	}
   1768
   1769	ib->indio_dev = indio_dev;
   1770	ib->buffer = indio_dev->buffer;
   1771
   1772	filp->private_data = ib;
   1773
   1774	return 0;
   1775}
   1776
   1777/**
   1778 * iio_chrdev_release() - chrdev file close buffer access and ioctls
   1779 * @inode:	Inode structure pointer for the char device
   1780 * @filp:	File structure pointer for the char device
   1781 *
   1782 * Return: 0 for successful release
   1783 */
   1784static int iio_chrdev_release(struct inode *inode, struct file *filp)
   1785{
   1786	struct iio_dev_buffer_pair *ib = filp->private_data;
   1787	struct iio_dev_opaque *iio_dev_opaque =
   1788		container_of(inode->i_cdev, struct iio_dev_opaque, chrdev);
   1789	struct iio_dev *indio_dev = &iio_dev_opaque->indio_dev;
   1790	kfree(ib);
   1791	clear_bit(IIO_BUSY_BIT_POS, &iio_dev_opaque->flags);
   1792	iio_device_put(indio_dev);
   1793
   1794	return 0;
   1795}
   1796
   1797void iio_device_ioctl_handler_register(struct iio_dev *indio_dev,
   1798				       struct iio_ioctl_handler *h)
   1799{
   1800	struct iio_dev_opaque *iio_dev_opaque = to_iio_dev_opaque(indio_dev);
   1801
   1802	list_add_tail(&h->entry, &iio_dev_opaque->ioctl_handlers);
   1803}
   1804
   1805void iio_device_ioctl_handler_unregister(struct iio_ioctl_handler *h)
   1806{
   1807	list_del(&h->entry);
   1808}
   1809
   1810static long iio_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
   1811{
   1812	struct iio_dev_buffer_pair *ib = filp->private_data;
   1813	struct iio_dev *indio_dev = ib->indio_dev;
   1814	struct iio_dev_opaque *iio_dev_opaque = to_iio_dev_opaque(indio_dev);
   1815	struct iio_ioctl_handler *h;
   1816	int ret = -ENODEV;
   1817
   1818	mutex_lock(&iio_dev_opaque->info_exist_lock);
   1819
   1820	/**
   1821	 * The NULL check here is required to prevent crashing when a device
   1822	 * is being removed while userspace would still have open file handles
   1823	 * to try to access this device.
   1824	 */
   1825	if (!indio_dev->info)
   1826		goto out_unlock;
   1827
   1828	list_for_each_entry(h, &iio_dev_opaque->ioctl_handlers, entry) {
   1829		ret = h->ioctl(indio_dev, filp, cmd, arg);
   1830		if (ret != IIO_IOCTL_UNHANDLED)
   1831			break;
   1832	}
   1833
   1834	if (ret == IIO_IOCTL_UNHANDLED)
   1835		ret = -ENODEV;
   1836
   1837out_unlock:
   1838	mutex_unlock(&iio_dev_opaque->info_exist_lock);
   1839
   1840	return ret;
   1841}
   1842
   1843static const struct file_operations iio_buffer_fileops = {
   1844	.owner = THIS_MODULE,
   1845	.llseek = noop_llseek,
   1846	.read = iio_buffer_read_outer_addr,
   1847	.write = iio_buffer_write_outer_addr,
   1848	.poll = iio_buffer_poll_addr,
   1849	.unlocked_ioctl = iio_ioctl,
   1850	.compat_ioctl = compat_ptr_ioctl,
   1851	.open = iio_chrdev_open,
   1852	.release = iio_chrdev_release,
   1853};
   1854
   1855static const struct file_operations iio_event_fileops = {
   1856	.owner = THIS_MODULE,
   1857	.llseek = noop_llseek,
   1858	.unlocked_ioctl = iio_ioctl,
   1859	.compat_ioctl = compat_ptr_ioctl,
   1860	.open = iio_chrdev_open,
   1861	.release = iio_chrdev_release,
   1862};
   1863
   1864static int iio_check_unique_scan_index(struct iio_dev *indio_dev)
   1865{
   1866	int i, j;
   1867	const struct iio_chan_spec *channels = indio_dev->channels;
   1868
   1869	if (!(indio_dev->modes & INDIO_ALL_BUFFER_MODES))
   1870		return 0;
   1871
   1872	for (i = 0; i < indio_dev->num_channels - 1; i++) {
   1873		if (channels[i].scan_index < 0)
   1874			continue;
   1875		for (j = i + 1; j < indio_dev->num_channels; j++)
   1876			if (channels[i].scan_index == channels[j].scan_index) {
   1877				dev_err(&indio_dev->dev,
   1878					"Duplicate scan index %d\n",
   1879					channels[i].scan_index);
   1880				return -EINVAL;
   1881			}
   1882	}
   1883
   1884	return 0;
   1885}
   1886
   1887static int iio_check_extended_name(const struct iio_dev *indio_dev)
   1888{
   1889	unsigned int i;
   1890
   1891	if (!indio_dev->info->read_label)
   1892		return 0;
   1893
   1894	for (i = 0; i < indio_dev->num_channels; i++) {
   1895		if (indio_dev->channels[i].extend_name) {
   1896			dev_err(&indio_dev->dev,
   1897				"Cannot use labels and extend_name at the same time\n");
   1898			return -EINVAL;
   1899		}
   1900	}
   1901
   1902	return 0;
   1903}
   1904
   1905static const struct iio_buffer_setup_ops noop_ring_setup_ops;
   1906
   1907int __iio_device_register(struct iio_dev *indio_dev, struct module *this_mod)
   1908{
   1909	struct iio_dev_opaque *iio_dev_opaque = to_iio_dev_opaque(indio_dev);
   1910	struct fwnode_handle *fwnode;
   1911	int ret;
   1912
   1913	if (!indio_dev->info)
   1914		return -EINVAL;
   1915
   1916	iio_dev_opaque->driver_module = this_mod;
   1917
   1918	/* If the calling driver did not initialize firmware node, do it here */
   1919	if (dev_fwnode(&indio_dev->dev))
   1920		fwnode = dev_fwnode(&indio_dev->dev);
   1921	else
   1922		fwnode = dev_fwnode(indio_dev->dev.parent);
   1923	device_set_node(&indio_dev->dev, fwnode);
   1924
   1925	fwnode_property_read_string(fwnode, "label", &indio_dev->label);
   1926
   1927	ret = iio_check_unique_scan_index(indio_dev);
   1928	if (ret < 0)
   1929		return ret;
   1930
   1931	ret = iio_check_extended_name(indio_dev);
   1932	if (ret < 0)
   1933		return ret;
   1934
   1935	iio_device_register_debugfs(indio_dev);
   1936
   1937	ret = iio_buffers_alloc_sysfs_and_mask(indio_dev);
   1938	if (ret) {
   1939		dev_err(indio_dev->dev.parent,
   1940			"Failed to create buffer sysfs interfaces\n");
   1941		goto error_unreg_debugfs;
   1942	}
   1943
   1944	ret = iio_device_register_sysfs(indio_dev);
   1945	if (ret) {
   1946		dev_err(indio_dev->dev.parent,
   1947			"Failed to register sysfs interfaces\n");
   1948		goto error_buffer_free_sysfs;
   1949	}
   1950	ret = iio_device_register_eventset(indio_dev);
   1951	if (ret) {
   1952		dev_err(indio_dev->dev.parent,
   1953			"Failed to register event set\n");
   1954		goto error_free_sysfs;
   1955	}
   1956	if (indio_dev->modes & INDIO_ALL_TRIGGERED_MODES)
   1957		iio_device_register_trigger_consumer(indio_dev);
   1958
   1959	if ((indio_dev->modes & INDIO_ALL_BUFFER_MODES) &&
   1960		indio_dev->setup_ops == NULL)
   1961		indio_dev->setup_ops = &noop_ring_setup_ops;
   1962
   1963	if (iio_dev_opaque->attached_buffers_cnt)
   1964		cdev_init(&iio_dev_opaque->chrdev, &iio_buffer_fileops);
   1965	else if (iio_dev_opaque->event_interface)
   1966		cdev_init(&iio_dev_opaque->chrdev, &iio_event_fileops);
   1967
   1968	if (iio_dev_opaque->attached_buffers_cnt || iio_dev_opaque->event_interface) {
   1969		indio_dev->dev.devt = MKDEV(MAJOR(iio_devt), iio_dev_opaque->id);
   1970		iio_dev_opaque->chrdev.owner = this_mod;
   1971	}
   1972
   1973	/* assign device groups now; they should be all registered now */
   1974	indio_dev->dev.groups = iio_dev_opaque->groups;
   1975
   1976	ret = cdev_device_add(&iio_dev_opaque->chrdev, &indio_dev->dev);
   1977	if (ret < 0)
   1978		goto error_unreg_eventset;
   1979
   1980	return 0;
   1981
   1982error_unreg_eventset:
   1983	iio_device_unregister_eventset(indio_dev);
   1984error_free_sysfs:
   1985	iio_device_unregister_sysfs(indio_dev);
   1986error_buffer_free_sysfs:
   1987	iio_buffers_free_sysfs_and_mask(indio_dev);
   1988error_unreg_debugfs:
   1989	iio_device_unregister_debugfs(indio_dev);
   1990	return ret;
   1991}
   1992EXPORT_SYMBOL(__iio_device_register);
   1993
   1994/**
   1995 * iio_device_unregister() - unregister a device from the IIO subsystem
   1996 * @indio_dev:		Device structure representing the device.
   1997 **/
   1998void iio_device_unregister(struct iio_dev *indio_dev)
   1999{
   2000	struct iio_dev_opaque *iio_dev_opaque = to_iio_dev_opaque(indio_dev);
   2001
   2002	cdev_device_del(&iio_dev_opaque->chrdev, &indio_dev->dev);
   2003
   2004	mutex_lock(&iio_dev_opaque->info_exist_lock);
   2005
   2006	iio_device_unregister_debugfs(indio_dev);
   2007
   2008	iio_disable_all_buffers(indio_dev);
   2009
   2010	indio_dev->info = NULL;
   2011
   2012	iio_device_wakeup_eventset(indio_dev);
   2013	iio_buffer_wakeup_poll(indio_dev);
   2014
   2015	mutex_unlock(&iio_dev_opaque->info_exist_lock);
   2016
   2017	iio_buffers_free_sysfs_and_mask(indio_dev);
   2018}
   2019EXPORT_SYMBOL(iio_device_unregister);
   2020
   2021static void devm_iio_device_unreg(void *indio_dev)
   2022{
   2023	iio_device_unregister(indio_dev);
   2024}
   2025
   2026int __devm_iio_device_register(struct device *dev, struct iio_dev *indio_dev,
   2027			       struct module *this_mod)
   2028{
   2029	int ret;
   2030
   2031	ret = __iio_device_register(indio_dev, this_mod);
   2032	if (ret)
   2033		return ret;
   2034
   2035	return devm_add_action_or_reset(dev, devm_iio_device_unreg, indio_dev);
   2036}
   2037EXPORT_SYMBOL_GPL(__devm_iio_device_register);
   2038
   2039/**
   2040 * iio_device_claim_direct_mode - Keep device in direct mode
   2041 * @indio_dev:	the iio_dev associated with the device
   2042 *
   2043 * If the device is in direct mode it is guaranteed to stay
   2044 * that way until iio_device_release_direct_mode() is called.
   2045 *
   2046 * Use with iio_device_release_direct_mode()
   2047 *
   2048 * Returns: 0 on success, -EBUSY on failure
   2049 */
   2050int iio_device_claim_direct_mode(struct iio_dev *indio_dev)
   2051{
   2052	mutex_lock(&indio_dev->mlock);
   2053
   2054	if (iio_buffer_enabled(indio_dev)) {
   2055		mutex_unlock(&indio_dev->mlock);
   2056		return -EBUSY;
   2057	}
   2058	return 0;
   2059}
   2060EXPORT_SYMBOL_GPL(iio_device_claim_direct_mode);
   2061
   2062/**
   2063 * iio_device_release_direct_mode - releases claim on direct mode
   2064 * @indio_dev:	the iio_dev associated with the device
   2065 *
   2066 * Release the claim. Device is no longer guaranteed to stay
   2067 * in direct mode.
   2068 *
   2069 * Use with iio_device_claim_direct_mode()
   2070 */
   2071void iio_device_release_direct_mode(struct iio_dev *indio_dev)
   2072{
   2073	mutex_unlock(&indio_dev->mlock);
   2074}
   2075EXPORT_SYMBOL_GPL(iio_device_release_direct_mode);
   2076
   2077/**
   2078 * iio_device_get_current_mode() - helper function providing read-only access to
   2079 *				   the opaque @currentmode variable
   2080 * @indio_dev:			   IIO device structure for device
   2081 */
   2082int iio_device_get_current_mode(struct iio_dev *indio_dev)
   2083{
   2084	struct iio_dev_opaque *iio_dev_opaque = to_iio_dev_opaque(indio_dev);
   2085
   2086	return iio_dev_opaque->currentmode;
   2087}
   2088EXPORT_SYMBOL_GPL(iio_device_get_current_mode);
   2089
   2090subsys_initcall(iio_init);
   2091module_exit(iio_exit);
   2092
   2093MODULE_AUTHOR("Jonathan Cameron <jic23@kernel.org>");
   2094MODULE_DESCRIPTION("Industrial I/O core");
   2095MODULE_LICENSE("GPL");