iio: st_sensors: disable regulators after device unregistration
authorAlexandru Ardelean <aardelean@deviqon.com>
Mon, 23 Aug 2021 11:22:00 +0000 (14:22 +0300)
committerJonathan Cameron <Jonathan.Cameron@huawei.com>
Tue, 14 Sep 2021 11:00:31 +0000 (12:00 +0100)
Up until commit ea7e586bdd331 ("iio: st_sensors: move regulator retrieveal
to core") only the ST pressure driver seems to have had any regulator
disable. After that commit, the regulator handling was moved into the
common st_sensors logic.

In all instances of this regulator handling, the regulators were disabled
before unregistering the IIO device.
This can cause issues where the device would be powered down and still be
available to userspace, allowing it to send invalid/garbage data.

This change moves the st_sensors_power_disable() after the common probe
functions. These common probe functions also handle unregistering the IIO
device.

Fixes: 774487611c949 ("iio: pressure-core: st: Provide support for the Vdd power supply")
Fixes: ea7e586bdd331 ("iio: st_sensors: move regulator retrieveal to core")
Cc: Lee Jones <lee.jones@linaro.org>
Cc: Denis CIOCCA <denis.ciocca@st.com>
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
Signed-off-by: Alexandru Ardelean <aardelean@deviqon.com>
Link: https://lore.kernel.org/r/20210823112204.243255-2-aardelean@deviqon.com
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
drivers/iio/accel/st_accel_i2c.c
drivers/iio/accel/st_accel_spi.c
drivers/iio/gyro/st_gyro_i2c.c
drivers/iio/gyro/st_gyro_spi.c
drivers/iio/magnetometer/st_magn_i2c.c
drivers/iio/magnetometer/st_magn_spi.c
drivers/iio/pressure/st_pressure_i2c.c
drivers/iio/pressure/st_pressure_spi.c

index f711756..cba5745 100644 (file)
@@ -193,10 +193,10 @@ static int st_accel_i2c_remove(struct i2c_client *client)
 {
        struct iio_dev *indio_dev = i2c_get_clientdata(client);
 
-       st_sensors_power_disable(indio_dev);
-
        st_accel_common_remove(indio_dev);
 
+       st_sensors_power_disable(indio_dev);
+
        return 0;
 }
 
index bb45d9f..5167fae 100644 (file)
@@ -143,10 +143,10 @@ static int st_accel_spi_remove(struct spi_device *spi)
 {
        struct iio_dev *indio_dev = spi_get_drvdata(spi);
 
-       st_sensors_power_disable(indio_dev);
-
        st_accel_common_remove(indio_dev);
 
+       st_sensors_power_disable(indio_dev);
+
        return 0;
 }
 
index 3ef86e1..a8164fe 100644 (file)
@@ -106,10 +106,10 @@ static int st_gyro_i2c_remove(struct i2c_client *client)
 {
        struct iio_dev *indio_dev = i2c_get_clientdata(client);
 
-       st_sensors_power_disable(indio_dev);
-
        st_gyro_common_remove(indio_dev);
 
+       st_sensors_power_disable(indio_dev);
+
        return 0;
 }
 
index 41d8354..9d89168 100644 (file)
@@ -110,10 +110,10 @@ static int st_gyro_spi_remove(struct spi_device *spi)
 {
        struct iio_dev *indio_dev = spi_get_drvdata(spi);
 
-       st_sensors_power_disable(indio_dev);
-
        st_gyro_common_remove(indio_dev);
 
+       st_sensors_power_disable(indio_dev);
+
        return 0;
 }
 
index 2dfe4ee..fa78f0a 100644 (file)
@@ -102,10 +102,10 @@ static int st_magn_i2c_remove(struct i2c_client *client)
 {
        struct iio_dev *indio_dev = i2c_get_clientdata(client);
 
-       st_sensors_power_disable(indio_dev);
-
        st_magn_common_remove(indio_dev);
 
+       st_sensors_power_disable(indio_dev);
+
        return 0;
 }
 
index fba9787..ff43cbf 100644 (file)
@@ -96,10 +96,10 @@ static int st_magn_spi_remove(struct spi_device *spi)
 {
        struct iio_dev *indio_dev = spi_get_drvdata(spi);
 
-       st_sensors_power_disable(indio_dev);
-
        st_magn_common_remove(indio_dev);
 
+       st_sensors_power_disable(indio_dev);
+
        return 0;
 }
 
index 52fa98f..6215de6 100644 (file)
@@ -119,10 +119,10 @@ static int st_press_i2c_remove(struct i2c_client *client)
 {
        struct iio_dev *indio_dev = i2c_get_clientdata(client);
 
-       st_sensors_power_disable(indio_dev);
-
        st_press_common_remove(indio_dev);
 
+       st_sensors_power_disable(indio_dev);
+
        return 0;
 }
 
index ee393df..5001aae 100644 (file)
@@ -102,10 +102,10 @@ static int st_press_spi_remove(struct spi_device *spi)
 {
        struct iio_dev *indio_dev = spi_get_drvdata(spi);
 
-       st_sensors_power_disable(indio_dev);
-
        st_press_common_remove(indio_dev);
 
+       st_sensors_power_disable(indio_dev);
+
        return 0;
 }