diff options
Diffstat (limited to 'drivers')
| -rw-r--r-- | drivers/usb/dwc3/core.c | 15 | ||||
| -rw-r--r-- | drivers/usb/dwc3/core.h | 5 | 
2 files changed, 20 insertions, 0 deletions
diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c index c34452a7304..79a24fab13d 100644 --- a/drivers/usb/dwc3/core.c +++ b/drivers/usb/dwc3/core.c @@ -50,6 +50,7 @@  #include <linux/dma-mapping.h>  #include <linux/of.h> +#include <linux/usb/otg.h>  #include <linux/usb/ch9.h>  #include <linux/usb/gadget.h> @@ -136,6 +137,8 @@ static void dwc3_core_soft_reset(struct dwc3 *dwc)  	reg |= DWC3_GUSB2PHYCFG_PHYSOFTRST;  	dwc3_writel(dwc->regs, DWC3_GUSB2PHYCFG(0), reg); +	usb_phy_init(dwc->usb2_phy); +	usb_phy_init(dwc->usb3_phy);  	mdelay(100);  	/* Clear USB3 PHY reset */ @@ -465,6 +468,18 @@ static int __devinit dwc3_probe(struct platform_device *pdev)  		return -ENOMEM;  	} +	dwc->usb2_phy = devm_usb_get_phy(dev, USB_PHY_TYPE_USB2); +	if (IS_ERR_OR_NULL(dwc->usb2_phy)) { +		dev_err(dev, "no usb2 phy configured\n"); +		return -EPROBE_DEFER; +	} + +	dwc->usb3_phy = devm_usb_get_phy(dev, USB_PHY_TYPE_USB3); +	if (IS_ERR_OR_NULL(dwc->usb3_phy)) { +		dev_err(dev, "no usb3 phy configured\n"); +		return -EPROBE_DEFER; +	} +  	spin_lock_init(&dwc->lock);  	platform_set_drvdata(pdev, dwc); diff --git a/drivers/usb/dwc3/core.h b/drivers/usb/dwc3/core.h index 151eca876df..dbc5713d84f 100644 --- a/drivers/usb/dwc3/core.h +++ b/drivers/usb/dwc3/core.h @@ -624,6 +624,8 @@ struct dwc3_scratchpad_array {   * @maximum_speed: maximum speed requested (mainly for testing purposes)   * @revision: revision register contents   * @mode: mode of operation + * @usb2_phy: pointer to USB2 PHY + * @usb3_phy: pointer to USB3 PHY   * @is_selfpowered: true when we are selfpowered   * @three_stage_setup: set if we perform a three phase setup   * @ep0_bounced: true when we used bounce buffer @@ -667,6 +669,9 @@ struct dwc3 {  	struct usb_gadget	gadget;  	struct usb_gadget_driver *gadget_driver; +	struct usb_phy		*usb2_phy; +	struct usb_phy		*usb3_phy; +  	void __iomem		*regs;  	size_t			regs_size;  |