sw_device.h (1736B)
1/* SPDX-License-Identifier: GPL-2.0-only */ 2/* 3 * Industrial I/O software device interface 4 * 5 * Copyright (c) 2016 Intel Corporation 6 */ 7 8#ifndef __IIO_SW_DEVICE 9#define __IIO_SW_DEVICE 10 11#include <linux/module.h> 12#include <linux/device.h> 13#include <linux/iio/iio.h> 14#include <linux/configfs.h> 15 16#define module_iio_sw_device_driver(__iio_sw_device_type) \ 17 module_driver(__iio_sw_device_type, iio_register_sw_device_type, \ 18 iio_unregister_sw_device_type) 19 20struct iio_sw_device_ops; 21 22struct iio_sw_device_type { 23 const char *name; 24 struct module *owner; 25 const struct iio_sw_device_ops *ops; 26 struct list_head list; 27 struct config_group *group; 28}; 29 30struct iio_sw_device { 31 struct iio_dev *device; 32 struct iio_sw_device_type *device_type; 33 struct config_group group; 34}; 35 36struct iio_sw_device_ops { 37 struct iio_sw_device* (*probe)(const char *); 38 int (*remove)(struct iio_sw_device *); 39}; 40 41static inline 42struct iio_sw_device *to_iio_sw_device(struct config_item *item) 43{ 44 return container_of(to_config_group(item), struct iio_sw_device, 45 group); 46} 47 48int iio_register_sw_device_type(struct iio_sw_device_type *dt); 49void iio_unregister_sw_device_type(struct iio_sw_device_type *dt); 50 51struct iio_sw_device *iio_sw_device_create(const char *, const char *); 52void iio_sw_device_destroy(struct iio_sw_device *); 53 54int iio_sw_device_type_configfs_register(struct iio_sw_device_type *dt); 55void iio_sw_device_type_configfs_unregister(struct iio_sw_device_type *dt); 56 57static inline 58void iio_swd_group_init_type_name(struct iio_sw_device *d, 59 const char *name, 60 const struct config_item_type *type) 61{ 62#if IS_ENABLED(CONFIG_CONFIGFS_FS) 63 config_group_init_type_name(&d->group, name, type); 64#endif 65} 66 67#endif /* __IIO_SW_DEVICE */