sw_trigger.h (1775B)
1/* SPDX-License-Identifier: GPL-2.0-only */ 2/* 3 * Industrial I/O software trigger interface 4 * 5 * Copyright (c) 2015 Intel Corporation 6 */ 7 8#ifndef __IIO_SW_TRIGGER 9#define __IIO_SW_TRIGGER 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_trigger_driver(__iio_sw_trigger_type) \ 17 module_driver(__iio_sw_trigger_type, iio_register_sw_trigger_type, \ 18 iio_unregister_sw_trigger_type) 19 20struct iio_sw_trigger_ops; 21 22struct iio_sw_trigger_type { 23 const char *name; 24 struct module *owner; 25 const struct iio_sw_trigger_ops *ops; 26 struct list_head list; 27 struct config_group *group; 28}; 29 30struct iio_sw_trigger { 31 struct iio_trigger *trigger; 32 struct iio_sw_trigger_type *trigger_type; 33 struct config_group group; 34}; 35 36struct iio_sw_trigger_ops { 37 struct iio_sw_trigger* (*probe)(const char *); 38 int (*remove)(struct iio_sw_trigger *); 39}; 40 41static inline 42struct iio_sw_trigger *to_iio_sw_trigger(struct config_item *item) 43{ 44 return container_of(to_config_group(item), struct iio_sw_trigger, 45 group); 46} 47 48int iio_register_sw_trigger_type(struct iio_sw_trigger_type *tt); 49void iio_unregister_sw_trigger_type(struct iio_sw_trigger_type *tt); 50 51struct iio_sw_trigger *iio_sw_trigger_create(const char *, const char *); 52void iio_sw_trigger_destroy(struct iio_sw_trigger *); 53 54int iio_sw_trigger_type_configfs_register(struct iio_sw_trigger_type *tt); 55void iio_sw_trigger_type_configfs_unregister(struct iio_sw_trigger_type *tt); 56 57static inline 58void iio_swt_group_init_type_name(struct iio_sw_trigger *t, 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(&t->group, name, type); 64#endif 65} 66 67#endif /* __IIO_SW_TRIGGER */