blob: 8d00224e6fadb2ba8cd37debf0bf2e17d28ed27d [file] [log] [blame]
Jonathan Camerone6477002011-10-14 16:34:14 +01001/**
2 * Copyright (c) 2011 Jonathan Cameron
3 *
4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License version 2 as published by
6 * the Free Software Foundation.
7 *
8 * Join together the various functionality of iio_simple_dummy driver
9 */
10
Roberta Dobrescuf3f883b2014-09-25 16:58:07 +030011#ifndef _IIO_SIMPLE_DUMMY_H_
12#define _IIO_SIMPLE_DUMMY_H_
Jonathan Camerone6477002011-10-14 16:34:14 +010013#include <linux/kernel.h>
14
15struct iio_dummy_accel_calibscale;
Daniel Baluta356ae942014-11-10 14:45:29 +020016struct iio_dummy_regs;
Jonathan Camerone6477002011-10-14 16:34:14 +010017
18/**
19 * struct iio_dummy_state - device instance specific state.
20 * @dac_val: cache for dac value
21 * @single_ended_adc_val: cache for single ended adc value
22 * @differential_adc_val: cache for differential adc value
23 * @accel_val: cache for acceleration value
24 * @accel_calibbias: cache for acceleration calibbias
25 * @accel_calibscale: cache for acceleration calibscale
26 * @lock: lock to ensure state is consistent
27 * @event_irq: irq number for event line (faked)
Carlos E. Garcia69e98df2015-04-24 09:40:42 -040028 * @event_val: cache for event threshold value
Jonathan Camerone6477002011-10-14 16:34:14 +010029 * @event_en: cache of whether event is enabled
30 */
31struct iio_dummy_state {
32 int dac_val;
33 int single_ended_adc_val;
34 int differential_adc_val[2];
35 int accel_val;
36 int accel_calibbias;
Daniel Baluta3e34e652014-11-10 14:45:34 +020037 int activity_running;
38 int activity_walking;
Jonathan Camerone6477002011-10-14 16:34:14 +010039 const struct iio_dummy_accel_calibscale *accel_calibscale;
40 struct mutex lock;
Daniel Baluta356ae942014-11-10 14:45:29 +020041 struct iio_dummy_regs *regs;
Daniel Baluta3e34e652014-11-10 14:45:34 +020042 int steps_enabled;
43 int steps;
44 int height;
Jonathan Camerone6477002011-10-14 16:34:14 +010045#ifdef CONFIG_IIO_SIMPLE_DUMMY_EVENTS
46 int event_irq;
47 int event_val;
48 bool event_en;
49#endif /* CONFIG_IIO_SIMPLE_DUMMY_EVENTS */
50};
51
52#ifdef CONFIG_IIO_SIMPLE_DUMMY_EVENTS
53
54struct iio_dev;
55
56int iio_simple_dummy_read_event_config(struct iio_dev *indio_dev,
Lars-Peter Clausenbda624b2013-10-07 15:11:00 +010057 const struct iio_chan_spec *chan,
58 enum iio_event_type type,
59 enum iio_event_direction dir);
Jonathan Camerone6477002011-10-14 16:34:14 +010060
61int iio_simple_dummy_write_event_config(struct iio_dev *indio_dev,
Lars-Peter Clausenbda624b2013-10-07 15:11:00 +010062 const struct iio_chan_spec *chan,
63 enum iio_event_type type,
64 enum iio_event_direction dir,
Jonathan Camerone6477002011-10-14 16:34:14 +010065 int state);
66
67int iio_simple_dummy_read_event_value(struct iio_dev *indio_dev,
Lars-Peter Clausenbda624b2013-10-07 15:11:00 +010068 const struct iio_chan_spec *chan,
69 enum iio_event_type type,
70 enum iio_event_direction dir,
71 enum iio_event_info info, int *val,
72 int *val2);
Jonathan Camerone6477002011-10-14 16:34:14 +010073
74int iio_simple_dummy_write_event_value(struct iio_dev *indio_dev,
Lars-Peter Clausenbda624b2013-10-07 15:11:00 +010075 const struct iio_chan_spec *chan,
76 enum iio_event_type type,
77 enum iio_event_direction dir,
78 enum iio_event_info info, int val,
79 int val2);
Jonathan Camerone6477002011-10-14 16:34:14 +010080
81int iio_simple_dummy_events_register(struct iio_dev *indio_dev);
Vladimirs Ambrosovs62a90da2015-05-30 11:20:16 +030082void iio_simple_dummy_events_unregister(struct iio_dev *indio_dev);
Jonathan Camerone6477002011-10-14 16:34:14 +010083
84#else /* Stubs for when events are disabled at compile time */
85
86static inline int
87iio_simple_dummy_events_register(struct iio_dev *indio_dev)
88{
89 return 0;
90};
91
Vladimirs Ambrosovs62a90da2015-05-30 11:20:16 +030092static inline void
Jonathan Camerone6477002011-10-14 16:34:14 +010093iio_simple_dummy_events_unregister(struct iio_dev *indio_dev)
Vladimirs Ambrosovs62a90da2015-05-30 11:20:16 +030094{ };
Jonathan Camerone6477002011-10-14 16:34:14 +010095
96#endif /* CONFIG_IIO_SIMPLE_DUMMY_EVENTS*/
97
Jonathan Cameron9ad2e2e2011-10-14 16:34:15 +010098/**
99 * enum iio_simple_dummy_scan_elements - scan index enum
100 * @voltage0: the single ended voltage channel
101 * @diffvoltage1m2: first differential channel
102 * @diffvoltage3m4: second differenial channel
103 * @accelx: acceleration channel
104 *
105 * Enum provides convenient numbering for the scan index.
106 */
107enum iio_simple_dummy_scan_elements {
108 voltage0,
109 diffvoltage1m2,
110 diffvoltage3m4,
111 accelx,
112};
Jonathan Camerone6477002011-10-14 16:34:14 +0100113
Jonathan Cameron9ad2e2e2011-10-14 16:34:15 +0100114#ifdef CONFIG_IIO_SIMPLE_DUMMY_BUFFER
Lars-Peter Clausen4ae03012014-11-26 18:55:11 +0100115int iio_simple_dummy_configure_buffer(struct iio_dev *indio_dev);
Jonathan Cameron9ad2e2e2011-10-14 16:34:15 +0100116void iio_simple_dummy_unconfigure_buffer(struct iio_dev *indio_dev);
117#else
Vlad Dogaru75d44ce2014-12-29 11:50:16 +0200118static inline int iio_simple_dummy_configure_buffer(struct iio_dev *indio_dev)
Jonathan Cameron9ad2e2e2011-10-14 16:34:15 +0100119{
120 return 0;
121};
Cristina Opriceana862cb6c2015-07-10 17:10:21 +0300122
Jonathan Cameron9ad2e2e2011-10-14 16:34:15 +0100123static inline
124void iio_simple_dummy_unconfigure_buffer(struct iio_dev *indio_dev)
125{};
Roberta Dobrescuf3f883b2014-09-25 16:58:07 +0300126
Jonathan Cameron9ad2e2e2011-10-14 16:34:15 +0100127#endif /* CONFIG_IIO_SIMPLE_DUMMY_BUFFER */
Roberta Dobrescuf3f883b2014-09-25 16:58:07 +0300128#endif /* _IIO_SIMPLE_DUMMY_H_ */