1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3 * BMG160 Gyro Sensor driver
4 * Copyright (c) 2014, Intel Corporation.
5 */
6
7 #include <linux/module.h>
8 #include <linux/interrupt.h>
9 #include <linux/delay.h>
10 #include <linux/slab.h>
11 #include <linux/acpi.h>
12 #include <linux/pm.h>
13 #include <linux/pm_runtime.h>
14 #include <linux/iio/iio.h>
15 #include <linux/iio/sysfs.h>
16 #include <linux/iio/buffer.h>
17 #include <linux/iio/trigger.h>
18 #include <linux/iio/events.h>
19 #include <linux/iio/trigger_consumer.h>
20 #include <linux/iio/triggered_buffer.h>
21 #include <linux/regmap.h>
22 #include <linux/regulator/consumer.h>
23 #include "bmg160.h"
24
25 #define BMG160_IRQ_NAME "bmg160_event"
26
27 #define BMG160_REG_CHIP_ID 0x00
28 #define BMG160_CHIP_ID_VAL 0x0F
29
30 #define BMG160_REG_PMU_LPW 0x11
31 #define BMG160_MODE_NORMAL 0x00
32 #define BMG160_MODE_DEEP_SUSPEND 0x20
33 #define BMG160_MODE_SUSPEND 0x80
34
35 #define BMG160_REG_RANGE 0x0F
36
37 #define BMG160_RANGE_2000DPS 0
38 #define BMG160_RANGE_1000DPS 1
39 #define BMG160_RANGE_500DPS 2
40 #define BMG160_RANGE_250DPS 3
41 #define BMG160_RANGE_125DPS 4
42
43 #define BMG160_REG_PMU_BW 0x10
44 #define BMG160_NO_FILTER 0
45 #define BMG160_DEF_BW 100
46 #define BMG160_REG_PMU_BW_RES BIT(7)
47
48 #define BMG160_GYRO_REG_RESET 0x14
49 #define BMG160_GYRO_RESET_VAL 0xb6
50
51 #define BMG160_REG_INT_MAP_0 0x17
52 #define BMG160_INT_MAP_0_BIT_ANY BIT(1)
53
54 #define BMG160_REG_INT_MAP_1 0x18
55 #define BMG160_INT_MAP_1_BIT_NEW_DATA BIT(0)
56
57 #define BMG160_REG_INT_RST_LATCH 0x21
58 #define BMG160_INT_MODE_LATCH_RESET 0x80
59 #define BMG160_INT_MODE_LATCH_INT 0x0F
60 #define BMG160_INT_MODE_NON_LATCH_INT 0x00
61
62 #define BMG160_REG_INT_EN_0 0x15
63 #define BMG160_DATA_ENABLE_INT BIT(7)
64
65 #define BMG160_REG_INT_EN_1 0x16
66 #define BMG160_INT1_BIT_OD BIT(1)
67
68 #define BMG160_REG_XOUT_L 0x02
69 #define BMG160_AXIS_TO_REG(axis) (BMG160_REG_XOUT_L + (axis * 2))
70
71 #define BMG160_REG_SLOPE_THRES 0x1B
72 #define BMG160_SLOPE_THRES_MASK 0x0F
73
74 #define BMG160_REG_MOTION_INTR 0x1C
75 #define BMG160_INT_MOTION_X BIT(0)
76 #define BMG160_INT_MOTION_Y BIT(1)
77 #define BMG160_INT_MOTION_Z BIT(2)
78 #define BMG160_ANY_DUR_MASK 0x30
79 #define BMG160_ANY_DUR_SHIFT 4
80
81 #define BMG160_REG_INT_STATUS_2 0x0B
82 #define BMG160_ANY_MOTION_MASK 0x07
83 #define BMG160_ANY_MOTION_BIT_X BIT(0)
84 #define BMG160_ANY_MOTION_BIT_Y BIT(1)
85 #define BMG160_ANY_MOTION_BIT_Z BIT(2)
86
87 #define BMG160_REG_TEMP 0x08
88 #define BMG160_TEMP_CENTER_VAL 23
89
90 #define BMG160_MAX_STARTUP_TIME_MS 80
91
92 #define BMG160_AUTO_SUSPEND_DELAY_MS 2000
93
94 struct bmg160_data {
95 struct regmap *regmap;
96 struct regulator_bulk_data regulators[2];
97 struct iio_trigger *dready_trig;
98 struct iio_trigger *motion_trig;
99 struct iio_mount_matrix orientation;
100 struct mutex mutex;
101 /* Ensure naturally aligned timestamp */
102 struct {
103 s16 chans[3];
104 s64 timestamp __aligned(8);
105 } scan;
106 u32 dps_range;
107 int ev_enable_state;
108 int slope_thres;
109 bool dready_trigger_on;
110 bool motion_trigger_on;
111 int irq;
112 };
113
114 enum bmg160_axis {
115 AXIS_X,
116 AXIS_Y,
117 AXIS_Z,
118 AXIS_MAX,
119 };
120
121 static const struct {
122 int odr;
123 int filter;
124 int bw_bits;
125 } bmg160_samp_freq_table[] = { {100, 32, 0x07},
126 {200, 64, 0x06},
127 {100, 12, 0x05},
128 {200, 23, 0x04},
129 {400, 47, 0x03},
130 {1000, 116, 0x02},
131 {2000, 230, 0x01} };
132
133 static const struct {
134 int scale;
135 int dps_range;
136 } bmg160_scale_table[] = { { 1065, BMG160_RANGE_2000DPS},
137 { 532, BMG160_RANGE_1000DPS},
138 { 266, BMG160_RANGE_500DPS},
139 { 133, BMG160_RANGE_250DPS},
140 { 66, BMG160_RANGE_125DPS} };
141
bmg160_set_mode(struct bmg160_data * data,u8 mode)142 static int bmg160_set_mode(struct bmg160_data *data, u8 mode)
143 {
144 struct device *dev = regmap_get_device(data->regmap);
145 int ret;
146
147 ret = regmap_write(data->regmap, BMG160_REG_PMU_LPW, mode);
148 if (ret < 0) {
149 dev_err(dev, "Error writing reg_pmu_lpw\n");
150 return ret;
151 }
152
153 return 0;
154 }
155
bmg160_convert_freq_to_bit(int val)156 static int bmg160_convert_freq_to_bit(int val)
157 {
158 int i;
159
160 for (i = 0; i < ARRAY_SIZE(bmg160_samp_freq_table); ++i) {
161 if (bmg160_samp_freq_table[i].odr == val)
162 return bmg160_samp_freq_table[i].bw_bits;
163 }
164
165 return -EINVAL;
166 }
167
bmg160_set_bw(struct bmg160_data * data,int val)168 static int bmg160_set_bw(struct bmg160_data *data, int val)
169 {
170 struct device *dev = regmap_get_device(data->regmap);
171 int ret;
172 int bw_bits;
173
174 bw_bits = bmg160_convert_freq_to_bit(val);
175 if (bw_bits < 0)
176 return bw_bits;
177
178 ret = regmap_write(data->regmap, BMG160_REG_PMU_BW, bw_bits);
179 if (ret < 0) {
180 dev_err(dev, "Error writing reg_pmu_bw\n");
181 return ret;
182 }
183
184 return 0;
185 }
186
bmg160_get_filter(struct bmg160_data * data,int * val)187 static int bmg160_get_filter(struct bmg160_data *data, int *val)
188 {
189 struct device *dev = regmap_get_device(data->regmap);
190 int ret;
191 int i;
192 unsigned int bw_bits;
193
194 ret = regmap_read(data->regmap, BMG160_REG_PMU_BW, &bw_bits);
195 if (ret < 0) {
196 dev_err(dev, "Error reading reg_pmu_bw\n");
197 return ret;
198 }
199
200 /* Ignore the readonly reserved bit. */
201 bw_bits &= ~BMG160_REG_PMU_BW_RES;
202
203 for (i = 0; i < ARRAY_SIZE(bmg160_samp_freq_table); ++i) {
204 if (bmg160_samp_freq_table[i].bw_bits == bw_bits)
205 break;
206 }
207
208 *val = bmg160_samp_freq_table[i].filter;
209
210 return ret ? ret : IIO_VAL_INT;
211 }
212
213
bmg160_set_filter(struct bmg160_data * data,int val)214 static int bmg160_set_filter(struct bmg160_data *data, int val)
215 {
216 struct device *dev = regmap_get_device(data->regmap);
217 int ret;
218 int i;
219
220 for (i = 0; i < ARRAY_SIZE(bmg160_samp_freq_table); ++i) {
221 if (bmg160_samp_freq_table[i].filter == val)
222 break;
223 }
224
225 ret = regmap_write(data->regmap, BMG160_REG_PMU_BW,
226 bmg160_samp_freq_table[i].bw_bits);
227 if (ret < 0) {
228 dev_err(dev, "Error writing reg_pmu_bw\n");
229 return ret;
230 }
231
232 return 0;
233 }
234
bmg160_chip_init(struct bmg160_data * data)235 static int bmg160_chip_init(struct bmg160_data *data)
236 {
237 struct device *dev = regmap_get_device(data->regmap);
238 int ret;
239 unsigned int val;
240
241 /*
242 * Reset chip to get it in a known good state. A delay of 30ms after
243 * reset is required according to the datasheet.
244 */
245 regmap_write(data->regmap, BMG160_GYRO_REG_RESET,
246 BMG160_GYRO_RESET_VAL);
247 usleep_range(30000, 30700);
248
249 ret = regmap_read(data->regmap, BMG160_REG_CHIP_ID, &val);
250 if (ret < 0) {
251 dev_err(dev, "Error reading reg_chip_id\n");
252 return ret;
253 }
254
255 dev_dbg(dev, "Chip Id %x\n", val);
256 if (val != BMG160_CHIP_ID_VAL) {
257 dev_err(dev, "invalid chip %x\n", val);
258 return -ENODEV;
259 }
260
261 ret = bmg160_set_mode(data, BMG160_MODE_NORMAL);
262 if (ret < 0)
263 return ret;
264
265 /* Wait upto 500 ms to be ready after changing mode */
266 usleep_range(500, 1000);
267
268 /* Set Bandwidth */
269 ret = bmg160_set_bw(data, BMG160_DEF_BW);
270 if (ret < 0)
271 return ret;
272
273 /* Set Default Range */
274 ret = regmap_write(data->regmap, BMG160_REG_RANGE, BMG160_RANGE_500DPS);
275 if (ret < 0) {
276 dev_err(dev, "Error writing reg_range\n");
277 return ret;
278 }
279 data->dps_range = BMG160_RANGE_500DPS;
280
281 ret = regmap_read(data->regmap, BMG160_REG_SLOPE_THRES, &val);
282 if (ret < 0) {
283 dev_err(dev, "Error reading reg_slope_thres\n");
284 return ret;
285 }
286 data->slope_thres = val;
287
288 /* Set default interrupt mode */
289 ret = regmap_update_bits(data->regmap, BMG160_REG_INT_EN_1,
290 BMG160_INT1_BIT_OD, 0);
291 if (ret < 0) {
292 dev_err(dev, "Error updating bits in reg_int_en_1\n");
293 return ret;
294 }
295
296 ret = regmap_write(data->regmap, BMG160_REG_INT_RST_LATCH,
297 BMG160_INT_MODE_LATCH_INT |
298 BMG160_INT_MODE_LATCH_RESET);
299 if (ret < 0) {
300 dev_err(dev,
301 "Error writing reg_motion_intr\n");
302 return ret;
303 }
304
305 return 0;
306 }
307
bmg160_set_power_state(struct bmg160_data * data,bool on)308 static int bmg160_set_power_state(struct bmg160_data *data, bool on)
309 {
310 #ifdef CONFIG_PM
311 struct device *dev = regmap_get_device(data->regmap);
312 int ret;
313
314 if (on)
315 ret = pm_runtime_get_sync(dev);
316 else {
317 pm_runtime_mark_last_busy(dev);
318 ret = pm_runtime_put_autosuspend(dev);
319 }
320
321 if (ret < 0) {
322 dev_err(dev, "Failed: bmg160_set_power_state for %d\n", on);
323
324 if (on)
325 pm_runtime_put_noidle(dev);
326
327 return ret;
328 }
329 #endif
330
331 return 0;
332 }
333
bmg160_setup_any_motion_interrupt(struct bmg160_data * data,bool status)334 static int bmg160_setup_any_motion_interrupt(struct bmg160_data *data,
335 bool status)
336 {
337 struct device *dev = regmap_get_device(data->regmap);
338 int ret;
339
340 /* Enable/Disable INT_MAP0 mapping */
341 ret = regmap_update_bits(data->regmap, BMG160_REG_INT_MAP_0,
342 BMG160_INT_MAP_0_BIT_ANY,
343 (status ? BMG160_INT_MAP_0_BIT_ANY : 0));
344 if (ret < 0) {
345 dev_err(dev, "Error updating bits reg_int_map0\n");
346 return ret;
347 }
348
349 /* Enable/Disable slope interrupts */
350 if (status) {
351 /* Update slope thres */
352 ret = regmap_write(data->regmap, BMG160_REG_SLOPE_THRES,
353 data->slope_thres);
354 if (ret < 0) {
355 dev_err(dev, "Error writing reg_slope_thres\n");
356 return ret;
357 }
358
359 ret = regmap_write(data->regmap, BMG160_REG_MOTION_INTR,
360 BMG160_INT_MOTION_X | BMG160_INT_MOTION_Y |
361 BMG160_INT_MOTION_Z);
362 if (ret < 0) {
363 dev_err(dev, "Error writing reg_motion_intr\n");
364 return ret;
365 }
366
367 /*
368 * New data interrupt is always non-latched,
369 * which will have higher priority, so no need
370 * to set latched mode, we will be flooded anyway with INTR
371 */
372 if (!data->dready_trigger_on) {
373 ret = regmap_write(data->regmap,
374 BMG160_REG_INT_RST_LATCH,
375 BMG160_INT_MODE_LATCH_INT |
376 BMG160_INT_MODE_LATCH_RESET);
377 if (ret < 0) {
378 dev_err(dev, "Error writing reg_rst_latch\n");
379 return ret;
380 }
381 }
382
383 ret = regmap_write(data->regmap, BMG160_REG_INT_EN_0,
384 BMG160_DATA_ENABLE_INT);
385
386 } else {
387 ret = regmap_write(data->regmap, BMG160_REG_INT_EN_0, 0);
388 }
389
390 if (ret < 0) {
391 dev_err(dev, "Error writing reg_int_en0\n");
392 return ret;
393 }
394
395 return 0;
396 }
397
bmg160_setup_new_data_interrupt(struct bmg160_data * data,bool status)398 static int bmg160_setup_new_data_interrupt(struct bmg160_data *data,
399 bool status)
400 {
401 struct device *dev = regmap_get_device(data->regmap);
402 int ret;
403
404 /* Enable/Disable INT_MAP1 mapping */
405 ret = regmap_update_bits(data->regmap, BMG160_REG_INT_MAP_1,
406 BMG160_INT_MAP_1_BIT_NEW_DATA,
407 (status ? BMG160_INT_MAP_1_BIT_NEW_DATA : 0));
408 if (ret < 0) {
409 dev_err(dev, "Error updating bits in reg_int_map1\n");
410 return ret;
411 }
412
413 if (status) {
414 ret = regmap_write(data->regmap, BMG160_REG_INT_RST_LATCH,
415 BMG160_INT_MODE_NON_LATCH_INT |
416 BMG160_INT_MODE_LATCH_RESET);
417 if (ret < 0) {
418 dev_err(dev, "Error writing reg_rst_latch\n");
419 return ret;
420 }
421
422 ret = regmap_write(data->regmap, BMG160_REG_INT_EN_0,
423 BMG160_DATA_ENABLE_INT);
424
425 } else {
426 /* Restore interrupt mode */
427 ret = regmap_write(data->regmap, BMG160_REG_INT_RST_LATCH,
428 BMG160_INT_MODE_LATCH_INT |
429 BMG160_INT_MODE_LATCH_RESET);
430 if (ret < 0) {
431 dev_err(dev, "Error writing reg_rst_latch\n");
432 return ret;
433 }
434
435 ret = regmap_write(data->regmap, BMG160_REG_INT_EN_0, 0);
436 }
437
438 if (ret < 0) {
439 dev_err(dev, "Error writing reg_int_en0\n");
440 return ret;
441 }
442
443 return 0;
444 }
445
bmg160_get_bw(struct bmg160_data * data,int * val)446 static int bmg160_get_bw(struct bmg160_data *data, int *val)
447 {
448 struct device *dev = regmap_get_device(data->regmap);
449 int i;
450 unsigned int bw_bits;
451 int ret;
452
453 ret = regmap_read(data->regmap, BMG160_REG_PMU_BW, &bw_bits);
454 if (ret < 0) {
455 dev_err(dev, "Error reading reg_pmu_bw\n");
456 return ret;
457 }
458
459 /* Ignore the readonly reserved bit. */
460 bw_bits &= ~BMG160_REG_PMU_BW_RES;
461
462 for (i = 0; i < ARRAY_SIZE(bmg160_samp_freq_table); ++i) {
463 if (bmg160_samp_freq_table[i].bw_bits == bw_bits) {
464 *val = bmg160_samp_freq_table[i].odr;
465 return IIO_VAL_INT;
466 }
467 }
468
469 return -EINVAL;
470 }
471
bmg160_set_scale(struct bmg160_data * data,int val)472 static int bmg160_set_scale(struct bmg160_data *data, int val)
473 {
474 struct device *dev = regmap_get_device(data->regmap);
475 int ret, i;
476
477 for (i = 0; i < ARRAY_SIZE(bmg160_scale_table); ++i) {
478 if (bmg160_scale_table[i].scale == val) {
479 ret = regmap_write(data->regmap, BMG160_REG_RANGE,
480 bmg160_scale_table[i].dps_range);
481 if (ret < 0) {
482 dev_err(dev, "Error writing reg_range\n");
483 return ret;
484 }
485 data->dps_range = bmg160_scale_table[i].dps_range;
486 return 0;
487 }
488 }
489
490 return -EINVAL;
491 }
492
bmg160_get_temp(struct bmg160_data * data,int * val)493 static int bmg160_get_temp(struct bmg160_data *data, int *val)
494 {
495 struct device *dev = regmap_get_device(data->regmap);
496 int ret;
497 unsigned int raw_val;
498
499 mutex_lock(&data->mutex);
500 ret = bmg160_set_power_state(data, true);
501 if (ret < 0) {
502 mutex_unlock(&data->mutex);
503 return ret;
504 }
505
506 ret = regmap_read(data->regmap, BMG160_REG_TEMP, &raw_val);
507 if (ret < 0) {
508 dev_err(dev, "Error reading reg_temp\n");
509 bmg160_set_power_state(data, false);
510 mutex_unlock(&data->mutex);
511 return ret;
512 }
513
514 *val = sign_extend32(raw_val, 7);
515 ret = bmg160_set_power_state(data, false);
516 mutex_unlock(&data->mutex);
517 if (ret < 0)
518 return ret;
519
520 return IIO_VAL_INT;
521 }
522
bmg160_get_axis(struct bmg160_data * data,int axis,int * val)523 static int bmg160_get_axis(struct bmg160_data *data, int axis, int *val)
524 {
525 struct device *dev = regmap_get_device(data->regmap);
526 int ret;
527 __le16 raw_val;
528
529 mutex_lock(&data->mutex);
530 ret = bmg160_set_power_state(data, true);
531 if (ret < 0) {
532 mutex_unlock(&data->mutex);
533 return ret;
534 }
535
536 ret = regmap_bulk_read(data->regmap, BMG160_AXIS_TO_REG(axis), &raw_val,
537 sizeof(raw_val));
538 if (ret < 0) {
539 dev_err(dev, "Error reading axis %d\n", axis);
540 bmg160_set_power_state(data, false);
541 mutex_unlock(&data->mutex);
542 return ret;
543 }
544
545 *val = sign_extend32(le16_to_cpu(raw_val), 15);
546 ret = bmg160_set_power_state(data, false);
547 mutex_unlock(&data->mutex);
548 if (ret < 0)
549 return ret;
550
551 return IIO_VAL_INT;
552 }
553
bmg160_read_raw(struct iio_dev * indio_dev,struct iio_chan_spec const * chan,int * val,int * val2,long mask)554 static int bmg160_read_raw(struct iio_dev *indio_dev,
555 struct iio_chan_spec const *chan,
556 int *val, int *val2, long mask)
557 {
558 struct bmg160_data *data = iio_priv(indio_dev);
559 int ret;
560
561 switch (mask) {
562 case IIO_CHAN_INFO_RAW:
563 switch (chan->type) {
564 case IIO_TEMP:
565 return bmg160_get_temp(data, val);
566 case IIO_ANGL_VEL:
567 if (iio_buffer_enabled(indio_dev))
568 return -EBUSY;
569 else
570 return bmg160_get_axis(data, chan->scan_index,
571 val);
572 default:
573 return -EINVAL;
574 }
575 case IIO_CHAN_INFO_OFFSET:
576 if (chan->type == IIO_TEMP) {
577 *val = BMG160_TEMP_CENTER_VAL;
578 return IIO_VAL_INT;
579 } else
580 return -EINVAL;
581 case IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY:
582 return bmg160_get_filter(data, val);
583 case IIO_CHAN_INFO_SCALE:
584 switch (chan->type) {
585 case IIO_TEMP:
586 *val = 500;
587 return IIO_VAL_INT;
588 case IIO_ANGL_VEL:
589 {
590 int i;
591
592 for (i = 0; i < ARRAY_SIZE(bmg160_scale_table); ++i) {
593 if (bmg160_scale_table[i].dps_range ==
594 data->dps_range) {
595 *val = 0;
596 *val2 = bmg160_scale_table[i].scale;
597 return IIO_VAL_INT_PLUS_MICRO;
598 }
599 }
600 return -EINVAL;
601 }
602 default:
603 return -EINVAL;
604 }
605 case IIO_CHAN_INFO_SAMP_FREQ:
606 *val2 = 0;
607 mutex_lock(&data->mutex);
608 ret = bmg160_get_bw(data, val);
609 mutex_unlock(&data->mutex);
610 return ret;
611 default:
612 return -EINVAL;
613 }
614 }
615
bmg160_write_raw(struct iio_dev * indio_dev,struct iio_chan_spec const * chan,int val,int val2,long mask)616 static int bmg160_write_raw(struct iio_dev *indio_dev,
617 struct iio_chan_spec const *chan,
618 int val, int val2, long mask)
619 {
620 struct bmg160_data *data = iio_priv(indio_dev);
621 int ret;
622
623 switch (mask) {
624 case IIO_CHAN_INFO_SAMP_FREQ:
625 mutex_lock(&data->mutex);
626 /*
627 * Section 4.2 of spec
628 * In suspend mode, the only supported operations are reading
629 * registers as well as writing to the (0x14) softreset
630 * register. Since we will be in suspend mode by default, change
631 * mode to power on for other writes.
632 */
633 ret = bmg160_set_power_state(data, true);
634 if (ret < 0) {
635 mutex_unlock(&data->mutex);
636 return ret;
637 }
638 ret = bmg160_set_bw(data, val);
639 if (ret < 0) {
640 bmg160_set_power_state(data, false);
641 mutex_unlock(&data->mutex);
642 return ret;
643 }
644 ret = bmg160_set_power_state(data, false);
645 mutex_unlock(&data->mutex);
646 return ret;
647 case IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY:
648 if (val2)
649 return -EINVAL;
650
651 mutex_lock(&data->mutex);
652 ret = bmg160_set_power_state(data, true);
653 if (ret < 0) {
654 bmg160_set_power_state(data, false);
655 mutex_unlock(&data->mutex);
656 return ret;
657 }
658 ret = bmg160_set_filter(data, val);
659 if (ret < 0) {
660 bmg160_set_power_state(data, false);
661 mutex_unlock(&data->mutex);
662 return ret;
663 }
664 ret = bmg160_set_power_state(data, false);
665 mutex_unlock(&data->mutex);
666 return ret;
667 case IIO_CHAN_INFO_SCALE:
668 if (val)
669 return -EINVAL;
670
671 mutex_lock(&data->mutex);
672 /* Refer to comments above for the suspend mode ops */
673 ret = bmg160_set_power_state(data, true);
674 if (ret < 0) {
675 mutex_unlock(&data->mutex);
676 return ret;
677 }
678 ret = bmg160_set_scale(data, val2);
679 if (ret < 0) {
680 bmg160_set_power_state(data, false);
681 mutex_unlock(&data->mutex);
682 return ret;
683 }
684 ret = bmg160_set_power_state(data, false);
685 mutex_unlock(&data->mutex);
686 return ret;
687 default:
688 return -EINVAL;
689 }
690
691 return -EINVAL;
692 }
693
bmg160_read_event(struct iio_dev * indio_dev,const struct iio_chan_spec * chan,enum iio_event_type type,enum iio_event_direction dir,enum iio_event_info info,int * val,int * val2)694 static int bmg160_read_event(struct iio_dev *indio_dev,
695 const struct iio_chan_spec *chan,
696 enum iio_event_type type,
697 enum iio_event_direction dir,
698 enum iio_event_info info,
699 int *val, int *val2)
700 {
701 struct bmg160_data *data = iio_priv(indio_dev);
702
703 *val2 = 0;
704 switch (info) {
705 case IIO_EV_INFO_VALUE:
706 *val = data->slope_thres & BMG160_SLOPE_THRES_MASK;
707 break;
708 default:
709 return -EINVAL;
710 }
711
712 return IIO_VAL_INT;
713 }
714
bmg160_write_event(struct iio_dev * indio_dev,const struct iio_chan_spec * chan,enum iio_event_type type,enum iio_event_direction dir,enum iio_event_info info,int val,int val2)715 static int bmg160_write_event(struct iio_dev *indio_dev,
716 const struct iio_chan_spec *chan,
717 enum iio_event_type type,
718 enum iio_event_direction dir,
719 enum iio_event_info info,
720 int val, int val2)
721 {
722 struct bmg160_data *data = iio_priv(indio_dev);
723
724 switch (info) {
725 case IIO_EV_INFO_VALUE:
726 if (data->ev_enable_state)
727 return -EBUSY;
728 data->slope_thres &= ~BMG160_SLOPE_THRES_MASK;
729 data->slope_thres |= (val & BMG160_SLOPE_THRES_MASK);
730 break;
731 default:
732 return -EINVAL;
733 }
734
735 return 0;
736 }
737
bmg160_read_event_config(struct iio_dev * indio_dev,const struct iio_chan_spec * chan,enum iio_event_type type,enum iio_event_direction dir)738 static int bmg160_read_event_config(struct iio_dev *indio_dev,
739 const struct iio_chan_spec *chan,
740 enum iio_event_type type,
741 enum iio_event_direction dir)
742 {
743
744 struct bmg160_data *data = iio_priv(indio_dev);
745
746 return data->ev_enable_state;
747 }
748
bmg160_write_event_config(struct iio_dev * indio_dev,const struct iio_chan_spec * chan,enum iio_event_type type,enum iio_event_direction dir,int state)749 static int bmg160_write_event_config(struct iio_dev *indio_dev,
750 const struct iio_chan_spec *chan,
751 enum iio_event_type type,
752 enum iio_event_direction dir,
753 int state)
754 {
755 struct bmg160_data *data = iio_priv(indio_dev);
756 int ret;
757
758 if (state && data->ev_enable_state)
759 return 0;
760
761 mutex_lock(&data->mutex);
762
763 if (!state && data->motion_trigger_on) {
764 data->ev_enable_state = 0;
765 mutex_unlock(&data->mutex);
766 return 0;
767 }
768 /*
769 * We will expect the enable and disable to do operation in
770 * in reverse order. This will happen here anyway as our
771 * resume operation uses sync mode runtime pm calls, the
772 * suspend operation will be delayed by autosuspend delay
773 * So the disable operation will still happen in reverse of
774 * enable operation. When runtime pm is disabled the mode
775 * is always on so sequence doesn't matter
776 */
777 ret = bmg160_set_power_state(data, state);
778 if (ret < 0) {
779 mutex_unlock(&data->mutex);
780 return ret;
781 }
782
783 ret = bmg160_setup_any_motion_interrupt(data, state);
784 if (ret < 0) {
785 bmg160_set_power_state(data, false);
786 mutex_unlock(&data->mutex);
787 return ret;
788 }
789
790 data->ev_enable_state = state;
791 mutex_unlock(&data->mutex);
792
793 return 0;
794 }
795
796 static const struct iio_mount_matrix *
bmg160_get_mount_matrix(const struct iio_dev * indio_dev,const struct iio_chan_spec * chan)797 bmg160_get_mount_matrix(const struct iio_dev *indio_dev,
798 const struct iio_chan_spec *chan)
799 {
800 struct bmg160_data *data = iio_priv(indio_dev);
801
802 return &data->orientation;
803 }
804
805 static const struct iio_chan_spec_ext_info bmg160_ext_info[] = {
806 IIO_MOUNT_MATRIX(IIO_SHARED_BY_DIR, bmg160_get_mount_matrix),
807 { }
808 };
809
810 static IIO_CONST_ATTR_SAMP_FREQ_AVAIL("100 200 400 1000 2000");
811
812 static IIO_CONST_ATTR(in_anglvel_scale_available,
813 "0.001065 0.000532 0.000266 0.000133 0.000066");
814
815 static struct attribute *bmg160_attributes[] = {
816 &iio_const_attr_sampling_frequency_available.dev_attr.attr,
817 &iio_const_attr_in_anglvel_scale_available.dev_attr.attr,
818 NULL,
819 };
820
821 static const struct attribute_group bmg160_attrs_group = {
822 .attrs = bmg160_attributes,
823 };
824
825 static const struct iio_event_spec bmg160_event = {
826 .type = IIO_EV_TYPE_ROC,
827 .dir = IIO_EV_DIR_EITHER,
828 .mask_shared_by_type = BIT(IIO_EV_INFO_VALUE) |
829 BIT(IIO_EV_INFO_ENABLE)
830 };
831
832 #define BMG160_CHANNEL(_axis) { \
833 .type = IIO_ANGL_VEL, \
834 .modified = 1, \
835 .channel2 = IIO_MOD_##_axis, \
836 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), \
837 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE) | \
838 BIT(IIO_CHAN_INFO_SAMP_FREQ) | \
839 BIT(IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY), \
840 .scan_index = AXIS_##_axis, \
841 .scan_type = { \
842 .sign = 's', \
843 .realbits = 16, \
844 .storagebits = 16, \
845 .endianness = IIO_LE, \
846 }, \
847 .ext_info = bmg160_ext_info, \
848 .event_spec = &bmg160_event, \
849 .num_event_specs = 1 \
850 }
851
852 static const struct iio_chan_spec bmg160_channels[] = {
853 {
854 .type = IIO_TEMP,
855 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |
856 BIT(IIO_CHAN_INFO_SCALE) |
857 BIT(IIO_CHAN_INFO_OFFSET),
858 .scan_index = -1,
859 },
860 BMG160_CHANNEL(X),
861 BMG160_CHANNEL(Y),
862 BMG160_CHANNEL(Z),
863 IIO_CHAN_SOFT_TIMESTAMP(3),
864 };
865
866 static const struct iio_info bmg160_info = {
867 .attrs = &bmg160_attrs_group,
868 .read_raw = bmg160_read_raw,
869 .write_raw = bmg160_write_raw,
870 .read_event_value = bmg160_read_event,
871 .write_event_value = bmg160_write_event,
872 .write_event_config = bmg160_write_event_config,
873 .read_event_config = bmg160_read_event_config,
874 };
875
876 static const unsigned long bmg160_accel_scan_masks[] = {
877 BIT(AXIS_X) | BIT(AXIS_Y) | BIT(AXIS_Z),
878 0};
879
bmg160_trigger_handler(int irq,void * p)880 static irqreturn_t bmg160_trigger_handler(int irq, void *p)
881 {
882 struct iio_poll_func *pf = p;
883 struct iio_dev *indio_dev = pf->indio_dev;
884 struct bmg160_data *data = iio_priv(indio_dev);
885 int ret;
886
887 mutex_lock(&data->mutex);
888 ret = regmap_bulk_read(data->regmap, BMG160_REG_XOUT_L,
889 data->scan.chans, AXIS_MAX * 2);
890 mutex_unlock(&data->mutex);
891 if (ret < 0)
892 goto err;
893
894 iio_push_to_buffers_with_timestamp(indio_dev, &data->scan,
895 pf->timestamp);
896 err:
897 iio_trigger_notify_done(indio_dev->trig);
898
899 return IRQ_HANDLED;
900 }
901
bmg160_trig_reen(struct iio_trigger * trig)902 static void bmg160_trig_reen(struct iio_trigger *trig)
903 {
904 struct iio_dev *indio_dev = iio_trigger_get_drvdata(trig);
905 struct bmg160_data *data = iio_priv(indio_dev);
906 struct device *dev = regmap_get_device(data->regmap);
907 int ret;
908
909 /* new data interrupts don't need ack */
910 if (data->dready_trigger_on)
911 return;
912
913 /* Set latched mode interrupt and clear any latched interrupt */
914 ret = regmap_write(data->regmap, BMG160_REG_INT_RST_LATCH,
915 BMG160_INT_MODE_LATCH_INT |
916 BMG160_INT_MODE_LATCH_RESET);
917 if (ret < 0)
918 dev_err(dev, "Error writing reg_rst_latch\n");
919 }
920
bmg160_data_rdy_trigger_set_state(struct iio_trigger * trig,bool state)921 static int bmg160_data_rdy_trigger_set_state(struct iio_trigger *trig,
922 bool state)
923 {
924 struct iio_dev *indio_dev = iio_trigger_get_drvdata(trig);
925 struct bmg160_data *data = iio_priv(indio_dev);
926 int ret;
927
928 mutex_lock(&data->mutex);
929
930 if (!state && data->ev_enable_state && data->motion_trigger_on) {
931 data->motion_trigger_on = false;
932 mutex_unlock(&data->mutex);
933 return 0;
934 }
935
936 /*
937 * Refer to comment in bmg160_write_event_config for
938 * enable/disable operation order
939 */
940 ret = bmg160_set_power_state(data, state);
941 if (ret < 0) {
942 mutex_unlock(&data->mutex);
943 return ret;
944 }
945 if (data->motion_trig == trig)
946 ret = bmg160_setup_any_motion_interrupt(data, state);
947 else
948 ret = bmg160_setup_new_data_interrupt(data, state);
949 if (ret < 0) {
950 bmg160_set_power_state(data, false);
951 mutex_unlock(&data->mutex);
952 return ret;
953 }
954 if (data->motion_trig == trig)
955 data->motion_trigger_on = state;
956 else
957 data->dready_trigger_on = state;
958
959 mutex_unlock(&data->mutex);
960
961 return 0;
962 }
963
964 static const struct iio_trigger_ops bmg160_trigger_ops = {
965 .set_trigger_state = bmg160_data_rdy_trigger_set_state,
966 .reenable = bmg160_trig_reen,
967 };
968
bmg160_event_handler(int irq,void * private)969 static irqreturn_t bmg160_event_handler(int irq, void *private)
970 {
971 struct iio_dev *indio_dev = private;
972 struct bmg160_data *data = iio_priv(indio_dev);
973 struct device *dev = regmap_get_device(data->regmap);
974 int ret;
975 int dir;
976 unsigned int val;
977
978 ret = regmap_read(data->regmap, BMG160_REG_INT_STATUS_2, &val);
979 if (ret < 0) {
980 dev_err(dev, "Error reading reg_int_status2\n");
981 goto ack_intr_status;
982 }
983
984 if (val & 0x08)
985 dir = IIO_EV_DIR_RISING;
986 else
987 dir = IIO_EV_DIR_FALLING;
988
989 if (val & BMG160_ANY_MOTION_BIT_X)
990 iio_push_event(indio_dev, IIO_MOD_EVENT_CODE(IIO_ANGL_VEL,
991 0,
992 IIO_MOD_X,
993 IIO_EV_TYPE_ROC,
994 dir),
995 iio_get_time_ns(indio_dev));
996 if (val & BMG160_ANY_MOTION_BIT_Y)
997 iio_push_event(indio_dev, IIO_MOD_EVENT_CODE(IIO_ANGL_VEL,
998 0,
999 IIO_MOD_Y,
1000 IIO_EV_TYPE_ROC,
1001 dir),
1002 iio_get_time_ns(indio_dev));
1003 if (val & BMG160_ANY_MOTION_BIT_Z)
1004 iio_push_event(indio_dev, IIO_MOD_EVENT_CODE(IIO_ANGL_VEL,
1005 0,
1006 IIO_MOD_Z,
1007 IIO_EV_TYPE_ROC,
1008 dir),
1009 iio_get_time_ns(indio_dev));
1010
1011 ack_intr_status:
1012 if (!data->dready_trigger_on) {
1013 ret = regmap_write(data->regmap, BMG160_REG_INT_RST_LATCH,
1014 BMG160_INT_MODE_LATCH_INT |
1015 BMG160_INT_MODE_LATCH_RESET);
1016 if (ret < 0)
1017 dev_err(dev, "Error writing reg_rst_latch\n");
1018 }
1019
1020 return IRQ_HANDLED;
1021 }
1022
bmg160_data_rdy_trig_poll(int irq,void * private)1023 static irqreturn_t bmg160_data_rdy_trig_poll(int irq, void *private)
1024 {
1025 struct iio_dev *indio_dev = private;
1026 struct bmg160_data *data = iio_priv(indio_dev);
1027
1028 if (data->dready_trigger_on)
1029 iio_trigger_poll(data->dready_trig);
1030 else if (data->motion_trigger_on)
1031 iio_trigger_poll(data->motion_trig);
1032
1033 if (data->ev_enable_state)
1034 return IRQ_WAKE_THREAD;
1035 else
1036 return IRQ_HANDLED;
1037
1038 }
1039
bmg160_buffer_preenable(struct iio_dev * indio_dev)1040 static int bmg160_buffer_preenable(struct iio_dev *indio_dev)
1041 {
1042 struct bmg160_data *data = iio_priv(indio_dev);
1043
1044 return bmg160_set_power_state(data, true);
1045 }
1046
bmg160_buffer_postdisable(struct iio_dev * indio_dev)1047 static int bmg160_buffer_postdisable(struct iio_dev *indio_dev)
1048 {
1049 struct bmg160_data *data = iio_priv(indio_dev);
1050
1051 return bmg160_set_power_state(data, false);
1052 }
1053
1054 static const struct iio_buffer_setup_ops bmg160_buffer_setup_ops = {
1055 .preenable = bmg160_buffer_preenable,
1056 .postdisable = bmg160_buffer_postdisable,
1057 };
1058
bmg160_match_acpi_device(struct device * dev)1059 static const char *bmg160_match_acpi_device(struct device *dev)
1060 {
1061 const struct acpi_device_id *id;
1062
1063 id = acpi_match_device(dev->driver->acpi_match_table, dev);
1064 if (!id)
1065 return NULL;
1066
1067 return dev_name(dev);
1068 }
1069
bmg160_disable_regulators(void * d)1070 static void bmg160_disable_regulators(void *d)
1071 {
1072 struct bmg160_data *data = d;
1073
1074 regulator_bulk_disable(ARRAY_SIZE(data->regulators), data->regulators);
1075 }
1076
bmg160_core_probe(struct device * dev,struct regmap * regmap,int irq,const char * name)1077 int bmg160_core_probe(struct device *dev, struct regmap *regmap, int irq,
1078 const char *name)
1079 {
1080 struct bmg160_data *data;
1081 struct iio_dev *indio_dev;
1082 int ret;
1083
1084 indio_dev = devm_iio_device_alloc(dev, sizeof(*data));
1085 if (!indio_dev)
1086 return -ENOMEM;
1087
1088 data = iio_priv(indio_dev);
1089 dev_set_drvdata(dev, indio_dev);
1090 data->irq = irq;
1091 data->regmap = regmap;
1092
1093 data->regulators[0].supply = "vdd";
1094 data->regulators[1].supply = "vddio";
1095 ret = devm_regulator_bulk_get(dev, ARRAY_SIZE(data->regulators),
1096 data->regulators);
1097 if (ret)
1098 return dev_err_probe(dev, ret, "Failed to get regulators\n");
1099
1100 ret = regulator_bulk_enable(ARRAY_SIZE(data->regulators),
1101 data->regulators);
1102 if (ret)
1103 return ret;
1104
1105 ret = devm_add_action_or_reset(dev, bmg160_disable_regulators, data);
1106 if (ret)
1107 return ret;
1108
1109 ret = iio_read_mount_matrix(dev, &data->orientation);
1110 if (ret)
1111 return ret;
1112
1113 ret = bmg160_chip_init(data);
1114 if (ret < 0)
1115 return ret;
1116
1117 mutex_init(&data->mutex);
1118
1119 if (ACPI_HANDLE(dev))
1120 name = bmg160_match_acpi_device(dev);
1121
1122 indio_dev->channels = bmg160_channels;
1123 indio_dev->num_channels = ARRAY_SIZE(bmg160_channels);
1124 indio_dev->name = name;
1125 indio_dev->available_scan_masks = bmg160_accel_scan_masks;
1126 indio_dev->modes = INDIO_DIRECT_MODE;
1127 indio_dev->info = &bmg160_info;
1128
1129 if (data->irq > 0) {
1130 ret = devm_request_threaded_irq(dev,
1131 data->irq,
1132 bmg160_data_rdy_trig_poll,
1133 bmg160_event_handler,
1134 IRQF_TRIGGER_RISING,
1135 BMG160_IRQ_NAME,
1136 indio_dev);
1137 if (ret)
1138 return ret;
1139
1140 data->dready_trig = devm_iio_trigger_alloc(dev,
1141 "%s-dev%d",
1142 indio_dev->name,
1143 iio_device_id(indio_dev));
1144 if (!data->dready_trig)
1145 return -ENOMEM;
1146
1147 data->motion_trig = devm_iio_trigger_alloc(dev,
1148 "%s-any-motion-dev%d",
1149 indio_dev->name,
1150 iio_device_id(indio_dev));
1151 if (!data->motion_trig)
1152 return -ENOMEM;
1153
1154 data->dready_trig->ops = &bmg160_trigger_ops;
1155 iio_trigger_set_drvdata(data->dready_trig, indio_dev);
1156 ret = iio_trigger_register(data->dready_trig);
1157 if (ret)
1158 return ret;
1159
1160 data->motion_trig->ops = &bmg160_trigger_ops;
1161 iio_trigger_set_drvdata(data->motion_trig, indio_dev);
1162 ret = iio_trigger_register(data->motion_trig);
1163 if (ret) {
1164 data->motion_trig = NULL;
1165 goto err_trigger_unregister;
1166 }
1167 }
1168
1169 ret = iio_triggered_buffer_setup(indio_dev,
1170 iio_pollfunc_store_time,
1171 bmg160_trigger_handler,
1172 &bmg160_buffer_setup_ops);
1173 if (ret < 0) {
1174 dev_err(dev,
1175 "iio triggered buffer setup failed\n");
1176 goto err_trigger_unregister;
1177 }
1178
1179 ret = pm_runtime_set_active(dev);
1180 if (ret)
1181 goto err_buffer_cleanup;
1182
1183 pm_runtime_enable(dev);
1184 pm_runtime_set_autosuspend_delay(dev,
1185 BMG160_AUTO_SUSPEND_DELAY_MS);
1186 pm_runtime_use_autosuspend(dev);
1187
1188 ret = iio_device_register(indio_dev);
1189 if (ret < 0) {
1190 dev_err(dev, "unable to register iio device\n");
1191 goto err_pm_cleanup;
1192 }
1193
1194 return 0;
1195
1196 err_pm_cleanup:
1197 pm_runtime_dont_use_autosuspend(dev);
1198 pm_runtime_disable(dev);
1199 err_buffer_cleanup:
1200 iio_triggered_buffer_cleanup(indio_dev);
1201 err_trigger_unregister:
1202 if (data->dready_trig)
1203 iio_trigger_unregister(data->dready_trig);
1204 if (data->motion_trig)
1205 iio_trigger_unregister(data->motion_trig);
1206
1207 return ret;
1208 }
1209 EXPORT_SYMBOL_GPL(bmg160_core_probe);
1210
bmg160_core_remove(struct device * dev)1211 void bmg160_core_remove(struct device *dev)
1212 {
1213 struct iio_dev *indio_dev = dev_get_drvdata(dev);
1214 struct bmg160_data *data = iio_priv(indio_dev);
1215
1216 iio_device_unregister(indio_dev);
1217
1218 pm_runtime_disable(dev);
1219 pm_runtime_set_suspended(dev);
1220 pm_runtime_put_noidle(dev);
1221
1222 iio_triggered_buffer_cleanup(indio_dev);
1223
1224 if (data->dready_trig) {
1225 iio_trigger_unregister(data->dready_trig);
1226 iio_trigger_unregister(data->motion_trig);
1227 }
1228
1229 mutex_lock(&data->mutex);
1230 bmg160_set_mode(data, BMG160_MODE_DEEP_SUSPEND);
1231 mutex_unlock(&data->mutex);
1232 }
1233 EXPORT_SYMBOL_GPL(bmg160_core_remove);
1234
1235 #ifdef CONFIG_PM_SLEEP
bmg160_suspend(struct device * dev)1236 static int bmg160_suspend(struct device *dev)
1237 {
1238 struct iio_dev *indio_dev = dev_get_drvdata(dev);
1239 struct bmg160_data *data = iio_priv(indio_dev);
1240
1241 mutex_lock(&data->mutex);
1242 bmg160_set_mode(data, BMG160_MODE_SUSPEND);
1243 mutex_unlock(&data->mutex);
1244
1245 return 0;
1246 }
1247
bmg160_resume(struct device * dev)1248 static int bmg160_resume(struct device *dev)
1249 {
1250 struct iio_dev *indio_dev = dev_get_drvdata(dev);
1251 struct bmg160_data *data = iio_priv(indio_dev);
1252
1253 mutex_lock(&data->mutex);
1254 if (data->dready_trigger_on || data->motion_trigger_on ||
1255 data->ev_enable_state)
1256 bmg160_set_mode(data, BMG160_MODE_NORMAL);
1257 mutex_unlock(&data->mutex);
1258
1259 return 0;
1260 }
1261 #endif
1262
1263 #ifdef CONFIG_PM
bmg160_runtime_suspend(struct device * dev)1264 static int bmg160_runtime_suspend(struct device *dev)
1265 {
1266 struct iio_dev *indio_dev = dev_get_drvdata(dev);
1267 struct bmg160_data *data = iio_priv(indio_dev);
1268 int ret;
1269
1270 ret = bmg160_set_mode(data, BMG160_MODE_SUSPEND);
1271 if (ret < 0) {
1272 dev_err(dev, "set mode failed\n");
1273 return -EAGAIN;
1274 }
1275
1276 return 0;
1277 }
1278
bmg160_runtime_resume(struct device * dev)1279 static int bmg160_runtime_resume(struct device *dev)
1280 {
1281 struct iio_dev *indio_dev = dev_get_drvdata(dev);
1282 struct bmg160_data *data = iio_priv(indio_dev);
1283 int ret;
1284
1285 ret = bmg160_set_mode(data, BMG160_MODE_NORMAL);
1286 if (ret < 0)
1287 return ret;
1288
1289 msleep_interruptible(BMG160_MAX_STARTUP_TIME_MS);
1290
1291 return 0;
1292 }
1293 #endif
1294
1295 const struct dev_pm_ops bmg160_pm_ops = {
1296 SET_SYSTEM_SLEEP_PM_OPS(bmg160_suspend, bmg160_resume)
1297 SET_RUNTIME_PM_OPS(bmg160_runtime_suspend,
1298 bmg160_runtime_resume, NULL)
1299 };
1300 EXPORT_SYMBOL_GPL(bmg160_pm_ops);
1301
1302 MODULE_AUTHOR("Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>");
1303 MODULE_LICENSE("GPL v2");
1304 MODULE_DESCRIPTION("BMG160 Gyro driver");
1305