]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
iio: core: Hide read accesses to iio_dev->currentmode
authorMiquel Raynal <miquel.raynal@bootlin.com>
Mon, 7 Feb 2022 14:38:37 +0000 (15:38 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 25 Oct 2023 09:58:58 +0000 (11:58 +0200)
[ Upstream commit 8c576f87ad7eb639b8bd4472a9bb830e0696dda5 ]

In order to later move this variable within the opaque structure, let's
create a helper for accessing it in read-only mode. This helper will be
exposed to device drivers and kept accessible for the few that could need
it. The write access to this variable however should be fully reserved to
the core so in a second step we will hide this variable into the opaque
structure.

Cc: Eugen Hristev <eugen.hristev@microchip.com>
Cc: Nicolas Ferre <nicolas.ferre@microchip.com>
Cc: Alexandre Belloni <alexandre.belloni@bootlin.com>
Cc: Ludovic Desroches <ludovic.desroches@microchip.com>
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
Link: https://lore.kernel.org/r/20220207143840.707510-11-miquel.raynal@bootlin.com
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Stable-dep-of: 7771c8c80d62 ("iio: cros_ec: fix an use-after-free in cros_ec_sensors_push_data()")
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/iio/accel/bmc150-accel-core.c
drivers/iio/adc/at91-sama5d2_adc.c
drivers/iio/industrialio-core.c
include/linux/iio/iio.h

index 3af763b4a97376088a43bea849d11b03ca2cda6d..9eabc4d1dd0f2705cd7b45603f8160ab103147a2 100644 (file)
@@ -1525,7 +1525,7 @@ static int bmc150_accel_buffer_postenable(struct iio_dev *indio_dev)
        struct bmc150_accel_data *data = iio_priv(indio_dev);
        int ret = 0;
 
-       if (indio_dev->currentmode == INDIO_BUFFER_TRIGGERED)
+       if (iio_device_get_current_mode(indio_dev) == INDIO_BUFFER_TRIGGERED)
                return 0;
 
        mutex_lock(&data->mutex);
@@ -1557,7 +1557,7 @@ static int bmc150_accel_buffer_predisable(struct iio_dev *indio_dev)
 {
        struct bmc150_accel_data *data = iio_priv(indio_dev);
 
-       if (indio_dev->currentmode == INDIO_BUFFER_TRIGGERED)
+       if (iio_device_get_current_mode(indio_dev) == INDIO_BUFFER_TRIGGERED)
                return 0;
 
        mutex_lock(&data->mutex);
index ecb49bc452ae6f5230ac108c93cead2a27099e6d..806fdcd79e64d611140a98632f183d50035479e9 100644 (file)
@@ -894,7 +894,7 @@ static int at91_adc_buffer_prepare(struct iio_dev *indio_dev)
                return at91_adc_configure_touch(st, true);
 
        /* if we are not in triggered mode, we cannot enable the buffer. */
-       if (!(indio_dev->currentmode & INDIO_ALL_TRIGGERED_MODES))
+       if (!(iio_device_get_current_mode(indio_dev) & INDIO_ALL_TRIGGERED_MODES))
                return -EINVAL;
 
        /* we continue with the triggered buffer */
@@ -947,7 +947,7 @@ static int at91_adc_buffer_postdisable(struct iio_dev *indio_dev)
                return at91_adc_configure_touch(st, false);
 
        /* if we are not in triggered mode, nothing to do here */
-       if (!(indio_dev->currentmode & INDIO_ALL_TRIGGERED_MODES))
+       if (!(iio_device_get_current_mode(indio_dev) & INDIO_ALL_TRIGGERED_MODES))
                return -EINVAL;
 
        /*
index f95a95fd9d0a5de1e8d6cf0615bfe00d86c2ecb4..6145e6e4f0ffdfece4244fc9a42a3b13abf7bd47 100644 (file)
@@ -2084,6 +2084,17 @@ void iio_device_release_direct_mode(struct iio_dev *indio_dev)
 }
 EXPORT_SYMBOL_GPL(iio_device_release_direct_mode);
 
+/**
+ * iio_device_get_current_mode() - helper function providing read-only access to
+ *                                the @currentmode variable
+ * @indio_dev:                    IIO device structure for device
+ */
+int iio_device_get_current_mode(struct iio_dev *indio_dev)
+{
+       return indio_dev->currentmode;
+}
+EXPORT_SYMBOL_GPL(iio_device_get_current_mode);
+
 subsys_initcall(iio_init);
 module_exit(iio_exit);
 
index 0346acbbed2eefd7838a06eecd1d1b98d2b36919..0cac05d5ef1c330d4336bbdfb18dd247058b293b 100644 (file)
@@ -542,6 +542,7 @@ struct iio_dev {
 };
 
 int iio_device_id(struct iio_dev *indio_dev);
+int iio_device_get_current_mode(struct iio_dev *indio_dev);
 bool iio_buffer_enabled(struct iio_dev *indio_dev);
 
 const struct iio_chan_spec