usb: cdns3: Add PHY mode switch to usb2 PHY
authorMinda Chen <minda.chen@starfivetech.com>
Fri, 21 Jul 2023 09:59:23 +0000 (17:59 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 25 Jul 2023 16:22:36 +0000 (18:22 +0200)
cdns3 just set PHY mode switch for USB3.0 PHY.
If USB 2.0 PHY contains PHY mode switch setting,
USB 2.0 PHY mode function can't be called.
So add PHY mode switch function for USB 2.0 PHY.

Signed-off-by: Minda Chen <minda.chen@starfivetech.com>
Reviewed-by: Roger Quadros <rogerq@kernel.org>
Link: https://lore.kernel.org/r/20230721095923.20445-1-minda.chen@starfivetech.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/cdns3/drd.c

index d00ff98dffabfa9cc1fdcde47212b9a0af843b7e..04b6d12f2b9a39b9bfad76fe1909b22f7c010990 100644 (file)
@@ -196,6 +196,7 @@ int cdns_drd_host_on(struct cdns *cdns)
        if (ret)
                dev_err(cdns->dev, "timeout waiting for xhci_ready\n");
 
+       phy_set_mode(cdns->usb2_phy, PHY_MODE_USB_HOST);
        phy_set_mode(cdns->usb3_phy, PHY_MODE_USB_HOST);
        return ret;
 }
@@ -216,6 +217,7 @@ void cdns_drd_host_off(struct cdns *cdns)
        readl_poll_timeout_atomic(&cdns->otg_regs->state, val,
                                  !(val & OTGSTATE_HOST_STATE_MASK),
                                  1, 2000000);
+       phy_set_mode(cdns->usb2_phy, PHY_MODE_INVALID);
        phy_set_mode(cdns->usb3_phy, PHY_MODE_INVALID);
 }
 
@@ -248,6 +250,7 @@ int cdns_drd_gadget_on(struct cdns *cdns)
                return ret;
        }
 
+       phy_set_mode(cdns->usb2_phy, PHY_MODE_USB_DEVICE);
        phy_set_mode(cdns->usb3_phy, PHY_MODE_USB_DEVICE);
        return 0;
 }
@@ -273,6 +276,7 @@ void cdns_drd_gadget_off(struct cdns *cdns)
        readl_poll_timeout_atomic(&cdns->otg_regs->state, val,
                                  !(val & OTGSTATE_DEV_STATE_MASK),
                                  1, 2000000);
+       phy_set_mode(cdns->usb2_phy, PHY_MODE_INVALID);
        phy_set_mode(cdns->usb3_phy, PHY_MODE_INVALID);
 }
 EXPORT_SYMBOL_GPL(cdns_drd_gadget_off);