diff options
Diffstat (limited to 'drivers/usb/host/xhci.c')
| -rw-r--r-- | drivers/usb/host/xhci.c | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c index 849470b18831..53b8f89a0b1c 100644 --- a/drivers/usb/host/xhci.c +++ b/drivers/usb/host/xhci.c | |||
| @@ -3779,6 +3779,28 @@ int xhci_address_device(struct usb_hcd *hcd, struct usb_device *udev) | |||
| 3779 | return 0; | 3779 | return 0; |
| 3780 | } | 3780 | } |
| 3781 | 3781 | ||
| 3782 | /* | ||
| 3783 | * Transfer the port index into real index in the HW port status | ||
| 3784 | * registers. Caculate offset between the port's PORTSC register | ||
| 3785 | * and port status base. Divide the number of per port register | ||
| 3786 | * to get the real index. The raw port number bases 1. | ||
| 3787 | */ | ||
| 3788 | int xhci_find_raw_port_number(struct usb_hcd *hcd, int port1) | ||
| 3789 | { | ||
| 3790 | struct xhci_hcd *xhci = hcd_to_xhci(hcd); | ||
| 3791 | __le32 __iomem *base_addr = &xhci->op_regs->port_status_base; | ||
| 3792 | __le32 __iomem *addr; | ||
| 3793 | int raw_port; | ||
| 3794 | |||
| 3795 | if (hcd->speed != HCD_USB3) | ||
| 3796 | addr = xhci->usb2_ports[port1 - 1]; | ||
| 3797 | else | ||
| 3798 | addr = xhci->usb3_ports[port1 - 1]; | ||
| 3799 | |||
| 3800 | raw_port = (addr - base_addr)/NUM_PORT_REGS + 1; | ||
| 3801 | return raw_port; | ||
| 3802 | } | ||
| 3803 | |||
| 3782 | #ifdef CONFIG_USB_SUSPEND | 3804 | #ifdef CONFIG_USB_SUSPEND |
| 3783 | 3805 | ||
| 3784 | /* BESL to HIRD Encoding array for USB2 LPM */ | 3806 | /* BESL to HIRD Encoding array for USB2 LPM */ |
