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()
180 static int ad_sd_calibrate(struct ad_sigma_delta *sigma_delta, in ad_sd_calibrate() argument
185 ret = ad_sigma_delta_set_channel(sigma_delta, channel); in ad_sd_calibrate()
189 spi_bus_lock(sigma_delta->spi->master); in ad_sd_calibrate()
190 sigma_delta->bus_locked = true; in ad_sd_calibrate()
191 reinit_completion(&sigma_delta->completion); in ad_sd_calibrate()
193 ret = ad_sigma_delta_set_mode(sigma_delta, mode); in ad_sd_calibrate()
197 sigma_delta->irq_dis = false; in ad_sd_calibrate()
198 enable_irq(sigma_delta->spi->irq); in ad_sd_calibrate()
199 ret = wait_for_completion_timeout(&sigma_delta->completion, 2*HZ); in ad_sd_calibrate()
201 sigma_delta->irq_dis = true; in ad_sd_calibrate()
202 disable_irq_nosync(sigma_delta->spi->irq); in ad_sd_calibrate()
208 sigma_delta->bus_locked = false; in ad_sd_calibrate()
209 spi_bus_unlock(sigma_delta->spi->master); in ad_sd_calibrate()
210 ad_sigma_delta_set_mode(sigma_delta, AD_SD_MODE_IDLE); in ad_sd_calibrate()
223 int ad_sd_calibrate_all(struct ad_sigma_delta *sigma_delta, in ad_sd_calibrate_all() argument
230 ret = ad_sd_calibrate(sigma_delta, cb[i].mode, cb[i].channel); in ad_sd_calibrate_all()
250 struct ad_sigma_delta *sigma_delta = iio_device_get_drvdata(indio_dev); in ad_sigma_delta_single_conversion() local
258 ad_sigma_delta_set_channel(sigma_delta, chan->address); in ad_sigma_delta_single_conversion()
260 spi_bus_lock(sigma_delta->spi->master); in ad_sigma_delta_single_conversion()
261 sigma_delta->bus_locked = true; in ad_sigma_delta_single_conversion()
262 reinit_completion(&sigma_delta->completion); in ad_sigma_delta_single_conversion()
264 ad_sigma_delta_set_mode(sigma_delta, AD_SD_MODE_SINGLE); in ad_sigma_delta_single_conversion()
266 sigma_delta->irq_dis = false; in ad_sigma_delta_single_conversion()
267 enable_irq(sigma_delta->spi->irq); in ad_sigma_delta_single_conversion()
269 &sigma_delta->completion, HZ); in ad_sigma_delta_single_conversion()
271 sigma_delta->bus_locked = false; in ad_sigma_delta_single_conversion()
272 spi_bus_unlock(sigma_delta->spi->master); in ad_sigma_delta_single_conversion()
279 ret = ad_sd_read_reg(sigma_delta, AD_SD_REG_DATA, in ad_sigma_delta_single_conversion()
284 if (!sigma_delta->irq_dis) { in ad_sigma_delta_single_conversion()
285 disable_irq_nosync(sigma_delta->spi->irq); in ad_sigma_delta_single_conversion()
286 sigma_delta->irq_dis = true; in ad_sigma_delta_single_conversion()
289 ad_sigma_delta_set_mode(sigma_delta, AD_SD_MODE_IDLE); in ad_sigma_delta_single_conversion()
299 ret = ad_sigma_delta_postprocess_sample(sigma_delta, raw_sample); in ad_sigma_delta_single_conversion()
309 struct ad_sigma_delta *sigma_delta = iio_device_get_drvdata(indio_dev); in ad_sd_buffer_postenable() local
319 ret = ad_sigma_delta_set_channel(sigma_delta, in ad_sd_buffer_postenable()
324 spi_bus_lock(sigma_delta->spi->master); in ad_sd_buffer_postenable()
325 sigma_delta->bus_locked = true; in ad_sd_buffer_postenable()
326 ret = ad_sigma_delta_set_mode(sigma_delta, AD_SD_MODE_CONTINUOUS); in ad_sd_buffer_postenable()
330 sigma_delta->irq_dis = false; in ad_sd_buffer_postenable()
331 enable_irq(sigma_delta->spi->irq); in ad_sd_buffer_postenable()
336 spi_bus_unlock(sigma_delta->spi->master); in ad_sd_buffer_postenable()
344 struct ad_sigma_delta *sigma_delta = iio_device_get_drvdata(indio_dev); in ad_sd_buffer_postdisable() local
346 reinit_completion(&sigma_delta->completion); in ad_sd_buffer_postdisable()
347 wait_for_completion_timeout(&sigma_delta->completion, HZ); in ad_sd_buffer_postdisable()
349 if (!sigma_delta->irq_dis) { in ad_sd_buffer_postdisable()
350 disable_irq_nosync(sigma_delta->spi->irq); in ad_sd_buffer_postdisable()
351 sigma_delta->irq_dis = true; in ad_sd_buffer_postdisable()
354 ad_sigma_delta_set_mode(sigma_delta, AD_SD_MODE_IDLE); in ad_sd_buffer_postdisable()
356 sigma_delta->bus_locked = false; in ad_sd_buffer_postdisable()
357 return spi_bus_unlock(sigma_delta->spi->master); in ad_sd_buffer_postdisable()
364 struct ad_sigma_delta *sigma_delta = iio_device_get_drvdata(indio_dev); in ad_sd_trigger_handler() local
379 ret = ad_sd_read_reg_raw(sigma_delta, AD_SD_REG_DATA, in ad_sd_trigger_handler()
385 ret = ad_sd_read_reg_raw(sigma_delta, AD_SD_REG_DATA, in ad_sd_trigger_handler()
393 sigma_delta->irq_dis = false; in ad_sd_trigger_handler()
394 enable_irq(sigma_delta->spi->irq); in ad_sd_trigger_handler()
408 struct ad_sigma_delta *sigma_delta = private; in ad_sd_data_rdy_trig_poll() local
410 complete(&sigma_delta->completion); in ad_sd_data_rdy_trig_poll()
412 sigma_delta->irq_dis = true; in ad_sd_data_rdy_trig_poll()
413 iio_trigger_poll(sigma_delta->trig); in ad_sd_data_rdy_trig_poll()
428 struct ad_sigma_delta *sigma_delta = iio_device_get_drvdata(indio_dev); in ad_sd_validate_trigger() local
430 if (sigma_delta->trig != trig) in ad_sd_validate_trigger()
443 struct ad_sigma_delta *sigma_delta = iio_device_get_drvdata(indio_dev); in ad_sd_probe_trigger() local
446 sigma_delta->trig = iio_trigger_alloc("%s-dev%d", indio_dev->name, in ad_sd_probe_trigger()
448 if (sigma_delta->trig == NULL) { in ad_sd_probe_trigger()
452 sigma_delta->trig->ops = &ad_sd_trigger_ops; in ad_sd_probe_trigger()
453 init_completion(&sigma_delta->completion); in ad_sd_probe_trigger()
455 ret = request_irq(sigma_delta->spi->irq, in ad_sd_probe_trigger()
459 sigma_delta); in ad_sd_probe_trigger()
463 if (!sigma_delta->irq_dis) { in ad_sd_probe_trigger()
464 sigma_delta->irq_dis = true; in ad_sd_probe_trigger()
465 disable_irq_nosync(sigma_delta->spi->irq); in ad_sd_probe_trigger()
467 sigma_delta->trig->dev.parent = &sigma_delta->spi->dev; in ad_sd_probe_trigger()
468 iio_trigger_set_drvdata(sigma_delta->trig, sigma_delta); in ad_sd_probe_trigger()
470 ret = iio_trigger_register(sigma_delta->trig); in ad_sd_probe_trigger()
475 indio_dev->trig = iio_trigger_get(sigma_delta->trig); in ad_sd_probe_trigger()
480 free_irq(sigma_delta->spi->irq, sigma_delta); in ad_sd_probe_trigger()
482 iio_trigger_free(sigma_delta->trig); in ad_sd_probe_trigger()
489 struct ad_sigma_delta *sigma_delta = iio_device_get_drvdata(indio_dev); in ad_sd_remove_trigger() local
491 iio_trigger_unregister(sigma_delta->trig); in ad_sd_remove_trigger()
492 free_irq(sigma_delta->spi->irq, sigma_delta); in ad_sd_remove_trigger()
493 iio_trigger_free(sigma_delta->trig); in ad_sd_remove_trigger()
540 int ad_sd_init(struct ad_sigma_delta *sigma_delta, struct iio_dev *indio_dev, in ad_sd_init() argument
543 sigma_delta->spi = spi; in ad_sd_init()
544 sigma_delta->info = info; in ad_sd_init()
545 iio_device_set_drvdata(indio_dev, sigma_delta); in ad_sd_init()