1 | /* SPDX-License-Identifier: GPL-2.0-or-later */ |
2 | #ifndef _IIO_BACKEND_H_ |
3 | #define _IIO_BACKEND_H_ |
4 | |
5 | #include <linux/types.h> |
6 | |
7 | struct fwnode_handle; |
8 | struct iio_backend; |
9 | struct device; |
10 | struct iio_dev; |
11 | |
12 | enum iio_backend_data_type { |
13 | IIO_BACKEND_TWOS_COMPLEMENT, |
14 | IIO_BACKEND_OFFSET_BINARY, |
15 | IIO_BACKEND_DATA_TYPE_MAX |
16 | }; |
17 | |
18 | /** |
19 | * struct iio_backend_data_fmt - Backend data format |
20 | * @type: Data type. |
21 | * @sign_extend: Bool to tell if the data is sign extended. |
22 | * @enable: Enable/Disable the data format module. If disabled, |
23 | * not formatting will happen. |
24 | */ |
25 | struct iio_backend_data_fmt { |
26 | enum iio_backend_data_type type; |
27 | bool sign_extend; |
28 | bool enable; |
29 | }; |
30 | |
31 | /** |
32 | * struct iio_backend_ops - operations structure for an iio_backend |
33 | * @enable: Enable backend. |
34 | * @disable: Disable backend. |
35 | * @chan_enable: Enable one channel. |
36 | * @chan_disable: Disable one channel. |
37 | * @data_format_set: Configure the data format for a specific channel. |
38 | * @request_buffer: Request an IIO buffer. |
39 | * @free_buffer: Free an IIO buffer. |
40 | **/ |
41 | struct iio_backend_ops { |
42 | int (*enable)(struct iio_backend *back); |
43 | void (*disable)(struct iio_backend *back); |
44 | int (*chan_enable)(struct iio_backend *back, unsigned int chan); |
45 | int (*chan_disable)(struct iio_backend *back, unsigned int chan); |
46 | int (*data_format_set)(struct iio_backend *back, unsigned int chan, |
47 | const struct iio_backend_data_fmt *data); |
48 | struct iio_buffer *(*request_buffer)(struct iio_backend *back, |
49 | struct iio_dev *indio_dev); |
50 | void (*free_buffer)(struct iio_backend *back, |
51 | struct iio_buffer *buffer); |
52 | }; |
53 | |
54 | int iio_backend_chan_enable(struct iio_backend *back, unsigned int chan); |
55 | int iio_backend_chan_disable(struct iio_backend *back, unsigned int chan); |
56 | int devm_iio_backend_enable(struct device *dev, struct iio_backend *back); |
57 | int iio_backend_data_format_set(struct iio_backend *back, unsigned int chan, |
58 | const struct iio_backend_data_fmt *data); |
59 | int devm_iio_backend_request_buffer(struct device *dev, |
60 | struct iio_backend *back, |
61 | struct iio_dev *indio_dev); |
62 | |
63 | void *iio_backend_get_priv(const struct iio_backend *conv); |
64 | struct iio_backend *devm_iio_backend_get(struct device *dev, const char *name); |
65 | struct iio_backend * |
66 | __devm_iio_backend_get_from_fwnode_lookup(struct device *dev, |
67 | struct fwnode_handle *fwnode); |
68 | |
69 | int devm_iio_backend_register(struct device *dev, |
70 | const struct iio_backend_ops *ops, void *priv); |
71 | |
72 | #endif |
73 | |