Lines Matching +full:analog +full:- +full:pass

1 // SPDX-License-Identifier: GPL-2.0-or-later
6 * Copyright (C) 2020 Analog Devices, Inc.
83 * Available cut-off frequencies of the low pass filter in Hz.
98 * Available cut-off frequencies of the high pass filter in Hz.
121 mutex_lock(&st->lock); in adxrs290_get_rate_data()
122 temp = spi_w8r16(st->spi, cmd); in adxrs290_get_rate_data()
131 mutex_unlock(&st->lock); in adxrs290_get_rate_data()
142 mutex_lock(&st->lock); in adxrs290_get_temp_data()
143 temp = spi_w8r16(st->spi, cmd); in adxrs290_get_temp_data()
153 mutex_unlock(&st->lock); in adxrs290_get_temp_data()
164 mutex_lock(&st->lock); in adxrs290_get_3db_freq()
165 temp = spi_w8r8(st->spi, cmd); in adxrs290_get_3db_freq()
175 mutex_unlock(&st->lock); in adxrs290_get_3db_freq()
200 return -EINVAL; in adxrs290_find_match()
212 return adxrs290_spi_write_reg(st->spi, ADXRS290_REG_FILTER, val); in adxrs290_set_filter_freq()
220 if (st->mode == mode) in adxrs290_set_mode()
223 mutex_lock(&st->lock); in adxrs290_set_mode()
225 ret = spi_w8r8(st->spi, ADXRS290_READ_REG(ADXRS290_REG_POWER_CTL)); in adxrs290_set_mode()
239 ret = -EINVAL; in adxrs290_set_mode()
243 ret = adxrs290_spi_write_reg(st->spi, ADXRS290_REG_POWER_CTL, val); in adxrs290_set_mode()
245 dev_err(&st->spi->dev, "unable to set mode: %d\n", ret); in adxrs290_set_mode()
250 st->mode = mode; in adxrs290_set_mode()
253 mutex_unlock(&st->lock); in adxrs290_set_mode()
267 struct spi_device *spi = st->spi; in adxrs290_initial_setup()
275 st->mode = ADXRS290_MODE_MEASUREMENT; in adxrs290_initial_setup()
277 return devm_add_action_or_reset(&spi->dev, adxrs290_chip_off_action, in adxrs290_initial_setup()
294 return -EBUSY; in adxrs290_read_raw()
296 switch (chan->type) { in adxrs290_read_raw()
299 ADXRS290_READ_REG(chan->address), in adxrs290_read_raw()
314 ret = -EINVAL; in adxrs290_read_raw()
321 switch (chan->type) { in adxrs290_read_raw()
332 return -EINVAL; in adxrs290_read_raw()
335 switch (chan->type) { in adxrs290_read_raw()
337 t = st->lpf_3db_freq_idx; in adxrs290_read_raw()
342 return -EINVAL; in adxrs290_read_raw()
345 switch (chan->type) { in adxrs290_read_raw()
347 t = st->hpf_3db_freq_idx; in adxrs290_read_raw()
352 return -EINVAL; in adxrs290_read_raw()
356 return -EINVAL; in adxrs290_read_raw()
369 return -EBUSY; in adxrs290_write_raw()
377 ret = -EINVAL; in adxrs290_write_raw()
381 /* caching the updated state of the low-pass filter */ in adxrs290_write_raw()
382 st->lpf_3db_freq_idx = lpf_idx; in adxrs290_write_raw()
383 /* retrieving the current state of the high-pass filter */ in adxrs290_write_raw()
384 hpf_idx = st->hpf_3db_freq_idx; in adxrs290_write_raw()
393 ret = -EINVAL; in adxrs290_write_raw()
397 /* caching the updated state of the high-pass filter */ in adxrs290_write_raw()
398 st->hpf_3db_freq_idx = hpf_idx; in adxrs290_write_raw()
399 /* retrieving the current state of the low-pass filter */ in adxrs290_write_raw()
400 lpf_idx = st->lpf_3db_freq_idx; in adxrs290_write_raw()
405 ret = -EINVAL; in adxrs290_write_raw()
434 return -EINVAL; in adxrs290_read_avail()
458 return adxrs290_reg_access_rw(st->spi, reg, readval); in adxrs290_reg_access()
460 return adxrs290_spi_write_reg(st->spi, reg, writeval); in adxrs290_reg_access()
473 ret = adxrs290_spi_write_reg(st->spi, ADXRS290_REG_DATA_RDY, val); in adxrs290_data_rdy_trigger_set_state()
475 dev_err(&st->spi->dev, "failed to start data rdy interrupt\n"); in adxrs290_data_rdy_trigger_set_state()
504 struct iio_dev *indio_dev = pf->indio_dev; in adxrs290_trigger_handler()
509 mutex_lock(&st->lock); in adxrs290_trigger_handler()
512 ret = spi_write_then_read(st->spi, &tx, sizeof(tx), st->buffer.channels, in adxrs290_trigger_handler()
513 sizeof(st->buffer.channels)); in adxrs290_trigger_handler()
517 iio_push_to_buffers_with_timestamp(indio_dev, &st->buffer, in adxrs290_trigger_handler()
518 pf->timestamp); in adxrs290_trigger_handler()
521 mutex_unlock(&st->lock); in adxrs290_trigger_handler()
522 iio_trigger_notify_done(indio_dev->trig); in adxrs290_trigger_handler()
584 if (!st->spi->irq) { in adxrs290_probe_trigger()
585 dev_info(&st->spi->dev, "no irq, using polling\n"); in adxrs290_probe_trigger()
589 st->dready_trig = devm_iio_trigger_alloc(&st->spi->dev, "%s-dev%d", in adxrs290_probe_trigger()
590 indio_dev->name, in adxrs290_probe_trigger()
592 if (!st->dready_trig) in adxrs290_probe_trigger()
593 return -ENOMEM; in adxrs290_probe_trigger()
595 st->dready_trig->ops = &adxrs290_trigger_ops; in adxrs290_probe_trigger()
596 iio_trigger_set_drvdata(st->dready_trig, indio_dev); in adxrs290_probe_trigger()
598 ret = devm_request_irq(&st->spi->dev, st->spi->irq, in adxrs290_probe_trigger()
600 IRQF_ONESHOT, "adxrs290_irq", st->dready_trig); in adxrs290_probe_trigger()
602 return dev_err_probe(&st->spi->dev, ret, in adxrs290_probe_trigger()
603 "request irq %d failed\n", st->spi->irq); in adxrs290_probe_trigger()
605 ret = devm_iio_trigger_register(&st->spi->dev, st->dready_trig); in adxrs290_probe_trigger()
607 dev_err(&st->spi->dev, "iio trigger register failed\n"); in adxrs290_probe_trigger()
611 indio_dev->trig = iio_trigger_get(st->dready_trig); in adxrs290_probe_trigger()
623 indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*st)); in adxrs290_probe()
625 return -ENOMEM; in adxrs290_probe()
628 st->spi = spi; in adxrs290_probe()
630 indio_dev->name = "adxrs290"; in adxrs290_probe()
631 indio_dev->modes = INDIO_DIRECT_MODE; in adxrs290_probe()
632 indio_dev->channels = adxrs290_channels; in adxrs290_probe()
633 indio_dev->num_channels = ARRAY_SIZE(adxrs290_channels); in adxrs290_probe()
634 indio_dev->info = &adxrs290_info; in adxrs290_probe()
635 indio_dev->available_scan_masks = adxrs290_avail_scan_masks; in adxrs290_probe()
637 mutex_init(&st->lock); in adxrs290_probe()
641 dev_err(&spi->dev, "Wrong ADI ID 0x%02x\n", val); in adxrs290_probe()
642 return -ENODEV; in adxrs290_probe()
647 dev_err(&spi->dev, "Wrong MEMS ID 0x%02x\n", val); in adxrs290_probe()
648 return -ENODEV; in adxrs290_probe()
653 dev_err(&spi->dev, "Wrong DEV ID 0x%02x\n", val); in adxrs290_probe()
654 return -ENODEV; in adxrs290_probe()
658 st->mode = ADXRS290_MODE_STANDBY; in adxrs290_probe()
672 st->lpf_3db_freq_idx = val; in adxrs290_probe()
673 st->hpf_3db_freq_idx = val2; in adxrs290_probe()
675 ret = devm_iio_triggered_buffer_setup(&spi->dev, indio_dev, in adxrs290_probe()
679 return dev_err_probe(&spi->dev, ret, in adxrs290_probe()
686 return devm_iio_device_register(&spi->dev, indio_dev); in adxrs290_probe()
705 MODULE_DESCRIPTION("Analog Devices ADXRS290 Gyroscope SPI driver");