diff options
Diffstat (limited to 'drivers/usb/host/ehci-msm.c')
| -rw-r--r-- | drivers/usb/host/ehci-msm.c | 27 | 
1 files changed, 19 insertions, 8 deletions
diff --git a/drivers/usb/host/ehci-msm.c b/drivers/usb/host/ehci-msm.c index 0f717dc688b..982c09bebe0 100644 --- a/drivers/usb/host/ehci-msm.c +++ b/drivers/usb/host/ehci-msm.c @@ -42,7 +42,6 @@  static const char hcd_name[] = "ehci-msm";  static struct hc_driver __read_mostly msm_hc_driver; -static struct usb_phy *phy;  static int ehci_msm_reset(struct usb_hcd *hcd)  { @@ -70,6 +69,7 @@ static int ehci_msm_probe(struct platform_device *pdev)  {  	struct usb_hcd *hcd;  	struct resource *res; +	struct usb_phy *phy;  	int ret;  	dev_dbg(&pdev->dev, "ehci_msm proble\n"); @@ -96,10 +96,9 @@ static int ehci_msm_probe(struct platform_device *pdev)  	hcd->rsrc_start = res->start;  	hcd->rsrc_len = resource_size(res); -	hcd->regs = devm_ioremap(&pdev->dev, hcd->rsrc_start, hcd->rsrc_len); -	if (!hcd->regs) { -		dev_err(&pdev->dev, "ioremap failed\n"); -		ret = -ENOMEM; +	hcd->regs = devm_ioremap_resource(&pdev->dev, res); +	if (IS_ERR(hcd->regs)) { +		ret = PTR_ERR(hcd->regs);  		goto put_hcd;  	} @@ -108,10 +107,14 @@ static int ehci_msm_probe(struct platform_device *pdev)  	 * powering up VBUS, mapping of registers address space and power  	 * management.  	 */ -	phy = devm_usb_get_phy(&pdev->dev, USB_PHY_TYPE_USB2); +	if (pdev->dev.of_node) +		phy = devm_usb_get_phy_by_phandle(&pdev->dev, "usb-phy", 0); +	else +		phy = devm_usb_get_phy(&pdev->dev, USB_PHY_TYPE_USB2); +  	if (IS_ERR(phy)) {  		dev_err(&pdev->dev, "unable to find transceiver\n"); -		ret = -ENODEV; +		ret = -EPROBE_DEFER;  		goto put_hcd;  	} @@ -121,6 +124,7 @@ static int ehci_msm_probe(struct platform_device *pdev)  		goto put_hcd;  	} +	hcd->phy = phy;  	device_init_wakeup(&pdev->dev, 1);  	/*  	 * OTG device parent of HCD takes care of putting @@ -147,7 +151,7 @@ static int ehci_msm_remove(struct platform_device *pdev)  	pm_runtime_disable(&pdev->dev);  	pm_runtime_set_suspended(&pdev->dev); -	otg_set_host(phy->otg, NULL); +	otg_set_host(hcd->phy->otg, NULL);  	/* FIXME: need to call usb_remove_hcd() here? */ @@ -186,12 +190,19 @@ static const struct dev_pm_ops ehci_msm_dev_pm_ops = {  	.resume          = ehci_msm_pm_resume,  }; +static struct of_device_id msm_ehci_dt_match[] = { +	{ .compatible = "qcom,ehci-host", }, +	{} +}; +MODULE_DEVICE_TABLE(of, msm_ehci_dt_match); +  static struct platform_driver ehci_msm_driver = {  	.probe	= ehci_msm_probe,  	.remove	= ehci_msm_remove,  	.driver = {  		   .name = "msm_hsusb_host",  		   .pm = &ehci_msm_dev_pm_ops, +		   .of_match_table = msm_ehci_dt_match,  	},  };  | 
