blob: 159ea3f8c02bc6fa2d099944f35a44beb5e1e707 [file] [log] [blame]
Thomas Gleixnerd2912cb2019-06-04 10:11:33 +02001/* SPDX-License-Identifier: GPL-2.0-only */
Jonathan Camerondf9c1c42011-08-12 17:56:03 +01002/* The industrial I/O core function defs.
3 *
4 * Copyright (c) 2008 Jonathan Cameron
5 *
Michael Hennerichcecfb932011-08-30 12:41:10 +01006 * These definitions are meant for use only within the IIO core, not individual
Jonathan Camerondf9c1c42011-08-12 17:56:03 +01007 * drivers.
8 */
9
Jonathan Cameron1aa04272011-08-30 12:32:47 +010010#ifndef _IIO_CORE_H_
11#define _IIO_CORE_H_
Jonathan Cameronef97d422012-04-13 10:24:20 +010012#include <linux/kernel.h>
13#include <linux/device.h>
14
15struct iio_chan_spec;
16struct iio_dev;
17
Guenter Roeck17d82b42013-02-07 17:09:00 +000018extern struct device_type iio_device_type;
Jonathan Cameron1aa04272011-08-30 12:32:47 +010019
Jonathan Camerondf9c1c42011-08-12 17:56:03 +010020int __iio_add_chan_devattr(const char *postfix,
Jonathan Camerondf9c1c42011-08-12 17:56:03 +010021 struct iio_chan_spec const *chan,
22 ssize_t (*func)(struct device *dev,
23 struct device_attribute *attr,
24 char *buf),
25 ssize_t (*writefunc)(struct device *dev,
26 struct device_attribute *attr,
27 const char *buf,
28 size_t len),
Jonathan Camerone614a542011-09-02 17:14:41 +010029 u64 mask,
Jonathan Cameron37044322013-09-08 14:57:00 +010030 enum iio_shared_by shared_by,
Jonathan Camerondf9c1c42011-08-12 17:56:03 +010031 struct device *dev,
32 struct list_head *attr_list);
Lars-Peter Clausen84088eb2013-10-07 12:50:00 +010033void iio_free_chan_devattr_list(struct list_head *attr_list);
Jonathan Camerondf9c1c42011-08-12 17:56:03 +010034
Srinivas Pandruvada9fbfb4b2014-04-29 00:51:00 +010035ssize_t iio_format_value(char *buf, unsigned int type, int size, int *vals);
Lars-Peter Clausen3661f3f2013-10-07 15:11:00 +010036
Jonathan Camerondf9c1c42011-08-12 17:56:03 +010037/* Event interface flags */
38#define IIO_BUSY_BIT_POS 1
Jonathan Cameron1aa04272011-08-30 12:32:47 +010039
Jonathan Cameronf2a96242011-09-21 11:15:55 +010040#ifdef CONFIG_IIO_BUFFER
Jonathan Cameron1aa04272011-08-30 12:32:47 +010041struct poll_table_struct;
42
Al Viroafc9a422017-07-03 06:39:46 -040043__poll_t iio_buffer_poll(struct file *filp,
Jonathan Cameron14555b12011-09-21 11:15:57 +010044 struct poll_table_struct *wait);
45ssize_t iio_buffer_read_first_n_outer(struct file *filp, char __user *buf,
46 size_t n, loff_t *f_ps);
Jonathan Cameron1aa04272011-08-30 12:32:47 +010047
Lars-Peter Clausen3e1b6c92014-11-26 18:55:12 +010048int iio_buffer_alloc_sysfs_and_mask(struct iio_dev *indio_dev);
49void iio_buffer_free_sysfs_and_mask(struct iio_dev *indio_dev);
Jonathan Cameron1aa04272011-08-30 12:32:47 +010050
Jonathan Cameron14555b12011-09-21 11:15:57 +010051#define iio_buffer_poll_addr (&iio_buffer_poll)
52#define iio_buffer_read_first_n_outer_addr (&iio_buffer_read_first_n_outer)
Jonathan Cameron1aa04272011-08-30 12:32:47 +010053
Lars-Peter Clausena87c82e2013-09-18 21:02:00 +010054void iio_disable_all_buffers(struct iio_dev *indio_dev);
Lars-Peter Clausend2f0a482013-10-04 12:07:00 +010055void iio_buffer_wakeup_poll(struct iio_dev *indio_dev);
Lars-Peter Clausena87c82e2013-09-18 21:02:00 +010056
Jonathan Cameron1aa04272011-08-30 12:32:47 +010057#else
58
Jonathan Cameron14555b12011-09-21 11:15:57 +010059#define iio_buffer_poll_addr NULL
60#define iio_buffer_read_first_n_outer_addr NULL
Jonathan Cameron1aa04272011-08-30 12:32:47 +010061
Lars-Peter Clausen3e1b6c92014-11-26 18:55:12 +010062static inline int iio_buffer_alloc_sysfs_and_mask(struct iio_dev *indio_dev)
63{
64 return 0;
65}
66
67static inline void iio_buffer_free_sysfs_and_mask(struct iio_dev *indio_dev) {}
68
Lars-Peter Clausena87c82e2013-09-18 21:02:00 +010069static inline void iio_disable_all_buffers(struct iio_dev *indio_dev) {}
Lars-Peter Clausend2f0a482013-10-04 12:07:00 +010070static inline void iio_buffer_wakeup_poll(struct iio_dev *indio_dev) {}
Lars-Peter Clausena87c82e2013-09-18 21:02:00 +010071
Jonathan Cameron1aa04272011-08-30 12:32:47 +010072#endif
73
Lars-Peter Clausen0a769a92012-01-03 14:59:38 +010074int iio_device_register_eventset(struct iio_dev *indio_dev);
75void iio_device_unregister_eventset(struct iio_dev *indio_dev);
Lars-Peter Clausend2f0a482013-10-04 12:07:00 +010076void iio_device_wakeup_eventset(struct iio_dev *indio_dev);
Lars-Peter Clausen0a769a92012-01-03 14:59:38 +010077int iio_event_getfd(struct iio_dev *indio_dev);
78
Gregor Boiriebc2b7da2016-03-09 19:05:49 +010079struct iio_event_interface;
80bool iio_event_enabled(const struct iio_event_interface *ev_int);
81
Jonathan Cameron1aa04272011-08-30 12:32:47 +010082#endif