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 #include <linux/iio/iio.h> 7 8 struct iio_chan_spec; 9 struct fwnode_handle; 10 struct iio_backend; 11 struct device; 12 struct iio_dev; 13 14 enum iio_backend_data_type { 15 IIO_BACKEND_TWOS_COMPLEMENT, 16 IIO_BACKEND_OFFSET_BINARY, 17 IIO_BACKEND_DATA_UNSIGNED, 18 IIO_BACKEND_DATA_TYPE_MAX 19 }; 20 21 enum iio_backend_data_source { 22 IIO_BACKEND_INTERNAL_CONTINUOUS_WAVE, 23 IIO_BACKEND_EXTERNAL, 24 IIO_BACKEND_INTERNAL_RAMP_16BIT, 25 IIO_BACKEND_DATA_SOURCE_MAX 26 }; 27 28 #define iio_backend_debugfs_ptr(ptr) PTR_IF(IS_ENABLED(CONFIG_DEBUG_FS), ptr) 29 30 /** 31 * IIO_BACKEND_EX_INFO - Helper for an IIO extended channel attribute 32 * @_name: Attribute name 33 * @_shared: Whether the attribute is shared between all channels 34 * @_what: Data private to the driver 35 */ 36 #define IIO_BACKEND_EX_INFO(_name, _shared, _what) { \ 37 .name = (_name), \ 38 .shared = (_shared), \ 39 .read = iio_backend_ext_info_get, \ 40 .write = iio_backend_ext_info_set, \ 41 .private = (_what), \ 42 } 43 44 /** 45 * struct iio_backend_data_fmt - Backend data format 46 * @type: Data type. 47 * @sign_extend: Bool to tell if the data is sign extended. 48 * @enable: Enable/Disable the data format module. If disabled, 49 * not formatting will happen. 50 */ 51 struct iio_backend_data_fmt { 52 enum iio_backend_data_type type; 53 bool sign_extend; 54 bool enable; 55 }; 56 57 /* vendor specific from 32 */ 58 enum iio_backend_test_pattern { 59 IIO_BACKEND_NO_TEST_PATTERN, 60 /* modified prbs9 */ 61 IIO_BACKEND_ADI_PRBS_9A = 32, 62 /* modified prbs23 */ 63 IIO_BACKEND_ADI_PRBS_23A, 64 IIO_BACKEND_TEST_PATTERN_MAX 65 }; 66 67 enum iio_backend_sample_trigger { 68 IIO_BACKEND_SAMPLE_TRIGGER_EDGE_FALLING, 69 IIO_BACKEND_SAMPLE_TRIGGER_EDGE_RISING, 70 IIO_BACKEND_SAMPLE_TRIGGER_MAX 71 }; 72 73 enum iio_backend_interface_type { 74 IIO_BACKEND_INTERFACE_SERIAL_LVDS, 75 IIO_BACKEND_INTERFACE_SERIAL_CMOS, 76 IIO_BACKEND_INTERFACE_MAX 77 }; 78 79 enum iio_backend_filter_type { 80 IIO_BACKEND_FILTER_TYPE_DISABLED, 81 IIO_BACKEND_FILTER_TYPE_SINC1, 82 IIO_BACKEND_FILTER_TYPE_SINC5, 83 IIO_BACKEND_FILTER_TYPE_SINC5_PLUS_COMP, 84 IIO_BACKEND_FILTER_TYPE_MAX 85 }; 86 87 /** 88 * enum iio_backend_capabilities - Backend capabilities 89 * Backend capabilities can be used by frontends to check if a given 90 * functionality is supported by the backend. This is useful for frontend 91 * devices which are expected to work with alternative backend 92 * implementations. Capabilities are loosely coupled with operations, 93 * meaning that a capability requires certain operations to be implemented 94 * by the backend. A capability might be mapped to a single operation or 95 * multiple operations. 96 * 97 * @IIO_BACKEND_CAP_CALIBRATION: Backend supports digital interface 98 * calibration. Calibration procedure is device specific. 99 * @IIO_BACKEND_CAP_BUFFER: Support for IIO buffer interface. 100 * @IIO_BACKEND_CAP_ENABLE: Backend can be explicitly enabled/disabled. 101 */ 102 enum iio_backend_capabilities { 103 IIO_BACKEND_CAP_CALIBRATION = BIT(0), 104 IIO_BACKEND_CAP_BUFFER = BIT(1), 105 IIO_BACKEND_CAP_ENABLE = BIT(2), 106 }; 107 108 /** 109 * struct iio_backend_ops - operations structure for an iio_backend 110 * @enable: Enable backend. 111 * @disable: Disable backend. 112 * @chan_enable: Enable one channel. 113 * @chan_disable: Disable one channel. 114 * @data_format_set: Configure the data format for a specific channel. 115 * @data_source_set: Configure the data source for a specific channel. 116 * @data_source_get: Data source getter for a specific channel. 117 * @set_sample_rate: Configure the sampling rate for a specific channel. 118 * @test_pattern_set: Configure a test pattern. 119 * @chan_status: Get the channel status. 120 * @iodelay_set: Set digital I/O delay. 121 * @data_sample_trigger: Control when to sample data. 122 * @request_buffer: Request an IIO buffer. 123 * @free_buffer: Free an IIO buffer. 124 * @extend_chan_spec: Extend an IIO channel. 125 * @ext_info_set: Extended info setter. 126 * @ext_info_get: Extended info getter. 127 * @interface_type_get: Interface type. 128 * @data_size_set: Data size. 129 * @oversampling_ratio_set: Set Oversampling ratio. 130 * @read_raw: Read a channel attribute from a backend device 131 * @debugfs_print_chan_status: Print channel status into a buffer. 132 * @debugfs_reg_access: Read or write register value of backend. 133 * @filter_type_set: Set filter type. 134 * @interface_data_align: Perform the data alignment process. 135 * @num_lanes_set: Set the number of lanes enabled. 136 * @ddr_enable: Enable interface DDR (Double Data Rate) mode. 137 * @ddr_disable: Disable interface DDR (Double Data Rate) mode. 138 * @data_stream_enable: Enable data stream. 139 * @data_stream_disable: Disable data stream. 140 * @data_transfer_addr: Set data address. 141 **/ 142 struct iio_backend_ops { 143 int (*enable)(struct iio_backend *back); 144 void (*disable)(struct iio_backend *back); 145 int (*chan_enable)(struct iio_backend *back, unsigned int chan); 146 int (*chan_disable)(struct iio_backend *back, unsigned int chan); 147 int (*data_format_set)(struct iio_backend *back, unsigned int chan, 148 const struct iio_backend_data_fmt *data); 149 int (*data_source_set)(struct iio_backend *back, unsigned int chan, 150 enum iio_backend_data_source data); 151 int (*data_source_get)(struct iio_backend *back, unsigned int chan, 152 enum iio_backend_data_source *data); 153 int (*set_sample_rate)(struct iio_backend *back, unsigned int chan, 154 u64 sample_rate_hz); 155 int (*test_pattern_set)(struct iio_backend *back, 156 unsigned int chan, 157 enum iio_backend_test_pattern pattern); 158 int (*chan_status)(struct iio_backend *back, unsigned int chan, 159 bool *error); 160 int (*iodelay_set)(struct iio_backend *back, unsigned int chan, 161 unsigned int taps); 162 int (*data_sample_trigger)(struct iio_backend *back, 163 enum iio_backend_sample_trigger trigger); 164 struct iio_buffer *(*request_buffer)(struct iio_backend *back, 165 struct iio_dev *indio_dev); 166 void (*free_buffer)(struct iio_backend *back, 167 struct iio_buffer *buffer); 168 int (*extend_chan_spec)(struct iio_backend *back, 169 struct iio_chan_spec *chan); 170 int (*ext_info_set)(struct iio_backend *back, uintptr_t private, 171 const struct iio_chan_spec *chan, 172 const char *buf, size_t len); 173 int (*ext_info_get)(struct iio_backend *back, uintptr_t private, 174 const struct iio_chan_spec *chan, char *buf); 175 int (*interface_type_get)(struct iio_backend *back, 176 enum iio_backend_interface_type *type); 177 int (*data_size_set)(struct iio_backend *back, unsigned int size); 178 int (*oversampling_ratio_set)(struct iio_backend *back, 179 unsigned int chan, unsigned int ratio); 180 int (*read_raw)(struct iio_backend *back, 181 struct iio_chan_spec const *chan, int *val, int *val2, 182 long mask); 183 int (*debugfs_print_chan_status)(struct iio_backend *back, 184 unsigned int chan, char *buf, 185 size_t len); 186 int (*debugfs_reg_access)(struct iio_backend *back, unsigned int reg, 187 unsigned int writeval, unsigned int *readval); 188 int (*filter_type_set)(struct iio_backend *back, 189 enum iio_backend_filter_type type); 190 int (*interface_data_align)(struct iio_backend *back, u32 timeout_us); 191 int (*num_lanes_set)(struct iio_backend *back, unsigned int num_lanes); 192 int (*ddr_enable)(struct iio_backend *back); 193 int (*ddr_disable)(struct iio_backend *back); 194 int (*data_stream_enable)(struct iio_backend *back); 195 int (*data_stream_disable)(struct iio_backend *back); 196 int (*data_transfer_addr)(struct iio_backend *back, u32 address); 197 }; 198 199 /** 200 * struct iio_backend_info - info structure for an iio_backend 201 * @name: Backend name. 202 * @ops: Backend operations. 203 * @caps: Backend capabilities. (bitmask of enum iio_backend_capabilities). 204 */ 205 struct iio_backend_info { 206 const char *name; 207 const struct iio_backend_ops *ops; 208 u32 caps; 209 }; 210 211 int iio_backend_chan_enable(struct iio_backend *back, unsigned int chan); 212 int iio_backend_chan_disable(struct iio_backend *back, unsigned int chan); 213 int devm_iio_backend_enable(struct device *dev, struct iio_backend *back); 214 int iio_backend_enable(struct iio_backend *back); 215 void iio_backend_disable(struct iio_backend *back); 216 int iio_backend_data_format_set(struct iio_backend *back, unsigned int chan, 217 const struct iio_backend_data_fmt *data); 218 int iio_backend_data_source_set(struct iio_backend *back, unsigned int chan, 219 enum iio_backend_data_source data); 220 int iio_backend_data_source_get(struct iio_backend *back, unsigned int chan, 221 enum iio_backend_data_source *data); 222 int iio_backend_set_sampling_freq(struct iio_backend *back, unsigned int chan, 223 u64 sample_rate_hz); 224 int iio_backend_test_pattern_set(struct iio_backend *back, 225 unsigned int chan, 226 enum iio_backend_test_pattern pattern); 227 int iio_backend_chan_status(struct iio_backend *back, unsigned int chan, 228 bool *error); 229 int iio_backend_iodelay_set(struct iio_backend *back, unsigned int lane, 230 unsigned int taps); 231 int iio_backend_data_sample_trigger(struct iio_backend *back, 232 enum iio_backend_sample_trigger trigger); 233 int devm_iio_backend_request_buffer(struct device *dev, 234 struct iio_backend *back, 235 struct iio_dev *indio_dev); 236 int iio_backend_filter_type_set(struct iio_backend *back, 237 enum iio_backend_filter_type type); 238 int iio_backend_interface_data_align(struct iio_backend *back, u32 timeout_us); 239 int iio_backend_num_lanes_set(struct iio_backend *back, unsigned int num_lanes); 240 int iio_backend_ddr_enable(struct iio_backend *back); 241 int iio_backend_ddr_disable(struct iio_backend *back); 242 int iio_backend_data_stream_enable(struct iio_backend *back); 243 int iio_backend_data_stream_disable(struct iio_backend *back); 244 int iio_backend_data_transfer_addr(struct iio_backend *back, u32 address); 245 ssize_t iio_backend_ext_info_set(struct iio_dev *indio_dev, uintptr_t private, 246 const struct iio_chan_spec *chan, 247 const char *buf, size_t len); 248 ssize_t iio_backend_ext_info_get(struct iio_dev *indio_dev, uintptr_t private, 249 const struct iio_chan_spec *chan, char *buf); 250 int iio_backend_interface_type_get(struct iio_backend *back, 251 enum iio_backend_interface_type *type); 252 int iio_backend_data_size_set(struct iio_backend *back, unsigned int size); 253 int iio_backend_oversampling_ratio_set(struct iio_backend *back, 254 unsigned int chan, 255 unsigned int ratio); 256 int iio_backend_read_raw(struct iio_backend *back, 257 struct iio_chan_spec const *chan, int *val, int *val2, 258 long mask); 259 int iio_backend_extend_chan_spec(struct iio_backend *back, 260 struct iio_chan_spec *chan); 261 bool iio_backend_has_caps(struct iio_backend *back, u32 caps); 262 void *iio_backend_get_priv(const struct iio_backend *conv); 263 struct iio_backend *devm_iio_backend_get(struct device *dev, const char *name); 264 struct iio_backend *devm_iio_backend_get_by_index(struct device *dev, unsigned int index); 265 struct iio_backend *devm_iio_backend_fwnode_get(struct device *dev, 266 const char *name, 267 struct fwnode_handle *fwnode); 268 struct iio_backend * 269 __devm_iio_backend_get_from_fwnode_lookup(struct device *dev, 270 struct fwnode_handle *fwnode); 271 272 int devm_iio_backend_register(struct device *dev, 273 const struct iio_backend_info *info, void *priv); 274 275 static inline int iio_backend_read_scale(struct iio_backend *back, 276 struct iio_chan_spec const *chan, 277 int *val, int *val2) 278 { 279 return iio_backend_read_raw(back, chan, val, val2, IIO_CHAN_INFO_SCALE); 280 } 281 282 static inline int iio_backend_read_offset(struct iio_backend *back, 283 struct iio_chan_spec const *chan, 284 int *val, int *val2) 285 { 286 return iio_backend_read_raw(back, chan, val, val2, 287 IIO_CHAN_INFO_OFFSET); 288 } 289 290 ssize_t iio_backend_debugfs_print_chan_status(struct iio_backend *back, 291 unsigned int chan, char *buf, 292 size_t len); 293 void iio_backend_debugfs_add(struct iio_backend *back, 294 struct iio_dev *indio_dev); 295 #endif 296