]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
media: stm32: csi: add missing pm_runtime_put on error
authorAlain Volmat <alain.volmat@foss.st.com>
Mon, 13 Jan 2025 08:57:53 +0000 (09:57 +0100)
committerHans Verkuil <hverkuil@xs4all.nl>
Sat, 15 Feb 2025 14:22:48 +0000 (15:22 +0100)
Within the stm32_csi_start function, pm_runtime_put should
be called upon error following pm_runtime_get_sync.
Rework the function error handling by putting a label in
order to have common error handling for all calls requiring
pm_runtime_put.

Signed-off-by: Alain Volmat <alain.volmat@foss.st.com>
Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
drivers/media/platform/st/stm32/stm32-csi.c

index 48941aae8c9b8d00bd6c3486b8eee15e13e9f3b3..e2f63bb47d3319f5b4a621e67fa603fbf7027bd7 100644 (file)
@@ -497,21 +497,19 @@ static int stm32_csi_start(struct stm32_csi_dev *csidev,
 
        ret = pm_runtime_get_sync(csidev->dev);
        if (ret < 0)
-               return ret;
+               goto error_put;
 
        /* Retrieve CSI2PHY clock rate to compute CCFR value */
        phy_clk_frate = clk_get_rate(csidev->clks[STM32_CSI_CLK_CSI2PHY].clk);
        if (!phy_clk_frate) {
-               pm_runtime_put(csidev->dev);
                dev_err(csidev->dev, "CSI2PHY clock rate invalid (0)\n");
-               return ret;
+               ret = -EINVAL;
+               goto error_put;
        }
 
        ret = stm32_csi_setup_lane_merger(csidev);
-       if (ret) {
-               pm_runtime_put(csidev->dev);
-               return ret;
-       }
+       if (ret)
+               goto error_put;
 
        /* Enable the CSI */
        writel_relaxed(STM32_CSI_CR_CSIEN, csidev->base + STM32_CSI_CR);
@@ -567,6 +565,10 @@ static int stm32_csi_start(struct stm32_csi_dev *csidev,
        writel_relaxed(0, csidev->base + STM32_CSI_PMCR);
 
        return ret;
+
+error_put:
+       pm_runtime_put(csidev->dev);
+       return ret;
 }
 
 static void stm32_csi_stop(struct stm32_csi_dev *csidev)