2 * A sensor driver for the magnetometer AK8975.
4 * Magnetic compass sensor driver for monitoring magnetic flux information.
6 * Copyright (c) 2010, NVIDIA Corporation.
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
13 * This program is distributed in the hope that it will be useful, but WITHOUT
14 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
15 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
18 * You should have received a copy of the GNU General Public License along
19 * with this program; if not, write to the Free Software Foundation, Inc.,
20 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
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>
36 #include <linux/iio/iio.h>
37 #include <linux/iio/sysfs.h>
39 * Register definitions, as well as various shifts and masks to get at the
40 * individual fields of the registers.
42 #define AK8975_REG_WIA 0x00
43 #define AK8975_DEVICE_ID 0x48
45 #define AK8975_REG_INFO 0x01
47 #define AK8975_REG_ST1 0x02
48 #define AK8975_REG_ST1_DRDY_SHIFT 0
49 #define AK8975_REG_ST1_DRDY_MASK (1 << AK8975_REG_ST1_DRDY_SHIFT)
51 #define AK8975_REG_HXL 0x03
52 #define AK8975_REG_HXH 0x04
53 #define AK8975_REG_HYL 0x05
54 #define AK8975_REG_HYH 0x06
55 #define AK8975_REG_HZL 0x07
56 #define AK8975_REG_HZH 0x08
57 #define AK8975_REG_ST2 0x09
58 #define AK8975_REG_ST2_DERR_SHIFT 2
59 #define AK8975_REG_ST2_DERR_MASK (1 << AK8975_REG_ST2_DERR_SHIFT)
61 #define AK8975_REG_ST2_HOFL_SHIFT 3
62 #define AK8975_REG_ST2_HOFL_MASK (1 << AK8975_REG_ST2_HOFL_SHIFT)
64 #define AK8975_REG_CNTL 0x0A
65 #define AK8975_REG_CNTL_MODE_SHIFT 0
66 #define AK8975_REG_CNTL_MODE_MASK (0xF << AK8975_REG_CNTL_MODE_SHIFT)
67 #define AK8975_REG_CNTL_MODE_POWER_DOWN 0x00
68 #define AK8975_REG_CNTL_MODE_ONCE 0x01
69 #define AK8975_REG_CNTL_MODE_SELF_TEST 0x08
70 #define AK8975_REG_CNTL_MODE_FUSE_ROM 0x0F
72 #define AK8975_REG_RSVC 0x0B
73 #define AK8975_REG_ASTC 0x0C
74 #define AK8975_REG_TS1 0x0D
75 #define AK8975_REG_TS2 0x0E
76 #define AK8975_REG_I2CDIS 0x0F
77 #define AK8975_REG_ASAX 0x10
78 #define AK8975_REG_ASAY 0x11
79 #define AK8975_REG_ASAZ 0x12
81 #define AK8975_MAX_REGS AK8975_REG_ASAZ
84 * AK09912 Register definitions
86 #define AK09912_REG_WIA1 0x00
87 #define AK09912_REG_WIA2 0x01
88 #define AK09912_DEVICE_ID 0x04
89 #define AK09911_DEVICE_ID 0x05
91 #define AK09911_REG_INFO1 0x02
92 #define AK09911_REG_INFO2 0x03
94 #define AK09912_REG_ST1 0x10
96 #define AK09912_REG_ST1_DRDY_SHIFT 0
97 #define AK09912_REG_ST1_DRDY_MASK (1 << AK09912_REG_ST1_DRDY_SHIFT)
99 #define AK09912_REG_HXL 0x11
100 #define AK09912_REG_HXH 0x12
101 #define AK09912_REG_HYL 0x13
102 #define AK09912_REG_HYH 0x14
103 #define AK09912_REG_HZL 0x15
104 #define AK09912_REG_HZH 0x16
105 #define AK09912_REG_TMPS 0x17
107 #define AK09912_REG_ST2 0x18
108 #define AK09912_REG_ST2_HOFL_SHIFT 3
109 #define AK09912_REG_ST2_HOFL_MASK (1 << AK09912_REG_ST2_HOFL_SHIFT)
111 #define AK09912_REG_CNTL1 0x30
113 #define AK09912_REG_CNTL2 0x31
114 #define AK09912_REG_CNTL_MODE_POWER_DOWN 0x00
115 #define AK09912_REG_CNTL_MODE_ONCE 0x01
116 #define AK09912_REG_CNTL_MODE_SELF_TEST 0x10
117 #define AK09912_REG_CNTL_MODE_FUSE_ROM 0x1F
118 #define AK09912_REG_CNTL2_MODE_SHIFT 0
119 #define AK09912_REG_CNTL2_MODE_MASK (0x1F << AK09912_REG_CNTL2_MODE_SHIFT)
121 #define AK09912_REG_CNTL3 0x32
123 #define AK09912_REG_TS1 0x33
124 #define AK09912_REG_TS2 0x34
125 #define AK09912_REG_TS3 0x35
126 #define AK09912_REG_I2CDIS 0x36
127 #define AK09912_REG_TS4 0x37
129 #define AK09912_REG_ASAX 0x60
130 #define AK09912_REG_ASAY 0x61
131 #define AK09912_REG_ASAZ 0x62
133 #define AK09912_MAX_REGS AK09912_REG_ASAZ
136 * Miscellaneous values.
138 #define AK8975_MAX_CONVERSION_TIMEOUT 500
139 #define AK8975_CONVERSION_DONE_POLL_TIME 10
140 #define AK8975_DATA_READY_TIMEOUT ((100*HZ)/1000)
143 * Precalculate scale factor (in Gauss units) for each axis and
144 * store in the device data.
146 * This scale factor is axis-dependent, and is derived from 3 calibration
147 * factors ASA(x), ASA(y), and ASA(z).
149 * These ASA values are read from the sensor device at start of day, and
150 * cached in the device context struct.
152 * Adjusting the flux value with the sensitivity adjustment value should be
153 * done via the following formula:
155 * Hadj = H * ( ( ( (ASA-128)*0.5 ) / 128 ) + 1 )
156 * where H is the raw value, ASA is the sensitivity adjustment, and Hadj
157 * is the resultant adjusted value.
159 * We reduce the formula to:
161 * Hadj = H * (ASA + 128) / 256
163 * H is in the range of -4096 to 4095. The magnetometer has a range of
164 * +-1229uT. To go from the raw value to uT is:
166 * HuT = H * 1229/4096, or roughly, 3/10.
168 * Since 1uT = 0.01 gauss, our final scale factor becomes:
170 * Hadj = H * ((ASA + 128) / 256) * 3/10 * 1/100
171 * Hadj = H * ((ASA + 128) * 0.003) / 256
173 * Since ASA doesn't change, we cache the resultant scale factor into the
174 * device context in ak8975_setup().
176 * Given we use IIO_VAL_INT_PLUS_MICRO bit when displaying the scale, we
177 * multiply the stored scale value by 1e6.
179 static long ak8975_raw_to_gauss(u16 data
)
181 return (((long)data
+ 128) * 3000) / 256;
185 * For AK8963 and AK09911, same calculation, but the device is less sensitive:
187 * H is in the range of +-8190. The magnetometer has a range of
188 * +-4912uT. To go from the raw value to uT is:
190 * HuT = H * 4912/8190, or roughly, 6/10, instead of 3/10.
193 static long ak8963_09911_raw_to_gauss(u16 data
)
195 return (((long)data
+ 128) * 6000) / 256;
199 * For AK09912, same calculation, except the device is more sensitive:
201 * H is in the range of -32752 to 32752. The magnetometer has a range of
202 * +-4912uT. To go from the raw value to uT is:
204 * HuT = H * 4912/32752, or roughly, 3/20, instead of 3/10.
206 static long ak09912_raw_to_gauss(u16 data
)
208 return (((long)data
+ 128) * 1500) / 256;
211 /* Compatible Asahi Kasei Compass parts */
212 enum asahi_compass_chipset
{
220 enum ak_ctrl_reg_addr
{
229 enum ak_ctrl_reg_mask
{
246 enum asahi_compass_chipset type
;
247 long (*raw_to_gauss
)(u16 data
);
249 u8 ctrl_regs
[REGS_END
];
250 u8 ctrl_masks
[MASK_END
];
251 u8 ctrl_modes
[MODE_END
];
255 static struct ak_def ak_def_array
[AK_MAX_TYPE
] = {
258 .raw_to_gauss
= ak8975_raw_to_gauss
,
267 AK8975_REG_ST1_DRDY_MASK
,
268 AK8975_REG_ST2_HOFL_MASK
,
269 AK8975_REG_ST2_DERR_MASK
,
270 AK8975_REG_CNTL_MODE_MASK
},
272 AK8975_REG_CNTL_MODE_POWER_DOWN
,
273 AK8975_REG_CNTL_MODE_ONCE
,
274 AK8975_REG_CNTL_MODE_SELF_TEST
,
275 AK8975_REG_CNTL_MODE_FUSE_ROM
},
283 .raw_to_gauss
= ak8963_09911_raw_to_gauss
,
292 AK8975_REG_ST1_DRDY_MASK
,
293 AK8975_REG_ST2_HOFL_MASK
,
295 AK8975_REG_CNTL_MODE_MASK
},
297 AK8975_REG_CNTL_MODE_POWER_DOWN
,
298 AK8975_REG_CNTL_MODE_ONCE
,
299 AK8975_REG_CNTL_MODE_SELF_TEST
,
300 AK8975_REG_CNTL_MODE_FUSE_ROM
},
308 .raw_to_gauss
= ak8963_09911_raw_to_gauss
,
317 AK09912_REG_ST1_DRDY_MASK
,
318 AK09912_REG_ST2_HOFL_MASK
,
320 AK09912_REG_CNTL2_MODE_MASK
},
322 AK09912_REG_CNTL_MODE_POWER_DOWN
,
323 AK09912_REG_CNTL_MODE_ONCE
,
324 AK09912_REG_CNTL_MODE_SELF_TEST
,
325 AK09912_REG_CNTL_MODE_FUSE_ROM
},
333 .raw_to_gauss
= ak09912_raw_to_gauss
,
342 AK09912_REG_ST1_DRDY_MASK
,
343 AK09912_REG_ST2_HOFL_MASK
,
345 AK09912_REG_CNTL2_MODE_MASK
},
347 AK09912_REG_CNTL_MODE_POWER_DOWN
,
348 AK09912_REG_CNTL_MODE_ONCE
,
349 AK09912_REG_CNTL_MODE_SELF_TEST
,
350 AK09912_REG_CNTL_MODE_FUSE_ROM
},
359 * Per-instance context data for the device.
362 struct i2c_client
*client
;
364 struct attribute_group attrs
;
367 long raw_to_gauss
[3];
370 wait_queue_head_t data_ready_queue
;
376 * Return 0 if the i2c device is the one we expect.
377 * return a negative error number otherwise
379 static int ak8975_who_i_am(struct i2c_client
*client
,
380 enum asahi_compass_chipset type
)
386 * Signature for each device:
387 * Device | WIA1 | WIA2
388 * AK09912 | DEVICE_ID | AK09912_DEVICE_ID
389 * AK09911 | DEVICE_ID | AK09911_DEVICE_ID
390 * AK8975 | DEVICE_ID | NA
391 * AK8963 | DEVICE_ID | NA
393 ret
= i2c_smbus_read_i2c_block_data(client
, AK09912_REG_WIA1
,
396 dev_err(&client
->dev
, "Error reading WIA\n");
400 if (wia_val
[0] != AK8975_DEVICE_ID
)
408 if (wia_val
[1] == AK09911_DEVICE_ID
)
412 if (wia_val
[1] == AK09912_DEVICE_ID
)
416 dev_err(&client
->dev
, "Type %d unknown\n", type
);
422 * Helper function to write to CNTL register.
424 static int ak8975_set_mode(struct ak8975_data
*data
, enum ak_ctrl_mode mode
)
429 regval
= (data
->cntl_cache
& ~data
->def
->ctrl_masks
[CNTL_MODE
]) |
430 data
->def
->ctrl_modes
[mode
];
431 ret
= i2c_smbus_write_byte_data(data
->client
,
432 data
->def
->ctrl_regs
[CNTL
], regval
);
436 data
->cntl_cache
= regval
;
437 /* After mode change wait atleast 100us */
438 usleep_range(100, 500);
444 * Handle data ready irq
446 static irqreturn_t
ak8975_irq_handler(int irq
, void *data
)
448 struct ak8975_data
*ak8975
= data
;
450 set_bit(0, &ak8975
->flags
);
451 wake_up(&ak8975
->data_ready_queue
);
457 * Install data ready interrupt handler
459 static int ak8975_setup_irq(struct ak8975_data
*data
)
461 struct i2c_client
*client
= data
->client
;
468 irq
= gpio_to_irq(data
->eoc_gpio
);
470 rc
= devm_request_irq(&client
->dev
, irq
, ak8975_irq_handler
,
471 IRQF_TRIGGER_RISING
| IRQF_ONESHOT
,
472 dev_name(&client
->dev
), data
);
474 dev_err(&client
->dev
,
475 "irq %d request failed, (gpio %d): %d\n",
476 irq
, data
->eoc_gpio
, rc
);
480 init_waitqueue_head(&data
->data_ready_queue
);
481 clear_bit(0, &data
->flags
);
489 * Perform some start-of-day setup, including reading the asa calibration
490 * values and caching them.
492 static int ak8975_setup(struct i2c_client
*client
)
494 struct iio_dev
*indio_dev
= i2c_get_clientdata(client
);
495 struct ak8975_data
*data
= iio_priv(indio_dev
);
498 /* Write the fused rom access mode. */
499 ret
= ak8975_set_mode(data
, FUSE_ROM
);
501 dev_err(&client
->dev
, "Error in setting fuse access mode\n");
505 /* Get asa data and store in the device data. */
506 ret
= i2c_smbus_read_i2c_block_data(client
,
507 data
->def
->ctrl_regs
[ASA_BASE
],
510 dev_err(&client
->dev
, "Not able to read asa data\n");
514 /* After reading fuse ROM data set power-down mode */
515 ret
= ak8975_set_mode(data
, POWER_DOWN
);
517 dev_err(&client
->dev
, "Error in setting power-down mode\n");
521 if (data
->eoc_gpio
> 0 || client
->irq
> 0) {
522 ret
= ak8975_setup_irq(data
);
524 dev_err(&client
->dev
,
525 "Error setting data ready interrupt\n");
530 data
->raw_to_gauss
[0] = data
->def
->raw_to_gauss(data
->asa
[0]);
531 data
->raw_to_gauss
[1] = data
->def
->raw_to_gauss(data
->asa
[1]);
532 data
->raw_to_gauss
[2] = data
->def
->raw_to_gauss(data
->asa
[2]);
537 static int wait_conversion_complete_gpio(struct ak8975_data
*data
)
539 struct i2c_client
*client
= data
->client
;
540 u32 timeout_ms
= AK8975_MAX_CONVERSION_TIMEOUT
;
543 /* Wait for the conversion to complete. */
545 msleep(AK8975_CONVERSION_DONE_POLL_TIME
);
546 if (gpio_get_value(data
->eoc_gpio
))
548 timeout_ms
-= AK8975_CONVERSION_DONE_POLL_TIME
;
551 dev_err(&client
->dev
, "Conversion timeout happened\n");
555 ret
= i2c_smbus_read_byte_data(client
, data
->def
->ctrl_regs
[ST1
]);
557 dev_err(&client
->dev
, "Error in reading ST1\n");
562 static int wait_conversion_complete_polled(struct ak8975_data
*data
)
564 struct i2c_client
*client
= data
->client
;
566 u32 timeout_ms
= AK8975_MAX_CONVERSION_TIMEOUT
;
569 /* Wait for the conversion to complete. */
571 msleep(AK8975_CONVERSION_DONE_POLL_TIME
);
572 ret
= i2c_smbus_read_byte_data(client
,
573 data
->def
->ctrl_regs
[ST1
]);
575 dev_err(&client
->dev
, "Error in reading ST1\n");
581 timeout_ms
-= AK8975_CONVERSION_DONE_POLL_TIME
;
584 dev_err(&client
->dev
, "Conversion timeout happened\n");
591 /* Returns 0 if the end of conversion interrupt occured or -ETIME otherwise */
592 static int wait_conversion_complete_interrupt(struct ak8975_data
*data
)
596 ret
= wait_event_timeout(data
->data_ready_queue
,
597 test_bit(0, &data
->flags
),
598 AK8975_DATA_READY_TIMEOUT
);
599 clear_bit(0, &data
->flags
);
601 return ret
> 0 ? 0 : -ETIME
;
605 * Emits the raw flux value for the x, y, or z axis.
607 static int ak8975_read_axis(struct iio_dev
*indio_dev
, int index
, int *val
)
609 struct ak8975_data
*data
= iio_priv(indio_dev
);
610 struct i2c_client
*client
= data
->client
;
613 mutex_lock(&data
->lock
);
615 /* Set up the device for taking a sample. */
616 ret
= ak8975_set_mode(data
, MODE_ONCE
);
618 dev_err(&client
->dev
, "Error in setting operating mode\n");
622 /* Wait for the conversion to complete. */
624 ret
= wait_conversion_complete_interrupt(data
);
625 else if (gpio_is_valid(data
->eoc_gpio
))
626 ret
= wait_conversion_complete_gpio(data
);
628 ret
= wait_conversion_complete_polled(data
);
632 /* This will be executed only for non-interrupt based waiting case */
633 if (ret
& data
->def
->ctrl_masks
[ST1_DRDY
]) {
634 ret
= i2c_smbus_read_byte_data(client
,
635 data
->def
->ctrl_regs
[ST2
]);
637 dev_err(&client
->dev
, "Error in reading ST2\n");
640 if (ret
& (data
->def
->ctrl_masks
[ST2_DERR
] |
641 data
->def
->ctrl_masks
[ST2_HOFL
])) {
642 dev_err(&client
->dev
, "ST2 status error 0x%x\n", ret
);
648 /* Read the flux value from the appropriate register
649 (the register is specified in the iio device attributes). */
650 ret
= i2c_smbus_read_word_data(client
, data
->def
->data_regs
[index
]);
652 dev_err(&client
->dev
, "Read axis data fails\n");
656 mutex_unlock(&data
->lock
);
658 /* Clamp to valid range. */
659 *val
= clamp_t(s16
, ret
, -data
->def
->range
, data
->def
->range
);
663 mutex_unlock(&data
->lock
);
667 static int ak8975_read_raw(struct iio_dev
*indio_dev
,
668 struct iio_chan_spec
const *chan
,
672 struct ak8975_data
*data
= iio_priv(indio_dev
);
675 case IIO_CHAN_INFO_RAW
:
676 return ak8975_read_axis(indio_dev
, chan
->address
, val
);
677 case IIO_CHAN_INFO_SCALE
:
679 *val2
= data
->raw_to_gauss
[chan
->address
];
680 return IIO_VAL_INT_PLUS_MICRO
;
685 #define AK8975_CHANNEL(axis, index) \
689 .channel2 = IIO_MOD_##axis, \
690 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | \
691 BIT(IIO_CHAN_INFO_SCALE), \
695 static const struct iio_chan_spec ak8975_channels
[] = {
696 AK8975_CHANNEL(X
, 0), AK8975_CHANNEL(Y
, 1), AK8975_CHANNEL(Z
, 2),
699 static const struct iio_info ak8975_info
= {
700 .read_raw
= &ak8975_read_raw
,
701 .driver_module
= THIS_MODULE
,
704 static const struct acpi_device_id ak_acpi_match
[] = {
707 {"INVN6500", AK8963
},
708 {"AK09911", AK09911
},
709 {"AK09912", AK09912
},
712 MODULE_DEVICE_TABLE(acpi
, ak_acpi_match
);
714 static const char *ak8975_match_acpi_device(struct device
*dev
,
715 enum asahi_compass_chipset
*chipset
)
717 const struct acpi_device_id
*id
;
719 id
= acpi_match_device(dev
->driver
->acpi_match_table
, dev
);
722 *chipset
= (int)id
->driver_data
;
724 return dev_name(dev
);
727 static int ak8975_probe(struct i2c_client
*client
,
728 const struct i2c_device_id
*id
)
730 struct ak8975_data
*data
;
731 struct iio_dev
*indio_dev
;
734 const char *name
= NULL
;
735 enum asahi_compass_chipset chipset
;
737 /* Grab and set up the supplied GPIO. */
738 if (client
->dev
.platform_data
)
739 eoc_gpio
= *(int *)(client
->dev
.platform_data
);
740 else if (client
->dev
.of_node
)
741 eoc_gpio
= of_get_gpio(client
->dev
.of_node
, 0);
745 if (eoc_gpio
== -EPROBE_DEFER
)
746 return -EPROBE_DEFER
;
748 /* We may not have a GPIO based IRQ to scan, that is fine, we will
750 if (gpio_is_valid(eoc_gpio
)) {
751 err
= devm_gpio_request_one(&client
->dev
, eoc_gpio
,
752 GPIOF_IN
, "ak_8975");
754 dev_err(&client
->dev
,
755 "failed to request GPIO %d, error %d\n",
761 /* Register with IIO */
762 indio_dev
= devm_iio_device_alloc(&client
->dev
, sizeof(*data
));
763 if (indio_dev
== NULL
)
766 data
= iio_priv(indio_dev
);
767 i2c_set_clientdata(client
, indio_dev
);
769 data
->client
= client
;
770 data
->eoc_gpio
= eoc_gpio
;
773 /* id will be NULL when enumerated via ACPI */
775 chipset
= (enum asahi_compass_chipset
)(id
->driver_data
);
777 } else if (ACPI_HANDLE(&client
->dev
))
778 name
= ak8975_match_acpi_device(&client
->dev
, &chipset
);
782 if (chipset
>= AK_MAX_TYPE
) {
783 dev_err(&client
->dev
, "AKM device type unsupported: %d\n",
788 data
->def
= &ak_def_array
[chipset
];
789 err
= ak8975_who_i_am(client
, data
->def
->type
);
791 dev_err(&client
->dev
, "Unexpected device\n");
794 dev_dbg(&client
->dev
, "Asahi compass chip %s\n", name
);
796 /* Perform some basic start-of-day setup of the device. */
797 err
= ak8975_setup(client
);
799 dev_err(&client
->dev
, "%s initialization fails\n", name
);
803 mutex_init(&data
->lock
);
804 indio_dev
->dev
.parent
= &client
->dev
;
805 indio_dev
->channels
= ak8975_channels
;
806 indio_dev
->num_channels
= ARRAY_SIZE(ak8975_channels
);
807 indio_dev
->info
= &ak8975_info
;
808 indio_dev
->modes
= INDIO_DIRECT_MODE
;
809 indio_dev
->name
= name
;
810 return devm_iio_device_register(&client
->dev
, indio_dev
);
813 static const struct i2c_device_id ak8975_id
[] = {
817 {"ak09911", AK09911
},
818 {"ak09912", AK09912
},
822 MODULE_DEVICE_TABLE(i2c
, ak8975_id
);
824 static const struct of_device_id ak8975_of_match
[] = {
825 { .compatible
= "asahi-kasei,ak8975", },
826 { .compatible
= "ak8975", },
827 { .compatible
= "asahi-kasei,ak8963", },
828 { .compatible
= "ak8963", },
829 { .compatible
= "asahi-kasei,ak09911", },
830 { .compatible
= "ak09911", },
831 { .compatible
= "asahi-kasei,ak09912", },
832 { .compatible
= "ak09912", },
835 MODULE_DEVICE_TABLE(of
, ak8975_of_match
);
837 static struct i2c_driver ak8975_driver
= {
840 .of_match_table
= of_match_ptr(ak8975_of_match
),
841 .acpi_match_table
= ACPI_PTR(ak_acpi_match
),
843 .probe
= ak8975_probe
,
844 .id_table
= ak8975_id
,
846 module_i2c_driver(ak8975_driver
);
848 MODULE_AUTHOR("Laxman Dewangan <ldewangan@nvidia.com>");
849 MODULE_DESCRIPTION("AK8975 magnetometer driver");
850 MODULE_LICENSE("GPL");