162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */
262306a36Sopenharmony_ci/* The industrial I/O core, trigger consumer functions
362306a36Sopenharmony_ci *
462306a36Sopenharmony_ci * Copyright (c) 2008-2011 Jonathan Cameron
562306a36Sopenharmony_ci */
662306a36Sopenharmony_ci
762306a36Sopenharmony_ci#ifndef __LINUX_IIO_TRIGGER_CONSUMER_H__
862306a36Sopenharmony_ci#define __LINUX_IIO_TRIGGER_CONSUMER_H__
962306a36Sopenharmony_ci
1062306a36Sopenharmony_ci#include <linux/interrupt.h>
1162306a36Sopenharmony_ci#include <linux/types.h>
1262306a36Sopenharmony_ci
1362306a36Sopenharmony_cistruct iio_dev;
1462306a36Sopenharmony_cistruct iio_trigger;
1562306a36Sopenharmony_ci
1662306a36Sopenharmony_ci/**
1762306a36Sopenharmony_ci * struct iio_poll_func - poll function pair
1862306a36Sopenharmony_ci *
1962306a36Sopenharmony_ci * @indio_dev:			data specific to device (passed into poll func)
2062306a36Sopenharmony_ci * @h:				the function that is actually run on trigger
2162306a36Sopenharmony_ci * @thread:			threaded interrupt part
2262306a36Sopenharmony_ci * @type:			the type of interrupt (basically if oneshot)
2362306a36Sopenharmony_ci * @name:			name used to identify the trigger consumer.
2462306a36Sopenharmony_ci * @irq:			the corresponding irq as allocated from the
2562306a36Sopenharmony_ci *				trigger pool
2662306a36Sopenharmony_ci * @timestamp:			some devices need a timestamp grabbed as soon
2762306a36Sopenharmony_ci *				as possible after the trigger - hence handler
2862306a36Sopenharmony_ci *				passes it via here.
2962306a36Sopenharmony_ci **/
3062306a36Sopenharmony_cistruct iio_poll_func {
3162306a36Sopenharmony_ci	struct iio_dev *indio_dev;
3262306a36Sopenharmony_ci	irqreturn_t (*h)(int irq, void *p);
3362306a36Sopenharmony_ci	irqreturn_t (*thread)(int irq, void *p);
3462306a36Sopenharmony_ci	int type;
3562306a36Sopenharmony_ci	char *name;
3662306a36Sopenharmony_ci	int irq;
3762306a36Sopenharmony_ci	s64 timestamp;
3862306a36Sopenharmony_ci};
3962306a36Sopenharmony_ci
4062306a36Sopenharmony_ci
4162306a36Sopenharmony_ci__printf(5, 6) struct iio_poll_func
4262306a36Sopenharmony_ci*iio_alloc_pollfunc(irqreturn_t (*h)(int irq, void *p),
4362306a36Sopenharmony_ci		    irqreturn_t (*thread)(int irq, void *p),
4462306a36Sopenharmony_ci		    int type,
4562306a36Sopenharmony_ci		    struct iio_dev *indio_dev,
4662306a36Sopenharmony_ci		    const char *fmt,
4762306a36Sopenharmony_ci		    ...);
4862306a36Sopenharmony_civoid iio_dealloc_pollfunc(struct iio_poll_func *pf);
4962306a36Sopenharmony_ciirqreturn_t iio_pollfunc_store_time(int irq, void *p);
5062306a36Sopenharmony_ci
5162306a36Sopenharmony_civoid iio_trigger_notify_done(struct iio_trigger *trig);
5262306a36Sopenharmony_ci
5362306a36Sopenharmony_ci#endif
54