• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/components/opensource/linux/linux-2.6.36/drivers/staging/iio/
1/* The industrial I/O core
2 *
3 *Copyright (c) 2008 Jonathan Cameron
4 *
5 * This program is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 as published by
7 * the Free Software Foundation.
8 *
9 * General attributes
10 */
11
12#ifndef _INDUSTRIAL_IO_SYSFS_H_
13#define _INDUSTRIAL_IO_SYSFS_H_
14
15#include "iio.h"
16
17/**
18 * struct iio_event_attr - event control attribute
19 * @dev_attr:	underlying device attribute
20 * @mask:	mask for the event when detecting
21 * @listel:	list header to allow addition to list of event handlers
22*/
23struct iio_event_attr {
24	struct device_attribute dev_attr;
25	int mask;
26	struct iio_event_handler_list *listel;
27};
28
29#define to_iio_event_attr(_dev_attr) \
30	container_of(_dev_attr, struct iio_event_attr, dev_attr)
31
32/**
33 * struct iio_chrdev_minor_attr - simple attribute to allow reading of chrdev
34 *				minor number
35 * @dev_attr:	underlying device attribute
36 * @minor:	the minor number
37 */
38struct iio_chrdev_minor_attr {
39	struct device_attribute dev_attr;
40	int minor;
41};
42
43void
44__init_iio_chrdev_minor_attr(struct iio_chrdev_minor_attr *minor_attr,
45			   const char *name,
46			   struct module *owner,
47			   int id);
48
49
50#define to_iio_chrdev_minor_attr(_dev_attr) \
51	container_of(_dev_attr, struct iio_chrdev_minor_attr, dev_attr);
52
53/**
54 * struct iio_dev_attr - iio specific device attribute
55 * @dev_attr:	underlying device attribute
56 * @address:	associated register address
57 * @val2:	secondary attribute value
58 */
59struct iio_dev_attr {
60	struct device_attribute dev_attr;
61	int address;
62	int val2;
63};
64
65#define to_iio_dev_attr(_dev_attr)				\
66	container_of(_dev_attr, struct iio_dev_attr, dev_attr)
67
68ssize_t iio_read_const_attr(struct device *dev,
69			    struct device_attribute *attr,
70			    char *len);
71
72/**
73 * struct iio_const_attr - constant device specific attribute
74 *                         often used for things like available modes
75 * @string:	attribute string
76 * @dev_attr:	underlying device attribute
77 */
78struct iio_const_attr {
79	const char *string;
80	struct device_attribute dev_attr;
81};
82
83#define to_iio_const_attr(_dev_attr) \
84	container_of(_dev_attr, struct iio_const_attr, dev_attr)
85
86/* Some attributes will be hard coded (device dependent) and not require an
87   address, in these cases pass a negative */
88#define IIO_ATTR(_name, _mode, _show, _store, _addr)		\
89	{ .dev_attr = __ATTR(_name, _mode, _show, _store),	\
90	  .address = _addr }
91
92#define IIO_ATTR_2(_name, _mode, _show, _store, _addr, _val2)	\
93	{ .dev_attr = __ATTR(_name, _mode, _show, _store),	\
94			.address = _addr,			\
95			.val2 = _val2 }
96
97#define IIO_DEVICE_ATTR(_name, _mode, _show, _store, _addr)	\
98	struct iio_dev_attr iio_dev_attr_##_name		\
99	= IIO_ATTR(_name, _mode, _show, _store, _addr)
100
101#define IIO_DEVICE_ATTR_NAMED(_vname, _name, _mode, _show, _store, _addr) \
102	struct iio_dev_attr iio_dev_attr_##_vname			\
103	= IIO_ATTR(_name, _mode, _show, _store, _addr)
104
105#define IIO_DEVICE_ATTR_2(_name, _mode, _show, _store, _addr, _val2)	\
106	struct iio_dev_attr iio_dev_attr_##_name			\
107	= IIO_ATTR_2(_name, _mode, _show, _store, _addr, _val2)
108
109#define IIO_CONST_ATTR(_name, _string)					\
110	struct iio_const_attr iio_const_attr_##_name			\
111	= { .string = _string,						\
112	    .dev_attr = __ATTR(_name, S_IRUGO, iio_read_const_attr, NULL)}
113
114/* Generic attributes of onetype or another */
115
116/**
117 * IIO_DEV_ATTR_REV - revision number for the device
118 * @_show: output method for the attribute
119 *
120 * Very much device dependent.
121 **/
122#define IIO_DEV_ATTR_REV(_show)			\
123	IIO_DEVICE_ATTR(revision, S_IRUGO, _show, NULL, 0)
124
125/**
126 * IIO_DEV_ATTR_NAME - chip type dependent identifier
127 * @_show: output method for the attribute
128 **/
129#define IIO_DEV_ATTR_NAME(_show)				\
130	IIO_DEVICE_ATTR(name, S_IRUGO, _show, NULL, 0)
131
132/**
133 * IIO_DEV_ATTR_SAMP_FREQ - sets any internal clock frequency
134 * @_mode: sysfs file mode/permissions
135 * @_show: output method for the attribute
136 * @_store: input method for the attribute
137 **/
138#define IIO_DEV_ATTR_SAMP_FREQ(_mode, _show, _store)			\
139	IIO_DEVICE_ATTR(sampling_frequency, _mode, _show, _store, 0)
140
141/**
142 * IIO_DEV_ATTR_AVAIL_SAMP_FREQ - list available sampling frequencies
143 * @_show: output method for the attribute
144 *
145 * May be mode dependent on some devices
146 **/
147/* Deprecated */
148#define IIO_DEV_ATTR_AVAIL_SAMP_FREQ(_show)				\
149	IIO_DEVICE_ATTR(available_sampling_frequency, S_IRUGO, _show, NULL, 0)
150
151#define IIO_DEV_ATTR_SAMP_FREQ_AVAIL(_show)				\
152	IIO_DEVICE_ATTR(sampling_frequency_available, S_IRUGO, _show, NULL, 0)
153/**
154 * IIO_CONST_ATTR_AVAIL_SAMP_FREQ - list available sampling frequencies
155 * @_string: frequency string for the attribute
156 *
157 * Constant version
158 **/
159/* Deprecated */
160#define IIO_CONST_ATTR_AVAIL_SAMP_FREQ(_string)			\
161	IIO_CONST_ATTR(available_sampling_frequency, _string)
162
163#define IIO_CONST_ATTR_SAMP_FREQ_AVAIL(_string)			\
164	IIO_CONST_ATTR(sampling_frequency_available, _string)
165
166/**
167 * IIO_DEV_ATTR_SCAN_MODE - select a scan mode
168 * @_mode: sysfs file mode/permissions
169 * @_show: output method for the attribute
170 * @_store: input method for the attribute
171 *
172 * This is used when only certain combinations of inputs may be read in one
173 * scan.
174 **/
175#define IIO_DEV_ATTR_SCAN_MODE(_mode, _show, _store)		\
176	IIO_DEVICE_ATTR(scan_mode, _mode, _show, _store, 0)
177
178/**
179 * IIO_DEV_ATTR_AVAIL_SCAN_MODES - list available scan modes
180 * @_show: output method for the attribute
181 **/
182#define IIO_DEV_ATTR_AVAIL_SCAN_MODES(_show)				\
183	IIO_DEVICE_ATTR(available_scan_modes, S_IRUGO, _show, NULL, 0)
184
185/**
186 * IIO_DEV_ATTR_SCAN - result of scan of multiple channels
187 * @_show: output method for the attribute
188 **/
189#define IIO_DEV_ATTR_SCAN(_show)		\
190	IIO_DEVICE_ATTR(scan, S_IRUGO, _show, NULL, 0);
191
192/**
193 * IIO_DEV_ATTR_INPUT - direct read of a single input channel
194 * @_number: input channel number
195 * @_show: output method for the attribute
196 **/
197#define IIO_DEV_ATTR_INPUT(_number, _show)				\
198	IIO_DEVICE_ATTR(in##_number, S_IRUGO, _show, NULL, _number)
199
200/**
201 * IIO_DEV_ATTR_SW_RING_ENABLE - enable software ring buffer
202 * @_show: output method for the attribute
203 * @_store: input method for the attribute
204 *
205 * Success may be dependent on attachment of trigger previously.
206 **/
207#define IIO_DEV_ATTR_SW_RING_ENABLE(_show, _store)			\
208	IIO_DEVICE_ATTR(sw_ring_enable, S_IRUGO | S_IWUSR, _show, _store, 0)
209
210/**
211 * IIO_DEV_ATTR_HW_RING_ENABLE - enable hardware ring buffer
212 * @_show: output method for the attribute
213 * @_store: input method for the attribute
214 *
215 * This is a different attribute from the software one as one can envision
216 * schemes where a combination of the two may be used.
217 **/
218#define IIO_DEV_ATTR_HW_RING_ENABLE(_show, _store)			\
219	IIO_DEVICE_ATTR(hw_ring_enable, S_IRUGO | S_IWUSR, _show, _store, 0)
220
221/**
222 * IIO_DEV_ATTR_BPSE - set number of bits per scan element
223 * @_mode: sysfs file mode/permissions
224 * @_show: output method for the attribute
225 * @_store: input method for the attribute
226 **/
227#define IIO_DEV_ATTR_BPSE(_mode, _show, _store)		\
228	IIO_DEVICE_ATTR(bpse, _mode, _show, _store, 0)
229
230/**
231 * IIO_DEV_ATTR_BPSE_AVAILABLE - number of bits per scan element supported
232 * @_show: output method for the attribute
233 **/
234#define IIO_DEV_ATTR_BPSE_AVAILABLE(_show)				\
235	IIO_DEVICE_ATTR(bpse_available, S_IRUGO, _show, NULL, 0)
236
237/**
238 * IIO_DEV_ATTR_TEMP - many sensors have auxiliary temperature sensors
239 * @_show: output method for the attribute
240 **/
241#define IIO_DEV_ATTR_TEMP(_show)			\
242	IIO_DEVICE_ATTR(temp, S_IRUGO, _show, NULL, 0)
243
244#define IIO_DEV_ATTR_TEMP_RAW(_show)			\
245	IIO_DEVICE_ATTR(temp_raw, S_IRUGO, _show, NULL, 0)
246
247/**
248 * IIO_EVENT_SH - generic shared event handler
249 * @_name: event name
250 * @_handler: handler function to be called
251 *
252 * This is used in cases where more than one event may result from a single
253 * handler.  Often the case that some alarm register must be read and multiple
254 * alarms may have been triggered.
255 **/
256#define IIO_EVENT_SH(_name, _handler)					\
257	static struct iio_event_handler_list				\
258	iio_event_##_name = {						\
259		.handler = _handler,					\
260		.refcount = 0,						\
261		.exist_lock = __MUTEX_INITIALIZER(iio_event_##_name	\
262						  .exist_lock),		\
263		.list = {						\
264			.next = &iio_event_##_name.list,		\
265			.prev = &iio_event_##_name.list,		\
266		},							\
267	};
268
269/**
270 * IIO_EVENT_ATTR_SH - generic shared event attribute
271 * @_name: event name
272 * @_ev_list: event handler list
273 * @_show: output method for the attribute
274 * @_store: input method for the attribute
275 * @_mask: mask used when detecting the event
276 *
277 * An attribute with an associated IIO_EVENT_SH
278 **/
279#define IIO_EVENT_ATTR_SH(_name, _ev_list, _show, _store, _mask)	\
280	static struct iio_event_attr					\
281	iio_event_attr_##_name						\
282	= { .dev_attr = __ATTR(_name, S_IRUGO | S_IWUSR,		\
283			       _show, _store),				\
284	    .mask = _mask,						\
285	    .listel = &_ev_list };
286
287#define IIO_EVENT_ATTR_NAMED_SH(_vname, _name, _ev_list, _show, _store, _mask) \
288	static struct iio_event_attr					\
289	iio_event_attr_##_vname						\
290	= { .dev_attr = __ATTR(_name, S_IRUGO | S_IWUSR,		\
291			       _show, _store),				\
292	    .mask = _mask,						\
293	    .listel = &_ev_list };
294
295/**
296 * IIO_EVENT_ATTR - non-shared event attribute
297 * @_name: event name
298 * @_show: output method for the attribute
299 * @_store: input method for the attribute
300 * @_mask: mask used when detecting the event
301 * @_handler: handler function to be called
302 **/
303#define IIO_EVENT_ATTR(_name, _show, _store, _mask, _handler)		\
304	IIO_EVENT_SH(_name, _handler);					\
305	static struct							\
306	iio_event_attr							\
307	iio_event_attr_##_name						\
308	= { .dev_attr = __ATTR(_name, S_IRUGO | S_IWUSR,		\
309			       _show, _store),				\
310	    .mask = _mask,						\
311	    .listel = &iio_event_##_name };				\
312
313/**
314 * IIO_EVENT_ATTR_DATA_RDY - event driven by data ready signal
315 * @_show: output method for the attribute
316 * @_store: input method for the attribute
317 * @_mask: mask used when detecting the event
318 * @_handler: handler function to be called
319 *
320 * Not typically implemented in devices where full triggering support
321 * has been implemented.
322 **/
323#define IIO_EVENT_ATTR_DATA_RDY(_show, _store, _mask, _handler) \
324	IIO_EVENT_ATTR(data_rdy, _show, _store, _mask, _handler)
325
326#define IIO_EVENT_CODE_DATA_RDY		100
327#define IIO_EVENT_CODE_RING_BASE	200
328#define IIO_EVENT_CODE_ACCEL_BASE	300
329#define IIO_EVENT_CODE_GYRO_BASE	400
330#define IIO_EVENT_CODE_ADC_BASE		500
331#define IIO_EVENT_CODE_MISC_BASE	600
332#define IIO_EVENT_CODE_LIGHT_BASE	700
333
334#define IIO_EVENT_CODE_DEVICE_SPECIFIC	1000
335
336/**
337 * IIO_EVENT_ATTR_RING_50_FULL - ring buffer event to indicate 50% full
338 * @_show: output method for the attribute
339 * @_store: input method for the attribute
340 * @_mask: mask used when detecting the event
341 * @_handler: handler function to be called
342 **/
343#define IIO_EVENT_ATTR_RING_50_FULL(_show, _store, _mask, _handler)	\
344	IIO_EVENT_ATTR(ring_50_full, _show, _store, _mask, _handler)
345
346/**
347 * IIO_EVENT_ATTR_RING_50_FULL_SH - shared ring event to indicate 50% full
348 * @_evlist: event handler list
349 * @_show: output method for the attribute
350 * @_store: input method for the attribute
351 * @_mask: mask used when detecting the event
352 **/
353#define IIO_EVENT_ATTR_RING_50_FULL_SH(_evlist, _show, _store, _mask)	\
354	IIO_EVENT_ATTR_SH(ring_50_full, _evlist, _show, _store, _mask)
355
356/**
357 * IIO_EVENT_ATTR_RING_75_FULL_SH - shared ring event to indicate 75% full
358 * @_evlist: event handler list
359 * @_show: output method for the attribute
360 * @_store: input method for the attribute
361 * @_mask: mask used when detecting the event
362 **/
363#define IIO_EVENT_ATTR_RING_75_FULL_SH(_evlist, _show, _store, _mask)	\
364	IIO_EVENT_ATTR_SH(ring_75_full, _evlist, _show, _store, _mask)
365
366#define IIO_EVENT_CODE_RING_50_FULL	IIO_EVENT_CODE_RING_BASE
367#define IIO_EVENT_CODE_RING_75_FULL	(IIO_EVENT_CODE_RING_BASE + 1)
368#define IIO_EVENT_CODE_RING_100_FULL	(IIO_EVENT_CODE_RING_BASE + 2)
369
370#endif /* _INDUSTRIAL_IO_SYSFS_H_ */
371