Lines Matching +full:spi +full:- +full:cs +full:- +full:setup +full:- +full:delay +full:- +full:ns

1 // SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0
7 #include <linux/delay.h>
11 #include <linux/spi/spi.h>
165 } while (--i >= 0); in smi240_crc3()
189 struct spi_device *spi = context; in smi240_regmap_spi_read() local
190 struct iio_dev *indio_dev = dev_get_drvdata(&spi->dev); in smi240_regmap_spi_read()
194 return -EINVAL; in smi240_regmap_spi_read()
197 request |= FIELD_PREP(SMI240_WRITE_CAP_BIT_MASK, iio_priv_data->capture); in smi240_regmap_spi_read()
201 iio_priv_data->spi_buf = cpu_to_be32(request); in smi240_regmap_spi_read()
205 * SPI protocol, where the slave interface responds to in smi240_regmap_spi_read()
207 * CS signal must toggle (> 700 ns) between the frames. in smi240_regmap_spi_read()
209 ret = spi_write(spi, &iio_priv_data->spi_buf, sizeof(request)); in smi240_regmap_spi_read()
213 ret = spi_read(spi, &iio_priv_data->spi_buf, sizeof(response)); in smi240_regmap_spi_read()
217 response = be32_to_cpu(iio_priv_data->spi_buf); in smi240_regmap_spi_read()
220 return -EIO; in smi240_regmap_spi_read()
234 struct spi_device *spi = context; in smi240_regmap_spi_write() local
235 struct iio_dev *indio_dev = dev_get_drvdata(&spi->dev); in smi240_regmap_spi_write()
239 return -EINVAL; in smi240_regmap_spi_write()
250 iio_priv_data->spi_buf = cpu_to_be32(request); in smi240_regmap_spi_write()
252 return spi_write(spi, &iio_priv_data->spi_buf, sizeof(request)); in smi240_regmap_spi_write()
270 ret = regmap_write(data->regmap, SMI240_CMD_REG, SMI240_SOFT_RESET_CMD); in smi240_soft_reset()
284 switch (data->accel_filter_freq) { in smi240_soft_config()
292 return -EINVAL; in smi240_soft_config()
295 switch (data->anglvel_filter_freq) { in smi240_soft_config()
303 return -EINVAL; in smi240_soft_config()
311 data->built_in_self_test_count - 1); in smi240_soft_config()
313 ret = regmap_write(data->regmap, SMI240_SOFT_CONFIG_REG, request); in smi240_soft_config()
318 data->built_in_self_test_count * SMI240_BITE_SEQUENCE_DELAY_US + in smi240_soft_config()
329 *val = data->accel_filter_freq; in smi240_get_low_pass_filter_freq()
332 *val = data->anglvel_filter_freq; in smi240_get_low_pass_filter_freq()
335 return -EINVAL; in smi240_get_low_pass_filter_freq()
350 reg = SMI240_ACCEL_X_CUR_REG + (axis - IIO_MOD_X); in smi240_get_data()
353 reg = SMI240_GYRO_X_CUR_REG + (axis - IIO_MOD_X); in smi240_get_data()
356 return -EINVAL; in smi240_get_data()
359 ret = regmap_read(data->regmap, reg, &sample); in smi240_get_data()
371 struct iio_dev *indio_dev = pf->indio_dev; in smi240_trigger_handler()
376 data->capture = SMI240_CAPTURE_ON; in smi240_trigger_handler()
379 ret = regmap_read(data->regmap, base + chan, &sample); in smi240_trigger_handler()
380 data->capture = SMI240_CAPTURE_OFF; in smi240_trigger_handler()
383 data->buf[i++] = sample; in smi240_trigger_handler()
386 iio_push_to_buffers_with_timestamp(indio_dev, data->buf, pf->timestamp); in smi240_trigger_handler()
389 iio_trigger_notify_done(indio_dev->trig); in smi240_trigger_handler()
404 return -EINVAL; in smi240_read_avail()
420 ret = smi240_get_data(data, chan->type, chan->channel2, val); in smi240_read_raw()
427 ret = smi240_get_low_pass_filter_freq(data, chan->type, val); in smi240_read_raw()
433 switch (chan->type) { in smi240_read_raw()
447 return -EINVAL; in smi240_read_raw()
451 if (chan->type == IIO_TEMP) { in smi240_read_raw()
455 return -EINVAL; in smi240_read_raw()
459 return -EINVAL; in smi240_read_raw()
478 return -EINVAL; in smi240_write_raw()
480 switch (chan->type) { in smi240_write_raw()
482 data->accel_filter_freq = val; in smi240_write_raw()
485 data->anglvel_filter_freq = val; in smi240_write_raw()
488 return -EINVAL; in smi240_write_raw()
492 return -EINVAL; in smi240_write_raw()
508 switch (chan->type) { in smi240_write_raw_get_fmt()
523 data->accel_filter_freq = SMI240_HIGH_BANDWIDTH_HZ; in smi240_init()
524 data->anglvel_filter_freq = SMI240_HIGH_BANDWIDTH_HZ; in smi240_init()
525 data->built_in_self_test_count = SMI240_BUILT_IN_SELF_TEST_COUNT; in smi240_init()
541 static int smi240_probe(struct spi_device *spi) in smi240_probe() argument
543 struct device *dev = &spi->dev; in smi240_probe()
551 return -ENOMEM; in smi240_probe()
557 "Failed to initialize SPI Regmap\n"); in smi240_probe()
561 data->regmap = regmap; in smi240_probe()
562 data->capture = SMI240_CAPTURE_OFF; in smi240_probe()
564 ret = regmap_read(data->regmap, SMI240_CHIP_ID_REG, &response); in smi240_probe()
576 indio_dev->channels = smi240_channels; in smi240_probe()
577 indio_dev->num_channels = ARRAY_SIZE(smi240_channels); in smi240_probe()
578 indio_dev->name = "smi240"; in smi240_probe()
579 indio_dev->modes = INDIO_DIRECT_MODE; in smi240_probe()
580 indio_dev->info = &smi240_info; in smi240_probe()
587 "Setup triggered buffer failed\n"); in smi240_probe()
600 MODULE_DEVICE_TABLE(spi, smi240_spi_id);
620 MODULE_DESCRIPTION("Bosch SMI240 SPI driver");