summaryrefslogtreecommitdiffstats
path: root/drivers/iio/accel/mma9551.c
diff options
context:
space:
mode:
authorMiaoqian Lin <linmq006@gmail.com>2022-01-06 12:23:09 +0100
committerJonathan Cameron <Jonathan.Cameron@huawei.com>2022-01-30 15:50:34 +0100
commit632fe0bb8c5b9c06ec961f575ee42a6fff5eceeb (patch)
treec67d3c5d475815976dc574e155f6672f99b60836 /drivers/iio/accel/mma9551.c
parentiio: addac: ad74413r: correct comparator gpio getters mask usage (diff)
downloadlinux-632fe0bb8c5b9c06ec961f575ee42a6fff5eceeb.tar.xz
linux-632fe0bb8c5b9c06ec961f575ee42a6fff5eceeb.zip
iio: Fix error handling for PM
The pm_runtime_enable will increase power disable depth. If the probe fails, we should use pm_runtime_disable() to balance pm_runtime_enable(). In the PM Runtime docs: Drivers in ->remove() callback should undo the runtime PM changes done in ->probe(). Usually this means calling pm_runtime_disable(), pm_runtime_dont_use_autosuspend() etc. We should do this in error handling. Fix this problem for the following drivers: bmc150, bmg160, kmx61, kxcj-1013, mma9551, mma9553. Fixes: 7d0ead5c3f00 ("iio: Reconcile operation order between iio_register/unregister and pm functions") Signed-off-by: Miaoqian Lin <linmq006@gmail.com> Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Link: https://lore.kernel.org/r/20220106112309.16879-1-linmq006@gmail.com Cc: <Stable@vger.kernel.org> Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Diffstat (limited to 'drivers/iio/accel/mma9551.c')
-rw-r--r--drivers/iio/accel/mma9551.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/drivers/iio/accel/mma9551.c b/drivers/iio/accel/mma9551.c
index 4c359fb05480..c53a3398b14c 100644
--- a/drivers/iio/accel/mma9551.c
+++ b/drivers/iio/accel/mma9551.c
@@ -495,11 +495,14 @@ static int mma9551_probe(struct i2c_client *client,
ret = iio_device_register(indio_dev);
if (ret < 0) {
dev_err(&client->dev, "unable to register iio device\n");
- goto out_poweroff;
+ goto err_pm_cleanup;
}
return 0;
+err_pm_cleanup:
+ pm_runtime_dont_use_autosuspend(&client->dev);
+ pm_runtime_disable(&client->dev);
out_poweroff:
mma9551_set_device_state(client, false);