]> git.karo-electronics.de Git - mv-sheeva.git/blobdiff - drivers/usb/host/xhci-mem.c
USB: xHCI: bus power management implementation
[mv-sheeva.git] / drivers / usb / host / xhci-mem.c
index 4e51343ddffcd4219a88bf781bafa29e10ad5043..202770676da30c409652dc1aca0b4d33a857d366 100644 (file)
@@ -778,6 +778,7 @@ int xhci_alloc_virt_device(struct xhci_hcd *xhci, int slot_id,
 
        init_completion(&dev->cmd_completion);
        INIT_LIST_HEAD(&dev->cmd_list);
+       dev->udev = udev;
 
        /* Point to output device context in dcbaa. */
        xhci->dcbaa->dev_context_ptrs[slot_id] = dev->out_ctx->dma;
@@ -866,6 +867,7 @@ int xhci_setup_addressable_virt_dev(struct xhci_hcd *xhci, struct usb_device *ud
                        top_dev = top_dev->parent)
                /* Found device below root hub */;
        slot_ctx->dev_info2 |= (u32) ROOT_HUB_PORT(top_dev->portnum);
+       dev->port = top_dev->portnum;
        xhci_dbg(xhci, "Set root hub portnum to %d\n", top_dev->portnum);
 
        /* Is this a LS/FS device under a HS hub? */
@@ -1443,6 +1445,7 @@ void xhci_mem_cleanup(struct xhci_hcd *xhci)
        scratchpad_free(xhci);
        xhci->page_size = 0;
        xhci->page_shift = 0;
+       xhci->bus_suspended = 0;
 }
 
 static int xhci_test_trb_in_td(struct xhci_hcd *xhci,
@@ -1801,6 +1804,8 @@ int xhci_mem_init(struct xhci_hcd *xhci, gfp_t flags)
        init_completion(&xhci->addr_dev);
        for (i = 0; i < MAX_HC_SLOTS; ++i)
                xhci->devs[i] = NULL;
+       for (i = 0; i < MAX_HC_PORTS; ++i)
+               xhci->resume_done[i] = 0;
 
        if (scratchpad_alloc(xhci, flags))
                goto fail;