On Thu, 26 Sep 2019 14:18:08 +0300 Alexandru Ardelean <alexandru.ardelean@xxxxxxxxxx> wrote: > The initial startup routine is called by some ADIS drivers during probe, > and before registering with IIO. Normally, userspace should not be able to > do any access to the device (as there shouldn't be any available). > > This change extends the state lock to the entire initial-startup routine. > Behaviourally nothing should change, but this should make the library > function a bit more robust. > > Signed-off-by: Alexandru Ardelean <alexandru.ardelean@xxxxxxxxxx> Applied. Thanks, > --- > drivers/iio/imu/adis.c | 16 ++++++++++------ > 1 file changed, 10 insertions(+), 6 deletions(-) > > diff --git a/drivers/iio/imu/adis.c b/drivers/iio/imu/adis.c > index b14101bf34b9..7468294d1776 100644 > --- a/drivers/iio/imu/adis.c > +++ b/drivers/iio/imu/adis.c > @@ -331,7 +331,7 @@ static int adis_self_test(struct adis *adis) > { > int ret; > > - ret = adis_write_reg_16(adis, adis->data->msc_ctrl_reg, > + ret = __adis_write_reg_16(adis, adis->data->msc_ctrl_reg, > adis->data->self_test_mask); > if (ret) { > dev_err(&adis->spi->dev, "Failed to initiate self test: %d\n", > @@ -341,10 +341,10 @@ static int adis_self_test(struct adis *adis) > > msleep(adis->data->startup_delay); > > - ret = adis_check_status(adis); > + ret = __adis_check_status(adis); > > if (adis->data->self_test_no_autoclear) > - adis_write_reg_16(adis, adis->data->msc_ctrl_reg, 0x00); > + __adis_write_reg_16(adis, adis->data->msc_ctrl_reg, 0x00); > > return ret; > } > @@ -362,19 +362,23 @@ int adis_initial_startup(struct adis *adis) > { > int ret; > > + mutex_lock(&adis->state_lock); > + > ret = adis_self_test(adis); > if (ret) { > dev_err(&adis->spi->dev, "Self-test failed, trying reset.\n"); > - adis_reset(adis); > + __adis_reset(adis); > msleep(adis->data->startup_delay); > ret = adis_self_test(adis); > if (ret) { > dev_err(&adis->spi->dev, "Second self-test failed, giving up.\n"); > - return ret; > + goto out_unlock; > } > } > > - return 0; > +out_unlock: > + mutex_unlock(&adis->state_lock); > + return ret; > } > EXPORT_SYMBOL_GPL(adis_initial_startup); >