提交 0a2bf920 编写于 作者: J Jean-Baptiste Maneyrol 提交者: Jonathan Cameron

iio: imu: inv_mpu6050: fix suspend/resume with runtime power

Suspend/resume were not working correctly with pm runtime.
Now suspend check if the chip is already suspended, and
resume put runtime pm in the correct state.

Issues seen prior to this were:

When entering suspend, there was an error in logs because we
were disabling vddio regulator although it was already disabled.
And when resuming, the chip was pull back to full power but the
pm_runtime state was not updated. So it was believing it was
still suspended.

Fixes: 4599cac8 ("iio: imu: inv_mpu6050: use runtime pm with autosuspend")
Signed-off-by: NJean-Baptiste Maneyrol <jmaneyrol@invensense.com>
Signed-off-by: NJonathan Cameron <Jonathan.Cameron@huawei.com>
上级 e450e07c
...@@ -1617,6 +1617,10 @@ static int __maybe_unused inv_mpu_resume(struct device *dev) ...@@ -1617,6 +1617,10 @@ static int __maybe_unused inv_mpu_resume(struct device *dev)
if (result) if (result)
goto out_unlock; goto out_unlock;
pm_runtime_disable(dev);
pm_runtime_set_active(dev);
pm_runtime_enable(dev);
result = inv_mpu6050_switch_engine(st, true, st->suspended_sensors); result = inv_mpu6050_switch_engine(st, true, st->suspended_sensors);
if (result) if (result)
goto out_unlock; goto out_unlock;
...@@ -1638,13 +1642,18 @@ static int __maybe_unused inv_mpu_suspend(struct device *dev) ...@@ -1638,13 +1642,18 @@ static int __maybe_unused inv_mpu_suspend(struct device *dev)
mutex_lock(&st->lock); mutex_lock(&st->lock);
st->suspended_sensors = 0;
if (pm_runtime_suspended(dev)) {
result = 0;
goto out_unlock;
}
if (iio_buffer_enabled(indio_dev)) { if (iio_buffer_enabled(indio_dev)) {
result = inv_mpu6050_prepare_fifo(st, false); result = inv_mpu6050_prepare_fifo(st, false);
if (result) if (result)
goto out_unlock; goto out_unlock;
} }
st->suspended_sensors = 0;
if (st->chip_config.accl_en) if (st->chip_config.accl_en)
st->suspended_sensors |= INV_MPU6050_SENSOR_ACCL; st->suspended_sensors |= INV_MPU6050_SENSOR_ACCL;
if (st->chip_config.gyro_en) if (st->chip_config.gyro_en)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册