1 // SPDX-License-Identifier: GPL-2.0-only 2 /* 3 * bma180.c - IIO driver for Bosch BMA180 triaxial acceleration sensor 4 * 5 * Copyright 2013 Oleksandr Kravchenko <x0199363@ti.com> 6 * 7 * Support for BMA250 (c) Peter Meerwald <pmeerw@pmeerw.net> 8 * 9 * SPI is not supported by driver 10 * BMA023/BMA150/SMB380: 7-bit I2C slave address 0x38 11 * BMA180: 7-bit I2C slave address 0x40 or 0x41 12 * BMA250: 7-bit I2C slave address 0x18 or 0x19 13 */ 14 15 #include <linux/module.h> 16 #include <linux/mod_devicetable.h> 17 #include <linux/i2c.h> 18 #include <linux/interrupt.h> 19 #include <linux/delay.h> 20 #include <linux/bitops.h> 21 #include <linux/regulator/consumer.h> 22 #include <linux/slab.h> 23 #include <linux/string.h> 24 #include <linux/types.h> 25 #include <linux/iio/iio.h> 26 #include <linux/iio/sysfs.h> 27 #include <linux/iio/buffer.h> 28 #include <linux/iio/trigger.h> 29 #include <linux/iio/trigger_consumer.h> 30 #include <linux/iio/triggered_buffer.h> 31 32 enum chip_ids { 33 BMA023, 34 BMA150, 35 BMA180, 36 BMA250, 37 }; 38 39 struct bma180_data; 40 41 struct bma180_part_info { 42 u8 chip_id; 43 const struct iio_chan_spec *channels; 44 unsigned int num_channels; 45 const int *scale_table; 46 unsigned int num_scales; 47 const int *bw_table; 48 unsigned int num_bw; 49 int temp_offset; 50 51 u8 int_reset_reg, int_reset_mask; 52 u8 sleep_reg, sleep_mask; 53 u8 bw_reg, bw_mask, bw_offset; 54 u8 scale_reg, scale_mask; 55 u8 power_reg, power_mask, lowpower_val; 56 u8 int_enable_reg, int_enable_mask; 57 u8 softreset_reg, softreset_val; 58 59 int (*chip_config)(struct bma180_data *data); 60 void (*chip_disable)(struct bma180_data *data); 61 }; 62 63 /* Register set */ 64 #define BMA023_CTRL_REG0 0x0a 65 #define BMA023_CTRL_REG1 0x0b 66 #define BMA023_CTRL_REG2 0x14 67 #define BMA023_CTRL_REG3 0x15 68 69 #define BMA023_RANGE_MASK GENMASK(4, 3) /* Range of accel values */ 70 #define BMA023_BW_MASK GENMASK(2, 0) /* Accel bandwidth */ 71 #define BMA023_SLEEP BIT(0) 72 #define BMA023_INT_RESET_MASK BIT(6) 73 #define BMA023_NEW_DATA_INT BIT(5) /* Intr every new accel data is ready */ 74 #define BMA023_RESET_VAL BIT(1) 75 76 #define BMA180_CHIP_ID 0x00 /* Need to distinguish BMA180 from other */ 77 #define BMA180_ACC_X_LSB 0x02 /* First of 6 registers of accel data */ 78 #define BMA180_TEMP 0x08 79 #define BMA180_CTRL_REG0 0x0d 80 #define BMA180_RESET 0x10 81 #define BMA180_BW_TCS 0x20 82 #define BMA180_CTRL_REG3 0x21 83 #define BMA180_TCO_Z 0x30 84 #define BMA180_OFFSET_LSB1 0x35 85 86 /* BMA180_CTRL_REG0 bits */ 87 #define BMA180_DIS_WAKE_UP BIT(0) /* Disable wake up mode */ 88 #define BMA180_SLEEP BIT(1) /* 1 - chip will sleep */ 89 #define BMA180_EE_W BIT(4) /* Unlock writing to addr from 0x20 */ 90 #define BMA180_RESET_INT BIT(6) /* Reset pending interrupts */ 91 92 /* BMA180_CTRL_REG3 bits */ 93 #define BMA180_NEW_DATA_INT BIT(1) /* Intr every new accel data is ready */ 94 95 /* BMA180_OFFSET_LSB1 skipping mode bit */ 96 #define BMA180_SMP_SKIP BIT(0) 97 98 /* Bit masks for registers bit fields */ 99 #define BMA180_RANGE 0x0e /* Range of measured accel values */ 100 #define BMA180_BW 0xf0 /* Accel bandwidth */ 101 #define BMA180_MODE_CONFIG 0x03 /* Config operation modes */ 102 103 /* We have to write this value in reset register to do soft reset */ 104 #define BMA180_RESET_VAL 0xb6 105 106 #define BMA023_ID_REG_VAL 0x02 107 #define BMA180_ID_REG_VAL 0x03 108 #define BMA250_ID_REG_VAL 0x03 109 110 /* Chip power modes */ 111 #define BMA180_LOW_POWER 0x03 112 113 #define BMA250_RANGE_REG 0x0f 114 #define BMA250_BW_REG 0x10 115 #define BMA250_POWER_REG 0x11 116 #define BMA250_RESET_REG 0x14 117 #define BMA250_INT_ENABLE_REG 0x17 118 #define BMA250_INT_MAP_REG 0x1a 119 #define BMA250_INT_RESET_REG 0x21 120 121 #define BMA250_RANGE_MASK GENMASK(3, 0) /* Range of accel values */ 122 #define BMA250_BW_MASK GENMASK(4, 0) /* Accel bandwidth */ 123 #define BMA250_BW_OFFSET 8 124 #define BMA250_SUSPEND_MASK BIT(7) /* chip will sleep */ 125 #define BMA250_LOWPOWER_MASK BIT(6) 126 #define BMA250_DATA_INTEN_MASK BIT(4) 127 #define BMA250_INT1_DATA_MASK BIT(0) 128 #define BMA250_INT_RESET_MASK BIT(7) /* Reset pending interrupts */ 129 130 struct bma180_data { 131 struct regulator *vdd_supply; 132 struct regulator *vddio_supply; 133 struct i2c_client *client; 134 struct iio_trigger *trig; 135 const struct bma180_part_info *part_info; 136 struct iio_mount_matrix orientation; 137 struct mutex mutex; 138 bool sleep_state; 139 int scale; 140 int bw; 141 bool pmode; 142 }; 143 144 enum bma180_chan { 145 AXIS_X, 146 AXIS_Y, 147 AXIS_Z, 148 TEMP 149 }; 150 151 static int bma023_bw_table[] = { 25, 50, 100, 190, 375, 750, 1500 }; /* Hz */ 152 static int bma023_scale_table[] = { 2452, 4903, 9709, }; 153 154 static int bma180_bw_table[] = { 10, 20, 40, 75, 150, 300 }; /* Hz */ 155 static int bma180_scale_table[] = { 1275, 1863, 2452, 3727, 4903, 9709, 19417 }; 156 157 static int bma250_bw_table[] = { 8, 16, 31, 63, 125, 250, 500, 1000 }; /* Hz */ 158 static int bma250_scale_table[] = { 0, 0, 0, 38344, 0, 76590, 0, 0, 153180, 0, 159 0, 0, 306458 }; 160 161 static int bma180_get_data_reg(struct bma180_data *data, enum bma180_chan chan) 162 { 163 int ret; 164 165 if (data->sleep_state) 166 return -EBUSY; 167 168 switch (chan) { 169 case TEMP: 170 ret = i2c_smbus_read_byte_data(data->client, BMA180_TEMP); 171 if (ret < 0) 172 dev_err(&data->client->dev, "failed to read temp register\n"); 173 break; 174 default: 175 ret = i2c_smbus_read_word_data(data->client, 176 BMA180_ACC_X_LSB + chan * 2); 177 if (ret < 0) 178 dev_err(&data->client->dev, 179 "failed to read accel_%c register\n", 180 'x' + chan); 181 } 182 183 return ret; 184 } 185 186 static int bma180_set_bits(struct bma180_data *data, u8 reg, u8 mask, u8 val) 187 { 188 int ret = i2c_smbus_read_byte_data(data->client, reg); 189 u8 reg_val = (ret & ~mask) | (val << (ffs(mask) - 1)); 190 191 if (ret < 0) 192 return ret; 193 194 return i2c_smbus_write_byte_data(data->client, reg, reg_val); 195 } 196 197 static int bma180_reset_intr(struct bma180_data *data) 198 { 199 int ret = bma180_set_bits(data, data->part_info->int_reset_reg, 200 data->part_info->int_reset_mask, 1); 201 202 if (ret) 203 dev_err(&data->client->dev, "failed to reset interrupt\n"); 204 205 return ret; 206 } 207 208 static int bma180_set_new_data_intr_state(struct bma180_data *data, bool state) 209 { 210 int ret = bma180_set_bits(data, data->part_info->int_enable_reg, 211 data->part_info->int_enable_mask, state); 212 if (ret) 213 goto err; 214 ret = bma180_reset_intr(data); 215 if (ret) 216 goto err; 217 218 return 0; 219 220 err: 221 dev_err(&data->client->dev, 222 "failed to set new data interrupt state %d\n", state); 223 return ret; 224 } 225 226 static int bma180_set_sleep_state(struct bma180_data *data, bool state) 227 { 228 int ret = bma180_set_bits(data, data->part_info->sleep_reg, 229 data->part_info->sleep_mask, state); 230 231 if (ret) { 232 dev_err(&data->client->dev, 233 "failed to set sleep state %d\n", state); 234 return ret; 235 } 236 data->sleep_state = state; 237 238 return 0; 239 } 240 241 static int bma180_set_ee_writing_state(struct bma180_data *data, bool state) 242 { 243 int ret = bma180_set_bits(data, BMA180_CTRL_REG0, BMA180_EE_W, state); 244 245 if (ret) 246 dev_err(&data->client->dev, 247 "failed to set ee writing state %d\n", state); 248 249 return ret; 250 } 251 252 static int bma180_set_bw(struct bma180_data *data, int val) 253 { 254 int ret, i; 255 256 if (data->sleep_state) 257 return -EBUSY; 258 259 for (i = 0; i < data->part_info->num_bw; ++i) { 260 if (data->part_info->bw_table[i] == val) { 261 ret = bma180_set_bits(data, data->part_info->bw_reg, 262 data->part_info->bw_mask, 263 i + data->part_info->bw_offset); 264 if (ret) { 265 dev_err(&data->client->dev, 266 "failed to set bandwidth\n"); 267 return ret; 268 } 269 data->bw = val; 270 return 0; 271 } 272 } 273 274 return -EINVAL; 275 } 276 277 static int bma180_set_scale(struct bma180_data *data, int val) 278 { 279 int ret, i; 280 281 if (data->sleep_state) 282 return -EBUSY; 283 284 for (i = 0; i < data->part_info->num_scales; ++i) 285 if (data->part_info->scale_table[i] == val) { 286 ret = bma180_set_bits(data, data->part_info->scale_reg, 287 data->part_info->scale_mask, i); 288 if (ret) { 289 dev_err(&data->client->dev, 290 "failed to set scale\n"); 291 return ret; 292 } 293 data->scale = val; 294 return 0; 295 } 296 297 return -EINVAL; 298 } 299 300 static int bma180_set_pmode(struct bma180_data *data, bool mode) 301 { 302 u8 reg_val = mode ? data->part_info->lowpower_val : 0; 303 int ret = bma180_set_bits(data, data->part_info->power_reg, 304 data->part_info->power_mask, reg_val); 305 306 if (ret) { 307 dev_err(&data->client->dev, "failed to set power mode\n"); 308 return ret; 309 } 310 data->pmode = mode; 311 312 return 0; 313 } 314 315 static int bma180_soft_reset(struct bma180_data *data) 316 { 317 int ret = i2c_smbus_write_byte_data(data->client, 318 data->part_info->softreset_reg, 319 data->part_info->softreset_val); 320 321 if (ret) 322 dev_err(&data->client->dev, "failed to reset the chip\n"); 323 324 return ret; 325 } 326 327 static int bma180_chip_init(struct bma180_data *data) 328 { 329 /* Try to read chip_id register. It must return 0x03. */ 330 int ret = i2c_smbus_read_byte_data(data->client, BMA180_CHIP_ID); 331 332 if (ret < 0) 333 return ret; 334 if (ret != data->part_info->chip_id) { 335 dev_err(&data->client->dev, "wrong chip ID %d expected %d\n", 336 ret, data->part_info->chip_id); 337 return -ENODEV; 338 } 339 340 ret = bma180_soft_reset(data); 341 if (ret) 342 return ret; 343 /* 344 * No serial transaction should occur within minimum 10 us 345 * after soft_reset command 346 */ 347 msleep(20); 348 349 return bma180_set_new_data_intr_state(data, false); 350 } 351 352 static int bma023_chip_config(struct bma180_data *data) 353 { 354 int ret = bma180_chip_init(data); 355 356 if (ret) 357 goto err; 358 359 ret = bma180_set_bw(data, 50); /* 50 Hz */ 360 if (ret) 361 goto err; 362 ret = bma180_set_scale(data, 2452); /* 2 G */ 363 if (ret) 364 goto err; 365 366 return 0; 367 368 err: 369 dev_err(&data->client->dev, "failed to config the chip\n"); 370 return ret; 371 } 372 373 static int bma180_chip_config(struct bma180_data *data) 374 { 375 int ret = bma180_chip_init(data); 376 377 if (ret) 378 goto err; 379 ret = bma180_set_pmode(data, false); 380 if (ret) 381 goto err; 382 ret = bma180_set_bits(data, BMA180_CTRL_REG0, BMA180_DIS_WAKE_UP, 1); 383 if (ret) 384 goto err; 385 ret = bma180_set_ee_writing_state(data, true); 386 if (ret) 387 goto err; 388 ret = bma180_set_bits(data, BMA180_OFFSET_LSB1, BMA180_SMP_SKIP, 1); 389 if (ret) 390 goto err; 391 ret = bma180_set_bw(data, 20); /* 20 Hz */ 392 if (ret) 393 goto err; 394 ret = bma180_set_scale(data, 2452); /* 2 G */ 395 if (ret) 396 goto err; 397 398 return 0; 399 400 err: 401 dev_err(&data->client->dev, "failed to config the chip\n"); 402 return ret; 403 } 404 405 static int bma250_chip_config(struct bma180_data *data) 406 { 407 int ret = bma180_chip_init(data); 408 409 if (ret) 410 goto err; 411 ret = bma180_set_pmode(data, false); 412 if (ret) 413 goto err; 414 ret = bma180_set_bw(data, 16); /* 16 Hz */ 415 if (ret) 416 goto err; 417 ret = bma180_set_scale(data, 38344); /* 2 G */ 418 if (ret) 419 goto err; 420 /* 421 * This enables dataready interrupt on the INT1 pin 422 * FIXME: support using the INT2 pin 423 */ 424 ret = bma180_set_bits(data, BMA250_INT_MAP_REG, BMA250_INT1_DATA_MASK, 1); 425 if (ret) 426 goto err; 427 428 return 0; 429 430 err: 431 dev_err(&data->client->dev, "failed to config the chip\n"); 432 return ret; 433 } 434 435 static void bma023_chip_disable(struct bma180_data *data) 436 { 437 if (bma180_set_sleep_state(data, true)) 438 goto err; 439 440 return; 441 442 err: 443 dev_err(&data->client->dev, "failed to disable the chip\n"); 444 } 445 446 static void bma180_chip_disable(struct bma180_data *data) 447 { 448 if (bma180_set_new_data_intr_state(data, false)) 449 goto err; 450 if (bma180_set_ee_writing_state(data, false)) 451 goto err; 452 if (bma180_set_sleep_state(data, true)) 453 goto err; 454 455 return; 456 457 err: 458 dev_err(&data->client->dev, "failed to disable the chip\n"); 459 } 460 461 static void bma250_chip_disable(struct bma180_data *data) 462 { 463 if (bma180_set_new_data_intr_state(data, false)) 464 goto err; 465 if (bma180_set_sleep_state(data, true)) 466 goto err; 467 468 return; 469 470 err: 471 dev_err(&data->client->dev, "failed to disable the chip\n"); 472 } 473 474 static ssize_t bma180_show_avail(char *buf, const int *vals, unsigned int n, 475 bool micros) 476 { 477 size_t len = 0; 478 int i; 479 480 for (i = 0; i < n; i++) { 481 if (!vals[i]) 482 continue; 483 len += scnprintf(buf + len, PAGE_SIZE - len, 484 micros ? "0.%06d " : "%d ", vals[i]); 485 } 486 buf[len - 1] = '\n'; 487 488 return len; 489 } 490 491 static ssize_t bma180_show_filter_freq_avail(struct device *dev, 492 struct device_attribute *attr, char *buf) 493 { 494 struct bma180_data *data = iio_priv(dev_to_iio_dev(dev)); 495 496 return bma180_show_avail(buf, data->part_info->bw_table, 497 data->part_info->num_bw, false); 498 } 499 500 static ssize_t bma180_show_scale_avail(struct device *dev, 501 struct device_attribute *attr, char *buf) 502 { 503 struct bma180_data *data = iio_priv(dev_to_iio_dev(dev)); 504 505 return bma180_show_avail(buf, data->part_info->scale_table, 506 data->part_info->num_scales, true); 507 } 508 509 static IIO_DEVICE_ATTR(in_accel_filter_low_pass_3db_frequency_available, 510 S_IRUGO, bma180_show_filter_freq_avail, NULL, 0); 511 512 static IIO_DEVICE_ATTR(in_accel_scale_available, 513 S_IRUGO, bma180_show_scale_avail, NULL, 0); 514 515 static struct attribute *bma180_attributes[] = { 516 &iio_dev_attr_in_accel_filter_low_pass_3db_frequency_available. 517 dev_attr.attr, 518 &iio_dev_attr_in_accel_scale_available.dev_attr.attr, 519 NULL, 520 }; 521 522 static const struct attribute_group bma180_attrs_group = { 523 .attrs = bma180_attributes, 524 }; 525 526 static int bma180_read_raw(struct iio_dev *indio_dev, 527 struct iio_chan_spec const *chan, int *val, int *val2, 528 long mask) 529 { 530 struct bma180_data *data = iio_priv(indio_dev); 531 int ret; 532 533 switch (mask) { 534 case IIO_CHAN_INFO_RAW: 535 if (!iio_device_claim_direct(indio_dev)) 536 return -EBUSY; 537 538 mutex_lock(&data->mutex); 539 ret = bma180_get_data_reg(data, chan->scan_index); 540 mutex_unlock(&data->mutex); 541 iio_device_release_direct(indio_dev); 542 if (ret < 0) 543 return ret; 544 if (chan->scan_type.sign == 's') { 545 *val = sign_extend32(ret >> chan->scan_type.shift, 546 chan->scan_type.realbits - 1); 547 } else { 548 *val = ret; 549 } 550 return IIO_VAL_INT; 551 case IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY: 552 *val = data->bw; 553 return IIO_VAL_INT; 554 case IIO_CHAN_INFO_SCALE: 555 switch (chan->type) { 556 case IIO_ACCEL: 557 *val = 0; 558 *val2 = data->scale; 559 return IIO_VAL_INT_PLUS_MICRO; 560 case IIO_TEMP: 561 *val = 500; 562 return IIO_VAL_INT; 563 default: 564 return -EINVAL; 565 } 566 case IIO_CHAN_INFO_OFFSET: 567 *val = data->part_info->temp_offset; 568 return IIO_VAL_INT; 569 default: 570 return -EINVAL; 571 } 572 } 573 574 static int bma180_write_raw(struct iio_dev *indio_dev, 575 struct iio_chan_spec const *chan, int val, int val2, long mask) 576 { 577 struct bma180_data *data = iio_priv(indio_dev); 578 int ret; 579 580 switch (mask) { 581 case IIO_CHAN_INFO_SCALE: 582 if (val) 583 return -EINVAL; 584 mutex_lock(&data->mutex); 585 ret = bma180_set_scale(data, val2); 586 mutex_unlock(&data->mutex); 587 return ret; 588 case IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY: 589 if (val2) 590 return -EINVAL; 591 mutex_lock(&data->mutex); 592 ret = bma180_set_bw(data, val); 593 mutex_unlock(&data->mutex); 594 return ret; 595 default: 596 return -EINVAL; 597 } 598 } 599 600 static const struct iio_info bma180_info = { 601 .attrs = &bma180_attrs_group, 602 .read_raw = bma180_read_raw, 603 .write_raw = bma180_write_raw, 604 }; 605 606 static const char * const bma180_power_modes[] = { "low_noise", "low_power" }; 607 608 static int bma180_get_power_mode(struct iio_dev *indio_dev, 609 const struct iio_chan_spec *chan) 610 { 611 struct bma180_data *data = iio_priv(indio_dev); 612 613 return data->pmode; 614 } 615 616 static int bma180_set_power_mode(struct iio_dev *indio_dev, 617 const struct iio_chan_spec *chan, unsigned int mode) 618 { 619 struct bma180_data *data = iio_priv(indio_dev); 620 int ret; 621 622 mutex_lock(&data->mutex); 623 ret = bma180_set_pmode(data, mode); 624 mutex_unlock(&data->mutex); 625 626 return ret; 627 } 628 629 static const struct iio_mount_matrix * 630 bma180_accel_get_mount_matrix(const struct iio_dev *indio_dev, 631 const struct iio_chan_spec *chan) 632 { 633 struct bma180_data *data = iio_priv(indio_dev); 634 635 return &data->orientation; 636 } 637 638 static const struct iio_enum bma180_power_mode_enum = { 639 .items = bma180_power_modes, 640 .num_items = ARRAY_SIZE(bma180_power_modes), 641 .get = bma180_get_power_mode, 642 .set = bma180_set_power_mode, 643 }; 644 645 static const struct iio_chan_spec_ext_info bma023_ext_info[] = { 646 IIO_MOUNT_MATRIX(IIO_SHARED_BY_DIR, bma180_accel_get_mount_matrix), 647 { } 648 }; 649 650 static const struct iio_chan_spec_ext_info bma180_ext_info[] = { 651 IIO_ENUM("power_mode", IIO_SHARED_BY_TYPE, &bma180_power_mode_enum), 652 IIO_ENUM_AVAILABLE("power_mode", IIO_SHARED_BY_TYPE, &bma180_power_mode_enum), 653 IIO_MOUNT_MATRIX(IIO_SHARED_BY_DIR, bma180_accel_get_mount_matrix), 654 { } 655 }; 656 657 #define BMA023_ACC_CHANNEL(_axis, _bits) { \ 658 .type = IIO_ACCEL, \ 659 .modified = 1, \ 660 .channel2 = IIO_MOD_##_axis, \ 661 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), \ 662 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE) | \ 663 BIT(IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY), \ 664 .scan_index = AXIS_##_axis, \ 665 .scan_type = { \ 666 .sign = 's', \ 667 .realbits = _bits, \ 668 .storagebits = 16, \ 669 .shift = 16 - _bits, \ 670 }, \ 671 .ext_info = bma023_ext_info, \ 672 } 673 674 #define BMA150_TEMP_CHANNEL { \ 675 .type = IIO_TEMP, \ 676 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | \ 677 BIT(IIO_CHAN_INFO_SCALE) | BIT(IIO_CHAN_INFO_OFFSET), \ 678 .scan_index = TEMP, \ 679 .scan_type = { \ 680 .sign = 'u', \ 681 .realbits = 8, \ 682 .storagebits = 16, \ 683 }, \ 684 } 685 686 #define BMA180_ACC_CHANNEL(_axis, _bits) { \ 687 .type = IIO_ACCEL, \ 688 .modified = 1, \ 689 .channel2 = IIO_MOD_##_axis, \ 690 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), \ 691 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE) | \ 692 BIT(IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY), \ 693 .scan_index = AXIS_##_axis, \ 694 .scan_type = { \ 695 .sign = 's', \ 696 .realbits = _bits, \ 697 .storagebits = 16, \ 698 .shift = 16 - _bits, \ 699 }, \ 700 .ext_info = bma180_ext_info, \ 701 } 702 703 #define BMA180_TEMP_CHANNEL { \ 704 .type = IIO_TEMP, \ 705 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | \ 706 BIT(IIO_CHAN_INFO_SCALE) | BIT(IIO_CHAN_INFO_OFFSET), \ 707 .scan_index = TEMP, \ 708 .scan_type = { \ 709 .sign = 's', \ 710 .realbits = 8, \ 711 .storagebits = 16, \ 712 }, \ 713 } 714 715 static const struct iio_chan_spec bma023_channels[] = { 716 BMA023_ACC_CHANNEL(X, 10), 717 BMA023_ACC_CHANNEL(Y, 10), 718 BMA023_ACC_CHANNEL(Z, 10), 719 IIO_CHAN_SOFT_TIMESTAMP(4), 720 }; 721 722 static const struct iio_chan_spec bma150_channels[] = { 723 BMA023_ACC_CHANNEL(X, 10), 724 BMA023_ACC_CHANNEL(Y, 10), 725 BMA023_ACC_CHANNEL(Z, 10), 726 BMA150_TEMP_CHANNEL, 727 IIO_CHAN_SOFT_TIMESTAMP(4), 728 }; 729 730 static const struct iio_chan_spec bma180_channels[] = { 731 BMA180_ACC_CHANNEL(X, 14), 732 BMA180_ACC_CHANNEL(Y, 14), 733 BMA180_ACC_CHANNEL(Z, 14), 734 BMA180_TEMP_CHANNEL, 735 IIO_CHAN_SOFT_TIMESTAMP(4), 736 }; 737 738 static const struct iio_chan_spec bma250_channels[] = { 739 BMA180_ACC_CHANNEL(X, 10), 740 BMA180_ACC_CHANNEL(Y, 10), 741 BMA180_ACC_CHANNEL(Z, 10), 742 BMA180_TEMP_CHANNEL, 743 IIO_CHAN_SOFT_TIMESTAMP(4), 744 }; 745 746 static const struct bma180_part_info bma180_part_info[] = { 747 [BMA023] = { 748 .chip_id = BMA023_ID_REG_VAL, 749 .channels = bma023_channels, 750 .num_channels = ARRAY_SIZE(bma023_channels), 751 .scale_table = bma023_scale_table, 752 .num_scales = ARRAY_SIZE(bma023_scale_table), 753 .bw_table = bma023_bw_table, 754 .num_bw = ARRAY_SIZE(bma023_bw_table), 755 /* No temperature channel */ 756 .temp_offset = 0, 757 .int_reset_reg = BMA023_CTRL_REG0, 758 .int_reset_mask = BMA023_INT_RESET_MASK, 759 .sleep_reg = BMA023_CTRL_REG0, 760 .sleep_mask = BMA023_SLEEP, 761 .bw_reg = BMA023_CTRL_REG2, 762 .bw_mask = BMA023_BW_MASK, 763 .scale_reg = BMA023_CTRL_REG2, 764 .scale_mask = BMA023_RANGE_MASK, 765 /* No power mode on bma023 */ 766 .power_reg = 0, 767 .power_mask = 0, 768 .lowpower_val = 0, 769 .int_enable_reg = BMA023_CTRL_REG3, 770 .int_enable_mask = BMA023_NEW_DATA_INT, 771 .softreset_reg = BMA023_CTRL_REG0, 772 .softreset_val = BMA023_RESET_VAL, 773 .chip_config = bma023_chip_config, 774 .chip_disable = bma023_chip_disable, 775 }, 776 [BMA150] = { 777 .chip_id = BMA023_ID_REG_VAL, 778 .channels = bma150_channels, 779 .num_channels = ARRAY_SIZE(bma150_channels), 780 .scale_table = bma023_scale_table, 781 .num_scales = ARRAY_SIZE(bma023_scale_table), 782 .bw_table = bma023_bw_table, 783 .num_bw = ARRAY_SIZE(bma023_bw_table), 784 .temp_offset = -60, /* 0 LSB @ -30 degree C */ 785 .int_reset_reg = BMA023_CTRL_REG0, 786 .int_reset_mask = BMA023_INT_RESET_MASK, 787 .sleep_reg = BMA023_CTRL_REG0, 788 .sleep_mask = BMA023_SLEEP, 789 .bw_reg = BMA023_CTRL_REG2, 790 .bw_mask = BMA023_BW_MASK, 791 .scale_reg = BMA023_CTRL_REG2, 792 .scale_mask = BMA023_RANGE_MASK, 793 /* No power mode on bma150 */ 794 .power_reg = 0, 795 .power_mask = 0, 796 .lowpower_val = 0, 797 .int_enable_reg = BMA023_CTRL_REG3, 798 .int_enable_mask = BMA023_NEW_DATA_INT, 799 .softreset_reg = BMA023_CTRL_REG0, 800 .softreset_val = BMA023_RESET_VAL, 801 .chip_config = bma023_chip_config, 802 .chip_disable = bma023_chip_disable, 803 }, 804 [BMA180] = { 805 .chip_id = BMA180_ID_REG_VAL, 806 .channels = bma180_channels, 807 .num_channels = ARRAY_SIZE(bma180_channels), 808 .scale_table = bma180_scale_table, 809 .num_scales = ARRAY_SIZE(bma180_scale_table), 810 .bw_table = bma180_bw_table, 811 .num_bw = ARRAY_SIZE(bma180_bw_table), 812 .temp_offset = 48, /* 0 LSB @ 24 degree C */ 813 .int_reset_reg = BMA180_CTRL_REG0, 814 .int_reset_mask = BMA180_RESET_INT, 815 .sleep_reg = BMA180_CTRL_REG0, 816 .sleep_mask = BMA180_SLEEP, 817 .bw_reg = BMA180_BW_TCS, 818 .bw_mask = BMA180_BW, 819 .scale_reg = BMA180_OFFSET_LSB1, 820 .scale_mask = BMA180_RANGE, 821 .power_reg = BMA180_TCO_Z, 822 .power_mask = BMA180_MODE_CONFIG, 823 .lowpower_val = BMA180_LOW_POWER, 824 .int_enable_reg = BMA180_CTRL_REG3, 825 .int_enable_mask = BMA180_NEW_DATA_INT, 826 .softreset_reg = BMA180_RESET, 827 .softreset_val = BMA180_RESET_VAL, 828 .chip_config = bma180_chip_config, 829 .chip_disable = bma180_chip_disable, 830 }, 831 [BMA250] = { 832 .chip_id = BMA250_ID_REG_VAL, 833 .channels = bma250_channels, 834 .num_channels = ARRAY_SIZE(bma250_channels), 835 .scale_table = bma250_scale_table, 836 .num_scales = ARRAY_SIZE(bma250_scale_table), 837 .bw_table = bma250_bw_table, 838 .num_bw = ARRAY_SIZE(bma250_bw_table), 839 .temp_offset = 48, /* 0 LSB @ 24 degree C */ 840 .int_reset_reg = BMA250_INT_RESET_REG, 841 .int_reset_mask = BMA250_INT_RESET_MASK, 842 .sleep_reg = BMA250_POWER_REG, 843 .sleep_mask = BMA250_SUSPEND_MASK, 844 .bw_reg = BMA250_BW_REG, 845 .bw_mask = BMA250_BW_MASK, 846 .bw_offset = BMA250_BW_OFFSET, 847 .scale_reg = BMA250_RANGE_REG, 848 .scale_mask = BMA250_RANGE_MASK, 849 .power_reg = BMA250_POWER_REG, 850 .power_mask = BMA250_LOWPOWER_MASK, 851 .lowpower_val = 1, 852 .int_enable_reg = BMA250_INT_ENABLE_REG, 853 .int_enable_mask = BMA250_DATA_INTEN_MASK, 854 .softreset_reg = BMA250_RESET_REG, 855 .softreset_val = BMA180_RESET_VAL, 856 .chip_config = bma250_chip_config, 857 .chip_disable = bma250_chip_disable, 858 }, 859 }; 860 861 static irqreturn_t bma180_trigger_handler(int irq, void *p) 862 { 863 struct iio_poll_func *pf = p; 864 struct iio_dev *indio_dev = pf->indio_dev; 865 struct bma180_data *data = iio_priv(indio_dev); 866 s64 time_ns = iio_get_time_ns(indio_dev); 867 int bit, ret, i = 0; 868 struct { 869 s16 chan[4]; 870 aligned_s64 timestamp; 871 } scan = { }; 872 873 mutex_lock(&data->mutex); 874 875 iio_for_each_active_channel(indio_dev, bit) { 876 ret = bma180_get_data_reg(data, bit); 877 if (ret < 0) { 878 mutex_unlock(&data->mutex); 879 goto err; 880 } 881 scan.chan[i++] = ret; 882 } 883 884 mutex_unlock(&data->mutex); 885 886 iio_push_to_buffers_with_ts(indio_dev, &scan, sizeof(scan), time_ns); 887 err: 888 iio_trigger_notify_done(indio_dev->trig); 889 890 return IRQ_HANDLED; 891 } 892 893 static int bma180_data_rdy_trigger_set_state(struct iio_trigger *trig, 894 bool state) 895 { 896 struct iio_dev *indio_dev = iio_trigger_get_drvdata(trig); 897 struct bma180_data *data = iio_priv(indio_dev); 898 899 return bma180_set_new_data_intr_state(data, state); 900 } 901 902 static void bma180_trig_reen(struct iio_trigger *trig) 903 { 904 struct iio_dev *indio_dev = iio_trigger_get_drvdata(trig); 905 struct bma180_data *data = iio_priv(indio_dev); 906 int ret; 907 908 ret = bma180_reset_intr(data); 909 if (ret) 910 dev_err(&data->client->dev, "failed to reset interrupt\n"); 911 } 912 913 static const struct iio_trigger_ops bma180_trigger_ops = { 914 .set_trigger_state = bma180_data_rdy_trigger_set_state, 915 .reenable = bma180_trig_reen, 916 }; 917 918 static int bma180_probe(struct i2c_client *client) 919 { 920 const struct i2c_device_id *id = i2c_client_get_device_id(client); 921 struct device *dev = &client->dev; 922 struct bma180_data *data; 923 struct iio_dev *indio_dev; 924 int ret; 925 926 indio_dev = devm_iio_device_alloc(dev, sizeof(*data)); 927 if (!indio_dev) 928 return -ENOMEM; 929 930 data = iio_priv(indio_dev); 931 i2c_set_clientdata(client, indio_dev); 932 data->client = client; 933 data->part_info = i2c_get_match_data(client); 934 935 ret = iio_read_mount_matrix(dev, &data->orientation); 936 if (ret) 937 return ret; 938 939 data->vdd_supply = devm_regulator_get(dev, "vdd"); 940 if (IS_ERR(data->vdd_supply)) 941 return dev_err_probe(dev, PTR_ERR(data->vdd_supply), 942 "Failed to get vdd regulator\n"); 943 944 data->vddio_supply = devm_regulator_get(dev, "vddio"); 945 if (IS_ERR(data->vddio_supply)) 946 return dev_err_probe(dev, PTR_ERR(data->vddio_supply), 947 "Failed to get vddio regulator\n"); 948 949 /* Typical voltage 2.4V these are min and max */ 950 ret = regulator_set_voltage(data->vdd_supply, 1620000, 3600000); 951 if (ret) 952 return ret; 953 ret = regulator_set_voltage(data->vddio_supply, 1200000, 3600000); 954 if (ret) 955 return ret; 956 ret = regulator_enable(data->vdd_supply); 957 if (ret) { 958 dev_err(dev, "Failed to enable vdd regulator: %d\n", ret); 959 return ret; 960 } 961 ret = regulator_enable(data->vddio_supply); 962 if (ret) { 963 dev_err(dev, "Failed to enable vddio regulator: %d\n", ret); 964 goto err_disable_vdd; 965 } 966 /* Wait to make sure we started up properly (3 ms at least) */ 967 usleep_range(3000, 5000); 968 969 ret = data->part_info->chip_config(data); 970 if (ret < 0) 971 goto err_chip_disable; 972 973 mutex_init(&data->mutex); 974 indio_dev->channels = data->part_info->channels; 975 indio_dev->num_channels = data->part_info->num_channels; 976 indio_dev->name = id->name; 977 indio_dev->modes = INDIO_DIRECT_MODE; 978 indio_dev->info = &bma180_info; 979 980 if (client->irq > 0) { 981 data->trig = iio_trigger_alloc(dev, "%s-dev%d", indio_dev->name, 982 iio_device_id(indio_dev)); 983 if (!data->trig) { 984 ret = -ENOMEM; 985 goto err_chip_disable; 986 } 987 988 ret = devm_request_irq(dev, client->irq, 989 iio_trigger_generic_data_rdy_poll, IRQF_TRIGGER_RISING, 990 "bma180_event", data->trig); 991 if (ret) { 992 dev_err(dev, "unable to request IRQ\n"); 993 goto err_trigger_free; 994 } 995 996 data->trig->ops = &bma180_trigger_ops; 997 iio_trigger_set_drvdata(data->trig, indio_dev); 998 999 ret = iio_trigger_register(data->trig); 1000 if (ret) 1001 goto err_trigger_free; 1002 1003 indio_dev->trig = iio_trigger_get(data->trig); 1004 } 1005 1006 ret = iio_triggered_buffer_setup(indio_dev, NULL, 1007 bma180_trigger_handler, NULL); 1008 if (ret < 0) { 1009 dev_err(dev, "unable to setup iio triggered buffer\n"); 1010 goto err_trigger_unregister; 1011 } 1012 1013 ret = iio_device_register(indio_dev); 1014 if (ret < 0) { 1015 dev_err(dev, "unable to register iio device\n"); 1016 goto err_buffer_cleanup; 1017 } 1018 1019 return 0; 1020 1021 err_buffer_cleanup: 1022 iio_triggered_buffer_cleanup(indio_dev); 1023 err_trigger_unregister: 1024 if (data->trig) 1025 iio_trigger_unregister(data->trig); 1026 err_trigger_free: 1027 iio_trigger_free(data->trig); 1028 err_chip_disable: 1029 data->part_info->chip_disable(data); 1030 regulator_disable(data->vddio_supply); 1031 err_disable_vdd: 1032 regulator_disable(data->vdd_supply); 1033 1034 return ret; 1035 } 1036 1037 static void bma180_remove(struct i2c_client *client) 1038 { 1039 struct iio_dev *indio_dev = i2c_get_clientdata(client); 1040 struct bma180_data *data = iio_priv(indio_dev); 1041 1042 iio_device_unregister(indio_dev); 1043 iio_triggered_buffer_cleanup(indio_dev); 1044 if (data->trig) { 1045 iio_trigger_unregister(data->trig); 1046 iio_trigger_free(data->trig); 1047 } 1048 1049 mutex_lock(&data->mutex); 1050 data->part_info->chip_disable(data); 1051 mutex_unlock(&data->mutex); 1052 regulator_disable(data->vddio_supply); 1053 regulator_disable(data->vdd_supply); 1054 } 1055 1056 static int bma180_suspend(struct device *dev) 1057 { 1058 struct iio_dev *indio_dev = i2c_get_clientdata(to_i2c_client(dev)); 1059 struct bma180_data *data = iio_priv(indio_dev); 1060 int ret; 1061 1062 mutex_lock(&data->mutex); 1063 ret = bma180_set_sleep_state(data, true); 1064 mutex_unlock(&data->mutex); 1065 1066 return ret; 1067 } 1068 1069 static int bma180_resume(struct device *dev) 1070 { 1071 struct iio_dev *indio_dev = i2c_get_clientdata(to_i2c_client(dev)); 1072 struct bma180_data *data = iio_priv(indio_dev); 1073 int ret; 1074 1075 mutex_lock(&data->mutex); 1076 ret = bma180_set_sleep_state(data, false); 1077 mutex_unlock(&data->mutex); 1078 1079 return ret; 1080 } 1081 1082 static DEFINE_SIMPLE_DEV_PM_OPS(bma180_pm_ops, bma180_suspend, bma180_resume); 1083 1084 static const struct i2c_device_id bma180_ids[] = { 1085 { "bma023", (kernel_ulong_t)&bma180_part_info[BMA023] }, 1086 { "bma150", (kernel_ulong_t)&bma180_part_info[BMA150] }, 1087 { "bma180", (kernel_ulong_t)&bma180_part_info[BMA180] }, 1088 { "bma250", (kernel_ulong_t)&bma180_part_info[BMA250] }, 1089 { "smb380", (kernel_ulong_t)&bma180_part_info[BMA150] }, 1090 { } 1091 }; 1092 1093 MODULE_DEVICE_TABLE(i2c, bma180_ids); 1094 1095 static const struct of_device_id bma180_of_match[] = { 1096 { 1097 .compatible = "bosch,bma023", 1098 .data = &bma180_part_info[BMA023] 1099 }, 1100 { 1101 .compatible = "bosch,bma150", 1102 .data = &bma180_part_info[BMA150] 1103 }, 1104 { 1105 .compatible = "bosch,bma180", 1106 .data = &bma180_part_info[BMA180] 1107 }, 1108 { 1109 .compatible = "bosch,bma250", 1110 .data = &bma180_part_info[BMA250] 1111 }, 1112 { 1113 .compatible = "bosch,smb380", 1114 .data = &bma180_part_info[BMA150] 1115 }, 1116 { } 1117 }; 1118 MODULE_DEVICE_TABLE(of, bma180_of_match); 1119 1120 static struct i2c_driver bma180_driver = { 1121 .driver = { 1122 .name = "bma180", 1123 .pm = pm_sleep_ptr(&bma180_pm_ops), 1124 .of_match_table = bma180_of_match, 1125 }, 1126 .probe = bma180_probe, 1127 .remove = bma180_remove, 1128 .id_table = bma180_ids, 1129 }; 1130 1131 module_i2c_driver(bma180_driver); 1132 1133 MODULE_AUTHOR("Kravchenko Oleksandr <x0199363@ti.com>"); 1134 MODULE_AUTHOR("Texas Instruments, Inc."); 1135 MODULE_DESCRIPTION("Bosch BMA023/BMA1x0/BMA250 triaxial acceleration sensor"); 1136 MODULE_LICENSE("GPL"); 1137