1 /* 2 * A sensor driver for the magnetometer AK8975. 3 * 4 * Magnetic compass sensor driver for monitoring magnetic flux information. 5 * 6 * Copyright (c) 2010, NVIDIA Corporation. 7 * 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. 12 * 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 16 * more details. 17 * 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. 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 35 #include <linux/iio/iio.h> 36 #include <linux/iio/sysfs.h> 37 /* 38 * Register definitions, as well as various shifts and masks to get at the 39 * individual fields of the registers. 40 */ 41 #define AK8975_REG_WIA 0x00 42 #define AK8975_DEVICE_ID 0x48 43 44 #define AK8975_REG_INFO 0x01 45 46 #define AK8975_REG_ST1 0x02 47 #define AK8975_REG_ST1_DRDY_SHIFT 0 48 #define AK8975_REG_ST1_DRDY_MASK (1 << AK8975_REG_ST1_DRDY_SHIFT) 49 50 #define AK8975_REG_HXL 0x03 51 #define AK8975_REG_HXH 0x04 52 #define AK8975_REG_HYL 0x05 53 #define AK8975_REG_HYH 0x06 54 #define AK8975_REG_HZL 0x07 55 #define AK8975_REG_HZH 0x08 56 #define AK8975_REG_ST2 0x09 57 #define AK8975_REG_ST2_DERR_SHIFT 2 58 #define AK8975_REG_ST2_DERR_MASK (1 << AK8975_REG_ST2_DERR_SHIFT) 59 60 #define AK8975_REG_ST2_HOFL_SHIFT 3 61 #define AK8975_REG_ST2_HOFL_MASK (1 << AK8975_REG_ST2_HOFL_SHIFT) 62 63 #define AK8975_REG_CNTL 0x0A 64 #define AK8975_REG_CNTL_MODE_SHIFT 0 65 #define AK8975_REG_CNTL_MODE_MASK (0xF << AK8975_REG_CNTL_MODE_SHIFT) 66 #define AK8975_REG_CNTL_MODE_POWER_DOWN 0 67 #define AK8975_REG_CNTL_MODE_ONCE 1 68 #define AK8975_REG_CNTL_MODE_SELF_TEST 8 69 #define AK8975_REG_CNTL_MODE_FUSE_ROM 0xF 70 71 #define AK8975_REG_RSVC 0x0B 72 #define AK8975_REG_ASTC 0x0C 73 #define AK8975_REG_TS1 0x0D 74 #define AK8975_REG_TS2 0x0E 75 #define AK8975_REG_I2CDIS 0x0F 76 #define AK8975_REG_ASAX 0x10 77 #define AK8975_REG_ASAY 0x11 78 #define AK8975_REG_ASAZ 0x12 79 80 #define AK8975_MAX_REGS AK8975_REG_ASAZ 81 82 /* 83 * Miscellaneous values. 84 */ 85 #define AK8975_MAX_CONVERSION_TIMEOUT 500 86 #define AK8975_CONVERSION_DONE_POLL_TIME 10 87 #define AK8975_DATA_READY_TIMEOUT ((100*HZ)/1000) 88 89 /* 90 * Per-instance context data for the device. 91 */ 92 struct ak8975_data { 93 struct i2c_client *client; 94 struct attribute_group attrs; 95 struct mutex lock; 96 u8 asa[3]; 97 long raw_to_gauss[3]; 98 u8 reg_cache[AK8975_MAX_REGS]; 99 int eoc_gpio; 100 int eoc_irq; 101 wait_queue_head_t data_ready_queue; 102 unsigned long flags; 103 }; 104 105 static const int ak8975_index_to_reg[] = { 106 AK8975_REG_HXL, AK8975_REG_HYL, AK8975_REG_HZL, 107 }; 108 109 /* 110 * Helper function to write to the I2C device's registers. 111 */ 112 static int ak8975_write_data(struct i2c_client *client, 113 u8 reg, u8 val, u8 mask, u8 shift) 114 { 115 struct iio_dev *indio_dev = i2c_get_clientdata(client); 116 struct ak8975_data *data = iio_priv(indio_dev); 117 u8 regval; 118 int ret; 119 120 regval = (data->reg_cache[reg] & ~mask) | (val << shift); 121 ret = i2c_smbus_write_byte_data(client, reg, regval); 122 if (ret < 0) { 123 dev_err(&client->dev, "Write to device fails status %x\n", ret); 124 return ret; 125 } 126 data->reg_cache[reg] = regval; 127 128 return 0; 129 } 130 131 /* 132 * Handle data ready irq 133 */ 134 static irqreturn_t ak8975_irq_handler(int irq, void *data) 135 { 136 struct ak8975_data *ak8975 = data; 137 138 set_bit(0, &ak8975->flags); 139 wake_up(&ak8975->data_ready_queue); 140 141 return IRQ_HANDLED; 142 } 143 144 /* 145 * Install data ready interrupt handler 146 */ 147 static int ak8975_setup_irq(struct ak8975_data *data) 148 { 149 struct i2c_client *client = data->client; 150 int rc; 151 int irq; 152 153 if (client->irq) 154 irq = client->irq; 155 else 156 irq = gpio_to_irq(data->eoc_gpio); 157 158 rc = request_irq(irq, ak8975_irq_handler, 159 IRQF_TRIGGER_RISING | IRQF_ONESHOT, 160 dev_name(&client->dev), data); 161 if (rc < 0) { 162 dev_err(&client->dev, 163 "irq %d request failed, (gpio %d): %d\n", 164 irq, data->eoc_gpio, rc); 165 return rc; 166 } 167 168 init_waitqueue_head(&data->data_ready_queue); 169 clear_bit(0, &data->flags); 170 data->eoc_irq = irq; 171 172 return rc; 173 } 174 175 176 /* 177 * Perform some start-of-day setup, including reading the asa calibration 178 * values and caching them. 179 */ 180 static int ak8975_setup(struct i2c_client *client) 181 { 182 struct iio_dev *indio_dev = i2c_get_clientdata(client); 183 struct ak8975_data *data = iio_priv(indio_dev); 184 u8 device_id; 185 int ret; 186 187 /* Confirm that the device we're talking to is really an AK8975. */ 188 ret = i2c_smbus_read_byte_data(client, AK8975_REG_WIA); 189 if (ret < 0) { 190 dev_err(&client->dev, "Error reading WIA\n"); 191 return ret; 192 } 193 device_id = ret; 194 if (device_id != AK8975_DEVICE_ID) { 195 dev_err(&client->dev, "Device ak8975 not found\n"); 196 return -ENODEV; 197 } 198 199 /* Write the fused rom access mode. */ 200 ret = ak8975_write_data(client, 201 AK8975_REG_CNTL, 202 AK8975_REG_CNTL_MODE_FUSE_ROM, 203 AK8975_REG_CNTL_MODE_MASK, 204 AK8975_REG_CNTL_MODE_SHIFT); 205 if (ret < 0) { 206 dev_err(&client->dev, "Error in setting fuse access mode\n"); 207 return ret; 208 } 209 210 /* Get asa data and store in the device data. */ 211 ret = i2c_smbus_read_i2c_block_data(client, AK8975_REG_ASAX, 212 3, data->asa); 213 if (ret < 0) { 214 dev_err(&client->dev, "Not able to read asa data\n"); 215 return ret; 216 } 217 218 /* After reading fuse ROM data set power-down mode */ 219 ret = ak8975_write_data(client, 220 AK8975_REG_CNTL, 221 AK8975_REG_CNTL_MODE_POWER_DOWN, 222 AK8975_REG_CNTL_MODE_MASK, 223 AK8975_REG_CNTL_MODE_SHIFT); 224 225 if (data->eoc_gpio > 0 || client->irq) { 226 ret = ak8975_setup_irq(data); 227 if (ret < 0) { 228 dev_err(&client->dev, 229 "Error setting data ready interrupt\n"); 230 return ret; 231 } 232 } 233 234 if (ret < 0) { 235 dev_err(&client->dev, "Error in setting power-down mode\n"); 236 return ret; 237 } 238 239 /* 240 * Precalculate scale factor (in Gauss units) for each axis and 241 * store in the device data. 242 * 243 * This scale factor is axis-dependent, and is derived from 3 calibration 244 * factors ASA(x), ASA(y), and ASA(z). 245 * 246 * These ASA values are read from the sensor device at start of day, and 247 * cached in the device context struct. 248 * 249 * Adjusting the flux value with the sensitivity adjustment value should be 250 * done via the following formula: 251 * 252 * Hadj = H * ( ( ( (ASA-128)*0.5 ) / 128 ) + 1 ) 253 * 254 * where H is the raw value, ASA is the sensitivity adjustment, and Hadj 255 * is the resultant adjusted value. 256 * 257 * We reduce the formula to: 258 * 259 * Hadj = H * (ASA + 128) / 256 260 * 261 * H is in the range of -4096 to 4095. The magnetometer has a range of 262 * +-1229uT. To go from the raw value to uT is: 263 * 264 * HuT = H * 1229/4096, or roughly, 3/10. 265 * 266 * Since 1uT = 100 gauss, our final scale factor becomes: 267 * 268 * Hadj = H * ((ASA + 128) / 256) * 3/10 * 100 269 * Hadj = H * ((ASA + 128) * 30 / 256 270 * 271 * Since ASA doesn't change, we cache the resultant scale factor into the 272 * device context in ak8975_setup(). 273 */ 274 data->raw_to_gauss[0] = ((data->asa[0] + 128) * 30) >> 8; 275 data->raw_to_gauss[1] = ((data->asa[1] + 128) * 30) >> 8; 276 data->raw_to_gauss[2] = ((data->asa[2] + 128) * 30) >> 8; 277 278 return 0; 279 } 280 281 static int wait_conversion_complete_gpio(struct ak8975_data *data) 282 { 283 struct i2c_client *client = data->client; 284 u32 timeout_ms = AK8975_MAX_CONVERSION_TIMEOUT; 285 int ret; 286 287 /* Wait for the conversion to complete. */ 288 while (timeout_ms) { 289 msleep(AK8975_CONVERSION_DONE_POLL_TIME); 290 if (gpio_get_value(data->eoc_gpio)) 291 break; 292 timeout_ms -= AK8975_CONVERSION_DONE_POLL_TIME; 293 } 294 if (!timeout_ms) { 295 dev_err(&client->dev, "Conversion timeout happened\n"); 296 return -EINVAL; 297 } 298 299 ret = i2c_smbus_read_byte_data(client, AK8975_REG_ST1); 300 if (ret < 0) 301 dev_err(&client->dev, "Error in reading ST1\n"); 302 303 return ret; 304 } 305 306 static int wait_conversion_complete_polled(struct ak8975_data *data) 307 { 308 struct i2c_client *client = data->client; 309 u8 read_status; 310 u32 timeout_ms = AK8975_MAX_CONVERSION_TIMEOUT; 311 int ret; 312 313 /* Wait for the conversion to complete. */ 314 while (timeout_ms) { 315 msleep(AK8975_CONVERSION_DONE_POLL_TIME); 316 ret = i2c_smbus_read_byte_data(client, AK8975_REG_ST1); 317 if (ret < 0) { 318 dev_err(&client->dev, "Error in reading ST1\n"); 319 return ret; 320 } 321 read_status = ret; 322 if (read_status) 323 break; 324 timeout_ms -= AK8975_CONVERSION_DONE_POLL_TIME; 325 } 326 if (!timeout_ms) { 327 dev_err(&client->dev, "Conversion timeout happened\n"); 328 return -EINVAL; 329 } 330 331 return read_status; 332 } 333 334 /* Returns 0 if the end of conversion interrupt occured or -ETIME otherwise */ 335 static int wait_conversion_complete_interrupt(struct ak8975_data *data) 336 { 337 int ret; 338 339 ret = wait_event_timeout(data->data_ready_queue, 340 test_bit(0, &data->flags), 341 AK8975_DATA_READY_TIMEOUT); 342 clear_bit(0, &data->flags); 343 344 return ret > 0 ? 0 : -ETIME; 345 } 346 347 /* 348 * Emits the raw flux value for the x, y, or z axis. 349 */ 350 static int ak8975_read_axis(struct iio_dev *indio_dev, int index, int *val) 351 { 352 struct ak8975_data *data = iio_priv(indio_dev); 353 struct i2c_client *client = data->client; 354 u16 meas_reg; 355 s16 raw; 356 int ret; 357 358 mutex_lock(&data->lock); 359 360 /* Set up the device for taking a sample. */ 361 ret = ak8975_write_data(client, 362 AK8975_REG_CNTL, 363 AK8975_REG_CNTL_MODE_ONCE, 364 AK8975_REG_CNTL_MODE_MASK, 365 AK8975_REG_CNTL_MODE_SHIFT); 366 if (ret < 0) { 367 dev_err(&client->dev, "Error in setting operating mode\n"); 368 goto exit; 369 } 370 371 /* Wait for the conversion to complete. */ 372 if (data->eoc_irq) 373 ret = wait_conversion_complete_interrupt(data); 374 else if (gpio_is_valid(data->eoc_gpio)) 375 ret = wait_conversion_complete_gpio(data); 376 else 377 ret = wait_conversion_complete_polled(data); 378 if (ret < 0) 379 goto exit; 380 381 /* This will be executed only for non-interrupt based waiting case */ 382 if (ret & AK8975_REG_ST1_DRDY_MASK) { 383 ret = i2c_smbus_read_byte_data(client, AK8975_REG_ST2); 384 if (ret < 0) { 385 dev_err(&client->dev, "Error in reading ST2\n"); 386 goto exit; 387 } 388 if (ret & (AK8975_REG_ST2_DERR_MASK | 389 AK8975_REG_ST2_HOFL_MASK)) { 390 dev_err(&client->dev, "ST2 status error 0x%x\n", ret); 391 ret = -EINVAL; 392 goto exit; 393 } 394 } 395 396 /* Read the flux value from the appropriate register 397 (the register is specified in the iio device attributes). */ 398 ret = i2c_smbus_read_word_data(client, ak8975_index_to_reg[index]); 399 if (ret < 0) { 400 dev_err(&client->dev, "Read axis data fails\n"); 401 goto exit; 402 } 403 meas_reg = ret; 404 405 mutex_unlock(&data->lock); 406 407 /* Endian conversion of the measured values. */ 408 raw = (s16) (le16_to_cpu(meas_reg)); 409 410 /* Clamp to valid range. */ 411 raw = clamp_t(s16, raw, -4096, 4095); 412 *val = raw; 413 return IIO_VAL_INT; 414 415 exit: 416 mutex_unlock(&data->lock); 417 return ret; 418 } 419 420 static int ak8975_read_raw(struct iio_dev *indio_dev, 421 struct iio_chan_spec const *chan, 422 int *val, int *val2, 423 long mask) 424 { 425 struct ak8975_data *data = iio_priv(indio_dev); 426 427 switch (mask) { 428 case IIO_CHAN_INFO_RAW: 429 return ak8975_read_axis(indio_dev, chan->address, val); 430 case IIO_CHAN_INFO_SCALE: 431 *val = data->raw_to_gauss[chan->address]; 432 return IIO_VAL_INT; 433 } 434 return -EINVAL; 435 } 436 437 #define AK8975_CHANNEL(axis, index) \ 438 { \ 439 .type = IIO_MAGN, \ 440 .modified = 1, \ 441 .channel2 = IIO_MOD_##axis, \ 442 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | \ 443 BIT(IIO_CHAN_INFO_SCALE), \ 444 .address = index, \ 445 } 446 447 static const struct iio_chan_spec ak8975_channels[] = { 448 AK8975_CHANNEL(X, 0), AK8975_CHANNEL(Y, 1), AK8975_CHANNEL(Z, 2), 449 }; 450 451 static const struct iio_info ak8975_info = { 452 .read_raw = &ak8975_read_raw, 453 .driver_module = THIS_MODULE, 454 }; 455 456 static int ak8975_probe(struct i2c_client *client, 457 const struct i2c_device_id *id) 458 { 459 struct ak8975_data *data; 460 struct iio_dev *indio_dev; 461 int eoc_gpio; 462 int err; 463 464 /* Grab and set up the supplied GPIO. */ 465 if (client->dev.platform_data) 466 eoc_gpio = *(int *)(client->dev.platform_data); 467 else if (client->dev.of_node) 468 eoc_gpio = of_get_gpio(client->dev.of_node, 0); 469 else 470 eoc_gpio = -1; 471 472 if (eoc_gpio == -EPROBE_DEFER) 473 return -EPROBE_DEFER; 474 475 /* We may not have a GPIO based IRQ to scan, that is fine, we will 476 poll if so */ 477 if (gpio_is_valid(eoc_gpio)) { 478 err = gpio_request_one(eoc_gpio, GPIOF_IN, "ak_8975"); 479 if (err < 0) { 480 dev_err(&client->dev, 481 "failed to request GPIO %d, error %d\n", 482 eoc_gpio, err); 483 goto exit; 484 } 485 } 486 487 /* Register with IIO */ 488 indio_dev = iio_device_alloc(sizeof(*data)); 489 if (indio_dev == NULL) { 490 err = -ENOMEM; 491 goto exit_gpio; 492 } 493 data = iio_priv(indio_dev); 494 i2c_set_clientdata(client, indio_dev); 495 496 data->client = client; 497 data->eoc_gpio = eoc_gpio; 498 data->eoc_irq = 0; 499 500 /* Perform some basic start-of-day setup of the device. */ 501 err = ak8975_setup(client); 502 if (err < 0) { 503 dev_err(&client->dev, "AK8975 initialization fails\n"); 504 goto exit_free_iio; 505 } 506 507 data->client = client; 508 mutex_init(&data->lock); 509 data->eoc_gpio = eoc_gpio; 510 indio_dev->dev.parent = &client->dev; 511 indio_dev->channels = ak8975_channels; 512 indio_dev->num_channels = ARRAY_SIZE(ak8975_channels); 513 indio_dev->info = &ak8975_info; 514 indio_dev->modes = INDIO_DIRECT_MODE; 515 516 err = iio_device_register(indio_dev); 517 if (err < 0) 518 goto exit_free_iio; 519 520 return 0; 521 522 exit_free_iio: 523 iio_device_free(indio_dev); 524 if (data->eoc_irq) 525 free_irq(data->eoc_irq, data); 526 exit_gpio: 527 if (gpio_is_valid(eoc_gpio)) 528 gpio_free(eoc_gpio); 529 exit: 530 return err; 531 } 532 533 static int ak8975_remove(struct i2c_client *client) 534 { 535 struct iio_dev *indio_dev = i2c_get_clientdata(client); 536 struct ak8975_data *data = iio_priv(indio_dev); 537 538 iio_device_unregister(indio_dev); 539 540 if (data->eoc_irq) 541 free_irq(data->eoc_irq, data); 542 543 if (gpio_is_valid(data->eoc_gpio)) 544 gpio_free(data->eoc_gpio); 545 546 iio_device_free(indio_dev); 547 548 return 0; 549 } 550 551 static const struct i2c_device_id ak8975_id[] = { 552 {"ak8975", 0}, 553 {} 554 }; 555 556 MODULE_DEVICE_TABLE(i2c, ak8975_id); 557 558 static const struct of_device_id ak8975_of_match[] = { 559 { .compatible = "asahi-kasei,ak8975", }, 560 { .compatible = "ak8975", }, 561 { } 562 }; 563 MODULE_DEVICE_TABLE(of, ak8975_of_match); 564 565 static struct i2c_driver ak8975_driver = { 566 .driver = { 567 .name = "ak8975", 568 .of_match_table = ak8975_of_match, 569 }, 570 .probe = ak8975_probe, 571 .remove = ak8975_remove, 572 .id_table = ak8975_id, 573 }; 574 module_i2c_driver(ak8975_driver); 575 576 MODULE_AUTHOR("Laxman Dewangan <ldewangan@nvidia.com>"); 577 MODULE_DESCRIPTION("AK8975 magnetometer driver"); 578 MODULE_LICENSE("GPL"); 579