Lines Matching refs:adis
30 int adis_write_reg(struct adis *adis, unsigned int reg, in adis_write_reg() argument
38 .tx_buf = adis->tx, in adis_write_reg()
42 .delay_usecs = adis->data->write_delay, in adis_write_reg()
44 .tx_buf = adis->tx + 2, in adis_write_reg()
48 .delay_usecs = adis->data->write_delay, in adis_write_reg()
50 .tx_buf = adis->tx + 4, in adis_write_reg()
54 .delay_usecs = adis->data->write_delay, in adis_write_reg()
56 .tx_buf = adis->tx + 6, in adis_write_reg()
59 .delay_usecs = adis->data->write_delay, in adis_write_reg()
61 .tx_buf = adis->tx + 8, in adis_write_reg()
64 .delay_usecs = adis->data->write_delay, in adis_write_reg()
68 mutex_lock(&adis->txrx_lock); in adis_write_reg()
72 if (adis->current_page != page) { in adis_write_reg()
73 adis->tx[0] = ADIS_WRITE_REG(ADIS_REG_PAGE_ID); in adis_write_reg()
74 adis->tx[1] = page; in adis_write_reg()
80 adis->tx[8] = ADIS_WRITE_REG(reg + 3); in adis_write_reg()
81 adis->tx[9] = (value >> 24) & 0xff; in adis_write_reg()
82 adis->tx[6] = ADIS_WRITE_REG(reg + 2); in adis_write_reg()
83 adis->tx[7] = (value >> 16) & 0xff; in adis_write_reg()
85 adis->tx[4] = ADIS_WRITE_REG(reg + 1); in adis_write_reg()
86 adis->tx[5] = (value >> 8) & 0xff; in adis_write_reg()
88 adis->tx[2] = ADIS_WRITE_REG(reg); in adis_write_reg()
89 adis->tx[3] = value & 0xff; in adis_write_reg()
101 ret = spi_sync(adis->spi, &msg); in adis_write_reg()
103 dev_err(&adis->spi->dev, "Failed to write register 0x%02X: %d\n", in adis_write_reg()
106 adis->current_page = page; in adis_write_reg()
110 mutex_unlock(&adis->txrx_lock); in adis_write_reg()
122 int adis_read_reg(struct adis *adis, unsigned int reg, in adis_read_reg() argument
130 .tx_buf = adis->tx, in adis_read_reg()
134 .delay_usecs = adis->data->write_delay, in adis_read_reg()
136 .tx_buf = adis->tx + 2, in adis_read_reg()
140 .delay_usecs = adis->data->read_delay, in adis_read_reg()
142 .tx_buf = adis->tx + 4, in adis_read_reg()
143 .rx_buf = adis->rx, in adis_read_reg()
147 .delay_usecs = adis->data->read_delay, in adis_read_reg()
149 .rx_buf = adis->rx + 2, in adis_read_reg()
152 .delay_usecs = adis->data->read_delay, in adis_read_reg()
156 mutex_lock(&adis->txrx_lock); in adis_read_reg()
159 if (adis->current_page != page) { in adis_read_reg()
160 adis->tx[0] = ADIS_WRITE_REG(ADIS_REG_PAGE_ID); in adis_read_reg()
161 adis->tx[1] = page; in adis_read_reg()
167 adis->tx[2] = ADIS_READ_REG(reg + 2); in adis_read_reg()
168 adis->tx[3] = 0; in adis_read_reg()
171 adis->tx[4] = ADIS_READ_REG(reg); in adis_read_reg()
172 adis->tx[5] = 0; in adis_read_reg()
181 ret = spi_sync(adis->spi, &msg); in adis_read_reg()
183 dev_err(&adis->spi->dev, "Failed to read register 0x%02X: %d\n", in adis_read_reg()
187 adis->current_page = page; in adis_read_reg()
192 *val = get_unaligned_be32(adis->rx); in adis_read_reg()
195 *val = get_unaligned_be16(adis->rx + 2); in adis_read_reg()
200 mutex_unlock(&adis->txrx_lock); in adis_read_reg()
211 struct adis *adis = iio_device_get_drvdata(indio_dev); in adis_debugfs_reg_access() local
217 ret = adis_read_reg_16(adis, reg, &val16); in adis_debugfs_reg_access()
222 return adis_write_reg_16(adis, reg, writeval); in adis_debugfs_reg_access()
236 int adis_enable_irq(struct adis *adis, bool enable) in adis_enable_irq() argument
241 if (adis->data->enable_irq) in adis_enable_irq()
242 return adis->data->enable_irq(adis, enable); in adis_enable_irq()
244 ret = adis_read_reg_16(adis, adis->data->msc_ctrl_reg, &msc); in adis_enable_irq()
255 ret = adis_write_reg_16(adis, adis->data->msc_ctrl_reg, msc); in adis_enable_irq()
268 int adis_check_status(struct adis *adis) in adis_check_status() argument
274 ret = adis_read_reg_16(adis, adis->data->diag_stat_reg, &status); in adis_check_status()
278 status &= adis->data->status_error_mask; in adis_check_status()
285 dev_err(&adis->spi->dev, "%s.\n", in adis_check_status()
286 adis->data->status_error_msgs[i]); in adis_check_status()
300 int adis_reset(struct adis *adis) in adis_reset() argument
304 ret = adis_write_reg_8(adis, adis->data->glob_cmd_reg, in adis_reset()
307 dev_err(&adis->spi->dev, "Failed to reset device: %d\n", ret); in adis_reset()
313 static int adis_self_test(struct adis *adis) in adis_self_test() argument
317 ret = adis_write_reg_16(adis, adis->data->msc_ctrl_reg, in adis_self_test()
318 adis->data->self_test_mask); in adis_self_test()
320 dev_err(&adis->spi->dev, "Failed to initiate self test: %d\n", in adis_self_test()
325 msleep(adis->data->startup_delay); in adis_self_test()
327 return adis_check_status(adis); in adis_self_test()
339 int adis_initial_startup(struct adis *adis) in adis_initial_startup() argument
343 ret = adis_self_test(adis); in adis_initial_startup()
345 dev_err(&adis->spi->dev, "Self-test failed, trying reset.\n"); in adis_initial_startup()
346 adis_reset(adis); in adis_initial_startup()
347 msleep(adis->data->startup_delay); in adis_initial_startup()
348 ret = adis_self_test(adis); in adis_initial_startup()
350 dev_err(&adis->spi->dev, "Second self-test failed, giving up.\n"); in adis_initial_startup()
377 struct adis *adis = iio_device_get_drvdata(indio_dev); in adis_single_conversion() local
383 ret = adis_read_reg(adis, chan->address, &uval, in adis_single_conversion()
389 ret = adis_check_status(adis); in adis_single_conversion()
418 int adis_init(struct adis *adis, struct iio_dev *indio_dev, in adis_init() argument
421 mutex_init(&adis->txrx_lock); in adis_init()
422 adis->spi = spi; in adis_init()
423 adis->data = data; in adis_init()
424 iio_device_set_drvdata(indio_dev, adis); in adis_init()
428 adis->current_page = -1; in adis_init()
431 adis->current_page = 0; in adis_init()
434 return adis_enable_irq(adis, false); in adis_init()