mfd: arizona: Correct calling of runtime_put_sync
authorSapthagiri Baratam <sapthagiri.baratam@cirrus.com>
Tue, 21 Aug 2018 14:22:44 +0000 (19:52 +0530)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sun, 1 Dec 2019 08:13:45 +0000 (09:13 +0100)
[ Upstream commit 6b269a41a4520f7eb639e61a45ebbb9c9267d5e0 ]

Don't call runtime_put_sync when clk32k_ref is ARIZONA_32KZ_MCLK2
as there is no corresponding runtime_get_sync call.

MCLK1 is not in the AoD power domain so if it is used as 32kHz clock
source we need to hold a runtime PM reference to keep the device from
going into low power mode.

Fixes: cdd8da8cc66b ("mfd: arizona: Add gating of external MCLKn clocks")
Signed-off-by: Sapthagiri Baratam <sapthagiri.baratam@cirrus.com>
Acked-by: Charles Keepax <ckeepax@opensource.cirrus.com>
Signed-off-by: Lee Jones <lee.jones@linaro.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/mfd/arizona-core.c

index d8e3184bd27ca38c2a2f6a2961ae44c95f05bbdb..ad8a5296c50ba4ba9d52337f3d744257e07eab00 100644 (file)
@@ -52,8 +52,10 @@ int arizona_clk32k_enable(struct arizona *arizona)
                        if (ret != 0)
                                goto err_ref;
                        ret = clk_prepare_enable(arizona->mclk[ARIZONA_MCLK1]);
-                       if (ret != 0)
-                               goto err_pm;
+                       if (ret != 0) {
+                               pm_runtime_put_sync(arizona->dev);
+                               goto err_ref;
+                       }
                        break;
                case ARIZONA_32KZ_MCLK2:
                        ret = clk_prepare_enable(arizona->mclk[ARIZONA_MCLK2]);
@@ -67,8 +69,6 @@ int arizona_clk32k_enable(struct arizona *arizona)
                                         ARIZONA_CLK_32K_ENA);
        }
 
-err_pm:
-       pm_runtime_put_sync(arizona->dev);
 err_ref:
        if (ret != 0)
                arizona->clk32k_ref--;