On Mon, 25 Nov 2024 15:35:10 +0200 Robert Budai <robert.budai@xxxxxxxxxx> wrote: > This patch allows the custom definition of reset funcitonality > for adis object. It is useful in cases where the reset does not > need to sleep after the reset since it is handled by the library. > > Co-developed-by: Ramona Gradinariu <ramona.gradinariu@xxxxxxxxxx> > Signed-off-by: Ramona Gradinariu <ramona.gradinariu@xxxxxxxxxx> > Co-developed-by: Antoniu Miclaus <antoniu.miclaus@xxxxxxxxxx> > Signed-off-by: Antoniu Miclaus <antoniu.miclaus@xxxxxxxxxx> > Signed-off-by: Nuno Sá <nuno.sa@xxxxxxxxxx> > Signed-off-by: Robert Budai <robert.budai@xxxxxxxxxx> > --- > > v2: > -added reset ops as a different patch > - signed of by submitter > > drivers/iio/imu/adis.c | 7 +++++-- > include/linux/iio/imu/adis.h | 3 +++ > 2 files changed, 8 insertions(+), 2 deletions(-) > > diff --git a/drivers/iio/imu/adis.c b/drivers/iio/imu/adis.c > index fa7a817b7d99..865f7c56717a 100644 > --- a/drivers/iio/imu/adis.c > +++ b/drivers/iio/imu/adis.c > @@ -339,8 +339,11 @@ int __adis_reset(struct adis *adis) > int ret; > const struct adis_timeout *timeouts = adis->data->timeouts; > > - ret = __adis_write_reg_8(adis, adis->data->glob_cmd_reg, > - ADIS_GLOB_CMD_SW_RESET); > + if (adis->ops->reset) > + ret = adis->ops->reset(adis); > + else > + ret = __adis_write_reg_8(adis, adis->data->glob_cmd_reg, > + ADIS_GLOB_CMD_SW_RESET); # May be simpler to use default ops and always have a reset callback. if (ret) { > dev_err(&adis->spi->dev, "Failed to reset device: %d\n", ret); > return ret; > 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); > }; > > /**