Merge 4.4-rc5 into usb-next as we want those fixes here for testing
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
@@ -473,6 +473,8 @@ static int ohci_hcd_at91_drv_probe(struct platform_device *pdev)
|
||||
if (!pdata)
|
||||
return -ENOMEM;
|
||||
|
||||
pdev->dev.platform_data = pdata;
|
||||
|
||||
if (!of_property_read_u32(np, "num-ports", &ports))
|
||||
pdata->ports = ports;
|
||||
|
||||
@@ -483,6 +485,7 @@ static int ohci_hcd_at91_drv_probe(struct platform_device *pdev)
|
||||
*/
|
||||
if (i >= pdata->ports) {
|
||||
pdata->vbus_pin[i] = -EINVAL;
|
||||
pdata->overcurrent_pin[i] = -EINVAL;
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -513,10 +516,8 @@ static int ohci_hcd_at91_drv_probe(struct platform_device *pdev)
|
||||
}
|
||||
|
||||
at91_for_each_port(i) {
|
||||
if (i >= pdata->ports) {
|
||||
pdata->overcurrent_pin[i] = -EINVAL;
|
||||
continue;
|
||||
}
|
||||
if (i >= pdata->ports)
|
||||
break;
|
||||
|
||||
pdata->overcurrent_pin[i] =
|
||||
of_get_named_gpio_flags(np, "atmel,oc-gpio", i, &flags);
|
||||
@@ -552,8 +553,6 @@ static int ohci_hcd_at91_drv_probe(struct platform_device *pdev)
|
||||
}
|
||||
}
|
||||
|
||||
pdev->dev.platform_data = pdata;
|
||||
|
||||
device_init_wakeup(&pdev->dev, 1);
|
||||
return usb_hcd_at91_probe(&ohci_at91_hc_driver, pdev);
|
||||
}
|
||||
|
@@ -376,6 +376,10 @@ static int qset_fill_page_list(struct whc *whc, struct whc_std *std, gfp_t mem_f
|
||||
if (std->pl_virt == NULL)
|
||||
return -ENOMEM;
|
||||
std->dma_addr = dma_map_single(whc->wusbhc.dev, std->pl_virt, pl_len, DMA_TO_DEVICE);
|
||||
if (dma_mapping_error(whc->wusbhc.dev, std->dma_addr)) {
|
||||
kfree(std->pl_virt);
|
||||
return -EFAULT;
|
||||
}
|
||||
|
||||
for (p = 0; p < std->num_pointers; p++) {
|
||||
std->pl_virt[p].buf_ptr = cpu_to_le64(dma_addr);
|
||||
|
@@ -733,8 +733,30 @@ static u32 xhci_get_port_status(struct usb_hcd *hcd,
|
||||
if ((raw_port_status & PORT_RESET) ||
|
||||
!(raw_port_status & PORT_PE))
|
||||
return 0xffffffff;
|
||||
if (time_after_eq(jiffies,
|
||||
bus_state->resume_done[wIndex])) {
|
||||
/* did port event handler already start resume timing? */
|
||||
if (!bus_state->resume_done[wIndex]) {
|
||||
/* If not, maybe we are in a host initated resume? */
|
||||
if (test_bit(wIndex, &bus_state->resuming_ports)) {
|
||||
/* Host initated resume doesn't time the resume
|
||||
* signalling using resume_done[].
|
||||
* It manually sets RESUME state, sleeps 20ms
|
||||
* and sets U0 state. This should probably be
|
||||
* changed, but not right now.
|
||||
*/
|
||||
} else {
|
||||
/* port resume was discovered now and here,
|
||||
* start resume timing
|
||||
*/
|
||||
unsigned long timeout = jiffies +
|
||||
msecs_to_jiffies(USB_RESUME_TIMEOUT);
|
||||
|
||||
set_bit(wIndex, &bus_state->resuming_ports);
|
||||
bus_state->resume_done[wIndex] = timeout;
|
||||
mod_timer(&hcd->rh_timer, timeout);
|
||||
}
|
||||
/* Has resume been signalled for USB_RESUME_TIME yet? */
|
||||
} else if (time_after_eq(jiffies,
|
||||
bus_state->resume_done[wIndex])) {
|
||||
int time_left;
|
||||
|
||||
xhci_dbg(xhci, "Resume USB2 port %d\n",
|
||||
@@ -775,13 +797,26 @@ static u32 xhci_get_port_status(struct usb_hcd *hcd,
|
||||
} else {
|
||||
/*
|
||||
* The resume has been signaling for less than
|
||||
* 20ms. Report the port status as SUSPEND,
|
||||
* let the usbcore check port status again
|
||||
* and clear resume signaling later.
|
||||
* USB_RESUME_TIME. Report the port status as SUSPEND,
|
||||
* let the usbcore check port status again and clear
|
||||
* resume signaling later.
|
||||
*/
|
||||
status |= USB_PORT_STAT_SUSPEND;
|
||||
}
|
||||
}
|
||||
/*
|
||||
* Clear stale usb2 resume signalling variables in case port changed
|
||||
* state during resume signalling. For example on error
|
||||
*/
|
||||
if ((bus_state->resume_done[wIndex] ||
|
||||
test_bit(wIndex, &bus_state->resuming_ports)) &&
|
||||
(raw_port_status & PORT_PLS_MASK) != XDEV_U3 &&
|
||||
(raw_port_status & PORT_PLS_MASK) != XDEV_RESUME) {
|
||||
bus_state->resume_done[wIndex] = 0;
|
||||
clear_bit(wIndex, &bus_state->resuming_ports);
|
||||
}
|
||||
|
||||
|
||||
if ((raw_port_status & PORT_PLS_MASK) == XDEV_U0 &&
|
||||
(raw_port_status & PORT_POWER)) {
|
||||
if (bus_state->suspended_ports & (1 << wIndex)) {
|
||||
@@ -1115,6 +1150,7 @@ int xhci_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
|
||||
if ((temp & PORT_PE) == 0)
|
||||
goto error;
|
||||
|
||||
set_bit(wIndex, &bus_state->resuming_ports);
|
||||
xhci_set_link_state(xhci, port_array, wIndex,
|
||||
XDEV_RESUME);
|
||||
spin_unlock_irqrestore(&xhci->lock, flags);
|
||||
@@ -1122,6 +1158,7 @@ int xhci_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue,
|
||||
spin_lock_irqsave(&xhci->lock, flags);
|
||||
xhci_set_link_state(xhci, port_array, wIndex,
|
||||
XDEV_U0);
|
||||
clear_bit(wIndex, &bus_state->resuming_ports);
|
||||
}
|
||||
bus_state->port_c_suspend |= 1 << wIndex;
|
||||
|
||||
|
@@ -187,10 +187,14 @@ static void xhci_pme_acpi_rtd3_enable(struct pci_dev *dev)
|
||||
0xb7, 0x0c, 0x34, 0xac, 0x01, 0xe9, 0xbf, 0x45,
|
||||
0xb7, 0xe6, 0x2b, 0x34, 0xec, 0x93, 0x1e, 0x23,
|
||||
};
|
||||
acpi_evaluate_dsm(ACPI_HANDLE(&dev->dev), intel_dsm_uuid, 3, 1, NULL);
|
||||
union acpi_object *obj;
|
||||
|
||||
obj = acpi_evaluate_dsm(ACPI_HANDLE(&dev->dev), intel_dsm_uuid, 3, 1,
|
||||
NULL);
|
||||
ACPI_FREE(obj);
|
||||
}
|
||||
#else
|
||||
static void xhci_pme_acpi_rtd3_enable(struct pci_dev *dev) { }
|
||||
static void xhci_pme_acpi_rtd3_enable(struct pci_dev *dev) { }
|
||||
#endif /* CONFIG_ACPI */
|
||||
|
||||
/* called during probe() after chip reset completes */
|
||||
|
@@ -1584,7 +1584,8 @@ static void handle_port_status(struct xhci_hcd *xhci,
|
||||
*/
|
||||
bogus_port_status = true;
|
||||
goto cleanup;
|
||||
} else {
|
||||
} else if (!test_bit(faked_port_index,
|
||||
&bus_state->resuming_ports)) {
|
||||
xhci_dbg(xhci, "resume HS port %d\n", port_id);
|
||||
bus_state->resume_done[faked_port_index] = jiffies +
|
||||
msecs_to_jiffies(USB_RESUME_TIMEOUT);
|
||||
|
@@ -4795,8 +4795,16 @@ int xhci_update_hub_device(struct usb_hcd *hcd, struct usb_device *hdev,
|
||||
ctrl_ctx->add_flags |= cpu_to_le32(SLOT_FLAG);
|
||||
slot_ctx = xhci_get_slot_ctx(xhci, config_cmd->in_ctx);
|
||||
slot_ctx->dev_info |= cpu_to_le32(DEV_HUB);
|
||||
/*
|
||||
* refer to section 6.2.2: MTT should be 0 for full speed hub,
|
||||
* but it may be already set to 1 when setup an xHCI virtual
|
||||
* device, so clear it anyway.
|
||||
*/
|
||||
if (tt->multi)
|
||||
slot_ctx->dev_info |= cpu_to_le32(DEV_MTT);
|
||||
else if (hdev->speed == USB_SPEED_FULL)
|
||||
slot_ctx->dev_info &= cpu_to_le32(~DEV_MTT);
|
||||
|
||||
if (xhci->hci_version > 0x95) {
|
||||
xhci_dbg(xhci, "xHCI version %x needs hub "
|
||||
"TT think time and number of ports\n",
|
||||
|
Reference in New Issue
Block a user