phy: samsung_usb2: Fixup samsung_usb2_phy_power_on/off paths
Subsystems (2)
PATCH 1/1 phy: samsung_usb2: Fixup samsung_usb2_phy_power_on/off paths
Ensure we have balanced clk_prepare_enable/clk_disable_unprepare calls if .power_on or .power_off callbacks return error.
Signed-off-by Axel Lin <[email protected]>
--- drivers/phy/phy-samsung-usb2.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-)
drivers/phy/phy-samsung-usb2.c +8 -2
@@ -37,10 +37,14 @@ static int samsung_usb2_phy_power_on(struct phy *phy)spin_lock (&drv->lock); ret = inst->cfg->power_on (inst);spin_unlock (&drv->lock); +if (ret) + goto err_power_on; }return 0 ; +err_power_on: +clk_disable_unprepare (drv->ref_clk); err_instance_clk:clk_disable_unprepare (drv->clk); err_main_clk:
@@ -51,7 +55,7 @@ static int samsung_usb2_phy_power_off(struct phy *phy) {struct samsung_usb2_phy_instance *inst =phy_get_drvdata (phy);struct samsung_usb2_phy_driver *drv = inst->drv; -int ret =0 ; +int ret;dev_dbg (drv->dev,"Request to power_off \"%s\" usb phy\n" , inst->cfg->label);
@@ -59,10 +63,12 @@ static int samsung_usb2_phy_power_off(struct phy *phy)spin_lock (&drv->lock); ret = inst->cfg->power_off (inst);spin_unlock (&drv->lock); +if (ret) +return ret; }clk_disable_unprepare (drv->ref_clk);clk_disable_unprepare (drv->clk); -return ret; +return 0 ; }static struct phy_ops samsung_usb2_phy_ops = {
Signature · 1 line
1.9.1