GNU Linux-libre 4.9.309-gnu1
[releases.git] / drivers / staging / iio / accel / sca3000.h
1 /*
2  * sca3000.c -- support VTI sca3000 series accelerometers
3  *              via SPI
4  *
5  * Copyright (c) 2007 Jonathan Cameron <jic23@kernel.org>
6  *
7  * Partly based upon tle62x0.c
8  *
9  * This program is free software; you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License version 2 as
11  * published by the Free Software Foundation.
12  *
13  * Initial mode is direct measurement.
14  *
15  * Untested things
16  *
17  * Temperature reading (the e05 I'm testing with doesn't have a sensor)
18  *
19  * Free fall detection mode - supported but untested as I'm not droping my
20  * dubious wire rig far enough to test it.
21  *
22  * Unsupported as yet
23  *
24  * Time stamping of data from ring. Various ideas on how to do this but none
25  * are remotely simple. Suggestions welcome.
26  *
27  * Individual enabling disabling of channels going into ring buffer
28  *
29  * Overflow handling (this is signaled for all but 8 bit ring buffer mode.)
30  *
31  * Motion detector using AND combinations of signals.
32  *
33  * Note: Be very careful about not touching an register bytes marked
34  * as reserved on the data sheet. They really mean it as changing convents of
35  * some will cause the device to lock up.
36  *
37  * Known issues - on rare occasions the interrupts lock up. Not sure why as yet.
38  * Can probably alleviate this by reading the interrupt register on start, but
39  * that is really just brushing the problem under the carpet.
40  */
41 #ifndef _SCA3000
42 #define _SCA3000
43
44 #define SCA3000_WRITE_REG(a) (((a) << 2) | 0x02)
45 #define SCA3000_READ_REG(a) ((a) << 2)
46
47 #define SCA3000_REG_ADDR_REVID                  0x00
48 #define SCA3000_REVID_MAJOR_MASK                0xf0
49 #define SCA3000_REVID_MINOR_MASK                0x0f
50
51 #define SCA3000_REG_ADDR_STATUS                 0x02
52 #define SCA3000_LOCKED                          0x20
53 #define SCA3000_EEPROM_CS_ERROR                 0x02
54 #define SCA3000_SPI_FRAME_ERROR                 0x01
55
56 /* All reads done using register decrement so no need to directly access LSBs */
57 #define SCA3000_REG_ADDR_X_MSB                  0x05
58 #define SCA3000_REG_ADDR_Y_MSB                  0x07
59 #define SCA3000_REG_ADDR_Z_MSB                  0x09
60
61 #define SCA3000_REG_ADDR_RING_OUT               0x0f
62
63 /* Temp read untested - the e05 doesn't have the sensor */
64 #define SCA3000_REG_ADDR_TEMP_MSB               0x13
65
66 #define SCA3000_REG_ADDR_MODE                   0x14
67 #define SCA3000_MODE_PROT_MASK                  0x28
68
69 #define SCA3000_RING_BUF_ENABLE                 0x80
70 #define SCA3000_RING_BUF_8BIT                   0x40
71 /*
72  * Free fall detection triggers an interrupt if the acceleration
73  * is below a threshold for equivalent of 25cm drop
74  */
75 #define SCA3000_FREE_FALL_DETECT                0x10
76 #define SCA3000_MEAS_MODE_NORMAL                0x00
77 #define SCA3000_MEAS_MODE_OP_1                  0x01
78 #define SCA3000_MEAS_MODE_OP_2                  0x02
79
80 /*
81  * In motion detection mode the accelerations are band pass filtered
82  * (approx 1 - 25Hz) and then a programmable threshold used to trigger
83  * and interrupt.
84  */
85 #define SCA3000_MEAS_MODE_MOT_DET               0x03
86
87 #define SCA3000_REG_ADDR_BUF_COUNT              0x15
88
89 #define SCA3000_REG_ADDR_INT_STATUS             0x16
90
91 #define SCA3000_INT_STATUS_THREE_QUARTERS       0x80
92 #define SCA3000_INT_STATUS_HALF                 0x40
93
94 #define SCA3000_INT_STATUS_FREE_FALL            0x08
95 #define SCA3000_INT_STATUS_Y_TRIGGER            0x04
96 #define SCA3000_INT_STATUS_X_TRIGGER            0x02
97 #define SCA3000_INT_STATUS_Z_TRIGGER            0x01
98
99 /* Used to allow access to multiplexed registers */
100 #define SCA3000_REG_ADDR_CTRL_SEL               0x18
101 /* Only available for SCA3000-D03 and SCA3000-D01 */
102 #define SCA3000_REG_CTRL_SEL_I2C_DISABLE        0x01
103 #define SCA3000_REG_CTRL_SEL_MD_CTRL            0x02
104 #define SCA3000_REG_CTRL_SEL_MD_Y_TH            0x03
105 #define SCA3000_REG_CTRL_SEL_MD_X_TH            0x04
106 #define SCA3000_REG_CTRL_SEL_MD_Z_TH            0x05
107 /*
108  * BE VERY CAREFUL WITH THIS, IF 3 BITS ARE NOT SET the device
109  * will not function
110  */
111 #define SCA3000_REG_CTRL_SEL_OUT_CTRL           0x0B
112 #define SCA3000_OUT_CTRL_PROT_MASK              0xE0
113 #define SCA3000_OUT_CTRL_BUF_X_EN               0x10
114 #define SCA3000_OUT_CTRL_BUF_Y_EN               0x08
115 #define SCA3000_OUT_CTRL_BUF_Z_EN               0x04
116 #define SCA3000_OUT_CTRL_BUF_DIV_MASK           0x03
117 #define SCA3000_OUT_CTRL_BUF_DIV_4              0x02
118 #define SCA3000_OUT_CTRL_BUF_DIV_2              0x01
119
120 /*
121  * Control which motion detector interrupts are on.
122  * For now only OR combinations are supported.
123  */
124 #define SCA3000_MD_CTRL_PROT_MASK               0xC0
125 #define SCA3000_MD_CTRL_OR_Y                    0x01
126 #define SCA3000_MD_CTRL_OR_X                    0x02
127 #define SCA3000_MD_CTRL_OR_Z                    0x04
128 /* Currently unsupported */
129 #define SCA3000_MD_CTRL_AND_Y                   0x08
130 #define SCA3000_MD_CTRL_AND_X                   0x10
131 #define SAC3000_MD_CTRL_AND_Z                   0x20
132
133 /*
134  * Some control registers of complex access methods requiring this register to
135  * be used to remove a lock.
136  */
137 #define SCA3000_REG_ADDR_UNLOCK                 0x1e
138
139 #define SCA3000_REG_ADDR_INT_MASK               0x21
140 #define SCA3000_INT_MASK_PROT_MASK              0x1C
141
142 #define SCA3000_INT_MASK_RING_THREE_QUARTER     0x80
143 #define SCA3000_INT_MASK_RING_HALF              0x40
144
145 #define SCA3000_INT_MASK_ALL_INTS               0x02
146 #define SCA3000_INT_MASK_ACTIVE_HIGH            0x01
147 #define SCA3000_INT_MASK_ACTIVE_LOW             0x00
148
149 /* Values of multiplexed registers (write to ctrl_data after select) */
150 #define SCA3000_REG_ADDR_CTRL_DATA              0x22
151
152 /*
153  * Measurement modes available on some sca3000 series chips. Code assumes others
154  * may become available in the future.
155  *
156  * Bypass - Bypass the low-pass filter in the signal channel so as to increase
157  *          signal bandwidth.
158  *
159  * Narrow - Narrow low-pass filtering of the signal channel and half output
160  *          data rate by decimation.
161  *
162  * Wide - Widen low-pass filtering of signal channel to increase bandwidth
163  */
164 #define SCA3000_OP_MODE_BYPASS                  0x01
165 #define SCA3000_OP_MODE_NARROW                  0x02
166 #define SCA3000_OP_MODE_WIDE                    0x04
167 #define SCA3000_MAX_TX 6
168 #define SCA3000_MAX_RX 2
169
170 /**
171  * struct sca3000_state - device instance state information
172  * @us:                 the associated spi device
173  * @info:                       chip variant information
174  * @interrupt_handler_ws:       event interrupt handler for all events
175  * @last_timestamp:             the timestamp of the last event
176  * @mo_det_use_count:           reference counter for the motion detection unit
177  * @lock:                       lock used to protect elements of sca3000_state
178  *                              and the underlying device state.
179  * @bpse:                       number of bits per scan element
180  * @tx:                 dma-able transmit buffer
181  * @rx:                 dma-able receive buffer
182  **/
183 struct sca3000_state {
184         struct spi_device               *us;
185         const struct sca3000_chip_info  *info;
186         struct work_struct              interrupt_handler_ws;
187         s64                             last_timestamp;
188         int                             mo_det_use_count;
189         struct mutex                    lock;
190         int                             bpse;
191         /* Can these share a cacheline ? */
192         u8                              rx[2] ____cacheline_aligned;
193         u8                              tx[6] ____cacheline_aligned;
194 };
195
196 /**
197  * struct sca3000_chip_info - model dependent parameters
198  * @scale:                      scale * 10^-6
199  * @temp_output:                some devices have temperature sensors.
200  * @measurement_mode_freq:      normal mode sampling frequency
201  * @option_mode_1:              first optional mode. Not all models have one
202  * @option_mode_1_freq:         option mode 1 sampling frequency
203  * @option_mode_2:              second optional mode. Not all chips have one
204  * @option_mode_2_freq:         option mode 2 sampling frequency
205  *
206  * This structure is used to hold information about the functionality of a given
207  * sca3000 variant.
208  **/
209 struct sca3000_chip_info {
210         unsigned int            scale;
211         bool                    temp_output;
212         int                     measurement_mode_freq;
213         int                     option_mode_1;
214         int                     option_mode_1_freq;
215         int                     option_mode_2;
216         int                     option_mode_2_freq;
217         int                     mot_det_mult_xz[6];
218         int                     mot_det_mult_y[7];
219 };
220
221 int sca3000_read_data_short(struct sca3000_state *st,
222                             u8 reg_address_high,
223                             int len);
224
225 /**
226  * sca3000_write_reg() write a single register
227  * @address:    address of register on chip
228  * @val:        value to be written to register
229  *
230  * The main lock must be held.
231  **/
232 int sca3000_write_reg(struct sca3000_state *st, u8 address, u8 val);
233
234 #ifdef CONFIG_IIO_BUFFER
235 /**
236  * sca3000_register_ring_funcs() setup the ring state change functions
237  **/
238 void sca3000_register_ring_funcs(struct iio_dev *indio_dev);
239
240 /**
241  * sca3000_configure_ring() - allocate and configure ring buffer
242  * @indio_dev: iio-core device whose ring is to be configured
243  *
244  * The hardware ring buffer needs far fewer ring buffer functions than
245  * a software one as a lot of things are handled automatically.
246  * This function also tells the iio core that our device supports a
247  * hardware ring buffer mode.
248  **/
249 int sca3000_configure_ring(struct iio_dev *indio_dev);
250
251 /**
252  * sca3000_unconfigure_ring() - deallocate the ring buffer
253  * @indio_dev: iio-core device whose ring we are freeing
254  **/
255 void sca3000_unconfigure_ring(struct iio_dev *indio_dev);
256
257 /**
258  * sca3000_ring_int_process() handles ring related event pushing and escalation
259  * @val:        the event code
260  **/
261 void sca3000_ring_int_process(u8 val, struct iio_buffer *ring);
262
263 #else
264 static inline void sca3000_register_ring_funcs(struct iio_dev *indio_dev)
265 {
266 }
267
268 static inline
269 int sca3000_register_ring_access_and_init(struct iio_dev *indio_dev)
270 {
271         return 0;
272 }
273
274 static inline void sca3000_ring_int_process(u8 val, void *ring)
275 {
276 }
277
278 #endif
279 #endif /* _SCA3000 */