]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
iio: imu: adis: Add reset to custom ops
authorRobert Budai <robert.budai@analog.com>
Mon, 17 Feb 2025 10:57:46 +0000 (12:57 +0200)
committerJonathan Cameron <Jonathan.Cameron@huawei.com>
Sat, 22 Feb 2025 12:23:19 +0000 (12:23 +0000)
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>
drivers/iio/imu/adis.c
include/linux/iio/imu/adis.h

index 54915c7a3e76513ddf5bfabf9d007158f291a4bc..84344f052fb748c82368563cf645d57d6065f8ca 100644 (file)
@@ -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);
index 89cfa75ae9ead260a1030280a957a5e6a316a67a..52652f51db2ef3bd2ab9533b5c2ebc9024e740ee 100644 (file)
@@ -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);
 };
 
 /**