1 // SPDX-License-Identifier: GPL-2.0
5 * Copyright 2019 Analog Devices Inc.
7 #include <linux/bitfield.h>
8 #include <linux/bitops.h>
10 #include <linux/debugfs.h>
11 #include <linux/delay.h>
12 #include <linux/device.h>
13 #include <linux/kernel.h>
14 #include <linux/iio/buffer.h>
15 #include <linux/iio/iio.h>
16 #include <linux/iio/imu/adis.h>
17 #include <linux/iio/sysfs.h>
18 #include <linux/iio/trigger_consumer.h>
19 #include <linux/irq.h>
20 #include <linux/lcm.h>
21 #include <linux/math.h>
22 #include <linux/module.h>
23 #include <linux/mod_devicetable.h>
24 #include <linux/property.h>
25 #include <linux/spi/spi.h>
27 #define ADIS16475_REG_DIAG_STAT 0x02
28 #define ADIS16475_REG_X_GYRO_L 0x04
29 #define ADIS16475_REG_Y_GYRO_L 0x08
30 #define ADIS16475_REG_Z_GYRO_L 0x0C
31 #define ADIS16475_REG_X_ACCEL_L 0x10
32 #define ADIS16475_REG_Y_ACCEL_L 0x14
33 #define ADIS16475_REG_Z_ACCEL_L 0x18
34 #define ADIS16475_REG_TEMP_OUT 0x1c
35 #define ADIS16475_REG_X_GYRO_BIAS_L 0x40
36 #define ADIS16475_REG_Y_GYRO_BIAS_L 0x44
37 #define ADIS16475_REG_Z_GYRO_BIAS_L 0x48
38 #define ADIS16475_REG_X_ACCEL_BIAS_L 0x4c
39 #define ADIS16475_REG_Y_ACCEL_BIAS_L 0x50
40 #define ADIS16475_REG_Z_ACCEL_BIAS_L 0x54
41 #define ADIS16475_REG_FILT_CTRL 0x5c
42 #define ADIS16475_FILT_CTRL_MASK GENMASK(2, 0)
43 #define ADIS16475_FILT_CTRL(x) FIELD_PREP(ADIS16475_FILT_CTRL_MASK, x)
44 #define ADIS16475_REG_MSG_CTRL 0x60
45 #define ADIS16475_MSG_CTRL_DR_POL_MASK BIT(0)
46 #define ADIS16475_MSG_CTRL_DR_POL(x) \
47 FIELD_PREP(ADIS16475_MSG_CTRL_DR_POL_MASK, x)
48 #define ADIS16475_SYNC_MODE_MASK GENMASK(4, 2)
49 #define ADIS16475_SYNC_MODE(x) FIELD_PREP(ADIS16475_SYNC_MODE_MASK, x)
50 #define ADIS16475_REG_UP_SCALE 0x62
51 #define ADIS16475_REG_DEC_RATE 0x64
52 #define ADIS16475_REG_GLOB_CMD 0x68
53 #define ADIS16475_REG_FIRM_REV 0x6c
54 #define ADIS16475_REG_FIRM_DM 0x6e
55 #define ADIS16475_REG_FIRM_Y 0x70
56 #define ADIS16475_REG_PROD_ID 0x72
57 #define ADIS16475_REG_SERIAL_NUM 0x74
58 #define ADIS16475_REG_FLASH_CNT 0x7c
59 #define ADIS16500_BURST32_MASK BIT(9)
60 #define ADIS16500_BURST32(x) FIELD_PREP(ADIS16500_BURST32_MASK, x)
61 /* number of data elements in burst mode */
62 #define ADIS16475_BURST32_MAX_DATA 32
63 #define ADIS16475_BURST_MAX_DATA 20
64 #define ADIS16475_MAX_SCAN_DATA 20
65 /* spi max speed in brust mode */
66 #define ADIS16475_BURST_MAX_SPEED 1000000
67 #define ADIS16475_LSB_DEC_MASK BIT(0)
68 #define ADIS16475_LSB_FIR_MASK BIT(1)
71 ADIS16475_SYNC_DIRECT = 1,
72 ADIS16475_SYNC_SCALED,
73 ADIS16475_SYNC_OUTPUT,
74 ADIS16475_SYNC_PULSE = 5,
77 struct adis16475_sync {
83 struct adis16475_chip_info {
84 const struct iio_chan_spec *channels;
85 const struct adis16475_sync *sync;
86 const struct adis_data adis_data;
101 const struct adis16475_chip_info *info;
105 unsigned long lsb_flag;
107 /* Alignment needed for the timestamp */
108 __be16 data[ADIS16475_MAX_SCAN_DATA] __aligned(8);
112 ADIS16475_SCAN_GYRO_X,
113 ADIS16475_SCAN_GYRO_Y,
114 ADIS16475_SCAN_GYRO_Z,
115 ADIS16475_SCAN_ACCEL_X,
116 ADIS16475_SCAN_ACCEL_Y,
117 ADIS16475_SCAN_ACCEL_Z,
119 ADIS16475_SCAN_DIAG_S_FLAGS,
120 ADIS16475_SCAN_CRC_FAILURE,
123 static bool low_rate_allow;
124 module_param(low_rate_allow, bool, 0444);
125 MODULE_PARM_DESC(low_rate_allow,
126 "Allow IMU rates below the minimum advisable when external clk is used in SCALED mode (default: N)");
128 #ifdef CONFIG_DEBUG_FS
129 static ssize_t adis16475_show_firmware_revision(struct file *file,
130 char __user *userbuf,
131 size_t count, loff_t *ppos)
133 struct adis16475 *st = file->private_data;
139 ret = adis_read_reg_16(&st->adis, ADIS16475_REG_FIRM_REV, &rev);
143 len = scnprintf(buf, sizeof(buf), "%x.%x\n", rev >> 8, rev & 0xff);
145 return simple_read_from_buffer(userbuf, count, ppos, buf, len);
148 static const struct file_operations adis16475_firmware_revision_fops = {
150 .read = adis16475_show_firmware_revision,
151 .llseek = default_llseek,
152 .owner = THIS_MODULE,
155 static ssize_t adis16475_show_firmware_date(struct file *file,
156 char __user *userbuf,
157 size_t count, loff_t *ppos)
159 struct adis16475 *st = file->private_data;
165 ret = adis_read_reg_16(&st->adis, ADIS16475_REG_FIRM_Y, &year);
169 ret = adis_read_reg_16(&st->adis, ADIS16475_REG_FIRM_DM, &md);
173 len = snprintf(buf, sizeof(buf), "%.2x-%.2x-%.4x\n", md >> 8, md & 0xff,
176 return simple_read_from_buffer(userbuf, count, ppos, buf, len);
179 static const struct file_operations adis16475_firmware_date_fops = {
181 .read = adis16475_show_firmware_date,
182 .llseek = default_llseek,
183 .owner = THIS_MODULE,
186 static int adis16475_show_serial_number(void *arg, u64 *val)
188 struct adis16475 *st = arg;
192 ret = adis_read_reg_16(&st->adis, ADIS16475_REG_SERIAL_NUM, &serial);
200 DEFINE_DEBUGFS_ATTRIBUTE(adis16475_serial_number_fops,
201 adis16475_show_serial_number, NULL, "0x%.4llx\n");
203 static int adis16475_show_product_id(void *arg, u64 *val)
205 struct adis16475 *st = arg;
209 ret = adis_read_reg_16(&st->adis, ADIS16475_REG_PROD_ID, &prod_id);
217 DEFINE_DEBUGFS_ATTRIBUTE(adis16475_product_id_fops,
218 adis16475_show_product_id, NULL, "%llu\n");
220 static int adis16475_show_flash_count(void *arg, u64 *val)
222 struct adis16475 *st = arg;
226 ret = adis_read_reg_32(&st->adis, ADIS16475_REG_FLASH_CNT,
235 DEFINE_DEBUGFS_ATTRIBUTE(adis16475_flash_count_fops,
236 adis16475_show_flash_count, NULL, "%lld\n");
238 static void adis16475_debugfs_init(struct iio_dev *indio_dev)
240 struct adis16475 *st = iio_priv(indio_dev);
241 struct dentry *d = iio_get_debugfs_dentry(indio_dev);
243 debugfs_create_file_unsafe("serial_number", 0400,
244 d, st, &adis16475_serial_number_fops);
245 debugfs_create_file_unsafe("product_id", 0400,
246 d, st, &adis16475_product_id_fops);
247 debugfs_create_file_unsafe("flash_count", 0400,
248 d, st, &adis16475_flash_count_fops);
249 debugfs_create_file("firmware_revision", 0400,
250 d, st, &adis16475_firmware_revision_fops);
251 debugfs_create_file("firmware_date", 0400, d,
252 st, &adis16475_firmware_date_fops);
255 static void adis16475_debugfs_init(struct iio_dev *indio_dev)
260 static int adis16475_get_freq(struct adis16475 *st, u32 *freq)
264 u32 sample_rate = st->clk_freq;
266 adis_dev_lock(&st->adis);
268 if (st->sync_mode == ADIS16475_SYNC_SCALED) {
271 ret = __adis_read_reg_16(&st->adis, ADIS16475_REG_UP_SCALE, &sync_scale);
275 sample_rate = st->clk_freq * sync_scale;
278 ret = __adis_read_reg_16(&st->adis, ADIS16475_REG_DEC_RATE, &dec);
282 adis_dev_unlock(&st->adis);
284 *freq = DIV_ROUND_CLOSEST(sample_rate, dec + 1);
288 adis_dev_unlock(&st->adis);
292 static int adis16475_set_freq(struct adis16475 *st, const u32 freq)
296 u32 sample_rate = st->clk_freq;
301 adis_dev_lock(&st->adis);
303 * When using sync scaled mode, the input clock needs to be scaled so that we have
304 * an IMU sample rate between (optimally) 1900 and 2100. After this, we can use the
305 * decimation filter to lower the sampling rate in order to get what the user wants.
306 * Optimally, the user sample rate is a multiple of both the IMU sample rate and
307 * the input clock. Hence, calculating the sync_scale dynamically gives us better
308 * chances of achieving a perfect/integer value for DEC_RATE. The math here is:
309 * 1. lcm of the input clock and the desired output rate.
310 * 2. get the highest multiple of the previous result lower than the adis max rate.
311 * 3. The last result becomes the IMU sample rate. Use that to calculate SYNC_SCALE
312 * and DEC_RATE (to get the user output rate)
314 if (st->sync_mode == ADIS16475_SYNC_SCALED) {
315 unsigned long scaled_rate = lcm(st->clk_freq, freq);
319 * If lcm is bigger than the IMU maximum sampling rate there's no perfect
320 * solution. In this case, we get the highest multiple of the input clock
321 * lower than the IMU max sample rate.
323 if (scaled_rate > 2100000)
324 scaled_rate = 2100000 / st->clk_freq * st->clk_freq;
326 scaled_rate = 2100000 / scaled_rate * scaled_rate;
329 * This is not an hard requirement but it's not advised to run the IMU
330 * with a sample rate lower than 4000Hz due to possible undersampling
331 * issues. However, there are users that might really want to take the risk.
332 * Hence, we provide a module parameter for them. If set, we allow sample
333 * rates lower than 4KHz. By default, we won't allow this and we just roundup
334 * the rate to the next multiple of the input clock bigger than 4KHz. This
335 * is done like this as in some cases (when DEC_RATE is 0) might give
336 * us the closest value to the one desired by the user...
338 if (scaled_rate < 1900000 && !low_rate_allow)
339 scaled_rate = roundup(1900000, st->clk_freq);
341 sync_scale = scaled_rate / st->clk_freq;
342 ret = __adis_write_reg_16(&st->adis, ADIS16475_REG_UP_SCALE, sync_scale);
346 sample_rate = scaled_rate;
349 dec = DIV_ROUND_CLOSEST(sample_rate, freq);
354 if (dec > st->info->max_dec)
355 dec = st->info->max_dec;
357 ret = adis_write_reg_16(&st->adis, ADIS16475_REG_DEC_RATE, dec);
362 * If decimation is used, then gyro and accel data will have meaningful
363 * bits on the LSB registers. This info is used on the trigger handler.
365 assign_bit(ADIS16475_LSB_DEC_MASK, &st->lsb_flag, dec);
369 adis_dev_unlock(&st->adis);
373 /* The values are approximated. */
374 static const u32 adis16475_3db_freqs[] = {
375 [0] = 720, /* Filter disabled, full BW (~720Hz) */
384 static int adis16475_get_filter(struct adis16475 *st, u32 *filter)
388 const int mask = ADIS16475_FILT_CTRL_MASK;
390 ret = adis_read_reg_16(&st->adis, ADIS16475_REG_FILT_CTRL, &filter_sz);
394 *filter = adis16475_3db_freqs[filter_sz & mask];
399 static int adis16475_set_filter(struct adis16475 *st, const u32 filter)
401 int i = ARRAY_SIZE(adis16475_3db_freqs);
405 if (adis16475_3db_freqs[i] >= filter)
409 ret = adis_write_reg_16(&st->adis, ADIS16475_REG_FILT_CTRL,
410 ADIS16475_FILT_CTRL(i));
415 * If FIR is used, then gyro and accel data will have meaningful
416 * bits on the LSB registers. This info is used on the trigger handler.
418 assign_bit(ADIS16475_LSB_FIR_MASK, &st->lsb_flag, i);
423 static const u32 adis16475_calib_regs[] = {
424 [ADIS16475_SCAN_GYRO_X] = ADIS16475_REG_X_GYRO_BIAS_L,
425 [ADIS16475_SCAN_GYRO_Y] = ADIS16475_REG_Y_GYRO_BIAS_L,
426 [ADIS16475_SCAN_GYRO_Z] = ADIS16475_REG_Z_GYRO_BIAS_L,
427 [ADIS16475_SCAN_ACCEL_X] = ADIS16475_REG_X_ACCEL_BIAS_L,
428 [ADIS16475_SCAN_ACCEL_Y] = ADIS16475_REG_Y_ACCEL_BIAS_L,
429 [ADIS16475_SCAN_ACCEL_Z] = ADIS16475_REG_Z_ACCEL_BIAS_L,
432 static int adis16475_read_raw(struct iio_dev *indio_dev,
433 const struct iio_chan_spec *chan,
434 int *val, int *val2, long info)
436 struct adis16475 *st = iio_priv(indio_dev);
441 case IIO_CHAN_INFO_RAW:
442 return adis_single_conversion(indio_dev, chan, 0, val);
443 case IIO_CHAN_INFO_SCALE:
444 switch (chan->type) {
446 *val = st->info->gyro_max_val;
447 *val2 = st->info->gyro_max_scale;
448 return IIO_VAL_FRACTIONAL;
450 *val = st->info->accel_max_val;
451 *val2 = st->info->accel_max_scale;
452 return IIO_VAL_FRACTIONAL;
454 *val = st->info->temp_scale;
459 case IIO_CHAN_INFO_CALIBBIAS:
460 ret = adis_read_reg_32(&st->adis,
461 adis16475_calib_regs[chan->scan_index],
467 case IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY:
468 ret = adis16475_get_filter(st, val);
473 case IIO_CHAN_INFO_SAMP_FREQ:
474 ret = adis16475_get_freq(st, &tmp);
479 *val2 = (tmp % 1000) * 1000;
480 return IIO_VAL_INT_PLUS_MICRO;
486 static int adis16475_write_raw(struct iio_dev *indio_dev,
487 const struct iio_chan_spec *chan,
488 int val, int val2, long info)
490 struct adis16475 *st = iio_priv(indio_dev);
494 case IIO_CHAN_INFO_SAMP_FREQ:
495 tmp = val * 1000 + val2 / 1000;
496 return adis16475_set_freq(st, tmp);
497 case IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY:
498 return adis16475_set_filter(st, val);
499 case IIO_CHAN_INFO_CALIBBIAS:
500 return adis_write_reg_32(&st->adis,
501 adis16475_calib_regs[chan->scan_index],
508 #define ADIS16475_MOD_CHAN(_type, _mod, _address, _si, _r_bits, _s_bits) \
512 .channel2 = (_mod), \
513 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | \
514 BIT(IIO_CHAN_INFO_CALIBBIAS), \
515 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE), \
516 .info_mask_shared_by_all = BIT(IIO_CHAN_INFO_SAMP_FREQ) | \
517 BIT(IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY), \
518 .address = (_address), \
519 .scan_index = (_si), \
522 .realbits = (_r_bits), \
523 .storagebits = (_s_bits), \
524 .endianness = IIO_BE, \
528 #define ADIS16475_GYRO_CHANNEL(_mod) \
529 ADIS16475_MOD_CHAN(IIO_ANGL_VEL, IIO_MOD_ ## _mod, \
530 ADIS16475_REG_ ## _mod ## _GYRO_L, \
531 ADIS16475_SCAN_GYRO_ ## _mod, 32, 32)
533 #define ADIS16475_ACCEL_CHANNEL(_mod) \
534 ADIS16475_MOD_CHAN(IIO_ACCEL, IIO_MOD_ ## _mod, \
535 ADIS16475_REG_ ## _mod ## _ACCEL_L, \
536 ADIS16475_SCAN_ACCEL_ ## _mod, 32, 32)
538 #define ADIS16475_TEMP_CHANNEL() { \
542 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | \
543 BIT(IIO_CHAN_INFO_SCALE), \
544 .info_mask_shared_by_all = BIT(IIO_CHAN_INFO_SAMP_FREQ) | \
545 BIT(IIO_CHAN_INFO_LOW_PASS_FILTER_3DB_FREQUENCY), \
546 .address = ADIS16475_REG_TEMP_OUT, \
547 .scan_index = ADIS16475_SCAN_TEMP, \
552 .endianness = IIO_BE, \
556 static const struct iio_chan_spec adis16475_channels[] = {
557 ADIS16475_GYRO_CHANNEL(X),
558 ADIS16475_GYRO_CHANNEL(Y),
559 ADIS16475_GYRO_CHANNEL(Z),
560 ADIS16475_ACCEL_CHANNEL(X),
561 ADIS16475_ACCEL_CHANNEL(Y),
562 ADIS16475_ACCEL_CHANNEL(Z),
563 ADIS16475_TEMP_CHANNEL(),
564 IIO_CHAN_SOFT_TIMESTAMP(7)
567 enum adis16475_variant {
591 ADIS16475_DIAG_STAT_DATA_PATH = 1,
592 ADIS16475_DIAG_STAT_FLASH_MEM,
593 ADIS16475_DIAG_STAT_SPI,
594 ADIS16475_DIAG_STAT_STANDBY,
595 ADIS16475_DIAG_STAT_SENSOR,
596 ADIS16475_DIAG_STAT_MEMORY,
597 ADIS16475_DIAG_STAT_CLK,
600 static const char * const adis16475_status_error_msgs[] = {
601 [ADIS16475_DIAG_STAT_DATA_PATH] = "Data Path Overrun",
602 [ADIS16475_DIAG_STAT_FLASH_MEM] = "Flash memory update failure",
603 [ADIS16475_DIAG_STAT_SPI] = "SPI communication error",
604 [ADIS16475_DIAG_STAT_STANDBY] = "Standby mode",
605 [ADIS16475_DIAG_STAT_SENSOR] = "Sensor failure",
606 [ADIS16475_DIAG_STAT_MEMORY] = "Memory failure",
607 [ADIS16475_DIAG_STAT_CLK] = "Clock error",
610 static int adis16475_enable_irq(struct adis *adis, bool enable)
613 * There is no way to gate the data-ready signal internally inside the
614 * ADIS16475. We can only control it's polarity...
617 enable_irq(adis->spi->irq);
619 disable_irq(adis->spi->irq);
624 #define ADIS16475_DATA(_prod_id, _timeouts) \
626 .msc_ctrl_reg = ADIS16475_REG_MSG_CTRL, \
627 .glob_cmd_reg = ADIS16475_REG_GLOB_CMD, \
628 .diag_stat_reg = ADIS16475_REG_DIAG_STAT, \
629 .prod_id_reg = ADIS16475_REG_PROD_ID, \
630 .prod_id = (_prod_id), \
631 .self_test_mask = BIT(2), \
632 .self_test_reg = ADIS16475_REG_GLOB_CMD, \
633 .cs_change_delay = 16, \
636 .status_error_msgs = adis16475_status_error_msgs, \
637 .status_error_mask = BIT(ADIS16475_DIAG_STAT_DATA_PATH) | \
638 BIT(ADIS16475_DIAG_STAT_FLASH_MEM) | \
639 BIT(ADIS16475_DIAG_STAT_SPI) | \
640 BIT(ADIS16475_DIAG_STAT_STANDBY) | \
641 BIT(ADIS16475_DIAG_STAT_SENSOR) | \
642 BIT(ADIS16475_DIAG_STAT_MEMORY) | \
643 BIT(ADIS16475_DIAG_STAT_CLK), \
644 .enable_irq = adis16475_enable_irq, \
645 .timeouts = (_timeouts), \
646 .burst_reg_cmd = ADIS16475_REG_GLOB_CMD, \
647 .burst_len = ADIS16475_BURST_MAX_DATA, \
648 .burst_max_len = ADIS16475_BURST32_MAX_DATA \
651 static const struct adis16475_sync adis16475_sync_mode[] = {
652 { ADIS16475_SYNC_OUTPUT },
653 { ADIS16475_SYNC_DIRECT, 1900, 2100 },
654 { ADIS16475_SYNC_SCALED, 1, 128 },
655 { ADIS16475_SYNC_PULSE, 1000, 2100 },
658 static const struct adis_timeout adis16475_timeouts = {
664 static const struct adis_timeout adis1650x_timeouts = {
670 static const struct adis16475_chip_info adis16475_chip_info[] = {
673 .num_channels = ARRAY_SIZE(adis16475_channels),
674 .channels = adis16475_channels,
676 .gyro_max_scale = IIO_RAD_TO_DEGREE(10 << 16),
678 .accel_max_scale = IIO_M_S_2_TO_G(800 << 16),
682 .sync = adis16475_sync_mode,
683 .num_sync = ARRAY_SIZE(adis16475_sync_mode),
684 .adis_data = ADIS16475_DATA(16470, &adis16475_timeouts),
687 .name = "adis16475-1",
688 .num_channels = ARRAY_SIZE(adis16475_channels),
689 .channels = adis16475_channels,
691 .gyro_max_scale = IIO_RAD_TO_DEGREE(160 << 16),
693 .accel_max_scale = IIO_M_S_2_TO_G(4000 << 16),
697 .sync = adis16475_sync_mode,
698 .num_sync = ARRAY_SIZE(adis16475_sync_mode),
699 .adis_data = ADIS16475_DATA(16475, &adis16475_timeouts),
702 .name = "adis16475-2",
703 .num_channels = ARRAY_SIZE(adis16475_channels),
704 .channels = adis16475_channels,
706 .gyro_max_scale = IIO_RAD_TO_DEGREE(40 << 16),
708 .accel_max_scale = IIO_M_S_2_TO_G(4000 << 16),
712 .sync = adis16475_sync_mode,
713 .num_sync = ARRAY_SIZE(adis16475_sync_mode),
714 .adis_data = ADIS16475_DATA(16475, &adis16475_timeouts),
717 .name = "adis16475-3",
718 .num_channels = ARRAY_SIZE(adis16475_channels),
719 .channels = adis16475_channels,
721 .gyro_max_scale = IIO_RAD_TO_DEGREE(10 << 16),
723 .accel_max_scale = IIO_M_S_2_TO_G(4000 << 16),
727 .sync = adis16475_sync_mode,
728 .num_sync = ARRAY_SIZE(adis16475_sync_mode),
729 .adis_data = ADIS16475_DATA(16475, &adis16475_timeouts),
732 .name = "adis16477-1",
733 .num_channels = ARRAY_SIZE(adis16475_channels),
734 .channels = adis16475_channels,
736 .gyro_max_scale = IIO_RAD_TO_DEGREE(160 << 16),
738 .accel_max_scale = IIO_M_S_2_TO_G(800 << 16),
742 .sync = adis16475_sync_mode,
743 .num_sync = ARRAY_SIZE(adis16475_sync_mode),
744 .adis_data = ADIS16475_DATA(16477, &adis16475_timeouts),
747 .name = "adis16477-2",
748 .num_channels = ARRAY_SIZE(adis16475_channels),
749 .channels = adis16475_channels,
751 .gyro_max_scale = IIO_RAD_TO_DEGREE(40 << 16),
753 .accel_max_scale = IIO_M_S_2_TO_G(800 << 16),
757 .sync = adis16475_sync_mode,
758 .num_sync = ARRAY_SIZE(adis16475_sync_mode),
759 .adis_data = ADIS16475_DATA(16477, &adis16475_timeouts),
762 .name = "adis16477-3",
763 .num_channels = ARRAY_SIZE(adis16475_channels),
764 .channels = adis16475_channels,
766 .gyro_max_scale = IIO_RAD_TO_DEGREE(10 << 16),
768 .accel_max_scale = IIO_M_S_2_TO_G(800 << 16),
772 .sync = adis16475_sync_mode,
773 .num_sync = ARRAY_SIZE(adis16475_sync_mode),
774 .adis_data = ADIS16475_DATA(16477, &adis16475_timeouts),
777 .name = "adis16465-1",
778 .num_channels = ARRAY_SIZE(adis16475_channels),
779 .channels = adis16475_channels,
781 .gyro_max_scale = IIO_RAD_TO_DEGREE(160 << 16),
783 .accel_max_scale = IIO_M_S_2_TO_G(4000 << 16),
787 .sync = adis16475_sync_mode,
788 .num_sync = ARRAY_SIZE(adis16475_sync_mode),
789 .adis_data = ADIS16475_DATA(16465, &adis16475_timeouts),
792 .name = "adis16465-2",
793 .num_channels = ARRAY_SIZE(adis16475_channels),
794 .channels = adis16475_channels,
796 .gyro_max_scale = IIO_RAD_TO_DEGREE(40 << 16),
798 .accel_max_scale = IIO_M_S_2_TO_G(4000 << 16),
802 .sync = adis16475_sync_mode,
803 .num_sync = ARRAY_SIZE(adis16475_sync_mode),
804 .adis_data = ADIS16475_DATA(16465, &adis16475_timeouts),
807 .name = "adis16465-3",
808 .num_channels = ARRAY_SIZE(adis16475_channels),
809 .channels = adis16475_channels,
811 .gyro_max_scale = IIO_RAD_TO_DEGREE(10 << 16),
813 .accel_max_scale = IIO_M_S_2_TO_G(4000 << 16),
817 .sync = adis16475_sync_mode,
818 .num_sync = ARRAY_SIZE(adis16475_sync_mode),
819 .adis_data = ADIS16475_DATA(16465, &adis16475_timeouts),
822 .name = "adis16467-1",
823 .num_channels = ARRAY_SIZE(adis16475_channels),
824 .channels = adis16475_channels,
826 .gyro_max_scale = IIO_RAD_TO_DEGREE(160 << 16),
828 .accel_max_scale = IIO_M_S_2_TO_G(800 << 16),
832 .sync = adis16475_sync_mode,
833 .num_sync = ARRAY_SIZE(adis16475_sync_mode),
834 .adis_data = ADIS16475_DATA(16467, &adis16475_timeouts),
837 .name = "adis16467-2",
838 .num_channels = ARRAY_SIZE(adis16475_channels),
839 .channels = adis16475_channels,
841 .gyro_max_scale = IIO_RAD_TO_DEGREE(40 << 16),
843 .accel_max_scale = IIO_M_S_2_TO_G(800 << 16),
847 .sync = adis16475_sync_mode,
848 .num_sync = ARRAY_SIZE(adis16475_sync_mode),
849 .adis_data = ADIS16475_DATA(16467, &adis16475_timeouts),
852 .name = "adis16467-3",
853 .num_channels = ARRAY_SIZE(adis16475_channels),
854 .channels = adis16475_channels,
856 .gyro_max_scale = IIO_RAD_TO_DEGREE(10 << 16),
858 .accel_max_scale = IIO_M_S_2_TO_G(800 << 16),
862 .sync = adis16475_sync_mode,
863 .num_sync = ARRAY_SIZE(adis16475_sync_mode),
864 .adis_data = ADIS16475_DATA(16467, &adis16475_timeouts),
868 .num_channels = ARRAY_SIZE(adis16475_channels),
869 .channels = adis16475_channels,
871 .gyro_max_scale = IIO_RAD_TO_DEGREE(10 << 16),
872 .accel_max_val = 392,
873 .accel_max_scale = 32000 << 16,
877 .sync = adis16475_sync_mode,
878 /* pulse sync not supported */
879 .num_sync = ARRAY_SIZE(adis16475_sync_mode) - 1,
881 .adis_data = ADIS16475_DATA(16500, &adis1650x_timeouts),
884 .name = "adis16505-1",
885 .num_channels = ARRAY_SIZE(adis16475_channels),
886 .channels = adis16475_channels,
888 .gyro_max_scale = IIO_RAD_TO_DEGREE(160 << 16),
890 .accel_max_scale = 32000 << 16,
894 .sync = adis16475_sync_mode,
895 /* pulse sync not supported */
896 .num_sync = ARRAY_SIZE(adis16475_sync_mode) - 1,
898 .adis_data = ADIS16475_DATA(16505, &adis1650x_timeouts),
901 .name = "adis16505-2",
902 .num_channels = ARRAY_SIZE(adis16475_channels),
903 .channels = adis16475_channels,
905 .gyro_max_scale = IIO_RAD_TO_DEGREE(40 << 16),
907 .accel_max_scale = 32000 << 16,
911 .sync = adis16475_sync_mode,
912 /* pulse sync not supported */
913 .num_sync = ARRAY_SIZE(adis16475_sync_mode) - 1,
915 .adis_data = ADIS16475_DATA(16505, &adis1650x_timeouts),
918 .name = "adis16505-3",
919 .num_channels = ARRAY_SIZE(adis16475_channels),
920 .channels = adis16475_channels,
922 .gyro_max_scale = IIO_RAD_TO_DEGREE(10 << 16),
924 .accel_max_scale = 32000 << 16,
928 .sync = adis16475_sync_mode,
929 /* pulse sync not supported */
930 .num_sync = ARRAY_SIZE(adis16475_sync_mode) - 1,
932 .adis_data = ADIS16475_DATA(16505, &adis1650x_timeouts),
935 .name = "adis16507-1",
936 .num_channels = ARRAY_SIZE(adis16475_channels),
937 .channels = adis16475_channels,
939 .gyro_max_scale = IIO_RAD_TO_DEGREE(160 << 16),
940 .accel_max_val = 392,
941 .accel_max_scale = 32000 << 16,
945 .sync = adis16475_sync_mode,
946 /* pulse sync not supported */
947 .num_sync = ARRAY_SIZE(adis16475_sync_mode) - 1,
949 .adis_data = ADIS16475_DATA(16507, &adis1650x_timeouts),
952 .name = "adis16507-2",
953 .num_channels = ARRAY_SIZE(adis16475_channels),
954 .channels = adis16475_channels,
956 .gyro_max_scale = IIO_RAD_TO_DEGREE(40 << 16),
957 .accel_max_val = 392,
958 .accel_max_scale = 32000 << 16,
962 .sync = adis16475_sync_mode,
963 /* pulse sync not supported */
964 .num_sync = ARRAY_SIZE(adis16475_sync_mode) - 1,
966 .adis_data = ADIS16475_DATA(16507, &adis1650x_timeouts),
969 .name = "adis16507-3",
970 .num_channels = ARRAY_SIZE(adis16475_channels),
971 .channels = adis16475_channels,
973 .gyro_max_scale = IIO_RAD_TO_DEGREE(10 << 16),
974 .accel_max_val = 392,
975 .accel_max_scale = 32000 << 16,
979 .sync = adis16475_sync_mode,
980 /* pulse sync not supported */
981 .num_sync = ARRAY_SIZE(adis16475_sync_mode) - 1,
983 .adis_data = ADIS16475_DATA(16507, &adis1650x_timeouts),
987 static const struct iio_info adis16475_info = {
988 .read_raw = &adis16475_read_raw,
989 .write_raw = &adis16475_write_raw,
990 .update_scan_mode = adis_update_scan_mode,
991 .debugfs_reg_access = adis_debugfs_reg_access,
994 static bool adis16475_validate_crc(const u8 *buffer, u16 crc,
998 /* extra 6 elements for low gyro and accel */
999 const u16 sz = burst32 ? ADIS16475_BURST32_MAX_DATA :
1000 ADIS16475_BURST_MAX_DATA;
1002 for (i = 0; i < sz - 2; i++)
1008 static void adis16475_burst32_check(struct adis16475 *st)
1011 struct adis *adis = &st->adis;
1013 if (!st->info->has_burst32)
1016 if (st->lsb_flag && !st->burst32) {
1017 const u16 en = ADIS16500_BURST32(1);
1019 ret = __adis_update_bits(&st->adis, ADIS16475_REG_MSG_CTRL,
1020 ADIS16500_BURST32_MASK, en);
1027 * In 32-bit mode we need extra 2 bytes for all gyro
1028 * and accel channels.
1030 adis->burst_extra_len = 6 * sizeof(u16);
1031 adis->xfer[1].len += 6 * sizeof(u16);
1032 dev_dbg(&adis->spi->dev, "Enable burst32 mode, xfer:%d",
1035 } else if (!st->lsb_flag && st->burst32) {
1036 const u16 en = ADIS16500_BURST32(0);
1038 ret = __adis_update_bits(&st->adis, ADIS16475_REG_MSG_CTRL,
1039 ADIS16500_BURST32_MASK, en);
1043 st->burst32 = false;
1045 /* Remove the extra bits */
1046 adis->burst_extra_len = 0;
1047 adis->xfer[1].len -= 6 * sizeof(u16);
1048 dev_dbg(&adis->spi->dev, "Disable burst32 mode, xfer:%d\n",
1053 static irqreturn_t adis16475_trigger_handler(int irq, void *p)
1055 struct iio_poll_func *pf = p;
1056 struct iio_dev *indio_dev = pf->indio_dev;
1057 struct adis16475 *st = iio_priv(indio_dev);
1058 struct adis *adis = &st->adis;
1059 int ret, bit, i = 0;
1063 /* offset until the first element after gyro and accel */
1064 const u8 offset = st->burst32 ? 13 : 7;
1065 const u32 cached_spi_speed_hz = adis->spi->max_speed_hz;
1067 adis->spi->max_speed_hz = ADIS16475_BURST_MAX_SPEED;
1069 ret = spi_sync(adis->spi, &adis->msg);
1073 adis->spi->max_speed_hz = cached_spi_speed_hz;
1074 buffer = adis->buffer;
1076 crc = be16_to_cpu(buffer[offset + 2]);
1077 valid = adis16475_validate_crc(adis->buffer, crc, st->burst32);
1079 dev_err(&adis->spi->dev, "Invalid crc\n");
1083 for_each_set_bit(bit, indio_dev->active_scan_mask,
1084 indio_dev->masklength) {
1086 * When burst mode is used, system flags is the first data
1087 * channel in the sequence, but the scan index is 7.
1090 case ADIS16475_SCAN_TEMP:
1091 st->data[i++] = buffer[offset];
1093 case ADIS16475_SCAN_GYRO_X ... ADIS16475_SCAN_ACCEL_Z:
1095 * The first 2 bytes on the received data are the
1096 * DIAG_STAT reg, hence the +1 offset here...
1100 st->data[i++] = buffer[bit * 2 + 2];
1102 st->data[i++] = buffer[bit * 2 + 1];
1104 st->data[i++] = buffer[bit + 1];
1106 * Don't bother in doing the manual read if the
1107 * device supports burst32. burst32 will be
1108 * enabled in the next call to
1109 * adis16475_burst32_check()...
1111 if (st->lsb_flag && !st->info->has_burst32) {
1113 const u32 reg = ADIS16475_REG_X_GYRO_L +
1116 adis_read_reg_16(adis, reg, &val);
1117 st->data[i++] = cpu_to_be16(val);
1119 /* lower not used */
1127 iio_push_to_buffers_with_timestamp(indio_dev, st->data, pf->timestamp);
1130 * We only check the burst mode at the end of the current capture since
1131 * it takes a full data ready cycle for the device to update the burst
1134 adis16475_burst32_check(st);
1135 iio_trigger_notify_done(indio_dev->trig);
1140 static void adis16475_disable_clk(void *data)
1142 clk_disable_unprepare((struct clk *)data);
1145 static int adis16475_config_sync_mode(struct adis16475 *st)
1148 struct device *dev = &st->adis.spi->dev;
1149 const struct adis16475_sync *sync;
1152 /* default to internal clk */
1153 st->clk_freq = st->info->int_clk * 1000;
1155 ret = device_property_read_u32(dev, "adi,sync-mode", &sync_mode);
1159 if (sync_mode >= st->info->num_sync) {
1160 dev_err(dev, "Invalid sync mode: %u for %s\n", sync_mode,
1165 sync = &st->info->sync[sync_mode];
1166 st->sync_mode = sync->sync_mode;
1168 /* All the other modes require external input signal */
1169 if (sync->sync_mode != ADIS16475_SYNC_OUTPUT) {
1170 struct clk *clk = devm_clk_get(dev, NULL);
1173 return PTR_ERR(clk);
1175 ret = clk_prepare_enable(clk);
1179 ret = devm_add_action_or_reset(dev, adis16475_disable_clk, clk);
1183 st->clk_freq = clk_get_rate(clk);
1184 if (st->clk_freq < sync->min_rate ||
1185 st->clk_freq > sync->max_rate) {
1187 "Clk rate:%u not in a valid range:[%u %u]\n",
1188 st->clk_freq, sync->min_rate, sync->max_rate);
1192 if (sync->sync_mode == ADIS16475_SYNC_SCALED) {
1196 * In sync scaled mode, the IMU sample rate is the clk_freq * sync_scale.
1197 * Hence, default the IMU sample rate to the highest multiple of the input
1198 * clock lower than the IMU max sample rate. The optimal range is
1201 up_scale = 2100 / st->clk_freq;
1203 ret = __adis_write_reg_16(&st->adis,
1204 ADIS16475_REG_UP_SCALE,
1210 st->clk_freq *= 1000;
1213 * Keep in mind that the mask for the clk modes in adis1650*
1214 * chips is different (1100 instead of 11100). However, we
1215 * are not configuring BIT(4) in these chips and the default
1216 * value is 0, so we are fine in doing the below operations.
1217 * I'm keeping this for simplicity and avoiding extra variables
1220 ret = __adis_update_bits(&st->adis, ADIS16475_REG_MSG_CTRL,
1221 ADIS16475_SYNC_MODE_MASK, sync->sync_mode);
1225 usleep_range(250, 260);
1230 static int adis16475_config_irq_pin(struct adis16475 *st)
1233 struct irq_data *desc;
1237 struct spi_device *spi = st->adis.spi;
1239 desc = irq_get_irq_data(spi->irq);
1241 dev_err(&spi->dev, "Could not find IRQ %d\n", spi->irq);
1245 * It is possible to configure the data ready polarity. Furthermore, we
1246 * need to update the adis struct if we want data ready as active low.
1248 irq_type = irqd_get_trigger_type(desc);
1249 if (irq_type == IRQ_TYPE_EDGE_RISING) {
1251 st->adis.irq_flag = IRQF_TRIGGER_RISING;
1252 } else if (irq_type == IRQ_TYPE_EDGE_FALLING) {
1254 st->adis.irq_flag = IRQF_TRIGGER_FALLING;
1256 dev_err(&spi->dev, "Invalid interrupt type 0x%x specified\n",
1261 /* We cannot mask the interrupt so ensure it's not enabled at request */
1262 st->adis.irq_flag |= IRQF_NO_AUTOEN;
1264 val = ADIS16475_MSG_CTRL_DR_POL(polarity);
1265 ret = __adis_update_bits(&st->adis, ADIS16475_REG_MSG_CTRL,
1266 ADIS16475_MSG_CTRL_DR_POL_MASK, val);
1270 * There is a delay writing to any bits written to the MSC_CTRL
1271 * register. It should not be bigger than 200us, so 250 should be more
1274 usleep_range(250, 260);
1279 static const struct of_device_id adis16475_of_match[] = {
1280 { .compatible = "adi,adis16470",
1281 .data = &adis16475_chip_info[ADIS16470] },
1282 { .compatible = "adi,adis16475-1",
1283 .data = &adis16475_chip_info[ADIS16475_1] },
1284 { .compatible = "adi,adis16475-2",
1285 .data = &adis16475_chip_info[ADIS16475_2] },
1286 { .compatible = "adi,adis16475-3",
1287 .data = &adis16475_chip_info[ADIS16475_3] },
1288 { .compatible = "adi,adis16477-1",
1289 .data = &adis16475_chip_info[ADIS16477_1] },
1290 { .compatible = "adi,adis16477-2",
1291 .data = &adis16475_chip_info[ADIS16477_2] },
1292 { .compatible = "adi,adis16477-3",
1293 .data = &adis16475_chip_info[ADIS16477_3] },
1294 { .compatible = "adi,adis16465-1",
1295 .data = &adis16475_chip_info[ADIS16465_1] },
1296 { .compatible = "adi,adis16465-2",
1297 .data = &adis16475_chip_info[ADIS16465_2] },
1298 { .compatible = "adi,adis16465-3",
1299 .data = &adis16475_chip_info[ADIS16465_3] },
1300 { .compatible = "adi,adis16467-1",
1301 .data = &adis16475_chip_info[ADIS16467_1] },
1302 { .compatible = "adi,adis16467-2",
1303 .data = &adis16475_chip_info[ADIS16467_2] },
1304 { .compatible = "adi,adis16467-3",
1305 .data = &adis16475_chip_info[ADIS16467_3] },
1306 { .compatible = "adi,adis16500",
1307 .data = &adis16475_chip_info[ADIS16500] },
1308 { .compatible = "adi,adis16505-1",
1309 .data = &adis16475_chip_info[ADIS16505_1] },
1310 { .compatible = "adi,adis16505-2",
1311 .data = &adis16475_chip_info[ADIS16505_2] },
1312 { .compatible = "adi,adis16505-3",
1313 .data = &adis16475_chip_info[ADIS16505_3] },
1314 { .compatible = "adi,adis16507-1",
1315 .data = &adis16475_chip_info[ADIS16507_1] },
1316 { .compatible = "adi,adis16507-2",
1317 .data = &adis16475_chip_info[ADIS16507_2] },
1318 { .compatible = "adi,adis16507-3",
1319 .data = &adis16475_chip_info[ADIS16507_3] },
1322 MODULE_DEVICE_TABLE(of, adis16475_of_match);
1324 static int adis16475_probe(struct spi_device *spi)
1326 struct iio_dev *indio_dev;
1327 struct adis16475 *st;
1330 indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*st));
1334 st = iio_priv(indio_dev);
1335 spi_set_drvdata(spi, indio_dev);
1337 st->info = device_get_match_data(&spi->dev);
1341 ret = adis_init(&st->adis, indio_dev, spi, &st->info->adis_data);
1345 indio_dev->name = st->info->name;
1346 indio_dev->channels = st->info->channels;
1347 indio_dev->num_channels = st->info->num_channels;
1348 indio_dev->info = &adis16475_info;
1349 indio_dev->modes = INDIO_DIRECT_MODE;
1351 ret = __adis_initial_startup(&st->adis);
1355 ret = adis16475_config_irq_pin(st);
1359 ret = adis16475_config_sync_mode(st);
1363 ret = devm_adis_setup_buffer_and_trigger(&st->adis, indio_dev,
1364 adis16475_trigger_handler);
1368 ret = devm_iio_device_register(&spi->dev, indio_dev);
1372 adis16475_debugfs_init(indio_dev);
1377 static struct spi_driver adis16475_driver = {
1379 .name = "adis16475",
1380 .of_match_table = adis16475_of_match,
1382 .probe = adis16475_probe,
1384 module_spi_driver(adis16475_driver);
1387 MODULE_DESCRIPTION("Analog Devices ADIS16475 IMU driver");
1388 MODULE_LICENSE("GPL");