aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux
diff options
context:
space:
mode:
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>2013-09-22 14:30:12 -0400
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2013-09-22 14:30:12 -0400
commit3ffdea3feca9e2c95c2e93e217d77c9c368f747a (patch)
treee970c502cbd02244344ee1449af072d0d7086bbd /include/linux
parent9076b09e07da4b2644a17d7d18e117944cbc09be (diff)
parent074b6a8d9d73db27d48abe4200ce149bd4189b39 (diff)
Merge tag 'iio-for-3.13a' of git://git.kernel.org/pub/scm/linux/kernel/git/jic23/iio into staging-next
Jonathan writes: First round of new drivers, functionality and cleanups for IIO in the 3.13 cycle A number of new drivers and some new functionality + a lot of cleanups all over IIO. New Core Elements 1) New INT_TIME info_mask element for integration time, which may have different effects on measurement noise and similar, than an amplifier and hence is different from existing SCALE. Already existed in some drivers as a custom attribute. 2) Introduce a iio_push_buffers_with_timestamp helper to cover the common case of filling the last 64 bits of data to be passed to the buffer with a timestamp. Applied to lots of drivers. Cuts down on repeated code and moves a slightly fiddly bit of logic into a single location. 3) Introduce info_mask_[shared_by_dir/shared_by_all] elements to allow support of elements such as sampling_frequency which is typically shared by all input channels on a device. This reduces code and makes these controls available from in kernel consumers of IIO devices. New drivers 1) MCP3422/3/4 ADC 2) TSL4531 ambient light sensor 3) TCS3472/5 color light sensor 4) GP2AP020A00F ambient light / proximity sensor 5) LPS001WP support added to ST pressure sensor driver. New driver functionality 1) ti_am335x_adc Add buffered sampling support. This device has a hardware fifo that is fed directly into an IIO kfifo buffer based on a watershed interrupt. Note this will act as an example of how to handle this increasingly common type of device. The only previous example - sca3000 - take a less than optimal approach which is largely why it is still in staging. A couple of little cleanups for that new functionality followed later. Core cleanups: 1) MAINTAINERS - Sachin actually brought my email address up to date because I said I'd do it and never got around to it :) 2) Assign buffer list elements as single element lists to simplify the iio_buffer_is_active logic. 3) wake_up_interruptible_poll instead of wake_up_interruptible to only wake up threads waiting for poll notifications. 4) Add O_CLOEXEC flag to anon_inode_get_fd call for IIO event interface. 5) Change iio_push_to_buffers to take a void * pointer so as to avoid some annoying and unnecessary type casts. 6) iio_compute_scan_bytes incorrectly took a long rather than unsigned long. 7) Various minor tidy ups. Driver cleanups (in no particular order) 1) Another set of devm_ allocations patches from Sachin Kamat. 2) tsl2x7x - 0 to NULL cleanup. 3) hmc5843 - fix missing > in MODULE_AUTHOR 4) Set of strict_strto* to kstrto* conversions. 5) mxs-lradc - fix ordering of resource removal to match creation 6) mxs-lradc - add MODULE_ALIAS 7) adc7606 - drop a work pending test duplicated in core functions. 8) hmc5843 - devm_ allocation patch 9) Series of redundant breaks removed. 10) ad2s1200 - pr_err -> dev_err 11) adjd_s311 - use INT_TIME 12) ST sensors - large set of cleanups from Lee Jones and removed restriction to using only triggers provided by the st_sensors themselves from Dennis Ciocca. 13) dummy and tmp006 provide sampling_frequency via info_mask_shared_by_all. 14) tcs3472 - fix incorrect buffer size and wrong device pointer used in suspend / resume functions. 15) max1363 - use defaults for buffer setup ops as provided by the triggered buffer helpers as they are the same as were specified in max1363 driver. 16) Trivial tidy ups in a number of other drivers.
Diffstat (limited to 'include/linux')
-rw-r--r--include/linux/iio/buffer.h31
-rw-r--r--include/linux/iio/common/st_sensors.h1
-rw-r--r--include/linux/iio/consumer.h2
-rw-r--r--include/linux/iio/iio.h35
-rw-r--r--include/linux/iio/sysfs.h15
-rw-r--r--include/linux/mfd/ti_am335x_tscadc.h9
6 files changed, 78 insertions, 15 deletions
diff --git a/include/linux/iio/buffer.h b/include/linux/iio/buffer.h
index 2bac0eb8948d..a1124bdc4cac 100644
--- a/include/linux/iio/buffer.h
+++ b/include/linux/iio/buffer.h
@@ -36,7 +36,7 @@ struct iio_buffer;
36 * any of them not existing. 36 * any of them not existing.
37 **/ 37 **/
38struct iio_buffer_access_funcs { 38struct iio_buffer_access_funcs {
39 int (*store_to)(struct iio_buffer *buffer, u8 *data); 39 int (*store_to)(struct iio_buffer *buffer, const void *data);
40 int (*read_first_n)(struct iio_buffer *buffer, 40 int (*read_first_n)(struct iio_buffer *buffer,
41 size_t n, 41 size_t n,
42 char __user *buf); 42 char __user *buf);
@@ -81,7 +81,7 @@ struct iio_buffer {
81 bool stufftoread; 81 bool stufftoread;
82 const struct attribute_group *attrs; 82 const struct attribute_group *attrs;
83 struct list_head demux_list; 83 struct list_head demux_list;
84 unsigned char *demux_bounce; 84 void *demux_bounce;
85 struct list_head buffer_list; 85 struct list_head buffer_list;
86}; 86};
87 87
@@ -120,7 +120,32 @@ int iio_scan_mask_set(struct iio_dev *indio_dev,
120 * @indio_dev: iio_dev structure for device. 120 * @indio_dev: iio_dev structure for device.
121 * @data: Full scan. 121 * @data: Full scan.
122 */ 122 */
123int iio_push_to_buffers(struct iio_dev *indio_dev, unsigned char *data); 123int iio_push_to_buffers(struct iio_dev *indio_dev, const void *data);
124
125/*
126 * iio_push_to_buffers_with_timestamp() - push data and timestamp to buffers
127 * @indio_dev: iio_dev structure for device.
128 * @data: sample data
129 * @timestamp: timestamp for the sample data
130 *
131 * Pushes data to the IIO device's buffers. If timestamps are enabled for the
132 * device the function will store the supplied timestamp as the last element in
133 * the sample data buffer before pushing it to the device buffers. The sample
134 * data buffer needs to be large enough to hold the additional timestamp
135 * (usually the buffer should be indio->scan_bytes bytes large).
136 *
137 * Returns 0 on success, a negative error code otherwise.
138 */
139static inline int iio_push_to_buffers_with_timestamp(struct iio_dev *indio_dev,
140 void *data, int64_t timestamp)
141{
142 if (indio_dev->scan_timestamp) {
143 size_t ts_offset = indio_dev->scan_bytes / sizeof(int64_t) - 1;
144 ((int64_t *)data)[ts_offset] = timestamp;
145 }
146
147 return iio_push_to_buffers(indio_dev, data);
148}
124 149
125int iio_update_demux(struct iio_dev *indio_dev); 150int iio_update_demux(struct iio_dev *indio_dev);
126 151
diff --git a/include/linux/iio/common/st_sensors.h b/include/linux/iio/common/st_sensors.h
index e51f65480ea5..e732fda6c8e6 100644
--- a/include/linux/iio/common/st_sensors.h
+++ b/include/linux/iio/common/st_sensors.h
@@ -184,6 +184,7 @@ struct st_sensors {
184 u8 wai; 184 u8 wai;
185 char sensors_supported[ST_SENSORS_MAX_4WAI][ST_SENSORS_MAX_NAME]; 185 char sensors_supported[ST_SENSORS_MAX_4WAI][ST_SENSORS_MAX_NAME];
186 struct iio_chan_spec *ch; 186 struct iio_chan_spec *ch;
187 int num_ch;
187 struct st_sensor_odr odr; 188 struct st_sensor_odr odr;
188 struct st_sensor_power pw; 189 struct st_sensor_power pw;
189 struct st_sensor_axis enable_axis; 190 struct st_sensor_axis enable_axis;
diff --git a/include/linux/iio/consumer.h b/include/linux/iio/consumer.h
index 833926c91aa8..2752b1fd12be 100644
--- a/include/linux/iio/consumer.h
+++ b/include/linux/iio/consumer.h
@@ -77,7 +77,7 @@ struct iio_cb_buffer;
77 * fail. 77 * fail.
78 */ 78 */
79struct iio_cb_buffer *iio_channel_get_all_cb(struct device *dev, 79struct iio_cb_buffer *iio_channel_get_all_cb(struct device *dev,
80 int (*cb)(u8 *data, 80 int (*cb)(const void *data,
81 void *private), 81 void *private),
82 void *private); 82 void *private);
83/** 83/**
diff --git a/include/linux/iio/iio.h b/include/linux/iio/iio.h
index 2103cc32a5fb..ac1cb8f1858c 100644
--- a/include/linux/iio/iio.h
+++ b/include/linux/iio/iio.h
@@ -36,6 +36,14 @@ enum iio_chan_info_enum {
36 IIO_CHAN_INFO_PHASE, 36 IIO_CHAN_INFO_PHASE,
37 IIO_CHAN_INFO_HARDWAREGAIN, 37 IIO_CHAN_INFO_HARDWAREGAIN,
38 IIO_CHAN_INFO_HYSTERESIS, 38 IIO_CHAN_INFO_HYSTERESIS,
39 IIO_CHAN_INFO_INT_TIME,
40};
41
42enum iio_shared_by {
43 IIO_SEPARATE,
44 IIO_SHARED_BY_TYPE,
45 IIO_SHARED_BY_DIR,
46 IIO_SHARED_BY_ALL
39}; 47};
40 48
41enum iio_endian { 49enum iio_endian {
@@ -57,7 +65,7 @@ struct iio_dev;
57 */ 65 */
58struct iio_chan_spec_ext_info { 66struct iio_chan_spec_ext_info {
59 const char *name; 67 const char *name;
60 bool shared; 68 enum iio_shared_by shared;
61 ssize_t (*read)(struct iio_dev *, uintptr_t private, 69 ssize_t (*read)(struct iio_dev *, uintptr_t private,
62 struct iio_chan_spec const *, char *buf); 70 struct iio_chan_spec const *, char *buf);
63 ssize_t (*write)(struct iio_dev *, uintptr_t private, 71 ssize_t (*write)(struct iio_dev *, uintptr_t private,
@@ -125,7 +133,7 @@ ssize_t iio_enum_write(struct iio_dev *indio_dev,
125#define IIO_ENUM_AVAILABLE(_name, _e) \ 133#define IIO_ENUM_AVAILABLE(_name, _e) \
126{ \ 134{ \
127 .name = (_name "_available"), \ 135 .name = (_name "_available"), \
128 .shared = true, \ 136 .shared = IIO_SHARED_BY_TYPE, \
129 .read = iio_enum_available_read, \ 137 .read = iio_enum_available_read, \
130 .private = (uintptr_t)(_e), \ 138 .private = (uintptr_t)(_e), \
131} 139}
@@ -146,12 +154,14 @@ ssize_t iio_enum_write(struct iio_dev *indio_dev,
146 * shift: Shift right by this before masking out 154 * shift: Shift right by this before masking out
147 * realbits. 155 * realbits.
148 * endianness: little or big endian 156 * endianness: little or big endian
149 * @info_mask: What information is to be exported about this channel.
150 * This includes calibbias, scale etc.
151 * @info_mask_separate: What information is to be exported that is specific to 157 * @info_mask_separate: What information is to be exported that is specific to
152 * this channel. 158 * this channel.
153 * @info_mask_shared_by_type: What information is to be exported that is shared 159 * @info_mask_shared_by_type: What information is to be exported that is shared
154* by all channels of the same type. 160 * by all channels of the same type.
161 * @info_mask_shared_by_dir: What information is to be exported that is shared
162 * by all channels of the same direction.
163 * @info_mask_shared_by_all: What information is to be exported that is shared
164 * by all channels.
155 * @event_mask: What events can this channel produce. 165 * @event_mask: What events can this channel produce.
156 * @ext_info: Array of extended info attributes for this channel. 166 * @ext_info: Array of extended info attributes for this channel.
157 * The array is NULL terminated, the last element should 167 * The array is NULL terminated, the last element should
@@ -186,9 +196,10 @@ struct iio_chan_spec {
186 u8 shift; 196 u8 shift;
187 enum iio_endian endianness; 197 enum iio_endian endianness;
188 } scan_type; 198 } scan_type;
189 long info_mask;
190 long info_mask_separate; 199 long info_mask_separate;
191 long info_mask_shared_by_type; 200 long info_mask_shared_by_type;
201 long info_mask_shared_by_dir;
202 long info_mask_shared_by_all;
192 long event_mask; 203 long event_mask;
193 const struct iio_chan_spec_ext_info *ext_info; 204 const struct iio_chan_spec_ext_info *ext_info;
194 const char *extend_name; 205 const char *extend_name;
@@ -212,7 +223,9 @@ static inline bool iio_channel_has_info(const struct iio_chan_spec *chan,
212 enum iio_chan_info_enum type) 223 enum iio_chan_info_enum type)
213{ 224{
214 return (chan->info_mask_separate & BIT(type)) | 225 return (chan->info_mask_separate & BIT(type)) |
215 (chan->info_mask_shared_by_type & BIT(type)); 226 (chan->info_mask_shared_by_type & BIT(type)) |
227 (chan->info_mask_shared_by_dir & BIT(type)) |
228 (chan->info_mask_shared_by_all & BIT(type));
216} 229}
217 230
218#define IIO_ST(si, rb, sb, sh) \ 231#define IIO_ST(si, rb, sb, sh) \
@@ -457,7 +470,7 @@ static inline void iio_device_put(struct iio_dev *indio_dev)
457{ 470{
458 if (indio_dev) 471 if (indio_dev)
459 put_device(&indio_dev->dev); 472 put_device(&indio_dev->dev);
460}; 473}
461 474
462/** 475/**
463 * dev_to_iio_dev() - Get IIO device struct from a device struct 476 * dev_to_iio_dev() - Get IIO device struct from a device struct
@@ -593,7 +606,7 @@ static inline bool iio_buffer_enabled(struct iio_dev *indio_dev)
593{ 606{
594 return indio_dev->currentmode 607 return indio_dev->currentmode
595 & (INDIO_BUFFER_TRIGGERED | INDIO_BUFFER_HARDWARE); 608 & (INDIO_BUFFER_TRIGGERED | INDIO_BUFFER_HARDWARE);
596}; 609}
597 610
598/** 611/**
599 * iio_get_debugfs_dentry() - helper function to get the debugfs_dentry 612 * iio_get_debugfs_dentry() - helper function to get the debugfs_dentry
@@ -603,12 +616,12 @@ static inline bool iio_buffer_enabled(struct iio_dev *indio_dev)
603static inline struct dentry *iio_get_debugfs_dentry(struct iio_dev *indio_dev) 616static inline struct dentry *iio_get_debugfs_dentry(struct iio_dev *indio_dev)
604{ 617{
605 return indio_dev->debugfs_dentry; 618 return indio_dev->debugfs_dentry;
606}; 619}
607#else 620#else
608static inline struct dentry *iio_get_debugfs_dentry(struct iio_dev *indio_dev) 621static inline struct dentry *iio_get_debugfs_dentry(struct iio_dev *indio_dev)
609{ 622{
610 return NULL; 623 return NULL;
611}; 624}
612#endif 625#endif
613 626
614int iio_str_to_fixpoint(const char *str, int fract_mult, int *integer, 627int iio_str_to_fixpoint(const char *str, int fract_mult, int *integer,
diff --git a/include/linux/iio/sysfs.h b/include/linux/iio/sysfs.h
index 2958c960003a..8a1d18640ab9 100644
--- a/include/linux/iio/sysfs.h
+++ b/include/linux/iio/sysfs.h
@@ -100,6 +100,21 @@ struct iio_const_attr {
100#define IIO_CONST_ATTR_SAMP_FREQ_AVAIL(_string) \ 100#define IIO_CONST_ATTR_SAMP_FREQ_AVAIL(_string) \
101 IIO_CONST_ATTR(sampling_frequency_available, _string) 101 IIO_CONST_ATTR(sampling_frequency_available, _string)
102 102
103/**
104 * IIO_DEV_ATTR_INT_TIME_AVAIL - list available integration times
105 * @_show: output method for the attribute
106 **/
107#define IIO_DEV_ATTR_INT_TIME_AVAIL(_show) \
108 IIO_DEVICE_ATTR(integration_time_available, S_IRUGO, _show, NULL, 0)
109/**
110 * IIO_CONST_ATTR_INT_TIME_AVAIL - list available integration times
111 * @_string: frequency string for the attribute
112 *
113 * Constant version
114 **/
115#define IIO_CONST_ATTR_INT_TIME_AVAIL(_string) \
116 IIO_CONST_ATTR(integration_time_available, _string)
117
103#define IIO_DEV_ATTR_TEMP_RAW(_show) \ 118#define IIO_DEV_ATTR_TEMP_RAW(_show) \
104 IIO_DEVICE_ATTR(in_temp_raw, S_IRUGO, _show, NULL, 0) 119 IIO_DEVICE_ATTR(in_temp_raw, S_IRUGO, _show, NULL, 0)
105 120
diff --git a/include/linux/mfd/ti_am335x_tscadc.h b/include/linux/mfd/ti_am335x_tscadc.h
index 25f2c611ab01..08cce7f96ab9 100644
--- a/include/linux/mfd/ti_am335x_tscadc.h
+++ b/include/linux/mfd/ti_am335x_tscadc.h
@@ -46,16 +46,24 @@
46/* Step Enable */ 46/* Step Enable */
47#define STEPENB_MASK (0x1FFFF << 0) 47#define STEPENB_MASK (0x1FFFF << 0)
48#define STEPENB(val) ((val) << 0) 48#define STEPENB(val) ((val) << 0)
49#define ENB(val) (1 << (val))
50#define STPENB_STEPENB STEPENB(0x1FFFF)
51#define STPENB_STEPENB_TC STEPENB(0x1FFF)
49 52
50/* IRQ enable */ 53/* IRQ enable */
51#define IRQENB_HW_PEN BIT(0) 54#define IRQENB_HW_PEN BIT(0)
52#define IRQENB_FIFO0THRES BIT(2) 55#define IRQENB_FIFO0THRES BIT(2)
56#define IRQENB_FIFO0OVRRUN BIT(3)
57#define IRQENB_FIFO0UNDRFLW BIT(4)
53#define IRQENB_FIFO1THRES BIT(5) 58#define IRQENB_FIFO1THRES BIT(5)
59#define IRQENB_FIFO1OVRRUN BIT(6)
60#define IRQENB_FIFO1UNDRFLW BIT(7)
54#define IRQENB_PENUP BIT(9) 61#define IRQENB_PENUP BIT(9)
55 62
56/* Step Configuration */ 63/* Step Configuration */
57#define STEPCONFIG_MODE_MASK (3 << 0) 64#define STEPCONFIG_MODE_MASK (3 << 0)
58#define STEPCONFIG_MODE(val) ((val) << 0) 65#define STEPCONFIG_MODE(val) ((val) << 0)
66#define STEPCONFIG_MODE_SWCNT STEPCONFIG_MODE(1)
59#define STEPCONFIG_MODE_HWSYNC STEPCONFIG_MODE(2) 67#define STEPCONFIG_MODE_HWSYNC STEPCONFIG_MODE(2)
60#define STEPCONFIG_AVG_MASK (7 << 2) 68#define STEPCONFIG_AVG_MASK (7 << 2)
61#define STEPCONFIG_AVG(val) ((val) << 2) 69#define STEPCONFIG_AVG(val) ((val) << 2)
@@ -123,6 +131,7 @@
123#define ADC_CLK 3000000 131#define ADC_CLK 3000000
124#define TOTAL_STEPS 16 132#define TOTAL_STEPS 16
125#define TOTAL_CHANNELS 8 133#define TOTAL_CHANNELS 8
134#define FIFO1_THRESHOLD 19
126 135
127/* 136/*
128* ADC runs at 3MHz, and it takes 137* ADC runs at 3MHz, and it takes