1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23#include <linux/module.h>
24#include <linux/kernel.h>
25#include <linux/slab.h>
26#include <linux/i2c.h>
27#include <linux/interrupt.h>
28#include <linux/err.h>
29#include <linux/mutex.h>
30#include <linux/delay.h>
31#include <linux/bitops.h>
32#include <linux/gpio.h>
33#include <linux/of_gpio.h>
34#include <linux/acpi.h>
35#include <linux/regulator/consumer.h>
36#include <linux/pm_runtime.h>
37
38#include <linux/iio/iio.h>
39#include <linux/iio/sysfs.h>
40#include <linux/iio/buffer.h>
41#include <linux/iio/trigger.h>
42#include <linux/iio/trigger_consumer.h>
43#include <linux/iio/triggered_buffer.h>
44
45#include <linux/iio/magnetometer/ak8975.h>
46
47
48
49
50
51#define AK8975_REG_WIA 0x00
52#define AK8975_DEVICE_ID 0x48
53
54#define AK8975_REG_INFO 0x01
55
56#define AK8975_REG_ST1 0x02
57#define AK8975_REG_ST1_DRDY_SHIFT 0
58#define AK8975_REG_ST1_DRDY_MASK (1 << AK8975_REG_ST1_DRDY_SHIFT)
59
60#define AK8975_REG_HXL 0x03
61#define AK8975_REG_HXH 0x04
62#define AK8975_REG_HYL 0x05
63#define AK8975_REG_HYH 0x06
64#define AK8975_REG_HZL 0x07
65#define AK8975_REG_HZH 0x08
66#define AK8975_REG_ST2 0x09
67#define AK8975_REG_ST2_DERR_SHIFT 2
68#define AK8975_REG_ST2_DERR_MASK (1 << AK8975_REG_ST2_DERR_SHIFT)
69
70#define AK8975_REG_ST2_HOFL_SHIFT 3
71#define AK8975_REG_ST2_HOFL_MASK (1 << AK8975_REG_ST2_HOFL_SHIFT)
72
73#define AK8975_REG_CNTL 0x0A
74#define AK8975_REG_CNTL_MODE_SHIFT 0
75#define AK8975_REG_CNTL_MODE_MASK (0xF << AK8975_REG_CNTL_MODE_SHIFT)
76#define AK8975_REG_CNTL_MODE_POWER_DOWN 0x00
77#define AK8975_REG_CNTL_MODE_ONCE 0x01
78#define AK8975_REG_CNTL_MODE_SELF_TEST 0x08
79#define AK8975_REG_CNTL_MODE_FUSE_ROM 0x0F
80
81#define AK8975_REG_RSVC 0x0B
82#define AK8975_REG_ASTC 0x0C
83#define AK8975_REG_TS1 0x0D
84#define AK8975_REG_TS2 0x0E
85#define AK8975_REG_I2CDIS 0x0F
86#define AK8975_REG_ASAX 0x10
87#define AK8975_REG_ASAY 0x11
88#define AK8975_REG_ASAZ 0x12
89
90#define AK8975_MAX_REGS AK8975_REG_ASAZ
91
92
93
94
95#define AK09912_REG_WIA1 0x00
96#define AK09912_REG_WIA2 0x01
97#define AK09912_DEVICE_ID 0x04
98#define AK09911_DEVICE_ID 0x05
99
100#define AK09911_REG_INFO1 0x02
101#define AK09911_REG_INFO2 0x03
102
103#define AK09912_REG_ST1 0x10
104
105#define AK09912_REG_ST1_DRDY_SHIFT 0
106#define AK09912_REG_ST1_DRDY_MASK (1 << AK09912_REG_ST1_DRDY_SHIFT)
107
108#define AK09912_REG_HXL 0x11
109#define AK09912_REG_HXH 0x12
110#define AK09912_REG_HYL 0x13
111#define AK09912_REG_HYH 0x14
112#define AK09912_REG_HZL 0x15
113#define AK09912_REG_HZH 0x16
114#define AK09912_REG_TMPS 0x17
115
116#define AK09912_REG_ST2 0x18
117#define AK09912_REG_ST2_HOFL_SHIFT 3
118#define AK09912_REG_ST2_HOFL_MASK (1 << AK09912_REG_ST2_HOFL_SHIFT)
119
120#define AK09912_REG_CNTL1 0x30
121
122#define AK09912_REG_CNTL2 0x31
123#define AK09912_REG_CNTL_MODE_POWER_DOWN 0x00
124#define AK09912_REG_CNTL_MODE_ONCE 0x01
125#define AK09912_REG_CNTL_MODE_SELF_TEST 0x10
126#define AK09912_REG_CNTL_MODE_FUSE_ROM 0x1F
127#define AK09912_REG_CNTL2_MODE_SHIFT 0
128#define AK09912_REG_CNTL2_MODE_MASK (0x1F << AK09912_REG_CNTL2_MODE_SHIFT)
129
130#define AK09912_REG_CNTL3 0x32
131
132#define AK09912_REG_TS1 0x33
133#define AK09912_REG_TS2 0x34
134#define AK09912_REG_TS3 0x35
135#define AK09912_REG_I2CDIS 0x36
136#define AK09912_REG_TS4 0x37
137
138#define AK09912_REG_ASAX 0x60
139#define AK09912_REG_ASAY 0x61
140#define AK09912_REG_ASAZ 0x62
141
142#define AK09912_MAX_REGS AK09912_REG_ASAZ
143
144
145
146
147#define AK8975_MAX_CONVERSION_TIMEOUT 500
148#define AK8975_CONVERSION_DONE_POLL_TIME 10
149#define AK8975_DATA_READY_TIMEOUT ((100*HZ)/1000)
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188static long ak8975_raw_to_gauss(u16 data)
189{
190 return (((long)data + 128) * 3000) / 256;
191}
192
193
194
195
196
197
198
199
200
201
202static long ak8963_09911_raw_to_gauss(u16 data)
203{
204 return (((long)data + 128) * 6000) / 256;
205}
206
207
208
209
210
211
212
213
214
215static long ak09912_raw_to_gauss(u16 data)
216{
217 return (((long)data + 128) * 1500) / 256;
218}
219
220
221enum asahi_compass_chipset {
222 AK8975,
223 AK8963,
224 AK09911,
225 AK09912,
226 AK_MAX_TYPE
227};
228
229enum ak_ctrl_reg_addr {
230 ST1,
231 ST2,
232 CNTL,
233 ASA_BASE,
234 MAX_REGS,
235 REGS_END,
236};
237
238enum ak_ctrl_reg_mask {
239 ST1_DRDY,
240 ST2_HOFL,
241 ST2_DERR,
242 CNTL_MODE,
243 MASK_END,
244};
245
246enum ak_ctrl_mode {
247 POWER_DOWN,
248 MODE_ONCE,
249 SELF_TEST,
250 FUSE_ROM,
251 MODE_END,
252};
253
254struct ak_def {
255 enum asahi_compass_chipset type;
256 long (*raw_to_gauss)(u16 data);
257 u16 range;
258 u8 ctrl_regs[REGS_END];
259 u8 ctrl_masks[MASK_END];
260 u8 ctrl_modes[MODE_END];
261 u8 data_regs[3];
262};
263
264static const struct ak_def ak_def_array[AK_MAX_TYPE] = {
265 {
266 .type = AK8975,
267 .raw_to_gauss = ak8975_raw_to_gauss,
268 .range = 4096,
269 .ctrl_regs = {
270 AK8975_REG_ST1,
271 AK8975_REG_ST2,
272 AK8975_REG_CNTL,
273 AK8975_REG_ASAX,
274 AK8975_MAX_REGS},
275 .ctrl_masks = {
276 AK8975_REG_ST1_DRDY_MASK,
277 AK8975_REG_ST2_HOFL_MASK,
278 AK8975_REG_ST2_DERR_MASK,
279 AK8975_REG_CNTL_MODE_MASK},
280 .ctrl_modes = {
281 AK8975_REG_CNTL_MODE_POWER_DOWN,
282 AK8975_REG_CNTL_MODE_ONCE,
283 AK8975_REG_CNTL_MODE_SELF_TEST,
284 AK8975_REG_CNTL_MODE_FUSE_ROM},
285 .data_regs = {
286 AK8975_REG_HXL,
287 AK8975_REG_HYL,
288 AK8975_REG_HZL},
289 },
290 {
291 .type = AK8963,
292 .raw_to_gauss = ak8963_09911_raw_to_gauss,
293 .range = 8190,
294 .ctrl_regs = {
295 AK8975_REG_ST1,
296 AK8975_REG_ST2,
297 AK8975_REG_CNTL,
298 AK8975_REG_ASAX,
299 AK8975_MAX_REGS},
300 .ctrl_masks = {
301 AK8975_REG_ST1_DRDY_MASK,
302 AK8975_REG_ST2_HOFL_MASK,
303 0,
304 AK8975_REG_CNTL_MODE_MASK},
305 .ctrl_modes = {
306 AK8975_REG_CNTL_MODE_POWER_DOWN,
307 AK8975_REG_CNTL_MODE_ONCE,
308 AK8975_REG_CNTL_MODE_SELF_TEST,
309 AK8975_REG_CNTL_MODE_FUSE_ROM},
310 .data_regs = {
311 AK8975_REG_HXL,
312 AK8975_REG_HYL,
313 AK8975_REG_HZL},
314 },
315 {
316 .type = AK09911,
317 .raw_to_gauss = ak8963_09911_raw_to_gauss,
318 .range = 8192,
319 .ctrl_regs = {
320 AK09912_REG_ST1,
321 AK09912_REG_ST2,
322 AK09912_REG_CNTL2,
323 AK09912_REG_ASAX,
324 AK09912_MAX_REGS},
325 .ctrl_masks = {
326 AK09912_REG_ST1_DRDY_MASK,
327 AK09912_REG_ST2_HOFL_MASK,
328 0,
329 AK09912_REG_CNTL2_MODE_MASK},
330 .ctrl_modes = {
331 AK09912_REG_CNTL_MODE_POWER_DOWN,
332 AK09912_REG_CNTL_MODE_ONCE,
333 AK09912_REG_CNTL_MODE_SELF_TEST,
334 AK09912_REG_CNTL_MODE_FUSE_ROM},
335 .data_regs = {
336 AK09912_REG_HXL,
337 AK09912_REG_HYL,
338 AK09912_REG_HZL},
339 },
340 {
341 .type = AK09912,
342 .raw_to_gauss = ak09912_raw_to_gauss,
343 .range = 32752,
344 .ctrl_regs = {
345 AK09912_REG_ST1,
346 AK09912_REG_ST2,
347 AK09912_REG_CNTL2,
348 AK09912_REG_ASAX,
349 AK09912_MAX_REGS},
350 .ctrl_masks = {
351 AK09912_REG_ST1_DRDY_MASK,
352 AK09912_REG_ST2_HOFL_MASK,
353 0,
354 AK09912_REG_CNTL2_MODE_MASK},
355 .ctrl_modes = {
356 AK09912_REG_CNTL_MODE_POWER_DOWN,
357 AK09912_REG_CNTL_MODE_ONCE,
358 AK09912_REG_CNTL_MODE_SELF_TEST,
359 AK09912_REG_CNTL_MODE_FUSE_ROM},
360 .data_regs = {
361 AK09912_REG_HXL,
362 AK09912_REG_HYL,
363 AK09912_REG_HZL},
364 }
365};
366
367
368
369
370struct ak8975_data {
371 struct i2c_client *client;
372 const struct ak_def *def;
373 struct mutex lock;
374 u8 asa[3];
375 long raw_to_gauss[3];
376 int eoc_gpio;
377 int eoc_irq;
378 wait_queue_head_t data_ready_queue;
379 unsigned long flags;
380 u8 cntl_cache;
381 struct iio_mount_matrix orientation;
382 struct regulator *vdd;
383 struct regulator *vid;
384};
385
386
387static int ak8975_power_on(const struct ak8975_data *data)
388{
389 int ret;
390
391 ret = regulator_enable(data->vdd);
392 if (ret) {
393 dev_warn(&data->client->dev,
394 "Failed to enable specified Vdd supply\n");
395 return ret;
396 }
397 ret = regulator_enable(data->vid);
398 if (ret) {
399 dev_warn(&data->client->dev,
400 "Failed to enable specified Vid supply\n");
401 return ret;
402 }
403
404
405
406
407
408 usleep_range(500, 1000);
409 return 0;
410}
411
412
413static void ak8975_power_off(const struct ak8975_data *data)
414{
415 regulator_disable(data->vid);
416 regulator_disable(data->vdd);
417}
418
419
420
421
422
423static int ak8975_who_i_am(struct i2c_client *client,
424 enum asahi_compass_chipset type)
425{
426 u8 wia_val[2];
427 int ret;
428
429
430
431
432
433
434
435
436
437 ret = i2c_smbus_read_i2c_block_data_or_emulated(
438 client, AK09912_REG_WIA1, 2, wia_val);
439 if (ret < 0) {
440 dev_err(&client->dev, "Error reading WIA\n");
441 return ret;
442 }
443
444 if (wia_val[0] != AK8975_DEVICE_ID)
445 return -ENODEV;
446
447 switch (type) {
448 case AK8975:
449 case AK8963:
450 return 0;
451 case AK09911:
452 if (wia_val[1] == AK09911_DEVICE_ID)
453 return 0;
454 break;
455 case AK09912:
456 if (wia_val[1] == AK09912_DEVICE_ID)
457 return 0;
458 break;
459 default:
460 dev_err(&client->dev, "Type %d unknown\n", type);
461 }
462 return -ENODEV;
463}
464
465
466
467
468static int ak8975_set_mode(struct ak8975_data *data, enum ak_ctrl_mode mode)
469{
470 u8 regval;
471 int ret;
472
473 regval = (data->cntl_cache & ~data->def->ctrl_masks[CNTL_MODE]) |
474 data->def->ctrl_modes[mode];
475 ret = i2c_smbus_write_byte_data(data->client,
476 data->def->ctrl_regs[CNTL], regval);
477 if (ret < 0) {
478 return ret;
479 }
480 data->cntl_cache = regval;
481
482 usleep_range(100, 500);
483
484 return 0;
485}
486
487
488
489
490static irqreturn_t ak8975_irq_handler(int irq, void *data)
491{
492 struct ak8975_data *ak8975 = data;
493
494 set_bit(0, &ak8975->flags);
495 wake_up(&ak8975->data_ready_queue);
496
497 return IRQ_HANDLED;
498}
499
500
501
502
503static int ak8975_setup_irq(struct ak8975_data *data)
504{
505 struct i2c_client *client = data->client;
506 int rc;
507 int irq;
508
509 init_waitqueue_head(&data->data_ready_queue);
510 clear_bit(0, &data->flags);
511 if (client->irq)
512 irq = client->irq;
513 else
514 irq = gpio_to_irq(data->eoc_gpio);
515
516 rc = devm_request_irq(&client->dev, irq, ak8975_irq_handler,
517 IRQF_TRIGGER_RISING | IRQF_ONESHOT,
518 dev_name(&client->dev), data);
519 if (rc < 0) {
520 dev_err(&client->dev,
521 "irq %d request failed, (gpio %d): %d\n",
522 irq, data->eoc_gpio, rc);
523 return rc;
524 }
525
526 data->eoc_irq = irq;
527
528 return rc;
529}
530
531
532
533
534
535
536static int ak8975_setup(struct i2c_client *client)
537{
538 struct iio_dev *indio_dev = i2c_get_clientdata(client);
539 struct ak8975_data *data = iio_priv(indio_dev);
540 int ret;
541
542
543 ret = ak8975_set_mode(data, FUSE_ROM);
544 if (ret < 0) {
545 dev_err(&client->dev, "Error in setting fuse access mode\n");
546 return ret;
547 }
548
549
550 ret = i2c_smbus_read_i2c_block_data_or_emulated(
551 client, data->def->ctrl_regs[ASA_BASE],
552 3, data->asa);
553 if (ret < 0) {
554 dev_err(&client->dev, "Not able to read asa data\n");
555 return ret;
556 }
557
558
559 ret = ak8975_set_mode(data, POWER_DOWN);
560 if (ret < 0) {
561 dev_err(&client->dev, "Error in setting power-down mode\n");
562 return ret;
563 }
564
565 if (data->eoc_gpio > 0 || client->irq > 0) {
566 ret = ak8975_setup_irq(data);
567 if (ret < 0) {
568 dev_err(&client->dev,
569 "Error setting data ready interrupt\n");
570 return ret;
571 }
572 }
573
574 data->raw_to_gauss[0] = data->def->raw_to_gauss(data->asa[0]);
575 data->raw_to_gauss[1] = data->def->raw_to_gauss(data->asa[1]);
576 data->raw_to_gauss[2] = data->def->raw_to_gauss(data->asa[2]);
577
578 return 0;
579}
580
581static int wait_conversion_complete_gpio(struct ak8975_data *data)
582{
583 struct i2c_client *client = data->client;
584 u32 timeout_ms = AK8975_MAX_CONVERSION_TIMEOUT;
585 int ret;
586
587
588 while (timeout_ms) {
589 msleep(AK8975_CONVERSION_DONE_POLL_TIME);
590 if (gpio_get_value(data->eoc_gpio))
591 break;
592 timeout_ms -= AK8975_CONVERSION_DONE_POLL_TIME;
593 }
594 if (!timeout_ms) {
595 dev_err(&client->dev, "Conversion timeout happened\n");
596 return -EINVAL;
597 }
598
599 ret = i2c_smbus_read_byte_data(client, data->def->ctrl_regs[ST1]);
600 if (ret < 0)
601 dev_err(&client->dev, "Error in reading ST1\n");
602
603 return ret;
604}
605
606static int wait_conversion_complete_polled(struct ak8975_data *data)
607{
608 struct i2c_client *client = data->client;
609 u8 read_status;
610 u32 timeout_ms = AK8975_MAX_CONVERSION_TIMEOUT;
611 int ret;
612
613
614 while (timeout_ms) {
615 msleep(AK8975_CONVERSION_DONE_POLL_TIME);
616 ret = i2c_smbus_read_byte_data(client,
617 data->def->ctrl_regs[ST1]);
618 if (ret < 0) {
619 dev_err(&client->dev, "Error in reading ST1\n");
620 return ret;
621 }
622 read_status = ret;
623 if (read_status)
624 break;
625 timeout_ms -= AK8975_CONVERSION_DONE_POLL_TIME;
626 }
627 if (!timeout_ms) {
628 dev_err(&client->dev, "Conversion timeout happened\n");
629 return -EINVAL;
630 }
631
632 return read_status;
633}
634
635
636static int wait_conversion_complete_interrupt(struct ak8975_data *data)
637{
638 int ret;
639
640 ret = wait_event_timeout(data->data_ready_queue,
641 test_bit(0, &data->flags),
642 AK8975_DATA_READY_TIMEOUT);
643 clear_bit(0, &data->flags);
644
645 return ret > 0 ? 0 : -ETIME;
646}
647
648static int ak8975_start_read_axis(struct ak8975_data *data,
649 const struct i2c_client *client)
650{
651
652 int ret = ak8975_set_mode(data, MODE_ONCE);
653
654 if (ret < 0) {
655 dev_err(&client->dev, "Error in setting operating mode\n");
656 return ret;
657 }
658
659
660 if (data->eoc_irq)
661 ret = wait_conversion_complete_interrupt(data);
662 else if (gpio_is_valid(data->eoc_gpio))
663 ret = wait_conversion_complete_gpio(data);
664 else
665 ret = wait_conversion_complete_polled(data);
666 if (ret < 0)
667 return ret;
668
669
670 if (ret & data->def->ctrl_masks[ST1_DRDY]) {
671 ret = i2c_smbus_read_byte_data(client,
672 data->def->ctrl_regs[ST2]);
673 if (ret < 0) {
674 dev_err(&client->dev, "Error in reading ST2\n");
675 return ret;
676 }
677 if (ret & (data->def->ctrl_masks[ST2_DERR] |
678 data->def->ctrl_masks[ST2_HOFL])) {
679 dev_err(&client->dev, "ST2 status error 0x%x\n", ret);
680 return -EINVAL;
681 }
682 }
683
684 return 0;
685}
686
687
688static int ak8975_read_axis(struct iio_dev *indio_dev, int index, int *val)
689{
690 struct ak8975_data *data = iio_priv(indio_dev);
691 const struct i2c_client *client = data->client;
692 const struct ak_def *def = data->def;
693 u16 buff;
694 int ret;
695
696 pm_runtime_get_sync(&data->client->dev);
697
698 mutex_lock(&data->lock);
699
700 ret = ak8975_start_read_axis(data, client);
701 if (ret)
702 goto exit;
703
704 ret = i2c_smbus_read_i2c_block_data_or_emulated(
705 client, def->data_regs[index],
706 sizeof(buff), (u8*)&buff);
707 if (ret < 0)
708 goto exit;
709
710 mutex_unlock(&data->lock);
711
712 pm_runtime_mark_last_busy(&data->client->dev);
713 pm_runtime_put_autosuspend(&data->client->dev);
714
715
716 buff = le16_to_cpu(buff);
717 *val = clamp_t(s16, buff, -def->range, def->range);
718 return IIO_VAL_INT;
719
720exit:
721 mutex_unlock(&data->lock);
722 dev_err(&client->dev, "Error in reading axis\n");
723 return ret;
724}
725
726static int ak8975_read_raw(struct iio_dev *indio_dev,
727 struct iio_chan_spec const *chan,
728 int *val, int *val2,
729 long mask)
730{
731 struct ak8975_data *data = iio_priv(indio_dev);
732
733 switch (mask) {
734 case IIO_CHAN_INFO_RAW:
735 return ak8975_read_axis(indio_dev, chan->address, val);
736 case IIO_CHAN_INFO_SCALE:
737 *val = 0;
738 *val2 = data->raw_to_gauss[chan->address];
739 return IIO_VAL_INT_PLUS_MICRO;
740 }
741 return -EINVAL;
742}
743
744static const struct iio_mount_matrix *
745ak8975_get_mount_matrix(const struct iio_dev *indio_dev,
746 const struct iio_chan_spec *chan)
747{
748 return &((struct ak8975_data *)iio_priv(indio_dev))->orientation;
749}
750
751static const struct iio_chan_spec_ext_info ak8975_ext_info[] = {
752 IIO_MOUNT_MATRIX(IIO_SHARED_BY_DIR, ak8975_get_mount_matrix),
753 { },
754};
755
756#define AK8975_CHANNEL(axis, index) \
757 { \
758 .type = IIO_MAGN, \
759 .modified = 1, \
760 .channel2 = IIO_MOD_##axis, \
761 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | \
762 BIT(IIO_CHAN_INFO_SCALE), \
763 .address = index, \
764 .scan_index = index, \
765 .scan_type = { \
766 .sign = 's', \
767 .realbits = 16, \
768 .storagebits = 16, \
769 .endianness = IIO_CPU \
770 }, \
771 .ext_info = ak8975_ext_info, \
772 }
773
774static const struct iio_chan_spec ak8975_channels[] = {
775 AK8975_CHANNEL(X, 0), AK8975_CHANNEL(Y, 1), AK8975_CHANNEL(Z, 2),
776 IIO_CHAN_SOFT_TIMESTAMP(3),
777};
778
779static const unsigned long ak8975_scan_masks[] = { 0x7, 0 };
780
781static const struct iio_info ak8975_info = {
782 .read_raw = &ak8975_read_raw,
783 .driver_module = THIS_MODULE,
784};
785
786static const struct acpi_device_id ak_acpi_match[] = {
787 {"AK8975", AK8975},
788 {"AK8963", AK8963},
789 {"INVN6500", AK8963},
790 {"AK09911", AK09911},
791 {"AK09912", AK09912},
792 { },
793};
794MODULE_DEVICE_TABLE(acpi, ak_acpi_match);
795
796static const char *ak8975_match_acpi_device(struct device *dev,
797 enum asahi_compass_chipset *chipset)
798{
799 const struct acpi_device_id *id;
800
801 id = acpi_match_device(dev->driver->acpi_match_table, dev);
802 if (!id)
803 return NULL;
804 *chipset = (int)id->driver_data;
805
806 return dev_name(dev);
807}
808
809static void ak8975_fill_buffer(struct iio_dev *indio_dev)
810{
811 struct ak8975_data *data = iio_priv(indio_dev);
812 const struct i2c_client *client = data->client;
813 const struct ak_def *def = data->def;
814 int ret;
815 s16 buff[8];
816
817 mutex_lock(&data->lock);
818
819 ret = ak8975_start_read_axis(data, client);
820 if (ret)
821 goto unlock;
822
823
824
825
826
827 ret = i2c_smbus_read_i2c_block_data_or_emulated(client,
828 def->data_regs[0],
829 3 * sizeof(buff[0]),
830 (u8 *)buff);
831 if (ret < 0)
832 goto unlock;
833
834 mutex_unlock(&data->lock);
835
836
837 buff[0] = clamp_t(s16, le16_to_cpu(buff[0]), -def->range, def->range);
838 buff[1] = clamp_t(s16, le16_to_cpu(buff[1]), -def->range, def->range);
839 buff[2] = clamp_t(s16, le16_to_cpu(buff[2]), -def->range, def->range);
840
841 iio_push_to_buffers_with_timestamp(indio_dev, buff,
842 iio_get_time_ns(indio_dev));
843 return;
844
845unlock:
846 mutex_unlock(&data->lock);
847 dev_err(&client->dev, "Error in reading axes block\n");
848}
849
850static irqreturn_t ak8975_handle_trigger(int irq, void *p)
851{
852 const struct iio_poll_func *pf = p;
853 struct iio_dev *indio_dev = pf->indio_dev;
854
855 ak8975_fill_buffer(indio_dev);
856 iio_trigger_notify_done(indio_dev->trig);
857 return IRQ_HANDLED;
858}
859
860static int ak8975_probe(struct i2c_client *client,
861 const struct i2c_device_id *id)
862{
863 struct ak8975_data *data;
864 struct iio_dev *indio_dev;
865 int eoc_gpio;
866 int err;
867 const char *name = NULL;
868 enum asahi_compass_chipset chipset = AK_MAX_TYPE;
869 const struct ak8975_platform_data *pdata =
870 dev_get_platdata(&client->dev);
871
872
873 if (pdata)
874 eoc_gpio = pdata->eoc_gpio;
875 else if (client->dev.of_node)
876 eoc_gpio = of_get_gpio(client->dev.of_node, 0);
877 else
878 eoc_gpio = -1;
879
880 if (eoc_gpio == -EPROBE_DEFER)
881 return -EPROBE_DEFER;
882
883
884
885 if (gpio_is_valid(eoc_gpio)) {
886 err = devm_gpio_request_one(&client->dev, eoc_gpio,
887 GPIOF_IN, "ak_8975");
888 if (err < 0) {
889 dev_err(&client->dev,
890 "failed to request GPIO %d, error %d\n",
891 eoc_gpio, err);
892 return err;
893 }
894 }
895
896
897 indio_dev = devm_iio_device_alloc(&client->dev, sizeof(*data));
898 if (indio_dev == NULL)
899 return -ENOMEM;
900
901 data = iio_priv(indio_dev);
902 i2c_set_clientdata(client, indio_dev);
903
904 data->client = client;
905 data->eoc_gpio = eoc_gpio;
906 data->eoc_irq = 0;
907
908 if (!pdata) {
909 err = of_iio_read_mount_matrix(&client->dev,
910 "mount-matrix",
911 &data->orientation);
912 if (err)
913 return err;
914 } else
915 data->orientation = pdata->orientation;
916
917
918 if (id) {
919 chipset = (enum asahi_compass_chipset)(id->driver_data);
920 name = id->name;
921 } else if (ACPI_HANDLE(&client->dev)) {
922 name = ak8975_match_acpi_device(&client->dev, &chipset);
923 if (!name)
924 return -ENODEV;
925 } else
926 return -ENOSYS;
927
928 if (chipset >= AK_MAX_TYPE) {
929 dev_err(&client->dev, "AKM device type unsupported: %d\n",
930 chipset);
931 return -ENODEV;
932 }
933
934 data->def = &ak_def_array[chipset];
935
936
937 data->vdd = devm_regulator_get(&client->dev, "vdd");
938 if (IS_ERR(data->vdd))
939 return PTR_ERR(data->vdd);
940 data->vid = devm_regulator_get(&client->dev, "vid");
941 if (IS_ERR(data->vid))
942 return PTR_ERR(data->vid);
943
944 err = ak8975_power_on(data);
945 if (err)
946 return err;
947
948 err = ak8975_who_i_am(client, data->def->type);
949 if (err < 0) {
950 dev_err(&client->dev, "Unexpected device\n");
951 goto power_off;
952 }
953 dev_dbg(&client->dev, "Asahi compass chip %s\n", name);
954
955
956 err = ak8975_setup(client);
957 if (err < 0) {
958 dev_err(&client->dev, "%s initialization fails\n", name);
959 goto power_off;
960 }
961
962 mutex_init(&data->lock);
963 indio_dev->dev.parent = &client->dev;
964 indio_dev->channels = ak8975_channels;
965 indio_dev->num_channels = ARRAY_SIZE(ak8975_channels);
966 indio_dev->info = &ak8975_info;
967 indio_dev->available_scan_masks = ak8975_scan_masks;
968 indio_dev->modes = INDIO_DIRECT_MODE;
969 indio_dev->name = name;
970
971 err = iio_triggered_buffer_setup(indio_dev, NULL, ak8975_handle_trigger,
972 NULL);
973 if (err) {
974 dev_err(&client->dev, "triggered buffer setup failed\n");
975 goto power_off;
976 }
977
978 err = iio_device_register(indio_dev);
979 if (err) {
980 dev_err(&client->dev, "device register failed\n");
981 goto cleanup_buffer;
982 }
983
984
985 pm_runtime_get_noresume(&client->dev);
986 pm_runtime_set_active(&client->dev);
987 pm_runtime_enable(&client->dev);
988
989
990
991
992 pm_runtime_set_autosuspend_delay(&client->dev, 50);
993 pm_runtime_use_autosuspend(&client->dev);
994 pm_runtime_put(&client->dev);
995
996 return 0;
997
998cleanup_buffer:
999 iio_triggered_buffer_cleanup(indio_dev);
1000power_off:
1001 ak8975_power_off(data);
1002 return err;
1003}
1004
1005static int ak8975_remove(struct i2c_client *client)
1006{
1007 struct iio_dev *indio_dev = i2c_get_clientdata(client);
1008 struct ak8975_data *data = iio_priv(indio_dev);
1009
1010 pm_runtime_get_sync(&client->dev);
1011 pm_runtime_put_noidle(&client->dev);
1012 pm_runtime_disable(&client->dev);
1013 iio_device_unregister(indio_dev);
1014 iio_triggered_buffer_cleanup(indio_dev);
1015 ak8975_set_mode(data, POWER_DOWN);
1016 ak8975_power_off(data);
1017
1018 return 0;
1019}
1020
1021#ifdef CONFIG_PM
1022static int ak8975_runtime_suspend(struct device *dev)
1023{
1024 struct i2c_client *client = to_i2c_client(dev);
1025 struct iio_dev *indio_dev = i2c_get_clientdata(client);
1026 struct ak8975_data *data = iio_priv(indio_dev);
1027 int ret;
1028
1029
1030 ret = ak8975_set_mode(data, POWER_DOWN);
1031 if (ret < 0) {
1032 dev_err(&client->dev, "Error in setting power-down mode\n");
1033 return ret;
1034 }
1035
1036 ak8975_power_off(data);
1037
1038 return 0;
1039}
1040
1041static int ak8975_runtime_resume(struct device *dev)
1042{
1043 struct i2c_client *client = to_i2c_client(dev);
1044 struct iio_dev *indio_dev = i2c_get_clientdata(client);
1045 struct ak8975_data *data = iio_priv(indio_dev);
1046 int ret;
1047
1048
1049 ak8975_power_on(data);
1050
1051
1052
1053
1054 ret = ak8975_set_mode(data, POWER_DOWN);
1055 if (ret < 0) {
1056 dev_err(&client->dev, "Error in setting power-down mode\n");
1057 return ret;
1058 }
1059
1060 return 0;
1061}
1062#endif
1063
1064static const struct dev_pm_ops ak8975_dev_pm_ops = {
1065 SET_SYSTEM_SLEEP_PM_OPS(pm_runtime_force_suspend,
1066 pm_runtime_force_resume)
1067 SET_RUNTIME_PM_OPS(ak8975_runtime_suspend,
1068 ak8975_runtime_resume, NULL)
1069};
1070
1071static const struct i2c_device_id ak8975_id[] = {
1072 {"ak8975", AK8975},
1073 {"ak8963", AK8963},
1074 {"AK8963", AK8963},
1075 {"ak09911", AK09911},
1076 {"ak09912", AK09912},
1077 {}
1078};
1079
1080MODULE_DEVICE_TABLE(i2c, ak8975_id);
1081
1082static const struct of_device_id ak8975_of_match[] = {
1083 { .compatible = "asahi-kasei,ak8975", },
1084 { .compatible = "ak8975", },
1085 { .compatible = "asahi-kasei,ak8963", },
1086 { .compatible = "ak8963", },
1087 { .compatible = "asahi-kasei,ak09911", },
1088 { .compatible = "ak09911", },
1089 { .compatible = "asahi-kasei,ak09912", },
1090 { .compatible = "ak09912", },
1091 {}
1092};
1093MODULE_DEVICE_TABLE(of, ak8975_of_match);
1094
1095static struct i2c_driver ak8975_driver = {
1096 .driver = {
1097 .name = "ak8975",
1098 .pm = &ak8975_dev_pm_ops,
1099 .of_match_table = of_match_ptr(ak8975_of_match),
1100 .acpi_match_table = ACPI_PTR(ak_acpi_match),
1101 },
1102 .probe = ak8975_probe,
1103 .remove = ak8975_remove,
1104 .id_table = ak8975_id,
1105};
1106module_i2c_driver(ak8975_driver);
1107
1108MODULE_AUTHOR("Laxman Dewangan <ldewangan@nvidia.com>");
1109MODULE_DESCRIPTION("AK8975 magnetometer driver");
1110MODULE_LICENSE("GPL");
1111