We need the SMSC USB3315 clock and regulator to always be initialized.[...]
We also need the PHY driver to take the PHY out of reset. This patch
extends the existing USB generic nop phy driver to include a new
initialization path.
A new compatible string "smsc,usb3315" is used to decide which
initialization path to use.
CC: Peter Chen <peter.chen@xxxxxxx>
CC: Stephen Boyd <sboyd@xxxxxxxxxxxxxx>
CC: Fabien Lahoudere <fabien.lahoudere@xxxxxxxxxxxxxxx>
Signed-off-by: Peter Senna Tschudin <peter.senna@xxxxxxxxxxxxx>
---
This is a follow-up of previous discussion:
https://www.spinics.net/lists/linux-usb/msg146680.html
drivers/usb/phy/phy-generic.c | 33 +++++++++++++++++++++++++++++----
drivers/usb/phy/phy-generic.h | 1 +
2 files changed, 30 insertions(+), 4 deletions(-)
diff --git a/drivers/usb/phy/phy-generic.c b/drivers/usb/phy/phy-generic.c
index 89d6e7a..6ea9ce4 100644
--- a/drivers/usb/phy/phy-generic.c
+++ b/drivers/usb/phy/phy-generic.c
@@ -216,18 +221,29 @@ static int nop_set_host(struct usb_otg *otg, struct usb_bus *host)
otg->host = host;
return 0;
}
+int smsc_usb3315_init(struct usb_phy_generic *nop)
+{
+ /*
+ * If the gpio for controlling reset state is not available, try again
+ * later
+ */
+ if(!nop->gpiod_reset)
@@ -304,6 +320,12 @@ int usb_phy_gen_create_phy(struct device *dev, struct usb_phy_generic *nop,
nop->phy.otg->set_host = nop_set_host;
nop->phy.otg->set_peripheral = nop_set_peripheral;
+ if(node && of_device_is_compatible(node, "smsc,usb3315")) {