iio: st_sensors: remove reference to parent device object on st_sensor_data
authorAlexandru Ardelean <aardelean@deviqon.com>
Mon, 23 Aug 2021 11:22:04 +0000 (14:22 +0300)
committerJonathan Cameron <Jonathan.Cameron@huawei.com>
Tue, 14 Sep 2021 11:00:32 +0000 (12:00 +0100)
The idea behind it, is that all devm_ calls in ST sensors are bound to the
parent device object.

However, the reference to that object is kept on both the st_sensor_data
struct and the IIO object parent (indio_dev->dev.parent).

This change only adds a bit consistency and uses the reference stored on
indio_dev->dev.parent, to enforce the assumption that all ST sensors' devm_
calls are bound to the same reference as the one store on st_sensor_data.

Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
Signed-off-by: Alexandru Ardelean <aardelean@deviqon.com>
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
Link: https://lore.kernel.org/r/20210823112204.243255-6-aardelean@deviqon.com
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
drivers/iio/accel/st_accel_core.c
drivers/iio/common/st_sensors/st_sensors_i2c.c
drivers/iio/common/st_sensors/st_sensors_spi.c
drivers/iio/common/st_sensors/st_sensors_trigger.c
drivers/iio/gyro/st_gyro_core.c
drivers/iio/imu/st_lsm9ds0/st_lsm9ds0_core.c
drivers/iio/magnetometer/st_magn_core.c
drivers/iio/pressure/st_pressure_core.c
include/linux/iio/common/st_sensors.h

index 01695ab..31ea19d 100644 (file)
@@ -1210,7 +1210,7 @@ static int apply_acpi_orientation(struct iio_dev *indio_dev)
        };
 
 
-       adev = ACPI_COMPANION(adata->dev);
+       adev = ACPI_COMPANION(indio_dev->dev.parent);
        if (!adev)
                return 0;
 
