usb: cdns3: introduce set_phy_power_on{off} APIs
[linux-2.6-block.git] / drivers / usb / cdns3 / core.c
index 5c1586ec78241cb474cf55bfa381ebf854dea3a4..e56dbb6a898c2c54dc69c1ede5335797b8eac2fc 100644 (file)
@@ -371,6 +371,27 @@ pm_put:
        return ret;
 }
 
+static int set_phy_power_on(struct cdns3 *cdns)
+{
+       int ret;
+
+       ret = phy_power_on(cdns->usb2_phy);
+       if (ret)
+               return ret;
+
+       ret = phy_power_on(cdns->usb3_phy);
+       if (ret)
+               phy_power_off(cdns->usb2_phy);
+
+       return ret;
+}
+
+static void set_phy_power_off(struct cdns3 *cdns)
+{
+       phy_power_off(cdns->usb3_phy);
+       phy_power_off(cdns->usb2_phy);
+}
+
 /**
  * cdns3_probe - probe for cdns3 core device
  * @pdev: Pointer to cdns3 core platform device
@@ -463,14 +484,10 @@ static int cdns3_probe(struct platform_device *pdev)
        if (ret)
                goto err1;
 
-       ret = phy_power_on(cdns->usb2_phy);
+       ret = set_phy_power_on(cdns);
        if (ret)
                goto err2;
 
-       ret = phy_power_on(cdns->usb3_phy);
-       if (ret)
-               goto err3;
-
        sw_desc.set = cdns3_role_set;
        sw_desc.get = cdns3_role_get;
        sw_desc.allow_userspace_control = true;
@@ -482,16 +499,16 @@ static int cdns3_probe(struct platform_device *pdev)
        if (IS_ERR(cdns->role_sw)) {
                ret = PTR_ERR(cdns->role_sw);
                dev_warn(dev, "Unable to register Role Switch\n");
-               goto err4;
+               goto err3;
        }
 
        ret = cdns3_drd_init(cdns);
        if (ret)
-               goto err5;
+               goto err4;
 
        ret = cdns3_core_init_role(cdns);
        if (ret)
-               goto err5;
+               goto err4;
 
        device_set_wakeup_capable(dev, true);
        pm_runtime_set_active(dev);
@@ -508,14 +525,11 @@ static int cdns3_probe(struct platform_device *pdev)
        dev_dbg(dev, "Cadence USB3 core: probe succeed\n");
 
        return 0;
-err5:
+err4:
        cdns3_drd_exit(cdns);
        usb_role_switch_unregister(cdns->role_sw);
-err4:
-       phy_power_off(cdns->usb3_phy);
-
 err3:
-       phy_power_off(cdns->usb2_phy);
+       set_phy_power_off(cdns);
 err2:
        phy_exit(cdns->usb3_phy);
 err1:
@@ -539,8 +553,7 @@ static int cdns3_remove(struct platform_device *pdev)
        pm_runtime_put_noidle(&pdev->dev);
        cdns3_exit_roles(cdns);
        usb_role_switch_unregister(cdns->role_sw);
-       phy_power_off(cdns->usb2_phy);
-       phy_power_off(cdns->usb3_phy);
+       set_phy_power_off(cdns);
        phy_exit(cdns->usb2_phy);
        phy_exit(cdns->usb3_phy);
        return 0;