Merge tag 'reset-for-v5.3' of git://git.pengutronix.de/git/pza/linux into arm/drivers
[sfrench/cifs-2.6.git] / drivers / iio / accel / stk8ba50.c
1 // SPDX-License-Identifier: GPL-2.0-only
2 /**
3  * Sensortek STK8BA50 3-Axis Accelerometer
4  *
5  * Copyright (c) 2015, Intel Corporation.
6  *
7  * STK8BA50 7-bit I2C address: 0x18.
8  */
9
10 #include <linux/acpi.h>
11 #include <linux/i2c.h>
12 #include <linux/interrupt.h>
13 #include <linux/kernel.h>
14 #include <linux/module.h>
15 #include <linux/iio/buffer.h>
16 #include <linux/iio/iio.h>
17 #include <linux/iio/sysfs.h>
18 #include <linux/iio/trigger.h>
19 #include <linux/iio/triggered_buffer.h>
20 #include <linux/iio/trigger_consumer.h>
21
22 #define STK8BA50_REG_XOUT                       0x02
23 #define STK8BA50_REG_YOUT                       0x04
24 #define STK8BA50_REG_ZOUT                       0x06
25 #define STK8BA50_REG_RANGE                      0x0F
26 #define STK8BA50_REG_BWSEL                      0x10
27 #define STK8BA50_REG_POWMODE                    0x11
28 #define STK8BA50_REG_SWRST                      0x14
29 #define STK8BA50_REG_INTEN2                     0x17
30 #define STK8BA50_REG_INTMAP2                    0x1A
31
32 #define STK8BA50_MODE_NORMAL                    0
33 #define STK8BA50_MODE_SUSPEND                   1
34 #define STK8BA50_MODE_POWERBIT                  BIT(7)
35 #define STK8BA50_DATA_SHIFT                     6
36 #define STK8BA50_RESET_CMD                      0xB6
37 #define STK8BA50_SR_1792HZ_IDX                  7
38 #define STK8BA50_DREADY_INT_MASK                0x10
39 #define STK8BA50_DREADY_INT_MAP                 0x81
40 #define STK8BA50_ALL_CHANNEL_MASK               7
41 #define STK8BA50_ALL_CHANNEL_SIZE               6
42
43 #define STK8BA50_DRIVER_NAME                    "stk8ba50"
44 #define STK8BA50_IRQ_NAME                       "stk8ba50_event"
45
46 #define STK8BA50_SCALE_AVAIL                    "0.0384 0.0767 0.1534 0.3069"
47
48 /*
49  * The accelerometer has four measurement ranges:
50  * +/-2g; +/-4g; +/-8g; +/-16g
51  *
52  * Acceleration values are 10-bit, 2's complement.
53  * Scales are calculated as following:
54  *
55  * scale1 = (2 + 2) * 9.81 / (2^10 - 1)   = 0.0384
56  * scale2 = (4 + 4) * 9.81 / (2^10 - 1)   = 0.0767
57  * etc.
58  *
59  * Scales are stored in this format:
60  * { <register value>, <scale value> }
61  *
62  * Locally, the range is stored as a table index.
63  */
64 static const struct {
65         u8 reg_val;
66         u32 scale_val;
67 } stk8ba50_scale_table[] = {
68         {3, 38400}, {5, 76700}, {8, 153400}, {12, 306900}
69 };
70
71 /* Sample rates are stored as { <register value>, <Hz value> } */
72 static const struct {
73         u8 reg_val;
74         u16 samp_freq;
75 } stk8ba50_samp_freq_table[] = {
76         {0x08, 14},  {0x09, 25},  {0x0A, 56},  {0x0B, 112},
77         {0x0C, 224}, {0x0D, 448}, {0x0E, 896}, {0x0F, 1792}
78 };
79
80 /* Used to map scan mask bits to their corresponding channel register. */
81 static const int stk8ba50_channel_table[] = {
82         STK8BA50_REG_XOUT,
83         STK8BA50_REG_YOUT,
84         STK8BA50_REG_ZOUT
85 };
86
87 struct stk8ba50_data {
88         struct i2c_client *client;
89         struct mutex lock;
90         int range;
91         u8 sample_rate_idx;
92         struct iio_trigger *dready_trig;
93         bool dready_trigger_on;
94         /*
95          * 3 x 16-bit channels (10-bit data, 6-bit padding) +
96          * 1 x 16 padding +
97          * 4 x 16 64-bit timestamp
98          */
99         s16 buffer[8];
100 };
101
102 #define STK8BA50_ACCEL_CHANNEL(index, reg, axis) {                      \
103         .type = IIO_ACCEL,                                              \
104         .address = reg,                                                 \
105         .modified = 1,                                                  \
106         .channel2 = IIO_MOD_##axis,                                     \
107         .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),                   \
108         .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE),           \
109                                     BIT(IIO_CHAN_INFO_SAMP_FREQ),       \
110         .scan_index = index,                                            \
111         .scan_type = {                                                  \
112                 .sign = 's',                                            \
113                 .realbits = 10,                                         \
114                 .storagebits = 16,                                      \
115                 .shift = STK8BA50_DATA_SHIFT,                           \
116                 .endianness = IIO_CPU,                                  \
117         },                                                              \
118 }
119
120 static const struct iio_chan_spec stk8ba50_channels[] = {
121         STK8BA50_ACCEL_CHANNEL(0, STK8BA50_REG_XOUT, X),
122         STK8BA50_ACCEL_CHANNEL(1, STK8BA50_REG_YOUT, Y),
123         STK8BA50_ACCEL_CHANNEL(2, STK8BA50_REG_ZOUT, Z),
124         IIO_CHAN_SOFT_TIMESTAMP(3),
125 };
126
127 static IIO_CONST_ATTR(in_accel_scale_available, STK8BA50_SCALE_AVAIL);
128
129 static IIO_CONST_ATTR_SAMP_FREQ_AVAIL("14 25 56 112 224 448 896 1792");
130
131 static struct attribute *stk8ba50_attributes[] = {
132         &iio_const_attr_in_accel_scale_available.dev_attr.attr,
133         &iio_const_attr_sampling_frequency_available.dev_attr.attr,
134         NULL,
135 };
136
137 static const struct attribute_group stk8ba50_attribute_group = {
138         .attrs = stk8ba50_attributes
139 };
140
141 static int stk8ba50_read_accel(struct stk8ba50_data *data, u8 reg)
142 {
143         int ret;
144         struct i2c_client *client = data->client;
145
146         ret = i2c_smbus_read_word_data(client, reg);
147         if (ret < 0) {
148                 dev_err(&client->dev, "register read failed\n");
149                 return ret;
150         }
151
152         return ret;
153 }
154
155 static int stk8ba50_data_rdy_trigger_set_state(struct iio_trigger *trig,
156                                                bool state)
157 {
158         struct iio_dev *indio_dev = iio_trigger_get_drvdata(trig);
159         struct stk8ba50_data *data = iio_priv(indio_dev);
160         int ret;
161
162         if (state)
163                 ret = i2c_smbus_write_byte_data(data->client,
164                         STK8BA50_REG_INTEN2, STK8BA50_DREADY_INT_MASK);
165         else
166                 ret = i2c_smbus_write_byte_data(data->client,
167                         STK8BA50_REG_INTEN2, 0x00);
168
169         if (ret < 0)
170                 dev_err(&data->client->dev, "failed to set trigger state\n");
171         else
172                 data->dready_trigger_on = state;
173
174         return ret;
175 }
176
177 static const struct iio_trigger_ops stk8ba50_trigger_ops = {
178         .set_trigger_state = stk8ba50_data_rdy_trigger_set_state,
179 };
180
181 static int stk8ba50_set_power(struct stk8ba50_data *data, bool mode)
182 {
183         int ret;
184         u8 masked_reg;
185         struct i2c_client *client = data->client;
186
187         ret = i2c_smbus_read_byte_data(client, STK8BA50_REG_POWMODE);
188         if (ret < 0)
189                 goto exit_err;
190
191         if (mode)
192                 masked_reg = ret | STK8BA50_MODE_POWERBIT;
193         else
194                 masked_reg = ret & (~STK8BA50_MODE_POWERBIT);
195
196         ret = i2c_smbus_write_byte_data(client, STK8BA50_REG_POWMODE,
197                                         masked_reg);
198         if (ret < 0)
199                 goto exit_err;
200
201         return ret;
202
203 exit_err:
204         dev_err(&client->dev, "failed to change sensor mode\n");
205         return ret;
206 }
207
208 static int stk8ba50_read_raw(struct iio_dev *indio_dev,
209                              struct iio_chan_spec const *chan,
210                              int *val, int *val2, long mask)
211 {
212         struct stk8ba50_data *data = iio_priv(indio_dev);
213         int ret;
214
215         switch (mask) {
216         case IIO_CHAN_INFO_RAW:
217                 if (iio_buffer_enabled(indio_dev))
218                         return -EBUSY;
219                 mutex_lock(&data->lock);
220                 ret = stk8ba50_set_power(data, STK8BA50_MODE_NORMAL);
221                 if (ret < 0) {
222                         mutex_unlock(&data->lock);
223                         return -EINVAL;
224                 }
225                 ret = stk8ba50_read_accel(data, chan->address);
226                 if (ret < 0) {
227                         stk8ba50_set_power(data, STK8BA50_MODE_SUSPEND);
228                         mutex_unlock(&data->lock);
229                         return -EINVAL;
230                 }
231                 *val = sign_extend32(ret >> STK8BA50_DATA_SHIFT, 9);
232                 stk8ba50_set_power(data, STK8BA50_MODE_SUSPEND);
233                 mutex_unlock(&data->lock);
234                 return IIO_VAL_INT;
235         case IIO_CHAN_INFO_SCALE:
236                 *val = 0;
237                 *val2 = stk8ba50_scale_table[data->range].scale_val;
238                 return IIO_VAL_INT_PLUS_MICRO;
239         case IIO_CHAN_INFO_SAMP_FREQ:
240                 *val = stk8ba50_samp_freq_table
241                                 [data->sample_rate_idx].samp_freq;
242                 *val2 = 0;
243                 return IIO_VAL_INT;
244         }
245
246         return -EINVAL;
247 }
248
249 static int stk8ba50_write_raw(struct iio_dev *indio_dev,
250                               struct iio_chan_spec const *chan,
251                               int val, int val2, long mask)
252 {
253         int ret;
254         int i;
255         int index = -1;
256         struct stk8ba50_data *data = iio_priv(indio_dev);
257
258         switch (mask) {
259         case IIO_CHAN_INFO_SCALE:
260                 if (val != 0)
261                         return -EINVAL;
262
263                 for (i = 0; i < ARRAY_SIZE(stk8ba50_scale_table); i++)
264                         if (val2 == stk8ba50_scale_table[i].scale_val) {
265                                 index = i;
266                                 break;
267                         }
268                 if (index < 0)
269                         return -EINVAL;
270
271                 ret = i2c_smbus_write_byte_data(data->client,
272                                 STK8BA50_REG_RANGE,
273                                 stk8ba50_scale_table[index].reg_val);
274                 if (ret < 0)
275                         dev_err(&data->client->dev,
276                                         "failed to set measurement range\n");
277                 else
278                         data->range = index;
279
280                 return ret;
281         case IIO_CHAN_INFO_SAMP_FREQ:
282                 for (i = 0; i < ARRAY_SIZE(stk8ba50_samp_freq_table); i++)
283                         if (val == stk8ba50_samp_freq_table[i].samp_freq) {
284                                 index = i;
285                                 break;
286                         }
287                 if (index < 0)
288                         return -EINVAL;
289
290                 ret = i2c_smbus_write_byte_data(data->client,
291                                 STK8BA50_REG_BWSEL,
292                                 stk8ba50_samp_freq_table[index].reg_val);
293                 if (ret < 0)
294                         dev_err(&data->client->dev,
295                                         "failed to set sampling rate\n");
296                 else
297                         data->sample_rate_idx = index;
298
299                 return ret;
300         }
301
302         return -EINVAL;
303 }
304
305 static const struct iio_info stk8ba50_info = {
306         .read_raw               = stk8ba50_read_raw,
307         .write_raw              = stk8ba50_write_raw,
308         .attrs                  = &stk8ba50_attribute_group,
309 };
310
311 static irqreturn_t stk8ba50_trigger_handler(int irq, void *p)
312 {
313         struct iio_poll_func *pf = p;
314         struct iio_dev *indio_dev = pf->indio_dev;
315         struct stk8ba50_data *data = iio_priv(indio_dev);
316         int bit, ret, i = 0;
317
318         mutex_lock(&data->lock);
319         /*
320          * Do a bulk read if all channels are requested,
321          * from 0x02 (XOUT1) to 0x07 (ZOUT2)
322          */
323         if (*(indio_dev->active_scan_mask) == STK8BA50_ALL_CHANNEL_MASK) {
324                 ret = i2c_smbus_read_i2c_block_data(data->client,
325                                                     STK8BA50_REG_XOUT,
326                                                     STK8BA50_ALL_CHANNEL_SIZE,
327                                                     (u8 *)data->buffer);
328                 if (ret < STK8BA50_ALL_CHANNEL_SIZE) {
329                         dev_err(&data->client->dev, "register read failed\n");
330                         goto err;
331                 }
332         } else {
333                 for_each_set_bit(bit, indio_dev->active_scan_mask,
334                                  indio_dev->masklength) {
335                         ret = stk8ba50_read_accel(data,
336                                                   stk8ba50_channel_table[bit]);
337                         if (ret < 0)
338                                 goto err;
339
340                         data->buffer[i++] = ret;
341                 }
342         }
343         iio_push_to_buffers_with_timestamp(indio_dev, data->buffer,
344                                            pf->timestamp);
345 err:
346         mutex_unlock(&data->lock);
347         iio_trigger_notify_done(indio_dev->trig);
348
349         return IRQ_HANDLED;
350 }
351
352 static irqreturn_t stk8ba50_data_rdy_trig_poll(int irq, void *private)
353 {
354         struct iio_dev *indio_dev = private;
355         struct stk8ba50_data *data = iio_priv(indio_dev);
356
357         if (data->dready_trigger_on)
358                 iio_trigger_poll(data->dready_trig);
359
360         return IRQ_HANDLED;
361 }
362
363 static int stk8ba50_buffer_preenable(struct iio_dev *indio_dev)
364 {
365         struct stk8ba50_data *data = iio_priv(indio_dev);
366
367         return stk8ba50_set_power(data, STK8BA50_MODE_NORMAL);
368 }
369
370 static int stk8ba50_buffer_postdisable(struct iio_dev *indio_dev)
371 {
372         struct stk8ba50_data *data = iio_priv(indio_dev);
373
374         return stk8ba50_set_power(data, STK8BA50_MODE_SUSPEND);
375 }
376
377 static const struct iio_buffer_setup_ops stk8ba50_buffer_setup_ops = {
378         .preenable   = stk8ba50_buffer_preenable,
379         .postenable  = iio_triggered_buffer_postenable,
380         .predisable  = iio_triggered_buffer_predisable,
381         .postdisable = stk8ba50_buffer_postdisable,
382 };
383
384 static int stk8ba50_probe(struct i2c_client *client,
385                           const struct i2c_device_id *id)
386 {
387         int ret;
388         struct iio_dev *indio_dev;
389         struct stk8ba50_data *data;
390
391         indio_dev = devm_iio_device_alloc(&client->dev, sizeof(*data));
392         if (!indio_dev) {
393                 dev_err(&client->dev, "iio allocation failed!\n");
394                 return -ENOMEM;
395         }
396
397         data = iio_priv(indio_dev);
398         data->client = client;
399         i2c_set_clientdata(client, indio_dev);
400         mutex_init(&data->lock);
401
402         indio_dev->dev.parent = &client->dev;
403         indio_dev->info = &stk8ba50_info;
404         indio_dev->name = STK8BA50_DRIVER_NAME;
405         indio_dev->modes = INDIO_DIRECT_MODE;
406         indio_dev->channels = stk8ba50_channels;
407         indio_dev->num_channels = ARRAY_SIZE(stk8ba50_channels);
408
409         /* Reset all registers on startup */
410         ret = i2c_smbus_write_byte_data(client,
411                         STK8BA50_REG_SWRST, STK8BA50_RESET_CMD);
412         if (ret < 0) {
413                 dev_err(&client->dev, "failed to reset sensor\n");
414                 goto err_power_off;
415         }
416
417         /* The default range is +/-2g */
418         data->range = 0;
419
420         /* The default sampling rate is 1792 Hz (maximum) */
421         data->sample_rate_idx = STK8BA50_SR_1792HZ_IDX;
422
423         /* Set up interrupts */
424         ret = i2c_smbus_write_byte_data(client,
425                         STK8BA50_REG_INTEN2, STK8BA50_DREADY_INT_MASK);
426         if (ret < 0) {
427                 dev_err(&client->dev, "failed to set up interrupts\n");
428                 goto err_power_off;
429         }
430         ret = i2c_smbus_write_byte_data(client,
431                         STK8BA50_REG_INTMAP2, STK8BA50_DREADY_INT_MAP);
432         if (ret < 0) {
433                 dev_err(&client->dev, "failed to set up interrupts\n");
434                 goto err_power_off;
435         }
436
437         if (client->irq > 0) {
438                 ret = devm_request_threaded_irq(&client->dev, client->irq,
439                                                 stk8ba50_data_rdy_trig_poll,
440                                                 NULL,
441                                                 IRQF_TRIGGER_RISING |
442                                                 IRQF_ONESHOT,
443                                                 STK8BA50_IRQ_NAME,
444                                                 indio_dev);
445                 if (ret < 0) {
446                         dev_err(&client->dev, "request irq %d failed\n",
447                                 client->irq);
448                         goto err_power_off;
449                 }
450
451                 data->dready_trig = devm_iio_trigger_alloc(&client->dev,
452                                                            "%s-dev%d",
453                                                            indio_dev->name,
454                                                            indio_dev->id);
455                 if (!data->dready_trig) {
456                         ret = -ENOMEM;
457                         goto err_power_off;
458                 }
459
460                 data->dready_trig->dev.parent = &client->dev;
461                 data->dready_trig->ops = &stk8ba50_trigger_ops;
462                 iio_trigger_set_drvdata(data->dready_trig, indio_dev);
463                 ret = iio_trigger_register(data->dready_trig);
464                 if (ret) {
465                         dev_err(&client->dev, "iio trigger register failed\n");
466                         goto err_power_off;
467                 }
468         }
469
470         ret = iio_triggered_buffer_setup(indio_dev,
471                                          iio_pollfunc_store_time,
472                                          stk8ba50_trigger_handler,
473                                          &stk8ba50_buffer_setup_ops);
474         if (ret < 0) {
475                 dev_err(&client->dev, "iio triggered buffer setup failed\n");
476                 goto err_trigger_unregister;
477         }
478
479         ret = iio_device_register(indio_dev);
480         if (ret < 0) {
481                 dev_err(&client->dev, "device_register failed\n");
482                 goto err_buffer_cleanup;
483         }
484
485         return ret;
486
487 err_buffer_cleanup:
488         iio_triggered_buffer_cleanup(indio_dev);
489 err_trigger_unregister:
490         if (data->dready_trig)
491                 iio_trigger_unregister(data->dready_trig);
492 err_power_off:
493         stk8ba50_set_power(data, STK8BA50_MODE_SUSPEND);
494         return ret;
495 }
496
497 static int stk8ba50_remove(struct i2c_client *client)
498 {
499         struct iio_dev *indio_dev = i2c_get_clientdata(client);
500         struct stk8ba50_data *data = iio_priv(indio_dev);
501
502         iio_device_unregister(indio_dev);
503         iio_triggered_buffer_cleanup(indio_dev);
504
505         if (data->dready_trig)
506                 iio_trigger_unregister(data->dready_trig);
507
508         return stk8ba50_set_power(data, STK8BA50_MODE_SUSPEND);
509 }
510
511 #ifdef CONFIG_PM_SLEEP
512 static int stk8ba50_suspend(struct device *dev)
513 {
514         struct stk8ba50_data *data;
515
516         data = iio_priv(i2c_get_clientdata(to_i2c_client(dev)));
517
518         return stk8ba50_set_power(data, STK8BA50_MODE_SUSPEND);
519 }
520
521 static int stk8ba50_resume(struct device *dev)
522 {
523         struct stk8ba50_data *data;
524
525         data = iio_priv(i2c_get_clientdata(to_i2c_client(dev)));
526
527         return stk8ba50_set_power(data, STK8BA50_MODE_NORMAL);
528 }
529
530 static SIMPLE_DEV_PM_OPS(stk8ba50_pm_ops, stk8ba50_suspend, stk8ba50_resume);
531
532 #define STK8BA50_PM_OPS (&stk8ba50_pm_ops)
533 #else
534 #define STK8BA50_PM_OPS NULL
535 #endif
536
537 static const struct i2c_device_id stk8ba50_i2c_id[] = {
538         {"stk8ba50", 0},
539         {}
540 };
541 MODULE_DEVICE_TABLE(i2c, stk8ba50_i2c_id);
542
543 static const struct acpi_device_id stk8ba50_acpi_id[] = {
544         {"STK8BA50", 0},
545         {}
546 };
547
548 MODULE_DEVICE_TABLE(acpi, stk8ba50_acpi_id);
549
550 static struct i2c_driver stk8ba50_driver = {
551         .driver = {
552                 .name = "stk8ba50",
553                 .pm = STK8BA50_PM_OPS,
554                 .acpi_match_table = ACPI_PTR(stk8ba50_acpi_id),
555         },
556         .probe =            stk8ba50_probe,
557         .remove =           stk8ba50_remove,
558         .id_table =         stk8ba50_i2c_id,
559 };
560
561 module_i2c_driver(stk8ba50_driver);
562
563 MODULE_AUTHOR("Tiberiu Breana <tiberiu.a.breana@intel.com>");
564 MODULE_DESCRIPTION("STK8BA50 3-Axis Accelerometer driver");
565 MODULE_LICENSE("GPL v2");