0001
0002
0003
0004
0005
0006
0007
0008
0009
0010 #include <linux/i2c.h>
0011 #include <linux/interrupt.h>
0012 #include <linux/kernel.h>
0013 #include <linux/module.h>
0014 #include <linux/delay.h>
0015 #include <linux/iio/buffer.h>
0016 #include <linux/iio/iio.h>
0017 #include <linux/iio/sysfs.h>
0018 #include <linux/iio/trigger.h>
0019 #include <linux/iio/triggered_buffer.h>
0020 #include <linux/iio/trigger_consumer.h>
0021
0022 #define STK8312_REG_XOUT 0x00
0023 #define STK8312_REG_YOUT 0x01
0024 #define STK8312_REG_ZOUT 0x02
0025 #define STK8312_REG_INTSU 0x06
0026 #define STK8312_REG_MODE 0x07
0027 #define STK8312_REG_SR 0x08
0028 #define STK8312_REG_STH 0x13
0029 #define STK8312_REG_RESET 0x20
0030 #define STK8312_REG_AFECTRL 0x24
0031 #define STK8312_REG_OTPADDR 0x3D
0032 #define STK8312_REG_OTPDATA 0x3E
0033 #define STK8312_REG_OTPCTRL 0x3F
0034
0035 #define STK8312_MODE_ACTIVE BIT(0)
0036 #define STK8312_MODE_STANDBY 0x00
0037 #define STK8312_MODE_INT_AH_PP 0xC0
0038 #define STK8312_DREADY_BIT BIT(4)
0039 #define STK8312_RNG_6G 1
0040 #define STK8312_RNG_SHIFT 6
0041 #define STK8312_RNG_MASK GENMASK(7, 6)
0042 #define STK8312_SR_MASK GENMASK(2, 0)
0043 #define STK8312_SR_400HZ_IDX 0
0044 #define STK8312_ALL_CHANNEL_MASK GENMASK(2, 0)
0045 #define STK8312_ALL_CHANNEL_SIZE 3
0046
0047 #define STK8312_DRIVER_NAME "stk8312"
0048 #define STK8312_IRQ_NAME "stk8312_event"
0049
0050
0051
0052
0053
0054
0055
0056
0057
0058
0059 #define STK8312_SCALE_AVAIL "0.4616 1.2311"
0060
0061 static const int stk8312_scale_table[][2] = {
0062 {0, 461600}, {1, 231100}
0063 };
0064
0065 static const struct {
0066 int val;
0067 int val2;
0068 } stk8312_samp_freq_table[] = {
0069 {400, 0}, {200, 0}, {100, 0}, {50, 0}, {25, 0},
0070 {12, 500000}, {6, 250000}, {3, 125000}
0071 };
0072
0073 #define STK8312_ACCEL_CHANNEL(index, reg, axis) { \
0074 .type = IIO_ACCEL, \
0075 .address = reg, \
0076 .modified = 1, \
0077 .channel2 = IIO_MOD_##axis, \
0078 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), \
0079 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE) | \
0080 BIT(IIO_CHAN_INFO_SAMP_FREQ), \
0081 .scan_index = index, \
0082 .scan_type = { \
0083 .sign = 's', \
0084 .realbits = 8, \
0085 .storagebits = 8, \
0086 .endianness = IIO_CPU, \
0087 }, \
0088 }
0089
0090 static const struct iio_chan_spec stk8312_channels[] = {
0091 STK8312_ACCEL_CHANNEL(0, STK8312_REG_XOUT, X),
0092 STK8312_ACCEL_CHANNEL(1, STK8312_REG_YOUT, Y),
0093 STK8312_ACCEL_CHANNEL(2, STK8312_REG_ZOUT, Z),
0094 IIO_CHAN_SOFT_TIMESTAMP(3),
0095 };
0096
0097 struct stk8312_data {
0098 struct i2c_client *client;
0099 struct mutex lock;
0100 u8 range;
0101 u8 sample_rate_idx;
0102 u8 mode;
0103 struct iio_trigger *dready_trig;
0104 bool dready_trigger_on;
0105
0106 struct {
0107 s8 chans[3];
0108 s64 timestamp __aligned(8);
0109 } scan;
0110 };
0111
0112 static IIO_CONST_ATTR(in_accel_scale_available, STK8312_SCALE_AVAIL);
0113
0114 static IIO_CONST_ATTR_SAMP_FREQ_AVAIL("3.125 6.25 12.5 25 50 100 200 400");
0115
0116 static struct attribute *stk8312_attributes[] = {
0117 &iio_const_attr_in_accel_scale_available.dev_attr.attr,
0118 &iio_const_attr_sampling_frequency_available.dev_attr.attr,
0119 NULL,
0120 };
0121
0122 static const struct attribute_group stk8312_attribute_group = {
0123 .attrs = stk8312_attributes
0124 };
0125
0126 static int stk8312_otp_init(struct stk8312_data *data)
0127 {
0128 int ret;
0129 int count = 10;
0130 struct i2c_client *client = data->client;
0131
0132 ret = i2c_smbus_write_byte_data(client, STK8312_REG_OTPADDR, 0x70);
0133 if (ret < 0)
0134 goto exit_err;
0135 ret = i2c_smbus_write_byte_data(client, STK8312_REG_OTPCTRL, 0x02);
0136 if (ret < 0)
0137 goto exit_err;
0138
0139 do {
0140 usleep_range(1000, 5000);
0141 ret = i2c_smbus_read_byte_data(client, STK8312_REG_OTPCTRL);
0142 if (ret < 0)
0143 goto exit_err;
0144 count--;
0145 } while (!(ret & BIT(7)) && count > 0);
0146
0147 if (count == 0) {
0148 ret = -ETIMEDOUT;
0149 goto exit_err;
0150 }
0151
0152 ret = i2c_smbus_read_byte_data(client, STK8312_REG_OTPDATA);
0153 if (ret == 0)
0154 ret = -EINVAL;
0155 if (ret < 0)
0156 goto exit_err;
0157
0158 ret = i2c_smbus_write_byte_data(data->client, STK8312_REG_AFECTRL, ret);
0159 if (ret < 0)
0160 goto exit_err;
0161 msleep(150);
0162
0163 return 0;
0164
0165 exit_err:
0166 dev_err(&client->dev, "failed to initialize sensor\n");
0167 return ret;
0168 }
0169
0170 static int stk8312_set_mode(struct stk8312_data *data, u8 mode)
0171 {
0172 int ret;
0173 struct i2c_client *client = data->client;
0174
0175 if (mode == data->mode)
0176 return 0;
0177
0178 ret = i2c_smbus_write_byte_data(client, STK8312_REG_MODE, mode);
0179 if (ret < 0) {
0180 dev_err(&client->dev, "failed to change sensor mode\n");
0181 return ret;
0182 }
0183
0184 data->mode = mode;
0185 if (mode & STK8312_MODE_ACTIVE) {
0186
0187 usleep_range(1000, 5000);
0188 ret = stk8312_otp_init(data);
0189 }
0190
0191 return ret;
0192 }
0193
0194 static int stk8312_set_interrupts(struct stk8312_data *data, u8 int_mask)
0195 {
0196 int ret;
0197 u8 mode;
0198 struct i2c_client *client = data->client;
0199
0200 mode = data->mode;
0201
0202 ret = stk8312_set_mode(data, STK8312_MODE_STANDBY);
0203 if (ret < 0)
0204 return ret;
0205
0206 ret = i2c_smbus_write_byte_data(client, STK8312_REG_INTSU, int_mask);
0207 if (ret < 0) {
0208 dev_err(&client->dev, "failed to set interrupts\n");
0209 stk8312_set_mode(data, mode);
0210 return ret;
0211 }
0212
0213 return stk8312_set_mode(data, mode);
0214 }
0215
0216 static int stk8312_data_rdy_trigger_set_state(struct iio_trigger *trig,
0217 bool state)
0218 {
0219 struct iio_dev *indio_dev = iio_trigger_get_drvdata(trig);
0220 struct stk8312_data *data = iio_priv(indio_dev);
0221 int ret;
0222
0223 if (state)
0224 ret = stk8312_set_interrupts(data, STK8312_DREADY_BIT);
0225 else
0226 ret = stk8312_set_interrupts(data, 0x00);
0227
0228 if (ret < 0) {
0229 dev_err(&data->client->dev, "failed to set trigger state\n");
0230 return ret;
0231 }
0232
0233 data->dready_trigger_on = state;
0234
0235 return 0;
0236 }
0237
0238 static const struct iio_trigger_ops stk8312_trigger_ops = {
0239 .set_trigger_state = stk8312_data_rdy_trigger_set_state,
0240 };
0241
0242 static int stk8312_set_sample_rate(struct stk8312_data *data, u8 rate)
0243 {
0244 int ret;
0245 u8 masked_reg;
0246 u8 mode;
0247 struct i2c_client *client = data->client;
0248
0249 if (rate == data->sample_rate_idx)
0250 return 0;
0251
0252 mode = data->mode;
0253
0254 ret = stk8312_set_mode(data, STK8312_MODE_STANDBY);
0255 if (ret < 0)
0256 return ret;
0257
0258 ret = i2c_smbus_read_byte_data(client, STK8312_REG_SR);
0259 if (ret < 0)
0260 goto err_activate;
0261
0262 masked_reg = (ret & (~STK8312_SR_MASK)) | rate;
0263
0264 ret = i2c_smbus_write_byte_data(client, STK8312_REG_SR, masked_reg);
0265 if (ret < 0)
0266 goto err_activate;
0267
0268 data->sample_rate_idx = rate;
0269
0270 return stk8312_set_mode(data, mode);
0271
0272 err_activate:
0273 dev_err(&client->dev, "failed to set sampling rate\n");
0274 stk8312_set_mode(data, mode);
0275
0276 return ret;
0277 }
0278
0279 static int stk8312_set_range(struct stk8312_data *data, u8 range)
0280 {
0281 int ret;
0282 u8 masked_reg;
0283 u8 mode;
0284 struct i2c_client *client = data->client;
0285
0286 if (range != 1 && range != 2)
0287 return -EINVAL;
0288 else if (range == data->range)
0289 return 0;
0290
0291 mode = data->mode;
0292
0293 ret = stk8312_set_mode(data, STK8312_MODE_STANDBY);
0294 if (ret < 0)
0295 return ret;
0296
0297 ret = i2c_smbus_read_byte_data(client, STK8312_REG_STH);
0298 if (ret < 0)
0299 goto err_activate;
0300
0301 masked_reg = ret & (~STK8312_RNG_MASK);
0302 masked_reg |= range << STK8312_RNG_SHIFT;
0303
0304 ret = i2c_smbus_write_byte_data(client, STK8312_REG_STH, masked_reg);
0305 if (ret < 0)
0306 goto err_activate;
0307
0308 data->range = range;
0309
0310 return stk8312_set_mode(data, mode);
0311
0312 err_activate:
0313 dev_err(&client->dev, "failed to change sensor range\n");
0314 stk8312_set_mode(data, mode);
0315
0316 return ret;
0317 }
0318
0319 static int stk8312_read_accel(struct stk8312_data *data, u8 address)
0320 {
0321 int ret;
0322 struct i2c_client *client = data->client;
0323
0324 if (address > 2)
0325 return -EINVAL;
0326
0327 ret = i2c_smbus_read_byte_data(client, address);
0328 if (ret < 0)
0329 dev_err(&client->dev, "register read failed\n");
0330
0331 return ret;
0332 }
0333
0334 static int stk8312_read_raw(struct iio_dev *indio_dev,
0335 struct iio_chan_spec const *chan,
0336 int *val, int *val2, long mask)
0337 {
0338 struct stk8312_data *data = iio_priv(indio_dev);
0339 int ret;
0340
0341 switch (mask) {
0342 case IIO_CHAN_INFO_RAW:
0343 if (iio_buffer_enabled(indio_dev))
0344 return -EBUSY;
0345 mutex_lock(&data->lock);
0346 ret = stk8312_set_mode(data, data->mode | STK8312_MODE_ACTIVE);
0347 if (ret < 0) {
0348 mutex_unlock(&data->lock);
0349 return ret;
0350 }
0351 ret = stk8312_read_accel(data, chan->address);
0352 if (ret < 0) {
0353 stk8312_set_mode(data,
0354 data->mode & (~STK8312_MODE_ACTIVE));
0355 mutex_unlock(&data->lock);
0356 return ret;
0357 }
0358 *val = sign_extend32(ret, chan->scan_type.realbits - 1);
0359 ret = stk8312_set_mode(data,
0360 data->mode & (~STK8312_MODE_ACTIVE));
0361 mutex_unlock(&data->lock);
0362 if (ret < 0)
0363 return ret;
0364 return IIO_VAL_INT;
0365 case IIO_CHAN_INFO_SCALE:
0366 *val = stk8312_scale_table[data->range - 1][0];
0367 *val2 = stk8312_scale_table[data->range - 1][1];
0368 return IIO_VAL_INT_PLUS_MICRO;
0369 case IIO_CHAN_INFO_SAMP_FREQ:
0370 *val = stk8312_samp_freq_table[data->sample_rate_idx].val;
0371 *val2 = stk8312_samp_freq_table[data->sample_rate_idx].val2;
0372 return IIO_VAL_INT_PLUS_MICRO;
0373 }
0374
0375 return -EINVAL;
0376 }
0377
0378 static int stk8312_write_raw(struct iio_dev *indio_dev,
0379 struct iio_chan_spec const *chan,
0380 int val, int val2, long mask)
0381 {
0382 int i;
0383 int index = -1;
0384 int ret;
0385 struct stk8312_data *data = iio_priv(indio_dev);
0386
0387 switch (mask) {
0388 case IIO_CHAN_INFO_SCALE:
0389 for (i = 0; i < ARRAY_SIZE(stk8312_scale_table); i++)
0390 if (val == stk8312_scale_table[i][0] &&
0391 val2 == stk8312_scale_table[i][1]) {
0392 index = i + 1;
0393 break;
0394 }
0395 if (index < 0)
0396 return -EINVAL;
0397
0398 mutex_lock(&data->lock);
0399 ret = stk8312_set_range(data, index);
0400 mutex_unlock(&data->lock);
0401
0402 return ret;
0403 case IIO_CHAN_INFO_SAMP_FREQ:
0404 for (i = 0; i < ARRAY_SIZE(stk8312_samp_freq_table); i++)
0405 if (val == stk8312_samp_freq_table[i].val &&
0406 val2 == stk8312_samp_freq_table[i].val2) {
0407 index = i;
0408 break;
0409 }
0410 if (index < 0)
0411 return -EINVAL;
0412 mutex_lock(&data->lock);
0413 ret = stk8312_set_sample_rate(data, index);
0414 mutex_unlock(&data->lock);
0415
0416 return ret;
0417 }
0418
0419 return -EINVAL;
0420 }
0421
0422 static const struct iio_info stk8312_info = {
0423 .read_raw = stk8312_read_raw,
0424 .write_raw = stk8312_write_raw,
0425 .attrs = &stk8312_attribute_group,
0426 };
0427
0428 static irqreturn_t stk8312_trigger_handler(int irq, void *p)
0429 {
0430 struct iio_poll_func *pf = p;
0431 struct iio_dev *indio_dev = pf->indio_dev;
0432 struct stk8312_data *data = iio_priv(indio_dev);
0433 int bit, ret, i = 0;
0434
0435 mutex_lock(&data->lock);
0436
0437
0438
0439
0440 if (*(indio_dev->active_scan_mask) == STK8312_ALL_CHANNEL_MASK) {
0441 ret = i2c_smbus_read_i2c_block_data(data->client,
0442 STK8312_REG_XOUT,
0443 STK8312_ALL_CHANNEL_SIZE,
0444 data->scan.chans);
0445 if (ret < STK8312_ALL_CHANNEL_SIZE) {
0446 dev_err(&data->client->dev, "register read failed\n");
0447 mutex_unlock(&data->lock);
0448 goto err;
0449 }
0450 } else {
0451 for_each_set_bit(bit, indio_dev->active_scan_mask,
0452 indio_dev->masklength) {
0453 ret = stk8312_read_accel(data, bit);
0454 if (ret < 0) {
0455 mutex_unlock(&data->lock);
0456 goto err;
0457 }
0458 data->scan.chans[i++] = ret;
0459 }
0460 }
0461 mutex_unlock(&data->lock);
0462
0463 iio_push_to_buffers_with_timestamp(indio_dev, &data->scan,
0464 pf->timestamp);
0465 err:
0466 iio_trigger_notify_done(indio_dev->trig);
0467
0468 return IRQ_HANDLED;
0469 }
0470
0471 static irqreturn_t stk8312_data_rdy_trig_poll(int irq, void *private)
0472 {
0473 struct iio_dev *indio_dev = private;
0474 struct stk8312_data *data = iio_priv(indio_dev);
0475
0476 if (data->dready_trigger_on)
0477 iio_trigger_poll(data->dready_trig);
0478
0479 return IRQ_HANDLED;
0480 }
0481
0482 static int stk8312_buffer_preenable(struct iio_dev *indio_dev)
0483 {
0484 struct stk8312_data *data = iio_priv(indio_dev);
0485
0486 return stk8312_set_mode(data, data->mode | STK8312_MODE_ACTIVE);
0487 }
0488
0489 static int stk8312_buffer_postdisable(struct iio_dev *indio_dev)
0490 {
0491 struct stk8312_data *data = iio_priv(indio_dev);
0492
0493 return stk8312_set_mode(data, data->mode & (~STK8312_MODE_ACTIVE));
0494 }
0495
0496 static const struct iio_buffer_setup_ops stk8312_buffer_setup_ops = {
0497 .preenable = stk8312_buffer_preenable,
0498 .postdisable = stk8312_buffer_postdisable,
0499 };
0500
0501 static int stk8312_probe(struct i2c_client *client,
0502 const struct i2c_device_id *id)
0503 {
0504 int ret;
0505 struct iio_dev *indio_dev;
0506 struct stk8312_data *data;
0507
0508 indio_dev = devm_iio_device_alloc(&client->dev, sizeof(*data));
0509 if (!indio_dev) {
0510 dev_err(&client->dev, "iio allocation failed!\n");
0511 return -ENOMEM;
0512 }
0513
0514 data = iio_priv(indio_dev);
0515 data->client = client;
0516 i2c_set_clientdata(client, indio_dev);
0517 mutex_init(&data->lock);
0518
0519 indio_dev->info = &stk8312_info;
0520 indio_dev->name = STK8312_DRIVER_NAME;
0521 indio_dev->modes = INDIO_DIRECT_MODE;
0522 indio_dev->channels = stk8312_channels;
0523 indio_dev->num_channels = ARRAY_SIZE(stk8312_channels);
0524
0525
0526 ret = i2c_smbus_write_byte_data(data->client, STK8312_REG_RESET, 0x00);
0527 if (ret < 0) {
0528 dev_err(&client->dev, "failed to reset sensor\n");
0529 return ret;
0530 }
0531 data->sample_rate_idx = STK8312_SR_400HZ_IDX;
0532 ret = stk8312_set_range(data, STK8312_RNG_6G);
0533 if (ret < 0)
0534 return ret;
0535
0536 ret = stk8312_set_mode(data,
0537 STK8312_MODE_INT_AH_PP | STK8312_MODE_ACTIVE);
0538 if (ret < 0)
0539 return ret;
0540
0541 if (client->irq > 0) {
0542 ret = devm_request_threaded_irq(&client->dev, client->irq,
0543 stk8312_data_rdy_trig_poll,
0544 NULL,
0545 IRQF_TRIGGER_RISING |
0546 IRQF_ONESHOT,
0547 STK8312_IRQ_NAME,
0548 indio_dev);
0549 if (ret < 0) {
0550 dev_err(&client->dev, "request irq %d failed\n",
0551 client->irq);
0552 goto err_power_off;
0553 }
0554
0555 data->dready_trig = devm_iio_trigger_alloc(&client->dev,
0556 "%s-dev%d",
0557 indio_dev->name,
0558 iio_device_id(indio_dev));
0559 if (!data->dready_trig) {
0560 ret = -ENOMEM;
0561 goto err_power_off;
0562 }
0563
0564 data->dready_trig->ops = &stk8312_trigger_ops;
0565 iio_trigger_set_drvdata(data->dready_trig, indio_dev);
0566 ret = iio_trigger_register(data->dready_trig);
0567 if (ret) {
0568 dev_err(&client->dev, "iio trigger register failed\n");
0569 goto err_power_off;
0570 }
0571 }
0572
0573 ret = iio_triggered_buffer_setup(indio_dev,
0574 iio_pollfunc_store_time,
0575 stk8312_trigger_handler,
0576 &stk8312_buffer_setup_ops);
0577 if (ret < 0) {
0578 dev_err(&client->dev, "iio triggered buffer setup failed\n");
0579 goto err_trigger_unregister;
0580 }
0581
0582 ret = iio_device_register(indio_dev);
0583 if (ret < 0) {
0584 dev_err(&client->dev, "device_register failed\n");
0585 goto err_buffer_cleanup;
0586 }
0587
0588 return 0;
0589
0590 err_buffer_cleanup:
0591 iio_triggered_buffer_cleanup(indio_dev);
0592 err_trigger_unregister:
0593 if (data->dready_trig)
0594 iio_trigger_unregister(data->dready_trig);
0595 err_power_off:
0596 stk8312_set_mode(data, STK8312_MODE_STANDBY);
0597 return ret;
0598 }
0599
0600 static int stk8312_remove(struct i2c_client *client)
0601 {
0602 struct iio_dev *indio_dev = i2c_get_clientdata(client);
0603 struct stk8312_data *data = iio_priv(indio_dev);
0604
0605 iio_device_unregister(indio_dev);
0606 iio_triggered_buffer_cleanup(indio_dev);
0607
0608 if (data->dready_trig)
0609 iio_trigger_unregister(data->dready_trig);
0610
0611 stk8312_set_mode(data, STK8312_MODE_STANDBY);
0612
0613 return 0;
0614 }
0615
0616 static int stk8312_suspend(struct device *dev)
0617 {
0618 struct stk8312_data *data;
0619
0620 data = iio_priv(i2c_get_clientdata(to_i2c_client(dev)));
0621
0622 return stk8312_set_mode(data, data->mode & (~STK8312_MODE_ACTIVE));
0623 }
0624
0625 static int stk8312_resume(struct device *dev)
0626 {
0627 struct stk8312_data *data;
0628
0629 data = iio_priv(i2c_get_clientdata(to_i2c_client(dev)));
0630
0631 return stk8312_set_mode(data, data->mode | STK8312_MODE_ACTIVE);
0632 }
0633
0634 static DEFINE_SIMPLE_DEV_PM_OPS(stk8312_pm_ops, stk8312_suspend,
0635 stk8312_resume);
0636
0637 static const struct i2c_device_id stk8312_i2c_id[] = {
0638
0639 { "STK8312", 0 },
0640 { "stk8312", 0 },
0641 {}
0642 };
0643 MODULE_DEVICE_TABLE(i2c, stk8312_i2c_id);
0644
0645 static struct i2c_driver stk8312_driver = {
0646 .driver = {
0647 .name = STK8312_DRIVER_NAME,
0648 .pm = pm_sleep_ptr(&stk8312_pm_ops),
0649 },
0650 .probe = stk8312_probe,
0651 .remove = stk8312_remove,
0652 .id_table = stk8312_i2c_id,
0653 };
0654
0655 module_i2c_driver(stk8312_driver);
0656
0657 MODULE_AUTHOR("Tiberiu Breana <tiberiu.a.breana@intel.com>");
0658 MODULE_DESCRIPTION("STK8312 3-Axis Accelerometer driver");
0659 MODULE_LICENSE("GPL v2");