media: imx: imx7_mipi_csis: Runtime suspend in .s_stream() error path
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>
Fri, 8 Jan 2021 00:05:19 +0000 (01:05 +0100)
committerMauro Carvalho Chehab <mchehab+huawei@kernel.org>
Tue, 6 Apr 2021 09:39:27 +0000 (11:39 +0200)
If the .s_stream() handler fails after calling pm_runtime_get_sync(),
call pm_runtime_put() in the error path.

While at it add a few blank lines to make the code more readable.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Rui Miguel Silva <rmfrfs@gmail.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
drivers/staging/media/imx/imx7-mipi-csis.c

index bd587e550d9920dada9748c73c7bb2ba9e78a851..c6cd6089696922e911fd2c73c4425d1c6eb5ad0f 100644 (file)
@@ -694,6 +694,7 @@ static int mipi_csis_s_stream(struct v4l2_subdev *mipi_sd, int enable)
                        return ret;
 
                mipi_csis_clear_counters(state);
+
                ret = pm_runtime_get_sync(&state->pdev->dev);
                if (ret < 0) {
                        pm_runtime_put_noidle(&state->pdev->dev);
@@ -701,10 +702,11 @@ static int mipi_csis_s_stream(struct v4l2_subdev *mipi_sd, int enable)
                }
                ret = v4l2_subdev_call(state->src_sd, core, s_power, 1);
                if (ret < 0 && ret != -ENOIOCTLCMD)
-                       return ret;
+                       goto done;
        }
 
        mutex_lock(&state->lock);
+
        if (enable) {
                if (state->flags & ST_SUSPENDED) {
                        ret = -EBUSY;
@@ -732,7 +734,9 @@ static int mipi_csis_s_stream(struct v4l2_subdev *mipi_sd, int enable)
 
 unlock:
        mutex_unlock(&state->lock);
-       if (!enable)
+
+done:
+       if (!enable || ret < 0)
                pm_runtime_put(&state->pdev->dev);
 
        return ret;