diff options
author | Linus Walleij <linus.walleij@linaro.org> | 2016-11-11 20:40:06 +0100 |
---|---|---|
committer | Linus Walleij <linus.walleij@linaro.org> | 2017-01-12 00:04:06 +0100 |
commit | 1ff1a398d76b3e3d12d66b4a0e6d5155028a2ba3 (patch) | |
tree | e29184c875d24dc9daa40d5cc96b1a54a170e24f | |
parent | 8963258a2714f5bbc89f567955ebd5dbb884466c (diff) | |
download | linux-stericsson-sensors.tar.gz |
scratch PMsensors
-rw-r--r-- | drivers/iio/accel/st_accel_buffer.c | 9 | ||||
-rw-r--r-- | drivers/iio/accel/st_accel_core.c | 12 | ||||
-rw-r--r-- | drivers/iio/accel/st_accel_i2c.c | 1 | ||||
-rw-r--r-- | drivers/iio/accel/st_accel_spi.c | 1 | ||||
-rw-r--r-- | drivers/iio/common/st_sensors/st_sensors_core.c | 81 | ||||
-rw-r--r-- | drivers/iio/gyro/st_gyro_buffer.c | 9 | ||||
-rw-r--r-- | drivers/iio/gyro/st_gyro_core.c | 12 | ||||
-rw-r--r-- | drivers/iio/gyro/st_gyro_i2c.c | 1 | ||||
-rw-r--r-- | drivers/iio/gyro/st_gyro_spi.c | 1 | ||||
-rw-r--r-- | drivers/iio/magnetometer/st_magn_buffer.c | 9 | ||||
-rw-r--r-- | drivers/iio/magnetometer/st_magn_core.c | 12 | ||||
-rw-r--r-- | drivers/iio/pressure/st_pressure_buffer.c | 9 | ||||
-rw-r--r-- | drivers/iio/pressure/st_pressure_core.c | 11 | ||||
-rw-r--r-- | drivers/iio/pressure/st_pressure_i2c.c | 1 | ||||
-rw-r--r-- | drivers/iio/pressure/st_pressure_spi.c | 1 | ||||
-rw-r--r-- | include/linux/iio/common/st_sensors.h | 10 |
16 files changed, 131 insertions, 49 deletions
diff --git a/drivers/iio/accel/st_accel_buffer.c b/drivers/iio/accel/st_accel_buffer.c index 5501aad9108c..bf9dbe66b11e 100644 --- a/drivers/iio/accel/st_accel_buffer.c +++ b/drivers/iio/accel/st_accel_buffer.c @@ -19,8 +19,8 @@ #include <linux/iio/buffer.h> #include <linux/iio/trigger_consumer.h> #include <linux/iio/triggered_buffer.h> - #include <linux/iio/common/st_sensors.h> +#include <linux/pm_runtime.h> #include "st_accel.h" int st_accel_trig_set_state(struct iio_trigger *trig, bool state) @@ -32,7 +32,9 @@ int st_accel_trig_set_state(struct iio_trigger *trig, bool state) static int st_accel_buffer_preenable(struct iio_dev *indio_dev) { - return st_sensors_power_enable(indio_dev); + pm_runtime_get_sync(indio_dev->dev.parent); + + return 0; } static int st_accel_buffer_postenable(struct iio_dev *indio_dev) @@ -76,7 +78,8 @@ static int st_accel_buffer_predisable(struct iio_dev *indio_dev) if (err < 0) goto st_accel_buffer_predisable_error; - err = st_sensors_power_disable(indio_dev); + pm_runtime_mark_last_busy(indio_dev->dev.parent); + pm_runtime_put_autosuspend(indio_dev->dev.parent); st_accel_buffer_predisable_error: kfree(adata->buffer_data); diff --git a/drivers/iio/accel/st_accel_core.c b/drivers/iio/accel/st_accel_core.c index 1d77a623a5b8..ca5f6927e7a8 100644 --- a/drivers/iio/accel/st_accel_core.c +++ b/drivers/iio/accel/st_accel_core.c @@ -22,7 +22,7 @@ #include <linux/iio/sysfs.h> #include <linux/iio/trigger.h> #include <linux/iio/buffer.h> - +#include <linux/pm_runtime.h> #include <linux/iio/common/st_sensors.h> #include "st_accel.h" @@ -717,7 +717,7 @@ int st_accel_common_probe(struct iio_dev *indio_dev) indio_dev->info = &accel_info; mutex_init(&adata->tb.buf_lock); - err = st_sensors_power_init(indio_dev); + err = st_sensors_pm_init(indio_dev); if (err) return err; @@ -762,7 +762,9 @@ int st_accel_common_probe(struct iio_dev *indio_dev) dev_info(&indio_dev->dev, "registered accelerometer %s\n", indio_dev->name); - return st_sensors_power_disable(indio_dev); + pm_runtime_put(indio_dev->dev.parent); + + return 0; st_accel_device_register_error: if (irq > 0) @@ -770,7 +772,7 @@ st_accel_device_register_error: st_accel_probe_trigger_error: st_accel_deallocate_ring(indio_dev); st_accel_power_off: - st_sensors_power_disable(indio_dev); + st_sensors_pm_disable(indio_dev); return err; } @@ -780,7 +782,7 @@ void st_accel_common_remove(struct iio_dev *indio_dev) { struct st_sensor_data *adata = iio_priv(indio_dev); - st_sensors_power_disable(indio_dev); + st_sensors_pm_disable(indio_dev); iio_device_unregister(indio_dev); if (adata->get_irq_data_ready(indio_dev) > 0) diff --git a/drivers/iio/accel/st_accel_i2c.c b/drivers/iio/accel/st_accel_i2c.c index 8257240fde1a..28e0e6917e32 100644 --- a/drivers/iio/accel/st_accel_i2c.c +++ b/drivers/iio/accel/st_accel_i2c.c @@ -142,6 +142,7 @@ static struct i2c_driver st_accel_driver = { .driver = { .name = "st-accel-i2c", .of_match_table = of_match_ptr(st_accel_of_match), + .pm = &st_sensors_dev_pm_ops, }, .probe = st_accel_i2c_probe, .remove = st_accel_i2c_remove, diff --git a/drivers/iio/accel/st_accel_spi.c b/drivers/iio/accel/st_accel_spi.c index 00d762df936b..dde19efbf0e3 100644 --- a/drivers/iio/accel/st_accel_spi.c +++ b/drivers/iio/accel/st_accel_spi.c @@ -63,6 +63,7 @@ MODULE_DEVICE_TABLE(spi, st_accel_id_table); static struct spi_driver st_accel_driver = { .driver = { .name = "st-accel-spi", + .pm = &st_sensors_dev_pm_ops, }, .probe = st_accel_spi_probe, .remove = st_accel_spi_remove, diff --git a/drivers/iio/common/st_sensors/st_sensors_core.c b/drivers/iio/common/st_sensors/st_sensors_core.c index e1be54ecae4d..122976fe7a3b 100644 --- a/drivers/iio/common/st_sensors/st_sensors_core.c +++ b/drivers/iio/common/st_sensors/st_sensors_core.c @@ -15,9 +15,9 @@ #include <linux/iio/iio.h> #include <linux/regulator/consumer.h> #include <linux/of.h> -#include <asm/unaligned.h> #include <linux/iio/common/st_sensors.h> - +#include <linux/pm_runtime.h> +#include <asm/unaligned.h> #include "st_sensors_core.h" static inline u32 st_sensors_get_unaligned_le24(const u8 *p) @@ -181,11 +181,13 @@ int st_sensors_set_axis_enable(struct iio_dev *indio_dev, u8 axis_enable) } EXPORT_SYMBOL(st_sensors_set_axis_enable); -int st_sensors_power_init(struct iio_dev *indio_dev) +int st_sensors_pm_init(struct iio_dev *indio_dev) { struct st_sensor_data *pdata = iio_priv(indio_dev); int err; + dev_info(&indio_dev->dev, "ENTER %s\n", __func__); + /* Regulators not mandatory, but if requested we should enable them. */ pdata->vdd = devm_regulator_get(indio_dev->dev.parent, "vdd"); if (IS_ERR(pdata->vdd)) { @@ -212,15 +214,30 @@ int st_sensors_power_init(struct iio_dev *indio_dev) goto st_sensors_disable_vdd; } + dev_info(&indio_dev->dev, "RUNTIME ENABLE %s\n", __func__); + + /* Enable runtime PM */ + pm_runtime_get_noresume(indio_dev->dev.parent); + pm_runtime_set_active(indio_dev->dev.parent); + pm_runtime_enable(indio_dev->dev.parent); + /* + * Set autosuspend to two orders of magnitude larger than the + * start-up time. + */ + pm_runtime_set_autosuspend_delay(indio_dev->dev.parent, + pdata->sensor_settings->bootime * 1000 * 10); + pm_runtime_use_autosuspend(indio_dev->dev.parent); + /* The individual driver will call pm_runtime_put() */ + return 0; st_sensors_disable_vdd: regulator_disable(pdata->vdd); return err; } -EXPORT_SYMBOL(st_sensors_power_init); +EXPORT_SYMBOL(st_sensors_pm_init); -int st_sensors_power_enable(struct iio_dev *indio_dev) +static int st_sensors_power_enable(struct iio_dev *indio_dev) { struct st_sensor_data *sdata = iio_priv(indio_dev); bool odr_match = false; @@ -228,6 +245,8 @@ int st_sensors_power_enable(struct iio_dev *indio_dev) u8 tmp; int err; + dev_info(&indio_dev->dev, "%s\n", __func__); + /* First turn on the regulators */ err = regulator_enable(sdata->vdd); if (err) { @@ -325,13 +344,14 @@ int st_sensors_power_enable(struct iio_dev *indio_dev) return 0; } -EXPORT_SYMBOL(st_sensors_power_enable); -int st_sensors_power_disable(struct iio_dev *indio_dev) +static int st_sensors_power_disable(struct iio_dev *indio_dev) { struct st_sensor_data *sdata = iio_priv(indio_dev); int err; + dev_info(&indio_dev->dev, "%s\n", __func__); + err = st_sensors_write_data_with_mask(indio_dev, sdata->sensor_settings->pw.addr, sdata->sensor_settings->pw.mask, @@ -347,7 +367,41 @@ int st_sensors_power_disable(struct iio_dev *indio_dev) return 0; } -EXPORT_SYMBOL(st_sensors_power_disable); + +void st_sensors_pm_disable(struct iio_dev *indio_dev) +{ + pm_runtime_get_sync(indio_dev->dev.parent); + pm_runtime_put_noidle(indio_dev->dev.parent); + pm_runtime_disable(indio_dev->dev.parent); + st_sensors_power_disable(indio_dev); +} +EXPORT_SYMBOL(st_sensors_pm_disable); + +#ifdef CONFIG_PM +static int st_sensors_runtime_suspend(struct device *dev) +{ + /* This is the I2C clientdata or SPI drvdata */ + struct iio_dev *indio_dev = dev_get_drvdata(dev); + + return st_sensors_power_disable(indio_dev); +} + +static int st_sensors_runtime_resume(struct device *dev) +{ + /* This is the I2C clientdata or SPI drvdata */ + struct iio_dev *indio_dev = dev_get_drvdata(dev); + + return st_sensors_power_enable(indio_dev); +} +#endif /* CONFIG_PM */ + +const struct dev_pm_ops st_sensors_dev_pm_ops = { + SET_SYSTEM_SLEEP_PM_OPS(pm_runtime_force_suspend, + pm_runtime_force_resume) + SET_RUNTIME_PM_OPS(st_sensors_runtime_suspend, + st_sensors_runtime_resume, NULL) +}; +EXPORT_SYMBOL(st_sensors_dev_pm_ops); static int st_sensors_set_drdy_int_pin(struct iio_dev *indio_dev, struct st_sensors_platform_data *pdata) @@ -545,25 +599,24 @@ int st_sensors_read_info_raw(struct iio_dev *indio_dev, { int err; + pm_runtime_get_sync(indio_dev->dev.parent); mutex_lock(&indio_dev->mlock); + if (indio_dev->currentmode == INDIO_BUFFER_TRIGGERED) { err = -EBUSY; goto out; } else { - err = st_sensors_power_enable(indio_dev); - if (err) - goto out; - err = st_sensors_read_axis_data(indio_dev, ch, val); if (err < 0) goto out; *val = *val >> ch->scan_type.shift; - - err = st_sensors_power_disable(indio_dev); } + out: mutex_unlock(&indio_dev->mlock); + pm_runtime_mark_last_busy(indio_dev->dev.parent); + pm_runtime_put_autosuspend(indio_dev->dev.parent); return err; } diff --git a/drivers/iio/gyro/st_gyro_buffer.c b/drivers/iio/gyro/st_gyro_buffer.c index a8611ea1ffc4..e6e01e9df551 100644 --- a/drivers/iio/gyro/st_gyro_buffer.c +++ b/drivers/iio/gyro/st_gyro_buffer.c @@ -19,8 +19,8 @@ #include <linux/iio/buffer.h> #include <linux/iio/trigger_consumer.h> #include <linux/iio/triggered_buffer.h> - #include <linux/iio/common/st_sensors.h> +#include <linux/pm_runtime.h> #include "st_gyro.h" int st_gyro_trig_set_state(struct iio_trigger *trig, bool state) @@ -32,7 +32,9 @@ int st_gyro_trig_set_state(struct iio_trigger *trig, bool state) static int st_gyro_buffer_preenable(struct iio_dev *indio_dev) { - return st_sensors_power_enable(indio_dev); + pm_runtime_get_sync(indio_dev->dev.parent); + + return 0; } static int st_gyro_buffer_postenable(struct iio_dev *indio_dev) @@ -76,7 +78,8 @@ static int st_gyro_buffer_predisable(struct iio_dev *indio_dev) if (err < 0) goto st_gyro_buffer_predisable_error; - err = st_sensors_power_disable(indio_dev); + pm_runtime_mark_last_busy(indio_dev->dev.parent); + pm_runtime_put_autosuspend(indio_dev->dev.parent); st_gyro_buffer_predisable_error: kfree(gdata->buffer_data); diff --git a/drivers/iio/gyro/st_gyro_core.c b/drivers/iio/gyro/st_gyro_core.c index 56764d6fbb2c..906e37b399da 100644 --- a/drivers/iio/gyro/st_gyro_core.c +++ b/drivers/iio/gyro/st_gyro_core.c @@ -23,7 +23,7 @@ #include <linux/iio/sysfs.h> #include <linux/iio/trigger.h> #include <linux/iio/buffer.h> - +#include <linux/pm_runtime.h> #include <linux/iio/common/st_sensors.h> #include "st_gyro.h" @@ -353,7 +353,7 @@ int st_gyro_common_probe(struct iio_dev *indio_dev) indio_dev->info = &gyro_info; mutex_init(&gdata->tb.buf_lock); - err = st_sensors_power_init(indio_dev); + err = st_sensors_pm_init(indio_dev); if (err) return err; @@ -395,7 +395,9 @@ int st_gyro_common_probe(struct iio_dev *indio_dev) dev_info(&indio_dev->dev, "registered gyroscope %s\n", indio_dev->name); - return st_sensors_power_disable(indio_dev); + pm_runtime_put(indio_dev->dev.parent); + + return 0; st_gyro_device_register_error: if (irq > 0) @@ -403,7 +405,7 @@ st_gyro_device_register_error: st_gyro_probe_trigger_error: st_gyro_deallocate_ring(indio_dev); st_gyro_power_off: - st_sensors_power_disable(indio_dev); + st_sensors_pm_disable(indio_dev); return err; } @@ -413,7 +415,7 @@ void st_gyro_common_remove(struct iio_dev *indio_dev) { struct st_sensor_data *gdata = iio_priv(indio_dev); - st_sensors_power_disable(indio_dev); + st_sensors_pm_disable(indio_dev); iio_device_unregister(indio_dev); if (gdata->get_irq_data_ready(indio_dev) > 0) diff --git a/drivers/iio/gyro/st_gyro_i2c.c b/drivers/iio/gyro/st_gyro_i2c.c index 2fac5c63c8b3..269dd10513f6 100644 --- a/drivers/iio/gyro/st_gyro_i2c.c +++ b/drivers/iio/gyro/st_gyro_i2c.c @@ -100,6 +100,7 @@ static struct i2c_driver st_gyro_driver = { .driver = { .name = "st-gyro-i2c", .of_match_table = of_match_ptr(st_gyro_of_match), + .pm = &st_sensors_dev_pm_ops, }, .probe = st_gyro_i2c_probe, .remove = st_gyro_i2c_remove, diff --git a/drivers/iio/gyro/st_gyro_spi.c b/drivers/iio/gyro/st_gyro_spi.c index ce73c55b6b2c..bae077825e6a 100644 --- a/drivers/iio/gyro/st_gyro_spi.c +++ b/drivers/iio/gyro/st_gyro_spi.c @@ -57,6 +57,7 @@ MODULE_DEVICE_TABLE(spi, st_gyro_id_table); static struct spi_driver st_gyro_driver = { .driver = { .name = "st-gyro-spi", + .pm = &st_sensors_dev_pm_ops, }, .probe = st_gyro_spi_probe, .remove = st_gyro_spi_remove, diff --git a/drivers/iio/magnetometer/st_magn_buffer.c b/drivers/iio/magnetometer/st_magn_buffer.c index 29f18cd506ee..618c67d5ed31 100644 --- a/drivers/iio/magnetometer/st_magn_buffer.c +++ b/drivers/iio/magnetometer/st_magn_buffer.c @@ -19,8 +19,8 @@ #include <linux/iio/buffer.h> #include <linux/iio/trigger_consumer.h> #include <linux/iio/triggered_buffer.h> - #include <linux/iio/common/st_sensors.h> +#include <linux/pm_runtime.h> #include "st_magn.h" int st_magn_trig_set_state(struct iio_trigger *trig, bool state) @@ -32,7 +32,9 @@ int st_magn_trig_set_state(struct iio_trigger *trig, bool state) static int st_magn_buffer_preenable(struct iio_dev *indio_dev) { - return st_sensors_power_enable(indio_dev); + pm_runtime_get_sync(indio_dev->dev.parent); + + return 0; } static int st_magn_buffer_postenable(struct iio_dev *indio_dev) @@ -67,7 +69,8 @@ static int st_magn_buffer_predisable(struct iio_dev *indio_dev) if (err < 0) goto st_magn_buffer_predisable_error; - err = st_sensors_power_disable(indio_dev); + pm_runtime_mark_last_busy(indio_dev->dev.parent); + pm_runtime_put_autosuspend(indio_dev->dev.parent); st_magn_buffer_predisable_error: kfree(mdata->buffer_data); diff --git a/drivers/iio/magnetometer/st_magn_core.c b/drivers/iio/magnetometer/st_magn_core.c index 2f09286bcf57..e6d9d1e4b405 100644 --- a/drivers/iio/magnetometer/st_magn_core.c +++ b/drivers/iio/magnetometer/st_magn_core.c @@ -22,7 +22,7 @@ #include <linux/iio/iio.h> #include <linux/iio/sysfs.h> #include <linux/iio/buffer.h> - +#include <linux/pm_runtime.h> #include <linux/iio/common/st_sensors.h> #include "st_magn.h" @@ -463,7 +463,7 @@ int st_magn_common_probe(struct iio_dev *indio_dev) indio_dev->info = &magn_info; mutex_init(&mdata->tb.buf_lock); - err = st_sensors_power_init(indio_dev); + err = st_sensors_pm_init(indio_dev); if (err) return err; @@ -504,7 +504,9 @@ int st_magn_common_probe(struct iio_dev *indio_dev) dev_info(&indio_dev->dev, "registered magnetometer %s\n", indio_dev->name); - return st_sensors_power_disable(indio_dev); + pm_runtime_put(indio_dev->dev.parent); + + return 0; st_magn_device_register_error: if (irq > 0) @@ -512,7 +514,7 @@ st_magn_device_register_error: st_magn_probe_trigger_error: st_magn_deallocate_ring(indio_dev); st_magn_power_off: - st_sensors_power_disable(indio_dev); + st_sensors_pm_disable(indio_dev); return err; } @@ -522,7 +524,7 @@ void st_magn_common_remove(struct iio_dev *indio_dev) { struct st_sensor_data *mdata = iio_priv(indio_dev); - st_sensors_power_disable(indio_dev); + st_sensors_pm_disable(indio_dev); iio_device_unregister(indio_dev); if (mdata->get_irq_data_ready(indio_dev) > 0) diff --git a/drivers/iio/pressure/st_pressure_buffer.c b/drivers/iio/pressure/st_pressure_buffer.c index 4013b0da7c90..ece0e9a4b734 100644 --- a/drivers/iio/pressure/st_pressure_buffer.c +++ b/drivers/iio/pressure/st_pressure_buffer.c @@ -19,8 +19,8 @@ #include <linux/iio/buffer.h> #include <linux/iio/trigger_consumer.h> #include <linux/iio/triggered_buffer.h> - #include <linux/iio/common/st_sensors.h> +#include <linux/pm_runtime.h> #include "st_pressure.h" int st_press_trig_set_state(struct iio_trigger *trig, bool state) @@ -32,7 +32,9 @@ int st_press_trig_set_state(struct iio_trigger *trig, bool state) static int st_press_buffer_preenable(struct iio_dev *indio_dev) { - return st_sensors_power_enable(indio_dev); + pm_runtime_get_sync(indio_dev->dev.parent); + + return 0; } static int st_press_buffer_postenable(struct iio_dev *indio_dev) @@ -67,7 +69,8 @@ static int st_press_buffer_predisable(struct iio_dev *indio_dev) if (err < 0) goto st_press_buffer_predisable_error; - err = st_sensors_power_disable(indio_dev); + pm_runtime_mark_last_busy(indio_dev->dev.parent); + pm_runtime_put_autosuspend(indio_dev->dev.parent); st_press_buffer_predisable_error: kfree(press_data->buffer_data); diff --git a/drivers/iio/pressure/st_pressure_core.c b/drivers/iio/pressure/st_pressure_core.c index 84de05d03764..246476253386 100644 --- a/drivers/iio/pressure/st_pressure_core.c +++ b/drivers/iio/pressure/st_pressure_core.c @@ -23,6 +23,7 @@ #include <linux/iio/sysfs.h> #include <linux/iio/trigger.h> #include <linux/iio/buffer.h> +#include <linux/pm_runtime.h> #include <asm/unaligned.h> #include <linux/iio/common/st_sensors.h> @@ -572,7 +573,7 @@ int st_press_common_probe(struct iio_dev *indio_dev) indio_dev->info = &press_info; mutex_init(&press_data->tb.buf_lock); - err = st_sensors_power_init(indio_dev); + err = st_sensors_pm_init(indio_dev); if (err) return err; @@ -627,7 +628,9 @@ int st_press_common_probe(struct iio_dev *indio_dev) dev_info(&indio_dev->dev, "registered pressure sensor %s\n", indio_dev->name); - return st_sensors_power_disable(indio_dev); + pm_runtime_put(indio_dev->dev.parent); + + return 0; st_press_device_register_error: if (irq > 0) @@ -635,7 +638,7 @@ st_press_device_register_error: st_press_probe_trigger_error: st_press_deallocate_ring(indio_dev); st_press_power_off: - st_sensors_power_disable(indio_dev); + st_sensors_pm_disable(indio_dev); return err; } @@ -645,7 +648,7 @@ void st_press_common_remove(struct iio_dev *indio_dev) { struct st_sensor_data *press_data = iio_priv(indio_dev); - st_sensors_power_disable(indio_dev); + st_sensors_pm_disable(indio_dev); iio_device_unregister(indio_dev); if (press_data->get_irq_data_ready(indio_dev) > 0) diff --git a/drivers/iio/pressure/st_pressure_i2c.c b/drivers/iio/pressure/st_pressure_i2c.c index 4d78e39c8a2f..47da8509d5b1 100644 --- a/drivers/iio/pressure/st_pressure_i2c.c +++ b/drivers/iio/pressure/st_pressure_i2c.c @@ -79,6 +79,7 @@ static struct i2c_driver st_press_driver = { .driver = { .name = "st-press-i2c", .of_match_table = of_match_ptr(st_press_of_match), + .pm = &st_sensors_dev_pm_ops, }, .probe = st_press_i2c_probe, .remove = st_press_i2c_remove, diff --git a/drivers/iio/pressure/st_pressure_spi.c b/drivers/iio/pressure/st_pressure_spi.c index d97dcddae064..1552cefd28fb 100644 --- a/drivers/iio/pressure/st_pressure_spi.c +++ b/drivers/iio/pressure/st_pressure_spi.c @@ -53,6 +53,7 @@ MODULE_DEVICE_TABLE(spi, st_press_id_table); static struct spi_driver st_press_driver = { .driver = { .name = "st-press-spi", + .pm = &st_sensors_dev_pm_ops, }, .probe = st_press_spi_probe, .remove = st_press_spi_remove, diff --git a/include/linux/iio/common/st_sensors.h b/include/linux/iio/common/st_sensors.h index 2df38a0f2e9d..6a044f97bb13 100644 --- a/include/linux/iio/common/st_sensors.h +++ b/include/linux/iio/common/st_sensors.h @@ -17,6 +17,7 @@ #include <linux/iio/trigger.h> #include <linux/bitops.h> #include <linux/regulator/consumer.h> +#include <linux/device.h> #include <linux/platform_data/st_sensors_pdata.h> @@ -268,6 +269,9 @@ struct st_sensor_data { s64 hw_timestamp; }; +/* PM ops */ +extern const struct dev_pm_ops st_sensors_dev_pm_ops; + #ifdef CONFIG_IIO_BUFFER irqreturn_t st_sensors_trigger_handler(int irq, void *p); #endif @@ -297,11 +301,9 @@ int st_sensors_init_sensor(struct iio_dev *indio_dev, int st_sensors_set_axis_enable(struct iio_dev *indio_dev, u8 axis_enable); -int st_sensors_power_init(struct iio_dev *indio_dev); - -int st_sensors_power_enable(struct iio_dev *indio_dev); +int st_sensors_pm_init(struct iio_dev *indio_dev); -int st_sensors_power_disable(struct iio_dev *indio_dev); +void st_sensors_pm_disable(struct iio_dev *indio_dev); int st_sensors_debugfs_reg_access(struct iio_dev *indio_dev, unsigned reg, unsigned writeval, |