0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015 #include <linux/module.h>
0016 #include <linux/i2c.h>
0017 #include <linux/interrupt.h>
0018 #include <linux/delay.h>
0019 #include <linux/of_device.h>
0020 #include <linux/of.h>
0021 #include <linux/bitops.h>
0022 #include <linux/regulator/consumer.h>
0023 #include <linux/slab.h>
0024 #include <linux/string.h>
0025 #include <linux/iio/iio.h>
0026 #include <linux/iio/sysfs.h>
0027 #include <linux/iio/buffer.h>
0028 #include <linux/iio/trigger.h>
0029 #include <linux/iio/trigger_consumer.h>
0030 #include <linux/iio/triggered_buffer.h>
0031
0032 #define BMA180_DRV_NAME "bma180"
0033 #define BMA180_IRQ_NAME "bma180_event"
0034
0035 enum chip_ids {
0036 BMA023,
0037 BMA150,
0038 BMA180,
0039 BMA250,
0040 };
0041
0042 struct bma180_data;
0043
0044 struct bma180_part_info {
0045 u8 chip_id;
0046 const struct iio_chan_spec *channels;
0047 unsigned int num_channels;
0048 const int *scale_table;
0049 unsigned int num_scales;
0050 const int *bw_table;
0051 unsigned int num_bw;
0052 int temp_offset;
0053
0054 u8 int_reset_reg, int_reset_mask;
0055 u8 sleep_reg, sleep_mask;
0056 u8 bw_reg, bw_mask, bw_offset;
0057 u8 scale_reg, scale_mask;
0058 u8 power_reg, power_mask, lowpower_val;
0059 u8 int_enable_reg, int_enable_mask;
0060 u8 softreset_reg, softreset_val;
0061
0062 int (*chip_config)(struct bma180_data *data);
0063 void (*chip_disable)(struct bma180_data *data);
0064 };
0065
0066
0067 #define BMA023_CTRL_REG0 0x0a
0068 #define BMA023_CTRL_REG1 0x0b
0069 #define BMA023_CTRL_REG2 0x14
0070 #define BMA023_CTRL_REG3 0x15
0071
0072 #define BMA023_RANGE_MASK GENMASK(4, 3)
0073 #define BMA023_BW_MASK GENMASK(2, 0)
0074 #define BMA023_SLEEP BIT(0)
0075 #define BMA023_INT_RESET_MASK BIT(6)
0076 #define BMA023_NEW_DATA_INT BIT(5)
0077 #define BMA023_RESET_VAL BIT(1)
0078
0079 #define BMA180_CHIP_ID 0x00
0080 #define BMA180_ACC_X_LSB 0x02
0081 #define BMA180_TEMP 0x08
0082 #define BMA180_CTRL_REG0 0x0d
0083 #define BMA180_RESET 0x10
0084 #define BMA180_BW_TCS 0x20
0085 #define BMA180_CTRL_REG3 0x21
0086 #define BMA180_TCO_Z 0x30
0087 #define BMA180_OFFSET_LSB1 0x35
0088
0089
0090 #define BMA180_DIS_WAKE_UP BIT(0)
0091 #define BMA180_SLEEP BIT(1)
0092 #define BMA180_EE_W BIT(4)
0093 #define BMA180_RESET_INT BIT(6)
0094
0095
0096 #define BMA180_NEW_DATA_INT BIT(1)
0097
0098
0099 #define BMA180_SMP_SKIP BIT(0)
0100
0101
0102 #define BMA180_RANGE 0x0e
0103 #define BMA180_BW 0xf0
0104 #define BMA180_MODE_CONFIG 0x03
0105
0106
0107 #define BMA180_RESET_VAL 0xb6
0108
0109 #define BMA023_ID_REG_VAL 0x02
0110 #define BMA180_ID_REG_VAL 0x03
0111 #define BMA250_ID_REG_VAL 0x03
0112
0113
0114 #define BMA180_LOW_POWER 0x03
0115
0116 #define BMA250_RANGE_REG 0x0f
0117 #define BMA250_BW_REG 0x10
0118 #define BMA250_POWER_REG 0x11
0119 #define BMA250_RESET_REG 0x14
0120 #define BMA250_INT_ENABLE_REG 0x17
0121 #define BMA250_INT_MAP_REG 0x1a
0122 #define BMA250_INT_RESET_REG 0x21
0123
0124 #define BMA250_RANGE_MASK GENMASK(3, 0)
0125 #define BMA250_BW_MASK GENMASK(4, 0)
0126 #define BMA250_BW_OFFSET 8
0127 #define BMA250_SUSPEND_MASK BIT(7)
0128 #define BMA250_LOWPOWER_MASK BIT(6)
0129 #define BMA250_DATA_INTEN_MASK BIT(4)
0130 #define BMA250_INT1_DATA_MASK BIT(0)
0131 #define BMA250_INT_RESET_MASK BIT(7)
0132
0133 struct bma180_data {
0134 struct regulator *vdd_supply;
0135 struct regulator *vddio_supply;
0136 struct i2c_client *client;
0137 struct iio_trigger *trig;
0138 const struct bma180_part_info *part_info;
0139 struct iio_mount_matrix orientation;
0140 struct mutex mutex;
0141 bool sleep_state;
0142 int scale;
0143 int bw;
0144 bool pmode;
0145
0146 struct {
0147 s16 chan[4];
0148 s64 timestamp __aligned(8);
0149 } scan;
0150 };
0151
0152 enum bma180_chan {
0153 AXIS_X,
0154 AXIS_Y,
0155 AXIS_Z,
0156 TEMP
0157 };
0158
0159 static int bma023_bw_table[] = { 25, 50, 100, 190, 375, 750, 1500 };
0160 static int bma023_scale_table[] = { 2452, 4903, 9709, };
0161
0162 static int bma180_bw_table[] = { 10, 20, 40, 75, 150, 300 };
0163 static int bma180_scale_table[] = { 1275, 1863, 2452, 3727, 4903, 9709, 19417 };
0164
0165 static int bma250_bw_table[] = { 8, 16, 31, 63, 125, 250, 500, 1000 };
0166 static int bma250_scale_table[] = { 0, 0, 0, 38344, 0, 76590, 0, 0, 153180, 0,
0167 0, 0, 306458 };
0168
0169 static int bma180_get_data_reg(struct bma180_data *data, enum bma180_chan chan)
0170 {
0171 int ret;
0172
0173 if (data->sleep_state)
0174 return -EBUSY;
0175
0176 switch (chan) {
0177 case TEMP:
0178 ret = i2c_smbus_read_byte_data(data->client, BMA180_TEMP);
0179 if (ret < 0)
0180 dev_err(&data->client->dev, "failed to read temp register\n");
0181 break;
0182 default:
0183 ret = i2c_smbus_read_word_data(data->client,
0184 BMA180_ACC_X_LSB + chan * 2);
0185 if (ret < 0)
0186 dev_err(&data->client->dev,
0187 "failed to read accel_%c register\n",
0188 'x' + chan);
0189 }
0190
0191 return ret;
0192 }
0193
0194 static int bma180_set_bits(struct bma180_data *data, u8 reg, u8 mask, u8 val)
0195 {
0196 int ret = i2c_smbus_read_byte_data(data->client, reg);
0197 u8 reg_val = (ret & ~mask) | (val << (ffs(mask) - 1));
0198
0199 if (ret < 0)
0200 return ret;
0201
0202 return i2c_smbus_write_byte_data(data->client, reg, reg_val);
0203 }
0204
0205 static int bma180_reset_intr(struct bma180_data *data)
0206 {
0207 int ret = bma180_set_bits(data, data->part_info->int_reset_reg,
0208 data->part_info->int_reset_mask, 1);
0209
0210 if (ret)
0211 dev_err(&data->client->dev, "failed to reset interrupt\n");
0212
0213 return ret;
0214 }
0215
0216 static int bma180_set_new_data_intr_state(struct bma180_data *data, bool state)
0217 {
0218 int ret = bma180_set_bits(data, data->part_info->int_enable_reg,
0219 data->part_info->int_enable_mask, state);
0220 if (ret)
0221 goto err;
0222 ret = bma180_reset_intr(data);
0223 if (ret)
0224 goto err;
0225
0226 return 0;
0227
0228 err:
0229 dev_err(&data->client->dev,
0230 "failed to set new data interrupt state %d\n", state);
0231 return ret;
0232 }
0233
0234 static int bma180_set_sleep_state(struct bma180_data *data, bool state)
0235 {
0236 int ret = bma180_set_bits(data, data->part_info->sleep_reg,
0237 data->part_info->sleep_mask, state);
0238
0239 if (ret) {
0240 dev_err(&data->client->dev,
0241 "failed to set sleep state %d\n", state);
0242 return ret;
0243 }
0244 data->sleep_state = state;
0245
0246 return 0;
0247 }
0248
0249 static int bma180_set_ee_writing_state(struct bma180_data *data, bool state)
0250 {
0251 int ret = bma180_set_bits(data, BMA180_CTRL_REG0, BMA180_EE_W, state);
0252
0253 if (ret)
0254 dev_err(&data->client->dev,
0255 "failed to set ee writing state %d\n", state);
0256
0257 return ret;
0258 }
0259
0260 static int bma180_set_bw(struct bma180_data *data, int val)
0261 {
0262 int ret, i;
0263
0264 if (data->sleep_state)
0265 return -EBUSY;
0266
0267 for (i = 0; i < data->part_info->num_bw; ++i) {
0268 if (data->part_info->bw_table[i] == val) {
0269 ret = bma180_set_bits(data, data->part_info->bw_reg,
0270 data->part_info->bw_mask,
0271 i + data->part_info->bw_offset);
0272 if (ret) {
0273 dev_err(&data->client->dev,
0274 "failed to set bandwidth\n");
0275 return ret;
0276 }
0277 data->bw = val;
0278 return 0;
0279 }
0280 }
0281
0282 return -EINVAL;
0283 }
0284
0285 static int bma180_set_scale(struct bma180_data *data, int val)
0286 {
0287 int ret, i;
0288
0289 if (data->sleep_state)
0290 return -EBUSY;
0291
0292 for (i = 0; i < data->part_info->num_scales; ++i)
0293 if (data->part_info->scale_table[i] == val) {
0294 ret = bma180_set_bits(data, data->part_info->scale_reg,
0295 data->part_info->scale_mask, i);
0296 if (ret) {
0297 dev_err(&data->client->dev,
0298 "failed to set scale\n");
0299 return ret;
0300 }
0301 data->scale = val;
0302 return 0;
0303 }
0304
0305 return -EINVAL;
0306 }
0307
0308 static int bma180_set_pmode(struct bma180_data *data, bool mode)
0309 {
0310 u8 reg_val = mode ? data->part_info->lowpower_val : 0;
0311 int ret = bma180_set_bits(data, data->part_info->power_reg,
0312 data->part_info->power_mask, reg_val);
0313
0314 if (ret) {
0315 dev_err(&data->client->dev, "failed to set power mode\n");
0316 return ret;
0317 }
0318 data->pmode = mode;
0319
0320 return 0;
0321 }
0322
0323 static int bma180_soft_reset(struct bma180_data *data)
0324 {
0325 int ret = i2c_smbus_write_byte_data(data->client,
0326 data->part_info->softreset_reg,
0327 data->part_info->softreset_val);
0328
0329 if (ret)
0330 dev_err(&data->client->dev, "failed to reset the chip\n");
0331
0332 return ret;
0333 }
0334
0335 static int bma180_chip_init(struct bma180_data *data)
0336 {
0337
0338 int ret = i2c_smbus_read_byte_data(data->client, BMA180_CHIP_ID);
0339
0340 if (ret < 0)
0341 return ret;
0342 if (ret != data->part_info->chip_id) {
0343 dev_err(&data->client->dev, "wrong chip ID %d expected %d\n",
0344 ret, data->part_info->chip_id);
0345 return -ENODEV;
0346 }
0347
0348 ret = bma180_soft_reset(data);
0349 if (ret)
0350 return ret;
0351
0352
0353
0354
0355 msleep(20);
0356
0357 return bma180_set_new_data_intr_state(data, false);
0358 }
0359
0360 static int bma023_chip_config(struct bma180_data *data)
0361 {
0362 int ret = bma180_chip_init(data);
0363
0364 if (ret)
0365 goto err;
0366
0367 ret = bma180_set_bw(data, 50);
0368 if (ret)
0369 goto err;
0370 ret = bma180_set_scale(data, 2452);
0371 if (ret)
0372 goto err;
0373
0374 return 0;
0375
0376 err:
0377 dev_err(&data->client->dev, "failed to config the chip\n");
0378 return ret;
0379 }
0380
0381 static int bma180_chip_config(struct bma180_data *data)
0382 {
0383 int ret = bma180_chip_init(data);
0384
0385 if (ret)
0386 goto err;
0387 ret = bma180_set_pmode(data, false);
0388 if (ret)
0389 goto err;
0390 ret = bma180_set_bits(data, BMA180_CTRL_REG0, BMA180_DIS_WAKE_UP, 1);
0391 if (ret)
0392 goto err;
0393 ret = bma180_set_ee_writing_state(data, true);
0394 if (ret)
0395 goto err;
0396 ret = bma180_set_bits(data, BMA180_OFFSET_LSB1, BMA180_SMP_SKIP, 1);
0397 if (ret)
0398 goto err;
0399 ret = bma180_set_bw(data, 20);
0400 if (ret)
0401 goto err;
0402 ret = bma180_set_scale(data, 2452);
0403 if (ret)
0404 goto err;
0405
0406 return 0;
0407
0408 err:
0409 dev_err(&data->client->dev, "failed to config the chip\n");
0410 return ret;
0411 }
0412
0413 static int bma250_chip_config(struct bma180_data *data)
0414 {
0415 int ret = bma180_chip_init(data);
0416
0417 if (ret)
0418 goto err;
0419 ret = bma180_set_pmode(data, false);
0420 if (ret)
0421 goto err;
0422 ret = bma180_set_bw(data, 16);
0423 if (ret)
0424 goto err;
0425 ret = bma180_set_scale(data, 38344);
0426 if (ret)
0427 goto err;
0428
0429
0430
0431
0432 ret = bma180_set_bits(data, BMA250_INT_MAP_REG, BMA250_INT1_DATA_MASK, 1);
0433 if (ret)
0434 goto err;
0435
0436 return 0;
0437
0438 err:
0439 dev_err(&data->client->dev, "failed to config the chip\n");
0440 return ret;
0441 }
0442
0443 static void bma023_chip_disable(struct bma180_data *data)
0444 {
0445 if (bma180_set_sleep_state(data, true))
0446 goto err;
0447
0448 return;
0449
0450 err:
0451 dev_err(&data->client->dev, "failed to disable the chip\n");
0452 }
0453
0454 static void bma180_chip_disable(struct bma180_data *data)
0455 {
0456 if (bma180_set_new_data_intr_state(data, false))
0457 goto err;
0458 if (bma180_set_ee_writing_state(data, false))
0459 goto err;
0460 if (bma180_set_sleep_state(data, true))
0461 goto err;
0462
0463 return;
0464
0465 err:
0466 dev_err(&data->client->dev, "failed to disable the chip\n");
0467 }
0468
0469 static void bma250_chip_disable(struct bma180_data *data)
0470 {
0471 if (bma180_set_new_data_intr_state(data, false))
0472 goto err;
0473 if (bma180_set_sleep_state(data, true))
0474 goto err;
0475
0476 return;
0477
0478 err:
0479 dev_err(&data->client->dev, "failed to disable the chip\n");
0480 }
0481
0482 static ssize_t bma180_show_avail(char *buf, const int *vals, unsigned int n,
0483 bool micros)
0484 {
0485 size_t len = 0;
0486 int i;
0487
0488 for (i = 0; i < n; i++) {
0489 if (!vals[i])
0490 continue;
0491 len += scnprintf(buf + len, PAGE_SIZE - len,
0492 micros ? "0.%06d " : "%d ", vals[i]);
0493 }
0494 buf[len - 1] = '\n';
0495
0496 return len;
0497 }
0498
0499 static ssize_t bma180_show_filter_freq_avail(struct device *dev,
0500 struct device_attribute *attr, char *buf)
0501 {
0502 struct bma180_data *data = iio_priv(dev_to_iio_dev(dev));
0503
0504 return bma180_show_avail(buf, data->part_info->bw_table,
0505 data->part_info->num_bw, false);
0506 }
0507
0508 static ssize_t bma180_show_scale_avail(struct device *dev,
0509 struct device_attribute *attr, char *buf)
0510 {
0511 struct bma180_data *data = iio_priv(dev_to_iio_dev(dev));
0512
0513 return bma180_show_avail(buf, data->part_info->scale_table,
0514 data->part_info->num_scales, true);
0515 }
0516
0517 static IIO_DEVICE_ATTR(in_accel_filter_low_pass_3db_frequency_available,
0518 S_IRUGO, bma180_show_filter_freq_avail, NULL, 0);
0519
0520 static IIO_DEVICE_ATTR(in_accel_scale_available,
0521 S_IRUGO, bma180_show_scale_avail, NULL, 0);
0522
0523 static struct attribute *bma180_attributes[] = {
0524 &iio_dev_attr_in_accel_filter_low_pass_3db_frequency_available.
0525 dev_attr.attr,
0526 &iio_dev_attr_in_accel_scale_available.dev_attr.attr,
0527 NULL,
0528 };
0529
0530 static const struct attribute_group bma180_attrs_group = {
0531 .attrs = bma180_attributes,
0532 };
0533
0534 static int bma180_read_raw(struct iio_dev *indio_dev,
0535 struct iio_chan_spec const *chan, int *val, int *val2,
0536 long mask)
0537 {
0538 struct bma180_data *data = iio_priv(indio_dev);
0539 int ret;
0540
0541 switch (mask) {
0542 case IIO_CHAN_INFO_RAW:
0543 ret = iio_device_claim_direct_mode(indio_dev);
0544 if (ret)
0545 return ret;
0546
0547 mutex_lock(&data->mutex);
0548 ret = bma180_get_data_reg(data, chan->scan_index);
0549 mutex_unlock(&data->mutex);
0550 iio_device_release_direct_mode(indio_dev);
0551 if (ret < 0)
0552 return ret;
0553 if (chan->scan_type.sign == 's') {
0554 *val = sign_extend32(ret >> chan->scan_type.shift,
0555 chan->scan_type.realbits - 1);
0556 } else {
0557 *val = ret;
0558 }
0559 return IIO_VAL_INT;
0560 case IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY:
0561 *val = data->bw;
0562 return IIO_VAL_INT;
0563 case IIO_CHAN_INFO_SCALE:
0564 switch (chan->type) {
0565 case IIO_ACCEL:
0566 *val = 0;
0567 *val2 = data->scale;
0568 return IIO_VAL_INT_PLUS_MICRO;
0569 case IIO_TEMP:
0570 *val = 500;
0571 return IIO_VAL_INT;
0572 default:
0573 return -EINVAL;
0574 }
0575 case IIO_CHAN_INFO_OFFSET:
0576 *val = data->part_info->temp_offset;
0577 return IIO_VAL_INT;
0578 default:
0579 return -EINVAL;
0580 }
0581 }
0582
0583 static int bma180_write_raw(struct iio_dev *indio_dev,
0584 struct iio_chan_spec const *chan, int val, int val2, long mask)
0585 {
0586 struct bma180_data *data = iio_priv(indio_dev);
0587 int ret;
0588
0589 switch (mask) {
0590 case IIO_CHAN_INFO_SCALE:
0591 if (val)
0592 return -EINVAL;
0593 mutex_lock(&data->mutex);
0594 ret = bma180_set_scale(data, val2);
0595 mutex_unlock(&data->mutex);
0596 return ret;
0597 case IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY:
0598 if (val2)
0599 return -EINVAL;
0600 mutex_lock(&data->mutex);
0601 ret = bma180_set_bw(data, val);
0602 mutex_unlock(&data->mutex);
0603 return ret;
0604 default:
0605 return -EINVAL;
0606 }
0607 }
0608
0609 static const struct iio_info bma180_info = {
0610 .attrs = &bma180_attrs_group,
0611 .read_raw = bma180_read_raw,
0612 .write_raw = bma180_write_raw,
0613 };
0614
0615 static const char * const bma180_power_modes[] = { "low_noise", "low_power" };
0616
0617 static int bma180_get_power_mode(struct iio_dev *indio_dev,
0618 const struct iio_chan_spec *chan)
0619 {
0620 struct bma180_data *data = iio_priv(indio_dev);
0621
0622 return data->pmode;
0623 }
0624
0625 static int bma180_set_power_mode(struct iio_dev *indio_dev,
0626 const struct iio_chan_spec *chan, unsigned int mode)
0627 {
0628 struct bma180_data *data = iio_priv(indio_dev);
0629 int ret;
0630
0631 mutex_lock(&data->mutex);
0632 ret = bma180_set_pmode(data, mode);
0633 mutex_unlock(&data->mutex);
0634
0635 return ret;
0636 }
0637
0638 static const struct iio_mount_matrix *
0639 bma180_accel_get_mount_matrix(const struct iio_dev *indio_dev,
0640 const struct iio_chan_spec *chan)
0641 {
0642 struct bma180_data *data = iio_priv(indio_dev);
0643
0644 return &data->orientation;
0645 }
0646
0647 static const struct iio_enum bma180_power_mode_enum = {
0648 .items = bma180_power_modes,
0649 .num_items = ARRAY_SIZE(bma180_power_modes),
0650 .get = bma180_get_power_mode,
0651 .set = bma180_set_power_mode,
0652 };
0653
0654 static const struct iio_chan_spec_ext_info bma023_ext_info[] = {
0655 IIO_MOUNT_MATRIX(IIO_SHARED_BY_DIR, bma180_accel_get_mount_matrix),
0656 { }
0657 };
0658
0659 static const struct iio_chan_spec_ext_info bma180_ext_info[] = {
0660 IIO_ENUM("power_mode", IIO_SHARED_BY_TYPE, &bma180_power_mode_enum),
0661 IIO_ENUM_AVAILABLE("power_mode", IIO_SHARED_BY_TYPE, &bma180_power_mode_enum),
0662 IIO_MOUNT_MATRIX(IIO_SHARED_BY_DIR, bma180_accel_get_mount_matrix),
0663 { }
0664 };
0665
0666 #define BMA023_ACC_CHANNEL(_axis, _bits) { \
0667 .type = IIO_ACCEL, \
0668 .modified = 1, \
0669 .channel2 = IIO_MOD_##_axis, \
0670 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), \
0671 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE) | \
0672 BIT(IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY), \
0673 .scan_index = AXIS_##_axis, \
0674 .scan_type = { \
0675 .sign = 's', \
0676 .realbits = _bits, \
0677 .storagebits = 16, \
0678 .shift = 16 - _bits, \
0679 }, \
0680 .ext_info = bma023_ext_info, \
0681 }
0682
0683 #define BMA150_TEMP_CHANNEL { \
0684 .type = IIO_TEMP, \
0685 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | \
0686 BIT(IIO_CHAN_INFO_SCALE) | BIT(IIO_CHAN_INFO_OFFSET), \
0687 .scan_index = TEMP, \
0688 .scan_type = { \
0689 .sign = 'u', \
0690 .realbits = 8, \
0691 .storagebits = 16, \
0692 }, \
0693 }
0694
0695 #define BMA180_ACC_CHANNEL(_axis, _bits) { \
0696 .type = IIO_ACCEL, \
0697 .modified = 1, \
0698 .channel2 = IIO_MOD_##_axis, \
0699 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), \
0700 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE) | \
0701 BIT(IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY), \
0702 .scan_index = AXIS_##_axis, \
0703 .scan_type = { \
0704 .sign = 's', \
0705 .realbits = _bits, \
0706 .storagebits = 16, \
0707 .shift = 16 - _bits, \
0708 }, \
0709 .ext_info = bma180_ext_info, \
0710 }
0711
0712 #define BMA180_TEMP_CHANNEL { \
0713 .type = IIO_TEMP, \
0714 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | \
0715 BIT(IIO_CHAN_INFO_SCALE) | BIT(IIO_CHAN_INFO_OFFSET), \
0716 .scan_index = TEMP, \
0717 .scan_type = { \
0718 .sign = 's', \
0719 .realbits = 8, \
0720 .storagebits = 16, \
0721 }, \
0722 }
0723
0724 static const struct iio_chan_spec bma023_channels[] = {
0725 BMA023_ACC_CHANNEL(X, 10),
0726 BMA023_ACC_CHANNEL(Y, 10),
0727 BMA023_ACC_CHANNEL(Z, 10),
0728 IIO_CHAN_SOFT_TIMESTAMP(4),
0729 };
0730
0731 static const struct iio_chan_spec bma150_channels[] = {
0732 BMA023_ACC_CHANNEL(X, 10),
0733 BMA023_ACC_CHANNEL(Y, 10),
0734 BMA023_ACC_CHANNEL(Z, 10),
0735 BMA150_TEMP_CHANNEL,
0736 IIO_CHAN_SOFT_TIMESTAMP(4),
0737 };
0738
0739 static const struct iio_chan_spec bma180_channels[] = {
0740 BMA180_ACC_CHANNEL(X, 14),
0741 BMA180_ACC_CHANNEL(Y, 14),
0742 BMA180_ACC_CHANNEL(Z, 14),
0743 BMA180_TEMP_CHANNEL,
0744 IIO_CHAN_SOFT_TIMESTAMP(4),
0745 };
0746
0747 static const struct iio_chan_spec bma250_channels[] = {
0748 BMA180_ACC_CHANNEL(X, 10),
0749 BMA180_ACC_CHANNEL(Y, 10),
0750 BMA180_ACC_CHANNEL(Z, 10),
0751 BMA180_TEMP_CHANNEL,
0752 IIO_CHAN_SOFT_TIMESTAMP(4),
0753 };
0754
0755 static const struct bma180_part_info bma180_part_info[] = {
0756 [BMA023] = {
0757 .chip_id = BMA023_ID_REG_VAL,
0758 .channels = bma023_channels,
0759 .num_channels = ARRAY_SIZE(bma023_channels),
0760 .scale_table = bma023_scale_table,
0761 .num_scales = ARRAY_SIZE(bma023_scale_table),
0762 .bw_table = bma023_bw_table,
0763 .num_bw = ARRAY_SIZE(bma023_bw_table),
0764
0765 .temp_offset = 0,
0766 .int_reset_reg = BMA023_CTRL_REG0,
0767 .int_reset_mask = BMA023_INT_RESET_MASK,
0768 .sleep_reg = BMA023_CTRL_REG0,
0769 .sleep_mask = BMA023_SLEEP,
0770 .bw_reg = BMA023_CTRL_REG2,
0771 .bw_mask = BMA023_BW_MASK,
0772 .scale_reg = BMA023_CTRL_REG2,
0773 .scale_mask = BMA023_RANGE_MASK,
0774
0775 .power_reg = 0,
0776 .power_mask = 0,
0777 .lowpower_val = 0,
0778 .int_enable_reg = BMA023_CTRL_REG3,
0779 .int_enable_mask = BMA023_NEW_DATA_INT,
0780 .softreset_reg = BMA023_CTRL_REG0,
0781 .softreset_val = BMA023_RESET_VAL,
0782 .chip_config = bma023_chip_config,
0783 .chip_disable = bma023_chip_disable,
0784 },
0785 [BMA150] = {
0786 .chip_id = BMA023_ID_REG_VAL,
0787 .channels = bma150_channels,
0788 .num_channels = ARRAY_SIZE(bma150_channels),
0789 .scale_table = bma023_scale_table,
0790 .num_scales = ARRAY_SIZE(bma023_scale_table),
0791 .bw_table = bma023_bw_table,
0792 .num_bw = ARRAY_SIZE(bma023_bw_table),
0793 .temp_offset = -60,
0794 .int_reset_reg = BMA023_CTRL_REG0,
0795 .int_reset_mask = BMA023_INT_RESET_MASK,
0796 .sleep_reg = BMA023_CTRL_REG0,
0797 .sleep_mask = BMA023_SLEEP,
0798 .bw_reg = BMA023_CTRL_REG2,
0799 .bw_mask = BMA023_BW_MASK,
0800 .scale_reg = BMA023_CTRL_REG2,
0801 .scale_mask = BMA023_RANGE_MASK,
0802
0803 .power_reg = 0,
0804 .power_mask = 0,
0805 .lowpower_val = 0,
0806 .int_enable_reg = BMA023_CTRL_REG3,
0807 .int_enable_mask = BMA023_NEW_DATA_INT,
0808 .softreset_reg = BMA023_CTRL_REG0,
0809 .softreset_val = BMA023_RESET_VAL,
0810 .chip_config = bma023_chip_config,
0811 .chip_disable = bma023_chip_disable,
0812 },
0813 [BMA180] = {
0814 .chip_id = BMA180_ID_REG_VAL,
0815 .channels = bma180_channels,
0816 .num_channels = ARRAY_SIZE(bma180_channels),
0817 .scale_table = bma180_scale_table,
0818 .num_scales = ARRAY_SIZE(bma180_scale_table),
0819 .bw_table = bma180_bw_table,
0820 .num_bw = ARRAY_SIZE(bma180_bw_table),
0821 .temp_offset = 48,
0822 .int_reset_reg = BMA180_CTRL_REG0,
0823 .int_reset_mask = BMA180_RESET_INT,
0824 .sleep_reg = BMA180_CTRL_REG0,
0825 .sleep_mask = BMA180_SLEEP,
0826 .bw_reg = BMA180_BW_TCS,
0827 .bw_mask = BMA180_BW,
0828 .scale_reg = BMA180_OFFSET_LSB1,
0829 .scale_mask = BMA180_RANGE,
0830 .power_reg = BMA180_TCO_Z,
0831 .power_mask = BMA180_MODE_CONFIG,
0832 .lowpower_val = BMA180_LOW_POWER,
0833 .int_enable_reg = BMA180_CTRL_REG3,
0834 .int_enable_mask = BMA180_NEW_DATA_INT,
0835 .softreset_reg = BMA180_RESET,
0836 .softreset_val = BMA180_RESET_VAL,
0837 .chip_config = bma180_chip_config,
0838 .chip_disable = bma180_chip_disable,
0839 },
0840 [BMA250] = {
0841 .chip_id = BMA250_ID_REG_VAL,
0842 .channels = bma250_channels,
0843 .num_channels = ARRAY_SIZE(bma250_channels),
0844 .scale_table = bma250_scale_table,
0845 .num_scales = ARRAY_SIZE(bma250_scale_table),
0846 .bw_table = bma250_bw_table,
0847 .num_bw = ARRAY_SIZE(bma250_bw_table),
0848 .temp_offset = 48,
0849 .int_reset_reg = BMA250_INT_RESET_REG,
0850 .int_reset_mask = BMA250_INT_RESET_MASK,
0851 .sleep_reg = BMA250_POWER_REG,
0852 .sleep_mask = BMA250_SUSPEND_MASK,
0853 .bw_reg = BMA250_BW_REG,
0854 .bw_mask = BMA250_BW_MASK,
0855 .bw_offset = BMA250_BW_OFFSET,
0856 .scale_reg = BMA250_RANGE_REG,
0857 .scale_mask = BMA250_RANGE_MASK,
0858 .power_reg = BMA250_POWER_REG,
0859 .power_mask = BMA250_LOWPOWER_MASK,
0860 .lowpower_val = 1,
0861 .int_enable_reg = BMA250_INT_ENABLE_REG,
0862 .int_enable_mask = BMA250_DATA_INTEN_MASK,
0863 .softreset_reg = BMA250_RESET_REG,
0864 .softreset_val = BMA180_RESET_VAL,
0865 .chip_config = bma250_chip_config,
0866 .chip_disable = bma250_chip_disable,
0867 },
0868 };
0869
0870 static irqreturn_t bma180_trigger_handler(int irq, void *p)
0871 {
0872 struct iio_poll_func *pf = p;
0873 struct iio_dev *indio_dev = pf->indio_dev;
0874 struct bma180_data *data = iio_priv(indio_dev);
0875 s64 time_ns = iio_get_time_ns(indio_dev);
0876 int bit, ret, i = 0;
0877
0878 mutex_lock(&data->mutex);
0879
0880 for_each_set_bit(bit, indio_dev->active_scan_mask,
0881 indio_dev->masklength) {
0882 ret = bma180_get_data_reg(data, bit);
0883 if (ret < 0) {
0884 mutex_unlock(&data->mutex);
0885 goto err;
0886 }
0887 data->scan.chan[i++] = ret;
0888 }
0889
0890 mutex_unlock(&data->mutex);
0891
0892 iio_push_to_buffers_with_timestamp(indio_dev, &data->scan, time_ns);
0893 err:
0894 iio_trigger_notify_done(indio_dev->trig);
0895
0896 return IRQ_HANDLED;
0897 }
0898
0899 static int bma180_data_rdy_trigger_set_state(struct iio_trigger *trig,
0900 bool state)
0901 {
0902 struct iio_dev *indio_dev = iio_trigger_get_drvdata(trig);
0903 struct bma180_data *data = iio_priv(indio_dev);
0904
0905 return bma180_set_new_data_intr_state(data, state);
0906 }
0907
0908 static void bma180_trig_reen(struct iio_trigger *trig)
0909 {
0910 struct iio_dev *indio_dev = iio_trigger_get_drvdata(trig);
0911 struct bma180_data *data = iio_priv(indio_dev);
0912 int ret;
0913
0914 ret = bma180_reset_intr(data);
0915 if (ret)
0916 dev_err(&data->client->dev, "failed to reset interrupt\n");
0917 }
0918
0919 static const struct iio_trigger_ops bma180_trigger_ops = {
0920 .set_trigger_state = bma180_data_rdy_trigger_set_state,
0921 .reenable = bma180_trig_reen,
0922 };
0923
0924 static int bma180_probe(struct i2c_client *client,
0925 const struct i2c_device_id *id)
0926 {
0927 struct device *dev = &client->dev;
0928 struct bma180_data *data;
0929 struct iio_dev *indio_dev;
0930 enum chip_ids chip;
0931 int ret;
0932
0933 indio_dev = devm_iio_device_alloc(dev, sizeof(*data));
0934 if (!indio_dev)
0935 return -ENOMEM;
0936
0937 data = iio_priv(indio_dev);
0938 i2c_set_clientdata(client, indio_dev);
0939 data->client = client;
0940 if (client->dev.of_node)
0941 chip = (uintptr_t)of_device_get_match_data(dev);
0942 else
0943 chip = id->driver_data;
0944 data->part_info = &bma180_part_info[chip];
0945
0946 ret = iio_read_mount_matrix(dev, &data->orientation);
0947 if (ret)
0948 return ret;
0949
0950 data->vdd_supply = devm_regulator_get(dev, "vdd");
0951 if (IS_ERR(data->vdd_supply))
0952 return dev_err_probe(dev, PTR_ERR(data->vdd_supply),
0953 "Failed to get vdd regulator\n");
0954
0955 data->vddio_supply = devm_regulator_get(dev, "vddio");
0956 if (IS_ERR(data->vddio_supply))
0957 return dev_err_probe(dev, PTR_ERR(data->vddio_supply),
0958 "Failed to get vddio regulator\n");
0959
0960
0961 ret = regulator_set_voltage(data->vdd_supply, 1620000, 3600000);
0962 if (ret)
0963 return ret;
0964 ret = regulator_set_voltage(data->vddio_supply, 1200000, 3600000);
0965 if (ret)
0966 return ret;
0967 ret = regulator_enable(data->vdd_supply);
0968 if (ret) {
0969 dev_err(dev, "Failed to enable vdd regulator: %d\n", ret);
0970 return ret;
0971 }
0972 ret = regulator_enable(data->vddio_supply);
0973 if (ret) {
0974 dev_err(dev, "Failed to enable vddio regulator: %d\n", ret);
0975 goto err_disable_vdd;
0976 }
0977
0978 usleep_range(3000, 5000);
0979
0980 ret = data->part_info->chip_config(data);
0981 if (ret < 0)
0982 goto err_chip_disable;
0983
0984 mutex_init(&data->mutex);
0985 indio_dev->channels = data->part_info->channels;
0986 indio_dev->num_channels = data->part_info->num_channels;
0987 indio_dev->name = id->name;
0988 indio_dev->modes = INDIO_DIRECT_MODE;
0989 indio_dev->info = &bma180_info;
0990
0991 if (client->irq > 0) {
0992 data->trig = iio_trigger_alloc(dev, "%s-dev%d", indio_dev->name,
0993 iio_device_id(indio_dev));
0994 if (!data->trig) {
0995 ret = -ENOMEM;
0996 goto err_chip_disable;
0997 }
0998
0999 ret = devm_request_irq(dev, client->irq,
1000 iio_trigger_generic_data_rdy_poll, IRQF_TRIGGER_RISING,
1001 "bma180_event", data->trig);
1002 if (ret) {
1003 dev_err(dev, "unable to request IRQ\n");
1004 goto err_trigger_free;
1005 }
1006
1007 data->trig->ops = &bma180_trigger_ops;
1008 iio_trigger_set_drvdata(data->trig, indio_dev);
1009
1010 ret = iio_trigger_register(data->trig);
1011 if (ret)
1012 goto err_trigger_free;
1013
1014 indio_dev->trig = iio_trigger_get(data->trig);
1015 }
1016
1017 ret = iio_triggered_buffer_setup(indio_dev, NULL,
1018 bma180_trigger_handler, NULL);
1019 if (ret < 0) {
1020 dev_err(dev, "unable to setup iio triggered buffer\n");
1021 goto err_trigger_unregister;
1022 }
1023
1024 ret = iio_device_register(indio_dev);
1025 if (ret < 0) {
1026 dev_err(dev, "unable to register iio device\n");
1027 goto err_buffer_cleanup;
1028 }
1029
1030 return 0;
1031
1032 err_buffer_cleanup:
1033 iio_triggered_buffer_cleanup(indio_dev);
1034 err_trigger_unregister:
1035 if (data->trig)
1036 iio_trigger_unregister(data->trig);
1037 err_trigger_free:
1038 iio_trigger_free(data->trig);
1039 err_chip_disable:
1040 data->part_info->chip_disable(data);
1041 regulator_disable(data->vddio_supply);
1042 err_disable_vdd:
1043 regulator_disable(data->vdd_supply);
1044
1045 return ret;
1046 }
1047
1048 static int bma180_remove(struct i2c_client *client)
1049 {
1050 struct iio_dev *indio_dev = i2c_get_clientdata(client);
1051 struct bma180_data *data = iio_priv(indio_dev);
1052
1053 iio_device_unregister(indio_dev);
1054 iio_triggered_buffer_cleanup(indio_dev);
1055 if (data->trig) {
1056 iio_trigger_unregister(data->trig);
1057 iio_trigger_free(data->trig);
1058 }
1059
1060 mutex_lock(&data->mutex);
1061 data->part_info->chip_disable(data);
1062 mutex_unlock(&data->mutex);
1063 regulator_disable(data->vddio_supply);
1064 regulator_disable(data->vdd_supply);
1065
1066 return 0;
1067 }
1068
1069 static int bma180_suspend(struct device *dev)
1070 {
1071 struct iio_dev *indio_dev = i2c_get_clientdata(to_i2c_client(dev));
1072 struct bma180_data *data = iio_priv(indio_dev);
1073 int ret;
1074
1075 mutex_lock(&data->mutex);
1076 ret = bma180_set_sleep_state(data, true);
1077 mutex_unlock(&data->mutex);
1078
1079 return ret;
1080 }
1081
1082 static int bma180_resume(struct device *dev)
1083 {
1084 struct iio_dev *indio_dev = i2c_get_clientdata(to_i2c_client(dev));
1085 struct bma180_data *data = iio_priv(indio_dev);
1086 int ret;
1087
1088 mutex_lock(&data->mutex);
1089 ret = bma180_set_sleep_state(data, false);
1090 mutex_unlock(&data->mutex);
1091
1092 return ret;
1093 }
1094
1095 static DEFINE_SIMPLE_DEV_PM_OPS(bma180_pm_ops, bma180_suspend, bma180_resume);
1096
1097 static const struct i2c_device_id bma180_ids[] = {
1098 { "bma023", BMA023 },
1099 { "bma150", BMA150 },
1100 { "bma180", BMA180 },
1101 { "bma250", BMA250 },
1102 { "smb380", BMA150 },
1103 { }
1104 };
1105
1106 MODULE_DEVICE_TABLE(i2c, bma180_ids);
1107
1108 static const struct of_device_id bma180_of_match[] = {
1109 {
1110 .compatible = "bosch,bma023",
1111 .data = (void *)BMA023
1112 },
1113 {
1114 .compatible = "bosch,bma150",
1115 .data = (void *)BMA150
1116 },
1117 {
1118 .compatible = "bosch,bma180",
1119 .data = (void *)BMA180
1120 },
1121 {
1122 .compatible = "bosch,bma250",
1123 .data = (void *)BMA250
1124 },
1125 {
1126 .compatible = "bosch,smb380",
1127 .data = (void *)BMA150
1128 },
1129 { }
1130 };
1131 MODULE_DEVICE_TABLE(of, bma180_of_match);
1132
1133 static struct i2c_driver bma180_driver = {
1134 .driver = {
1135 .name = "bma180",
1136 .pm = pm_sleep_ptr(&bma180_pm_ops),
1137 .of_match_table = bma180_of_match,
1138 },
1139 .probe = bma180_probe,
1140 .remove = bma180_remove,
1141 .id_table = bma180_ids,
1142 };
1143
1144 module_i2c_driver(bma180_driver);
1145
1146 MODULE_AUTHOR("Kravchenko Oleksandr <x0199363@ti.com>");
1147 MODULE_AUTHOR("Texas Instruments, Inc.");
1148 MODULE_DESCRIPTION("Bosch BMA023/BMA1x0/BMA250 triaxial acceleration sensor");
1149 MODULE_LICENSE("GPL");