1/* 2* Copyright (C) 2012 Invensense, Inc. 3* 4* This software is licensed under the terms of the GNU General Public 5* License version 2, as published by the Free Software Foundation, and 6* may be copied, distributed, and modified under those terms. 7* 8* This program is distributed in the hope that it will be useful, 9* but WITHOUT ANY WARRANTY; without even the implied warranty of 10* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11* GNU General Public License for more details. 12*/ 13 14#include <linux/module.h> 15#include <linux/slab.h> 16#include <linux/i2c.h> 17#include <linux/err.h> 18#include <linux/delay.h> 19#include <linux/sysfs.h> 20#include <linux/jiffies.h> 21#include <linux/irq.h> 22#include <linux/interrupt.h> 23#include <linux/kfifo.h> 24#include <linux/spinlock.h> 25#include <linux/iio/iio.h> 26#include <linux/i2c-mux.h> 27#include <linux/acpi.h> 28#include "inv_mpu_iio.h" 29 30/* 31 * this is the gyro scale translated from dynamic range plus/minus 32 * {250, 500, 1000, 2000} to rad/s 33 */ 34static const int gyro_scale_6050[] = {133090, 266181, 532362, 1064724}; 35 36/* 37 * this is the accel scale translated from dynamic range plus/minus 38 * {2, 4, 8, 16} to m/s^2 39 */ 40static const int accel_scale[] = {598, 1196, 2392, 4785}; 41 42static const struct inv_mpu6050_reg_map reg_set_6050 = { 43 .sample_rate_div = INV_MPU6050_REG_SAMPLE_RATE_DIV, 44 .lpf = INV_MPU6050_REG_CONFIG, 45 .user_ctrl = INV_MPU6050_REG_USER_CTRL, 46 .fifo_en = INV_MPU6050_REG_FIFO_EN, 47 .gyro_config = INV_MPU6050_REG_GYRO_CONFIG, 48 .accl_config = INV_MPU6050_REG_ACCEL_CONFIG, 49 .fifo_count_h = INV_MPU6050_REG_FIFO_COUNT_H, 50 .fifo_r_w = INV_MPU6050_REG_FIFO_R_W, 51 .raw_gyro = INV_MPU6050_REG_RAW_GYRO, 52 .raw_accl = INV_MPU6050_REG_RAW_ACCEL, 53 .temperature = INV_MPU6050_REG_TEMPERATURE, 54 .int_enable = INV_MPU6050_REG_INT_ENABLE, 55 .pwr_mgmt_1 = INV_MPU6050_REG_PWR_MGMT_1, 56 .pwr_mgmt_2 = INV_MPU6050_REG_PWR_MGMT_2, 57 .int_pin_cfg = INV_MPU6050_REG_INT_PIN_CFG, 58}; 59 60static const struct inv_mpu6050_chip_config chip_config_6050 = { 61 .fsr = INV_MPU6050_FSR_2000DPS, 62 .lpf = INV_MPU6050_FILTER_20HZ, 63 .fifo_rate = INV_MPU6050_INIT_FIFO_RATE, 64 .gyro_fifo_enable = false, 65 .accl_fifo_enable = false, 66 .accl_fs = INV_MPU6050_FS_02G, 67}; 68 69static const struct inv_mpu6050_hw hw_info[INV_NUM_PARTS] = { 70 { 71 .num_reg = 117, 72 .name = "MPU6050", 73 .reg = ®_set_6050, 74 .config = &chip_config_6050, 75 }, 76}; 77 78int inv_mpu6050_write_reg(struct inv_mpu6050_state *st, int reg, u8 d) 79{ 80 return i2c_smbus_write_i2c_block_data(st->client, reg, 1, &d); 81} 82 83/* 84 * The i2c read/write needs to happen in unlocked mode. As the parent 85 * adapter is common. If we use locked versions, it will fail as 86 * the mux adapter will lock the parent i2c adapter, while calling 87 * select/deselect functions. 88 */ 89static int inv_mpu6050_write_reg_unlocked(struct inv_mpu6050_state *st, 90 u8 reg, u8 d) 91{ 92 int ret; 93 u8 buf[2]; 94 struct i2c_msg msg[1] = { 95 { 96 .addr = st->client->addr, 97 .flags = 0, 98 .len = sizeof(buf), 99 .buf = buf, 100 } 101 }; 102 103 buf[0] = reg; 104 buf[1] = d; 105 ret = __i2c_transfer(st->client->adapter, msg, 1); 106 if (ret != 1) 107 return ret; 108 109 return 0; 110} 111 112static int inv_mpu6050_select_bypass(struct i2c_adapter *adap, void *mux_priv, 113 u32 chan_id) 114{ 115 struct iio_dev *indio_dev = mux_priv; 116 struct inv_mpu6050_state *st = iio_priv(indio_dev); 117 int ret = 0; 118 119 /* Use the same mutex which was used everywhere to protect power-op */ 120 mutex_lock(&indio_dev->mlock); 121 if (!st->powerup_count) { 122 ret = inv_mpu6050_write_reg_unlocked(st, st->reg->pwr_mgmt_1, 123 0); 124 if (ret) 125 goto write_error; 126 127 msleep(INV_MPU6050_REG_UP_TIME); 128 } 129 if (!ret) { 130 st->powerup_count++; 131 ret = inv_mpu6050_write_reg_unlocked(st, st->reg->int_pin_cfg, 132 st->client->irq | 133 INV_MPU6050_BIT_BYPASS_EN); 134 } 135write_error: 136 mutex_unlock(&indio_dev->mlock); 137 138 return ret; 139} 140 141static int inv_mpu6050_deselect_bypass(struct i2c_adapter *adap, 142 void *mux_priv, u32 chan_id) 143{ 144 struct iio_dev *indio_dev = mux_priv; 145 struct inv_mpu6050_state *st = iio_priv(indio_dev); 146 147 mutex_lock(&indio_dev->mlock); 148 /* It doesn't really mattter, if any of the calls fails */ 149 inv_mpu6050_write_reg_unlocked(st, st->reg->int_pin_cfg, 150 st->client->irq); 151 st->powerup_count--; 152 if (!st->powerup_count) 153 inv_mpu6050_write_reg_unlocked(st, st->reg->pwr_mgmt_1, 154 INV_MPU6050_BIT_SLEEP); 155 mutex_unlock(&indio_dev->mlock); 156 157 return 0; 158} 159 160int inv_mpu6050_switch_engine(struct inv_mpu6050_state *st, bool en, u32 mask) 161{ 162 u8 d, mgmt_1; 163 int result; 164 165 /* switch clock needs to be careful. Only when gyro is on, can 166 clock source be switched to gyro. Otherwise, it must be set to 167 internal clock */ 168 if (INV_MPU6050_BIT_PWR_GYRO_STBY == mask) { 169 result = i2c_smbus_read_i2c_block_data(st->client, 170 st->reg->pwr_mgmt_1, 1, &mgmt_1); 171 if (result != 1) 172 return result; 173 174 mgmt_1 &= ~INV_MPU6050_BIT_CLK_MASK; 175 } 176 177 if ((INV_MPU6050_BIT_PWR_GYRO_STBY == mask) && (!en)) { 178 /* turning off gyro requires switch to internal clock first. 179 Then turn off gyro engine */ 180 mgmt_1 |= INV_CLK_INTERNAL; 181 result = inv_mpu6050_write_reg(st, st->reg->pwr_mgmt_1, mgmt_1); 182 if (result) 183 return result; 184 } 185 186 result = i2c_smbus_read_i2c_block_data(st->client, 187 st->reg->pwr_mgmt_2, 1, &d); 188 if (result != 1) 189 return result; 190 if (en) 191 d &= ~mask; 192 else 193 d |= mask; 194 result = inv_mpu6050_write_reg(st, st->reg->pwr_mgmt_2, d); 195 if (result) 196 return result; 197 198 if (en) { 199 /* Wait for output stabilize */ 200 msleep(INV_MPU6050_TEMP_UP_TIME); 201 if (INV_MPU6050_BIT_PWR_GYRO_STBY == mask) { 202 /* switch internal clock to PLL */ 203 mgmt_1 |= INV_CLK_PLL; 204 result = inv_mpu6050_write_reg(st, 205 st->reg->pwr_mgmt_1, mgmt_1); 206 if (result) 207 return result; 208 } 209 } 210 211 return 0; 212} 213 214int inv_mpu6050_set_power_itg(struct inv_mpu6050_state *st, bool power_on) 215{ 216 int result = 0; 217 218 if (power_on) { 219 /* Already under indio-dev->mlock mutex */ 220 if (!st->powerup_count) 221 result = inv_mpu6050_write_reg(st, st->reg->pwr_mgmt_1, 222 0); 223 if (!result) 224 st->powerup_count++; 225 } else { 226 st->powerup_count--; 227 if (!st->powerup_count) 228 result = inv_mpu6050_write_reg(st, st->reg->pwr_mgmt_1, 229 INV_MPU6050_BIT_SLEEP); 230 } 231 232 if (result) 233 return result; 234 235 if (power_on) 236 msleep(INV_MPU6050_REG_UP_TIME); 237 238 return 0; 239} 240 241/** 242 * inv_mpu6050_init_config() - Initialize hardware, disable FIFO. 243 * 244 * Initial configuration: 245 * FSR: ± 2000DPS 246 * DLPF: 20Hz 247 * FIFO rate: 50Hz 248 * Clock source: Gyro PLL 249 */ 250static int inv_mpu6050_init_config(struct iio_dev *indio_dev) 251{ 252 int result; 253 u8 d; 254 struct inv_mpu6050_state *st = iio_priv(indio_dev); 255 256 result = inv_mpu6050_set_power_itg(st, true); 257 if (result) 258 return result; 259 d = (INV_MPU6050_FSR_2000DPS << INV_MPU6050_GYRO_CONFIG_FSR_SHIFT); 260 result = inv_mpu6050_write_reg(st, st->reg->gyro_config, d); 261 if (result) 262 return result; 263 264 d = INV_MPU6050_FILTER_20HZ; 265 result = inv_mpu6050_write_reg(st, st->reg->lpf, d); 266 if (result) 267 return result; 268 269 d = INV_MPU6050_ONE_K_HZ / INV_MPU6050_INIT_FIFO_RATE - 1; 270 result = inv_mpu6050_write_reg(st, st->reg->sample_rate_div, d); 271 if (result) 272 return result; 273 274 d = (INV_MPU6050_FS_02G << INV_MPU6050_ACCL_CONFIG_FSR_SHIFT); 275 result = inv_mpu6050_write_reg(st, st->reg->accl_config, d); 276 if (result) 277 return result; 278 279 memcpy(&st->chip_config, hw_info[st->chip_type].config, 280 sizeof(struct inv_mpu6050_chip_config)); 281 result = inv_mpu6050_set_power_itg(st, false); 282 283 return result; 284} 285 286static int inv_mpu6050_sensor_show(struct inv_mpu6050_state *st, int reg, 287 int axis, int *val) 288{ 289 int ind, result; 290 __be16 d; 291 292 ind = (axis - IIO_MOD_X) * 2; 293 result = i2c_smbus_read_i2c_block_data(st->client, reg + ind, 2, 294 (u8 *)&d); 295 if (result != 2) 296 return -EINVAL; 297 *val = (short)be16_to_cpup(&d); 298 299 return IIO_VAL_INT; 300} 301 302static int inv_mpu6050_read_raw(struct iio_dev *indio_dev, 303 struct iio_chan_spec const *chan, 304 int *val, 305 int *val2, 306 long mask) { 307 struct inv_mpu6050_state *st = iio_priv(indio_dev); 308 309 switch (mask) { 310 case IIO_CHAN_INFO_RAW: 311 { 312 int ret, result; 313 314 ret = IIO_VAL_INT; 315 result = 0; 316 mutex_lock(&indio_dev->mlock); 317 if (!st->chip_config.enable) { 318 result = inv_mpu6050_set_power_itg(st, true); 319 if (result) 320 goto error_read_raw; 321 } 322 /* when enable is on, power is already on */ 323 switch (chan->type) { 324 case IIO_ANGL_VEL: 325 if (!st->chip_config.gyro_fifo_enable || 326 !st->chip_config.enable) { 327 result = inv_mpu6050_switch_engine(st, true, 328 INV_MPU6050_BIT_PWR_GYRO_STBY); 329 if (result) 330 goto error_read_raw; 331 } 332 ret = inv_mpu6050_sensor_show(st, st->reg->raw_gyro, 333 chan->channel2, val); 334 if (!st->chip_config.gyro_fifo_enable || 335 !st->chip_config.enable) { 336 result = inv_mpu6050_switch_engine(st, false, 337 INV_MPU6050_BIT_PWR_GYRO_STBY); 338 if (result) 339 goto error_read_raw; 340 } 341 break; 342 case IIO_ACCEL: 343 if (!st->chip_config.accl_fifo_enable || 344 !st->chip_config.enable) { 345 result = inv_mpu6050_switch_engine(st, true, 346 INV_MPU6050_BIT_PWR_ACCL_STBY); 347 if (result) 348 goto error_read_raw; 349 } 350 ret = inv_mpu6050_sensor_show(st, st->reg->raw_accl, 351 chan->channel2, val); 352 if (!st->chip_config.accl_fifo_enable || 353 !st->chip_config.enable) { 354 result = inv_mpu6050_switch_engine(st, false, 355 INV_MPU6050_BIT_PWR_ACCL_STBY); 356 if (result) 357 goto error_read_raw; 358 } 359 break; 360 case IIO_TEMP: 361 /* wait for stablization */ 362 msleep(INV_MPU6050_SENSOR_UP_TIME); 363 inv_mpu6050_sensor_show(st, st->reg->temperature, 364 IIO_MOD_X, val); 365 break; 366 default: 367 ret = -EINVAL; 368 break; 369 } 370error_read_raw: 371 if (!st->chip_config.enable) 372 result |= inv_mpu6050_set_power_itg(st, false); 373 mutex_unlock(&indio_dev->mlock); 374 if (result) 375 return result; 376 377 return ret; 378 } 379 case IIO_CHAN_INFO_SCALE: 380 switch (chan->type) { 381 case IIO_ANGL_VEL: 382 *val = 0; 383 *val2 = gyro_scale_6050[st->chip_config.fsr]; 384 385 return IIO_VAL_INT_PLUS_NANO; 386 case IIO_ACCEL: 387 *val = 0; 388 *val2 = accel_scale[st->chip_config.accl_fs]; 389 390 return IIO_VAL_INT_PLUS_MICRO; 391 case IIO_TEMP: 392 *val = 0; 393 *val2 = INV_MPU6050_TEMP_SCALE; 394 395 return IIO_VAL_INT_PLUS_MICRO; 396 default: 397 return -EINVAL; 398 } 399 case IIO_CHAN_INFO_OFFSET: 400 switch (chan->type) { 401 case IIO_TEMP: 402 *val = INV_MPU6050_TEMP_OFFSET; 403 404 return IIO_VAL_INT; 405 default: 406 return -EINVAL; 407 } 408 default: 409 return -EINVAL; 410 } 411} 412 413static int inv_mpu6050_write_gyro_scale(struct inv_mpu6050_state *st, int val) 414{ 415 int result, i; 416 u8 d; 417 418 for (i = 0; i < ARRAY_SIZE(gyro_scale_6050); ++i) { 419 if (gyro_scale_6050[i] == val) { 420 d = (i << INV_MPU6050_GYRO_CONFIG_FSR_SHIFT); 421 result = inv_mpu6050_write_reg(st, 422 st->reg->gyro_config, d); 423 if (result) 424 return result; 425 426 st->chip_config.fsr = i; 427 return 0; 428 } 429 } 430 431 return -EINVAL; 432} 433 434static int inv_write_raw_get_fmt(struct iio_dev *indio_dev, 435 struct iio_chan_spec const *chan, long mask) 436{ 437 switch (mask) { 438 case IIO_CHAN_INFO_SCALE: 439 switch (chan->type) { 440 case IIO_ANGL_VEL: 441 return IIO_VAL_INT_PLUS_NANO; 442 default: 443 return IIO_VAL_INT_PLUS_MICRO; 444 } 445 default: 446 return IIO_VAL_INT_PLUS_MICRO; 447 } 448 449 return -EINVAL; 450} 451static int inv_mpu6050_write_accel_scale(struct inv_mpu6050_state *st, int val) 452{ 453 int result, i; 454 u8 d; 455 456 for (i = 0; i < ARRAY_SIZE(accel_scale); ++i) { 457 if (accel_scale[i] == val) { 458 d = (i << INV_MPU6050_ACCL_CONFIG_FSR_SHIFT); 459 result = inv_mpu6050_write_reg(st, 460 st->reg->accl_config, d); 461 if (result) 462 return result; 463 464 st->chip_config.accl_fs = i; 465 return 0; 466 } 467 } 468 469 return -EINVAL; 470} 471 472static int inv_mpu6050_write_raw(struct iio_dev *indio_dev, 473 struct iio_chan_spec const *chan, 474 int val, 475 int val2, 476 long mask) { 477 struct inv_mpu6050_state *st = iio_priv(indio_dev); 478 int result; 479 480 mutex_lock(&indio_dev->mlock); 481 /* we should only update scale when the chip is disabled, i.e., 482 not running */ 483 if (st->chip_config.enable) { 484 result = -EBUSY; 485 goto error_write_raw; 486 } 487 result = inv_mpu6050_set_power_itg(st, true); 488 if (result) 489 goto error_write_raw; 490 491 switch (mask) { 492 case IIO_CHAN_INFO_SCALE: 493 switch (chan->type) { 494 case IIO_ANGL_VEL: 495 result = inv_mpu6050_write_gyro_scale(st, val2); 496 break; 497 case IIO_ACCEL: 498 result = inv_mpu6050_write_accel_scale(st, val2); 499 break; 500 default: 501 result = -EINVAL; 502 break; 503 } 504 break; 505 default: 506 result = -EINVAL; 507 break; 508 } 509 510error_write_raw: 511 result |= inv_mpu6050_set_power_itg(st, false); 512 mutex_unlock(&indio_dev->mlock); 513 514 return result; 515} 516 517/** 518 * inv_mpu6050_set_lpf() - set low pass filer based on fifo rate. 519 * 520 * Based on the Nyquist principle, the sampling rate must 521 * exceed twice of the bandwidth of the signal, or there 522 * would be alising. This function basically search for the 523 * correct low pass parameters based on the fifo rate, e.g, 524 * sampling frequency. 525 */ 526static int inv_mpu6050_set_lpf(struct inv_mpu6050_state *st, int rate) 527{ 528 const int hz[] = {188, 98, 42, 20, 10, 5}; 529 const int d[] = {INV_MPU6050_FILTER_188HZ, INV_MPU6050_FILTER_98HZ, 530 INV_MPU6050_FILTER_42HZ, INV_MPU6050_FILTER_20HZ, 531 INV_MPU6050_FILTER_10HZ, INV_MPU6050_FILTER_5HZ}; 532 int i, h, result; 533 u8 data; 534 535 h = (rate >> 1); 536 i = 0; 537 while ((h < hz[i]) && (i < ARRAY_SIZE(d) - 1)) 538 i++; 539 data = d[i]; 540 result = inv_mpu6050_write_reg(st, st->reg->lpf, data); 541 if (result) 542 return result; 543 st->chip_config.lpf = data; 544 545 return 0; 546} 547 548/** 549 * inv_mpu6050_fifo_rate_store() - Set fifo rate. 550 */ 551static ssize_t inv_mpu6050_fifo_rate_store(struct device *dev, 552 struct device_attribute *attr, const char *buf, size_t count) 553{ 554 s32 fifo_rate; 555 u8 d; 556 int result; 557 struct iio_dev *indio_dev = dev_to_iio_dev(dev); 558 struct inv_mpu6050_state *st = iio_priv(indio_dev); 559 560 if (kstrtoint(buf, 10, &fifo_rate)) 561 return -EINVAL; 562 if (fifo_rate < INV_MPU6050_MIN_FIFO_RATE || 563 fifo_rate > INV_MPU6050_MAX_FIFO_RATE) 564 return -EINVAL; 565 if (fifo_rate == st->chip_config.fifo_rate) 566 return count; 567 568 mutex_lock(&indio_dev->mlock); 569 if (st->chip_config.enable) { 570 result = -EBUSY; 571 goto fifo_rate_fail; 572 } 573 result = inv_mpu6050_set_power_itg(st, true); 574 if (result) 575 goto fifo_rate_fail; 576 577 d = INV_MPU6050_ONE_K_HZ / fifo_rate - 1; 578 result = inv_mpu6050_write_reg(st, st->reg->sample_rate_div, d); 579 if (result) 580 goto fifo_rate_fail; 581 st->chip_config.fifo_rate = fifo_rate; 582 583 result = inv_mpu6050_set_lpf(st, fifo_rate); 584 if (result) 585 goto fifo_rate_fail; 586 587fifo_rate_fail: 588 result |= inv_mpu6050_set_power_itg(st, false); 589 mutex_unlock(&indio_dev->mlock); 590 if (result) 591 return result; 592 593 return count; 594} 595 596/** 597 * inv_fifo_rate_show() - Get the current sampling rate. 598 */ 599static ssize_t inv_fifo_rate_show(struct device *dev, 600 struct device_attribute *attr, char *buf) 601{ 602 struct inv_mpu6050_state *st = iio_priv(dev_to_iio_dev(dev)); 603 604 return sprintf(buf, "%d\n", st->chip_config.fifo_rate); 605} 606 607/** 608 * inv_attr_show() - calling this function will show current 609 * parameters. 610 */ 611static ssize_t inv_attr_show(struct device *dev, 612 struct device_attribute *attr, char *buf) 613{ 614 struct inv_mpu6050_state *st = iio_priv(dev_to_iio_dev(dev)); 615 struct iio_dev_attr *this_attr = to_iio_dev_attr(attr); 616 s8 *m; 617 618 switch (this_attr->address) { 619 /* In MPU6050, the two matrix are the same because gyro and accel 620 are integrated in one chip */ 621 case ATTR_GYRO_MATRIX: 622 case ATTR_ACCL_MATRIX: 623 m = st->plat_data.orientation; 624 625 return sprintf(buf, "%d, %d, %d; %d, %d, %d; %d, %d, %d\n", 626 m[0], m[1], m[2], m[3], m[4], m[5], m[6], m[7], m[8]); 627 default: 628 return -EINVAL; 629 } 630} 631 632/** 633 * inv_mpu6050_validate_trigger() - validate_trigger callback for invensense 634 * MPU6050 device. 635 * @indio_dev: The IIO device 636 * @trig: The new trigger 637 * 638 * Returns: 0 if the 'trig' matches the trigger registered by the MPU6050 639 * device, -EINVAL otherwise. 640 */ 641static int inv_mpu6050_validate_trigger(struct iio_dev *indio_dev, 642 struct iio_trigger *trig) 643{ 644 struct inv_mpu6050_state *st = iio_priv(indio_dev); 645 646 if (st->trig != trig) 647 return -EINVAL; 648 649 return 0; 650} 651 652#define INV_MPU6050_CHAN(_type, _channel2, _index) \ 653 { \ 654 .type = _type, \ 655 .modified = 1, \ 656 .channel2 = _channel2, \ 657 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE), \ 658 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), \ 659 .scan_index = _index, \ 660 .scan_type = { \ 661 .sign = 's', \ 662 .realbits = 16, \ 663 .storagebits = 16, \ 664 .shift = 0 , \ 665 .endianness = IIO_BE, \ 666 }, \ 667 } 668 669static const struct iio_chan_spec inv_mpu_channels[] = { 670 IIO_CHAN_SOFT_TIMESTAMP(INV_MPU6050_SCAN_TIMESTAMP), 671 /* 672 * Note that temperature should only be via polled reading only, 673 * not the final scan elements output. 674 */ 675 { 676 .type = IIO_TEMP, 677 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) 678 | BIT(IIO_CHAN_INFO_OFFSET) 679 | BIT(IIO_CHAN_INFO_SCALE), 680 .scan_index = -1, 681 }, 682 INV_MPU6050_CHAN(IIO_ANGL_VEL, IIO_MOD_X, INV_MPU6050_SCAN_GYRO_X), 683 INV_MPU6050_CHAN(IIO_ANGL_VEL, IIO_MOD_Y, INV_MPU6050_SCAN_GYRO_Y), 684 INV_MPU6050_CHAN(IIO_ANGL_VEL, IIO_MOD_Z, INV_MPU6050_SCAN_GYRO_Z), 685 686 INV_MPU6050_CHAN(IIO_ACCEL, IIO_MOD_X, INV_MPU6050_SCAN_ACCL_X), 687 INV_MPU6050_CHAN(IIO_ACCEL, IIO_MOD_Y, INV_MPU6050_SCAN_ACCL_Y), 688 INV_MPU6050_CHAN(IIO_ACCEL, IIO_MOD_Z, INV_MPU6050_SCAN_ACCL_Z), 689}; 690 691/* constant IIO attribute */ 692static IIO_CONST_ATTR_SAMP_FREQ_AVAIL("10 20 50 100 200 500"); 693static IIO_DEV_ATTR_SAMP_FREQ(S_IRUGO | S_IWUSR, inv_fifo_rate_show, 694 inv_mpu6050_fifo_rate_store); 695static IIO_DEVICE_ATTR(in_gyro_matrix, S_IRUGO, inv_attr_show, NULL, 696 ATTR_GYRO_MATRIX); 697static IIO_DEVICE_ATTR(in_accel_matrix, S_IRUGO, inv_attr_show, NULL, 698 ATTR_ACCL_MATRIX); 699 700static struct attribute *inv_attributes[] = { 701 &iio_dev_attr_in_gyro_matrix.dev_attr.attr, 702 &iio_dev_attr_in_accel_matrix.dev_attr.attr, 703 &iio_dev_attr_sampling_frequency.dev_attr.attr, 704 &iio_const_attr_sampling_frequency_available.dev_attr.attr, 705 NULL, 706}; 707 708static const struct attribute_group inv_attribute_group = { 709 .attrs = inv_attributes 710}; 711 712static const struct iio_info mpu_info = { 713 .driver_module = THIS_MODULE, 714 .read_raw = &inv_mpu6050_read_raw, 715 .write_raw = &inv_mpu6050_write_raw, 716 .write_raw_get_fmt = &inv_write_raw_get_fmt, 717 .attrs = &inv_attribute_group, 718 .validate_trigger = inv_mpu6050_validate_trigger, 719}; 720 721/** 722 * inv_check_and_setup_chip() - check and setup chip. 723 */ 724static int inv_check_and_setup_chip(struct inv_mpu6050_state *st, 725 const struct i2c_device_id *id) 726{ 727 int result; 728 729 st->chip_type = INV_MPU6050; 730 st->hw = &hw_info[st->chip_type]; 731 st->reg = hw_info[st->chip_type].reg; 732 733 /* reset to make sure previous state are not there */ 734 result = inv_mpu6050_write_reg(st, st->reg->pwr_mgmt_1, 735 INV_MPU6050_BIT_H_RESET); 736 if (result) 737 return result; 738 msleep(INV_MPU6050_POWER_UP_TIME); 739 /* toggle power state. After reset, the sleep bit could be on 740 or off depending on the OTP settings. Toggling power would 741 make it in a definite state as well as making the hardware 742 state align with the software state */ 743 result = inv_mpu6050_set_power_itg(st, false); 744 if (result) 745 return result; 746 result = inv_mpu6050_set_power_itg(st, true); 747 if (result) 748 return result; 749 750 result = inv_mpu6050_switch_engine(st, false, 751 INV_MPU6050_BIT_PWR_ACCL_STBY); 752 if (result) 753 return result; 754 result = inv_mpu6050_switch_engine(st, false, 755 INV_MPU6050_BIT_PWR_GYRO_STBY); 756 if (result) 757 return result; 758 759 return 0; 760} 761 762/** 763 * inv_mpu_probe() - probe function. 764 * @client: i2c client. 765 * @id: i2c device id. 766 * 767 * Returns 0 on success, a negative error code otherwise. 768 */ 769static int inv_mpu_probe(struct i2c_client *client, 770 const struct i2c_device_id *id) 771{ 772 struct inv_mpu6050_state *st; 773 struct iio_dev *indio_dev; 774 struct inv_mpu6050_platform_data *pdata; 775 int result; 776 777 if (!i2c_check_functionality(client->adapter, 778 I2C_FUNC_SMBUS_I2C_BLOCK)) 779 return -ENOSYS; 780 781 indio_dev = devm_iio_device_alloc(&client->dev, sizeof(*st)); 782 if (!indio_dev) 783 return -ENOMEM; 784 785 st = iio_priv(indio_dev); 786 st->client = client; 787 st->powerup_count = 0; 788 pdata = dev_get_platdata(&client->dev); 789 if (pdata) 790 st->plat_data = *pdata; 791 /* power is turned on inside check chip type*/ 792 result = inv_check_and_setup_chip(st, id); 793 if (result) 794 return result; 795 796 result = inv_mpu6050_init_config(indio_dev); 797 if (result) { 798 dev_err(&client->dev, 799 "Could not initialize device.\n"); 800 return result; 801 } 802 803 i2c_set_clientdata(client, indio_dev); 804 indio_dev->dev.parent = &client->dev; 805 /* id will be NULL when enumerated via ACPI */ 806 if (id) 807 indio_dev->name = (char *)id->name; 808 else 809 indio_dev->name = (char *)dev_name(&client->dev); 810 indio_dev->channels = inv_mpu_channels; 811 indio_dev->num_channels = ARRAY_SIZE(inv_mpu_channels); 812 813 indio_dev->info = &mpu_info; 814 indio_dev->modes = INDIO_BUFFER_TRIGGERED; 815 816 result = iio_triggered_buffer_setup(indio_dev, 817 inv_mpu6050_irq_handler, 818 inv_mpu6050_read_fifo, 819 NULL); 820 if (result) { 821 dev_err(&st->client->dev, "configure buffer fail %d\n", 822 result); 823 return result; 824 } 825 result = inv_mpu6050_probe_trigger(indio_dev); 826 if (result) { 827 dev_err(&st->client->dev, "trigger probe fail %d\n", result); 828 goto out_unreg_ring; 829 } 830 831 INIT_KFIFO(st->timestamps); 832 spin_lock_init(&st->time_stamp_lock); 833 result = iio_device_register(indio_dev); 834 if (result) { 835 dev_err(&st->client->dev, "IIO register fail %d\n", result); 836 goto out_remove_trigger; 837 } 838 839 st->mux_adapter = i2c_add_mux_adapter(client->adapter, 840 &client->dev, 841 indio_dev, 842 0, 0, 0, 843 inv_mpu6050_select_bypass, 844 inv_mpu6050_deselect_bypass); 845 if (!st->mux_adapter) { 846 result = -ENODEV; 847 goto out_unreg_device; 848 } 849 850 result = inv_mpu_acpi_create_mux_client(st); 851 if (result) 852 goto out_del_mux; 853 854 return 0; 855 856out_del_mux: 857 i2c_del_mux_adapter(st->mux_adapter); 858out_unreg_device: 859 iio_device_unregister(indio_dev); 860out_remove_trigger: 861 inv_mpu6050_remove_trigger(st); 862out_unreg_ring: 863 iio_triggered_buffer_cleanup(indio_dev); 864 return result; 865} 866 867static int inv_mpu_remove(struct i2c_client *client) 868{ 869 struct iio_dev *indio_dev = i2c_get_clientdata(client); 870 struct inv_mpu6050_state *st = iio_priv(indio_dev); 871 872 inv_mpu_acpi_delete_mux_client(st); 873 i2c_del_mux_adapter(st->mux_adapter); 874 iio_device_unregister(indio_dev); 875 inv_mpu6050_remove_trigger(st); 876 iio_triggered_buffer_cleanup(indio_dev); 877 878 return 0; 879} 880#ifdef CONFIG_PM_SLEEP 881 882static int inv_mpu_resume(struct device *dev) 883{ 884 return inv_mpu6050_set_power_itg( 885 iio_priv(i2c_get_clientdata(to_i2c_client(dev))), true); 886} 887 888static int inv_mpu_suspend(struct device *dev) 889{ 890 return inv_mpu6050_set_power_itg( 891 iio_priv(i2c_get_clientdata(to_i2c_client(dev))), false); 892} 893static SIMPLE_DEV_PM_OPS(inv_mpu_pmops, inv_mpu_suspend, inv_mpu_resume); 894 895#define INV_MPU6050_PMOPS (&inv_mpu_pmops) 896#else 897#define INV_MPU6050_PMOPS NULL 898#endif /* CONFIG_PM_SLEEP */ 899 900/* 901 * device id table is used to identify what device can be 902 * supported by this driver 903 */ 904static const struct i2c_device_id inv_mpu_id[] = { 905 {"mpu6050", INV_MPU6050}, 906 {"mpu6500", INV_MPU6500}, 907 {} 908}; 909 910MODULE_DEVICE_TABLE(i2c, inv_mpu_id); 911 912static const struct acpi_device_id inv_acpi_match[] = { 913 {"INVN6500", 0}, 914 { }, 915}; 916 917MODULE_DEVICE_TABLE(acpi, inv_acpi_match); 918 919static struct i2c_driver inv_mpu_driver = { 920 .probe = inv_mpu_probe, 921 .remove = inv_mpu_remove, 922 .id_table = inv_mpu_id, 923 .driver = { 924 .owner = THIS_MODULE, 925 .name = "inv-mpu6050", 926 .pm = INV_MPU6050_PMOPS, 927 .acpi_match_table = ACPI_PTR(inv_acpi_match), 928 }, 929}; 930 931module_i2c_driver(inv_mpu_driver); 932 933MODULE_AUTHOR("Invensense Corporation"); 934MODULE_DESCRIPTION("Invensense device MPU6050 driver"); 935MODULE_LICENSE("GPL"); 936