aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux
diff options
context:
space:
mode:
Diffstat (limited to 'include/linux')
-rw-r--r--include/linux/iio/adc/ad_sigma_delta.h6
-rw-r--r--include/linux/iio/common/st_sensors.h5
-rw-r--r--include/linux/iio/iio.h79
-rw-r--r--include/linux/iio/imu/adis.h34
-rw-r--r--include/linux/iio/trigger.h26
5 files changed, 55 insertions, 95 deletions
diff --git a/include/linux/iio/adc/ad_sigma_delta.h b/include/linux/iio/adc/ad_sigma_delta.h
index 2e4eab9868a3..e7fdec4db9da 100644
--- a/include/linux/iio/adc/ad_sigma_delta.h
+++ b/include/linux/iio/adc/ad_sigma_delta.h
@@ -133,9 +133,9 @@ int ad_sd_validate_trigger(struct iio_dev *indio_dev, struct iio_trigger *trig);
133 .channel2 = (_channel2), \ 133 .channel2 = (_channel2), \
134 .address = (_address), \ 134 .address = (_address), \
135 .extend_name = (_extend_name), \ 135 .extend_name = (_extend_name), \
136 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | \ 136 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | \
137 IIO_CHAN_INFO_SCALE_SHARED_BIT | \ 137 BIT(IIO_CHAN_INFO_OFFSET), \
138 IIO_CHAN_INFO_OFFSET_SEPARATE_BIT, \ 138 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE), \
139 .scan_index = (_si), \ 139 .scan_index = (_si), \
140 .scan_type = { \ 140 .scan_type = { \
141 .sign = 'u', \ 141 .sign = 'u', \
diff --git a/include/linux/iio/common/st_sensors.h b/include/linux/iio/common/st_sensors.h
index 8bd12be0b02f..172c5b23cb84 100644
--- a/include/linux/iio/common/st_sensors.h
+++ b/include/linux/iio/common/st_sensors.h
@@ -15,6 +15,7 @@
15#include <linux/spi/spi.h> 15#include <linux/spi/spi.h>
16#include <linux/irqreturn.h> 16#include <linux/irqreturn.h>
17#include <linux/iio/trigger.h> 17#include <linux/iio/trigger.h>
18#include <linux/bitops.h>
18 19
19#define ST_SENSORS_TX_MAX_LENGTH 2 20#define ST_SENSORS_TX_MAX_LENGTH 2
20#define ST_SENSORS_RX_MAX_LENGTH 6 21#define ST_SENSORS_RX_MAX_LENGTH 6
@@ -45,8 +46,8 @@
45{ \ 46{ \
46 .type = device_type, \ 47 .type = device_type, \
47 .modified = 1, \ 48 .modified = 1, \
48 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | \ 49 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | \
49 IIO_CHAN_INFO_SCALE_SEPARATE_BIT, \ 50 BIT(IIO_CHAN_INFO_SCALE), \
50 .scan_index = index, \ 51 .scan_index = index, \
51 .channel2 = mod, \ 52 .channel2 = mod, \
52 .address = addr, \ 53 .address = addr, \
diff --git a/include/linux/iio/iio.h b/include/linux/iio/iio.h
index da8c776ba0bd..8d171f427632 100644
--- a/include/linux/iio/iio.h
+++ b/include/linux/iio/iio.h
@@ -38,76 +38,6 @@ enum iio_chan_info_enum {
38 IIO_CHAN_INFO_HYSTERESIS, 38 IIO_CHAN_INFO_HYSTERESIS,
39}; 39};
40 40
41#define IIO_CHAN_INFO_SHARED_BIT(type) BIT(type*2)
42#define IIO_CHAN_INFO_SEPARATE_BIT(type) BIT(type*2 + 1)
43#define IIO_CHAN_INFO_BITS(type) (IIO_CHAN_INFO_SHARED_BIT(type) | \
44 IIO_CHAN_INFO_SEPARATE_BIT(type))
45
46#define IIO_CHAN_INFO_RAW_SEPARATE_BIT \
47 IIO_CHAN_INFO_SEPARATE_BIT(IIO_CHAN_INFO_RAW)
48#define IIO_CHAN_INFO_PROCESSED_SEPARATE_BIT \
49 IIO_CHAN_INFO_SEPARATE_BIT(IIO_CHAN_INFO_PROCESSED)
50#define IIO_CHAN_INFO_SCALE_SEPARATE_BIT \
51 IIO_CHAN_INFO_SEPARATE_BIT(IIO_CHAN_INFO_SCALE)
52#define IIO_CHAN_INFO_SCALE_SHARED_BIT \
53 IIO_CHAN_INFO_SHARED_BIT(IIO_CHAN_INFO_SCALE)
54#define IIO_CHAN_INFO_OFFSET_SEPARATE_BIT \
55 IIO_CHAN_INFO_SEPARATE_BIT(IIO_CHAN_INFO_OFFSET)
56#define IIO_CHAN_INFO_OFFSET_SHARED_BIT \
57 IIO_CHAN_INFO_SHARED_BIT(IIO_CHAN_INFO_OFFSET)
58#define IIO_CHAN_INFO_CALIBSCALE_SEPARATE_BIT \
59 IIO_CHAN_INFO_SEPARATE_BIT(IIO_CHAN_INFO_CALIBSCALE)
60#define IIO_CHAN_INFO_CALIBSCALE_SHARED_BIT \
61 IIO_CHAN_INFO_SHARED_BIT(IIO_CHAN_INFO_CALIBSCALE)
62#define IIO_CHAN_INFO_CALIBBIAS_SEPARATE_BIT \
63 IIO_CHAN_INFO_SEPARATE_BIT(IIO_CHAN_INFO_CALIBBIAS)
64#define IIO_CHAN_INFO_CALIBBIAS_SHARED_BIT \
65 IIO_CHAN_INFO_SHARED_BIT(IIO_CHAN_INFO_CALIBBIAS)
66#define IIO_CHAN_INFO_PEAK_SEPARATE_BIT \
67 IIO_CHAN_INFO_SEPARATE_BIT(IIO_CHAN_INFO_PEAK)
68#define IIO_CHAN_INFO_PEAK_SHARED_BIT \
69 IIO_CHAN_INFO_SHARED_BIT(IIO_CHAN_INFO_PEAK)
70#define IIO_CHAN_INFO_PEAKSCALE_SEPARATE_BIT \
71 IIO_CHAN_INFO_SEPARATE_BIT(IIO_CHAN_INFO_PEAKSCALE)
72#define IIO_CHAN_INFO_PEAKSCALE_SHARED_BIT \
73 IIO_CHAN_INFO_SHARED_BIT(IIO_CHAN_INFO_PEAKSCALE)
74#define IIO_CHAN_INFO_QUADRATURE_CORRECTION_RAW_SEPARATE_BIT \
75 IIO_CHAN_INFO_SEPARATE_BIT( \
76 IIO_CHAN_INFO_QUADRATURE_CORRECTION_RAW)
77#define IIO_CHAN_INFO_QUADRATURE_CORRECTION_RAW_SHARED_BIT \
78 IIO_CHAN_INFO_SHARED_BIT( \
79 IIO_CHAN_INFO_QUADRATURE_CORRECTION_RAW)
80#define IIO_CHAN_INFO_AVERAGE_RAW_SEPARATE_BIT \
81 IIO_CHAN_INFO_SEPARATE_BIT(IIO_CHAN_INFO_AVERAGE_RAW)
82#define IIO_CHAN_INFO_AVERAGE_RAW_SHARED_BIT \
83 IIO_CHAN_INFO_SHARED_BIT(IIO_CHAN_INFO_AVERAGE_RAW)
84#define IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY_SHARED_BIT \
85 IIO_CHAN_INFO_SHARED_BIT( \
86 IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY)
87#define IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY_SEPARATE_BIT \
88 IIO_CHAN_INFO_SEPARATE_BIT( \
89 IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY)
90#define IIO_CHAN_INFO_SAMP_FREQ_SEPARATE_BIT \
91 IIO_CHAN_INFO_SEPARATE_BIT(IIO_CHAN_INFO_SAMP_FREQ)
92#define IIO_CHAN_INFO_SAMP_FREQ_SHARED_BIT \
93 IIO_CHAN_INFO_SHARED_BIT(IIO_CHAN_INFO_SAMP_FREQ)
94#define IIO_CHAN_INFO_FREQUENCY_SEPARATE_BIT \
95 IIO_CHAN_INFO_SEPARATE_BIT(IIO_CHAN_INFO_FREQUENCY)
96#define IIO_CHAN_INFO_FREQUENCY_SHARED_BIT \
97 IIO_CHAN_INFO_SHARED_BIT(IIO_CHAN_INFO_FREQUENCY)
98#define IIO_CHAN_INFO_PHASE_SEPARATE_BIT \
99 IIO_CHAN_INFO_SEPARATE_BIT(IIO_CHAN_INFO_PHASE)
100#define IIO_CHAN_INFO_PHASE_SHARED_BIT \
101 IIO_CHAN_INFO_SHARED_BIT(IIO_CHAN_INFO_PHASE)
102#define IIO_CHAN_INFO_HARDWAREGAIN_SEPARATE_BIT \
103 IIO_CHAN_INFO_SEPARATE_BIT(IIO_CHAN_INFO_HARDWAREGAIN)
104#define IIO_CHAN_INFO_HARDWAREGAIN_SHARED_BIT \
105 IIO_CHAN_INFO_SHARED_BIT(IIO_CHAN_INFO_HARDWAREGAIN)
106#define IIO_CHAN_INFO_HYSTERESIS_SEPARATE_BIT \
107 IIO_CHAN_INFO_SEPARATE_BIT(IIO_CHAN_INFO_HYSTERESIS)
108#define IIO_CHAN_INFO_HYSTERESIS_SHARED_BIT \
109 IIO_CHAN_INFO_SHARED_BIT(IIO_CHAN_INFO_HYSTERESIS)
110
111enum iio_endian { 41enum iio_endian {
112 IIO_CPU, 42 IIO_CPU,
113 IIO_BE, 43 IIO_BE,
@@ -218,6 +148,10 @@ ssize_t iio_enum_write(struct iio_dev *indio_dev,
218 * endianness: little or big endian 148 * endianness: little or big endian
219 * @info_mask: What information is to be exported about this channel. 149 * @info_mask: What information is to be exported about this channel.
220 * This includes calibbias, scale etc. 150 * This includes calibbias, scale etc.
151 * @info_mask_separate: What information is to be exported that is specific to
152 * this channel.
153 * @info_mask_shared_by_type: What information is to be exported that is shared
154* by all channels of the same type.
221 * @event_mask: What events can this channel produce. 155 * @event_mask: What events can this channel produce.
222 * @ext_info: Array of extended info attributes for this channel. 156 * @ext_info: Array of extended info attributes for this channel.
223 * The array is NULL terminated, the last element should 157 * The array is NULL terminated, the last element should
@@ -253,6 +187,8 @@ struct iio_chan_spec {
253 enum iio_endian endianness; 187 enum iio_endian endianness;
254 } scan_type; 188 } scan_type;
255 long info_mask; 189 long info_mask;
190 long info_mask_separate;
191 long info_mask_shared_by_type;
256 long event_mask; 192 long event_mask;
257 const struct iio_chan_spec_ext_info *ext_info; 193 const struct iio_chan_spec_ext_info *ext_info;
258 const char *extend_name; 194 const char *extend_name;
@@ -275,7 +211,8 @@ struct iio_chan_spec {
275static inline bool iio_channel_has_info(const struct iio_chan_spec *chan, 211static inline bool iio_channel_has_info(const struct iio_chan_spec *chan,
276 enum iio_chan_info_enum type) 212 enum iio_chan_info_enum type)
277{ 213{
278 return chan->info_mask & IIO_CHAN_INFO_BITS(type); 214 return (chan->info_mask_separate & type) |
215 (chan->info_mask_shared_by_type & type);
279} 216}
280 217
281#define IIO_ST(si, rb, sb, sh) \ 218#define IIO_ST(si, rb, sb, sh) \
diff --git a/include/linux/iio/imu/adis.h b/include/linux/iio/imu/adis.h
index ff781dca2e9a..b665dc7f017b 100644
--- a/include/linux/iio/imu/adis.h
+++ b/include/linux/iio/imu/adis.h
@@ -162,8 +162,8 @@ int adis_single_conversion(struct iio_dev *indio_dev,
162 .indexed = 1, \ 162 .indexed = 1, \
163 .channel = (chan), \ 163 .channel = (chan), \
164 .extend_name = name, \ 164 .extend_name = name, \
165 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | \ 165 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | \
166 IIO_CHAN_INFO_SCALE_SEPARATE_BIT, \ 166 BIT(IIO_CHAN_INFO_SCALE), \
167 .address = (addr), \ 167 .address = (addr), \
168 .scan_index = (si), \ 168 .scan_index = (si), \
169 .scan_type = { \ 169 .scan_type = { \
@@ -184,9 +184,9 @@ int adis_single_conversion(struct iio_dev *indio_dev,
184 .type = IIO_TEMP, \ 184 .type = IIO_TEMP, \
185 .indexed = 1, \ 185 .indexed = 1, \
186 .channel = 0, \ 186 .channel = 0, \
187 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | \ 187 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | \
188 IIO_CHAN_INFO_SCALE_SEPARATE_BIT | \ 188 BIT(IIO_CHAN_INFO_SCALE) | \
189 IIO_CHAN_INFO_OFFSET_SEPARATE_BIT, \ 189 BIT(IIO_CHAN_INFO_OFFSET), \
190 .address = (addr), \ 190 .address = (addr), \
191 .scan_index = (si), \ 191 .scan_index = (si), \
192 .scan_type = { \ 192 .scan_type = { \
@@ -197,13 +197,13 @@ int adis_single_conversion(struct iio_dev *indio_dev,
197 }, \ 197 }, \
198} 198}
199 199
200#define ADIS_MOD_CHAN(_type, mod, addr, si, info, bits) { \ 200#define ADIS_MOD_CHAN(_type, mod, addr, si, info_sep, bits) { \
201 .type = (_type), \ 201 .type = (_type), \
202 .modified = 1, \ 202 .modified = 1, \
203 .channel2 = IIO_MOD_ ## mod, \ 203 .channel2 = IIO_MOD_ ## mod, \
204 .info_mask = IIO_CHAN_INFO_RAW_SEPARATE_BIT | \ 204 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | \
205 IIO_CHAN_INFO_SCALE_SHARED_BIT | \ 205 info_sep, \
206 info, \ 206 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE), \
207 .address = (addr), \ 207 .address = (addr), \
208 .scan_index = (si), \ 208 .scan_index = (si), \
209 .scan_type = { \ 209 .scan_type = { \
@@ -214,17 +214,17 @@ int adis_single_conversion(struct iio_dev *indio_dev,
214 }, \ 214 }, \
215} 215}
216 216
217#define ADIS_ACCEL_CHAN(mod, addr, si, info, bits) \ 217#define ADIS_ACCEL_CHAN(mod, addr, si, info_sep, bits) \
218 ADIS_MOD_CHAN(IIO_ACCEL, mod, addr, si, info, bits) 218 ADIS_MOD_CHAN(IIO_ACCEL, mod, addr, si, info_sep, bits)
219 219
220#define ADIS_GYRO_CHAN(mod, addr, si, info, bits) \ 220#define ADIS_GYRO_CHAN(mod, addr, si, info_sep, bits) \
221 ADIS_MOD_CHAN(IIO_ANGL_VEL, mod, addr, si, info, bits) 221 ADIS_MOD_CHAN(IIO_ANGL_VEL, mod, addr, si, info_sep, bits)
222 222
223#define ADIS_INCLI_CHAN(mod, addr, si, info, bits) \ 223#define ADIS_INCLI_CHAN(mod, addr, si, info_sep, bits) \
224 ADIS_MOD_CHAN(IIO_INCLI, mod, addr, si, info, bits) 224 ADIS_MOD_CHAN(IIO_INCLI, mod, addr, si, info_sep, bits)
225 225
226#define ADIS_ROT_CHAN(mod, addr, si, info, bits) \ 226#define ADIS_ROT_CHAN(mod, addr, si, info_sep, bits) \
227 ADIS_MOD_CHAN(IIO_ROT, mod, addr, si, info, bits) 227 ADIS_MOD_CHAN(IIO_ROT, mod, addr, si, info_sep, bits)
228 228
229#ifdef CONFIG_IIO_ADIS_LIB_BUFFER 229#ifdef CONFIG_IIO_ADIS_LIB_BUFFER
230 230
diff --git a/include/linux/iio/trigger.h b/include/linux/iio/trigger.h
index c66e0a96f6e8..3869c525b052 100644
--- a/include/linux/iio/trigger.h
+++ b/include/linux/iio/trigger.h
@@ -44,7 +44,6 @@ struct iio_trigger_ops {
44 * @id: [INTERN] unique id number 44 * @id: [INTERN] unique id number
45 * @name: [DRIVER] unique name 45 * @name: [DRIVER] unique name
46 * @dev: [DRIVER] associated device (if relevant) 46 * @dev: [DRIVER] associated device (if relevant)
47 * @private_data: [DRIVER] device specific data
48 * @list: [INTERN] used in maintenance of global trigger list 47 * @list: [INTERN] used in maintenance of global trigger list
49 * @alloc_list: [DRIVER] used for driver specific trigger list 48 * @alloc_list: [DRIVER] used for driver specific trigger list
50 * @use_count: use count for the trigger 49 * @use_count: use count for the trigger
@@ -60,7 +59,6 @@ struct iio_trigger {
60 const char *name; 59 const char *name;
61 struct device dev; 60 struct device dev;
62 61
63 void *private_data;
64 struct list_head list; 62 struct list_head list;
65 struct list_head alloc_list; 63 struct list_head alloc_list;
66 int use_count; 64 int use_count;
@@ -92,6 +90,30 @@ static inline void iio_trigger_get(struct iio_trigger *trig)
92} 90}
93 91
94/** 92/**
93 * iio_device_set_drvdata() - Set trigger driver data
94 * @trig: IIO trigger structure
95 * @data: Driver specific data
96 *
97 * Allows to attach an arbitrary pointer to an IIO trigger, which can later be
98 * retrieved by iio_trigger_get_drvdata().
99 */
100static inline void iio_trigger_set_drvdata(struct iio_trigger *trig, void *data)
101{
102 dev_set_drvdata(&trig->dev, data);
103}
104
105/**
106 * iio_trigger_get_drvdata() - Get trigger driver data
107 * @trig: IIO trigger structure
108 *
109 * Returns the data previously set with iio_trigger_set_drvdata()
110 */
111static inline void *iio_trigger_get_drvdata(struct iio_trigger *trig)
112{
113 return dev_get_drvdata(&trig->dev);
114}
115
116/**
95 * iio_trigger_register() - register a trigger with the IIO core 117 * iio_trigger_register() - register a trigger with the IIO core
96 * @trig_info: trigger to be registered 118 * @trig_info: trigger to be registered
97 **/ 119 **/