xref: /linux/drivers/iio/accel/kionix-kx022a.c (revision a36e9f5cfe9eb3a1dce8769c7058251c42705357)
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * Copyright (C) 2022 ROHM Semiconductors
4  *
5  * ROHM/KIONIX accelerometer driver
6  */
7 
8 #include <linux/delay.h>
9 #include <linux/device.h>
10 #include <linux/interrupt.h>
11 #include <linux/module.h>
12 #include <linux/moduleparam.h>
13 #include <linux/mutex.h>
14 #include <linux/property.h>
15 #include <linux/regmap.h>
16 #include <linux/regulator/consumer.h>
17 #include <linux/slab.h>
18 #include <linux/string_choices.h>
19 #include <linux/units.h>
20 
21 #include <linux/iio/iio.h>
22 #include <linux/iio/sysfs.h>
23 #include <linux/iio/trigger.h>
24 #include <linux/iio/trigger_consumer.h>
25 #include <linux/iio/triggered_buffer.h>
26 
27 #include "kionix-kx022a.h"
28 
29 /*
30  * The KX022A has FIFO which can store 43 samples of HiRes data from 2
31  * channels. This equals to 43 (samples) * 3 (channels) * 2 (bytes/sample) to
32  * 258 bytes of sample data. The quirk to know is that the amount of bytes in
33  * the FIFO is advertised via 8 bit register (max value 255). The thing to note
34  * is that full 258 bytes of data is indicated using the max value 255.
35  */
36 #define KX022A_FIFO_LENGTH			43
37 #define KX022A_FIFO_FULL_VALUE			255
38 #define KX022A_SOFT_RESET_WAIT_TIME_US		(5 * USEC_PER_MSEC)
39 #define KX022A_SOFT_RESET_TOTAL_WAIT_TIME_US	(500 * USEC_PER_MSEC)
40 
41 /* 3 axis, 2 bytes of data for each of the axis */
42 #define KX022A_FIFO_SAMPLES_SIZE_BYTES		6
43 #define KX022A_FIFO_MAX_BYTES					\
44 	(KX022A_FIFO_LENGTH * KX022A_FIFO_SAMPLES_SIZE_BYTES)
45 
46 enum {
47 	KX022A_STATE_SAMPLE,
48 	KX022A_STATE_FIFO,
49 };
50 
51 /* kx022a Regmap configs */
52 static const struct regmap_range kx022a_volatile_ranges[] = {
53 	{
54 		.range_min = KX022A_REG_XHP_L,
55 		.range_max = KX022A_REG_COTR,
56 	}, {
57 		.range_min = KX022A_REG_TSCP,
58 		.range_max = KX022A_REG_INT_REL,
59 	}, {
60 		/* The reset bit will be cleared by sensor */
61 		.range_min = KX022A_REG_CNTL2,
62 		.range_max = KX022A_REG_CNTL2,
63 	}, {
64 		.range_min = KX022A_REG_BUF_STATUS_1,
65 		.range_max = KX022A_REG_BUF_READ,
66 	},
67 };
68 
69 static const struct regmap_access_table kx022a_volatile_regs = {
70 	.yes_ranges = &kx022a_volatile_ranges[0],
71 	.n_yes_ranges = ARRAY_SIZE(kx022a_volatile_ranges),
72 };
73 
74 static const struct regmap_range kx022a_precious_ranges[] = {
75 	{
76 		.range_min = KX022A_REG_INT_REL,
77 		.range_max = KX022A_REG_INT_REL,
78 	},
79 };
80 
81 static const struct regmap_access_table kx022a_precious_regs = {
82 	.yes_ranges = &kx022a_precious_ranges[0],
83 	.n_yes_ranges = ARRAY_SIZE(kx022a_precious_ranges),
84 };
85 
86 /*
87  * The HW does not set WHO_AM_I reg as read-only but we don't want to write it
88  * so we still include it in the read-only ranges.
89  */
90 static const struct regmap_range kx022a_read_only_ranges[] = {
91 	{
92 		.range_min = KX022A_REG_XHP_L,
93 		.range_max = KX022A_REG_INT_REL,
94 	}, {
95 		.range_min = KX022A_REG_BUF_STATUS_1,
96 		.range_max = KX022A_REG_BUF_STATUS_2,
97 	}, {
98 		.range_min = KX022A_REG_BUF_READ,
99 		.range_max = KX022A_REG_BUF_READ,
100 	},
101 };
102 
103 static const struct regmap_access_table kx022a_ro_regs = {
104 	.no_ranges = &kx022a_read_only_ranges[0],
105 	.n_no_ranges = ARRAY_SIZE(kx022a_read_only_ranges),
106 };
107 
108 static const struct regmap_range kx022a_write_only_ranges[] = {
109 	{
110 		.range_min = KX022A_REG_BTS_WUF_TH,
111 		.range_max = KX022A_REG_BTS_WUF_TH,
112 	}, {
113 		.range_min = KX022A_REG_MAN_WAKE,
114 		.range_max = KX022A_REG_MAN_WAKE,
115 	}, {
116 		.range_min = KX022A_REG_SELF_TEST,
117 		.range_max = KX022A_REG_SELF_TEST,
118 	}, {
119 		.range_min = KX022A_REG_BUF_CLEAR,
120 		.range_max = KX022A_REG_BUF_CLEAR,
121 	},
122 };
123 
124 static const struct regmap_access_table kx022a_wo_regs = {
125 	.no_ranges = &kx022a_write_only_ranges[0],
126 	.n_no_ranges = ARRAY_SIZE(kx022a_write_only_ranges),
127 };
128 
129 static const struct regmap_range kx022a_noinc_read_ranges[] = {
130 	{
131 		.range_min = KX022A_REG_BUF_READ,
132 		.range_max = KX022A_REG_BUF_READ,
133 	},
134 };
135 
136 static const struct regmap_access_table kx022a_nir_regs = {
137 	.yes_ranges = &kx022a_noinc_read_ranges[0],
138 	.n_yes_ranges = ARRAY_SIZE(kx022a_noinc_read_ranges),
139 };
140 
141 static const struct regmap_config kx022a_regmap_config = {
142 	.reg_bits = 8,
143 	.val_bits = 8,
144 	.volatile_table = &kx022a_volatile_regs,
145 	.rd_table = &kx022a_wo_regs,
146 	.wr_table = &kx022a_ro_regs,
147 	.rd_noinc_table = &kx022a_nir_regs,
148 	.precious_table = &kx022a_precious_regs,
149 	.max_register = KX022A_MAX_REGISTER,
150 	.cache_type = REGCACHE_RBTREE,
151 };
152 
153 /* Regmap configs kx132 */
154 static const struct regmap_range kx132_volatile_ranges[] = {
155 	{
156 		.range_min = KX132_REG_XADP_L,
157 		.range_max = KX132_REG_COTR,
158 	}, {
159 		.range_min = KX132_REG_TSCP,
160 		.range_max = KX132_REG_INT_REL,
161 	}, {
162 		/* The reset bit will be cleared by sensor */
163 		.range_min = KX132_REG_CNTL2,
164 		.range_max = KX132_REG_CNTL2,
165 	}, {
166 		.range_min = KX132_REG_CNTL5,
167 		.range_max = KX132_REG_CNTL5,
168 	}, {
169 		.range_min = KX132_REG_BUF_STATUS_1,
170 		.range_max = KX132_REG_BUF_READ,
171 	},
172 };
173 
174 static const struct regmap_access_table kx132_volatile_regs = {
175 	.yes_ranges = &kx132_volatile_ranges[0],
176 	.n_yes_ranges = ARRAY_SIZE(kx132_volatile_ranges),
177 };
178 
179 static const struct regmap_range kx132_precious_ranges[] = {
180 	{
181 		.range_min = KX132_REG_INT_REL,
182 		.range_max = KX132_REG_INT_REL,
183 	},
184 };
185 
186 static const struct regmap_access_table kx132_precious_regs = {
187 	.yes_ranges = &kx132_precious_ranges[0],
188 	.n_yes_ranges = ARRAY_SIZE(kx132_precious_ranges),
189 };
190 
191 static const struct regmap_range kx132_read_only_ranges[] = {
192 	{
193 		.range_min = KX132_REG_XADP_L,
194 		.range_max = KX132_REG_INT_REL,
195 	}, {
196 		.range_min = KX132_REG_BUF_STATUS_1,
197 		.range_max = KX132_REG_BUF_STATUS_2,
198 	}, {
199 		.range_min = KX132_REG_BUF_READ,
200 		.range_max = KX132_REG_BUF_READ,
201 	}, {
202 		/* Kionix reserved registers: should not be written */
203 		.range_min = 0x28,
204 		.range_max = 0x28,
205 	}, {
206 		.range_min = 0x35,
207 		.range_max = 0x36,
208 	}, {
209 		.range_min = 0x3c,
210 		.range_max = 0x48,
211 	}, {
212 		.range_min = 0x4e,
213 		.range_max = 0x5c,
214 	}, {
215 		.range_min = 0x77,
216 		.range_max = 0x7f,
217 	},
218 };
219 
220 static const struct regmap_access_table kx132_ro_regs = {
221 	.no_ranges = &kx132_read_only_ranges[0],
222 	.n_no_ranges = ARRAY_SIZE(kx132_read_only_ranges),
223 };
224 
225 static const struct regmap_range kx132_write_only_ranges[] = {
226 	{
227 		.range_min = KX132_REG_SELF_TEST,
228 		.range_max = KX132_REG_SELF_TEST,
229 	}, {
230 		.range_min = KX132_REG_BUF_CLEAR,
231 		.range_max = KX132_REG_BUF_CLEAR,
232 	},
233 };
234 
235 static const struct regmap_access_table kx132_wo_regs = {
236 	.no_ranges = &kx132_write_only_ranges[0],
237 	.n_no_ranges = ARRAY_SIZE(kx132_write_only_ranges),
238 };
239 
240 static const struct regmap_range kx132_noinc_read_ranges[] = {
241 	{
242 		.range_min = KX132_REG_BUF_READ,
243 		.range_max = KX132_REG_BUF_READ,
244 	},
245 };
246 
247 static const struct regmap_access_table kx132_nir_regs = {
248 	.yes_ranges = &kx132_noinc_read_ranges[0],
249 	.n_yes_ranges = ARRAY_SIZE(kx132_noinc_read_ranges),
250 };
251 
252 static const struct regmap_config kx132_regmap_config = {
253 	.reg_bits = 8,
254 	.val_bits = 8,
255 	.volatile_table = &kx132_volatile_regs,
256 	.rd_table = &kx132_wo_regs,
257 	.wr_table = &kx132_ro_regs,
258 	.rd_noinc_table = &kx132_nir_regs,
259 	.precious_table = &kx132_precious_regs,
260 	.max_register = KX132_MAX_REGISTER,
261 	.cache_type = REGCACHE_RBTREE,
262 };
263 
264 struct kx022a_data {
265 	struct regmap *regmap;
266 	const struct kx022a_chip_info *chip_info;
267 	struct iio_trigger *trig;
268 	struct device *dev;
269 	struct iio_mount_matrix orientation;
270 	int64_t timestamp, old_timestamp;
271 
272 	int irq;
273 	int inc_reg;
274 	int ien_reg;
275 
276 	unsigned int state;
277 	unsigned int odr_ns;
278 
279 	bool trigger_enabled;
280 	/*
281 	 * Prevent toggling the sensor stby/active state (PC1 bit) in the
282 	 * middle of a configuration, or when the fifo is enabled. Also,
283 	 * protect the data stored/retrieved from this structure from
284 	 * concurrent accesses.
285 	 */
286 	struct mutex mutex;
287 	u8 watermark;
288 
289 	__le16 *fifo_buffer;
290 
291 	/* 3 x 16bit accel data + timestamp */
292 	__le16 buffer[8] __aligned(IIO_DMA_MINALIGN);
293 	struct {
294 		__le16 channels[3];
295 		s64 ts __aligned(8);
296 	} scan;
297 };
298 
299 static const struct iio_mount_matrix *
300 kx022a_get_mount_matrix(const struct iio_dev *idev,
301 			const struct iio_chan_spec *chan)
302 {
303 	struct kx022a_data *data = iio_priv(idev);
304 
305 	return &data->orientation;
306 }
307 
308 enum {
309 	AXIS_X,
310 	AXIS_Y,
311 	AXIS_Z,
312 	AXIS_MAX
313 };
314 
315 static const unsigned long kx022a_scan_masks[] = {
316 	BIT(AXIS_X) | BIT(AXIS_Y) | BIT(AXIS_Z), 0
317 };
318 
319 static const struct iio_chan_spec_ext_info kx022a_ext_info[] = {
320 	IIO_MOUNT_MATRIX(IIO_SHARED_BY_TYPE, kx022a_get_mount_matrix),
321 	{ }
322 };
323 
324 #define KX022A_ACCEL_CHAN(axis, reg, index)			\
325 {								\
326 	.type = IIO_ACCEL,					\
327 	.modified = 1,						\
328 	.channel2 = IIO_MOD_##axis,				\
329 	.info_mask_separate = BIT(IIO_CHAN_INFO_RAW),		\
330 	.info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE) |	\
331 				BIT(IIO_CHAN_INFO_SAMP_FREQ),	\
332 	.info_mask_shared_by_type_available =			\
333 				BIT(IIO_CHAN_INFO_SCALE) |	\
334 				BIT(IIO_CHAN_INFO_SAMP_FREQ),	\
335 	.ext_info = kx022a_ext_info,				\
336 	.address = reg,						\
337 	.scan_index = index,					\
338 	.scan_type = {                                          \
339 		.sign = 's',					\
340 		.realbits = 16,					\
341 		.storagebits = 16,				\
342 		.endianness = IIO_LE,				\
343 	},							\
344 }
345 
346 static const struct iio_chan_spec kx022a_channels[] = {
347 	KX022A_ACCEL_CHAN(X, KX022A_REG_XOUT_L, 0),
348 	KX022A_ACCEL_CHAN(Y, KX022A_REG_YOUT_L, 1),
349 	KX022A_ACCEL_CHAN(Z, KX022A_REG_ZOUT_L, 2),
350 	IIO_CHAN_SOFT_TIMESTAMP(3),
351 };
352 
353 static const struct iio_chan_spec kx132_channels[] = {
354 	KX022A_ACCEL_CHAN(X, KX132_REG_XOUT_L, 0),
355 	KX022A_ACCEL_CHAN(Y, KX132_REG_YOUT_L, 1),
356 	KX022A_ACCEL_CHAN(Z, KX132_REG_ZOUT_L, 2),
357 	IIO_CHAN_SOFT_TIMESTAMP(3),
358 };
359 
360 /*
361  * The sensor HW can support ODR up to 1600 Hz, which is beyond what most of the
362  * Linux CPUs can handle without dropping samples. Also, the low power mode is
363  * not available for higher sample rates. Thus, the driver only supports 200 Hz
364  * and slower ODRs. The slowest is 0.78 Hz.
365  */
366 static const int kx022a_accel_samp_freq_table[][2] = {
367 	{ 0, 780000 },
368 	{ 1, 563000 },
369 	{ 3, 125000 },
370 	{ 6, 250000 },
371 	{ 12, 500000 },
372 	{ 25, 0 },
373 	{ 50, 0 },
374 	{ 100, 0 },
375 	{ 200, 0 },
376 };
377 
378 static const unsigned int kx022a_odrs[] = {
379 	1282051282,
380 	639795266,
381 	320 * MEGA,
382 	160 * MEGA,
383 	80 * MEGA,
384 	40 * MEGA,
385 	20 * MEGA,
386 	10 * MEGA,
387 	5 * MEGA,
388 };
389 
390 /*
391  * range is typically +-2G/4G/8G/16G, distributed over the amount of bits.
392  * The scale table can be calculated using
393  *	(range / 2^bits) * g = (range / 2^bits) * 9.80665 m/s^2
394  *	=> KX022A uses 16 bit (HiRes mode - assume the low 8 bits are zeroed
395  *	in low-power mode(?) )
396  *	=> +/-2G  => 4 / 2^16 * 9,80665
397  *	=> +/-2G  - 0.000598550415
398  *	   +/-4G  - 0.00119710083
399  *	   +/-8G  - 0.00239420166
400  *	   +/-16G - 0.00478840332
401  */
402 static const int kx022a_scale_table[][2] = {
403 	{ 0, 598550 },
404 	{ 0, 1197101 },
405 	{ 0, 2394202 },
406 	{ 0, 4788403 },
407 };
408 
409 static int kx022a_read_avail(struct iio_dev *indio_dev,
410 			     struct iio_chan_spec const *chan,
411 			     const int **vals, int *type, int *length,
412 			     long mask)
413 {
414 	switch (mask) {
415 	case IIO_CHAN_INFO_SAMP_FREQ:
416 		*vals = (const int *)kx022a_accel_samp_freq_table;
417 		*length = ARRAY_SIZE(kx022a_accel_samp_freq_table) *
418 			  ARRAY_SIZE(kx022a_accel_samp_freq_table[0]);
419 		*type = IIO_VAL_INT_PLUS_MICRO;
420 		return IIO_AVAIL_LIST;
421 	case IIO_CHAN_INFO_SCALE:
422 		*vals = (const int *)kx022a_scale_table;
423 		*length = ARRAY_SIZE(kx022a_scale_table) *
424 			  ARRAY_SIZE(kx022a_scale_table[0]);
425 		*type = IIO_VAL_INT_PLUS_NANO;
426 		return IIO_AVAIL_LIST;
427 	default:
428 		return -EINVAL;
429 	}
430 }
431 
432 #define KX022A_DEFAULT_PERIOD_NS (20 * NSEC_PER_MSEC)
433 
434 static void kx022a_reg2freq(unsigned int val,  int *val1, int *val2)
435 {
436 	*val1 = kx022a_accel_samp_freq_table[val & KX022A_MASK_ODR][0];
437 	*val2 = kx022a_accel_samp_freq_table[val & KX022A_MASK_ODR][1];
438 }
439 
440 static void kx022a_reg2scale(unsigned int val, unsigned int *val1,
441 			     unsigned int *val2)
442 {
443 	val &= KX022A_MASK_GSEL;
444 	val >>= KX022A_GSEL_SHIFT;
445 
446 	*val1 = kx022a_scale_table[val][0];
447 	*val2 = kx022a_scale_table[val][1];
448 }
449 
450 static int kx022a_turn_on_off_unlocked(struct kx022a_data *data, bool on)
451 {
452 	int ret;
453 
454 	if (on)
455 		ret = regmap_set_bits(data->regmap, data->chip_info->cntl,
456 				      KX022A_MASK_PC1);
457 	else
458 		ret = regmap_clear_bits(data->regmap, data->chip_info->cntl,
459 					KX022A_MASK_PC1);
460 	if (ret)
461 		dev_err(data->dev, "Turn %s fail %d\n", str_on_off(on), ret);
462 
463 	return ret;
464 }
465 
466 static int kx022a_turn_off_lock(struct kx022a_data *data)
467 {
468 	int ret;
469 
470 	mutex_lock(&data->mutex);
471 	ret = kx022a_turn_on_off_unlocked(data, false);
472 	if (ret)
473 		mutex_unlock(&data->mutex);
474 
475 	return ret;
476 }
477 
478 static int kx022a_turn_on_unlock(struct kx022a_data *data)
479 {
480 	int ret;
481 
482 	ret = kx022a_turn_on_off_unlocked(data, true);
483 	mutex_unlock(&data->mutex);
484 
485 	return ret;
486 }
487 
488 static int kx022a_write_raw_get_fmt(struct iio_dev *idev,
489 				    struct iio_chan_spec const *chan,
490 				    long mask)
491 {
492 	switch (mask) {
493 	case IIO_CHAN_INFO_SCALE:
494 		return IIO_VAL_INT_PLUS_NANO;
495 	case IIO_CHAN_INFO_SAMP_FREQ:
496 		return IIO_VAL_INT_PLUS_MICRO;
497 	default:
498 		return -EINVAL;
499 	}
500 }
501 
502 static int kx022a_write_raw(struct iio_dev *idev,
503 			    struct iio_chan_spec const *chan,
504 			    int val, int val2, long mask)
505 {
506 	struct kx022a_data *data = iio_priv(idev);
507 	int ret, n;
508 
509 	/*
510 	 * We should not allow changing scale or frequency when FIFO is running
511 	 * as it will mess the timestamp/scale for samples existing in the
512 	 * buffer. If this turns out to be an issue we can later change logic
513 	 * to internally flush the fifo before reconfiguring so the samples in
514 	 * fifo keep matching the freq/scale settings. (Such setup could cause
515 	 * issues if users trust the watermark to be reached within known
516 	 * time-limit).
517 	 */
518 	ret = iio_device_claim_direct_mode(idev);
519 	if (ret)
520 		return ret;
521 
522 	switch (mask) {
523 	case IIO_CHAN_INFO_SAMP_FREQ:
524 		n = ARRAY_SIZE(kx022a_accel_samp_freq_table);
525 
526 		while (n--)
527 			if (val == kx022a_accel_samp_freq_table[n][0] &&
528 			    val2 == kx022a_accel_samp_freq_table[n][1])
529 				break;
530 		if (n < 0) {
531 			ret = -EINVAL;
532 			goto unlock_out;
533 		}
534 		ret = kx022a_turn_off_lock(data);
535 		if (ret)
536 			break;
537 
538 		ret = regmap_update_bits(data->regmap,
539 					 data->chip_info->odcntl,
540 					 KX022A_MASK_ODR, n);
541 		data->odr_ns = kx022a_odrs[n];
542 		kx022a_turn_on_unlock(data);
543 		break;
544 	case IIO_CHAN_INFO_SCALE:
545 		n = ARRAY_SIZE(kx022a_scale_table);
546 
547 		while (n-- > 0)
548 			if (val == kx022a_scale_table[n][0] &&
549 			    val2 == kx022a_scale_table[n][1])
550 				break;
551 		if (n < 0) {
552 			ret = -EINVAL;
553 			goto unlock_out;
554 		}
555 
556 		ret = kx022a_turn_off_lock(data);
557 		if (ret)
558 			break;
559 
560 		ret = regmap_update_bits(data->regmap, data->chip_info->cntl,
561 					 KX022A_MASK_GSEL,
562 					 n << KX022A_GSEL_SHIFT);
563 		kx022a_turn_on_unlock(data);
564 		break;
565 	default:
566 		ret = -EINVAL;
567 		break;
568 	}
569 
570 unlock_out:
571 	iio_device_release_direct_mode(idev);
572 
573 	return ret;
574 }
575 
576 static int kx022a_fifo_set_wmi(struct kx022a_data *data)
577 {
578 	u8 threshold;
579 
580 	threshold = data->watermark;
581 
582 	return regmap_update_bits(data->regmap, data->chip_info->buf_cntl1,
583 				  KX022A_MASK_WM_TH, threshold);
584 }
585 
586 static int kx022a_get_axis(struct kx022a_data *data,
587 			   struct iio_chan_spec const *chan,
588 			   int *val)
589 {
590 	int ret;
591 
592 	ret = regmap_bulk_read(data->regmap, chan->address, &data->buffer[0],
593 			       sizeof(__le16));
594 	if (ret)
595 		return ret;
596 
597 	*val = le16_to_cpu(data->buffer[0]);
598 
599 	return IIO_VAL_INT;
600 }
601 
602 static int kx022a_read_raw(struct iio_dev *idev,
603 			   struct iio_chan_spec const *chan,
604 			   int *val, int *val2, long mask)
605 {
606 	struct kx022a_data *data = iio_priv(idev);
607 	unsigned int regval;
608 	int ret;
609 
610 	switch (mask) {
611 	case IIO_CHAN_INFO_RAW:
612 		ret = iio_device_claim_direct_mode(idev);
613 		if (ret)
614 			return ret;
615 
616 		mutex_lock(&data->mutex);
617 		ret = kx022a_get_axis(data, chan, val);
618 		mutex_unlock(&data->mutex);
619 
620 		iio_device_release_direct_mode(idev);
621 
622 		return ret;
623 
624 	case IIO_CHAN_INFO_SAMP_FREQ:
625 		ret = regmap_read(data->regmap, data->chip_info->odcntl, &regval);
626 		if (ret)
627 			return ret;
628 
629 		if ((regval & KX022A_MASK_ODR) >
630 		    ARRAY_SIZE(kx022a_accel_samp_freq_table)) {
631 			dev_err(data->dev, "Invalid ODR\n");
632 			return -EINVAL;
633 		}
634 
635 		kx022a_reg2freq(regval, val, val2);
636 
637 		return IIO_VAL_INT_PLUS_MICRO;
638 
639 	case IIO_CHAN_INFO_SCALE:
640 		ret = regmap_read(data->regmap, data->chip_info->cntl, &regval);
641 		if (ret < 0)
642 			return ret;
643 
644 		kx022a_reg2scale(regval, val, val2);
645 
646 		return IIO_VAL_INT_PLUS_NANO;
647 	}
648 
649 	return -EINVAL;
650 };
651 
652 static int kx022a_set_watermark(struct iio_dev *idev, unsigned int val)
653 {
654 	struct kx022a_data *data = iio_priv(idev);
655 
656 	val = min(data->chip_info->fifo_length, val);
657 
658 	mutex_lock(&data->mutex);
659 	data->watermark = val;
660 	mutex_unlock(&data->mutex);
661 
662 	return 0;
663 }
664 
665 static ssize_t hwfifo_enabled_show(struct device *dev,
666 				   struct device_attribute *attr,
667 				   char *buf)
668 {
669 	struct iio_dev *idev = dev_to_iio_dev(dev);
670 	struct kx022a_data *data = iio_priv(idev);
671 	bool state;
672 
673 	mutex_lock(&data->mutex);
674 	state = data->state;
675 	mutex_unlock(&data->mutex);
676 
677 	return sysfs_emit(buf, "%d\n", state);
678 }
679 
680 static ssize_t hwfifo_watermark_show(struct device *dev,
681 				     struct device_attribute *attr,
682 				     char *buf)
683 {
684 	struct iio_dev *idev = dev_to_iio_dev(dev);
685 	struct kx022a_data *data = iio_priv(idev);
686 	int wm;
687 
688 	mutex_lock(&data->mutex);
689 	wm = data->watermark;
690 	mutex_unlock(&data->mutex);
691 
692 	return sysfs_emit(buf, "%d\n", wm);
693 }
694 
695 static IIO_DEVICE_ATTR_RO(hwfifo_enabled, 0);
696 static IIO_DEVICE_ATTR_RO(hwfifo_watermark, 0);
697 
698 static const struct iio_dev_attr *kx022a_fifo_attributes[] = {
699 	&iio_dev_attr_hwfifo_watermark,
700 	&iio_dev_attr_hwfifo_enabled,
701 	NULL
702 };
703 
704 static int kx022a_drop_fifo_contents(struct kx022a_data *data)
705 {
706 	/*
707 	 * We must clear the old time-stamp to avoid computing the timestamps
708 	 * based on samples acquired when buffer was last enabled.
709 	 *
710 	 * We don't need to protect the timestamp as long as we are only
711 	 * called from fifo-disable where we can guarantee the sensor is not
712 	 * triggering interrupts and where the mutex is locked to prevent the
713 	 * user-space access.
714 	 */
715 	data->timestamp = 0;
716 
717 	return regmap_write(data->regmap, data->chip_info->buf_clear, 0x0);
718 }
719 
720 static int kx022a_get_fifo_bytes_available(struct kx022a_data *data)
721 {
722 	int ret, fifo_bytes;
723 
724 	ret = regmap_read(data->regmap, KX022A_REG_BUF_STATUS_1, &fifo_bytes);
725 	if (ret) {
726 		dev_err(data->dev, "Error reading buffer status\n");
727 		return ret;
728 	}
729 
730 	if (fifo_bytes == KX022A_FIFO_FULL_VALUE)
731 		return KX022A_FIFO_MAX_BYTES;
732 
733 	return fifo_bytes;
734 }
735 
736 static int kx132_get_fifo_bytes_available(struct kx022a_data *data)
737 {
738 	__le16 buf_status;
739 	int ret, fifo_bytes;
740 
741 	ret = regmap_bulk_read(data->regmap, data->chip_info->buf_status1,
742 			       &buf_status, sizeof(buf_status));
743 	if (ret) {
744 		dev_err(data->dev, "Error reading buffer status\n");
745 		return ret;
746 	}
747 
748 	fifo_bytes = le16_to_cpu(buf_status);
749 	fifo_bytes &= data->chip_info->buf_smp_lvl_mask;
750 	fifo_bytes = min((unsigned int)fifo_bytes, data->chip_info->fifo_length *
751 			 KX022A_FIFO_SAMPLES_SIZE_BYTES);
752 
753 	return fifo_bytes;
754 }
755 
756 static int __kx022a_fifo_flush(struct iio_dev *idev, unsigned int samples,
757 			       bool irq)
758 {
759 	struct kx022a_data *data = iio_priv(idev);
760 	uint64_t sample_period;
761 	int count, fifo_bytes;
762 	bool renable = false;
763 	int64_t tstamp;
764 	int ret, i;
765 
766 	fifo_bytes = data->chip_info->get_fifo_bytes_available(data);
767 
768 	if (fifo_bytes % KX022A_FIFO_SAMPLES_SIZE_BYTES)
769 		dev_warn(data->dev, "Bad FIFO alignment. Data may be corrupt\n");
770 
771 	count = fifo_bytes / KX022A_FIFO_SAMPLES_SIZE_BYTES;
772 	if (!count)
773 		return 0;
774 
775 	/*
776 	 * If we are being called from IRQ handler we know the stored timestamp
777 	 * is fairly accurate for the last stored sample. Otherwise, if we are
778 	 * called as a result of a read operation from userspace and hence
779 	 * before the watermark interrupt was triggered, take a timestamp
780 	 * now. We can fall anywhere in between two samples so the error in this
781 	 * case is at most one sample period.
782 	 */
783 	if (!irq) {
784 		/*
785 		 * We need to have the IRQ disabled or we risk of messing-up
786 		 * the timestamps. If we are ran from IRQ, then the
787 		 * IRQF_ONESHOT has us covered - but if we are ran by the
788 		 * user-space read we need to disable the IRQ to be on a safe
789 		 * side. We do this usng synchronous disable so that if the
790 		 * IRQ thread is being ran on other CPU we wait for it to be
791 		 * finished.
792 		 */
793 		disable_irq(data->irq);
794 		renable = true;
795 
796 		data->old_timestamp = data->timestamp;
797 		data->timestamp = iio_get_time_ns(idev);
798 	}
799 
800 	/*
801 	 * Approximate timestamps for each of the sample based on the sampling
802 	 * frequency, timestamp for last sample and number of samples.
803 	 *
804 	 * We'd better not use the current bandwidth settings to compute the
805 	 * sample period. The real sample rate varies with the device and
806 	 * small variation adds when we store a large number of samples.
807 	 *
808 	 * To avoid this issue we compute the actual sample period ourselves
809 	 * based on the timestamp delta between the last two flush operations.
810 	 */
811 	if (data->old_timestamp) {
812 		sample_period = data->timestamp - data->old_timestamp;
813 		do_div(sample_period, count);
814 	} else {
815 		sample_period = data->odr_ns;
816 	}
817 	tstamp = data->timestamp - (count - 1) * sample_period;
818 
819 	if (samples && count > samples) {
820 		/*
821 		 * Here we leave some old samples to the buffer. We need to
822 		 * adjust the timestamp to match the first sample in the buffer
823 		 * or we will miscalculate the sample_period at next round.
824 		 */
825 		data->timestamp -= (count - samples) * sample_period;
826 		count = samples;
827 	}
828 
829 	fifo_bytes = count * KX022A_FIFO_SAMPLES_SIZE_BYTES;
830 	ret = regmap_noinc_read(data->regmap, data->chip_info->buf_read,
831 				data->fifo_buffer, fifo_bytes);
832 	if (ret)
833 		goto renable_out;
834 
835 	for (i = 0; i < count; i++) {
836 		__le16 *sam = &data->fifo_buffer[i * 3];
837 		__le16 *chs;
838 		int bit;
839 
840 		chs = &data->scan.channels[0];
841 		for_each_set_bit(bit, idev->active_scan_mask, AXIS_MAX)
842 			chs[bit] = sam[bit];
843 
844 		iio_push_to_buffers_with_timestamp(idev, &data->scan, tstamp);
845 
846 		tstamp += sample_period;
847 	}
848 
849 	ret = count;
850 
851 renable_out:
852 	if (renable)
853 		enable_irq(data->irq);
854 
855 	return ret;
856 }
857 
858 static int kx022a_fifo_flush(struct iio_dev *idev, unsigned int samples)
859 {
860 	struct kx022a_data *data = iio_priv(idev);
861 	int ret;
862 
863 	mutex_lock(&data->mutex);
864 	ret = __kx022a_fifo_flush(idev, samples, false);
865 	mutex_unlock(&data->mutex);
866 
867 	return ret;
868 }
869 
870 static const struct iio_info kx022a_info = {
871 	.read_raw = &kx022a_read_raw,
872 	.write_raw = &kx022a_write_raw,
873 	.write_raw_get_fmt = &kx022a_write_raw_get_fmt,
874 	.read_avail = &kx022a_read_avail,
875 
876 	.validate_trigger	= iio_validate_own_trigger,
877 	.hwfifo_set_watermark	= kx022a_set_watermark,
878 	.hwfifo_flush_to_buffer	= kx022a_fifo_flush,
879 };
880 
881 static int kx022a_set_drdy_irq(struct kx022a_data *data, bool en)
882 {
883 	if (en)
884 		return regmap_set_bits(data->regmap, data->chip_info->cntl,
885 				       KX022A_MASK_DRDY);
886 
887 	return regmap_clear_bits(data->regmap, data->chip_info->cntl,
888 				 KX022A_MASK_DRDY);
889 }
890 
891 static int kx022a_prepare_irq_pin(struct kx022a_data *data)
892 {
893 	/* Enable IRQ1 pin. Set polarity to active low */
894 	int mask = KX022A_MASK_IEN | KX022A_MASK_IPOL |
895 		   KX022A_MASK_ITYP;
896 	int val = KX022A_MASK_IEN | KX022A_IPOL_LOW |
897 		  KX022A_ITYP_LEVEL;
898 	int ret;
899 
900 	ret = regmap_update_bits(data->regmap, data->inc_reg, mask, val);
901 	if (ret)
902 		return ret;
903 
904 	/* We enable WMI to IRQ pin only at buffer_enable */
905 	mask = KX022A_MASK_INS2_DRDY;
906 
907 	return regmap_set_bits(data->regmap, data->ien_reg, mask);
908 }
909 
910 static int kx022a_fifo_disable(struct kx022a_data *data)
911 {
912 	int ret = 0;
913 
914 	ret = kx022a_turn_off_lock(data);
915 	if (ret)
916 		return ret;
917 
918 	ret = regmap_clear_bits(data->regmap, data->ien_reg, KX022A_MASK_WMI);
919 	if (ret)
920 		goto unlock_out;
921 
922 	ret = regmap_clear_bits(data->regmap, data->chip_info->buf_cntl2,
923 				KX022A_MASK_BUF_EN);
924 	if (ret)
925 		goto unlock_out;
926 
927 	data->state &= ~KX022A_STATE_FIFO;
928 
929 	kx022a_drop_fifo_contents(data);
930 
931 	kfree(data->fifo_buffer);
932 
933 	return kx022a_turn_on_unlock(data);
934 
935 unlock_out:
936 	mutex_unlock(&data->mutex);
937 
938 	return ret;
939 }
940 
941 static int kx022a_buffer_predisable(struct iio_dev *idev)
942 {
943 	struct kx022a_data *data = iio_priv(idev);
944 
945 	if (iio_device_get_current_mode(idev) == INDIO_BUFFER_TRIGGERED)
946 		return 0;
947 
948 	return kx022a_fifo_disable(data);
949 }
950 
951 static int kx022a_fifo_enable(struct kx022a_data *data)
952 {
953 	int ret;
954 
955 	data->fifo_buffer = kmalloc_array(data->chip_info->fifo_length,
956 					  KX022A_FIFO_SAMPLES_SIZE_BYTES,
957 					  GFP_KERNEL);
958 	if (!data->fifo_buffer)
959 		return -ENOMEM;
960 
961 	ret = kx022a_turn_off_lock(data);
962 	if (ret)
963 		return ret;
964 
965 	/* Update watermark to HW */
966 	ret = kx022a_fifo_set_wmi(data);
967 	if (ret)
968 		goto unlock_out;
969 
970 	/* Enable buffer */
971 	ret = regmap_set_bits(data->regmap, data->chip_info->buf_cntl2,
972 			      KX022A_MASK_BUF_EN);
973 	if (ret)
974 		goto unlock_out;
975 
976 	data->state |= KX022A_STATE_FIFO;
977 	ret = regmap_set_bits(data->regmap, data->ien_reg,
978 			      KX022A_MASK_WMI);
979 	if (ret)
980 		goto unlock_out;
981 
982 	return kx022a_turn_on_unlock(data);
983 
984 unlock_out:
985 	mutex_unlock(&data->mutex);
986 
987 	return ret;
988 }
989 
990 static int kx022a_buffer_postenable(struct iio_dev *idev)
991 {
992 	struct kx022a_data *data = iio_priv(idev);
993 
994 	/*
995 	 * If we use data-ready trigger, then the IRQ masks should be handled by
996 	 * trigger enable and the hardware buffer is not used but we just update
997 	 * results to the IIO fifo when data-ready triggers.
998 	 */
999 	if (iio_device_get_current_mode(idev) == INDIO_BUFFER_TRIGGERED)
1000 		return 0;
1001 
1002 	return kx022a_fifo_enable(data);
1003 }
1004 
1005 static const struct iio_buffer_setup_ops kx022a_buffer_ops = {
1006 	.postenable = kx022a_buffer_postenable,
1007 	.predisable = kx022a_buffer_predisable,
1008 };
1009 
1010 static irqreturn_t kx022a_trigger_handler(int irq, void *p)
1011 {
1012 	struct iio_poll_func *pf = p;
1013 	struct iio_dev *idev = pf->indio_dev;
1014 	struct kx022a_data *data = iio_priv(idev);
1015 	int ret;
1016 
1017 	ret = regmap_bulk_read(data->regmap, data->chip_info->xout_l, data->buffer,
1018 			       KX022A_FIFO_SAMPLES_SIZE_BYTES);
1019 	if (ret < 0)
1020 		goto err_read;
1021 
1022 	iio_push_to_buffers_with_timestamp(idev, data->buffer, data->timestamp);
1023 err_read:
1024 	iio_trigger_notify_done(idev->trig);
1025 
1026 	return IRQ_HANDLED;
1027 }
1028 
1029 /* Get timestamps and wake the thread if we need to read data */
1030 static irqreturn_t kx022a_irq_handler(int irq, void *private)
1031 {
1032 	struct iio_dev *idev = private;
1033 	struct kx022a_data *data = iio_priv(idev);
1034 
1035 	data->old_timestamp = data->timestamp;
1036 	data->timestamp = iio_get_time_ns(idev);
1037 
1038 	if (data->state & KX022A_STATE_FIFO || data->trigger_enabled)
1039 		return IRQ_WAKE_THREAD;
1040 
1041 	return IRQ_NONE;
1042 }
1043 
1044 /*
1045  * WMI and data-ready IRQs are acked when results are read. If we add
1046  * TILT/WAKE or other IRQs - then we may need to implement the acking
1047  * (which is racy).
1048  */
1049 static irqreturn_t kx022a_irq_thread_handler(int irq, void *private)
1050 {
1051 	struct iio_dev *idev = private;
1052 	struct kx022a_data *data = iio_priv(idev);
1053 	irqreturn_t ret = IRQ_NONE;
1054 
1055 	mutex_lock(&data->mutex);
1056 
1057 	if (data->trigger_enabled) {
1058 		iio_trigger_poll_nested(data->trig);
1059 		ret = IRQ_HANDLED;
1060 	}
1061 
1062 	if (data->state & KX022A_STATE_FIFO) {
1063 		int ok;
1064 
1065 		ok = __kx022a_fifo_flush(idev, data->chip_info->fifo_length, true);
1066 		if (ok > 0)
1067 			ret = IRQ_HANDLED;
1068 	}
1069 
1070 	mutex_unlock(&data->mutex);
1071 
1072 	return ret;
1073 }
1074 
1075 static int kx022a_trigger_set_state(struct iio_trigger *trig,
1076 				    bool state)
1077 {
1078 	struct kx022a_data *data = iio_trigger_get_drvdata(trig);
1079 	int ret = 0;
1080 
1081 	mutex_lock(&data->mutex);
1082 
1083 	if (data->trigger_enabled == state)
1084 		goto unlock_out;
1085 
1086 	if (data->state & KX022A_STATE_FIFO) {
1087 		dev_warn(data->dev, "Can't set trigger when FIFO enabled\n");
1088 		ret = -EBUSY;
1089 		goto unlock_out;
1090 	}
1091 
1092 	ret = kx022a_turn_on_off_unlocked(data, false);
1093 	if (ret)
1094 		goto unlock_out;
1095 
1096 	data->trigger_enabled = state;
1097 	ret = kx022a_set_drdy_irq(data, state);
1098 	if (ret)
1099 		goto unlock_out;
1100 
1101 	ret = kx022a_turn_on_off_unlocked(data, true);
1102 
1103 unlock_out:
1104 	mutex_unlock(&data->mutex);
1105 
1106 	return ret;
1107 }
1108 
1109 static const struct iio_trigger_ops kx022a_trigger_ops = {
1110 	.set_trigger_state = kx022a_trigger_set_state,
1111 };
1112 
1113 static int kx022a_chip_init(struct kx022a_data *data)
1114 {
1115 	int ret, val;
1116 
1117 	/* Reset the senor */
1118 	ret = regmap_write(data->regmap, data->chip_info->cntl2, KX022A_MASK_SRST);
1119 	if (ret)
1120 		return ret;
1121 
1122 	/*
1123 	 * I've seen I2C read failures if we poll too fast after the sensor
1124 	 * reset. Slight delay gives I2C block the time to recover.
1125 	 */
1126 	msleep(1);
1127 
1128 	ret = regmap_read_poll_timeout(data->regmap, data->chip_info->cntl2, val,
1129 				       !(val & KX022A_MASK_SRST),
1130 				       KX022A_SOFT_RESET_WAIT_TIME_US,
1131 				       KX022A_SOFT_RESET_TOTAL_WAIT_TIME_US);
1132 	if (ret) {
1133 		dev_err(data->dev, "Sensor reset %s\n",
1134 			val & KX022A_MASK_SRST ? "timeout" : "fail#");
1135 		return ret;
1136 	}
1137 
1138 	ret = regmap_reinit_cache(data->regmap, data->chip_info->regmap_config);
1139 	if (ret) {
1140 		dev_err(data->dev, "Failed to reinit reg cache\n");
1141 		return ret;
1142 	}
1143 
1144 	/* set data res 16bit */
1145 	ret = regmap_set_bits(data->regmap, data->chip_info->buf_cntl2,
1146 			      KX022A_MASK_BRES16);
1147 	if (ret) {
1148 		dev_err(data->dev, "Failed to set data resolution\n");
1149 		return ret;
1150 	}
1151 
1152 	return kx022a_prepare_irq_pin(data);
1153 }
1154 
1155 const struct kx022a_chip_info kx022a_chip_info = {
1156 	.name				= "kx022-accel",
1157 	.regmap_config			= &kx022a_regmap_config,
1158 	.channels			= kx022a_channels,
1159 	.num_channels			= ARRAY_SIZE(kx022a_channels),
1160 	.fifo_length			= KX022A_FIFO_LENGTH,
1161 	.who				= KX022A_REG_WHO,
1162 	.id				= KX022A_ID,
1163 	.cntl				= KX022A_REG_CNTL,
1164 	.cntl2				= KX022A_REG_CNTL2,
1165 	.odcntl				= KX022A_REG_ODCNTL,
1166 	.buf_cntl1			= KX022A_REG_BUF_CNTL1,
1167 	.buf_cntl2			= KX022A_REG_BUF_CNTL2,
1168 	.buf_clear			= KX022A_REG_BUF_CLEAR,
1169 	.buf_status1			= KX022A_REG_BUF_STATUS_1,
1170 	.buf_read			= KX022A_REG_BUF_READ,
1171 	.inc1				= KX022A_REG_INC1,
1172 	.inc4				= KX022A_REG_INC4,
1173 	.inc5				= KX022A_REG_INC5,
1174 	.inc6				= KX022A_REG_INC6,
1175 	.xout_l				= KX022A_REG_XOUT_L,
1176 	.get_fifo_bytes_available	= kx022a_get_fifo_bytes_available,
1177 };
1178 EXPORT_SYMBOL_NS_GPL(kx022a_chip_info, IIO_KX022A);
1179 
1180 const struct kx022a_chip_info kx132_chip_info = {
1181 	.name			  = "kx132-1211",
1182 	.regmap_config		  = &kx132_regmap_config,
1183 	.channels		  = kx132_channels,
1184 	.num_channels		  = ARRAY_SIZE(kx132_channels),
1185 	.fifo_length		  = KX132_FIFO_LENGTH,
1186 	.who			  = KX132_REG_WHO,
1187 	.id			  = KX132_ID,
1188 	.cntl			  = KX132_REG_CNTL,
1189 	.cntl2			  = KX132_REG_CNTL2,
1190 	.odcntl			  = KX132_REG_ODCNTL,
1191 	.buf_cntl1		  = KX132_REG_BUF_CNTL1,
1192 	.buf_cntl2		  = KX132_REG_BUF_CNTL2,
1193 	.buf_clear		  = KX132_REG_BUF_CLEAR,
1194 	.buf_status1		  = KX132_REG_BUF_STATUS_1,
1195 	.buf_smp_lvl_mask	  = KX132_MASK_BUF_SMP_LVL,
1196 	.buf_read		  = KX132_REG_BUF_READ,
1197 	.inc1			  = KX132_REG_INC1,
1198 	.inc4			  = KX132_REG_INC4,
1199 	.inc5			  = KX132_REG_INC5,
1200 	.inc6			  = KX132_REG_INC6,
1201 	.xout_l			  = KX132_REG_XOUT_L,
1202 	.get_fifo_bytes_available = kx132_get_fifo_bytes_available,
1203 };
1204 EXPORT_SYMBOL_NS_GPL(kx132_chip_info, IIO_KX022A);
1205 
1206 /*
1207  * Despite the naming, KX132ACR-LBZ is not similar to KX132-1211 but it is
1208  * exact subset of KX022A. KX132ACR-LBZ is meant to be used for industrial
1209  * applications and the tap/double tap, free fall and tilt engines were
1210  * removed. Rest of the registers and functionalities (excluding the ID
1211  * register) are exact match to what is found in KX022.
1212  */
1213 const struct kx022a_chip_info kx132acr_chip_info = {
1214 	.name				= "kx132acr-lbz",
1215 	.regmap_config			= &kx022a_regmap_config,
1216 	.channels			= kx022a_channels,
1217 	.num_channels			= ARRAY_SIZE(kx022a_channels),
1218 	.fifo_length			= KX022A_FIFO_LENGTH,
1219 	.who				= KX022A_REG_WHO,
1220 	.id				= KX132ACR_LBZ_ID,
1221 	.cntl				= KX022A_REG_CNTL,
1222 	.cntl2				= KX022A_REG_CNTL2,
1223 	.odcntl				= KX022A_REG_ODCNTL,
1224 	.buf_cntl1			= KX022A_REG_BUF_CNTL1,
1225 	.buf_cntl2			= KX022A_REG_BUF_CNTL2,
1226 	.buf_clear			= KX022A_REG_BUF_CLEAR,
1227 	.buf_status1			= KX022A_REG_BUF_STATUS_1,
1228 	.buf_read			= KX022A_REG_BUF_READ,
1229 	.inc1				= KX022A_REG_INC1,
1230 	.inc4				= KX022A_REG_INC4,
1231 	.inc5				= KX022A_REG_INC5,
1232 	.inc6				= KX022A_REG_INC6,
1233 	.xout_l				= KX022A_REG_XOUT_L,
1234 	.get_fifo_bytes_available	= kx022a_get_fifo_bytes_available,
1235 };
1236 EXPORT_SYMBOL_NS_GPL(kx132acr_chip_info, IIO_KX022A);
1237 
1238 int kx022a_probe_internal(struct device *dev, const struct kx022a_chip_info *chip_info)
1239 {
1240 	static const char * const regulator_names[] = {"io-vdd", "vdd"};
1241 	struct iio_trigger *indio_trig;
1242 	struct fwnode_handle *fwnode;
1243 	struct kx022a_data *data;
1244 	struct regmap *regmap;
1245 	unsigned int chip_id;
1246 	struct iio_dev *idev;
1247 	int ret, irq;
1248 	char *name;
1249 
1250 	regmap = dev_get_regmap(dev, NULL);
1251 	if (!regmap) {
1252 		dev_err(dev, "no regmap\n");
1253 		return -EINVAL;
1254 	}
1255 
1256 	fwnode = dev_fwnode(dev);
1257 	if (!fwnode)
1258 		return -ENODEV;
1259 
1260 	idev = devm_iio_device_alloc(dev, sizeof(*data));
1261 	if (!idev)
1262 		return -ENOMEM;
1263 
1264 	data = iio_priv(idev);
1265 	data->chip_info = chip_info;
1266 
1267 	/*
1268 	 * VDD is the analog and digital domain voltage supply and
1269 	 * IO_VDD is the digital I/O voltage supply.
1270 	 */
1271 	ret = devm_regulator_bulk_get_enable(dev, ARRAY_SIZE(regulator_names),
1272 					     regulator_names);
1273 	if (ret && ret != -ENODEV)
1274 		return dev_err_probe(dev, ret, "failed to enable regulator\n");
1275 
1276 	ret = regmap_read(regmap, chip_info->who, &chip_id);
1277 	if (ret)
1278 		return dev_err_probe(dev, ret, "Failed to access sensor\n");
1279 
1280 	if (chip_id != chip_info->id)
1281 		dev_warn(dev, "unknown device 0x%x\n", chip_id);
1282 
1283 	irq = fwnode_irq_get_byname(fwnode, "INT1");
1284 	if (irq > 0) {
1285 		data->inc_reg = chip_info->inc1;
1286 		data->ien_reg = chip_info->inc4;
1287 	} else {
1288 		irq = fwnode_irq_get_byname(fwnode, "INT2");
1289 		if (irq < 0)
1290 			return dev_err_probe(dev, irq, "No suitable IRQ\n");
1291 
1292 		data->inc_reg = chip_info->inc5;
1293 		data->ien_reg = chip_info->inc6;
1294 	}
1295 
1296 	data->regmap = regmap;
1297 	data->dev = dev;
1298 	data->irq = irq;
1299 	data->odr_ns = KX022A_DEFAULT_PERIOD_NS;
1300 	mutex_init(&data->mutex);
1301 
1302 	idev->channels = chip_info->channels;
1303 	idev->num_channels = chip_info->num_channels;
1304 	idev->name = chip_info->name;
1305 	idev->info = &kx022a_info;
1306 	idev->modes = INDIO_DIRECT_MODE | INDIO_BUFFER_SOFTWARE;
1307 	idev->available_scan_masks = kx022a_scan_masks;
1308 
1309 	/* Read the mounting matrix, if present */
1310 	ret = iio_read_mount_matrix(dev, &data->orientation);
1311 	if (ret)
1312 		return ret;
1313 
1314 	/* The sensor must be turned off for configuration */
1315 	ret = kx022a_turn_off_lock(data);
1316 	if (ret)
1317 		return ret;
1318 
1319 	ret = kx022a_chip_init(data);
1320 	if (ret) {
1321 		mutex_unlock(&data->mutex);
1322 		return ret;
1323 	}
1324 
1325 	ret = kx022a_turn_on_unlock(data);
1326 	if (ret)
1327 		return ret;
1328 
1329 	ret = devm_iio_triggered_buffer_setup_ext(dev, idev,
1330 						  &iio_pollfunc_store_time,
1331 						  kx022a_trigger_handler,
1332 						  IIO_BUFFER_DIRECTION_IN,
1333 						  &kx022a_buffer_ops,
1334 						  kx022a_fifo_attributes);
1335 
1336 	if (ret)
1337 		return dev_err_probe(data->dev, ret,
1338 				     "iio_triggered_buffer_setup_ext FAIL\n");
1339 	indio_trig = devm_iio_trigger_alloc(dev, "%sdata-rdy-dev%d", idev->name,
1340 					    iio_device_id(idev));
1341 	if (!indio_trig)
1342 		return -ENOMEM;
1343 
1344 	data->trig = indio_trig;
1345 
1346 	indio_trig->ops = &kx022a_trigger_ops;
1347 	iio_trigger_set_drvdata(indio_trig, data);
1348 
1349 	/*
1350 	 * No need to check for NULL. request_threaded_irq() defaults to
1351 	 * dev_name() should the alloc fail.
1352 	 */
1353 	name = devm_kasprintf(data->dev, GFP_KERNEL, "%s-kx022a",
1354 			      dev_name(data->dev));
1355 
1356 	ret = devm_request_threaded_irq(data->dev, irq, kx022a_irq_handler,
1357 					&kx022a_irq_thread_handler,
1358 					IRQF_ONESHOT, name, idev);
1359 	if (ret)
1360 		return dev_err_probe(data->dev, ret, "Could not request IRQ\n");
1361 
1362 	ret = devm_iio_trigger_register(dev, indio_trig);
1363 	if (ret)
1364 		return dev_err_probe(data->dev, ret,
1365 				     "Trigger registration failed\n");
1366 
1367 	ret = devm_iio_device_register(data->dev, idev);
1368 	if (ret < 0)
1369 		return dev_err_probe(dev, ret,
1370 				     "Unable to register iio device\n");
1371 
1372 	return ret;
1373 }
1374 EXPORT_SYMBOL_NS_GPL(kx022a_probe_internal, IIO_KX022A);
1375 
1376 MODULE_DESCRIPTION("ROHM/Kionix KX022A accelerometer driver");
1377 MODULE_AUTHOR("Matti Vaittinen <matti.vaittinen@fi.rohmeurope.com>");
1378 MODULE_LICENSE("GPL");
1379