Merge tag 'phy-for-5.19' of git://git.kernel.org/pub/scm/linux/kernel/git/phy/linux...
[linux-2.6-microblaze.git] / include / linux / iio / iio-opaque.h
1 /* SPDX-License-Identifier: GPL-2.0 */
2
3 #ifndef _INDUSTRIAL_IO_OPAQUE_H_
4 #define _INDUSTRIAL_IO_OPAQUE_H_
5
6 /**
7  * struct iio_dev_opaque - industrial I/O device opaque information
8  * @indio_dev:                  public industrial I/O device information
9  * @id:                 used to identify device internally
10  * @currentmode:                operating mode currently in use, may be eventually
11  *                              checked by device drivers but should be considered
12  *                              read-only as this is a core internal bit
13  * @driver_module:              used to make it harder to undercut users
14  * @info_exist_lock:            lock to prevent use during removal
15  * @trig_readonly:              mark the current trigger immutable
16  * @event_interface:            event chrdevs associated with interrupt lines
17  * @attached_buffers:           array of buffers statically attached by the driver
18  * @attached_buffers_cnt:       number of buffers in the array of statically attached buffers
19  * @buffer_ioctl_handler:       ioctl() handler for this IIO device's buffer interface
20  * @buffer_list:                list of all buffers currently attached
21  * @channel_attr_list:          keep track of automatically created channel
22  *                              attributes
23  * @chan_attr_group:            group for all attrs in base directory
24  * @ioctl_handlers:             ioctl handlers registered with the core handler
25  * @groups:                     attribute groups
26  * @groupcounter:               index of next attribute group
27  * @legacy_scan_el_group:       attribute group for legacy scan elements attribute group
28  * @legacy_buffer_group:        attribute group for legacy buffer attributes group
29  * @bounce_buffer:              for devices that call iio_push_to_buffers_with_timestamp_unaligned()
30  * @bounce_buffer_size:         size of currently allocate bounce buffer
31  * @scan_index_timestamp:       cache of the index to the timestamp
32  * @clock_id:                   timestamping clock posix identifier
33  * @chrdev:                     associated character device
34  * @flags:                      file ops related flags including busy flag.
35  * @debugfs_dentry:             device specific debugfs dentry
36  * @cached_reg_addr:            cached register address for debugfs reads
37  * @read_buf:                   read buffer to be used for the initial reg read
38  * @read_buf_len:               data length in @read_buf
39  */
40 struct iio_dev_opaque {
41         struct iio_dev                  indio_dev;
42         int                             currentmode;
43         int                             id;
44         struct module                   *driver_module;
45         struct mutex                    info_exist_lock;
46         bool                            trig_readonly;
47         struct iio_event_interface      *event_interface;
48         struct iio_buffer               **attached_buffers;
49         unsigned int                    attached_buffers_cnt;
50         struct iio_ioctl_handler        *buffer_ioctl_handler;
51         struct list_head                buffer_list;
52         struct list_head                channel_attr_list;
53         struct attribute_group          chan_attr_group;
54         struct list_head                ioctl_handlers;
55         const struct attribute_group    **groups;
56         int                             groupcounter;
57         struct attribute_group          legacy_scan_el_group;
58         struct attribute_group          legacy_buffer_group;
59         void                            *bounce_buffer;
60         size_t                          bounce_buffer_size;
61
62         unsigned int                    scan_index_timestamp;
63         clockid_t                       clock_id;
64         struct cdev                     chrdev;
65         unsigned long                   flags;
66
67 #if defined(CONFIG_DEBUG_FS)
68         struct dentry                   *debugfs_dentry;
69         unsigned                        cached_reg_addr;
70         char                            read_buf[20];
71         unsigned int                    read_buf_len;
72 #endif
73 };
74
75 #define to_iio_dev_opaque(_indio_dev)           \
76         container_of((_indio_dev), struct iio_dev_opaque, indio_dev)
77
78 #endif