@@ -1334,8 +1334,8 @@ EXPORT_SYMBOL(st_accel_get_settings);
 int st_accel_common_probe(struct iio_dev *indio_dev)
 {
        struct st_sensor_data *adata = iio_priv(indio_dev);
-       struct st_sensors_platform_data *pdata = dev_get_platdata(adata->dev);
        struct device *parent = indio_dev->dev.parent;
+       struct st_sensors_platform_data *pdata = dev_get_platdata(parent);
        int err;
 
        indio_dev->modes = INDIO_DIRECT_MODE;
@@ -1355,7 +1355,7 @@ int st_accel_common_probe(struct iio_dev *indio_dev)
         */
        err = apply_acpi_orientation(indio_dev);
        if (err) {
-               err = iio_read_mount_matrix(adata->dev, &adata->mount_matrix);
+               err = iio_read_mount_matrix(parent, &adata->mount_matrix);
                if (err)
                        return err;
        }
index b3ff887..18bd3c3 100644 (file)
@@ -57,7 +57,6 @@ int st_sensors_i2c_configure(struct iio_dev *indio_dev,
 
        indio_dev->name = client->name;
 
-       sdata->dev = &client->dev;
        sdata->irq = client->irq;
 
        return 0;
index 0d1d66c..7c60050 100644 (file)
@@ -109,7 +109,6 @@ int st_sensors_spi_configure(struct iio_dev *indio_dev,
 
        indio_dev->name = spi->modalias;
 
-       sdata->dev = &spi->dev;
        sdata->irq = spi->irq;
 
        return 0;
index d022157..392d744 100644 (file)
@@ -42,7 +42,8 @@ static bool st_sensors_new_samples_available(struct iio_dev *indio_dev,
                          sdata->sensor_settings->drdy_irq.stat_drdy.addr,
                          &status);
        if (ret < 0) {
-               dev_err(sdata->dev, "error checking samples available\n");
+               dev_err(indio_dev->dev.parent,
+                       "error checking samples available\n");
                return false;
        }
 
@@ -87,7 +88,7 @@ static irqreturn_t st_sensors_irq_thread(int irq, void *p)
            st_sensors_new_samples_available(indio_dev, sdata)) {
                iio_trigger_poll_chained(p);
        } else {
-               dev_dbg(sdata->dev, "spurious IRQ\n");
+               dev_dbg(indio_dev->dev.parent, "spurious IRQ\n");
                return IRQ_NONE;
        }
 
@@ -107,7 +108,8 @@ static irqreturn_t st_sensors_irq_thread(int irq, void *p)
         */
        while (sdata->hw_irq_trigger &&
               st_sensors_new_samples_available(indio_dev, sdata)) {
-               dev_dbg(sdata->dev, "more samples came in during polling\n");
+               dev_dbg(indio_dev->dev.parent,
+                       "more samples came in during polling\n");
                sdata->hw_timestamp = iio_get_time_ns(indio_dev);
                iio_trigger_poll_chained(p);
        }
index 3609082..201050b 100644 (file)
@@ -492,7 +492,7 @@ int st_gyro_common_probe(struct iio_dev *indio_dev)
        indio_dev->channels = gdata->sensor_settings->ch;
        indio_dev->num_channels = ST_SENSORS_NUMBER_ALL_CHANNELS;
 
-       err = iio_read_mount_matrix(gdata->dev, &gdata->mount_matrix);
+       err = iio_read_mount_matrix(parent, &gdata->mount_matrix);
        if (err)
                return err;
 
index d276f66..b3a43a3 100644 (file)
@@ -90,7 +90,6 @@ static int st_lsm9ds0_probe_accel(struct st_lsm9ds0 *lsm9ds0, struct regmap *reg
 
        data = iio_priv(lsm9ds0->accel);
        data->sensor_settings = (struct st_sensor_settings *)settings;
-       data->dev = dev;
        data->irq = lsm9ds0->irq;
        data->regmap = regmap;
        data->vdd = lsm9ds0->vdd;
@@ -119,7 +118,6 @@ static int st_lsm9ds0_probe_magn(struct st_lsm9ds0 *lsm9ds0, struct regmap *regm
 
        data = iio_priv(lsm9ds0->magn);
        data->sensor_settings = (struct st_sensor_settings *)settings;
-       data->dev = dev;
        data->irq = lsm9ds0->irq;
        data->regmap = regmap;
        data->vdd = lsm9ds0->vdd;
index 1458906..0806a1e 100644 (file)
@@ -611,8 +611,8 @@ EXPORT_SYMBOL(st_magn_get_settings);
 int st_magn_common_probe(struct iio_dev *indio_dev)
 {
        struct st_sensor_data *mdata = iio_priv(indio_dev);
-       struct st_sensors_platform_data *pdata = dev_get_platdata(mdata->dev);
        struct device *parent = indio_dev->dev.parent;
+       struct st_sensors_platform_data *pdata = dev_get_platdata(parent);
        int err;
 
        indio_dev->modes = INDIO_DIRECT_MODE;
@@ -626,7 +626,7 @@ int st_magn_common_probe(struct iio_dev *indio_dev)
        indio_dev->channels = mdata->sensor_settings->ch;
        indio_dev->num_channels = ST_SENSORS_NUMBER_ALL_CHANNELS;
 
-       err = iio_read_mount_matrix(mdata->dev, &mdata->mount_matrix);
+       err = iio_read_mount_matrix(parent, &mdata->mount_matrix);
        if (err)
                return err;
 
index cebcc1d..26a1ee4 100644 (file)
@@ -677,8 +677,8 @@ EXPORT_SYMBOL(st_press_get_settings);
 int st_press_common_probe(struct iio_dev *indio_dev)
 {
        struct st_sensor_data *press_data = iio_priv(indio_dev);
-       struct st_sensors_platform_data *pdata = dev_get_platdata(press_data->dev);
        struct device *parent = indio_dev->dev.parent;
+       struct st_sensors_platform_data *pdata = dev_get_platdata(parent);
        int err;
 
        indio_dev->modes = INDIO_DIRECT_MODE;
index d17ae1e..22f6784 100644 (file)
@@ -220,7 +220,6 @@ struct st_sensor_settings {
 
 /**
  * struct st_sensor_data - ST sensor device status
- * @dev: Pointer to instance of struct device (I2C or SPI).
  * @trig: The trigger in use by the core driver.
  * @mount_matrix: The mounting matrix of the sensor.
  * @sensor_settings: Pointer to the specific sensor settings in use.
@@ -240,7 +239,6 @@ struct st_sensor_settings {
  * @buffer_data: Data used by buffer part.
  */
 struct st_sensor_data {
-       struct device *dev;
        struct iio_trigger *trig;
        struct iio_mount_matrix mount_matrix;
        struct st_sensor_settings *sensor_settings;