Lines Matching refs:adis

23 #include <linux/iio/imu/adis.h>
32 * @adis: The adis device
37 int __adis_write_reg(struct adis *adis, unsigned int reg, unsigned int value,
45 .tx_buf = adis->tx,
49 .delay.value = adis->data->write_delay,
51 .cs_change_delay.value = adis->data->cs_change_delay,
54 .tx_buf = adis->tx + 2,
58 .delay.value = adis->data->write_delay,
60 .cs_change_delay.value = adis->data->cs_change_delay,
63 .tx_buf = adis->tx + 4,
67 .delay.value = adis->data->write_delay,
69 .cs_change_delay.value = adis->data->cs_change_delay,
72 .tx_buf = adis->tx + 6,
75 .delay.value = adis->data->write_delay,
78 .tx_buf = adis->tx + 8,
81 .delay.value = adis->data->write_delay,
88 if (adis->current_page != page) {
89 adis->tx[0] = ADIS_WRITE_REG(ADIS_REG_PAGE_ID);
90 adis->tx[1] = page;
96 adis->tx[8] = ADIS_WRITE_REG(reg + 3);
97 adis->tx[9] = (value >> 24) & 0xff;
98 adis->tx[6] = ADIS_WRITE_REG(reg + 2);
99 adis->tx[7] = (value >> 16) & 0xff;
102 adis->tx[4] = ADIS_WRITE_REG(reg + 1);
103 adis->tx[5] = (value >> 8) & 0xff;
106 adis->tx[2] = ADIS_WRITE_REG(reg);
107 adis->tx[3] = value & 0xff;
118 ret = spi_sync(adis->spi, &msg);
120 dev_err(&adis->spi->dev, "Failed to write register 0x%02X: %d\n",
123 adis->current_page = page;
132 * @adis: The adis device
137 int __adis_read_reg(struct adis *adis, unsigned int reg, unsigned int *val,
145 .tx_buf = adis->tx,
149 .delay.value = adis->data->write_delay,
151 .cs_change_delay.value = adis->data->cs_change_delay,
154 .tx_buf = adis->tx + 2,
158 .delay.value = adis->data->read_delay,
160 .cs_change_delay.value = adis->data->cs_change_delay,
163 .tx_buf = adis->tx + 4,
164 .rx_buf = adis->rx,
168 .delay.value = adis->data->read_delay,
170 .cs_change_delay.value = adis->data->cs_change_delay,
173 .rx_buf = adis->rx + 2,
176 .delay.value = adis->data->read_delay,
183 if (adis->current_page != page) {
184 adis->tx[0] = ADIS_WRITE_REG(ADIS_REG_PAGE_ID);
185 adis->tx[1] = page;
191 adis->tx[2] = ADIS_READ_REG(reg + 2);
192 adis->tx[3] = 0;
196 adis->tx[4] = ADIS_READ_REG(reg);
197 adis->tx[5] = 0;
205 ret = spi_sync(adis->spi, &msg);
207 dev_err(&adis->spi->dev, "Failed to read register 0x%02X: %d\n",
212 adis->current_page = page;
216 *val = get_unaligned_be32(adis->rx);
219 *val = get_unaligned_be16(adis->rx + 2);
228 * @adis: The adis device
236 int __adis_update_bits_base(struct adis *adis, unsigned int reg, const u32 mask,
242 ret = __adis_read_reg(adis, reg, &__val, size);
248 return __adis_write_reg(adis, reg, __val, size);
257 struct adis *adis = iio_device_get_drvdata(indio_dev);
263 ret = adis_read_reg_16(adis, reg, &val16);
270 return adis_write_reg_16(adis, reg, writeval);
278 * @adis: The adis device
283 int __adis_enable_irq(struct adis *adis, bool enable)
288 if (adis->data->enable_irq)
289 return adis->data->enable_irq(adis, enable);
291 if (adis->data->unmasked_drdy) {
293 enable_irq(adis->spi->irq);
295 disable_irq(adis->spi->irq);
300 ret = __adis_read_reg_16(adis, adis->data->msc_ctrl_reg, &msc);
311 return __adis_write_reg_16(adis, adis->data->msc_ctrl_reg, msc);
317 * @adis: The adis device
321 int __adis_check_status(struct adis *adis)
327 ret = __adis_read_reg_16(adis, adis->data->diag_stat_reg, &status);
331 status &= adis->data->status_error_mask;
338 dev_err(&adis->spi->dev, "%s.\n",
339 adis->data->status_error_msgs[i]);
349 * @adis: The adis device
353 int __adis_reset(struct adis *adis)
356 const struct adis_timeout *timeouts = adis->data->timeouts;
358 ret = __adis_write_reg_8(adis, adis->data->glob_cmd_reg,
361 dev_err(&adis->spi->dev, "Failed to reset device: %d\n", ret);
371 static int adis_self_test(struct adis *adis)
374 const struct adis_timeout *timeouts = adis->data->timeouts;
376 ret = __adis_write_reg_16(adis, adis->data->self_test_reg,
377 adis->data->self_test_mask);
379 dev_err(&adis->spi->dev, "Failed to initiate self test: %d\n",
386 ret = __adis_check_status(adis);
388 if (adis->data->self_test_no_autoclear)
389 __adis_write_reg_16(adis, adis->data->self_test_reg, 0x00);
396 * @adis: The adis device
411 int __adis_initial_startup(struct adis *adis)
413 const struct adis_timeout *timeouts = adis->data->timeouts;
419 gpio = devm_gpiod_get_optional(&adis->spi->dev, "reset", GPIOD_OUT_HIGH);
429 ret = __adis_reset(adis);
434 ret = adis_self_test(adis);
443 if (!adis->data->unmasked_drdy)
444 __adis_enable_irq(adis, false);
446 if (!adis->data->prod_id_reg)
449 ret = adis_read_reg_16(adis, adis->data->prod_id_reg, &prod_id);
453 if (prod_id != adis->data->prod_id)
454 dev_warn(&adis->spi->dev,
456 adis->data->prod_id, prod_id);
481 struct adis *adis = iio_device_get_drvdata(indio_dev);
485 mutex_lock(&adis->state_lock);
487 ret = __adis_read_reg(adis, chan->address, &uval,
493 ret = __adis_check_status(adis);
505 mutex_unlock(&adis->state_lock);
511 * adis_init() - Initialize adis device structure
512 * @adis: The adis device
519 * This function must be called, before any other adis helper function may be
522 int adis_init(struct adis *adis, struct iio_dev *indio_dev,
530 mutex_init(&adis->state_lock);
531 adis->spi = spi;
532 adis->data = data;
533 iio_device_set_drvdata(indio_dev, adis);
537 adis->current_page = -1;
540 adis->current_page = 0;