1 2/* The industrial I/O core 3 * 4 * Copyright (c) 2008 Jonathan Cameron 5 * 6 * This program is free software; you can redistribute it and/or modify it 7 * under the terms of the GNU General Public License version 2 as published by 8 * the Free Software Foundation. 9 */ 10#ifndef _INDUSTRIAL_IO_H_ 11#define _INDUSTRIAL_IO_H_ 12 13#include <linux/device.h> 14#include <linux/cdev.h> 15#include <linux/iio/types.h> 16#include <linux/of.h> 17/* IIO TODO LIST */ 18/* 19 * Provide means of adjusting timer accuracy. 20 * Currently assumes nano seconds. 21 */ 22 23enum iio_chan_info_enum { 24 IIO_CHAN_INFO_RAW = 0, 25 IIO_CHAN_INFO_PROCESSED, 26 IIO_CHAN_INFO_SCALE, 27 IIO_CHAN_INFO_OFFSET, 28 IIO_CHAN_INFO_CALIBSCALE, 29 IIO_CHAN_INFO_CALIBBIAS, 30 IIO_CHAN_INFO_PEAK, 31 IIO_CHAN_INFO_PEAK_SCALE, 32 IIO_CHAN_INFO_QUADRATURE_CORRECTION_RAW, 33 IIO_CHAN_INFO_AVERAGE_RAW, 34 IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY, 35 IIO_CHAN_INFO_SAMP_FREQ, 36 IIO_CHAN_INFO_FREQUENCY, 37 IIO_CHAN_INFO_PHASE, 38 IIO_CHAN_INFO_HARDWAREGAIN, 39 IIO_CHAN_INFO_HYSTERESIS, 40 IIO_CHAN_INFO_INT_TIME, 41}; 42 43enum iio_shared_by { 44 IIO_SEPARATE, 45 IIO_SHARED_BY_TYPE, 46 IIO_SHARED_BY_DIR, 47 IIO_SHARED_BY_ALL 48}; 49 50enum iio_endian { 51 IIO_CPU, 52 IIO_BE, 53 IIO_LE, 54}; 55 56struct iio_chan_spec; 57struct iio_dev; 58 59/** 60 * struct iio_chan_spec_ext_info - Extended channel info attribute 61 * @name: Info attribute name 62 * @shared: Whether this attribute is shared between all channels. 63 * @read: Read callback for this info attribute, may be NULL. 64 * @write: Write callback for this info attribute, may be NULL. 65 * @private: Data private to the driver. 66 */ 67struct iio_chan_spec_ext_info { 68 const char *name; 69 enum iio_shared_by shared; 70 ssize_t (*read)(struct iio_dev *, uintptr_t private, 71 struct iio_chan_spec const *, char *buf); 72 ssize_t (*write)(struct iio_dev *, uintptr_t private, 73 struct iio_chan_spec const *, const char *buf, 74 size_t len); 75 uintptr_t private; 76}; 77 78/** 79 * struct iio_enum - Enum channel info attribute 80 * @items: An array of strings. 81 * @num_items: Length of the item array. 82 * @set: Set callback function, may be NULL. 83 * @get: Get callback function, may be NULL. 84 * 85 * The iio_enum struct can be used to implement enum style channel attributes. 86 * Enum style attributes are those which have a set of strings which map to 87 * unsigned integer values. The IIO enum helper code takes care of mapping 88 * between value and string as well as generating a "_available" file which 89 * contains a list of all available items. The set callback will be called when 90 * the attribute is updated. The last parameter is the index to the newly 91 * activated item. The get callback will be used to query the currently active 92 * item and is supposed to return the index for it. 93 */ 94struct iio_enum { 95 const char * const *items; 96 unsigned int num_items; 97 int (*set)(struct iio_dev *, const struct iio_chan_spec *, unsigned int); 98 int (*get)(struct iio_dev *, const struct iio_chan_spec *); 99}; 100 101ssize_t iio_enum_available_read(struct iio_dev *indio_dev, 102 uintptr_t priv, const struct iio_chan_spec *chan, char *buf); 103ssize_t iio_enum_read(struct iio_dev *indio_dev, 104 uintptr_t priv, const struct iio_chan_spec *chan, char *buf); 105ssize_t iio_enum_write(struct iio_dev *indio_dev, 106 uintptr_t priv, const struct iio_chan_spec *chan, const char *buf, 107 size_t len); 108 109/** 110 * IIO_ENUM() - Initialize enum extended channel attribute 111 * @_name: Attribute name 112 * @_shared: Whether the attribute is shared between all channels 113 * @_e: Pointer to an iio_enum struct 114 * 115 * This should usually be used together with IIO_ENUM_AVAILABLE() 116 */ 117#define IIO_ENUM(_name, _shared, _e) \ 118{ \ 119 .name = (_name), \ 120 .shared = (_shared), \ 121 .read = iio_enum_read, \ 122 .write = iio_enum_write, \ 123 .private = (uintptr_t)(_e), \ 124} 125 126/** 127 * IIO_ENUM_AVAILABLE() - Initialize enum available extended channel attribute 128 * @_name: Attribute name ("_available" will be appended to the name) 129 * @_e: Pointer to an iio_enum struct 130 * 131 * Creates a read only attribute which lists all the available enum items in a 132 * space separated list. This should usually be used together with IIO_ENUM() 133 */ 134#define IIO_ENUM_AVAILABLE(_name, _e) \ 135{ \ 136 .name = (_name "_available"), \ 137 .shared = IIO_SHARED_BY_TYPE, \ 138 .read = iio_enum_available_read, \ 139 .private = (uintptr_t)(_e), \ 140} 141 142/** 143 * struct iio_event_spec - specification for a channel event 144 * @type: Type of the event 145 * @dir: Direction of the event 146 * @mask_separate: Bit mask of enum iio_event_info values. Attributes 147 * set in this mask will be registered per channel. 148 * @mask_shared_by_type: Bit mask of enum iio_event_info values. Attributes 149 * set in this mask will be shared by channel type. 150 * @mask_shared_by_dir: Bit mask of enum iio_event_info values. Attributes 151 * set in this mask will be shared by channel type and 152 * direction. 153 * @mask_shared_by_all: Bit mask of enum iio_event_info values. Attributes 154 * set in this mask will be shared by all channels. 155 */ 156struct iio_event_spec { 157 enum iio_event_type type; 158 enum iio_event_direction dir; 159 unsigned long mask_separate; 160 unsigned long mask_shared_by_type; 161 unsigned long mask_shared_by_dir; 162 unsigned long mask_shared_by_all; 163}; 164 165/** 166 * struct iio_chan_spec - specification of a single channel 167 * @type: What type of measurement is the channel making. 168 * @channel: What number do we wish to assign the channel. 169 * @channel2: If there is a second number for a differential 170 * channel then this is it. If modified is set then the 171 * value here specifies the modifier. 172 * @address: Driver specific identifier. 173 * @scan_index: Monotonic index to give ordering in scans when read 174 * from a buffer. 175 * @scan_type: Sign: 's' or 'u' to specify signed or unsigned 176 * realbits: Number of valid bits of data 177 * storage_bits: Realbits + padding 178 * shift: Shift right by this before masking out 179 * realbits. 180 * endianness: little or big endian 181 * repeat: Number of times real/storage bits 182 * repeats. When the repeat element is 183 * more than 1, then the type element in 184 * sysfs will show a repeat value. 185 * Otherwise, the number of repetitions is 186 * omitted. 187 * @info_mask_separate: What information is to be exported that is specific to 188 * this channel. 189 * @info_mask_shared_by_type: What information is to be exported that is shared 190 * by all channels of the same type. 191 * @info_mask_shared_by_dir: What information is to be exported that is shared 192 * by all channels of the same direction. 193 * @info_mask_shared_by_all: What information is to be exported that is shared 194 * by all channels. 195 * @event_spec: Array of events which should be registered for this 196 * channel. 197 * @num_event_specs: Size of the event_spec array. 198 * @ext_info: Array of extended info attributes for this channel. 199 * The array is NULL terminated, the last element should 200 * have its name field set to NULL. 201 * @extend_name: Allows labeling of channel attributes with an 202 * informative name. Note this has no effect codes etc, 203 * unlike modifiers. 204 * @datasheet_name: A name used in in-kernel mapping of channels. It should 205 * correspond to the first name that the channel is referred 206 * to by in the datasheet (e.g. IND), or the nearest 207 * possible compound name (e.g. IND-INC). 208 * @modified: Does a modifier apply to this channel. What these are 209 * depends on the channel type. Modifier is set in 210 * channel2. Examples are IIO_MOD_X for axial sensors about 211 * the 'x' axis. 212 * @indexed: Specify the channel has a numerical index. If not, 213 * the channel index number will be suppressed for sysfs 214 * attributes but not for event codes. 215 * @output: Channel is output. 216 * @differential: Channel is differential. 217 */ 218struct iio_chan_spec { 219 enum iio_chan_type type; 220 int channel; 221 int channel2; 222 unsigned long address; 223 int scan_index; 224 struct { 225 char sign; 226 u8 realbits; 227 u8 storagebits; 228 u8 shift; 229 u8 repeat; 230 enum iio_endian endianness; 231 } scan_type; 232 long info_mask_separate; 233 long info_mask_shared_by_type; 234 long info_mask_shared_by_dir; 235 long info_mask_shared_by_all; 236 const struct iio_event_spec *event_spec; 237 unsigned int num_event_specs; 238 const struct iio_chan_spec_ext_info *ext_info; 239 const char *extend_name; 240 const char *datasheet_name; 241 unsigned modified:1; 242 unsigned indexed:1; 243 unsigned output:1; 244 unsigned differential:1; 245}; 246 247 248/** 249 * iio_channel_has_info() - Checks whether a channel supports a info attribute 250 * @chan: The channel to be queried 251 * @type: Type of the info attribute to be checked 252 * 253 * Returns true if the channels supports reporting values for the given info 254 * attribute type, false otherwise. 255 */ 256static inline bool iio_channel_has_info(const struct iio_chan_spec *chan, 257 enum iio_chan_info_enum type) 258{ 259 return (chan->info_mask_separate & BIT(type)) | 260 (chan->info_mask_shared_by_type & BIT(type)) | 261 (chan->info_mask_shared_by_dir & BIT(type)) | 262 (chan->info_mask_shared_by_all & BIT(type)); 263} 264 265#define IIO_CHAN_SOFT_TIMESTAMP(_si) { \ 266 .type = IIO_TIMESTAMP, \ 267 .channel = -1, \ 268 .scan_index = _si, \ 269 .scan_type = { \ 270 .sign = 's', \ 271 .realbits = 64, \ 272 .storagebits = 64, \ 273 }, \ 274} 275 276/** 277 * iio_get_time_ns() - utility function to get a time stamp for events etc 278 **/ 279static inline s64 iio_get_time_ns(void) 280{ 281 return ktime_get_real_ns(); 282} 283 284/* Device operating modes */ 285#define INDIO_DIRECT_MODE 0x01 286#define INDIO_BUFFER_TRIGGERED 0x02 287#define INDIO_BUFFER_HARDWARE 0x08 288 289#define INDIO_ALL_BUFFER_MODES \ 290 (INDIO_BUFFER_TRIGGERED | INDIO_BUFFER_HARDWARE) 291 292#define INDIO_MAX_RAW_ELEMENTS 4 293 294struct iio_trigger; /* forward declaration */ 295struct iio_dev; 296 297/** 298 * struct iio_info - constant information about device 299 * @driver_module: module structure used to ensure correct 300 * ownership of chrdevs etc 301 * @event_attrs: event control attributes 302 * @attrs: general purpose device attributes 303 * @read_raw: function to request a value from the device. 304 * mask specifies which value. Note 0 means a reading of 305 * the channel in question. Return value will specify the 306 * type of value returned by the device. val and val2 will 307 * contain the elements making up the returned value. 308 * @read_raw_multi: function to return values from the device. 309 * mask specifies which value. Note 0 means a reading of 310 * the channel in question. Return value will specify the 311 * type of value returned by the device. vals pointer 312 * contain the elements making up the returned value. 313 * max_len specifies maximum number of elements 314 * vals pointer can contain. val_len is used to return 315 * length of valid elements in vals. 316 * @write_raw: function to write a value to the device. 317 * Parameters are the same as for read_raw. 318 * @write_raw_get_fmt: callback function to query the expected 319 * format/precision. If not set by the driver, write_raw 320 * returns IIO_VAL_INT_PLUS_MICRO. 321 * @read_event_config: find out if the event is enabled. 322 * @write_event_config: set if the event is enabled. 323 * @read_event_value: read a configuration value associated with the event. 324 * @write_event_value: write a configuration value for the event. 325 * @validate_trigger: function to validate the trigger when the 326 * current trigger gets changed. 327 * @update_scan_mode: function to configure device and scan buffer when 328 * channels have changed 329 * @debugfs_reg_access: function to read or write register value of device 330 * @of_xlate: function pointer to obtain channel specifier index. 331 * When #iio-cells is greater than '0', the driver could 332 * provide a custom of_xlate function that reads the 333 * *args* and returns the appropriate index in registered 334 * IIO channels array. 335 **/ 336struct iio_info { 337 struct module *driver_module; 338 struct attribute_group *event_attrs; 339 const struct attribute_group *attrs; 340 341 int (*read_raw)(struct iio_dev *indio_dev, 342 struct iio_chan_spec const *chan, 343 int *val, 344 int *val2, 345 long mask); 346 347 int (*read_raw_multi)(struct iio_dev *indio_dev, 348 struct iio_chan_spec const *chan, 349 int max_len, 350 int *vals, 351 int *val_len, 352 long mask); 353 354 int (*write_raw)(struct iio_dev *indio_dev, 355 struct iio_chan_spec const *chan, 356 int val, 357 int val2, 358 long mask); 359 360 int (*write_raw_get_fmt)(struct iio_dev *indio_dev, 361 struct iio_chan_spec const *chan, 362 long mask); 363 364 int (*read_event_config)(struct iio_dev *indio_dev, 365 const struct iio_chan_spec *chan, 366 enum iio_event_type type, 367 enum iio_event_direction dir); 368 369 int (*write_event_config)(struct iio_dev *indio_dev, 370 const struct iio_chan_spec *chan, 371 enum iio_event_type type, 372 enum iio_event_direction dir, 373 int state); 374 375 int (*read_event_value)(struct iio_dev *indio_dev, 376 const struct iio_chan_spec *chan, 377 enum iio_event_type type, 378 enum iio_event_direction dir, 379 enum iio_event_info info, int *val, int *val2); 380 381 int (*write_event_value)(struct iio_dev *indio_dev, 382 const struct iio_chan_spec *chan, 383 enum iio_event_type type, 384 enum iio_event_direction dir, 385 enum iio_event_info info, int val, int val2); 386 387 int (*validate_trigger)(struct iio_dev *indio_dev, 388 struct iio_trigger *trig); 389 int (*update_scan_mode)(struct iio_dev *indio_dev, 390 const unsigned long *scan_mask); 391 int (*debugfs_reg_access)(struct iio_dev *indio_dev, 392 unsigned reg, unsigned writeval, 393 unsigned *readval); 394 int (*of_xlate)(struct iio_dev *indio_dev, 395 const struct of_phandle_args *iiospec); 396}; 397 398/** 399 * struct iio_buffer_setup_ops - buffer setup related callbacks 400 * @preenable: [DRIVER] function to run prior to marking buffer enabled 401 * @postenable: [DRIVER] function to run after marking buffer enabled 402 * @predisable: [DRIVER] function to run prior to marking buffer 403 * disabled 404 * @postdisable: [DRIVER] function to run after marking buffer disabled 405 * @validate_scan_mask: [DRIVER] function callback to check whether a given 406 * scan mask is valid for the device. 407 */ 408struct iio_buffer_setup_ops { 409 int (*preenable)(struct iio_dev *); 410 int (*postenable)(struct iio_dev *); 411 int (*predisable)(struct iio_dev *); 412 int (*postdisable)(struct iio_dev *); 413 bool (*validate_scan_mask)(struct iio_dev *indio_dev, 414 const unsigned long *scan_mask); 415}; 416 417/** 418 * struct iio_dev - industrial I/O device 419 * @id: [INTERN] used to identify device internally 420 * @modes: [DRIVER] operating modes supported by device 421 * @currentmode: [DRIVER] current operating mode 422 * @dev: [DRIVER] device structure, should be assigned a parent 423 * and owner 424 * @event_interface: [INTERN] event chrdevs associated with interrupt lines 425 * @buffer: [DRIVER] any buffer present 426 * @buffer_list: [INTERN] list of all buffers currently attached 427 * @scan_bytes: [INTERN] num bytes captured to be fed to buffer demux 428 * @mlock: [INTERN] lock used to prevent simultaneous device state 429 * changes 430 * @available_scan_masks: [DRIVER] optional array of allowed bitmasks 431 * @masklength: [INTERN] the length of the mask established from 432 * channels 433 * @active_scan_mask: [INTERN] union of all scan masks requested by buffers 434 * @scan_timestamp: [INTERN] set if any buffers have requested timestamp 435 * @scan_index_timestamp:[INTERN] cache of the index to the timestamp 436 * @trig: [INTERN] current device trigger (buffer modes) 437 * @pollfunc: [DRIVER] function run on trigger being received 438 * @channels: [DRIVER] channel specification structure table 439 * @num_channels: [DRIVER] number of channels specified in @channels. 440 * @channel_attr_list: [INTERN] keep track of automatically created channel 441 * attributes 442 * @chan_attr_group: [INTERN] group for all attrs in base directory 443 * @name: [DRIVER] name of the device. 444 * @info: [DRIVER] callbacks and constant info from driver 445 * @info_exist_lock: [INTERN] lock to prevent use during removal 446 * @setup_ops: [DRIVER] callbacks to call before and after buffer 447 * enable/disable 448 * @chrdev: [INTERN] associated character device 449 * @groups: [INTERN] attribute groups 450 * @groupcounter: [INTERN] index of next attribute group 451 * @flags: [INTERN] file ops related flags including busy flag. 452 * @debugfs_dentry: [INTERN] device specific debugfs dentry. 453 * @cached_reg_addr: [INTERN] cached register address for debugfs reads. 454 */ 455struct iio_dev { 456 int id; 457 458 int modes; 459 int currentmode; 460 struct device dev; 461 462 struct iio_event_interface *event_interface; 463 464 struct iio_buffer *buffer; 465 struct list_head buffer_list; 466 int scan_bytes; 467 struct mutex mlock; 468 469 const unsigned long *available_scan_masks; 470 unsigned masklength; 471 const unsigned long *active_scan_mask; 472 bool scan_timestamp; 473 unsigned scan_index_timestamp; 474 struct iio_trigger *trig; 475 struct iio_poll_func *pollfunc; 476 477 struct iio_chan_spec const *channels; 478 int num_channels; 479 480 struct list_head channel_attr_list; 481 struct attribute_group chan_attr_group; 482 const char *name; 483 const struct iio_info *info; 484 struct mutex info_exist_lock; 485 const struct iio_buffer_setup_ops *setup_ops; 486 struct cdev chrdev; 487#define IIO_MAX_GROUPS 6 488 const struct attribute_group *groups[IIO_MAX_GROUPS + 1]; 489 int groupcounter; 490 491 unsigned long flags; 492#if defined(CONFIG_DEBUG_FS) 493 struct dentry *debugfs_dentry; 494 unsigned cached_reg_addr; 495#endif 496}; 497 498const struct iio_chan_spec 499*iio_find_channel_from_si(struct iio_dev *indio_dev, int si); 500int iio_device_register(struct iio_dev *indio_dev); 501void iio_device_unregister(struct iio_dev *indio_dev); 502int devm_iio_device_register(struct device *dev, struct iio_dev *indio_dev); 503void devm_iio_device_unregister(struct device *dev, struct iio_dev *indio_dev); 504int iio_push_event(struct iio_dev *indio_dev, u64 ev_code, s64 timestamp); 505 506extern struct bus_type iio_bus_type; 507 508/** 509 * iio_device_put() - reference counted deallocation of struct device 510 * @indio_dev: IIO device structure containing the device 511 **/ 512static inline void iio_device_put(struct iio_dev *indio_dev) 513{ 514 if (indio_dev) 515 put_device(&indio_dev->dev); 516} 517 518/** 519 * dev_to_iio_dev() - Get IIO device struct from a device struct 520 * @dev: The device embedded in the IIO device 521 * 522 * Note: The device must be a IIO device, otherwise the result is undefined. 523 */ 524static inline struct iio_dev *dev_to_iio_dev(struct device *dev) 525{ 526 return container_of(dev, struct iio_dev, dev); 527} 528 529/** 530 * iio_device_get() - increment reference count for the device 531 * @indio_dev: IIO device structure 532 * 533 * Returns: The passed IIO device 534 **/ 535static inline struct iio_dev *iio_device_get(struct iio_dev *indio_dev) 536{ 537 return indio_dev ? dev_to_iio_dev(get_device(&indio_dev->dev)) : NULL; 538} 539 540 541/** 542 * iio_device_set_drvdata() - Set device driver data 543 * @indio_dev: IIO device structure 544 * @data: Driver specific data 545 * 546 * Allows to attach an arbitrary pointer to an IIO device, which can later be 547 * retrieved by iio_device_get_drvdata(). 548 */ 549static inline void iio_device_set_drvdata(struct iio_dev *indio_dev, void *data) 550{ 551 dev_set_drvdata(&indio_dev->dev, data); 552} 553 554/** 555 * iio_device_get_drvdata() - Get device driver data 556 * @indio_dev: IIO device structure 557 * 558 * Returns the data previously set with iio_device_set_drvdata() 559 */ 560static inline void *iio_device_get_drvdata(struct iio_dev *indio_dev) 561{ 562 return dev_get_drvdata(&indio_dev->dev); 563} 564 565/* Can we make this smaller? */ 566#define IIO_ALIGN L1_CACHE_BYTES 567struct iio_dev *iio_device_alloc(int sizeof_priv); 568 569static inline void *iio_priv(const struct iio_dev *indio_dev) 570{ 571 return (char *)indio_dev + ALIGN(sizeof(struct iio_dev), IIO_ALIGN); 572} 573 574static inline struct iio_dev *iio_priv_to_dev(void *priv) 575{ 576 return (struct iio_dev *)((char *)priv - 577 ALIGN(sizeof(struct iio_dev), IIO_ALIGN)); 578} 579 580void iio_device_free(struct iio_dev *indio_dev); 581struct iio_dev *devm_iio_device_alloc(struct device *dev, int sizeof_priv); 582void devm_iio_device_free(struct device *dev, struct iio_dev *indio_dev); 583struct iio_trigger *devm_iio_trigger_alloc(struct device *dev, 584 const char *fmt, ...); 585void devm_iio_trigger_free(struct device *dev, struct iio_trigger *iio_trig); 586 587/** 588 * iio_buffer_enabled() - helper function to test if the buffer is enabled 589 * @indio_dev: IIO device structure for device 590 **/ 591static inline bool iio_buffer_enabled(struct iio_dev *indio_dev) 592{ 593 return indio_dev->currentmode 594 & (INDIO_BUFFER_TRIGGERED | INDIO_BUFFER_HARDWARE); 595} 596 597/** 598 * iio_get_debugfs_dentry() - helper function to get the debugfs_dentry 599 * @indio_dev: IIO device structure for device 600 **/ 601#if defined(CONFIG_DEBUG_FS) 602static inline struct dentry *iio_get_debugfs_dentry(struct iio_dev *indio_dev) 603{ 604 return indio_dev->debugfs_dentry; 605} 606#else 607static inline struct dentry *iio_get_debugfs_dentry(struct iio_dev *indio_dev) 608{ 609 return NULL; 610} 611#endif 612 613int iio_str_to_fixpoint(const char *str, int fract_mult, int *integer, 614 int *fract); 615 616/** 617 * IIO_DEGREE_TO_RAD() - Convert degree to rad 618 * @deg: A value in degree 619 * 620 * Returns the given value converted from degree to rad 621 */ 622#define IIO_DEGREE_TO_RAD(deg) (((deg) * 314159ULL + 9000000ULL) / 18000000ULL) 623 624/** 625 * IIO_G_TO_M_S_2() - Convert g to meter / second**2 626 * @g: A value in g 627 * 628 * Returns the given value converted from g to meter / second**2 629 */ 630#define IIO_G_TO_M_S_2(g) ((g) * 980665ULL / 100000ULL) 631 632#endif /* _INDUSTRIAL_IO_H_ */ 633