summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Budai <robert.budai@analog.com>2025-02-17 12:57:46 +0200
committerJonathan Cameron <Jonathan.Cameron@huawei.com>2025-02-22 12:23:19 +0000
commit7f15d7a7d12dbcb4a846ca19d9565e0c11ea6694 (patch)
treef4d7e8e37141430169cbd9a8da1971199b92f095
parent3b29bcee8f6f703a5952b85fc2ffcbcfb0862db4 (diff)
iio: imu: adis: Add reset to custom ops
This patch allows the custom definition of reset functionality for adis object. It is useful in cases where the driver does not need to sleep after the reset since it is handled by the library. Co-developed-by: Ramona Gradinariu <ramona.gradinariu@analog.com> Signed-off-by: Ramona Gradinariu <ramona.gradinariu@analog.com> Co-developed-by: Antoniu Miclaus <antoniu.miclaus@analog.com> Signed-off-by: Antoniu Miclaus <antoniu.miclaus@analog.com> Co-developed-by: Nuno Sá <nuno.sa@analog.com> Signed-off-by: Nuno Sá <nuno.sa@analog.com> Signed-off-by: Robert Budai <robert.budai@analog.com> Link: https://patch.msgid.link/20250217105753.605465-3-robert.budai@analog.com Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
-rw-r--r--drivers/iio/imu/adis.c5
-rw-r--r--include/linux/iio/imu/adis.h3
2 files changed, 6 insertions, 2 deletions
diff --git a/drivers/iio/imu/adis.c b/drivers/iio/imu/adis.c
index 54915c7a3e76..84344f052fb7 100644
--- a/drivers/iio/imu/adis.c
+++ b/drivers/iio/imu/adis.c
@@ -491,6 +491,7 @@ EXPORT_SYMBOL_NS_GPL(adis_single_conversion, "IIO_ADISLIB");
static const struct adis_ops adis_default_ops = {
.read = __adis_read_reg,
.write = __adis_write_reg,
+ .reset = __adis_reset,
};
/**
@@ -522,9 +523,9 @@ int adis_init(struct adis *adis, struct iio_dev *indio_dev,
adis->spi = spi;
adis->data = data;
- if (!adis->ops->write && !adis->ops->read)
+ if (!adis->ops->write && !adis->ops->read && !adis->ops->reset)
adis->ops = &adis_default_ops;
- else if (!adis->ops->write || !adis->ops->read)
+ else if (!adis->ops->write || !adis->ops->read || !adis->ops->reset)
return -EINVAL;
iio_device_set_drvdata(indio_dev, adis);
diff --git a/include/linux/iio/imu/adis.h b/include/linux/iio/imu/adis.h
index 89cfa75ae9ea..52652f51db2e 100644
--- a/include/linux/iio/imu/adis.h
+++ b/include/linux/iio/imu/adis.h
@@ -98,12 +98,15 @@ struct adis_data {
* struct adis_ops: Custom ops for adis devices.
* @write: Custom spi write implementation.
* @read: Custom spi read implementation.
+ * @reset: Custom sw reset implementation. The custom implementation does not
+ * need to sleep after the reset. It's done by the library already.
*/
struct adis_ops {
int (*write)(struct adis *adis, unsigned int reg, unsigned int value,
unsigned int size);
int (*read)(struct adis *adis, unsigned int reg, unsigned int *value,
unsigned int size);
+ int (*reset)(struct adis *adis);
};
/**