On 5/11/20 4:02 AM, Sebastian Reichel wrote: > From: Samu Nuutamo <samu.nuutamo@xxxxxxxxx> > > When tsi-as-adc is configured it is possible for in7[0123]_input read to > return an incorrect value if a concurrent read to in[456]_input is > performed. This is caused by a concurrent manipulation of the mux > channel without proper locking as hwmon and mfd use different locks for > synchronization. > > Switch hwmon to use the same lock as mfd when accessing the TSI channel. > > Fixes: 4f16cab19a3d5 ("hwmon: da9052: Add support for TSI channel") > Signed-off-by: Samu Nuutamo <samu.nuutamo@xxxxxxxxx> > [rebase to current master, reword commit message slightly] > Signed-off-by: Sebastian Reichel <sebastian.reichel@xxxxxxxxxxxxx> Have you explored calling da9052_adc_manual_read() instead ? At the very least we should have a comment explaining why that isn't feasible. Thanks, Guenter > --- > drivers/hwmon/da9052-hwmon.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/drivers/hwmon/da9052-hwmon.c b/drivers/hwmon/da9052-hwmon.c > index 53b517dbe7e6..4af2fc309c28 100644 > --- a/drivers/hwmon/da9052-hwmon.c > +++ b/drivers/hwmon/da9052-hwmon.c > @@ -244,9 +244,9 @@ static ssize_t da9052_tsi_show(struct device *dev, > int channel = to_sensor_dev_attr(devattr)->index; > int ret; > > - mutex_lock(&hwmon->hwmon_lock); > + mutex_lock(&hwmon->da9052->auxadc_lock); > ret = __da9052_read_tsi(dev, channel); > - mutex_unlock(&hwmon->hwmon_lock); > + mutex_unlock(&hwmon->da9052->auxadc_lock); > > if (ret < 0) > return ret; >