iio_core.h 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. /* SPDX-License-Identifier: GPL-2.0-only */
  2. /* The industrial I/O core function defs.
  3. *
  4. * Copyright (c) 2008 Jonathan Cameron
  5. *
  6. * These definitions are meant for use only within the IIO core, not individual
  7. * drivers.
  8. */
  9. #ifndef _IIO_CORE_H_
  10. #define _IIO_CORE_H_
  11. #include <linux/kernel.h>
  12. #include <linux/device.h>
  13. struct iio_buffer;
  14. struct iio_chan_spec;
  15. struct iio_dev;
  16. extern const struct device_type iio_device_type;
  17. struct iio_dev_buffer_pair {
  18. struct iio_dev *indio_dev;
  19. struct iio_buffer *buffer;
  20. };
  21. #define IIO_IOCTL_UNHANDLED 1
  22. struct iio_ioctl_handler {
  23. struct list_head entry;
  24. long (*ioctl)(struct iio_dev *indio_dev, struct file *filp,
  25. unsigned int cmd, unsigned long arg);
  26. };
  27. void iio_device_ioctl_handler_register(struct iio_dev *indio_dev,
  28. struct iio_ioctl_handler *h);
  29. void iio_device_ioctl_handler_unregister(struct iio_ioctl_handler *h);
  30. ssize_t do_iio_read_channel_label(struct iio_dev *indio_dev,
  31. const struct iio_chan_spec *c,
  32. char *buf);
  33. int __iio_add_chan_devattr(const char *postfix,
  34. struct iio_chan_spec const *chan,
  35. ssize_t (*func)(struct device *dev,
  36. struct device_attribute *attr,
  37. char *buf),
  38. ssize_t (*writefunc)(struct device *dev,
  39. struct device_attribute *attr,
  40. const char *buf,
  41. size_t len),
  42. u64 mask,
  43. enum iio_shared_by shared_by,
  44. struct device *dev,
  45. struct iio_buffer *buffer,
  46. struct list_head *attr_list);
  47. void iio_free_chan_devattr_list(struct list_head *attr_list);
  48. int iio_device_register_sysfs_group(struct iio_dev *indio_dev,
  49. const struct attribute_group *group);
  50. ssize_t iio_format_value(char *buf, unsigned int type, int size, int *vals);
  51. /* Event interface flags */
  52. #define IIO_BUSY_BIT_POS 1
  53. #ifdef CONFIG_IIO_BUFFER
  54. struct poll_table_struct;
  55. __poll_t iio_buffer_poll_wrapper(struct file *filp,
  56. struct poll_table_struct *wait);
  57. ssize_t iio_buffer_read_wrapper(struct file *filp, char __user *buf,
  58. size_t n, loff_t *f_ps);
  59. ssize_t iio_buffer_write_wrapper(struct file *filp, const char __user *buf,
  60. size_t n, loff_t *f_ps);
  61. int iio_buffers_alloc_sysfs_and_mask(struct iio_dev *indio_dev);
  62. void iio_buffers_free_sysfs_and_mask(struct iio_dev *indio_dev);
  63. #define iio_buffer_poll_addr (&iio_buffer_poll_wrapper)
  64. #define iio_buffer_read_outer_addr (&iio_buffer_read_wrapper)
  65. #define iio_buffer_write_outer_addr (&iio_buffer_write_wrapper)
  66. void iio_disable_all_buffers(struct iio_dev *indio_dev);
  67. void iio_buffer_wakeup_poll(struct iio_dev *indio_dev);
  68. void iio_device_detach_buffers(struct iio_dev *indio_dev);
  69. #else
  70. #define iio_buffer_poll_addr NULL
  71. #define iio_buffer_read_outer_addr NULL
  72. #define iio_buffer_write_outer_addr NULL
  73. static inline int iio_buffers_alloc_sysfs_and_mask(struct iio_dev *indio_dev)
  74. {
  75. return 0;
  76. }
  77. static inline void iio_buffers_free_sysfs_and_mask(struct iio_dev *indio_dev) {}
  78. static inline void iio_disable_all_buffers(struct iio_dev *indio_dev) {}
  79. static inline void iio_buffer_wakeup_poll(struct iio_dev *indio_dev) {}
  80. static inline void iio_device_detach_buffers(struct iio_dev *indio_dev) {}
  81. #endif
  82. int iio_device_register_eventset(struct iio_dev *indio_dev);
  83. void iio_device_unregister_eventset(struct iio_dev *indio_dev);
  84. void iio_device_wakeup_eventset(struct iio_dev *indio_dev);
  85. struct iio_event_interface;
  86. bool iio_event_enabled(const struct iio_event_interface *ev_int);
  87. #endif