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_4 0x02 117 #define SCA3000_OUT_CTRL_BUF_DIV_2 0x01 118 119 /* 120 * Control which motion detector interrupts are on. 121 * For now only OR combinations are supported. 122 */ 123 #define SCA3000_MD_CTRL_PROT_MASK 0xC0 124 #define SCA3000_MD_CTRL_OR_Y 0x01 125 #define SCA3000_MD_CTRL_OR_X 0x02 126 #define SCA3000_MD_CTRL_OR_Z 0x04 127 /* Currently unsupported */ 128 #define SCA3000_MD_CTRL_AND_Y 0x08 129 #define SCA3000_MD_CTRL_AND_X 0x10 130 #define SAC3000_MD_CTRL_AND_Z 0x20 131 132 /* 133 * Some control registers of complex access methods requiring this register to 134 * be used to remove a lock. 135 */ 136 #define SCA3000_REG_ADDR_UNLOCK 0x1e 137 138 #define SCA3000_REG_ADDR_INT_MASK 0x21 139 #define SCA3000_INT_MASK_PROT_MASK 0x1C 140 141 #define SCA3000_INT_MASK_RING_THREE_QUARTER 0x80 142 #define SCA3000_INT_MASK_RING_HALF 0x40 143 144 #define SCA3000_INT_MASK_ALL_INTS 0x02 145 #define SCA3000_INT_MASK_ACTIVE_HIGH 0x01 146 #define SCA3000_INT_MASK_ACTIVE_LOW 0x00 147 148 /* Values of multiplexed registers (write to ctrl_data after select) */ 149 #define SCA3000_REG_ADDR_CTRL_DATA 0x22 150 151 /* 152 * Measurement modes available on some sca3000 series chips. Code assumes others 153 * may become available in the future. 154 * 155 * Bypass - Bypass the low-pass filter in the signal channel so as to increase 156 * signal bandwidth. 157 * 158 * Narrow - Narrow low-pass filtering of the signal channel and half output 159 * data rate by decimation. 160 * 161 * Wide - Widen low-pass filtering of signal channel to increase bandwidth 162 */ 163 #define SCA3000_OP_MODE_BYPASS 0x01 164 #define SCA3000_OP_MODE_NARROW 0x02 165 #define SCA3000_OP_MODE_WIDE 0x04 166 #define SCA3000_MAX_TX 6 167 #define SCA3000_MAX_RX 2 168 169 /** 170 * struct sca3000_state - device instance state information 171 * @us: the associated spi device 172 * @info: chip variant information 173 * @interrupt_handler_ws: event interrupt handler for all events 174 * @last_timestamp: the timestamp of the last event 175 * @mo_det_use_count: reference counter for the motion detection unit 176 * @lock: lock used to protect elements of sca3000_state 177 * and the underlying device state. 178 * @bpse: number of bits per scan element 179 * @tx: dma-able transmit buffer 180 * @rx: dma-able receive buffer 181 **/ 182 struct sca3000_state { 183 struct spi_device *us; 184 const struct sca3000_chip_info *info; 185 struct work_struct interrupt_handler_ws; 186 s64 last_timestamp; 187 int mo_det_use_count; 188 struct mutex lock; 189 int bpse; 190 /* Can these share a cacheline ? */ 191 u8 rx[2] ____cacheline_aligned; 192 u8 tx[6] ____cacheline_aligned; 193 }; 194 195 /** 196 * struct sca3000_chip_info - model dependent parameters 197 * @scale: scale * 10^-6 198 * @temp_output: some devices have temperature sensors. 199 * @measurement_mode_freq: normal mode sampling frequency 200 * @option_mode_1: first optional mode. Not all models have one 201 * @option_mode_1_freq: option mode 1 sampling frequency 202 * @option_mode_2: second optional mode. Not all chips have one 203 * @option_mode_2_freq: option mode 2 sampling frequency 204 * 205 * This structure is used to hold information about the functionality of a given 206 * sca3000 variant. 207 **/ 208 struct sca3000_chip_info { 209 unsigned int scale; 210 bool temp_output; 211 int measurement_mode_freq; 212 int option_mode_1; 213 int option_mode_1_freq; 214 int option_mode_2; 215 int option_mode_2_freq; 216 int mot_det_mult_xz[6]; 217 int mot_det_mult_y[7]; 218 }; 219 220 int sca3000_read_data_short(struct sca3000_state *st, 221 u8 reg_address_high, 222 int len); 223 224 /** 225 * sca3000_write_reg() write a single register 226 * @address: address of register on chip 227 * @val: value to be written to register 228 * 229 * The main lock must be held. 230 **/ 231 int sca3000_write_reg(struct sca3000_state *st, u8 address, u8 val); 232 233 #ifdef CONFIG_IIO_BUFFER 234 /** 235 * sca3000_register_ring_funcs() setup the ring state change functions 236 **/ 237 void sca3000_register_ring_funcs(struct iio_dev *indio_dev); 238 239 /** 240 * sca3000_configure_ring() - allocate and configure ring buffer 241 * @indio_dev: iio-core device whose ring is to be configured 242 * 243 * The hardware ring buffer needs far fewer ring buffer functions than 244 * a software one as a lot of things are handled automatically. 245 * This function also tells the iio core that our device supports a 246 * hardware ring buffer mode. 247 **/ 248 int sca3000_configure_ring(struct iio_dev *indio_dev); 249 250 /** 251 * sca3000_unconfigure_ring() - deallocate the ring buffer 252 * @indio_dev: iio-core device whose ring we are freeing 253 **/ 254 void sca3000_unconfigure_ring(struct iio_dev *indio_dev); 255 256 /** 257 * sca3000_ring_int_process() handles ring related event pushing and escalation 258 * @val: the event code 259 **/ 260 void sca3000_ring_int_process(u8 val, struct iio_buffer *ring); 261 262 #else sca3000_register_ring_funcs(struct iio_dev * indio_dev)263static inline void sca3000_register_ring_funcs(struct iio_dev *indio_dev) 264 { 265 } 266 267 static inline sca3000_register_ring_access_and_init(struct iio_dev * indio_dev)268int sca3000_register_ring_access_and_init(struct iio_dev *indio_dev) 269 { 270 return 0; 271 } 272 sca3000_ring_int_process(u8 val,void * ring)273static inline void sca3000_ring_int_process(u8 val, void *ring) 274 { 275 } 276 277 #endif 278 #endif /* _SCA3000 */ 279