summaryrefslogtreecommitdiff
path: root/drivers/staging/iio/iio_simple_dummy.h
blob: 53975d916fc984134a9fcb5267adffa780146c54 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
/**
 * Copyright (c) 2011 Jonathan Cameron
 *
 * This program is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License version 2 as published by
 * the Free Software Foundation.
 *
 * Join together the various functionality of iio_simple_dummy driver
 */

#include <linux/kernel.h>

struct iio_dummy_accel_calibscale;

/**
 * struct iio_dummy_state - device instance specific state.
 * @dac_val:			cache for dac value
 * @single_ended_adc_val:	cache for single ended adc value
 * @differential_adc_val:	cache for differential adc value
 * @accel_val:			cache for acceleration value
 * @accel_calibbias:		cache for acceleration calibbias
 * @accel_calibscale:		cache for acceleration calibscale
 * @lock:			lock to ensure state is consistent
 * @event_irq:			irq number for event line (faked)
 * @event_val:			cache for event theshold value
 * @event_en:			cache of whether event is enabled
 */
struct iio_dummy_state {
	int dac_val;
	int single_ended_adc_val;
	int differential_adc_val[2];
	int accel_val;
	int accel_calibbias;
	const struct iio_dummy_accel_calibscale *accel_calibscale;
	struct mutex lock;
#ifdef CONFIG_IIO_SIMPLE_DUMMY_EVENTS
	int event_irq;
	int event_val;
	bool event_en;
#endif /* CONFIG_IIO_SIMPLE_DUMMY_EVENTS */
};

#ifdef CONFIG_IIO_SIMPLE_DUMMY_EVENTS

struct iio_dev;

int iio_simple_dummy_read_event_config(struct iio_dev *indio_dev,
				       u64 event_code);

int iio_simple_dummy_write_event_config(struct iio_dev *indio_dev,
					u64 event_code,
					int state);

int iio_simple_dummy_read_event_value(struct iio_dev *indio_dev,
				      u64 event_code,
				      int *val);

int iio_simple_dummy_write_event_value(struct iio_dev *indio_dev,
				       u64 event_code,
				       int val);

int iio_simple_dummy_events_register(struct iio_dev *indio_dev);
int iio_simple_dummy_events_unregister(struct iio_dev *indio_dev);

#else /* Stubs for when events are disabled at compile time */

static inline int
iio_simple_dummy_events_register(struct iio_dev *indio_dev)
{
	return 0;
};

static inline int
iio_simple_dummy_events_unregister(struct iio_dev *indio_dev)
{
	return 0;
};

#endif /* CONFIG_IIO_SIMPLE_DUMMY_EVENTS*/

/**
 * enum iio_simple_dummy_scan_elements - scan index enum
 * @voltage0:		the single ended voltage channel
 * @diffvoltage1m2:	first differential channel
 * @diffvoltage3m4:	second differenial channel
 * @accelx:		acceleration channel
 *
 * Enum provides convenient numbering for the scan index.
 */
enum iio_simple_dummy_scan_elements {
	voltage0,
	diffvoltage1m2,
	diffvoltage3m4,
	accelx,
};

#ifdef CONFIG_IIO_SIMPLE_DUMMY_BUFFER
int iio_simple_dummy_configure_buffer(struct iio_dev *indio_dev);
void iio_simple_dummy_unconfigure_buffer(struct iio_dev *indio_dev);
#else
static inline int iio_simple_dummy_configure_buffer(struct iio_dev *indio_dev)
{
	return 0;
};
static inline
void iio_simple_dummy_unconfigure_buffer(struct iio_dev *indio_dev)
{};
#endif /* CONFIG_IIO_SIMPLE_DUMMY_BUFFER */