root/drivers/input/misc/bma150.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. bma150_write_byte
  2. bma150_set_reg_bits
  3. bma150_set_mode
  4. bma150_soft_reset
  5. bma150_set_range
  6. bma150_set_bandwidth
  7. bma150_set_low_g_interrupt
  8. bma150_set_high_g_interrupt
  9. bma150_set_any_motion_interrupt
  10. bma150_report_xyz
  11. bma150_irq_thread
  12. bma150_poll
  13. bma150_open
  14. bma150_close
  15. bma150_irq_open
  16. bma150_irq_close
  17. bma150_poll_open
  18. bma150_poll_close
  19. bma150_initialize
  20. bma150_init_input_device
  21. bma150_register_input_device
  22. bma150_register_polled_device
  23. bma150_probe
  24. bma150_remove
  25. bma150_suspend
  26. bma150_resume

   1 // SPDX-License-Identifier: GPL-2.0-or-later
   2 /*
   3  * Copyright (c) 2011 Bosch Sensortec GmbH
   4  * Copyright (c) 2011 Unixphere
   5  *
   6  * This driver adds support for Bosch Sensortec's digital acceleration
   7  * sensors BMA150 and SMB380.
   8  * The SMB380 is fully compatible with BMA150 and only differs in packaging.
   9  *
  10  * The datasheet for the BMA150 chip can be found here:
  11  * http://www.bosch-sensortec.com/content/language1/downloads/BST-BMA150-DS000-07.pdf
  12  */
  13 #include <linux/kernel.h>
  14 #include <linux/module.h>
  15 #include <linux/i2c.h>
  16 #include <linux/input.h>
  17 #include <linux/input-polldev.h>
  18 #include <linux/interrupt.h>
  19 #include <linux/delay.h>
  20 #include <linux/slab.h>
  21 #include <linux/pm.h>
  22 #include <linux/pm_runtime.h>
  23 #include <linux/bma150.h>
  24 
  25 #define ABSMAX_ACC_VAL          0x01FF
  26 #define ABSMIN_ACC_VAL          -(ABSMAX_ACC_VAL)
  27 
  28 /* Each axis is represented by a 2-byte data word */
  29 #define BMA150_XYZ_DATA_SIZE    6
  30 
  31 /* Input poll interval in milliseconds */
  32 #define BMA150_POLL_INTERVAL    10
  33 #define BMA150_POLL_MAX         200
  34 #define BMA150_POLL_MIN         0
  35 
  36 #define BMA150_MODE_NORMAL      0
  37 #define BMA150_MODE_SLEEP       2
  38 #define BMA150_MODE_WAKE_UP     3
  39 
  40 /* Data register addresses */
  41 #define BMA150_DATA_0_REG       0x00
  42 #define BMA150_DATA_1_REG       0x01
  43 #define BMA150_DATA_2_REG       0x02
  44 
  45 /* Control register addresses */
  46 #define BMA150_CTRL_0_REG       0x0A
  47 #define BMA150_CTRL_1_REG       0x0B
  48 #define BMA150_CTRL_2_REG       0x14
  49 #define BMA150_CTRL_3_REG       0x15
  50 
  51 /* Configuration/Setting register addresses */
  52 #define BMA150_CFG_0_REG        0x0C
  53 #define BMA150_CFG_1_REG        0x0D
  54 #define BMA150_CFG_2_REG        0x0E
  55 #define BMA150_CFG_3_REG        0x0F
  56 #define BMA150_CFG_4_REG        0x10
  57 #define BMA150_CFG_5_REG        0x11
  58 
  59 #define BMA150_CHIP_ID          2
  60 #define BMA150_CHIP_ID_REG      BMA150_DATA_0_REG
  61 
  62 #define BMA150_ACC_X_LSB_REG    BMA150_DATA_2_REG
  63 
  64 #define BMA150_SLEEP_POS        0
  65 #define BMA150_SLEEP_MSK        0x01
  66 #define BMA150_SLEEP_REG        BMA150_CTRL_0_REG
  67 
  68 #define BMA150_BANDWIDTH_POS    0
  69 #define BMA150_BANDWIDTH_MSK    0x07
  70 #define BMA150_BANDWIDTH_REG    BMA150_CTRL_2_REG
  71 
  72 #define BMA150_RANGE_POS        3
  73 #define BMA150_RANGE_MSK        0x18
  74 #define BMA150_RANGE_REG        BMA150_CTRL_2_REG
  75 
  76 #define BMA150_WAKE_UP_POS      0
  77 #define BMA150_WAKE_UP_MSK      0x01
  78 #define BMA150_WAKE_UP_REG      BMA150_CTRL_3_REG
  79 
  80 #define BMA150_SW_RES_POS       1
  81 #define BMA150_SW_RES_MSK       0x02
  82 #define BMA150_SW_RES_REG       BMA150_CTRL_0_REG
  83 
  84 /* Any-motion interrupt register fields */
  85 #define BMA150_ANY_MOTION_EN_POS        6
  86 #define BMA150_ANY_MOTION_EN_MSK        0x40
  87 #define BMA150_ANY_MOTION_EN_REG        BMA150_CTRL_1_REG
  88 
  89 #define BMA150_ANY_MOTION_DUR_POS       6
  90 #define BMA150_ANY_MOTION_DUR_MSK       0xC0
  91 #define BMA150_ANY_MOTION_DUR_REG       BMA150_CFG_5_REG
  92 
  93 #define BMA150_ANY_MOTION_THRES_REG     BMA150_CFG_4_REG
  94 
  95 /* Advanced interrupt register fields */
  96 #define BMA150_ADV_INT_EN_POS           6
  97 #define BMA150_ADV_INT_EN_MSK           0x40
  98 #define BMA150_ADV_INT_EN_REG           BMA150_CTRL_3_REG
  99 
 100 /* High-G interrupt register fields */
 101 #define BMA150_HIGH_G_EN_POS            1
 102 #define BMA150_HIGH_G_EN_MSK            0x02
 103 #define BMA150_HIGH_G_EN_REG            BMA150_CTRL_1_REG
 104 
 105 #define BMA150_HIGH_G_HYST_POS          3
 106 #define BMA150_HIGH_G_HYST_MSK          0x38
 107 #define BMA150_HIGH_G_HYST_REG          BMA150_CFG_5_REG
 108 
 109 #define BMA150_HIGH_G_DUR_REG           BMA150_CFG_3_REG
 110 #define BMA150_HIGH_G_THRES_REG         BMA150_CFG_2_REG
 111 
 112 /* Low-G interrupt register fields */
 113 #define BMA150_LOW_G_EN_POS             0
 114 #define BMA150_LOW_G_EN_MSK             0x01
 115 #define BMA150_LOW_G_EN_REG             BMA150_CTRL_1_REG
 116 
 117 #define BMA150_LOW_G_HYST_POS           0
 118 #define BMA150_LOW_G_HYST_MSK           0x07
 119 #define BMA150_LOW_G_HYST_REG           BMA150_CFG_5_REG
 120 
 121 #define BMA150_LOW_G_DUR_REG            BMA150_CFG_1_REG
 122 #define BMA150_LOW_G_THRES_REG          BMA150_CFG_0_REG
 123 
 124 struct bma150_data {
 125         struct i2c_client *client;
 126         struct input_polled_dev *input_polled;
 127         struct input_dev *input;
 128         u8 mode;
 129 };
 130 
 131 /*
 132  * The settings for the given range, bandwidth and interrupt features
 133  * are stated and verified by Bosch Sensortec where they are configured
 134  * to provide a generic sensitivity performance.
 135  */
 136 static const struct bma150_cfg default_cfg = {
 137         .any_motion_int = 1,
 138         .hg_int = 1,
 139         .lg_int = 1,
 140         .any_motion_dur = 0,
 141         .any_motion_thres = 0,
 142         .hg_hyst = 0,
 143         .hg_dur = 150,
 144         .hg_thres = 160,
 145         .lg_hyst = 0,
 146         .lg_dur = 150,
 147         .lg_thres = 20,
 148         .range = BMA150_RANGE_2G,
 149         .bandwidth = BMA150_BW_50HZ
 150 };
 151 
 152 static int bma150_write_byte(struct i2c_client *client, u8 reg, u8 val)
 153 {
 154         s32 ret;
 155 
 156         /* As per specification, disable irq in between register writes */
 157         if (client->irq)
 158                 disable_irq_nosync(client->irq);
 159 
 160         ret = i2c_smbus_write_byte_data(client, reg, val);
 161 
 162         if (client->irq)
 163                 enable_irq(client->irq);
 164 
 165         return ret;
 166 }
 167 
 168 static int bma150_set_reg_bits(struct i2c_client *client,
 169                                         int val, int shift, u8 mask, u8 reg)
 170 {
 171         int data;
 172 
 173         data = i2c_smbus_read_byte_data(client, reg);
 174         if (data < 0)
 175                 return data;
 176 
 177         data = (data & ~mask) | ((val << shift) & mask);
 178         return bma150_write_byte(client, reg, data);
 179 }
 180 
 181 static int bma150_set_mode(struct bma150_data *bma150, u8 mode)
 182 {
 183         int error;
 184 
 185         error = bma150_set_reg_bits(bma150->client, mode, BMA150_WAKE_UP_POS,
 186                                 BMA150_WAKE_UP_MSK, BMA150_WAKE_UP_REG);
 187         if (error)
 188                 return error;
 189 
 190         error = bma150_set_reg_bits(bma150->client, mode, BMA150_SLEEP_POS,
 191                                 BMA150_SLEEP_MSK, BMA150_SLEEP_REG);
 192         if (error)
 193                 return error;
 194 
 195         if (mode == BMA150_MODE_NORMAL)
 196                 usleep_range(2000, 2100);
 197 
 198         bma150->mode = mode;
 199         return 0;
 200 }
 201 
 202 static int bma150_soft_reset(struct bma150_data *bma150)
 203 {
 204         int error;
 205 
 206         error = bma150_set_reg_bits(bma150->client, 1, BMA150_SW_RES_POS,
 207                                 BMA150_SW_RES_MSK, BMA150_SW_RES_REG);
 208         if (error)
 209                 return error;
 210 
 211         usleep_range(2000, 2100);
 212         return 0;
 213 }
 214 
 215 static int bma150_set_range(struct bma150_data *bma150, u8 range)
 216 {
 217         return bma150_set_reg_bits(bma150->client, range, BMA150_RANGE_POS,
 218                                 BMA150_RANGE_MSK, BMA150_RANGE_REG);
 219 }
 220 
 221 static int bma150_set_bandwidth(struct bma150_data *bma150, u8 bw)
 222 {
 223         return bma150_set_reg_bits(bma150->client, bw, BMA150_BANDWIDTH_POS,
 224                                 BMA150_BANDWIDTH_MSK, BMA150_BANDWIDTH_REG);
 225 }
 226 
 227 static int bma150_set_low_g_interrupt(struct bma150_data *bma150,
 228                                         u8 enable, u8 hyst, u8 dur, u8 thres)
 229 {
 230         int error;
 231 
 232         error = bma150_set_reg_bits(bma150->client, hyst,
 233                                 BMA150_LOW_G_HYST_POS, BMA150_LOW_G_HYST_MSK,
 234                                 BMA150_LOW_G_HYST_REG);
 235         if (error)
 236                 return error;
 237 
 238         error = bma150_write_byte(bma150->client, BMA150_LOW_G_DUR_REG, dur);
 239         if (error)
 240                 return error;
 241 
 242         error = bma150_write_byte(bma150->client, BMA150_LOW_G_THRES_REG, thres);
 243         if (error)
 244                 return error;
 245 
 246         return bma150_set_reg_bits(bma150->client, !!enable,
 247                                 BMA150_LOW_G_EN_POS, BMA150_LOW_G_EN_MSK,
 248                                 BMA150_LOW_G_EN_REG);
 249 }
 250 
 251 static int bma150_set_high_g_interrupt(struct bma150_data *bma150,
 252                                         u8 enable, u8 hyst, u8 dur, u8 thres)
 253 {
 254         int error;
 255 
 256         error = bma150_set_reg_bits(bma150->client, hyst,
 257                                 BMA150_HIGH_G_HYST_POS, BMA150_HIGH_G_HYST_MSK,
 258                                 BMA150_HIGH_G_HYST_REG);
 259         if (error)
 260                 return error;
 261 
 262         error = bma150_write_byte(bma150->client,
 263                                 BMA150_HIGH_G_DUR_REG, dur);
 264         if (error)
 265                 return error;
 266 
 267         error = bma150_write_byte(bma150->client,
 268                                 BMA150_HIGH_G_THRES_REG, thres);
 269         if (error)
 270                 return error;
 271 
 272         return bma150_set_reg_bits(bma150->client, !!enable,
 273                                 BMA150_HIGH_G_EN_POS, BMA150_HIGH_G_EN_MSK,
 274                                 BMA150_HIGH_G_EN_REG);
 275 }
 276 
 277 
 278 static int bma150_set_any_motion_interrupt(struct bma150_data *bma150,
 279                                                 u8 enable, u8 dur, u8 thres)
 280 {
 281         int error;
 282 
 283         error = bma150_set_reg_bits(bma150->client, dur,
 284                                 BMA150_ANY_MOTION_DUR_POS,
 285                                 BMA150_ANY_MOTION_DUR_MSK,
 286                                 BMA150_ANY_MOTION_DUR_REG);
 287         if (error)
 288                 return error;
 289 
 290         error = bma150_write_byte(bma150->client,
 291                                 BMA150_ANY_MOTION_THRES_REG, thres);
 292         if (error)
 293                 return error;
 294 
 295         error = bma150_set_reg_bits(bma150->client, !!enable,
 296                                 BMA150_ADV_INT_EN_POS, BMA150_ADV_INT_EN_MSK,
 297                                 BMA150_ADV_INT_EN_REG);
 298         if (error)
 299                 return error;
 300 
 301         return bma150_set_reg_bits(bma150->client, !!enable,
 302                                 BMA150_ANY_MOTION_EN_POS,
 303                                 BMA150_ANY_MOTION_EN_MSK,
 304                                 BMA150_ANY_MOTION_EN_REG);
 305 }
 306 
 307 static void bma150_report_xyz(struct bma150_data *bma150)
 308 {
 309         u8 data[BMA150_XYZ_DATA_SIZE];
 310         s16 x, y, z;
 311         s32 ret;
 312 
 313         ret = i2c_smbus_read_i2c_block_data(bma150->client,
 314                         BMA150_ACC_X_LSB_REG, BMA150_XYZ_DATA_SIZE, data);
 315         if (ret != BMA150_XYZ_DATA_SIZE)
 316                 return;
 317 
 318         x = ((0xc0 & data[0]) >> 6) | (data[1] << 2);
 319         y = ((0xc0 & data[2]) >> 6) | (data[3] << 2);
 320         z = ((0xc0 & data[4]) >> 6) | (data[5] << 2);
 321 
 322         x = sign_extend32(x, 9);
 323         y = sign_extend32(y, 9);
 324         z = sign_extend32(z, 9);
 325 
 326         input_report_abs(bma150->input, ABS_X, x);
 327         input_report_abs(bma150->input, ABS_Y, y);
 328         input_report_abs(bma150->input, ABS_Z, z);
 329         input_sync(bma150->input);
 330 }
 331 
 332 static irqreturn_t bma150_irq_thread(int irq, void *dev)
 333 {
 334         bma150_report_xyz(dev);
 335 
 336         return IRQ_HANDLED;
 337 }
 338 
 339 static void bma150_poll(struct input_polled_dev *dev)
 340 {
 341         bma150_report_xyz(dev->private);
 342 }
 343 
 344 static int bma150_open(struct bma150_data *bma150)
 345 {
 346         int error;
 347 
 348         error = pm_runtime_get_sync(&bma150->client->dev);
 349         if (error < 0 && error != -ENOSYS)
 350                 return error;
 351 
 352         /*
 353          * See if runtime PM woke up the device. If runtime PM
 354          * is disabled we need to do it ourselves.
 355          */
 356         if (bma150->mode != BMA150_MODE_NORMAL) {
 357                 error = bma150_set_mode(bma150, BMA150_MODE_NORMAL);
 358                 if (error)
 359                         return error;
 360         }
 361 
 362         return 0;
 363 }
 364 
 365 static void bma150_close(struct bma150_data *bma150)
 366 {
 367         pm_runtime_put_sync(&bma150->client->dev);
 368 
 369         if (bma150->mode != BMA150_MODE_SLEEP)
 370                 bma150_set_mode(bma150, BMA150_MODE_SLEEP);
 371 }
 372 
 373 static int bma150_irq_open(struct input_dev *input)
 374 {
 375         struct bma150_data *bma150 = input_get_drvdata(input);
 376 
 377         return bma150_open(bma150);
 378 }
 379 
 380 static void bma150_irq_close(struct input_dev *input)
 381 {
 382         struct bma150_data *bma150 = input_get_drvdata(input);
 383 
 384         bma150_close(bma150);
 385 }
 386 
 387 static void bma150_poll_open(struct input_polled_dev *ipoll_dev)
 388 {
 389         struct bma150_data *bma150 = ipoll_dev->private;
 390 
 391         bma150_open(bma150);
 392 }
 393 
 394 static void bma150_poll_close(struct input_polled_dev *ipoll_dev)
 395 {
 396         struct bma150_data *bma150 = ipoll_dev->private;
 397 
 398         bma150_close(bma150);
 399 }
 400 
 401 static int bma150_initialize(struct bma150_data *bma150,
 402                                        const struct bma150_cfg *cfg)
 403 {
 404         int error;
 405 
 406         error = bma150_soft_reset(bma150);
 407         if (error)
 408                 return error;
 409 
 410         error = bma150_set_bandwidth(bma150, cfg->bandwidth);
 411         if (error)
 412                 return error;
 413 
 414         error = bma150_set_range(bma150, cfg->range);
 415         if (error)
 416                 return error;
 417 
 418         if (bma150->client->irq) {
 419                 error = bma150_set_any_motion_interrupt(bma150,
 420                                         cfg->any_motion_int,
 421                                         cfg->any_motion_dur,
 422                                         cfg->any_motion_thres);
 423                 if (error)
 424                         return error;
 425 
 426                 error = bma150_set_high_g_interrupt(bma150,
 427                                         cfg->hg_int, cfg->hg_hyst,
 428                                         cfg->hg_dur, cfg->hg_thres);
 429                 if (error)
 430                         return error;
 431 
 432                 error = bma150_set_low_g_interrupt(bma150,
 433                                         cfg->lg_int, cfg->lg_hyst,
 434                                         cfg->lg_dur, cfg->lg_thres);
 435                 if (error)
 436                         return error;
 437         }
 438 
 439         return bma150_set_mode(bma150, BMA150_MODE_SLEEP);
 440 }
 441 
 442 static void bma150_init_input_device(struct bma150_data *bma150,
 443                                                 struct input_dev *idev)
 444 {
 445         idev->name = BMA150_DRIVER;
 446         idev->phys = BMA150_DRIVER "/input0";
 447         idev->id.bustype = BUS_I2C;
 448         idev->dev.parent = &bma150->client->dev;
 449 
 450         idev->evbit[0] = BIT_MASK(EV_ABS);
 451         input_set_abs_params(idev, ABS_X, ABSMIN_ACC_VAL, ABSMAX_ACC_VAL, 0, 0);
 452         input_set_abs_params(idev, ABS_Y, ABSMIN_ACC_VAL, ABSMAX_ACC_VAL, 0, 0);
 453         input_set_abs_params(idev, ABS_Z, ABSMIN_ACC_VAL, ABSMAX_ACC_VAL, 0, 0);
 454 }
 455 
 456 static int bma150_register_input_device(struct bma150_data *bma150)
 457 {
 458         struct input_dev *idev;
 459         int error;
 460 
 461         idev = input_allocate_device();
 462         if (!idev)
 463                 return -ENOMEM;
 464 
 465         bma150_init_input_device(bma150, idev);
 466 
 467         idev->open = bma150_irq_open;
 468         idev->close = bma150_irq_close;
 469         input_set_drvdata(idev, bma150);
 470 
 471         bma150->input = idev;
 472 
 473         error = input_register_device(idev);
 474         if (error) {
 475                 input_free_device(idev);
 476                 return error;
 477         }
 478 
 479         return 0;
 480 }
 481 
 482 static int bma150_register_polled_device(struct bma150_data *bma150)
 483 {
 484         struct input_polled_dev *ipoll_dev;
 485         int error;
 486 
 487         ipoll_dev = input_allocate_polled_device();
 488         if (!ipoll_dev)
 489                 return -ENOMEM;
 490 
 491         ipoll_dev->private = bma150;
 492         ipoll_dev->open = bma150_poll_open;
 493         ipoll_dev->close = bma150_poll_close;
 494         ipoll_dev->poll = bma150_poll;
 495         ipoll_dev->poll_interval = BMA150_POLL_INTERVAL;
 496         ipoll_dev->poll_interval_min = BMA150_POLL_MIN;
 497         ipoll_dev->poll_interval_max = BMA150_POLL_MAX;
 498 
 499         bma150_init_input_device(bma150, ipoll_dev->input);
 500 
 501         bma150->input_polled = ipoll_dev;
 502         bma150->input = ipoll_dev->input;
 503 
 504         error = input_register_polled_device(ipoll_dev);
 505         if (error) {
 506                 input_free_polled_device(ipoll_dev);
 507                 return error;
 508         }
 509 
 510         return 0;
 511 }
 512 
 513 static int bma150_probe(struct i2c_client *client,
 514                                   const struct i2c_device_id *id)
 515 {
 516         const struct bma150_platform_data *pdata =
 517                         dev_get_platdata(&client->dev);
 518         const struct bma150_cfg *cfg;
 519         struct bma150_data *bma150;
 520         int chip_id;
 521         int error;
 522 
 523         if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) {
 524                 dev_err(&client->dev, "i2c_check_functionality error\n");
 525                 return -EIO;
 526         }
 527 
 528         chip_id = i2c_smbus_read_byte_data(client, BMA150_CHIP_ID_REG);
 529         if (chip_id != BMA150_CHIP_ID) {
 530                 dev_err(&client->dev, "BMA150 chip id error: %d\n", chip_id);
 531                 return -EINVAL;
 532         }
 533 
 534         bma150 = kzalloc(sizeof(struct bma150_data), GFP_KERNEL);
 535         if (!bma150)
 536                 return -ENOMEM;
 537 
 538         bma150->client = client;
 539 
 540         if (pdata) {
 541                 if (pdata->irq_gpio_cfg) {
 542                         error = pdata->irq_gpio_cfg();
 543                         if (error) {
 544                                 dev_err(&client->dev,
 545                                         "IRQ GPIO conf. error %d, error %d\n",
 546                                         client->irq, error);
 547                                 goto err_free_mem;
 548                         }
 549                 }
 550                 cfg = &pdata->cfg;
 551         } else {
 552                 cfg = &default_cfg;
 553         }
 554 
 555         error = bma150_initialize(bma150, cfg);
 556         if (error)
 557                 goto err_free_mem;
 558 
 559         if (client->irq > 0) {
 560                 error = bma150_register_input_device(bma150);
 561                 if (error)
 562                         goto err_free_mem;
 563 
 564                 error = request_threaded_irq(client->irq,
 565                                         NULL, bma150_irq_thread,
 566                                         IRQF_TRIGGER_RISING | IRQF_ONESHOT,
 567                                         BMA150_DRIVER, bma150);
 568                 if (error) {
 569                         dev_err(&client->dev,
 570                                 "irq request failed %d, error %d\n",
 571                                 client->irq, error);
 572                         input_unregister_device(bma150->input);
 573                         goto err_free_mem;
 574                 }
 575         } else {
 576                 error = bma150_register_polled_device(bma150);
 577                 if (error)
 578                         goto err_free_mem;
 579         }
 580 
 581         i2c_set_clientdata(client, bma150);
 582 
 583         pm_runtime_enable(&client->dev);
 584 
 585         return 0;
 586 
 587 err_free_mem:
 588         kfree(bma150);
 589         return error;
 590 }
 591 
 592 static int bma150_remove(struct i2c_client *client)
 593 {
 594         struct bma150_data *bma150 = i2c_get_clientdata(client);
 595 
 596         pm_runtime_disable(&client->dev);
 597 
 598         if (client->irq > 0) {
 599                 free_irq(client->irq, bma150);
 600                 input_unregister_device(bma150->input);
 601         } else {
 602                 input_unregister_polled_device(bma150->input_polled);
 603                 input_free_polled_device(bma150->input_polled);
 604         }
 605 
 606         kfree(bma150);
 607 
 608         return 0;
 609 }
 610 
 611 #ifdef CONFIG_PM
 612 static int bma150_suspend(struct device *dev)
 613 {
 614         struct i2c_client *client = to_i2c_client(dev);
 615         struct bma150_data *bma150 = i2c_get_clientdata(client);
 616 
 617         return bma150_set_mode(bma150, BMA150_MODE_SLEEP);
 618 }
 619 
 620 static int bma150_resume(struct device *dev)
 621 {
 622         struct i2c_client *client = to_i2c_client(dev);
 623         struct bma150_data *bma150 = i2c_get_clientdata(client);
 624 
 625         return bma150_set_mode(bma150, BMA150_MODE_NORMAL);
 626 }
 627 #endif
 628 
 629 static UNIVERSAL_DEV_PM_OPS(bma150_pm, bma150_suspend, bma150_resume, NULL);
 630 
 631 static const struct i2c_device_id bma150_id[] = {
 632         { "bma150", 0 },
 633         { "smb380", 0 },
 634         { "bma023", 0 },
 635         { }
 636 };
 637 
 638 MODULE_DEVICE_TABLE(i2c, bma150_id);
 639 
 640 static struct i2c_driver bma150_driver = {
 641         .driver = {
 642                 .name   = BMA150_DRIVER,
 643                 .pm     = &bma150_pm,
 644         },
 645         .class          = I2C_CLASS_HWMON,
 646         .id_table       = bma150_id,
 647         .probe          = bma150_probe,
 648         .remove         = bma150_remove,
 649 };
 650 
 651 module_i2c_driver(bma150_driver);
 652 
 653 MODULE_AUTHOR("Albert Zhang <xu.zhang@bosch-sensortec.com>");
 654 MODULE_DESCRIPTION("BMA150 driver");
 655 MODULE_LICENSE("GPL");

/* [<][>][^][v][top][bottom][index][help] */