mirror of https://gitee.com/openkylin/linux.git
staging: iio: tsl2583: add locking to sysfs attributes
in_illuminance_input_target_show(), in_illuminance_input_target_store(), in_illuminance_calibrate_store(), and in_illuminance_lux_table_store() accesses data from the tsl2583_chip struct. Some of these fields can be modified by other parts of the driver concurrently. This patch adds the mutex locking to these sysfs attributes. Signed-off-by: Brian Masney <masneyb@onstation.org> Signed-off-by: Jonathan Cameron <jic23@kernel.org>
This commit is contained in:
parent
f375a49f71
commit
1b7e9e2cbd
|
@ -513,8 +513,13 @@ static ssize_t in_illuminance_input_target_show(struct device *dev,
|
|||
{
|
||||
struct iio_dev *indio_dev = dev_to_iio_dev(dev);
|
||||
struct tsl2583_chip *chip = iio_priv(indio_dev);
|
||||
int ret;
|
||||
|
||||
return sprintf(buf, "%d\n", chip->taos_settings.als_cal_target);
|
||||
mutex_lock(&chip->als_mutex);
|
||||
ret = sprintf(buf, "%d\n", chip->taos_settings.als_cal_target);
|
||||
mutex_unlock(&chip->als_mutex);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static ssize_t in_illuminance_input_target_store(struct device *dev,
|
||||
|
@ -528,7 +533,9 @@ static ssize_t in_illuminance_input_target_store(struct device *dev,
|
|||
if (kstrtoint(buf, 0, &value) || !value)
|
||||
return -EINVAL;
|
||||
|
||||
mutex_lock(&chip->als_mutex);
|
||||
chip->taos_settings.als_cal_target = value;
|
||||
mutex_unlock(&chip->als_mutex);
|
||||
|
||||
return len;
|
||||
}
|
||||
|
@ -538,12 +545,15 @@ static ssize_t in_illuminance_calibrate_store(struct device *dev,
|
|||
const char *buf, size_t len)
|
||||
{
|
||||
struct iio_dev *indio_dev = dev_to_iio_dev(dev);
|
||||
struct tsl2583_chip *chip = iio_priv(indio_dev);
|
||||
int value;
|
||||
|
||||
if (kstrtoint(buf, 0, &value) || value != 1)
|
||||
return -EINVAL;
|
||||
|
||||
mutex_lock(&chip->als_mutex);
|
||||
taos_als_calibrate(indio_dev);
|
||||
mutex_unlock(&chip->als_mutex);
|
||||
|
||||
return len;
|
||||
}
|
||||
|
@ -583,6 +593,8 @@ static ssize_t in_illuminance_lux_table_store(struct device *dev,
|
|||
int value[ARRAY_SIZE(taos_device_lux) * 3 + 1];
|
||||
int n, ret = -EINVAL;
|
||||
|
||||
mutex_lock(&chip->als_mutex);
|
||||
|
||||
get_options(buf, ARRAY_SIZE(value), value);
|
||||
|
||||
/* We now have an array of ints starting at value[1], and
|
||||
|
@ -617,6 +629,8 @@ static ssize_t in_illuminance_lux_table_store(struct device *dev,
|
|||
ret = len;
|
||||
|
||||
done:
|
||||
mutex_unlock(&chip->als_mutex);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue