Lines Matching refs:sigma_delta
40 void ad_sd_set_comm(struct ad_sigma_delta *sigma_delta, uint8_t comm) in ad_sd_set_comm() argument
44 sigma_delta->comm = comm & AD_SD_COMM_CHAN_MASK; in ad_sd_set_comm()
58 int ad_sd_write_reg(struct ad_sigma_delta *sigma_delta, unsigned int reg, in ad_sd_write_reg() argument
61 uint8_t *data = sigma_delta->data; in ad_sd_write_reg()
65 .cs_change = sigma_delta->bus_locked, in ad_sd_write_reg()
70 data[0] = (reg << sigma_delta->info->addr_shift) | sigma_delta->comm; in ad_sd_write_reg()
93 if (sigma_delta->bus_locked) in ad_sd_write_reg()
94 ret = spi_sync_locked(sigma_delta->spi, &m); in ad_sd_write_reg()
96 ret = spi_sync(sigma_delta->spi, &m); in ad_sd_write_reg()
102 static int ad_sd_read_reg_raw(struct ad_sigma_delta *sigma_delta, in ad_sd_read_reg_raw() argument
105 uint8_t *data = sigma_delta->data; in ad_sd_read_reg_raw()
114 .cs_change = sigma_delta->bus_locked, in ad_sd_read_reg_raw()
121 if (sigma_delta->info->has_registers) { in ad_sd_read_reg_raw()
122 data[0] = reg << sigma_delta->info->addr_shift; in ad_sd_read_reg_raw()
123 data[0] |= sigma_delta->info->read_mask; in ad_sd_read_reg_raw()
128 if (sigma_delta->bus_locked) in ad_sd_read_reg_raw()
129 ret = spi_sync_locked(sigma_delta->spi, &m); in ad_sd_read_reg_raw()
131 ret = spi_sync(sigma_delta->spi, &m); in ad_sd_read_reg_raw()
146 int ad_sd_read_reg(struct ad_sigma_delta *sigma_delta, in ad_sd_read_reg() argument
151 ret = ad_sd_read_reg_raw(sigma_delta, reg, size, sigma_delta->data); in ad_sd_read_reg()
157 *val = get_unaligned_be32(sigma_delta->data); in ad_sd_read_reg()
160 *val = (sigma_delta->data[0] << 16) | in ad_sd_read_reg()
161 (sigma_delta->data[1] << 8) | in ad_sd_read_reg()
162 sigma_delta->data[2]; in ad_sd_read_reg()
165 *val = get_unaligned_be16(sigma_delta->data); in ad_sd_read_reg()
168 *val = sigma_delta->data[0]; in ad_sd_read_reg()
188 int ad_sd_reset(struct ad_sigma_delta *sigma_delta, in ad_sd_reset() argument
201 ret = spi_write(sigma_delta->spi, buf, size); in ad_sd_reset()
208 static int ad_sd_calibrate(struct ad_sigma_delta *sigma_delta, in ad_sd_calibrate() argument
214 ret = ad_sigma_delta_set_channel(sigma_delta, channel); in ad_sd_calibrate()
218 spi_bus_lock(sigma_delta->spi->master); in ad_sd_calibrate()
219 sigma_delta->bus_locked = true; in ad_sd_calibrate()
220 reinit_completion(&sigma_delta->completion); in ad_sd_calibrate()
222 ret = ad_sigma_delta_set_mode(sigma_delta, mode); in ad_sd_calibrate()
226 sigma_delta->irq_dis = false; in ad_sd_calibrate()
227 enable_irq(sigma_delta->spi->irq); in ad_sd_calibrate()
228 timeout = wait_for_completion_timeout(&sigma_delta->completion, 2 * HZ); in ad_sd_calibrate()
230 sigma_delta->irq_dis = true; in ad_sd_calibrate()
231 disable_irq_nosync(sigma_delta->spi->irq); in ad_sd_calibrate()
237 sigma_delta->bus_locked = false; in ad_sd_calibrate()
238 spi_bus_unlock(sigma_delta->spi->master); in ad_sd_calibrate()
239 ad_sigma_delta_set_mode(sigma_delta, AD_SD_MODE_IDLE); in ad_sd_calibrate()
252 int ad_sd_calibrate_all(struct ad_sigma_delta *sigma_delta, in ad_sd_calibrate_all() argument
259 ret = ad_sd_calibrate(sigma_delta, cb[i].mode, cb[i].channel); in ad_sd_calibrate_all()
279 struct ad_sigma_delta *sigma_delta = iio_device_get_drvdata(indio_dev); in ad_sigma_delta_single_conversion() local
287 ad_sigma_delta_set_channel(sigma_delta, chan->address); in ad_sigma_delta_single_conversion()
289 spi_bus_lock(sigma_delta->spi->master); in ad_sigma_delta_single_conversion()
290 sigma_delta->bus_locked = true; in ad_sigma_delta_single_conversion()
291 reinit_completion(&sigma_delta->completion); in ad_sigma_delta_single_conversion()
293 ad_sigma_delta_set_mode(sigma_delta, AD_SD_MODE_SINGLE); in ad_sigma_delta_single_conversion()
295 sigma_delta->irq_dis = false; in ad_sigma_delta_single_conversion()
296 enable_irq(sigma_delta->spi->irq); in ad_sigma_delta_single_conversion()
298 &sigma_delta->completion, HZ); in ad_sigma_delta_single_conversion()
300 sigma_delta->bus_locked = false; in ad_sigma_delta_single_conversion()
301 spi_bus_unlock(sigma_delta->spi->master); in ad_sigma_delta_single_conversion()
308 ret = ad_sd_read_reg(sigma_delta, AD_SD_REG_DATA, in ad_sigma_delta_single_conversion()
313 if (!sigma_delta->irq_dis) { in ad_sigma_delta_single_conversion()
314 disable_irq_nosync(sigma_delta->spi->irq); in ad_sigma_delta_single_conversion()
315 sigma_delta->irq_dis = true; in ad_sigma_delta_single_conversion()
318 ad_sigma_delta_set_mode(sigma_delta, AD_SD_MODE_IDLE); in ad_sigma_delta_single_conversion()
328 ret = ad_sigma_delta_postprocess_sample(sigma_delta, raw_sample); in ad_sigma_delta_single_conversion()
338 struct ad_sigma_delta *sigma_delta = iio_device_get_drvdata(indio_dev); in ad_sd_buffer_postenable() local
348 ret = ad_sigma_delta_set_channel(sigma_delta, in ad_sd_buffer_postenable()
353 spi_bus_lock(sigma_delta->spi->master); in ad_sd_buffer_postenable()
354 sigma_delta->bus_locked = true; in ad_sd_buffer_postenable()
355 ret = ad_sigma_delta_set_mode(sigma_delta, AD_SD_MODE_CONTINUOUS); in ad_sd_buffer_postenable()
359 sigma_delta->irq_dis = false; in ad_sd_buffer_postenable()
360 enable_irq(sigma_delta->spi->irq); in ad_sd_buffer_postenable()
365 spi_bus_unlock(sigma_delta->spi->master); in ad_sd_buffer_postenable()
373 struct ad_sigma_delta *sigma_delta = iio_device_get_drvdata(indio_dev); in ad_sd_buffer_postdisable() local
375 reinit_completion(&sigma_delta->completion); in ad_sd_buffer_postdisable()
376 wait_for_completion_timeout(&sigma_delta->completion, HZ); in ad_sd_buffer_postdisable()
378 if (!sigma_delta->irq_dis) { in ad_sd_buffer_postdisable()
379 disable_irq_nosync(sigma_delta->spi->irq); in ad_sd_buffer_postdisable()
380 sigma_delta->irq_dis = true; in ad_sd_buffer_postdisable()
383 ad_sigma_delta_set_mode(sigma_delta, AD_SD_MODE_IDLE); in ad_sd_buffer_postdisable()
385 sigma_delta->bus_locked = false; in ad_sd_buffer_postdisable()
386 return spi_bus_unlock(sigma_delta->spi->master); in ad_sd_buffer_postdisable()
393 struct ad_sigma_delta *sigma_delta = iio_device_get_drvdata(indio_dev); in ad_sd_trigger_handler() local
408 ret = ad_sd_read_reg_raw(sigma_delta, AD_SD_REG_DATA, in ad_sd_trigger_handler()
414 ret = ad_sd_read_reg_raw(sigma_delta, AD_SD_REG_DATA, in ad_sd_trigger_handler()
422 sigma_delta->irq_dis = false; in ad_sd_trigger_handler()
423 enable_irq(sigma_delta->spi->irq); in ad_sd_trigger_handler()
437 struct ad_sigma_delta *sigma_delta = private; in ad_sd_data_rdy_trig_poll() local
439 complete(&sigma_delta->completion); in ad_sd_data_rdy_trig_poll()
441 sigma_delta->irq_dis = true; in ad_sd_data_rdy_trig_poll()
442 iio_trigger_poll(sigma_delta->trig); in ad_sd_data_rdy_trig_poll()
457 struct ad_sigma_delta *sigma_delta = iio_device_get_drvdata(indio_dev); in ad_sd_validate_trigger() local
459 if (sigma_delta->trig != trig) in ad_sd_validate_trigger()
471 struct ad_sigma_delta *sigma_delta = iio_device_get_drvdata(indio_dev); in ad_sd_probe_trigger() local
474 sigma_delta->trig = iio_trigger_alloc("%s-dev%d", indio_dev->name, in ad_sd_probe_trigger()
476 if (sigma_delta->trig == NULL) { in ad_sd_probe_trigger()
480 sigma_delta->trig->ops = &ad_sd_trigger_ops; in ad_sd_probe_trigger()
481 init_completion(&sigma_delta->completion); in ad_sd_probe_trigger()
483 ret = request_irq(sigma_delta->spi->irq, in ad_sd_probe_trigger()
487 sigma_delta); in ad_sd_probe_trigger()
491 if (!sigma_delta->irq_dis) { in ad_sd_probe_trigger()
492 sigma_delta->irq_dis = true; in ad_sd_probe_trigger()
493 disable_irq_nosync(sigma_delta->spi->irq); in ad_sd_probe_trigger()
495 sigma_delta->trig->dev.parent = &sigma_delta->spi->dev; in ad_sd_probe_trigger()
496 iio_trigger_set_drvdata(sigma_delta->trig, sigma_delta); in ad_sd_probe_trigger()
498 ret = iio_trigger_register(sigma_delta->trig); in ad_sd_probe_trigger()
503 indio_dev->trig = iio_trigger_get(sigma_delta->trig); in ad_sd_probe_trigger()
508 free_irq(sigma_delta->spi->irq, sigma_delta); in ad_sd_probe_trigger()
510 iio_trigger_free(sigma_delta->trig); in ad_sd_probe_trigger()
517 struct ad_sigma_delta *sigma_delta = iio_device_get_drvdata(indio_dev); in ad_sd_remove_trigger() local
519 iio_trigger_unregister(sigma_delta->trig); in ad_sd_remove_trigger()
520 free_irq(sigma_delta->spi->irq, sigma_delta); in ad_sd_remove_trigger()
521 iio_trigger_free(sigma_delta->trig); in ad_sd_remove_trigger()
568 int ad_sd_init(struct ad_sigma_delta *sigma_delta, struct iio_dev *indio_dev, in ad_sd_init() argument
571 sigma_delta->spi = spi; in ad_sd_init()
572 sigma_delta->info = info; in ad_sd_init()
573 iio_device_set_drvdata(indio_dev, sigma_delta); in ad_sd_init()