@@ -340,7 +340,7 @@ int __adis_reset(struct adis *adis)
const struct adis_timeout *timeouts = adis->data->timeouts;
ret = __adis_write_reg_8(adis, adis->data->glob_cmd_reg,
- ADIS_GLOB_CMD_SW_RESET);
+ ADIS_GLOB_CMD_SW_RESET);
if (ret) {
dev_err(&adis->spi->dev, "Failed to reset device: %d\n", ret);
return ret;
@@ -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);
@@ -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);
};
/**