linux/drivers/iio/gyro/bmg160_core.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0-only
   2/*
   3 * BMG160 Gyro Sensor driver
   4 * Copyright (c) 2014, Intel Corporation.
   5 */
   6
   7#include <linux/module.h>
   8#include <linux/interrupt.h>
   9#include <linux/delay.h>
  10#include <linux/slab.h>
  11#include <linux/acpi.h>
  12#include <linux/pm.h>
  13#include <linux/pm_runtime.h>
  14#include <linux/iio/iio.h>
  15#include <linux/iio/sysfs.h>
  16#include <linux/iio/buffer.h>
  17#include <linux/iio/trigger.h>
  18#include <linux/iio/events.h>
  19#include <linux/iio/trigger_consumer.h>
  20#include <linux/iio/triggered_buffer.h>
  21#include <linux/regmap.h>
  22#include <linux/regulator/consumer.h>
  23#include "bmg160.h"
  24
  25#define BMG160_IRQ_NAME         "bmg160_event"
  26
  27#define BMG160_REG_CHIP_ID              0x00
  28#define BMG160_CHIP_ID_VAL              0x0F
  29
  30#define BMG160_REG_PMU_LPW              0x11
  31#define BMG160_MODE_NORMAL              0x00
  32#define BMG160_MODE_DEEP_SUSPEND        0x20
  33#define BMG160_MODE_SUSPEND             0x80
  34
  35#define BMG160_REG_RANGE                0x0F
  36
  37#define BMG160_RANGE_2000DPS            0
  38#define BMG160_RANGE_1000DPS            1
  39#define BMG160_RANGE_500DPS             2
  40#define BMG160_RANGE_250DPS             3
  41#define BMG160_RANGE_125DPS             4
  42
  43#define BMG160_REG_PMU_BW               0x10
  44#define BMG160_NO_FILTER                0
  45#define BMG160_DEF_BW                   100
  46#define BMG160_REG_PMU_BW_RES           BIT(7)
  47
  48#define BMG160_GYRO_REG_RESET           0x14
  49#define BMG160_GYRO_RESET_VAL           0xb6
  50
  51#define BMG160_REG_INT_MAP_0            0x17
  52#define BMG160_INT_MAP_0_BIT_ANY        BIT(1)
  53
  54#define BMG160_REG_INT_MAP_1            0x18
  55#define BMG160_INT_MAP_1_BIT_NEW_DATA   BIT(0)
  56
  57#define BMG160_REG_INT_RST_LATCH        0x21
  58#define BMG160_INT_MODE_LATCH_RESET     0x80
  59#define BMG160_INT_MODE_LATCH_INT       0x0F
  60#define BMG160_INT_MODE_NON_LATCH_INT   0x00
  61
  62#define BMG160_REG_INT_EN_0             0x15
  63#define BMG160_DATA_ENABLE_INT          BIT(7)
  64
  65#define BMG160_REG_INT_EN_1             0x16
  66#define BMG160_INT1_BIT_OD              BIT(1)
  67
  68#define BMG160_REG_XOUT_L               0x02
  69#define BMG160_AXIS_TO_REG(axis)        (BMG160_REG_XOUT_L + (axis * 2))
  70
  71#define BMG160_REG_SLOPE_THRES          0x1B
  72#define BMG160_SLOPE_THRES_MASK 0x0F
  73
  74#define BMG160_REG_MOTION_INTR          0x1C
  75#define BMG160_INT_MOTION_X             BIT(0)
  76#define BMG160_INT_MOTION_Y             BIT(1)
  77#define BMG160_INT_MOTION_Z             BIT(2)
  78#define BMG160_ANY_DUR_MASK             0x30
  79#define BMG160_ANY_DUR_SHIFT            4
  80
  81#define BMG160_REG_INT_STATUS_2 0x0B
  82#define BMG160_ANY_MOTION_MASK          0x07
  83#define BMG160_ANY_MOTION_BIT_X         BIT(0)
  84#define BMG160_ANY_MOTION_BIT_Y         BIT(1)
  85#define BMG160_ANY_MOTION_BIT_Z         BIT(2)
  86
  87#define BMG160_REG_TEMP         0x08
  88#define BMG160_TEMP_CENTER_VAL          23
  89
  90#define BMG160_MAX_STARTUP_TIME_MS      80
  91
  92#define BMG160_AUTO_SUSPEND_DELAY_MS    2000
  93
  94struct bmg160_data {
  95        struct regmap *regmap;
  96        struct regulator_bulk_data regulators[2];
  97        struct iio_trigger *dready_trig;
  98        struct iio_trigger *motion_trig;
  99        struct iio_mount_matrix orientation;
 100        struct mutex mutex;
 101        /* Ensure naturally aligned timestamp */
 102        struct {
 103                s16 chans[3];
 104                s64 timestamp __aligned(8);
 105        } scan;
 106        u32 dps_range;
 107        int ev_enable_state;
 108        int slope_thres;
 109        bool dready_trigger_on;
 110        bool motion_trigger_on;
 111        int irq;
 112};
 113
 114enum bmg160_axis {
 115        AXIS_X,
 116        AXIS_Y,
 117        AXIS_Z,
 118        AXIS_MAX,
 119};
 120
 121static const struct {
 122        int odr;
 123        int filter;
 124        int bw_bits;
 125} bmg160_samp_freq_table[] = { {100, 32, 0x07},
 126                               {200, 64, 0x06},
 127                               {100, 12, 0x05},
 128                               {200, 23, 0x04},
 129                               {400, 47, 0x03},
 130                               {1000, 116, 0x02},
 131                               {2000, 230, 0x01} };
 132
 133static const struct {
 134        int scale;
 135        int dps_range;
 136} bmg160_scale_table[] = { { 1065, BMG160_RANGE_2000DPS},
 137                           { 532, BMG160_RANGE_1000DPS},
 138                           { 266, BMG160_RANGE_500DPS},
 139                           { 133, BMG160_RANGE_250DPS},
 140                           { 66, BMG160_RANGE_125DPS} };
 141
 142static int bmg160_set_mode(struct bmg160_data *data, u8 mode)
 143{
 144        struct device *dev = regmap_get_device(data->regmap);
 145        int ret;
 146
 147        ret = regmap_write(data->regmap, BMG160_REG_PMU_LPW, mode);
 148        if (ret < 0) {
 149                dev_err(dev, "Error writing reg_pmu_lpw\n");
 150                return ret;
 151        }
 152
 153        return 0;
 154}
 155
 156static int bmg160_convert_freq_to_bit(int val)
 157{
 158        int i;
 159
 160        for (i = 0; i < ARRAY_SIZE(bmg160_samp_freq_table); ++i) {
 161                if (bmg160_samp_freq_table[i].odr == val)
 162                        return bmg160_samp_freq_table[i].bw_bits;
 163        }
 164
 165        return -EINVAL;
 166}
 167
 168static int bmg160_set_bw(struct bmg160_data *data, int val)
 169{
 170        struct device *dev = regmap_get_device(data->regmap);
 171        int ret;
 172        int bw_bits;
 173
 174        bw_bits = bmg160_convert_freq_to_bit(val);
 175        if (bw_bits < 0)
 176                return bw_bits;
 177
 178        ret = regmap_write(data->regmap, BMG160_REG_PMU_BW, bw_bits);
 179        if (ret < 0) {
 180                dev_err(dev, "Error writing reg_pmu_bw\n");
 181                return ret;
 182        }
 183
 184        return 0;
 185}
 186
 187static int bmg160_get_filter(struct bmg160_data *data, int *val)
 188{
 189        struct device *dev = regmap_get_device(data->regmap);
 190        int ret;
 191        int i;
 192        unsigned int bw_bits;
 193
 194        ret = regmap_read(data->regmap, BMG160_REG_PMU_BW, &bw_bits);
 195        if (ret < 0) {
 196                dev_err(dev, "Error reading reg_pmu_bw\n");
 197                return ret;
 198        }
 199
 200        /* Ignore the readonly reserved bit. */
 201        bw_bits &= ~BMG160_REG_PMU_BW_RES;
 202
 203        for (i = 0; i < ARRAY_SIZE(bmg160_samp_freq_table); ++i) {
 204                if (bmg160_samp_freq_table[i].bw_bits == bw_bits)
 205                        break;
 206        }
 207
 208        *val = bmg160_samp_freq_table[i].filter;
 209
 210        return ret ? ret : IIO_VAL_INT;
 211}
 212
 213
 214static int bmg160_set_filter(struct bmg160_data *data, int val)
 215{
 216        struct device *dev = regmap_get_device(data->regmap);
 217        int ret;
 218        int i;
 219
 220        for (i = 0; i < ARRAY_SIZE(bmg160_samp_freq_table); ++i) {
 221                if (bmg160_samp_freq_table[i].filter == val)
 222                        break;
 223        }
 224
 225        ret = regmap_write(data->regmap, BMG160_REG_PMU_BW,
 226                           bmg160_samp_freq_table[i].bw_bits);
 227        if (ret < 0) {
 228                dev_err(dev, "Error writing reg_pmu_bw\n");
 229                return ret;
 230        }
 231
 232        return 0;
 233}
 234
 235static int bmg160_chip_init(struct bmg160_data *data)
 236{
 237        struct device *dev = regmap_get_device(data->regmap);
 238        int ret;
 239        unsigned int val;
 240
 241        /*
 242         * Reset chip to get it in a known good state. A delay of 30ms after
 243         * reset is required according to the datasheet.
 244         */
 245        regmap_write(data->regmap, BMG160_GYRO_REG_RESET,
 246                     BMG160_GYRO_RESET_VAL);
 247        usleep_range(30000, 30700);
 248
 249        ret = regmap_read(data->regmap, BMG160_REG_CHIP_ID, &val);
 250        if (ret < 0) {
 251                dev_err(dev, "Error reading reg_chip_id\n");
 252                return ret;
 253        }
 254
 255        dev_dbg(dev, "Chip Id %x\n", val);
 256        if (val != BMG160_CHIP_ID_VAL) {
 257                dev_err(dev, "invalid chip %x\n", val);
 258                return -ENODEV;
 259        }
 260
 261        ret = bmg160_set_mode(data, BMG160_MODE_NORMAL);
 262        if (ret < 0)
 263                return ret;
 264
 265        /* Wait upto 500 ms to be ready after changing mode */
 266        usleep_range(500, 1000);
 267
 268        /* Set Bandwidth */
 269        ret = bmg160_set_bw(data, BMG160_DEF_BW);
 270        if (ret < 0)
 271                return ret;
 272
 273        /* Set Default Range */
 274        ret = regmap_write(data->regmap, BMG160_REG_RANGE, BMG160_RANGE_500DPS);
 275        if (ret < 0) {
 276                dev_err(dev, "Error writing reg_range\n");
 277                return ret;
 278        }
 279        data->dps_range = BMG160_RANGE_500DPS;
 280
 281        ret = regmap_read(data->regmap, BMG160_REG_SLOPE_THRES, &val);
 282        if (ret < 0) {
 283                dev_err(dev, "Error reading reg_slope_thres\n");
 284                return ret;
 285        }
 286        data->slope_thres = val;
 287
 288        /* Set default interrupt mode */
 289        ret = regmap_update_bits(data->regmap, BMG160_REG_INT_EN_1,
 290                                 BMG160_INT1_BIT_OD, 0);
 291        if (ret < 0) {
 292                dev_err(dev, "Error updating bits in reg_int_en_1\n");
 293                return ret;
 294        }
 295
 296        ret = regmap_write(data->regmap, BMG160_REG_INT_RST_LATCH,
 297                           BMG160_INT_MODE_LATCH_INT |
 298                           BMG160_INT_MODE_LATCH_RESET);
 299        if (ret < 0) {
 300                dev_err(dev,
 301                        "Error writing reg_motion_intr\n");
 302                return ret;
 303        }
 304
 305        return 0;
 306}
 307
 308static int bmg160_set_power_state(struct bmg160_data *data, bool on)
 309{
 310#ifdef CONFIG_PM
 311        struct device *dev = regmap_get_device(data->regmap);
 312        int ret;
 313
 314        if (on)
 315                ret = pm_runtime_get_sync(dev);
 316        else {
 317                pm_runtime_mark_last_busy(dev);
 318                ret = pm_runtime_put_autosuspend(dev);
 319        }
 320
 321        if (ret < 0) {
 322                dev_err(dev, "Failed: bmg160_set_power_state for %d\n", on);
 323
 324                if (on)
 325                        pm_runtime_put_noidle(dev);
 326
 327                return ret;
 328        }
 329#endif
 330
 331        return 0;
 332}
 333
 334static int bmg160_setup_any_motion_interrupt(struct bmg160_data *data,
 335                                             bool status)
 336{
 337        struct device *dev = regmap_get_device(data->regmap);
 338        int ret;
 339
 340        /* Enable/Disable INT_MAP0 mapping */
 341        ret = regmap_update_bits(data->regmap, BMG160_REG_INT_MAP_0,
 342                                 BMG160_INT_MAP_0_BIT_ANY,
 343                                 (status ? BMG160_INT_MAP_0_BIT_ANY : 0));
 344        if (ret < 0) {
 345                dev_err(dev, "Error updating bits reg_int_map0\n");
 346                return ret;
 347        }
 348
 349        /* Enable/Disable slope interrupts */
 350        if (status) {
 351                /* Update slope thres */
 352                ret = regmap_write(data->regmap, BMG160_REG_SLOPE_THRES,
 353                                   data->slope_thres);
 354                if (ret < 0) {
 355                        dev_err(dev, "Error writing reg_slope_thres\n");
 356                        return ret;
 357                }
 358
 359                ret = regmap_write(data->regmap, BMG160_REG_MOTION_INTR,
 360                                   BMG160_INT_MOTION_X | BMG160_INT_MOTION_Y |
 361                                   BMG160_INT_MOTION_Z);
 362                if (ret < 0) {
 363                        dev_err(dev, "Error writing reg_motion_intr\n");
 364                        return ret;
 365                }
 366
 367                /*
 368                 * New data interrupt is always non-latched,
 369                 * which will have higher priority, so no need
 370                 * to set latched mode, we will be flooded anyway with INTR
 371                 */
 372                if (!data->dready_trigger_on) {
 373                        ret = regmap_write(data->regmap,
 374                                           BMG160_REG_INT_RST_LATCH,
 375                                           BMG160_INT_MODE_LATCH_INT |
 376                                           BMG160_INT_MODE_LATCH_RESET);
 377                        if (ret < 0) {
 378                                dev_err(dev, "Error writing reg_rst_latch\n");
 379                                return ret;
 380                        }
 381                }
 382
 383                ret = regmap_write(data->regmap, BMG160_REG_INT_EN_0,
 384                                   BMG160_DATA_ENABLE_INT);
 385
 386        } else {
 387                ret = regmap_write(data->regmap, BMG160_REG_INT_EN_0, 0);
 388        }
 389
 390        if (ret < 0) {
 391                dev_err(dev, "Error writing reg_int_en0\n");
 392                return ret;
 393        }
 394
 395        return 0;
 396}
 397
 398static int bmg160_setup_new_data_interrupt(struct bmg160_data *data,
 399                                           bool status)
 400{
 401        struct device *dev = regmap_get_device(data->regmap);
 402        int ret;
 403
 404        /* Enable/Disable INT_MAP1 mapping */
 405        ret = regmap_update_bits(data->regmap, BMG160_REG_INT_MAP_1,
 406                                 BMG160_INT_MAP_1_BIT_NEW_DATA,
 407                                 (status ? BMG160_INT_MAP_1_BIT_NEW_DATA : 0));
 408        if (ret < 0) {
 409                dev_err(dev, "Error updating bits in reg_int_map1\n");
 410                return ret;
 411        }
 412
 413        if (status) {
 414                ret = regmap_write(data->regmap, BMG160_REG_INT_RST_LATCH,
 415                                   BMG160_INT_MODE_NON_LATCH_INT |
 416                                   BMG160_INT_MODE_LATCH_RESET);
 417                if (ret < 0) {
 418                        dev_err(dev, "Error writing reg_rst_latch\n");
 419                        return ret;
 420                }
 421
 422                ret = regmap_write(data->regmap, BMG160_REG_INT_EN_0,
 423                                   BMG160_DATA_ENABLE_INT);
 424
 425        } else {
 426                /* Restore interrupt mode */
 427                ret = regmap_write(data->regmap, BMG160_REG_INT_RST_LATCH,
 428                                   BMG160_INT_MODE_LATCH_INT |
 429                                   BMG160_INT_MODE_LATCH_RESET);
 430                if (ret < 0) {
 431                        dev_err(dev, "Error writing reg_rst_latch\n");
 432                        return ret;
 433                }
 434
 435                ret = regmap_write(data->regmap, BMG160_REG_INT_EN_0, 0);
 436        }
 437
 438        if (ret < 0) {
 439                dev_err(dev, "Error writing reg_int_en0\n");
 440                return ret;
 441        }
 442
 443        return 0;
 444}
 445
 446static int bmg160_get_bw(struct bmg160_data *data, int *val)
 447{
 448        struct device *dev = regmap_get_device(data->regmap);   
 449        int i;
 450        unsigned int bw_bits;
 451        int ret;
 452
 453        ret = regmap_read(data->regmap, BMG160_REG_PMU_BW, &bw_bits);
 454        if (ret < 0) {
 455                dev_err(dev, "Error reading reg_pmu_bw\n");
 456                return ret;
 457        }
 458
 459        /* Ignore the readonly reserved bit. */
 460        bw_bits &= ~BMG160_REG_PMU_BW_RES;
 461
 462        for (i = 0; i < ARRAY_SIZE(bmg160_samp_freq_table); ++i) {
 463                if (bmg160_samp_freq_table[i].bw_bits == bw_bits) {
 464                        *val = bmg160_samp_freq_table[i].odr;
 465                        return IIO_VAL_INT;
 466                }
 467        }
 468
 469        return -EINVAL;
 470}
 471
 472static int bmg160_set_scale(struct bmg160_data *data, int val)
 473{
 474        struct device *dev = regmap_get_device(data->regmap);
 475        int ret, i;
 476
 477        for (i = 0; i < ARRAY_SIZE(bmg160_scale_table); ++i) {
 478                if (bmg160_scale_table[i].scale == val) {
 479                        ret = regmap_write(data->regmap, BMG160_REG_RANGE,
 480                                           bmg160_scale_table[i].dps_range);
 481                        if (ret < 0) {
 482                                dev_err(dev, "Error writing reg_range\n");
 483                                return ret;
 484                        }
 485                        data->dps_range = bmg160_scale_table[i].dps_range;
 486                        return 0;
 487                }
 488        }
 489
 490        return -EINVAL;
 491}
 492
 493static int bmg160_get_temp(struct bmg160_data *data, int *val)
 494{
 495        struct device *dev = regmap_get_device(data->regmap);
 496        int ret;
 497        unsigned int raw_val;
 498
 499        mutex_lock(&data->mutex);
 500        ret = bmg160_set_power_state(data, true);
 501        if (ret < 0) {
 502                mutex_unlock(&data->mutex);
 503                return ret;
 504        }
 505
 506        ret = regmap_read(data->regmap, BMG160_REG_TEMP, &raw_val);
 507        if (ret < 0) {
 508                dev_err(dev, "Error reading reg_temp\n");
 509                bmg160_set_power_state(data, false);
 510                mutex_unlock(&data->mutex);
 511                return ret;
 512        }
 513
 514        *val = sign_extend32(raw_val, 7);
 515        ret = bmg160_set_power_state(data, false);
 516        mutex_unlock(&data->mutex);
 517        if (ret < 0)
 518                return ret;
 519
 520        return IIO_VAL_INT;
 521}
 522
 523static int bmg160_get_axis(struct bmg160_data *data, int axis, int *val)
 524{
 525        struct device *dev = regmap_get_device(data->regmap);
 526        int ret;
 527        __le16 raw_val;
 528
 529        mutex_lock(&data->mutex);
 530        ret = bmg160_set_power_state(data, true);
 531        if (ret < 0) {
 532                mutex_unlock(&data->mutex);
 533                return ret;
 534        }
 535
 536        ret = regmap_bulk_read(data->regmap, BMG160_AXIS_TO_REG(axis), &raw_val,
 537                               sizeof(raw_val));
 538        if (ret < 0) {
 539                dev_err(dev, "Error reading axis %d\n", axis);
 540                bmg160_set_power_state(data, false);
 541                mutex_unlock(&data->mutex);
 542                return ret;
 543        }
 544
 545        *val = sign_extend32(le16_to_cpu(raw_val), 15);
 546        ret = bmg160_set_power_state(data, false);
 547        mutex_unlock(&data->mutex);
 548        if (ret < 0)
 549                return ret;
 550
 551        return IIO_VAL_INT;
 552}
 553
 554static int bmg160_read_raw(struct iio_dev *indio_dev,
 555                           struct iio_chan_spec const *chan,
 556                           int *val, int *val2, long mask)
 557{
 558        struct bmg160_data *data = iio_priv(indio_dev);
 559        int ret;
 560
 561        switch (mask) {
 562        case IIO_CHAN_INFO_RAW:
 563                switch (chan->type) {
 564                case IIO_TEMP:
 565                        return bmg160_get_temp(data, val);
 566                case IIO_ANGL_VEL:
 567                        if (iio_buffer_enabled(indio_dev))
 568                                return -EBUSY;
 569                        else
 570                                return bmg160_get_axis(data, chan->scan_index,
 571                                                       val);
 572                default:
 573                        return -EINVAL;
 574                }
 575        case IIO_CHAN_INFO_OFFSET:
 576                if (chan->type == IIO_TEMP) {
 577                        *val = BMG160_TEMP_CENTER_VAL;
 578                        return IIO_VAL_INT;
 579                } else
 580                        return -EINVAL;
 581        case IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY:
 582                return bmg160_get_filter(data, val);
 583        case IIO_CHAN_INFO_SCALE:
 584                switch (chan->type) {
 585                case IIO_TEMP:
 586                        *val = 500;
 587                        return IIO_VAL_INT;
 588                case IIO_ANGL_VEL:
 589                {
 590                        int i;
 591
 592                        for (i = 0; i < ARRAY_SIZE(bmg160_scale_table); ++i) {
 593                                if (bmg160_scale_table[i].dps_range ==
 594                                                        data->dps_range) {
 595                                        *val = 0;
 596                                        *val2 = bmg160_scale_table[i].scale;
 597                                        return IIO_VAL_INT_PLUS_MICRO;
 598                                }
 599                        }
 600                        return -EINVAL;
 601                }
 602                default:
 603                        return -EINVAL;
 604                }
 605        case IIO_CHAN_INFO_SAMP_FREQ:
 606                *val2 = 0;
 607                mutex_lock(&data->mutex);
 608                ret = bmg160_get_bw(data, val);
 609                mutex_unlock(&data->mutex);
 610                return ret;
 611        default:
 612                return -EINVAL;
 613        }
 614}
 615
 616static int bmg160_write_raw(struct iio_dev *indio_dev,
 617                            struct iio_chan_spec const *chan,
 618                            int val, int val2, long mask)
 619{
 620        struct bmg160_data *data = iio_priv(indio_dev);
 621        int ret;
 622
 623        switch (mask) {
 624        case IIO_CHAN_INFO_SAMP_FREQ:
 625                mutex_lock(&data->mutex);
 626                /*
 627                 * Section 4.2 of spec
 628                 * In suspend mode, the only supported operations are reading
 629                 * registers as well as writing to the (0x14) softreset
 630                 * register. Since we will be in suspend mode by default, change
 631                 * mode to power on for other writes.
 632                 */
 633                ret = bmg160_set_power_state(data, true);
 634                if (ret < 0) {
 635                        mutex_unlock(&data->mutex);
 636                        return ret;
 637                }
 638                ret = bmg160_set_bw(data, val);
 639                if (ret < 0) {
 640                        bmg160_set_power_state(data, false);
 641                        mutex_unlock(&data->mutex);
 642                        return ret;
 643                }
 644                ret = bmg160_set_power_state(data, false);
 645                mutex_unlock(&data->mutex);
 646                return ret;
 647        case IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY:
 648                if (val2)
 649                        return -EINVAL;
 650
 651                mutex_lock(&data->mutex);
 652                ret = bmg160_set_power_state(data, true);
 653                if (ret < 0) {
 654                        bmg160_set_power_state(data, false);
 655                        mutex_unlock(&data->mutex);
 656                        return ret;
 657                }
 658                ret = bmg160_set_filter(data, val);
 659                if (ret < 0) {
 660                        bmg160_set_power_state(data, false);
 661                        mutex_unlock(&data->mutex);
 662                        return ret;
 663                }
 664                ret = bmg160_set_power_state(data, false);
 665                mutex_unlock(&data->mutex);
 666                return ret;
 667        case IIO_CHAN_INFO_SCALE:
 668                if (val)
 669                        return -EINVAL;
 670
 671                mutex_lock(&data->mutex);
 672                /* Refer to comments above for the suspend mode ops */
 673                ret = bmg160_set_power_state(data, true);
 674                if (ret < 0) {
 675                        mutex_unlock(&data->mutex);
 676                        return ret;
 677                }
 678                ret = bmg160_set_scale(data, val2);
 679                if (ret < 0) {
 680                        bmg160_set_power_state(data, false);
 681                        mutex_unlock(&data->mutex);
 682                        return ret;
 683                }
 684                ret = bmg160_set_power_state(data, false);
 685                mutex_unlock(&data->mutex);
 686                return ret;
 687        default:
 688                return -EINVAL;
 689        }
 690
 691        return -EINVAL;
 692}
 693
 694static int bmg160_read_event(struct iio_dev *indio_dev,
 695                             const struct iio_chan_spec *chan,
 696                             enum iio_event_type type,
 697                             enum iio_event_direction dir,
 698                             enum iio_event_info info,
 699                             int *val, int *val2)
 700{
 701        struct bmg160_data *data = iio_priv(indio_dev);
 702
 703        *val2 = 0;
 704        switch (info) {
 705        case IIO_EV_INFO_VALUE:
 706                *val = data->slope_thres & BMG160_SLOPE_THRES_MASK;
 707                break;
 708        default:
 709                return -EINVAL;
 710        }
 711
 712        return IIO_VAL_INT;
 713}
 714
 715static int bmg160_write_event(struct iio_dev *indio_dev,
 716                              const struct iio_chan_spec *chan,
 717                              enum iio_event_type type,
 718                              enum iio_event_direction dir,
 719                              enum iio_event_info info,
 720                              int val, int val2)
 721{
 722        struct bmg160_data *data = iio_priv(indio_dev);
 723
 724        switch (info) {
 725        case IIO_EV_INFO_VALUE:
 726                if (data->ev_enable_state)
 727                        return -EBUSY;
 728                data->slope_thres &= ~BMG160_SLOPE_THRES_MASK;
 729                data->slope_thres |= (val & BMG160_SLOPE_THRES_MASK);
 730                break;
 731        default:
 732                return -EINVAL;
 733        }
 734
 735        return 0;
 736}
 737
 738static int bmg160_read_event_config(struct iio_dev *indio_dev,
 739                                    const struct iio_chan_spec *chan,
 740                                    enum iio_event_type type,
 741                                    enum iio_event_direction dir)
 742{
 743
 744        struct bmg160_data *data = iio_priv(indio_dev);
 745
 746        return data->ev_enable_state;
 747}
 748
 749static int bmg160_write_event_config(struct iio_dev *indio_dev,
 750                                     const struct iio_chan_spec *chan,
 751                                     enum iio_event_type type,
 752                                     enum iio_event_direction dir,
 753                                     int state)
 754{
 755        struct bmg160_data *data = iio_priv(indio_dev);
 756        int ret;
 757
 758        if (state && data->ev_enable_state)
 759                return 0;
 760
 761        mutex_lock(&data->mutex);
 762
 763        if (!state && data->motion_trigger_on) {
 764                data->ev_enable_state = 0;
 765                mutex_unlock(&data->mutex);
 766                return 0;
 767        }
 768        /*
 769         * We will expect the enable and disable to do operation in
 770         * in reverse order. This will happen here anyway as our
 771         * resume operation uses sync mode runtime pm calls, the
 772         * suspend operation will be delayed by autosuspend delay
 773         * So the disable operation will still happen in reverse of
 774         * enable operation. When runtime pm is disabled the mode
 775         * is always on so sequence doesn't matter
 776         */
 777        ret = bmg160_set_power_state(data, state);
 778        if (ret < 0) {
 779                mutex_unlock(&data->mutex);
 780                return ret;
 781        }
 782
 783        ret =  bmg160_setup_any_motion_interrupt(data, state);
 784        if (ret < 0) {
 785                bmg160_set_power_state(data, false);
 786                mutex_unlock(&data->mutex);
 787                return ret;
 788        }
 789
 790        data->ev_enable_state = state;
 791        mutex_unlock(&data->mutex);
 792
 793        return 0;
 794}
 795
 796static const struct iio_mount_matrix *
 797bmg160_get_mount_matrix(const struct iio_dev *indio_dev,
 798                         const struct iio_chan_spec *chan)
 799{
 800        struct bmg160_data *data = iio_priv(indio_dev);
 801
 802        return &data->orientation;
 803}
 804
 805static const struct iio_chan_spec_ext_info bmg160_ext_info[] = {
 806        IIO_MOUNT_MATRIX(IIO_SHARED_BY_DIR, bmg160_get_mount_matrix),
 807        { }
 808};
 809
 810static IIO_CONST_ATTR_SAMP_FREQ_AVAIL("100 200 400 1000 2000");
 811
 812static IIO_CONST_ATTR(in_anglvel_scale_available,
 813                      "0.001065 0.000532 0.000266 0.000133 0.000066");
 814
 815static struct attribute *bmg160_attributes[] = {
 816        &iio_const_attr_sampling_frequency_available.dev_attr.attr,
 817        &iio_const_attr_in_anglvel_scale_available.dev_attr.attr,
 818        NULL,
 819};
 820
 821static const struct attribute_group bmg160_attrs_group = {
 822        .attrs = bmg160_attributes,
 823};
 824
 825static const struct iio_event_spec bmg160_event = {
 826                .type = IIO_EV_TYPE_ROC,
 827                .dir = IIO_EV_DIR_EITHER,
 828                .mask_shared_by_type = BIT(IIO_EV_INFO_VALUE) |
 829                                       BIT(IIO_EV_INFO_ENABLE)
 830};
 831
 832#define BMG160_CHANNEL(_axis) {                                 \
 833        .type = IIO_ANGL_VEL,                                           \
 834        .modified = 1,                                                  \
 835        .channel2 = IIO_MOD_##_axis,                                    \
 836        .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),                   \
 837        .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE) |          \
 838                BIT(IIO_CHAN_INFO_SAMP_FREQ) |                          \
 839                BIT(IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY),       \
 840        .scan_index = AXIS_##_axis,                                     \
 841        .scan_type = {                                                  \
 842                .sign = 's',                                            \
 843                .realbits = 16,                                 \
 844                .storagebits = 16,                                      \
 845                .endianness = IIO_LE,                                   \
 846        },                                                              \
 847        .ext_info = bmg160_ext_info,                                    \
 848        .event_spec = &bmg160_event,                                    \
 849        .num_event_specs = 1                                            \
 850}
 851
 852static const struct iio_chan_spec bmg160_channels[] = {
 853        {
 854                .type = IIO_TEMP,
 855                .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |
 856                                      BIT(IIO_CHAN_INFO_SCALE) |
 857                                      BIT(IIO_CHAN_INFO_OFFSET),
 858                .scan_index = -1,
 859        },
 860        BMG160_CHANNEL(X),
 861        BMG160_CHANNEL(Y),
 862        BMG160_CHANNEL(Z),
 863        IIO_CHAN_SOFT_TIMESTAMP(3),
 864};
 865
 866static const struct iio_info bmg160_info = {
 867        .attrs                  = &bmg160_attrs_group,
 868        .read_raw               = bmg160_read_raw,
 869        .write_raw              = bmg160_write_raw,
 870        .read_event_value       = bmg160_read_event,
 871        .write_event_value      = bmg160_write_event,
 872        .write_event_config     = bmg160_write_event_config,
 873        .read_event_config      = bmg160_read_event_config,
 874};
 875
 876static const unsigned long bmg160_accel_scan_masks[] = {
 877                                        BIT(AXIS_X) | BIT(AXIS_Y) | BIT(AXIS_Z),
 878                                        0};
 879
 880static irqreturn_t bmg160_trigger_handler(int irq, void *p)
 881{
 882        struct iio_poll_func *pf = p;
 883        struct iio_dev *indio_dev = pf->indio_dev;
 884        struct bmg160_data *data = iio_priv(indio_dev);
 885        int ret;
 886
 887        mutex_lock(&data->mutex);
 888        ret = regmap_bulk_read(data->regmap, BMG160_REG_XOUT_L,
 889                               data->scan.chans, AXIS_MAX * 2);
 890        mutex_unlock(&data->mutex);
 891        if (ret < 0)
 892                goto err;
 893
 894        iio_push_to_buffers_with_timestamp(indio_dev, &data->scan,
 895                                           pf->timestamp);
 896err:
 897        iio_trigger_notify_done(indio_dev->trig);
 898
 899        return IRQ_HANDLED;
 900}
 901
 902static void bmg160_trig_reen(struct iio_trigger *trig)
 903{
 904        struct iio_dev *indio_dev = iio_trigger_get_drvdata(trig);
 905        struct bmg160_data *data = iio_priv(indio_dev);
 906        struct device *dev = regmap_get_device(data->regmap);
 907        int ret;
 908
 909        /* new data interrupts don't need ack */
 910        if (data->dready_trigger_on)
 911                return;
 912
 913        /* Set latched mode interrupt and clear any latched interrupt */
 914        ret = regmap_write(data->regmap, BMG160_REG_INT_RST_LATCH,
 915                           BMG160_INT_MODE_LATCH_INT |
 916                           BMG160_INT_MODE_LATCH_RESET);
 917        if (ret < 0)
 918                dev_err(dev, "Error writing reg_rst_latch\n");
 919}
 920
 921static int bmg160_data_rdy_trigger_set_state(struct iio_trigger *trig,
 922                                             bool state)
 923{
 924        struct iio_dev *indio_dev = iio_trigger_get_drvdata(trig);
 925        struct bmg160_data *data = iio_priv(indio_dev);
 926        int ret;
 927
 928        mutex_lock(&data->mutex);
 929
 930        if (!state && data->ev_enable_state && data->motion_trigger_on) {
 931                data->motion_trigger_on = false;
 932                mutex_unlock(&data->mutex);
 933                return 0;
 934        }
 935
 936        /*
 937         * Refer to comment in bmg160_write_event_config for
 938         * enable/disable operation order
 939         */
 940        ret = bmg160_set_power_state(data, state);
 941        if (ret < 0) {
 942                mutex_unlock(&data->mutex);
 943                return ret;
 944        }
 945        if (data->motion_trig == trig)
 946                ret =  bmg160_setup_any_motion_interrupt(data, state);
 947        else
 948                ret = bmg160_setup_new_data_interrupt(data, state);
 949        if (ret < 0) {
 950                bmg160_set_power_state(data, false);
 951                mutex_unlock(&data->mutex);
 952                return ret;
 953        }
 954        if (data->motion_trig == trig)
 955                data->motion_trigger_on = state;
 956        else
 957                data->dready_trigger_on = state;
 958
 959        mutex_unlock(&data->mutex);
 960
 961        return 0;
 962}
 963
 964static const struct iio_trigger_ops bmg160_trigger_ops = {
 965        .set_trigger_state = bmg160_data_rdy_trigger_set_state,
 966        .reenable = bmg160_trig_reen,
 967};
 968
 969static irqreturn_t bmg160_event_handler(int irq, void *private)
 970{
 971        struct iio_dev *indio_dev = private;
 972        struct bmg160_data *data = iio_priv(indio_dev);
 973        struct device *dev = regmap_get_device(data->regmap);
 974        int ret;
 975        int dir;
 976        unsigned int val;
 977
 978        ret = regmap_read(data->regmap, BMG160_REG_INT_STATUS_2, &val);
 979        if (ret < 0) {
 980                dev_err(dev, "Error reading reg_int_status2\n");
 981                goto ack_intr_status;
 982        }
 983
 984        if (val & 0x08)
 985                dir = IIO_EV_DIR_RISING;
 986        else
 987                dir = IIO_EV_DIR_FALLING;
 988
 989        if (val & BMG160_ANY_MOTION_BIT_X)
 990                iio_push_event(indio_dev, IIO_MOD_EVENT_CODE(IIO_ANGL_VEL,
 991                                                             0,
 992                                                             IIO_MOD_X,
 993                                                             IIO_EV_TYPE_ROC,
 994                                                             dir),
 995                               iio_get_time_ns(indio_dev));
 996        if (val & BMG160_ANY_MOTION_BIT_Y)
 997                iio_push_event(indio_dev, IIO_MOD_EVENT_CODE(IIO_ANGL_VEL,
 998                                                             0,
 999                                                             IIO_MOD_Y,
1000                                                             IIO_EV_TYPE_ROC,
1001                                                             dir),
1002                               iio_get_time_ns(indio_dev));
1003        if (val & BMG160_ANY_MOTION_BIT_Z)
1004                iio_push_event(indio_dev, IIO_MOD_EVENT_CODE(IIO_ANGL_VEL,
1005                                                             0,
1006                                                             IIO_MOD_Z,
1007                                                             IIO_EV_TYPE_ROC,
1008                                                             dir),
1009                               iio_get_time_ns(indio_dev));
1010
1011ack_intr_status:
1012        if (!data->dready_trigger_on) {
1013                ret = regmap_write(data->regmap, BMG160_REG_INT_RST_LATCH,
1014                                   BMG160_INT_MODE_LATCH_INT |
1015                                   BMG160_INT_MODE_LATCH_RESET);
1016                if (ret < 0)
1017                        dev_err(dev, "Error writing reg_rst_latch\n");
1018        }
1019
1020        return IRQ_HANDLED;
1021}
1022
1023static irqreturn_t bmg160_data_rdy_trig_poll(int irq, void *private)
1024{
1025        struct iio_dev *indio_dev = private;
1026        struct bmg160_data *data = iio_priv(indio_dev);
1027
1028        if (data->dready_trigger_on)
1029                iio_trigger_poll(data->dready_trig);
1030        else if (data->motion_trigger_on)
1031                iio_trigger_poll(data->motion_trig);
1032
1033        if (data->ev_enable_state)
1034                return IRQ_WAKE_THREAD;
1035        else
1036                return IRQ_HANDLED;
1037
1038}
1039
1040static int bmg160_buffer_preenable(struct iio_dev *indio_dev)
1041{
1042        struct bmg160_data *data = iio_priv(indio_dev);
1043
1044        return bmg160_set_power_state(data, true);
1045}
1046
1047static int bmg160_buffer_postdisable(struct iio_dev *indio_dev)
1048{
1049        struct bmg160_data *data = iio_priv(indio_dev);
1050
1051        return bmg160_set_power_state(data, false);
1052}
1053
1054static const struct iio_buffer_setup_ops bmg160_buffer_setup_ops = {
1055        .preenable = bmg160_buffer_preenable,
1056        .postdisable = bmg160_buffer_postdisable,
1057};
1058
1059static const char *bmg160_match_acpi_device(struct device *dev)
1060{
1061        const struct acpi_device_id *id;
1062
1063        id = acpi_match_device(dev->driver->acpi_match_table, dev);
1064        if (!id)
1065                return NULL;
1066
1067        return dev_name(dev);
1068}
1069
1070static void bmg160_disable_regulators(void *d)
1071{
1072        struct bmg160_data *data = d;
1073
1074        regulator_bulk_disable(ARRAY_SIZE(data->regulators), data->regulators);
1075}
1076
1077int bmg160_core_probe(struct device *dev, struct regmap *regmap, int irq,
1078                      const char *name)
1079{
1080        struct bmg160_data *data;
1081        struct iio_dev *indio_dev;
1082        int ret;
1083
1084        indio_dev = devm_iio_device_alloc(dev, sizeof(*data));
1085        if (!indio_dev)
1086                return -ENOMEM;
1087
1088        data = iio_priv(indio_dev);
1089        dev_set_drvdata(dev, indio_dev);
1090        data->irq = irq;
1091        data->regmap = regmap;
1092
1093        data->regulators[0].supply = "vdd";
1094        data->regulators[1].supply = "vddio";
1095        ret = devm_regulator_bulk_get(dev, ARRAY_SIZE(data->regulators),
1096                                      data->regulators);
1097        if (ret)
1098                return dev_err_probe(dev, ret, "Failed to get regulators\n");
1099
1100        ret = regulator_bulk_enable(ARRAY_SIZE(data->regulators),
1101                                    data->regulators);
1102        if (ret)
1103                return ret;
1104
1105        ret = devm_add_action_or_reset(dev, bmg160_disable_regulators, data);
1106        if (ret)
1107                return ret;
1108
1109        ret = iio_read_mount_matrix(dev, &data->orientation);
1110        if (ret)
1111                return ret;
1112
1113        ret = bmg160_chip_init(data);
1114        if (ret < 0)
1115                return ret;
1116
1117        mutex_init(&data->mutex);
1118
1119        if (ACPI_HANDLE(dev))
1120                name = bmg160_match_acpi_device(dev);
1121
1122        indio_dev->channels = bmg160_channels;
1123        indio_dev->num_channels = ARRAY_SIZE(bmg160_channels);
1124        indio_dev->name = name;
1125        indio_dev->available_scan_masks = bmg160_accel_scan_masks;
1126        indio_dev->modes = INDIO_DIRECT_MODE;
1127        indio_dev->info = &bmg160_info;
1128
1129        if (data->irq > 0) {
1130                ret = devm_request_threaded_irq(dev,
1131                                                data->irq,
1132                                                bmg160_data_rdy_trig_poll,
1133                                                bmg160_event_handler,
1134                                                IRQF_TRIGGER_RISING,
1135                                                BMG160_IRQ_NAME,
1136                                                indio_dev);
1137                if (ret)
1138                        return ret;
1139
1140                data->dready_trig = devm_iio_trigger_alloc(dev,
1141                                                           "%s-dev%d",
1142                                                           indio_dev->name,
1143                                                           iio_device_id(indio_dev));
1144                if (!data->dready_trig)
1145                        return -ENOMEM;
1146
1147                data->motion_trig = devm_iio_trigger_alloc(dev,
1148                                                          "%s-any-motion-dev%d",
1149                                                          indio_dev->name,
1150                                                          iio_device_id(indio_dev));
1151                if (!data->motion_trig)
1152                        return -ENOMEM;
1153
1154                data->dready_trig->ops = &bmg160_trigger_ops;
1155                iio_trigger_set_drvdata(data->dready_trig, indio_dev);
1156                ret = iio_trigger_register(data->dready_trig);
1157                if (ret)
1158                        return ret;
1159
1160                data->motion_trig->ops = &bmg160_trigger_ops;
1161                iio_trigger_set_drvdata(data->motion_trig, indio_dev);
1162                ret = iio_trigger_register(data->motion_trig);
1163                if (ret) {
1164                        data->motion_trig = NULL;
1165                        goto err_trigger_unregister;
1166                }
1167        }
1168
1169        ret = iio_triggered_buffer_setup(indio_dev,
1170                                         iio_pollfunc_store_time,
1171                                         bmg160_trigger_handler,
1172                                         &bmg160_buffer_setup_ops);
1173        if (ret < 0) {
1174                dev_err(dev,
1175                        "iio triggered buffer setup failed\n");
1176                goto err_trigger_unregister;
1177        }
1178
1179        ret = pm_runtime_set_active(dev);
1180        if (ret)
1181                goto err_buffer_cleanup;
1182
1183        pm_runtime_enable(dev);
1184        pm_runtime_set_autosuspend_delay(dev,
1185                                         BMG160_AUTO_SUSPEND_DELAY_MS);
1186        pm_runtime_use_autosuspend(dev);
1187
1188        ret = iio_device_register(indio_dev);
1189        if (ret < 0) {
1190                dev_err(dev, "unable to register iio device\n");
1191                goto err_buffer_cleanup;
1192        }
1193
1194        return 0;
1195
1196err_buffer_cleanup:
1197        iio_triggered_buffer_cleanup(indio_dev);
1198err_trigger_unregister:
1199        if (data->dready_trig)
1200                iio_trigger_unregister(data->dready_trig);
1201        if (data->motion_trig)
1202                iio_trigger_unregister(data->motion_trig);
1203
1204        return ret;
1205}
1206EXPORT_SYMBOL_GPL(bmg160_core_probe);
1207
1208void bmg160_core_remove(struct device *dev)
1209{
1210        struct iio_dev *indio_dev = dev_get_drvdata(dev);
1211        struct bmg160_data *data = iio_priv(indio_dev);
1212
1213        iio_device_unregister(indio_dev);
1214
1215        pm_runtime_disable(dev);
1216        pm_runtime_set_suspended(dev);
1217        pm_runtime_put_noidle(dev);
1218
1219        iio_triggered_buffer_cleanup(indio_dev);
1220
1221        if (data->dready_trig) {
1222                iio_trigger_unregister(data->dready_trig);
1223                iio_trigger_unregister(data->motion_trig);
1224        }
1225
1226        mutex_lock(&data->mutex);
1227        bmg160_set_mode(data, BMG160_MODE_DEEP_SUSPEND);
1228        mutex_unlock(&data->mutex);
1229}
1230EXPORT_SYMBOL_GPL(bmg160_core_remove);
1231
1232#ifdef CONFIG_PM_SLEEP
1233static int bmg160_suspend(struct device *dev)
1234{
1235        struct iio_dev *indio_dev = dev_get_drvdata(dev);
1236        struct bmg160_data *data = iio_priv(indio_dev);
1237
1238        mutex_lock(&data->mutex);
1239        bmg160_set_mode(data, BMG160_MODE_SUSPEND);
1240        mutex_unlock(&data->mutex);
1241
1242        return 0;
1243}
1244
1245static int bmg160_resume(struct device *dev)
1246{
1247        struct iio_dev *indio_dev = dev_get_drvdata(dev);
1248        struct bmg160_data *data = iio_priv(indio_dev);
1249
1250        mutex_lock(&data->mutex);
1251        if (data->dready_trigger_on || data->motion_trigger_on ||
1252                                                        data->ev_enable_state)
1253                bmg160_set_mode(data, BMG160_MODE_NORMAL);
1254        mutex_unlock(&data->mutex);
1255
1256        return 0;
1257}
1258#endif
1259
1260#ifdef CONFIG_PM
1261static int bmg160_runtime_suspend(struct device *dev)
1262{
1263        struct iio_dev *indio_dev = dev_get_drvdata(dev);
1264        struct bmg160_data *data = iio_priv(indio_dev);
1265        int ret;
1266
1267        ret = bmg160_set_mode(data, BMG160_MODE_SUSPEND);
1268        if (ret < 0) {
1269                dev_err(dev, "set mode failed\n");
1270                return -EAGAIN;
1271        }
1272
1273        return 0;
1274}
1275
1276static int bmg160_runtime_resume(struct device *dev)
1277{
1278        struct iio_dev *indio_dev = dev_get_drvdata(dev);
1279        struct bmg160_data *data = iio_priv(indio_dev);
1280        int ret;
1281
1282        ret = bmg160_set_mode(data, BMG160_MODE_NORMAL);
1283        if (ret < 0)
1284                return ret;
1285
1286        msleep_interruptible(BMG160_MAX_STARTUP_TIME_MS);
1287
1288        return 0;
1289}
1290#endif
1291
1292const struct dev_pm_ops bmg160_pm_ops = {
1293        SET_SYSTEM_SLEEP_PM_OPS(bmg160_suspend, bmg160_resume)
1294        SET_RUNTIME_PM_OPS(bmg160_runtime_suspend,
1295                           bmg160_runtime_resume, NULL)
1296};
1297EXPORT_SYMBOL_GPL(bmg160_pm_ops);
1298
1299MODULE_AUTHOR("Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>");
1300MODULE_LICENSE("GPL v2");
1301MODULE_DESCRIPTION("BMG160 Gyro driver");
1302