]> git.ipfire.org Git - thirdparty/kernel/stable.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)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 29 May 2025 09:13:21 +0000 (11:13 +0200)
[ Upstream commit f7cd9c94959e7a5b8c4eca33e20bd6ba1b048a64 ]

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>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/media/platform/st/stm32/stm32-csi.c

index a4f8db608cedd105bc151d14fa8af6714bbe3107..0c776e4a7ce83d012789f3d8bc2275eb5d8433ed 100644 (file)
@@ -499,21 +499,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);
@@ -569,6 +567,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)