| 
									
										
										
										
											2009-08-18 18:06:19 +01:00
										 |  |  | /* The industrial I/O core
 | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  *Copyright (c) 2008 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. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * General attributes | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifndef _INDUSTRIAL_IO_SYSFS_H_
 | 
					
						
							|  |  |  | #define _INDUSTRIAL_IO_SYSFS_H_
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-08-12 17:56:05 +01:00
										 |  |  | struct iio_chan_spec; | 
					
						
							| 
									
										
										
										
											2009-08-18 18:06:19 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							|  |  |  |  * struct iio_dev_attr - iio specific device attribute | 
					
						
							|  |  |  |  * @dev_attr:	underlying device attribute | 
					
						
							|  |  |  |  * @address:	associated register address | 
					
						
							| 
									
										
										
										
											2011-05-18 14:40:51 +01:00
										 |  |  |  * @l:		list head for maintaining list of dynamically created attrs. | 
					
						
							| 
									
										
										
										
											2009-08-18 18:06:19 +01:00
										 |  |  |  */ | 
					
						
							|  |  |  | struct iio_dev_attr { | 
					
						
							|  |  |  | 	struct device_attribute dev_attr; | 
					
						
							| 
									
										
										
										
											2011-09-02 17:14:41 +01:00
										 |  |  | 	u64 address; | 
					
						
							| 
									
										
										
										
											2011-05-18 14:40:51 +01:00
										 |  |  | 	struct list_head l; | 
					
						
							|  |  |  | 	struct iio_chan_spec const *c; | 
					
						
							| 
									
										
										
										
											2009-08-18 18:06:19 +01:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define to_iio_dev_attr(_dev_attr)				\
 | 
					
						
							|  |  |  | 	container_of(_dev_attr, struct iio_dev_attr, dev_attr) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ssize_t iio_read_const_attr(struct device *dev, | 
					
						
							|  |  |  | 			    struct device_attribute *attr, | 
					
						
							|  |  |  | 			    char *len); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							|  |  |  |  * struct iio_const_attr - constant device specific attribute | 
					
						
							|  |  |  |  *                         often used for things like available modes | 
					
						
							| 
									
										
										
										
											2009-10-04 19:34:02 -07:00
										 |  |  |  * @string:	attribute string | 
					
						
							|  |  |  |  * @dev_attr:	underlying device attribute | 
					
						
							| 
									
										
										
										
											2009-08-18 18:06:19 +01:00
										 |  |  |  */ | 
					
						
							|  |  |  | struct iio_const_attr { | 
					
						
							|  |  |  | 	const char *string; | 
					
						
							|  |  |  | 	struct device_attribute dev_attr; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define to_iio_const_attr(_dev_attr) \
 | 
					
						
							|  |  |  | 	container_of(_dev_attr, struct iio_const_attr, dev_attr) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-04 19:34:02 -07:00
										 |  |  | /* Some attributes will be hard coded (device dependent) and not require an
 | 
					
						
							| 
									
										
										
										
											2009-08-18 18:06:19 +01:00
										 |  |  |    address, in these cases pass a negative */ | 
					
						
							|  |  |  | #define IIO_ATTR(_name, _mode, _show, _store, _addr)		\
 | 
					
						
							|  |  |  | 	{ .dev_attr = __ATTR(_name, _mode, _show, _store),	\ | 
					
						
							|  |  |  | 	  .address = _addr } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define IIO_DEVICE_ATTR(_name, _mode, _show, _store, _addr)	\
 | 
					
						
							|  |  |  | 	struct iio_dev_attr iio_dev_attr_##_name		\ | 
					
						
							|  |  |  | 	= IIO_ATTR(_name, _mode, _show, _store, _addr) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-05-04 14:42:56 +01:00
										 |  |  | #define IIO_DEVICE_ATTR_NAMED(_vname, _name, _mode, _show, _store, _addr) \
 | 
					
						
							|  |  |  | 	struct iio_dev_attr iio_dev_attr_##_vname			\ | 
					
						
							|  |  |  | 	= IIO_ATTR(_name, _mode, _show, _store, _addr) | 
					
						
							| 
									
										
										
										
											2009-08-18 18:06:19 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | #define IIO_CONST_ATTR(_name, _string)					\
 | 
					
						
							|  |  |  | 	struct iio_const_attr iio_const_attr_##_name			\ | 
					
						
							|  |  |  | 	= { .string = _string,						\ | 
					
						
							|  |  |  | 	    .dev_attr = __ATTR(_name, S_IRUGO, iio_read_const_attr, NULL)} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-08 12:14:08 +01:00
										 |  |  | #define IIO_CONST_ATTR_NAMED(_vname, _name, _string)			\
 | 
					
						
							|  |  |  | 	struct iio_const_attr iio_const_attr_##_vname			\ | 
					
						
							|  |  |  | 	= { .string = _string,						\ | 
					
						
							|  |  |  | 	    .dev_attr = __ATTR(_name, S_IRUGO, iio_read_const_attr, NULL)} | 
					
						
							| 
									
										
										
										
											2009-10-04 19:34:02 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-08-12 17:08:51 +01:00
										 |  |  | /* Generic attributes of onetype or another */ | 
					
						
							| 
									
										
										
										
											2010-10-27 21:44:03 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-08-18 18:06:19 +01:00
										 |  |  | /**
 | 
					
						
							| 
									
										
										
										
											2009-10-04 19:34:02 -07:00
										 |  |  |  * IIO_DEV_ATTR_SAMP_FREQ - sets any internal clock frequency | 
					
						
							|  |  |  |  * @_mode: sysfs file mode/permissions | 
					
						
							|  |  |  |  * @_show: output method for the attribute | 
					
						
							|  |  |  |  * @_store: input method for the attribute | 
					
						
							| 
									
										
										
										
											2009-08-18 18:06:19 +01:00
										 |  |  |  **/ | 
					
						
							|  |  |  | #define IIO_DEV_ATTR_SAMP_FREQ(_mode, _show, _store)			\
 | 
					
						
							|  |  |  | 	IIO_DEVICE_ATTR(sampling_frequency, _mode, _show, _store, 0) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							| 
									
										
										
										
											2011-08-12 17:08:51 +01:00
										 |  |  |  * IIO_DEV_ATTR_SAMP_FREQ_AVAIL - list available sampling frequencies | 
					
						
							| 
									
										
										
										
											2009-10-04 19:34:02 -07:00
										 |  |  |  * @_show: output method for the attribute | 
					
						
							| 
									
										
										
										
											2009-08-18 18:06:19 +01:00
										 |  |  |  * | 
					
						
							| 
									
										
										
										
											2009-10-04 19:34:02 -07:00
										 |  |  |  * May be mode dependent on some devices | 
					
						
							| 
									
										
										
										
											2009-08-18 18:06:19 +01:00
										 |  |  |  **/ | 
					
						
							| 
									
										
										
										
											2010-05-04 14:42:57 +01:00
										 |  |  | #define IIO_DEV_ATTR_SAMP_FREQ_AVAIL(_show)				\
 | 
					
						
							|  |  |  | 	IIO_DEVICE_ATTR(sampling_frequency_available, S_IRUGO, _show, NULL, 0) | 
					
						
							| 
									
										
										
										
											2009-08-18 18:06:19 +01:00
										 |  |  | /**
 | 
					
						
							| 
									
										
										
										
											2012-06-18 20:33:02 +02:00
										 |  |  |  * IIO_CONST_ATTR_SAMP_FREQ_AVAIL - list available sampling frequencies | 
					
						
							| 
									
										
										
										
											2009-10-04 19:34:02 -07:00
										 |  |  |  * @_string: frequency string for the attribute | 
					
						
							| 
									
										
										
										
											2009-08-18 18:06:19 +01:00
										 |  |  |  * | 
					
						
							|  |  |  |  * Constant version | 
					
						
							|  |  |  |  **/ | 
					
						
							| 
									
										
										
										
											2010-05-04 14:42:57 +01:00
										 |  |  | #define IIO_CONST_ATTR_SAMP_FREQ_AVAIL(_string)			\
 | 
					
						
							|  |  |  | 	IIO_CONST_ATTR(sampling_frequency_available, _string) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-09-08 16:20:00 +01:00
										 |  |  | /**
 | 
					
						
							|  |  |  |  * IIO_DEV_ATTR_INT_TIME_AVAIL - list available integration times | 
					
						
							|  |  |  |  * @_show: output method for the attribute | 
					
						
							|  |  |  |  **/ | 
					
						
							|  |  |  | #define IIO_DEV_ATTR_INT_TIME_AVAIL(_show)		\
 | 
					
						
							|  |  |  | 	IIO_DEVICE_ATTR(integration_time_available, S_IRUGO, _show, NULL, 0) | 
					
						
							|  |  |  | /**
 | 
					
						
							|  |  |  |  * IIO_CONST_ATTR_INT_TIME_AVAIL - list available integration times | 
					
						
							|  |  |  |  * @_string: frequency string for the attribute | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Constant version | 
					
						
							|  |  |  |  **/ | 
					
						
							|  |  |  | #define IIO_CONST_ATTR_INT_TIME_AVAIL(_string)		\
 | 
					
						
							|  |  |  | 	IIO_CONST_ATTR(integration_time_available, _string) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-05-04 14:42:57 +01:00
										 |  |  | #define IIO_DEV_ATTR_TEMP_RAW(_show)			\
 | 
					
						
							| 
									
										
										
										
											2011-09-14 13:01:23 +01:00
										 |  |  | 	IIO_DEVICE_ATTR(in_temp_raw, S_IRUGO, _show, NULL, 0) | 
					
						
							| 
									
										
										
										
											2010-05-04 14:42:57 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-08-31 11:32:54 +02:00
										 |  |  | #define IIO_CONST_ATTR_TEMP_OFFSET(_string)		\
 | 
					
						
							| 
									
										
										
										
											2011-09-14 13:01:23 +01:00
										 |  |  | 	IIO_CONST_ATTR(in_temp_offset, _string) | 
					
						
							| 
									
										
										
										
											2010-08-31 11:32:54 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | #define IIO_CONST_ATTR_TEMP_SCALE(_string)		\
 | 
					
						
							| 
									
										
										
										
											2011-09-14 13:01:23 +01:00
										 |  |  | 	IIO_CONST_ATTR(in_temp_scale, _string) | 
					
						
							| 
									
										
										
										
											2010-08-31 11:32:54 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-08-18 18:06:19 +01:00
										 |  |  | #endif /* _INDUSTRIAL_IO_SYSFS_H_ */
 |