diff options
author | Robert Dolca <robert.dolca@intel.com> | 2015-03-23 09:40:25 -0400 |
---|---|---|
committer | Jonathan Cameron <jic23@kernel.org> | 2015-03-28 07:13:35 -0400 |
commit | 9444a300c2be3ce6266462e3171ceb6636cc62e8 (patch) | |
tree | 2f55dfd90403cfca2d4ad71ff917bc1e52c8d05c | |
parent | d9d7b990473889a17b0f54e860a65b141733799c (diff) |
IIO: Add support for L3GD20H gyroscope
It can be used exactly like L3GD20 but it has a different WhoAmI
register value.
Signed-off-by: Robert Dolca <robert.dolca@intel.com>
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Jonathan Cameron <jic23@kernel.org>
-rw-r--r-- | drivers/iio/gyro/st_gyro_core.c | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/drivers/iio/gyro/st_gyro_core.c b/drivers/iio/gyro/st_gyro_core.c index f07a2336f7dc..21395f26d227 100644 --- a/drivers/iio/gyro/st_gyro_core.c +++ b/drivers/iio/gyro/st_gyro_core.c | |||
@@ -87,6 +87,31 @@ | |||
87 | #define ST_GYRO_2_DRDY_IRQ_INT2_MASK 0x08 | 87 | #define ST_GYRO_2_DRDY_IRQ_INT2_MASK 0x08 |
88 | #define ST_GYRO_2_MULTIREAD_BIT true | 88 | #define ST_GYRO_2_MULTIREAD_BIT true |
89 | 89 | ||
90 | /* CUSTOM VALUES FOR SENSOR 3 */ | ||
91 | #define ST_GYRO_3_WAI_EXP 0xd7 | ||
92 | #define ST_GYRO_3_ODR_ADDR 0x20 | ||
93 | #define ST_GYRO_3_ODR_MASK 0xc0 | ||
94 | #define ST_GYRO_3_ODR_AVL_95HZ_VAL 0x00 | ||
95 | #define ST_GYRO_3_ODR_AVL_190HZ_VAL 0x01 | ||
96 | #define ST_GYRO_3_ODR_AVL_380HZ_VAL 0x02 | ||
97 | #define ST_GYRO_3_ODR_AVL_760HZ_VAL 0x03 | ||
98 | #define ST_GYRO_3_PW_ADDR 0x20 | ||
99 | #define ST_GYRO_3_PW_MASK 0x08 | ||
100 | #define ST_GYRO_3_FS_ADDR 0x23 | ||
101 | #define ST_GYRO_3_FS_MASK 0x30 | ||
102 | #define ST_GYRO_3_FS_AVL_250_VAL 0x00 | ||
103 | #define ST_GYRO_3_FS_AVL_500_VAL 0x01 | ||
104 | #define ST_GYRO_3_FS_AVL_2000_VAL 0x02 | ||
105 | #define ST_GYRO_3_FS_AVL_250_GAIN IIO_DEGREE_TO_RAD(8750) | ||
106 | #define ST_GYRO_3_FS_AVL_500_GAIN IIO_DEGREE_TO_RAD(17500) | ||
107 | #define ST_GYRO_3_FS_AVL_2000_GAIN IIO_DEGREE_TO_RAD(70000) | ||
108 | #define ST_GYRO_3_BDU_ADDR 0x23 | ||
109 | #define ST_GYRO_3_BDU_MASK 0x80 | ||
110 | #define ST_GYRO_3_DRDY_IRQ_ADDR 0x22 | ||
111 | #define ST_GYRO_3_DRDY_IRQ_INT2_MASK 0x08 | ||
112 | #define ST_GYRO_3_MULTIREAD_BIT true | ||
113 | |||
114 | |||
90 | static const struct iio_chan_spec st_gyro_16bit_channels[] = { | 115 | static const struct iio_chan_spec st_gyro_16bit_channels[] = { |
91 | ST_SENSORS_LSM_CHANNELS(IIO_ANGL_VEL, | 116 | ST_SENSORS_LSM_CHANNELS(IIO_ANGL_VEL, |
92 | BIT(IIO_CHAN_INFO_RAW) | BIT(IIO_CHAN_INFO_SCALE), | 117 | BIT(IIO_CHAN_INFO_RAW) | BIT(IIO_CHAN_INFO_SCALE), |
@@ -225,6 +250,64 @@ static const struct st_sensor_settings st_gyro_sensors_settings[] = { | |||
225 | .multi_read_bit = ST_GYRO_2_MULTIREAD_BIT, | 250 | .multi_read_bit = ST_GYRO_2_MULTIREAD_BIT, |
226 | .bootime = 2, | 251 | .bootime = 2, |
227 | }, | 252 | }, |
253 | { | ||
254 | .wai = ST_GYRO_3_WAI_EXP, | ||
255 | .sensors_supported = { | ||
256 | [0] = L3GD20_GYRO_DEV_NAME, | ||
257 | }, | ||
258 | .ch = (struct iio_chan_spec *)st_gyro_16bit_channels, | ||
259 | .odr = { | ||
260 | .addr = ST_GYRO_3_ODR_ADDR, | ||
261 | .mask = ST_GYRO_3_ODR_MASK, | ||
262 | .odr_avl = { | ||
263 | { 95, ST_GYRO_3_ODR_AVL_95HZ_VAL, }, | ||
264 | { 190, ST_GYRO_3_ODR_AVL_190HZ_VAL, }, | ||
265 | { 380, ST_GYRO_3_ODR_AVL_380HZ_VAL, }, | ||
266 | { 760, ST_GYRO_3_ODR_AVL_760HZ_VAL, }, | ||
267 | }, | ||
268 | }, | ||
269 | .pw = { | ||
270 | .addr = ST_GYRO_3_PW_ADDR, | ||
271 | .mask = ST_GYRO_3_PW_MASK, | ||
272 | .value_on = ST_SENSORS_DEFAULT_POWER_ON_VALUE, | ||
273 | .value_off = ST_SENSORS_DEFAULT_POWER_OFF_VALUE, | ||
274 | }, | ||
275 | .enable_axis = { | ||
276 | .addr = ST_SENSORS_DEFAULT_AXIS_ADDR, | ||
277 | .mask = ST_SENSORS_DEFAULT_AXIS_MASK, | ||
278 | }, | ||
279 | .fs = { | ||
280 | .addr = ST_GYRO_3_FS_ADDR, | ||
281 | .mask = ST_GYRO_3_FS_MASK, | ||
282 | .fs_avl = { | ||
283 | [0] = { | ||
284 | .num = ST_GYRO_FS_AVL_250DPS, | ||
285 | .value = ST_GYRO_3_FS_AVL_250_VAL, | ||
286 | .gain = ST_GYRO_3_FS_AVL_250_GAIN, | ||
287 | }, | ||
288 | [1] = { | ||
289 | .num = ST_GYRO_FS_AVL_500DPS, | ||
290 | .value = ST_GYRO_3_FS_AVL_500_VAL, | ||
291 | .gain = ST_GYRO_3_FS_AVL_500_GAIN, | ||
292 | }, | ||
293 | [2] = { | ||
294 | .num = ST_GYRO_FS_AVL_2000DPS, | ||
295 | .value = ST_GYRO_3_FS_AVL_2000_VAL, | ||
296 | .gain = ST_GYRO_3_FS_AVL_2000_GAIN, | ||
297 | }, | ||
298 | }, | ||
299 | }, | ||
300 | .bdu = { | ||
301 | .addr = ST_GYRO_3_BDU_ADDR, | ||
302 | .mask = ST_GYRO_3_BDU_MASK, | ||
303 | }, | ||
304 | .drdy_irq = { | ||
305 | .addr = ST_GYRO_3_DRDY_IRQ_ADDR, | ||
306 | .mask_int2 = ST_GYRO_3_DRDY_IRQ_INT2_MASK, | ||
307 | }, | ||
308 | .multi_read_bit = ST_GYRO_3_MULTIREAD_BIT, | ||
309 | .bootime = 2, | ||
310 | }, | ||
228 | }; | 311 | }; |
229 | 312 | ||
230 | static int st_gyro_read_raw(struct iio_dev *indio_dev, | 313 | static int st_gyro_read_raw(struct iio_dev *indio_dev, |