Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 235417
b: refs/heads/master
c: 1d5810b
h: refs/heads/master
i:
  235415: e964249
v: v3
  • Loading branch information
Sarah Sharp committed Mar 14, 2011
1 parent 552906a commit a278f05
Show file tree
Hide file tree
Showing 4 changed files with 17 additions and 24 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: abc4f9b099e9e7db3f6f945210aee125571c236d
refs/heads/master: 1d5810b6923c76fc95e52d9d3491c91824c2f075
28 changes: 10 additions & 18 deletions trunk/drivers/usb/host/xhci-hub.c
Original file line number Diff line number Diff line change
Expand Up @@ -347,20 +347,15 @@ int xhci_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
goto error;
}
xhci_ring_device(xhci, slot_id);
xhci->port_c_suspend[wIndex >> 5] |=
1 << (wIndex & 31);
xhci->suspended_ports[wIndex >> 5] &=
~(1 << (wIndex & 31));
xhci->port_c_suspend |= 1 << wIndex;
xhci->suspended_ports &= ~(1 << wIndex);
}
}
if ((temp & PORT_PLS_MASK) == XDEV_U0
&& (temp & PORT_POWER)
&& (xhci->suspended_ports[wIndex >> 5] &
(1 << (wIndex & 31)))) {
xhci->suspended_ports[wIndex >> 5] &=
~(1 << (wIndex & 31));
xhci->port_c_suspend[wIndex >> 5] |=
1 << (wIndex & 31);
&& (xhci->suspended_ports & (1 << wIndex))) {
xhci->suspended_ports &= ~(1 << wIndex);
xhci->port_c_suspend |= 1 << wIndex;
}
if (temp & PORT_CONNECT) {
status |= USB_PORT_STAT_CONNECTION;
Expand All @@ -374,7 +369,7 @@ int xhci_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
status |= USB_PORT_STAT_RESET;
if (temp & PORT_POWER)
status |= USB_PORT_STAT_POWER;
if (xhci->port_c_suspend[wIndex >> 5] & (1 << (wIndex & 31)))
if (xhci->port_c_suspend & (1 << wIndex))
status |= 1 << USB_PORT_FEAT_C_SUSPEND;
xhci_dbg(xhci, "Get port status returned 0x%x\n", status);
put_unaligned(cpu_to_le32(status), (__le32 *) buf);
Expand Down Expand Up @@ -421,8 +416,7 @@ int xhci_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
spin_lock_irqsave(&xhci->lock, flags);

temp = xhci_readl(xhci, addr);
xhci->suspended_ports[wIndex >> 5] |=
1 << (wIndex & (31));
xhci->suspended_ports |= 1 << wIndex;
break;
case USB_PORT_FEAT_POWER:
/*
Expand Down Expand Up @@ -489,8 +483,7 @@ int xhci_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
temp |= PORT_LINK_STROBE | XDEV_U0;
xhci_writel(xhci, temp, addr);
}
xhci->port_c_suspend[wIndex >> 5] |=
1 << (wIndex & 31);
xhci->port_c_suspend |= 1 << wIndex;
}

slot_id = xhci_find_slot_id_by_port(xhci, wIndex + 1);
Expand All @@ -501,8 +494,7 @@ int xhci_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
xhci_ring_device(xhci, slot_id);
break;
case USB_PORT_FEAT_C_SUSPEND:
xhci->port_c_suspend[wIndex >> 5] &=
~(1 << (wIndex & 31));
xhci->port_c_suspend &= ~(1 << wIndex);
case USB_PORT_FEAT_C_RESET:
case USB_PORT_FEAT_C_CONNECTION:
case USB_PORT_FEAT_C_OVER_CURRENT:
Expand Down Expand Up @@ -560,7 +552,7 @@ int xhci_hub_status_data(struct usb_hcd *hcd, char *buf)
NUM_PORT_REGS*i;
temp = xhci_readl(xhci, addr);
if ((temp & mask) != 0 ||
(xhci->port_c_suspend[i >> 5] & 1 << (i & 31)) ||
(xhci->port_c_suspend & 1 << i) ||
(xhci->resume_done[i] && time_after_eq(
jiffies, xhci->resume_done[i]))) {
buf[(i + 1) / 8] |= 1 << (i + 1) % 8;
Expand Down
2 changes: 1 addition & 1 deletion trunk/drivers/usb/host/xhci-mem.c
Original file line number Diff line number Diff line change
Expand Up @@ -1971,7 +1971,7 @@ 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)
for (i = 0; i < USB_MAXCHILDREN; ++i)
xhci->resume_done[i] = 0;

if (scratchpad_alloc(xhci, flags))
Expand Down
9 changes: 5 additions & 4 deletions trunk/drivers/usb/host/xhci.h
Original file line number Diff line number Diff line change
Expand Up @@ -1248,10 +1248,11 @@ struct xhci_hcd {
#define XHCI_LINK_TRB_QUIRK (1 << 0)
#define XHCI_RESET_EP_QUIRK (1 << 1)
#define XHCI_NEC_HOST (1 << 2)
u32 port_c_suspend[8]; /* port suspend change*/
u32 suspended_ports[8]; /* which ports are
suspended */
unsigned long resume_done[MAX_HC_PORTS];
/* port suspend change*/
u32 port_c_suspend;
/* which ports are suspended */
u32 suspended_ports;
unsigned long resume_done[USB_MAXCHILDREN];
/* Is each xHCI roothub port a USB 3.0, USB 2.0, or USB 1.1 port? */
u8 *port_array;
/* Array of pointers to USB 3.0 PORTSC registers */
Expand Down

0 comments on commit a278f05

Please sign in to comment.