blob: bda9c40c020b13321b44643402a02adf6bb7979e [file] [log] [blame]
Daniel Baluta20ffac22014-12-03 15:31:48 +02001/*
2 * KMX61 - Kionix 6-axis Accelerometer/Magnetometer
3 *
4 * Copyright (c) 2014, Intel Corporation.
5 *
6 * This file is subject to the terms and conditions of version 2 of
7 * the GNU General Public License. See the file COPYING in the main
8 * directory of this archive for more details.
9 *
10 * IIO driver for KMX61 (7-bit I2C slave address 0x0E or 0x0F).
11 *
12 */
13
14#include <linux/module.h>
15#include <linux/i2c.h>
Daniel Balutab25862c2014-12-03 15:31:49 +020016#include <linux/acpi.h>
17#include <linux/gpio/consumer.h>
Daniel Balutaaff86092014-12-03 15:31:50 +020018#include <linux/interrupt.h>
Daniel Baluta3b9c40e2014-12-03 15:31:51 +020019#include <linux/pm.h>
Daniel Balutaaff86092014-12-03 15:31:50 +020020#include <linux/pm_runtime.h>
Daniel Baluta20ffac22014-12-03 15:31:48 +020021#include <linux/iio/iio.h>
22#include <linux/iio/sysfs.h>
Daniel Balutafd3ae7a2014-12-03 15:31:53 +020023#include <linux/iio/events.h>
Daniel Balutac3a23ecc2014-12-03 15:31:52 +020024#include <linux/iio/trigger.h>
25#include <linux/iio/buffer.h>
26#include <linux/iio/triggered_buffer.h>
27#include <linux/iio/trigger_consumer.h>
Daniel Baluta20ffac22014-12-03 15:31:48 +020028
29#define KMX61_DRV_NAME "kmx61"
Daniel Balutab25862c2014-12-03 15:31:49 +020030#define KMX61_GPIO_NAME "kmx61_int"
Daniel Balutac3a23ecc2014-12-03 15:31:52 +020031#define KMX61_IRQ_NAME "kmx61_event"
Daniel Baluta20ffac22014-12-03 15:31:48 +020032
33#define KMX61_REG_WHO_AM_I 0x00
Daniel Balutafd3ae7a2014-12-03 15:31:53 +020034#define KMX61_REG_INS1 0x01
35#define KMX61_REG_INS2 0x02
Daniel Baluta20ffac22014-12-03 15:31:48 +020036
37/*
38 * three 16-bit accelerometer output registers for X/Y/Z axis
39 * we use only XOUT_L as a base register, all other addresses
40 * can be obtained by applying an offset and are provided here
41 * only for clarity.
42 */
43#define KMX61_ACC_XOUT_L 0x0A
44#define KMX61_ACC_XOUT_H 0x0B
45#define KMX61_ACC_YOUT_L 0x0C
46#define KMX61_ACC_YOUT_H 0x0D
47#define KMX61_ACC_ZOUT_L 0x0E
48#define KMX61_ACC_ZOUT_H 0x0F
49
50/*
51 * one 16-bit temperature output register
52 */
53#define KMX61_TEMP_L 0x10
54#define KMX61_TEMP_H 0x11
55
56/*
57 * three 16-bit magnetometer output registers for X/Y/Z axis
58 */
59#define KMX61_MAG_XOUT_L 0x12
60#define KMX61_MAG_XOUT_H 0x13
61#define KMX61_MAG_YOUT_L 0x14
62#define KMX61_MAG_YOUT_H 0x15
63#define KMX61_MAG_ZOUT_L 0x16
64#define KMX61_MAG_ZOUT_H 0x17
65
Daniel Balutac3a23ecc2014-12-03 15:31:52 +020066#define KMX61_REG_INL 0x28
Daniel Baluta20ffac22014-12-03 15:31:48 +020067#define KMX61_REG_STBY 0x29
68#define KMX61_REG_CTRL1 0x2A
Daniel Balutafd3ae7a2014-12-03 15:31:53 +020069#define KMX61_REG_CTRL2 0x2B
Daniel Baluta20ffac22014-12-03 15:31:48 +020070#define KMX61_REG_ODCNTL 0x2C
Daniel Balutac3a23ecc2014-12-03 15:31:52 +020071#define KMX61_REG_INC1 0x2D
Daniel Baluta20ffac22014-12-03 15:31:48 +020072
Daniel Balutafd3ae7a2014-12-03 15:31:53 +020073#define KMX61_REG_WUF_THRESH 0x3D
74#define KMX61_REG_WUF_TIMER 0x3E
75
Daniel Baluta20ffac22014-12-03 15:31:48 +020076#define KMX61_ACC_STBY_BIT BIT(0)
77#define KMX61_MAG_STBY_BIT BIT(1)
78#define KMX61_ACT_STBY_BIT BIT(7)
79
80#define KMX61_ALL_STBY (KMX61_ACC_STBY_BIT | KMX61_MAG_STBY_BIT)
81
Daniel Balutafd3ae7a2014-12-03 15:31:53 +020082#define KMX61_REG_INS1_BIT_WUFS BIT(1)
83
84#define KMX61_REG_INS2_BIT_ZP BIT(0)
85#define KMX61_REG_INS2_BIT_ZN BIT(1)
86#define KMX61_REG_INS2_BIT_YP BIT(2)
87#define KMX61_REG_INS2_BIT_YN BIT(3)
88#define KMX61_REG_INS2_BIT_XP BIT(4)
89#define KMX61_REG_INS2_BIT_XN BIT(5)
90
Daniel Baluta20ffac22014-12-03 15:31:48 +020091#define KMX61_REG_CTRL1_GSEL_MASK 0x03
92
Daniel Balutac3a23ecc2014-12-03 15:31:52 +020093#define KMX61_REG_CTRL1_BIT_RES BIT(4)
94#define KMX61_REG_CTRL1_BIT_DRDYE BIT(5)
Daniel Balutafd3ae7a2014-12-03 15:31:53 +020095#define KMX61_REG_CTRL1_BIT_WUFE BIT(6)
96#define KMX61_REG_CTRL1_BIT_BTSE BIT(7)
Daniel Balutac3a23ecc2014-12-03 15:31:52 +020097
Daniel Balutafd3ae7a2014-12-03 15:31:53 +020098#define KMX61_REG_INC1_BIT_WUFS BIT(0)
Daniel Balutac3a23ecc2014-12-03 15:31:52 +020099#define KMX61_REG_INC1_BIT_DRDYM BIT(1)
100#define KMX61_REG_INC1_BIT_DRDYA BIT(2)
101#define KMX61_REG_INC1_BIT_IEN BIT(5)
102
Daniel Baluta20ffac22014-12-03 15:31:48 +0200103#define KMX61_ACC_ODR_SHIFT 0
104#define KMX61_MAG_ODR_SHIFT 4
105#define KMX61_ACC_ODR_MASK 0x0F
106#define KMX61_MAG_ODR_MASK 0xF0
107
Daniel Balutafd3ae7a2014-12-03 15:31:53 +0200108#define KMX61_OWUF_MASK 0x7
109
110#define KMX61_DEFAULT_WAKE_THRESH 1
111#define KMX61_DEFAULT_WAKE_DURATION 1
112
Daniel Balutaaff86092014-12-03 15:31:50 +0200113#define KMX61_SLEEP_DELAY_MS 2000
114
Daniel Baluta20ffac22014-12-03 15:31:48 +0200115#define KMX61_CHIP_ID 0x12
116
117/* KMX61 devices */
118#define KMX61_ACC 0x01
119#define KMX61_MAG 0x02
120
121struct kmx61_data {
122 struct i2c_client *client;
123
124 /* serialize access to non-atomic ops, e.g set_mode */
125 struct mutex lock;
126
127 /* standby state */
128 bool acc_stby;
129 bool mag_stby;
130
Daniel Balutaaff86092014-12-03 15:31:50 +0200131 /* power state */
132 bool acc_ps;
133 bool mag_ps;
134
Daniel Baluta20ffac22014-12-03 15:31:48 +0200135 /* config bits */
136 u8 range;
137 u8 odr_bits;
Daniel Balutafd3ae7a2014-12-03 15:31:53 +0200138 u8 wake_thresh;
139 u8 wake_duration;
Daniel Baluta20ffac22014-12-03 15:31:48 +0200140
141 /* accelerometer specific data */
142 struct iio_dev *acc_indio_dev;
Daniel Balutac3a23ecc2014-12-03 15:31:52 +0200143 struct iio_trigger *acc_dready_trig;
Daniel Balutafd3ae7a2014-12-03 15:31:53 +0200144 struct iio_trigger *motion_trig;
Daniel Balutac3a23ecc2014-12-03 15:31:52 +0200145 bool acc_dready_trig_on;
Daniel Balutafd3ae7a2014-12-03 15:31:53 +0200146 bool motion_trig_on;
147 bool ev_enable_state;
Daniel Baluta20ffac22014-12-03 15:31:48 +0200148
149 /* magnetometer specific data */
150 struct iio_dev *mag_indio_dev;
Daniel Balutac3a23ecc2014-12-03 15:31:52 +0200151 struct iio_trigger *mag_dready_trig;
152 bool mag_dready_trig_on;
Daniel Baluta20ffac22014-12-03 15:31:48 +0200153};
154
155enum kmx61_range {
156 KMX61_RANGE_2G,
157 KMX61_RANGE_4G,
158 KMX61_RANGE_8G,
159};
160
161enum kmx61_axis {
162 KMX61_AXIS_X,
163 KMX61_AXIS_Y,
164 KMX61_AXIS_Z,
165};
166
167static const u16 kmx61_uscale_table[] = {9582, 19163, 38326};
168
169static const struct {
170 int val;
171 int val2;
172 u8 odr_bits;
173} kmx61_samp_freq_table[] = { {12, 500000, 0x00},
174 {25, 0, 0x01},
175 {50, 0, 0x02},
176 {100, 0, 0x03},
177 {200, 0, 0x04},
178 {400, 0, 0x05},
179 {800, 0, 0x06},
180 {1600, 0, 0x07},
181 {0, 781000, 0x08},
182 {1, 563000, 0x09},
183 {3, 125000, 0x0A},
184 {6, 250000, 0x0B} };
185
Daniel Balutafd3ae7a2014-12-03 15:31:53 +0200186static const struct {
187 int val;
188 int val2;
189 int odr_bits;
190} kmx61_wake_up_odr_table[] = { {0, 781000, 0x00},
191 {1, 563000, 0x01},
192 {3, 125000, 0x02},
193 {6, 250000, 0x03},
194 {12, 500000, 0x04},
195 {25, 0, 0x05},
196 {50, 0, 0x06},
197 {100, 0, 0x06},
198 {200, 0, 0x06},
199 {400, 0, 0x06},
200 {800, 0, 0x06},
201 {1600, 0, 0x06} };
202
Daniel Baluta20ffac22014-12-03 15:31:48 +0200203static IIO_CONST_ATTR(accel_scale_available, "0.009582 0.019163 0.038326");
204static IIO_CONST_ATTR(magn_scale_available, "0.001465");
205static IIO_CONST_ATTR_SAMP_FREQ_AVAIL(
206 "0.781000 1.563000 3.125000 6.250000 12.500000 25 50 100 200 400 800");
207
208static struct attribute *kmx61_acc_attributes[] = {
209 &iio_const_attr_accel_scale_available.dev_attr.attr,
210 &iio_const_attr_sampling_frequency_available.dev_attr.attr,
211 NULL,
212};
213
214static struct attribute *kmx61_mag_attributes[] = {
215 &iio_const_attr_magn_scale_available.dev_attr.attr,
216 &iio_const_attr_sampling_frequency_available.dev_attr.attr,
217 NULL,
218};
219
220static const struct attribute_group kmx61_acc_attribute_group = {
221 .attrs = kmx61_acc_attributes,
222};
223
224static const struct attribute_group kmx61_mag_attribute_group = {
225 .attrs = kmx61_mag_attributes,
226};
227
Daniel Balutafd3ae7a2014-12-03 15:31:53 +0200228static const struct iio_event_spec kmx61_event = {
229 .type = IIO_EV_TYPE_THRESH,
230 .dir = IIO_EV_DIR_EITHER,
231 .mask_separate = BIT(IIO_EV_INFO_VALUE) |
232 BIT(IIO_EV_INFO_ENABLE) |
233 BIT(IIO_EV_INFO_PERIOD),
234};
235
Daniel Baluta20ffac22014-12-03 15:31:48 +0200236#define KMX61_ACC_CHAN(_axis) { \
237 .type = IIO_ACCEL, \
238 .modified = 1, \
239 .channel2 = IIO_MOD_ ## _axis, \
240 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), \
241 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE) | \
242 BIT(IIO_CHAN_INFO_SAMP_FREQ), \
243 .address = KMX61_ACC, \
244 .scan_index = KMX61_AXIS_ ## _axis, \
245 .scan_type = { \
246 .sign = 's', \
247 .realbits = 12, \
248 .storagebits = 16, \
249 .shift = 4, \
250 .endianness = IIO_LE, \
251 }, \
Daniel Balutafd3ae7a2014-12-03 15:31:53 +0200252 .event_spec = &kmx61_event, \
253 .num_event_specs = 1 \
Daniel Baluta20ffac22014-12-03 15:31:48 +0200254}
255
256#define KMX61_MAG_CHAN(_axis) { \
257 .type = IIO_MAGN, \
258 .modified = 1, \
259 .channel2 = IIO_MOD_ ## _axis, \
260 .address = KMX61_MAG, \
261 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), \
262 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE) | \
263 BIT(IIO_CHAN_INFO_SAMP_FREQ), \
264 .scan_index = KMX61_AXIS_ ## _axis, \
265 .scan_type = { \
266 .sign = 's', \
267 .realbits = 14, \
268 .storagebits = 16, \
269 .shift = 2, \
270 .endianness = IIO_LE, \
271 }, \
272}
273
274static const struct iio_chan_spec kmx61_acc_channels[] = {
275 KMX61_ACC_CHAN(X),
276 KMX61_ACC_CHAN(Y),
277 KMX61_ACC_CHAN(Z),
278};
279
280static const struct iio_chan_spec kmx61_mag_channels[] = {
281 KMX61_MAG_CHAN(X),
282 KMX61_MAG_CHAN(Y),
283 KMX61_MAG_CHAN(Z),
284};
285
286static void kmx61_set_data(struct iio_dev *indio_dev, struct kmx61_data *data)
287{
288 struct kmx61_data **priv = iio_priv(indio_dev);
289
290 *priv = data;
291}
292
293static struct kmx61_data *kmx61_get_data(struct iio_dev *indio_dev)
294{
295 return *(struct kmx61_data **)iio_priv(indio_dev);
296}
297
298static int kmx61_convert_freq_to_bit(int val, int val2)
299{
300 int i;
301
302 for (i = 0; i < ARRAY_SIZE(kmx61_samp_freq_table); i++)
303 if (val == kmx61_samp_freq_table[i].val &&
304 val2 == kmx61_samp_freq_table[i].val2)
305 return kmx61_samp_freq_table[i].odr_bits;
306 return -EINVAL;
307}
308
Daniel Balutafd3ae7a2014-12-03 15:31:53 +0200309static int kmx61_convert_bit_to_freq(u8 odr_bits, int *val, int *val2)
310{
311 int i;
312
313 for (i = 0; i < ARRAY_SIZE(kmx61_samp_freq_table); i++)
314 if (odr_bits == kmx61_samp_freq_table[i].odr_bits) {
315 *val = kmx61_samp_freq_table[i].val;
316 *val2 = kmx61_samp_freq_table[i].val2;
317 return 0;
318 }
319 return -EINVAL;
320}
321
322
323static int kmx61_convert_wake_up_odr_to_bit(int val, int val2)
324{
325 int i;
326
327 for (i = 0; i < ARRAY_SIZE(kmx61_wake_up_odr_table); ++i)
328 if (kmx61_wake_up_odr_table[i].val == val &&
329 kmx61_wake_up_odr_table[i].val2 == val2)
330 return kmx61_wake_up_odr_table[i].odr_bits;
331 return -EINVAL;
332}
333
Daniel Baluta20ffac22014-12-03 15:31:48 +0200334/**
335 * kmx61_set_mode() - set KMX61 device operating mode
336 * @data - kmx61 device private data pointer
337 * @mode - bitmask, indicating operating mode for @device
338 * @device - bitmask, indicating device for which @mode needs to be set
339 * @update - update stby bits stored in device's private @data
340 *
341 * For each sensor (accelerometer/magnetometer) there are two operating modes
342 * STANDBY and OPERATION. Neither accel nor magn can be disabled independently
343 * if they are both enabled. Internal sensors state is saved in acc_stby and
344 * mag_stby members of driver's private @data.
345 */
346static int kmx61_set_mode(struct kmx61_data *data, u8 mode, u8 device,
347 bool update)
348{
349 int ret;
350 int acc_stby = -1, mag_stby = -1;
351
352 ret = i2c_smbus_read_byte_data(data->client, KMX61_REG_STBY);
353 if (ret < 0) {
354 dev_err(&data->client->dev, "Error reading reg_stby\n");
355 return ret;
356 }
357 if (device & KMX61_ACC) {
358 if (mode & KMX61_ACC_STBY_BIT) {
359 ret |= KMX61_ACC_STBY_BIT;
360 acc_stby = 1;
361 } else {
362 ret &= ~KMX61_ACC_STBY_BIT;
363 acc_stby = 0;
364 }
365 }
366
367 if (device & KMX61_MAG) {
368 if (mode & KMX61_MAG_STBY_BIT) {
369 ret |= KMX61_MAG_STBY_BIT;
370 mag_stby = 1;
371 } else {
372 ret &= ~KMX61_MAG_STBY_BIT;
373 mag_stby = 0;
374 }
375 }
376
377 if (mode & KMX61_ACT_STBY_BIT)
378 ret |= KMX61_ACT_STBY_BIT;
379
380 ret = i2c_smbus_write_byte_data(data->client, KMX61_REG_STBY, ret);
381 if (ret < 0) {
382 dev_err(&data->client->dev, "Error writing reg_stby\n");
383 return ret;
384 }
385
386 if (acc_stby != -1 && update)
387 data->acc_stby = acc_stby;
388 if (mag_stby != -1 && update)
389 data->mag_stby = mag_stby;
390
391 return 0;
392}
393
394static int kmx61_get_mode(struct kmx61_data *data, u8 *mode, u8 device)
395{
396 int ret;
397
398 ret = i2c_smbus_read_byte_data(data->client, KMX61_REG_STBY);
399 if (ret < 0) {
400 dev_err(&data->client->dev, "Error reading reg_stby\n");
401 return ret;
402 }
403 *mode = 0;
404
405 if (device & KMX61_ACC) {
406 if (ret & KMX61_ACC_STBY_BIT)
407 *mode |= KMX61_ACC_STBY_BIT;
408 else
409 *mode &= ~KMX61_ACC_STBY_BIT;
410 }
411
412 if (device & KMX61_MAG) {
413 if (ret & KMX61_MAG_STBY_BIT)
414 *mode |= KMX61_MAG_STBY_BIT;
415 else
416 *mode &= ~KMX61_MAG_STBY_BIT;
417 }
418
419 return 0;
420}
421
Daniel Balutafd3ae7a2014-12-03 15:31:53 +0200422int kmx61_set_wake_up_odr(struct kmx61_data *data, int val, int val2)
423{
424 int ret, odr_bits;
425
426 odr_bits = kmx61_convert_wake_up_odr_to_bit(val, val2);
427 if (odr_bits < 0)
428 return odr_bits;
429
430 ret = i2c_smbus_write_byte_data(data->client, KMX61_REG_CTRL2,
431 odr_bits);
432 if (ret < 0)
433 dev_err(&data->client->dev, "Error writing reg_ctrl2\n");
434 return ret;
435}
436
Daniel Baluta20ffac22014-12-03 15:31:48 +0200437static int kmx61_set_odr(struct kmx61_data *data, int val, int val2, u8 device)
438{
439 int ret;
440 u8 mode;
441 int lodr_bits, odr_bits;
442
443 ret = kmx61_get_mode(data, &mode, KMX61_ACC | KMX61_MAG);
444 if (ret < 0)
445 return ret;
446
447 lodr_bits = kmx61_convert_freq_to_bit(val, val2);
448 if (lodr_bits < 0)
449 return lodr_bits;
450
451 /* To change ODR, accel and magn must be in STDBY */
452 ret = kmx61_set_mode(data, KMX61_ALL_STBY, KMX61_ACC | KMX61_MAG,
453 true);
454 if (ret < 0)
455 return ret;
456
457 odr_bits = 0;
458 if (device & KMX61_ACC)
459 odr_bits |= lodr_bits << KMX61_ACC_ODR_SHIFT;
460 if (device & KMX61_MAG)
461 odr_bits |= lodr_bits << KMX61_MAG_ODR_SHIFT;
462
463 ret = i2c_smbus_write_byte_data(data->client, KMX61_REG_ODCNTL,
464 odr_bits);
465 if (ret < 0)
466 return ret;
467
Daniel Balutafd3ae7a2014-12-03 15:31:53 +0200468 if (device & KMX61_ACC) {
469 ret = kmx61_set_wake_up_odr(data, val, val2);
470 if (ret)
471 return ret;
472 }
473
Daniel Baluta20ffac22014-12-03 15:31:48 +0200474 return kmx61_set_mode(data, mode, KMX61_ACC | KMX61_MAG, true);
475}
476
477static int kmx61_get_odr(struct kmx61_data *data, int *val, int *val2,
478 u8 device)
479{ int i;
480 u8 lodr_bits;
481
482 if (device & KMX61_ACC)
483 lodr_bits = (data->odr_bits >> KMX61_ACC_ODR_SHIFT) &
484 KMX61_ACC_ODR_MASK;
485 else if (device & KMX61_MAG)
486 lodr_bits = (data->odr_bits >> KMX61_MAG_ODR_SHIFT) &
487 KMX61_MAG_ODR_MASK;
488 else
489 return -EINVAL;
490
491 for (i = 0; i < ARRAY_SIZE(kmx61_samp_freq_table); i++)
492 if (lodr_bits == kmx61_samp_freq_table[i].odr_bits) {
493 *val = kmx61_samp_freq_table[i].val;
494 *val2 = kmx61_samp_freq_table[i].val2;
495 return 0;
496 }
497 return -EINVAL;
498}
499
500static int kmx61_set_range(struct kmx61_data *data, u8 range)
501{
502 int ret;
503
504 ret = i2c_smbus_read_byte_data(data->client, KMX61_REG_CTRL1);
505 if (ret < 0) {
506 dev_err(&data->client->dev, "Error reading reg_ctrl1\n");
507 return ret;
508 }
509
510 ret &= ~KMX61_REG_CTRL1_GSEL_MASK;
511 ret |= range & KMX61_REG_CTRL1_GSEL_MASK;
512
513 ret = i2c_smbus_write_byte_data(data->client, KMX61_REG_CTRL1, ret);
514 if (ret < 0) {
515 dev_err(&data->client->dev, "Error writing reg_ctrl1\n");
516 return ret;
517 }
518
519 data->range = range;
520
521 return 0;
522}
523
524static int kmx61_set_scale(struct kmx61_data *data, u16 uscale)
525{
526 int ret, i;
527 u8 mode;
528
529 for (i = 0; i < ARRAY_SIZE(kmx61_uscale_table); i++) {
530 if (kmx61_uscale_table[i] == uscale) {
531 ret = kmx61_get_mode(data, &mode,
532 KMX61_ACC | KMX61_MAG);
533 if (ret < 0)
534 return ret;
535
536 ret = kmx61_set_mode(data, KMX61_ALL_STBY,
537 KMX61_ACC | KMX61_MAG, true);
538 if (ret < 0)
539 return ret;
540
541 ret = kmx61_set_range(data, i);
542 if (ret < 0)
543 return ret;
544
545 return kmx61_set_mode(data, mode,
546 KMX61_ACC | KMX61_MAG, true);
547 }
548 }
549 return -EINVAL;
550}
551
552static int kmx61_chip_init(struct kmx61_data *data)
553{
Daniel Balutafd3ae7a2014-12-03 15:31:53 +0200554 int ret, val, val2;
Daniel Baluta20ffac22014-12-03 15:31:48 +0200555
556 ret = i2c_smbus_read_byte_data(data->client, KMX61_REG_WHO_AM_I);
557 if (ret < 0) {
558 dev_err(&data->client->dev, "Error reading who_am_i\n");
559 return ret;
560 }
561
562 if (ret != KMX61_CHIP_ID) {
563 dev_err(&data->client->dev,
564 "Wrong chip id, got %x expected %x\n",
565 ret, KMX61_CHIP_ID);
566 return -EINVAL;
567 }
568
569 /* set accel 12bit, 4g range */
570 ret = kmx61_set_range(data, KMX61_RANGE_4G);
571 if (ret < 0)
572 return ret;
573
574 ret = i2c_smbus_read_byte_data(data->client, KMX61_REG_ODCNTL);
575 if (ret < 0) {
576 dev_err(&data->client->dev, "Error reading reg_odcntl\n");
577 return ret;
578 }
579 data->odr_bits = ret;
580
Daniel Balutafd3ae7a2014-12-03 15:31:53 +0200581 /* set output data rate for wake up (motion detection) function */
582 ret = kmx61_convert_bit_to_freq(data->odr_bits, &val, &val2);
583 if (ret < 0)
584 return ret;
585
586 ret = kmx61_set_wake_up_odr(data, val, val2);
587 if (ret < 0)
588 return ret;
589
Daniel Baluta20ffac22014-12-03 15:31:48 +0200590 /* set acc/magn to OPERATION mode */
591 ret = kmx61_set_mode(data, 0, KMX61_ACC | KMX61_MAG, true);
592 if (ret < 0)
593 return ret;
594
Daniel Balutafd3ae7a2014-12-03 15:31:53 +0200595 data->wake_thresh = KMX61_DEFAULT_WAKE_THRESH;
596 data->wake_duration = KMX61_DEFAULT_WAKE_DURATION;
597
Daniel Baluta20ffac22014-12-03 15:31:48 +0200598 return 0;
599}
600
Daniel Balutac3a23ecc2014-12-03 15:31:52 +0200601static int kmx61_setup_new_data_interrupt(struct kmx61_data *data,
602 bool status, u8 device)
603{
604 u8 mode;
605 int ret;
606
607 ret = kmx61_get_mode(data, &mode, KMX61_ACC | KMX61_MAG);
608 if (ret < 0)
609 return ret;
610
611 ret = kmx61_set_mode(data, KMX61_ALL_STBY, KMX61_ACC | KMX61_MAG, true);
612 if (ret < 0)
613 return ret;
614
615 ret = i2c_smbus_read_byte_data(data->client, KMX61_REG_INC1);
616 if (ret < 0) {
617 dev_err(&data->client->dev, "Error reading reg_ctrl1\n");
618 return ret;
619 }
620
621 if (status) {
622 ret |= KMX61_REG_INC1_BIT_IEN;
623 if (device & KMX61_ACC)
624 ret |= KMX61_REG_INC1_BIT_DRDYA;
625 if (device & KMX61_MAG)
626 ret |= KMX61_REG_INC1_BIT_DRDYM;
627 } else {
628 ret &= ~KMX61_REG_INC1_BIT_IEN;
629 if (device & KMX61_ACC)
630 ret &= ~KMX61_REG_INC1_BIT_DRDYA;
631 if (device & KMX61_MAG)
632 ret &= ~KMX61_REG_INC1_BIT_DRDYM;
633 }
634 ret = i2c_smbus_write_byte_data(data->client, KMX61_REG_INC1, ret);
635 if (ret < 0) {
636 dev_err(&data->client->dev, "Error writing reg_int_ctrl1\n");
637 return ret;
638 }
639
640 ret = i2c_smbus_read_byte_data(data->client, KMX61_REG_CTRL1);
641 if (ret < 0) {
642 dev_err(&data->client->dev, "Error reading reg_ctrl1\n");
643 return ret;
644 }
645
646 if (status)
647 ret |= KMX61_REG_CTRL1_BIT_DRDYE;
648 else
649 ret &= ~KMX61_REG_CTRL1_BIT_DRDYE;
650
651 ret = i2c_smbus_write_byte_data(data->client, KMX61_REG_CTRL1, ret);
652 if (ret < 0) {
653 dev_err(&data->client->dev, "Error writing reg_ctrl1\n");
654 return ret;
655 }
656
657 ret = kmx61_set_mode(data, mode, KMX61_ACC | KMX61_MAG, true);
658 if (ret)
659 return ret;
660
661 return 0;
662}
663
Daniel Balutafd3ae7a2014-12-03 15:31:53 +0200664static int kmx61_chip_update_thresholds(struct kmx61_data *data)
665{
666 int ret;
667
668 ret = i2c_smbus_write_byte_data(data->client,
669 KMX61_REG_WUF_TIMER,
670 data->wake_duration);
671 if (ret < 0) {
672 dev_err(&data->client->dev, "Errow writing reg_wuf_timer\n");
673 return ret;
674 }
675
676 ret = i2c_smbus_write_byte_data(data->client,
677 KMX61_REG_WUF_THRESH,
678 data->wake_thresh);
679 if (ret < 0) {
680 dev_err(&data->client->dev, "Error writing reg_wuf_thresh\n");
681 return ret;
682 }
683
684 return 0;
685}
686
687static int kmx61_setup_any_motion_interrupt(struct kmx61_data *data,
688 bool status, u8 device)
689{
690 u8 mode;
691 int ret;
692
693 ret = kmx61_get_mode(data, &mode, KMX61_ACC | KMX61_MAG);
694 if (ret < 0)
695 return ret;
696
697 ret = kmx61_set_mode(data, KMX61_ALL_STBY, KMX61_ACC | KMX61_MAG, true);
698 if (ret < 0)
699 return ret;
700
701 ret = kmx61_chip_update_thresholds(data);
702 if (ret < 0)
703 return ret;
704
705 ret = i2c_smbus_read_byte_data(data->client, KMX61_REG_INC1);
706 if (ret < 0) {
707 dev_err(&data->client->dev, "Error reading reg_inc1\n");
708 return ret;
709 }
710 if (status)
711 ret |= (KMX61_REG_INC1_BIT_IEN | KMX61_REG_INC1_BIT_WUFS);
712 else
713 ret &= ~(KMX61_REG_INC1_BIT_IEN | KMX61_REG_INC1_BIT_WUFS);
714
715 ret = i2c_smbus_write_byte_data(data->client, KMX61_REG_INC1, ret);
716 if (ret < 0) {
717 dev_err(&data->client->dev, "Error writing reg_inc1\n");
718 return ret;
719 }
720
721 ret = i2c_smbus_read_byte_data(data->client, KMX61_REG_CTRL1);
722 if (ret < 0) {
723 dev_err(&data->client->dev, "Error reading reg_ctrl1\n");
724 return ret;
725 }
726
727 if (status)
728 ret |= KMX61_REG_CTRL1_BIT_WUFE | KMX61_REG_CTRL1_BIT_BTSE;
729 else
730 ret &= ~(KMX61_REG_CTRL1_BIT_WUFE | KMX61_REG_CTRL1_BIT_BTSE);
731
732 ret = i2c_smbus_write_byte_data(data->client, KMX61_REG_CTRL1, ret);
733 if (ret < 0) {
734 dev_err(&data->client->dev, "Error writing reg_ctrl1\n");
735 return ret;
736 }
737 mode |= KMX61_ACT_STBY_BIT;
738 ret = kmx61_set_mode(data, mode, KMX61_ACC | KMX61_MAG, true);
739 if (ret)
740 return ret;
741
742 return 0;
743}
744
Daniel Balutaaff86092014-12-03 15:31:50 +0200745/**
746 * kmx61_set_power_state() - set power state for kmx61 @device
747 * @data - kmx61 device private pointer
748 * @on - power state to be set for @device
749 * @device - bitmask indicating device for which @on state needs to be set
750 *
751 * Notice that when ACC power state needs to be set to ON and MAG is in
752 * OPERATION then we know that kmx61_runtime_resume was already called
753 * so we must set ACC OPERATION mode here. The same happens when MAG power
754 * state needs to be set to ON and ACC is in OPERATION.
755 */
756static int kmx61_set_power_state(struct kmx61_data *data, bool on, u8 device)
757{
758#ifdef CONFIG_PM_RUNTIME
759 int ret;
760
761 if (device & KMX61_ACC) {
762 if (on && !data->acc_ps && !data->mag_stby) {
763 ret = kmx61_set_mode(data, 0, KMX61_ACC, true);
764 if (ret < 0)
765 return ret;
766 }
767 data->acc_ps = on;
768 }
769 if (device & KMX61_MAG) {
770 if (on && !data->mag_ps && !data->acc_stby) {
771 ret = kmx61_set_mode(data, 0, KMX61_MAG, true);
772 if (ret < 0)
773 return ret;
774 }
775 data->mag_ps = on;
776 }
777
778 if (on) {
779 ret = pm_runtime_get_sync(&data->client->dev);
780 } else {
781 pm_runtime_mark_last_busy(&data->client->dev);
782 ret = pm_runtime_put_autosuspend(&data->client->dev);
783 }
784 if (ret < 0) {
785 dev_err(&data->client->dev,
786 "Failed: kmx61_set_power_state for %d, ret %d\n",
787 on, ret);
788 if (on)
789 pm_runtime_put_noidle(&data->client->dev);
790
791 return ret;
792 }
793#endif
794 return 0;
795}
796
Daniel Baluta20ffac22014-12-03 15:31:48 +0200797static int kmx61_read_measurement(struct kmx61_data *data, u8 base, u8 offset)
798{
799 int ret;
800 u8 reg = base + offset * 2;
801
802 ret = i2c_smbus_read_word_data(data->client, reg);
803 if (ret < 0)
804 dev_err(&data->client->dev, "failed to read reg at %x\n", reg);
805
806 return ret;
807}
808
809static int kmx61_read_raw(struct iio_dev *indio_dev,
810 struct iio_chan_spec const *chan, int *val,
811 int *val2, long mask)
812{
813 int ret;
814 u8 base_reg;
815 struct kmx61_data *data = kmx61_get_data(indio_dev);
816
817 switch (mask) {
818 case IIO_CHAN_INFO_RAW:
819 switch (chan->type) {
820 case IIO_ACCEL:
821 base_reg = KMX61_ACC_XOUT_L;
822 break;
823 case IIO_MAGN:
824 base_reg = KMX61_MAG_XOUT_L;
825 break;
826 default:
827 return -EINVAL;
828 }
829 mutex_lock(&data->lock);
830
Daniel Balutaaff86092014-12-03 15:31:50 +0200831 kmx61_set_power_state(data, true, chan->address);
Daniel Baluta20ffac22014-12-03 15:31:48 +0200832 ret = kmx61_read_measurement(data, base_reg, chan->scan_index);
833 if (ret < 0) {
Daniel Balutaaff86092014-12-03 15:31:50 +0200834 kmx61_set_power_state(data, false, chan->address);
Daniel Baluta20ffac22014-12-03 15:31:48 +0200835 mutex_unlock(&data->lock);
836 return ret;
837 }
838 *val = sign_extend32(ret >> chan->scan_type.shift,
839 chan->scan_type.realbits - 1);
Daniel Balutaaff86092014-12-03 15:31:50 +0200840 kmx61_set_power_state(data, false, chan->address);
Daniel Baluta20ffac22014-12-03 15:31:48 +0200841
842 mutex_unlock(&data->lock);
843 return IIO_VAL_INT;
844 case IIO_CHAN_INFO_SCALE:
845 switch (chan->type) {
846 case IIO_ACCEL:
847 *val = 0;
848 *val2 = kmx61_uscale_table[data->range];
849 return IIO_VAL_INT_PLUS_MICRO;
850 case IIO_MAGN:
851 /* 14 bits res, 1465 microGauss per magn count */
852 *val = 0;
853 *val2 = 1465;
854 return IIO_VAL_INT_PLUS_MICRO;
855 default:
856 return -EINVAL;
857 }
858 case IIO_CHAN_INFO_SAMP_FREQ:
859 if (chan->type != IIO_ACCEL && chan->type != IIO_MAGN)
860 return -EINVAL;
861
862 mutex_lock(&data->lock);
863 ret = kmx61_get_odr(data, val, val2, chan->address);
864 mutex_unlock(&data->lock);
865 if (ret)
866 return -EINVAL;
867 return IIO_VAL_INT_PLUS_MICRO;
868 }
869 return -EINVAL;
870}
871
872static int kmx61_write_raw(struct iio_dev *indio_dev,
873 struct iio_chan_spec const *chan, int val,
874 int val2, long mask)
875{
876 int ret;
877 struct kmx61_data *data = kmx61_get_data(indio_dev);
878
879 switch (mask) {
880 case IIO_CHAN_INFO_SAMP_FREQ:
881 if (chan->type != IIO_ACCEL && chan->type != IIO_MAGN)
882 return -EINVAL;
883
884 mutex_lock(&data->lock);
885 ret = kmx61_set_odr(data, val, val2, chan->address);
886 mutex_unlock(&data->lock);
887 return ret;
888 case IIO_CHAN_INFO_SCALE:
889 switch (chan->type) {
890 case IIO_ACCEL:
891 if (val != 0)
892 return -EINVAL;
893 mutex_lock(&data->lock);
894 ret = kmx61_set_scale(data, val2);
895 mutex_unlock(&data->lock);
896 return ret;
897 default:
898 return -EINVAL;
899 }
900 default:
901 return -EINVAL;
902 }
903}
904
Daniel Balutafd3ae7a2014-12-03 15:31:53 +0200905static int kmx61_read_event(struct iio_dev *indio_dev,
906 const struct iio_chan_spec *chan,
907 enum iio_event_type type,
908 enum iio_event_direction dir,
909 enum iio_event_info info,
910 int *val, int *val2)
911{
912 struct kmx61_data *data = kmx61_get_data(indio_dev);
913
914 *val2 = 0;
915 switch (info) {
916 case IIO_EV_INFO_VALUE:
917 *val = data->wake_thresh;
918 break;
919 case IIO_EV_INFO_PERIOD:
920 *val = data->wake_duration;
921 break;
922 default:
923 return -EINVAL;
924 }
925
926 return IIO_VAL_INT;
927}
928
929static int kmx61_write_event(struct iio_dev *indio_dev,
930 const struct iio_chan_spec *chan,
931 enum iio_event_type type,
932 enum iio_event_direction dir,
933 enum iio_event_info info,
934 int val, int val2)
935{
936 struct kmx61_data *data = kmx61_get_data(indio_dev);
937
938 if (data->ev_enable_state)
939 return -EBUSY;
940
941 switch (info) {
942 case IIO_EV_INFO_VALUE:
943 data->wake_thresh = val;
944 break;
945 case IIO_EV_INFO_PERIOD:
946 data->wake_duration = val;
947 break;
948 default:
949 return -EINVAL;
950 }
951
952 return IIO_VAL_INT;
953}
954
955static int kmx61_read_event_config(struct iio_dev *indio_dev,
956 const struct iio_chan_spec *chan,
957 enum iio_event_type type,
958 enum iio_event_direction dir)
959{
960 struct kmx61_data *data = kmx61_get_data(indio_dev);
961
962 return data->ev_enable_state;
963}
964
965static int kmx61_write_event_config(struct iio_dev *indio_dev,
966 const struct iio_chan_spec *chan,
967 enum iio_event_type type,
968 enum iio_event_direction dir,
969 int state)
970{
971 struct kmx61_data *data = kmx61_get_data(indio_dev);
972 int ret;
973
974 if (state && data->ev_enable_state)
975 return 0;
976
977 mutex_lock(&data->lock);
978
979 if (!state && data->motion_trig_on) {
980 data->ev_enable_state = 0;
981 mutex_unlock(&data->lock);
982 return 0;
983 }
984
985 ret = kmx61_set_power_state(data, state, KMX61_ACC);
986 if (ret < 0) {
987 mutex_unlock(&data->lock);
988 return ret;
989 }
990
991 ret = kmx61_setup_any_motion_interrupt(data, state, KMX61_ACC);
992 if (ret < 0) {
993 kmx61_set_power_state(data, false, KMX61_ACC);
994 mutex_unlock(&data->lock);
995 return ret;
996 }
997
998 data->ev_enable_state = state;
999 mutex_unlock(&data->lock);
1000
1001 return 0;
1002}
1003
Daniel Balutac3a23ecc2014-12-03 15:31:52 +02001004static int kmx61_acc_validate_trigger(struct iio_dev *indio_dev,
1005 struct iio_trigger *trig)
1006{
1007 struct kmx61_data *data = kmx61_get_data(indio_dev);
1008
Daniel Balutafd3ae7a2014-12-03 15:31:53 +02001009 if (data->acc_dready_trig != trig && data->motion_trig != trig)
Daniel Balutac3a23ecc2014-12-03 15:31:52 +02001010 return -EINVAL;
1011
1012 return 0;
1013}
1014
1015static int kmx61_mag_validate_trigger(struct iio_dev *indio_dev,
1016 struct iio_trigger *trig)
1017{
1018 struct kmx61_data *data = kmx61_get_data(indio_dev);
1019
1020 if (data->mag_dready_trig != trig)
1021 return -EINVAL;
1022
1023 return 0;
1024}
1025
Daniel Baluta20ffac22014-12-03 15:31:48 +02001026static const struct iio_info kmx61_acc_info = {
1027 .driver_module = THIS_MODULE,
1028 .read_raw = kmx61_read_raw,
1029 .write_raw = kmx61_write_raw,
1030 .attrs = &kmx61_acc_attribute_group,
Daniel Balutafd3ae7a2014-12-03 15:31:53 +02001031 .read_event_value = kmx61_read_event,
1032 .write_event_value = kmx61_write_event,
1033 .read_event_config = kmx61_read_event_config,
1034 .write_event_config = kmx61_write_event_config,
Daniel Balutac3a23ecc2014-12-03 15:31:52 +02001035 .validate_trigger = kmx61_acc_validate_trigger,
Daniel Baluta20ffac22014-12-03 15:31:48 +02001036};
1037
1038static const struct iio_info kmx61_mag_info = {
1039 .driver_module = THIS_MODULE,
1040 .read_raw = kmx61_read_raw,
1041 .write_raw = kmx61_write_raw,
1042 .attrs = &kmx61_mag_attribute_group,
Daniel Balutac3a23ecc2014-12-03 15:31:52 +02001043 .validate_trigger = kmx61_mag_validate_trigger,
Daniel Baluta20ffac22014-12-03 15:31:48 +02001044};
1045
Daniel Balutac3a23ecc2014-12-03 15:31:52 +02001046
1047static int kmx61_data_rdy_trigger_set_state(struct iio_trigger *trig,
1048 bool state)
1049{
1050 int ret = 0;
1051 u8 device;
1052
1053 struct iio_dev *indio_dev = iio_trigger_get_drvdata(trig);
Daniel Balutafd3ae7a2014-12-03 15:31:53 +02001054 struct kmx61_data *data = kmx61_get_data(indio_dev);
Daniel Balutac3a23ecc2014-12-03 15:31:52 +02001055
1056 mutex_lock(&data->lock);
1057
Daniel Balutafd3ae7a2014-12-03 15:31:53 +02001058 if (!state && data->ev_enable_state && data->motion_trig_on) {
1059 data->motion_trig_on = false;
1060 mutex_unlock(&data->lock);
1061 return 0;
1062 }
1063
1064
1065 if (data->acc_dready_trig == trig || data->motion_trig)
Daniel Balutac3a23ecc2014-12-03 15:31:52 +02001066 device = KMX61_ACC;
1067 else
1068 device = KMX61_MAG;
1069
1070 ret = kmx61_set_power_state(data, state, device);
1071 if (ret < 0) {
1072 mutex_unlock(&data->lock);
1073 return ret;
1074 }
1075
Daniel Balutafd3ae7a2014-12-03 15:31:53 +02001076 if (data->acc_dready_trig == trig || data->mag_dready_trig == trig)
1077 ret = kmx61_setup_new_data_interrupt(data, state, device);
1078 else
1079 ret = kmx61_setup_any_motion_interrupt(data, state, KMX61_ACC);
Daniel Balutac3a23ecc2014-12-03 15:31:52 +02001080 if (ret < 0) {
1081 kmx61_set_power_state(data, false, device);
1082 mutex_unlock(&data->lock);
1083 return ret;
1084 }
1085
1086 if (data->acc_dready_trig == trig)
1087 data->acc_dready_trig_on = state;
Daniel Balutafd3ae7a2014-12-03 15:31:53 +02001088 else if (data->mag_dready_trig == trig)
Daniel Balutac3a23ecc2014-12-03 15:31:52 +02001089 data->mag_dready_trig_on = state;
Daniel Balutafd3ae7a2014-12-03 15:31:53 +02001090 else
1091 data->motion_trig_on = state;
Daniel Balutac3a23ecc2014-12-03 15:31:52 +02001092
1093 mutex_unlock(&data->lock);
1094
1095 return 0;
1096}
1097
1098static int kmx61_trig_try_reenable(struct iio_trigger *trig)
1099{
1100 struct iio_dev *indio_dev = iio_trigger_get_drvdata(trig);
1101 struct kmx61_data *data = kmx61_get_data(indio_dev);
1102 int ret;
1103
1104 ret = i2c_smbus_read_byte_data(data->client, KMX61_REG_INL);
1105 if (ret < 0) {
1106 dev_err(&data->client->dev, "Error reading reg_inl\n");
1107 return ret;
1108 }
1109
1110 return 0;
1111}
1112
1113static const struct iio_trigger_ops kmx61_trigger_ops = {
1114 .set_trigger_state = kmx61_data_rdy_trigger_set_state,
1115 .try_reenable = kmx61_trig_try_reenable,
1116 .owner = THIS_MODULE,
1117};
1118
Daniel Balutafd3ae7a2014-12-03 15:31:53 +02001119static irqreturn_t kmx61_event_handler(int irq, void *private)
1120{
1121 struct kmx61_data *data = private;
1122 struct iio_dev *indio_dev = data->acc_indio_dev;
1123 int ret;
1124
1125 ret = i2c_smbus_read_byte_data(data->client, KMX61_REG_INS1);
1126 if (ret < 0) {
1127 dev_err(&data->client->dev, "Error reading reg_ins1\n");
1128 goto ack_intr;
1129 }
1130
1131 if (ret & KMX61_REG_INS1_BIT_WUFS) {
1132 ret = i2c_smbus_read_byte_data(data->client, KMX61_REG_INS2);
1133 if (ret < 0) {
1134 dev_err(&data->client->dev, "Error reading reg_ins2\n");
1135 goto ack_intr;
1136 }
1137
1138 if (ret & KMX61_REG_INS2_BIT_XN)
1139 iio_push_event(indio_dev,
1140 IIO_MOD_EVENT_CODE(IIO_ACCEL,
1141 0,
1142 IIO_MOD_X,
1143 IIO_EV_TYPE_THRESH,
1144 IIO_EV_DIR_FALLING),
1145 0);
1146
1147 if (ret & KMX61_REG_INS2_BIT_XP)
1148 iio_push_event(indio_dev,
1149 IIO_MOD_EVENT_CODE(IIO_ACCEL,
1150 0,
1151 IIO_MOD_X,
1152 IIO_EV_TYPE_THRESH,
1153 IIO_EV_DIR_RISING),
1154 0);
1155
1156 if (ret & KMX61_REG_INS2_BIT_YN)
1157 iio_push_event(indio_dev,
1158 IIO_MOD_EVENT_CODE(IIO_ACCEL,
1159 0,
1160 IIO_MOD_Y,
1161 IIO_EV_TYPE_THRESH,
1162 IIO_EV_DIR_FALLING),
1163 0);
1164
1165 if (ret & KMX61_REG_INS2_BIT_YP)
1166 iio_push_event(indio_dev,
1167 IIO_MOD_EVENT_CODE(IIO_ACCEL,
1168 0,
1169 IIO_MOD_Y,
1170 IIO_EV_TYPE_THRESH,
1171 IIO_EV_DIR_RISING),
1172 0);
1173
1174 if (ret & KMX61_REG_INS2_BIT_ZN)
1175 iio_push_event(indio_dev,
1176 IIO_MOD_EVENT_CODE(IIO_ACCEL,
1177 0,
1178 IIO_MOD_Z,
1179 IIO_EV_TYPE_THRESH,
1180 IIO_EV_DIR_FALLING),
1181 0);
1182
1183 if (ret & KMX61_REG_INS2_BIT_ZP)
1184 iio_push_event(indio_dev,
1185 IIO_MOD_EVENT_CODE(IIO_ACCEL,
1186 0,
1187 IIO_MOD_Z,
1188 IIO_EV_TYPE_THRESH,
1189 IIO_EV_DIR_RISING),
1190 0);
1191 }
1192
1193ack_intr:
1194 ret = i2c_smbus_read_byte_data(data->client, KMX61_REG_CTRL1);
1195 if (ret < 0)
1196 dev_err(&data->client->dev, "Error reading reg_ctrl1\n");
1197
1198 ret |= KMX61_REG_CTRL1_BIT_RES;
1199 ret = i2c_smbus_write_byte_data(data->client, KMX61_REG_CTRL1, ret);
1200 if (ret < 0)
1201 dev_err(&data->client->dev, "Error reading reg_ctrl1\n");
1202
1203 ret = i2c_smbus_read_byte_data(data->client, KMX61_REG_INL);
1204 if (ret < 0)
1205 dev_err(&data->client->dev, "Error reading reg_inl\n");
1206
1207 ret = i2c_smbus_read_byte_data(data->client, KMX61_REG_INS1);
1208
1209 return IRQ_HANDLED;
1210}
1211
Daniel Balutac3a23ecc2014-12-03 15:31:52 +02001212static irqreturn_t kmx61_data_rdy_trig_poll(int irq, void *private)
1213{
1214 struct kmx61_data *data = private;
1215
1216 if (data->acc_dready_trig_on)
1217 iio_trigger_poll(data->acc_dready_trig);
1218 if (data->mag_dready_trig_on)
1219 iio_trigger_poll(data->mag_dready_trig);
1220
Daniel Balutafd3ae7a2014-12-03 15:31:53 +02001221 if (data->motion_trig_on)
1222 iio_trigger_poll(data->motion_trig);
1223
1224 if (data->ev_enable_state)
1225 return IRQ_WAKE_THREAD;
Daniel Balutac3a23ecc2014-12-03 15:31:52 +02001226 return IRQ_HANDLED;
1227}
1228
1229static irqreturn_t kmx61_trigger_handler(int irq, void *p)
1230{
1231 struct iio_poll_func *pf = p;
1232 struct iio_dev *indio_dev = pf->indio_dev;
1233 struct kmx61_data *data = kmx61_get_data(indio_dev);
1234 int bit, ret, i = 0;
1235 s16 buffer[8];
1236
1237 mutex_lock(&data->lock);
1238 for_each_set_bit(bit, indio_dev->buffer->scan_mask,
1239 indio_dev->masklength) {
1240 ret = kmx61_read_measurement(data, KMX61_ACC_XOUT_L, bit);
1241 if (ret < 0) {
1242 mutex_unlock(&data->lock);
1243 goto err;
1244 }
1245 buffer[i++] = ret;
1246 }
1247 mutex_unlock(&data->lock);
1248
1249 iio_push_to_buffers(indio_dev, buffer);
1250err:
1251 iio_trigger_notify_done(indio_dev->trig);
1252
1253 return IRQ_HANDLED;
1254}
1255
Daniel Balutab25862c2014-12-03 15:31:49 +02001256static const char *kmx61_match_acpi_device(struct device *dev)
1257{
1258 const struct acpi_device_id *id;
1259
1260 id = acpi_match_device(dev->driver->acpi_match_table, dev);
1261 if (!id)
1262 return NULL;
1263 return dev_name(dev);
1264}
1265
1266static int kmx61_gpio_probe(struct i2c_client *client, struct kmx61_data *data)
1267{
1268 struct device *dev;
1269 struct gpio_desc *gpio;
1270 int ret;
1271
1272 if (!client)
1273 return -EINVAL;
1274
1275 dev = &client->dev;
1276
1277 /* data ready gpio interrupt pin */
1278 gpio = devm_gpiod_get_index(dev, KMX61_GPIO_NAME, 0);
1279 if (IS_ERR(gpio)) {
1280 dev_err(dev, "acpi gpio get index failed\n");
1281 return PTR_ERR(gpio);
1282 }
1283
1284 ret = gpiod_direction_input(gpio);
1285 if (ret)
1286 return ret;
1287
1288 ret = gpiod_to_irq(gpio);
1289
1290 dev_dbg(dev, "GPIO resource, no:%d irq:%d\n", desc_to_gpio(gpio), ret);
1291 return ret;
1292}
1293
Daniel Baluta20ffac22014-12-03 15:31:48 +02001294static struct iio_dev *kmx61_indiodev_setup(struct kmx61_data *data,
1295 const struct iio_info *info,
1296 const struct iio_chan_spec *chan,
1297 int num_channels,
1298 const char *name)
1299{
1300 struct iio_dev *indio_dev;
1301
1302 indio_dev = devm_iio_device_alloc(&data->client->dev, sizeof(data));
1303 if (!indio_dev)
1304 return ERR_PTR(-ENOMEM);
1305
1306 kmx61_set_data(indio_dev, data);
1307
1308 indio_dev->dev.parent = &data->client->dev;
1309 indio_dev->channels = chan;
1310 indio_dev->num_channels = num_channels;
1311 indio_dev->name = name;
1312 indio_dev->modes = INDIO_DIRECT_MODE;
1313 indio_dev->info = info;
1314
1315 return indio_dev;
1316}
1317
Daniel Balutac3a23ecc2014-12-03 15:31:52 +02001318static struct iio_trigger *kmx61_trigger_setup(struct kmx61_data *data,
1319 struct iio_dev *indio_dev,
1320 const char *tag)
1321{
1322 struct iio_trigger *trig;
1323 int ret;
1324
1325 trig = devm_iio_trigger_alloc(&data->client->dev,
1326 "%s-%s-dev%d",
1327 indio_dev->name,
1328 tag,
1329 indio_dev->id);
1330 if (!trig)
1331 return ERR_PTR(-ENOMEM);
1332
1333 trig->dev.parent = &data->client->dev;
1334 trig->ops = &kmx61_trigger_ops;
1335 iio_trigger_set_drvdata(trig, indio_dev);
1336
1337 ret = iio_trigger_register(trig);
1338 if (ret)
1339 return ERR_PTR(ret);
1340
1341 return trig;
1342}
1343
Daniel Baluta20ffac22014-12-03 15:31:48 +02001344static int kmx61_probe(struct i2c_client *client,
1345 const struct i2c_device_id *id)
1346{
1347 int ret;
1348 struct kmx61_data *data;
1349 const char *name = NULL;
1350
1351 data = devm_kzalloc(&client->dev, sizeof(*data), GFP_KERNEL);
1352 if (!data)
1353 return -ENOMEM;
1354
1355 i2c_set_clientdata(client, data);
1356 data->client = client;
1357
1358 mutex_init(&data->lock);
1359
Daniel Balutab25862c2014-12-03 15:31:49 +02001360 if (id)
1361 name = id->name;
1362 else if (ACPI_HANDLE(&client->dev))
1363 name = kmx61_match_acpi_device(&client->dev);
1364 else
1365 return -ENODEV;
1366
Daniel Baluta20ffac22014-12-03 15:31:48 +02001367 data->acc_indio_dev =
1368 kmx61_indiodev_setup(data, &kmx61_acc_info,
1369 kmx61_acc_channels,
1370 ARRAY_SIZE(kmx61_acc_channels),
1371 name);
1372 if (IS_ERR(data->acc_indio_dev))
1373 return PTR_ERR(data->acc_indio_dev);
1374
1375 data->mag_indio_dev =
1376 kmx61_indiodev_setup(data, &kmx61_mag_info,
1377 kmx61_mag_channels,
1378 ARRAY_SIZE(kmx61_mag_channels),
1379 name);
1380 if (IS_ERR(data->mag_indio_dev))
1381 return PTR_ERR(data->mag_indio_dev);
1382
1383 ret = kmx61_chip_init(data);
1384 if (ret < 0)
1385 return ret;
1386
Daniel Balutab25862c2014-12-03 15:31:49 +02001387 if (client->irq < 0)
1388 client->irq = kmx61_gpio_probe(client, data);
1389
Daniel Balutac3a23ecc2014-12-03 15:31:52 +02001390 if (client->irq >= 0) {
1391 ret = devm_request_threaded_irq(&client->dev, client->irq,
1392 kmx61_data_rdy_trig_poll,
Daniel Balutafd3ae7a2014-12-03 15:31:53 +02001393 kmx61_event_handler,
Daniel Balutac3a23ecc2014-12-03 15:31:52 +02001394 IRQF_TRIGGER_RISING,
1395 KMX61_IRQ_NAME,
1396 data);
1397 if (ret)
1398 goto err_chip_uninit;
1399
1400 data->acc_dready_trig =
1401 kmx61_trigger_setup(data, data->acc_indio_dev,
1402 "dready");
1403 if (IS_ERR(data->acc_dready_trig))
1404 return PTR_ERR(data->acc_dready_trig);
1405
1406 data->mag_dready_trig =
1407 kmx61_trigger_setup(data, data->mag_indio_dev,
1408 "dready");
1409 if (IS_ERR(data->mag_dready_trig)) {
1410 ret = PTR_ERR(data->mag_dready_trig);
1411 goto err_trigger_unregister;
1412 }
1413
Daniel Balutafd3ae7a2014-12-03 15:31:53 +02001414 data->motion_trig =
1415 kmx61_trigger_setup(data, data->acc_indio_dev,
1416 "any-motion");
1417 if (IS_ERR(data->motion_trig)) {
1418 ret = PTR_ERR(data->motion_trig);
1419 goto err_trigger_unregister;
1420 }
1421
Daniel Balutac3a23ecc2014-12-03 15:31:52 +02001422 ret = iio_triggered_buffer_setup(data->acc_indio_dev,
1423 &iio_pollfunc_store_time,
1424 kmx61_trigger_handler,
1425 NULL);
1426 if (ret < 0) {
1427 dev_err(&data->client->dev,
1428 "Failed to setup acc triggered buffer\n");
1429 goto err_trigger_unregister;
1430 }
1431
1432 ret = iio_triggered_buffer_setup(data->mag_indio_dev,
1433 &iio_pollfunc_store_time,
1434 kmx61_trigger_handler,
1435 NULL);
1436 if (ret < 0) {
1437 dev_err(&data->client->dev,
1438 "Failed to setup mag triggered buffer\n");
1439 goto err_trigger_unregister;
1440 }
1441 }
1442
Daniel Baluta20ffac22014-12-03 15:31:48 +02001443 ret = iio_device_register(data->acc_indio_dev);
1444 if (ret < 0) {
1445 dev_err(&client->dev, "Failed to register acc iio device\n");
Daniel Balutac3a23ecc2014-12-03 15:31:52 +02001446 goto err_buffer_cleanup;
Daniel Baluta20ffac22014-12-03 15:31:48 +02001447 }
1448
1449 ret = iio_device_register(data->mag_indio_dev);
1450 if (ret < 0) {
1451 dev_err(&client->dev, "Failed to register mag iio device\n");
Daniel Balutaaff86092014-12-03 15:31:50 +02001452 goto err_iio_unregister_acc;
Daniel Baluta20ffac22014-12-03 15:31:48 +02001453 }
1454
Daniel Balutaaff86092014-12-03 15:31:50 +02001455 ret = pm_runtime_set_active(&client->dev);
1456 if (ret < 0)
1457 goto err_iio_unregister_mag;
1458
1459 pm_runtime_enable(&client->dev);
1460 pm_runtime_set_autosuspend_delay(&client->dev, KMX61_SLEEP_DELAY_MS);
1461 pm_runtime_use_autosuspend(&client->dev);
1462
Daniel Baluta20ffac22014-12-03 15:31:48 +02001463 return 0;
1464
Daniel Balutaaff86092014-12-03 15:31:50 +02001465err_iio_unregister_mag:
1466 iio_device_unregister(data->mag_indio_dev);
1467err_iio_unregister_acc:
Daniel Baluta20ffac22014-12-03 15:31:48 +02001468 iio_device_unregister(data->acc_indio_dev);
Daniel Balutac3a23ecc2014-12-03 15:31:52 +02001469err_buffer_cleanup:
1470 if (client->irq >= 0) {
1471 iio_triggered_buffer_cleanup(data->acc_indio_dev);
1472 iio_triggered_buffer_cleanup(data->mag_indio_dev);
1473 }
1474err_trigger_unregister:
1475 if (data->acc_dready_trig)
1476 iio_trigger_unregister(data->acc_dready_trig);
1477 if (data->mag_dready_trig)
1478 iio_trigger_unregister(data->mag_dready_trig);
Daniel Balutafd3ae7a2014-12-03 15:31:53 +02001479 if (data->motion_trig)
1480 iio_trigger_unregister(data->motion_trig);
Daniel Baluta20ffac22014-12-03 15:31:48 +02001481err_chip_uninit:
1482 kmx61_set_mode(data, KMX61_ALL_STBY, KMX61_ACC | KMX61_MAG, true);
1483 return ret;
1484}
1485
1486static int kmx61_remove(struct i2c_client *client)
1487{
1488 struct kmx61_data *data = i2c_get_clientdata(client);
1489
Daniel Balutaaff86092014-12-03 15:31:50 +02001490 pm_runtime_disable(&client->dev);
1491 pm_runtime_set_suspended(&client->dev);
1492 pm_runtime_put_noidle(&client->dev);
1493
Daniel Baluta20ffac22014-12-03 15:31:48 +02001494 iio_device_unregister(data->acc_indio_dev);
1495 iio_device_unregister(data->mag_indio_dev);
1496
Daniel Balutac3a23ecc2014-12-03 15:31:52 +02001497 if (client->irq >= 0) {
1498 iio_triggered_buffer_cleanup(data->acc_indio_dev);
1499 iio_triggered_buffer_cleanup(data->mag_indio_dev);
1500 iio_trigger_unregister(data->acc_dready_trig);
1501 iio_trigger_unregister(data->mag_dready_trig);
Daniel Balutafd3ae7a2014-12-03 15:31:53 +02001502 iio_trigger_unregister(data->motion_trig);
Daniel Balutac3a23ecc2014-12-03 15:31:52 +02001503 }
1504
Daniel Baluta20ffac22014-12-03 15:31:48 +02001505 mutex_lock(&data->lock);
1506 kmx61_set_mode(data, KMX61_ALL_STBY, KMX61_ACC | KMX61_MAG, true);
1507 mutex_unlock(&data->lock);
1508
1509 return 0;
1510}
1511
Daniel Baluta3b9c40e2014-12-03 15:31:51 +02001512#ifdef CONFIG_PM_SLEEP
1513static int kmx61_suspend(struct device *dev)
1514{
1515 int ret;
1516 struct kmx61_data *data = i2c_get_clientdata(to_i2c_client(dev));
1517
1518 mutex_lock(&data->lock);
1519 ret = kmx61_set_mode(data, KMX61_ALL_STBY, KMX61_ACC | KMX61_MAG,
1520 false);
1521 mutex_unlock(&data->lock);
1522
1523 return ret;
1524}
1525
1526static int kmx61_resume(struct device *dev)
1527{
1528 u8 stby = 0;
1529 struct kmx61_data *data = i2c_get_clientdata(to_i2c_client(dev));
1530
1531 if (data->acc_stby)
1532 stby |= KMX61_ACC_STBY_BIT;
1533 if (data->mag_stby)
1534 stby |= KMX61_MAG_STBY_BIT;
1535
1536 return kmx61_set_mode(data, stby, KMX61_ACC | KMX61_MAG, true);
1537}
1538#endif
Daniel Balutaaff86092014-12-03 15:31:50 +02001539
1540#ifdef CONFIG_PM_RUNTIME
1541static int kmx61_runtime_suspend(struct device *dev)
1542{
1543 struct kmx61_data *data = i2c_get_clientdata(to_i2c_client(dev));
1544 int ret;
1545
1546 mutex_lock(&data->lock);
1547 ret = kmx61_set_mode(data, KMX61_ALL_STBY, KMX61_ACC | KMX61_MAG, true);
1548 mutex_unlock(&data->lock);
1549
1550 return ret;
1551}
1552
1553static int kmx61_runtime_resume(struct device *dev)
1554{
1555 struct kmx61_data *data = i2c_get_clientdata(to_i2c_client(dev));
1556 u8 stby = 0;
1557
1558 if (!data->acc_ps)
1559 stby |= KMX61_ACC_STBY_BIT;
1560 if (!data->mag_ps)
1561 stby |= KMX61_MAG_STBY_BIT;
1562
1563 return kmx61_set_mode(data, stby, KMX61_ACC | KMX61_MAG, true);
1564}
1565#endif
1566
1567static const struct dev_pm_ops kmx61_pm_ops = {
Daniel Baluta3b9c40e2014-12-03 15:31:51 +02001568 SET_SYSTEM_SLEEP_PM_OPS(kmx61_suspend, kmx61_resume)
Daniel Balutaaff86092014-12-03 15:31:50 +02001569 SET_RUNTIME_PM_OPS(kmx61_runtime_suspend, kmx61_runtime_resume, NULL)
1570};
1571
Daniel Balutab25862c2014-12-03 15:31:49 +02001572static const struct acpi_device_id kmx61_acpi_match[] = {
1573 {"KMX61021", 0},
1574 {}
1575};
1576
1577MODULE_DEVICE_TABLE(acpi, kmx61_acpi_match);
1578
Daniel Baluta20ffac22014-12-03 15:31:48 +02001579static const struct i2c_device_id kmx61_id[] = {
1580 {"kmx611021", 0},
1581 {}
1582};
1583
1584MODULE_DEVICE_TABLE(i2c, kmx61_id);
1585
1586static struct i2c_driver kmx61_driver = {
1587 .driver = {
1588 .name = KMX61_DRV_NAME,
Daniel Balutab25862c2014-12-03 15:31:49 +02001589 .acpi_match_table = ACPI_PTR(kmx61_acpi_match),
Daniel Balutaaff86092014-12-03 15:31:50 +02001590 .pm = &kmx61_pm_ops,
Daniel Baluta20ffac22014-12-03 15:31:48 +02001591 },
1592 .probe = kmx61_probe,
1593 .remove = kmx61_remove,
1594 .id_table = kmx61_id,
1595};
1596
1597module_i2c_driver(kmx61_driver);
1598
1599MODULE_AUTHOR("Daniel Baluta <daniel.baluta@intel.com>");
1600MODULE_DESCRIPTION("KMX61 accelerometer/magnetometer driver");
1601MODULE_LICENSE("GPL v2");