clk: rockchip: Fix error return in phase clock registration
authorShawn Lin <shawn.lin@rock-chips.com>
Wed, 21 Mar 2018 02:39:20 +0000 (10:39 +0800)
committerHeiko Stuebner <heiko@sntech.de>
Fri, 23 Mar 2018 08:08:43 +0000 (09:08 +0100)
The newly added clock notifier may return an error code but so far the
error output in the function would only return an error pointer from
registering the clock.

So when the clock notifier fails the clock would be unregistered but the
return would still be the clock pointer which could then not be
dereferenced correctly. So fix the error handling to prevent that.

Fixes: 60cf09e45fbc ("clk: rockchip: Restore the clock phase after the rate was changed")
Signed-off-by: Shawn Lin <shawn.lin@rock-chips.com>
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
drivers/clk/rockchip/clk-mmc-phase.c

index b7b9f2e7d64bad4e2a688319979b518cc362cd70..026a26bb702d9b9f6ab53a6ffaa8864149dfc01b 100644 (file)
@@ -223,8 +223,10 @@ struct clk *rockchip_clk_register_mmc(const char *name,
        mmc_clock->shift = shift;
 
        clk = clk_register(NULL, &mmc_clock->hw);
-       if (IS_ERR(clk))
+       if (IS_ERR(clk)) {
+               ret = PTR_ERR(clk);
                goto err_register;
+       }
 
        mmc_clock->clk_rate_change_nb.notifier_call =
                                &rockchip_mmc_clk_rate_notify;
@@ -237,5 +239,5 @@ err_notifier:
        clk_unregister(clk);
 err_register:
        kfree(mmc_clock);
-       return clk;
+       return ERR_PTR(ret);
 }