iio: st_sensors: Stop abusing mlock to ensure internal coherency
authorMiquel Raynal <miquel.raynal@bootlin.com>
Mon, 7 Feb 2022 14:38:34 +0000 (15:38 +0100)
committerJonathan Cameron <Jonathan.Cameron@huawei.com>
Sun, 10 Apr 2022 15:21:45 +0000 (16:21 +0100)
An odr_lock has been introduced to protect local accesses to the odr
internal cache and ensure the cached value always reflected the actual
value. Using the mlock() for this purpose is no longer needed, so let's
drop these extra mutex_lock/unlock() calls.

Suggested-by: Jonathan Cameron <jic23@kernel.org>
Cc: Denis Ciocca <denis.ciocca@st.com>
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
Link: https://lore.kernel.org/r/20220207143840.707510-8-miquel.raynal@bootlin.com
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
drivers/iio/accel/st_accel_core.c
drivers/iio/gyro/st_gyro_core.c
drivers/iio/magnetometer/st_magn_core.c
drivers/iio/pressure/st_pressure_core.c

index e029589a668aed2d6ead136cdf04256875787b3a..c8c8eb15c34e6306a975416eed51df4cb4bf0119 100644 (file)
@@ -1210,8 +1210,6 @@ read_error:
 static int st_accel_write_raw(struct iio_dev *indio_dev,
                struct iio_chan_spec const *chan, int val, int val2, long mask)
 {
-       int err;
-
        switch (mask) {
        case IIO_CHAN_INFO_SCALE: {
                int gain;
@@ -1222,10 +1220,8 @@ static int st_accel_write_raw(struct iio_dev *indio_dev,
        case IIO_CHAN_INFO_SAMP_FREQ:
                if (val2)
                        return -EINVAL;
-               mutex_lock(&indio_dev->mlock);
-               err = st_sensors_set_odr(indio_dev, val);
-               mutex_unlock(&indio_dev->mlock);
-               return err;
+
+               return st_sensors_set_odr(indio_dev, val);
        default:
                return -EINVAL;
        }
index 9b0cd314496e51184977b919fc02801fd8244dbd..eaa35da42b332ba882f33e10f76212b381cbc387 100644 (file)
@@ -406,18 +406,14 @@ read_error:
 static int st_gyro_write_raw(struct iio_dev *indio_dev,
                struct iio_chan_spec const *chan, int val, int val2, long mask)
 {
-       int err;
-
        switch (mask) {
        case IIO_CHAN_INFO_SCALE:
                return st_sensors_set_fullscale_by_gain(indio_dev, val2);
        case IIO_CHAN_INFO_SAMP_FREQ:
                if (val2)
                        return -EINVAL;
-               mutex_lock(&indio_dev->mlock);
-               err = st_sensors_set_odr(indio_dev, val);
-               mutex_unlock(&indio_dev->mlock);
-               return err;
+
+               return st_sensors_set_odr(indio_dev, val);
        default:
                return -EINVAL;
        }
index 78c407c96e17b3caca57978053646180d391aa13..e2fd233b3626dc8d2a84ee76a2d9d457545ef91d 100644 (file)
@@ -540,18 +540,14 @@ read_error:
 static int st_magn_write_raw(struct iio_dev *indio_dev,
                struct iio_chan_spec const *chan, int val, int val2, long mask)
 {
-       int err;
-
        switch (mask) {
        case IIO_CHAN_INFO_SCALE:
                return st_sensors_set_fullscale_by_gain(indio_dev, val2);
        case IIO_CHAN_INFO_SAMP_FREQ:
                if (val2)
                        return -EINVAL;
-               mutex_lock(&indio_dev->mlock);
-               err = st_sensors_set_odr(indio_dev, val);
-               mutex_unlock(&indio_dev->mlock);
-               return err;
+
+               return st_sensors_set_odr(indio_dev, val);
        default:
                return -EINVAL;
        }
index 5b93933a2e27154bca3e03220b65a54f52e680f6..76913a2028d276ad4e0cb03ab6b94e98c85ee7e0 100644 (file)
@@ -560,16 +560,12 @@ static int st_press_write_raw(struct iio_dev *indio_dev,
                              int val2,
                              long mask)
 {
-       int err;
-
        switch (mask) {
        case IIO_CHAN_INFO_SAMP_FREQ:
                if (val2)
                        return -EINVAL;
-               mutex_lock(&indio_dev->mlock);
-               err = st_sensors_set_odr(indio_dev, val);
-               mutex_unlock(&indio_dev->mlock);
-               return err;
+
+               return st_sensors_set_odr(indio_dev, val);
        default:
                return -EINVAL;
        }