Lines Matching defs:adis
19 #include <linux/iio/imu/adis.h>
28 * @adis: The adis device
33 int __adis_write_reg(struct adis *adis, unsigned int reg, unsigned int value,
41 .tx_buf = adis->tx,
44 .delay.value = adis->data->write_delay,
47 .tx_buf = adis->tx + 2,
50 .delay.value = adis->data->write_delay,
53 .tx_buf = adis->tx + 4,
56 .delay.value = adis->data->write_delay,
59 .tx_buf = adis->tx + 6,
61 .delay.value = adis->data->write_delay,
64 .tx_buf = adis->tx + 8,
66 .delay.value = adis->data->write_delay,
73 if (adis->current_page != page) {
74 adis->tx[0] = ADIS_WRITE_REG(ADIS_REG_PAGE_ID);
75 adis->tx[1] = page;
81 adis->tx[8] = ADIS_WRITE_REG(reg + 3);
82 adis->tx[9] = (value >> 24) & 0xff;
83 adis->tx[6] = ADIS_WRITE_REG(reg + 2);
84 adis->tx[7] = (value >> 16) & 0xff;
87 adis->tx[4] = ADIS_WRITE_REG(reg + 1);
88 adis->tx[5] = (value >> 8) & 0xff;
91 adis->tx[2] = ADIS_WRITE_REG(reg);
92 adis->tx[3] = value & 0xff;
103 ret = spi_sync(adis->spi, &msg);
105 dev_err(&adis->spi->dev, "Failed to write register 0x%02X: %d\n",
108 adis->current_page = page;
117 * @adis: The adis device
122 int __adis_read_reg(struct adis *adis, unsigned int reg, unsigned int *val,
130 .tx_buf = adis->tx,
133 .delay.value = adis->data->write_delay,
136 .tx_buf = adis->tx + 2,
139 .delay.value = adis->data->read_delay,
142 .tx_buf = adis->tx + 4,
143 .rx_buf = adis->rx,
146 .delay.value = adis->data->read_delay,
149 .rx_buf = adis->rx + 2,
151 .delay.value = adis->data->read_delay,
158 if (adis->current_page != page) {
159 adis->tx[0] = ADIS_WRITE_REG(ADIS_REG_PAGE_ID);
160 adis->tx[1] = page;
166 adis->tx[2] = ADIS_READ_REG(reg + 2);
167 adis->tx[3] = 0;
171 adis->tx[4] = ADIS_READ_REG(reg);
172 adis->tx[5] = 0;
180 ret = spi_sync(adis->spi, &msg);
182 dev_err(&adis->spi->dev, "Failed to read register 0x%02X: %d\n",
187 adis->current_page = page;
191 *val = get_unaligned_be32(adis->rx);
194 *val = get_unaligned_be16(adis->rx + 2);
203 * @adis: The adis device
211 int __adis_update_bits_base(struct adis *adis, unsigned int reg, const u32 mask,
217 ret = adis->ops->read(adis, reg, &__val, size);
223 return adis->ops->write(adis, reg, __val, size);
232 struct adis *adis = iio_device_get_drvdata(indio_dev);
238 ret = adis_read_reg_16(adis, reg, &val16);
245 return adis_write_reg_16(adis, reg, writeval);
253 * @adis: The adis device
258 int __adis_enable_irq(struct adis *adis, bool enable)
263 if (adis->data->enable_irq)
264 return adis->data->enable_irq(adis, enable);
266 if (adis->data->unmasked_drdy) {
268 enable_irq(adis->spi->irq);
270 disable_irq(adis->spi->irq);
275 ret = __adis_read_reg_16(adis, adis->data->msc_ctrl_reg, &msc);
286 return __adis_write_reg_16(adis, adis->data->msc_ctrl_reg, msc);
292 * @adis: The adis device
296 int __adis_check_status(struct adis *adis)
304 if (adis->data->diag_stat_size) {
305 ret = adis->ops->read(adis, adis->data->diag_stat_reg, &status,
306 adis->data->diag_stat_size);
308 ret = __adis_read_reg_16(adis, adis->data->diag_stat_reg,
315 status &= adis->data->status_error_mask;
320 diag_stat_bits = BITS_PER_BYTE * (adis->data->diag_stat_size ?
321 adis->data->diag_stat_size : 2);
325 dev_err(&adis->spi->dev, "%s.\n",
326 adis->data->status_error_msgs[i]);
336 * @adis: The adis device
340 int __adis_reset(struct adis *adis)
343 const struct adis_timeout *timeouts = adis->data->timeouts;
345 ret = __adis_write_reg_8(adis, adis->data->glob_cmd_reg,
348 dev_err(&adis->spi->dev, "Failed to reset device: %d\n", ret);
358 static int adis_self_test(struct adis *adis)
361 const struct adis_timeout *timeouts = adis->data->timeouts;
363 ret = __adis_write_reg_16(adis, adis->data->self_test_reg,
364 adis->data->self_test_mask);
366 dev_err(&adis->spi->dev, "Failed to initiate self test: %d\n",
373 ret = __adis_check_status(adis);
375 if (adis->data->self_test_no_autoclear)
376 __adis_write_reg_16(adis, adis->data->self_test_reg, 0x00);
383 * @adis: The adis device
398 int __adis_initial_startup(struct adis *adis)
400 const struct adis_timeout *timeouts = adis->data->timeouts;
406 gpio = devm_gpiod_get_optional(&adis->spi->dev, "reset", GPIOD_OUT_HIGH);
416 ret = __adis_reset(adis);
421 ret = adis_self_test(adis);
430 if (!adis->data->unmasked_drdy)
431 __adis_enable_irq(adis, false);
433 if (!adis->data->prod_id_reg)
436 ret = adis_read_reg_16(adis, adis->data->prod_id_reg, &prod_id);
440 if (prod_id != adis->data->prod_id)
441 dev_warn(&adis->spi->dev,
443 adis->data->prod_id, prod_id);
468 struct adis *adis = iio_device_get_drvdata(indio_dev);
472 guard(mutex)(&adis->state_lock);
474 ret = adis->ops->read(adis, chan->address, &uval,
480 ret = __adis_check_status(adis);
501 * adis_init() - Initialize adis device structure
502 * @adis: The adis device
509 * This function must be called, before any other adis helper function may be
512 int adis_init(struct adis *adis, struct iio_dev *indio_dev,
520 mutex_init(&adis->state_lock);
527 adis->spi = spi;
528 adis->data = data;
529 if (!adis->ops->write && !adis->ops->read && !adis->ops->reset)
530 adis->ops = &adis_default_ops;
531 else if (!adis->ops->write || !adis->ops->read || !adis->ops->reset)
534 iio_device_set_drvdata(indio_dev, adis);
538 adis->current_page = -1;
541 adis->current_page = 0;