summaryrefslogtreecommitdiff
path: root/drivers/usb
diff options
context:
space:
mode:
authorLinux Build Service Account <lnxbuild@quicinc.com>2017-11-29 04:26:05 -0800
committerGerrit - the friendly Code Review server <code-review@localhost>2017-11-29 04:26:04 -0800
commit63624a410472e3de6f629f4e08828e6bc4b61c2b (patch)
tree620f6c99a32af011b5cbebc03bacd702dfdcce35 /drivers/usb
parente648f8c78bddc7ee2885f83f88c7b586f36b4a13 (diff)
parentc611d78437adeb9299d8be3f7be78b9c153152e5 (diff)
Merge "usb: core: Add helper function to return controller id"
Diffstat (limited to 'drivers/usb')
-rw-r--r--drivers/usb/core/hcd.c10
-rw-r--r--drivers/usb/core/usb.c9
-rw-r--r--drivers/usb/host/xhci-plat.c4
-rw-r--r--drivers/usb/host/xhci.h2
4 files changed, 25 insertions, 0 deletions
diff --git a/drivers/usb/core/hcd.c b/drivers/usb/core/hcd.c
index c31c753b6e28..72ee12782b6c 100644
--- a/drivers/usb/core/hcd.c
+++ b/drivers/usb/core/hcd.c
@@ -2264,6 +2264,16 @@ usb_hcd_get_xfer_ring_dma_addr(struct usb_device *udev,
return hcd->driver->get_xfer_ring_dma_addr(hcd, udev, ep);
}
+int usb_hcd_get_controller_id(struct usb_device *udev)
+{
+ struct usb_hcd *hcd = bus_to_hcd(udev->bus);
+
+ if (!HCD_RH_RUNNING(hcd))
+ return -EINVAL;
+
+ return hcd->driver->get_core_id(hcd);
+}
+
#ifdef CONFIG_PM
int hcd_bus_suspend(struct usb_device *rhdev, pm_message_t msg)
diff --git a/drivers/usb/core/usb.c b/drivers/usb/core/usb.c
index 062677f8e91d..e64fd6570a23 100644
--- a/drivers/usb/core/usb.c
+++ b/drivers/usb/core/usb.c
@@ -717,6 +717,15 @@ dma_addr_t usb_get_xfer_ring_dma_addr(struct usb_device *dev,
}
EXPORT_SYMBOL(usb_get_xfer_ring_dma_addr);
+int usb_get_controller_id(struct usb_device *dev)
+{
+ if (dev->state == USB_STATE_NOTATTACHED)
+ return -EINVAL;
+
+ return usb_hcd_get_controller_id(dev);
+}
+EXPORT_SYMBOL(usb_get_controller_id);
+
/*-------------------------------------------------------------------*/
/*
* __usb_get_extra_descriptor() finds a descriptor of specific type in the
diff --git a/drivers/usb/host/xhci-plat.c b/drivers/usb/host/xhci-plat.c
index c6998f086e12..be72953f9737 100644
--- a/drivers/usb/host/xhci-plat.c
+++ b/drivers/usb/host/xhci-plat.c
@@ -233,6 +233,10 @@ static int xhci_plat_probe(struct platform_device *pdev)
hcd_to_bus(xhci->shared_hcd)->skip_resume = true;
+ if (device_property_read_u32(pdev->dev.parent, "usb-core-id",
+ &xhci->core_id))
+ xhci->core_id = -EINVAL;
+
hcd->usb_phy = devm_usb_get_phy_by_phandle(&pdev->dev, "usb-phy", 0);
if (IS_ERR(hcd->usb_phy)) {
ret = PTR_ERR(hcd->usb_phy);
diff --git a/drivers/usb/host/xhci.h b/drivers/usb/host/xhci.h
index c665806983be..f583cefecee0 100644
--- a/drivers/usb/host/xhci.h
+++ b/drivers/usb/host/xhci.h
@@ -1519,6 +1519,8 @@ struct xhci_hcd {
/* secondary interrupter */
struct xhci_intr_reg __iomem **sec_ir_set;
+ int core_id;
+
/* Cached register copies of read-only HC data */
__u32 hcs_params1;
__u32 hcs_params2;