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", ®, &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");