|
@@ -17,8 +17,8 @@
|
|
|
*/
|
|
|
|
|
|
/* this file is part of ehci-hcd.c */
|
|
|
-static int __maybe_unused ehci_lpm_set_da(struct ehci_hcd *ehci,
|
|
|
- int dev_addr, int port_num)
|
|
|
+
|
|
|
+static int ehci_lpm_set_da(struct ehci_hcd *ehci, int dev_addr, int port_num)
|
|
|
{
|
|
|
u32 __iomem portsc;
|
|
|
|
|
@@ -38,7 +38,7 @@ static int __maybe_unused ehci_lpm_set_da(struct ehci_hcd *ehci,
|
|
|
* this function is used to check if the device support LPM
|
|
|
* if yes, mark the PORTSC register with PORT_LPM bit
|
|
|
*/
|
|
|
-static int __maybe_unused ehci_lpm_check(struct ehci_hcd *ehci, int port)
|
|
|
+static int ehci_lpm_check(struct ehci_hcd *ehci, int port)
|
|
|
{
|
|
|
u32 __iomem *portsc ;
|
|
|
u32 val32;
|
|
@@ -82,3 +82,20 @@ static int __maybe_unused ehci_lpm_check(struct ehci_hcd *ehci, int port)
|
|
|
|
|
|
return retval;
|
|
|
}
|
|
|
+
|
|
|
+static int __maybe_unused ehci_update_device(struct usb_hcd *hcd,
|
|
|
+ struct usb_device *udev)
|
|
|
+{
|
|
|
+ struct ehci_hcd *ehci = hcd_to_ehci(hcd);
|
|
|
+ int rc = 0;
|
|
|
+
|
|
|
+ if (!udev->parent) /* udev is root hub itself, impossible */
|
|
|
+ rc = -1;
|
|
|
+ /* we only support lpm device connected to root hub yet */
|
|
|
+ if (ehci->has_lpm && !udev->parent->parent) {
|
|
|
+ rc = ehci_lpm_set_da(ehci, udev->devnum, udev->portnum);
|
|
|
+ if (!rc)
|
|
|
+ rc = ehci_lpm_check(ehci, udev->portnum);
|
|
|
+ }
|
|
|
+ return rc;
|
|
|
+}
|