Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

iio: adc: axp288_adc: do not use internal iio_dev lock

The iio_device lock is only meant for internal use. Hence define a
device local lock to protect against concurrent accesses.

While at it, properly include "mutex.h" for mutex related APIs.

Signed-off-by: Nuno Sá <nuno.sa@analog.com>
Link: https://lore.kernel.org/r/20221004134909.1692021-3-nuno.sa@analog.com
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>

authored by

Nuno Sá and committed by
Jonathan Cameron
ed3aa671 8f347c56

+7 -2
+7 -2
drivers/iio/adc/axp288_adc.c
··· 9 9 10 10 #include <linux/dmi.h> 11 11 #include <linux/module.h> 12 + #include <linux/mutex.h> 12 13 #include <linux/kernel.h> 13 14 #include <linux/device.h> 14 15 #include <linux/regmap.h> ··· 51 50 struct axp288_adc_info { 52 51 int irq; 53 52 struct regmap *regmap; 53 + /* lock to protect against multiple access to the device */ 54 + struct mutex lock; 54 55 bool ts_enabled; 55 56 }; 56 57 ··· 164 161 int ret; 165 162 struct axp288_adc_info *info = iio_priv(indio_dev); 166 163 167 - mutex_lock(&indio_dev->mlock); 164 + mutex_lock(&info->lock); 168 165 switch (mask) { 169 166 case IIO_CHAN_INFO_RAW: 170 167 if (axp288_adc_set_ts(info, AXP288_ADC_TS_CURRENT_ON_ONDEMAND, ··· 181 178 default: 182 179 ret = -EINVAL; 183 180 } 184 - mutex_unlock(&indio_dev->mlock); 181 + mutex_unlock(&info->lock); 185 182 186 183 return ret; 187 184 } ··· 291 288 ret = devm_iio_map_array_register(&pdev->dev, indio_dev, axp288_adc_default_maps); 292 289 if (ret < 0) 293 290 return ret; 291 + 292 + mutex_init(&info->lock); 294 293 295 294 return devm_iio_device_register(&pdev->dev, indio_dev); 296 295 }