1d2912cb1SThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-only */
206458e27SJonathan Cameron /* The industrial I/O core, trigger consumer functions
306458e27SJonathan Cameron  *
406458e27SJonathan Cameron  * Copyright (c) 2008-2011 Jonathan Cameron
506458e27SJonathan Cameron  */
606458e27SJonathan Cameron 
708d6005cSLars-Peter Clausen #ifndef __LINUX_IIO_TRIGGER_CONSUMER_H__
808d6005cSLars-Peter Clausen #define __LINUX_IIO_TRIGGER_CONSUMER_H__
908d6005cSLars-Peter Clausen 
10161e7f6dSLars-Peter Clausen #include <linux/interrupt.h>
11161e7f6dSLars-Peter Clausen #include <linux/types.h>
12161e7f6dSLars-Peter Clausen 
13161e7f6dSLars-Peter Clausen struct iio_dev;
14161e7f6dSLars-Peter Clausen struct iio_trigger;
15161e7f6dSLars-Peter Clausen 
1606458e27SJonathan Cameron /**
1706458e27SJonathan Cameron  * struct iio_poll_func - poll function pair
1806458e27SJonathan Cameron  *
1906458e27SJonathan Cameron  * @indio_dev:			data specific to device (passed into poll func)
2006458e27SJonathan Cameron  * @h:				the function that is actually run on trigger
2106458e27SJonathan Cameron  * @thread:			threaded interrupt part
2206458e27SJonathan Cameron  * @type:			the type of interrupt (basically if oneshot)
2306458e27SJonathan Cameron  * @name:			name used to identify the trigger consumer.
2406458e27SJonathan Cameron  * @irq:			the corresponding irq as allocated from the
2506458e27SJonathan Cameron  *				trigger pool
2606458e27SJonathan Cameron  * @timestamp:			some devices need a timestamp grabbed as soon
2706458e27SJonathan Cameron  *				as possible after the trigger - hence handler
2806458e27SJonathan Cameron  *				passes it via here.
2906458e27SJonathan Cameron  **/
3006458e27SJonathan Cameron struct iio_poll_func {
3106458e27SJonathan Cameron 	struct iio_dev *indio_dev;
3206458e27SJonathan Cameron 	irqreturn_t (*h)(int irq, void *p);
3306458e27SJonathan Cameron 	irqreturn_t (*thread)(int irq, void *p);
3406458e27SJonathan Cameron 	int type;
3506458e27SJonathan Cameron 	char *name;
3606458e27SJonathan Cameron 	int irq;
3706458e27SJonathan Cameron 	s64 timestamp;
3806458e27SJonathan Cameron };
3906458e27SJonathan Cameron 
4006458e27SJonathan Cameron 
41*cd7798cbSJonathan Cameron __printf(5, 6) struct iio_poll_func
4206458e27SJonathan Cameron *iio_alloc_pollfunc(irqreturn_t (*h)(int irq, void *p),
4306458e27SJonathan Cameron 		    irqreturn_t (*thread)(int irq, void *p),
4406458e27SJonathan Cameron 		    int type,
4506458e27SJonathan Cameron 		    struct iio_dev *indio_dev,
4606458e27SJonathan Cameron 		    const char *fmt,
4706458e27SJonathan Cameron 		    ...);
4806458e27SJonathan Cameron void iio_dealloc_pollfunc(struct iio_poll_func *pf);
4906458e27SJonathan Cameron irqreturn_t iio_pollfunc_store_time(int irq, void *p);
5006458e27SJonathan Cameron 
5106458e27SJonathan Cameron void iio_trigger_notify_done(struct iio_trigger *trig);
5206458e27SJonathan Cameron 
5308d6005cSLars-Peter Clausen #endif
54