mirror of
https://github.com/torvalds/linux.git
synced 2024-10-28 07:41:44 +00:00
Merge git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb-2.6: Revert "USB: Correct Makefile to make isp1760 buildable" usb-serial: fix crash when sub-driver updates firmware USB: isp1760: urb_dequeue doesn't always find the urbs USB: Yet another Conexant Clone to add to cdc-acm.c USB: atmel_usb_udc: Use kzalloc() to allocate ep structures USB: atmel-usba-udc : fix control out requests.
This commit is contained in:
commit
b939e414f0
|
@ -11,7 +11,6 @@ obj-$(CONFIG_USB_MON) += mon/
|
||||||
obj-$(CONFIG_PCI) += host/
|
obj-$(CONFIG_PCI) += host/
|
||||||
obj-$(CONFIG_USB_EHCI_HCD) += host/
|
obj-$(CONFIG_USB_EHCI_HCD) += host/
|
||||||
obj-$(CONFIG_USB_ISP116X_HCD) += host/
|
obj-$(CONFIG_USB_ISP116X_HCD) += host/
|
||||||
obj-$(CONFIG_USB_ISP1760_HCD) += host/
|
|
||||||
obj-$(CONFIG_USB_OHCI_HCD) += host/
|
obj-$(CONFIG_USB_OHCI_HCD) += host/
|
||||||
obj-$(CONFIG_USB_UHCI_HCD) += host/
|
obj-$(CONFIG_USB_UHCI_HCD) += host/
|
||||||
obj-$(CONFIG_USB_FHCI_HCD) += host/
|
obj-$(CONFIG_USB_FHCI_HCD) += host/
|
||||||
|
|
|
@ -1375,6 +1375,9 @@ static struct usb_device_id acm_ids[] = {
|
||||||
{ USB_DEVICE(0x0572, 0x1324), /* Conexant USB MODEM RD02-D400 */
|
{ USB_DEVICE(0x0572, 0x1324), /* Conexant USB MODEM RD02-D400 */
|
||||||
.driver_info = NO_UNION_NORMAL, /* has no union descriptor */
|
.driver_info = NO_UNION_NORMAL, /* has no union descriptor */
|
||||||
},
|
},
|
||||||
|
{ USB_DEVICE(0x0572, 0x1328), /* Shiro / Aztech USB MODEM UM-3100 */
|
||||||
|
.driver_info = NO_UNION_NORMAL, /* has no union descriptor */
|
||||||
|
},
|
||||||
{ USB_DEVICE(0x22b8, 0x6425), /* Motorola MOTOMAGX phones */
|
{ USB_DEVICE(0x22b8, 0x6425), /* Motorola MOTOMAGX phones */
|
||||||
},
|
},
|
||||||
{ USB_DEVICE(0x0572, 0x1329), /* Hummingbird huc56s (Conexant) */
|
{ USB_DEVICE(0x0572, 0x1329), /* Hummingbird huc56s (Conexant) */
|
||||||
|
|
|
@ -794,7 +794,8 @@ usba_ep_queue(struct usb_ep *_ep, struct usb_request *_req, gfp_t gfp_flags)
|
||||||
if (ep->desc) {
|
if (ep->desc) {
|
||||||
list_add_tail(&req->queue, &ep->queue);
|
list_add_tail(&req->queue, &ep->queue);
|
||||||
|
|
||||||
if (ep->is_in || (ep_is_control(ep)
|
if ((!ep_is_control(ep) && ep->is_in) ||
|
||||||
|
(ep_is_control(ep)
|
||||||
&& (ep->state == DATA_STAGE_IN
|
&& (ep->state == DATA_STAGE_IN
|
||||||
|| ep->state == STATUS_STAGE_IN)))
|
|| ep->state == STATUS_STAGE_IN)))
|
||||||
usba_ep_writel(ep, CTL_ENB, USBA_TX_PK_RDY);
|
usba_ep_writel(ep, CTL_ENB, USBA_TX_PK_RDY);
|
||||||
|
@ -1940,7 +1941,7 @@ static int __init usba_udc_probe(struct platform_device *pdev)
|
||||||
usba_writel(udc, CTRL, USBA_DISABLE_MASK);
|
usba_writel(udc, CTRL, USBA_DISABLE_MASK);
|
||||||
clk_disable(pclk);
|
clk_disable(pclk);
|
||||||
|
|
||||||
usba_ep = kmalloc(sizeof(struct usba_ep) * pdata->num_ep,
|
usba_ep = kzalloc(sizeof(struct usba_ep) * pdata->num_ep,
|
||||||
GFP_KERNEL);
|
GFP_KERNEL);
|
||||||
if (!usba_ep)
|
if (!usba_ep)
|
||||||
goto err_alloc_ep;
|
goto err_alloc_ep;
|
||||||
|
|
|
@ -1658,6 +1658,7 @@ static int isp1760_urb_dequeue(struct usb_hcd *hcd, struct urb *urb,
|
||||||
u32 reg_base, or_reg, skip_reg;
|
u32 reg_base, or_reg, skip_reg;
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
struct ptd ptd;
|
struct ptd ptd;
|
||||||
|
packet_enqueue *pe;
|
||||||
|
|
||||||
switch (usb_pipetype(urb->pipe)) {
|
switch (usb_pipetype(urb->pipe)) {
|
||||||
case PIPE_ISOCHRONOUS:
|
case PIPE_ISOCHRONOUS:
|
||||||
|
@ -1669,6 +1670,7 @@ static int isp1760_urb_dequeue(struct usb_hcd *hcd, struct urb *urb,
|
||||||
reg_base = INT_REGS_OFFSET;
|
reg_base = INT_REGS_OFFSET;
|
||||||
or_reg = HC_INT_IRQ_MASK_OR_REG;
|
or_reg = HC_INT_IRQ_MASK_OR_REG;
|
||||||
skip_reg = HC_INT_PTD_SKIPMAP_REG;
|
skip_reg = HC_INT_PTD_SKIPMAP_REG;
|
||||||
|
pe = enqueue_an_INT_packet;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
@ -1676,6 +1678,7 @@ static int isp1760_urb_dequeue(struct usb_hcd *hcd, struct urb *urb,
|
||||||
reg_base = ATL_REGS_OFFSET;
|
reg_base = ATL_REGS_OFFSET;
|
||||||
or_reg = HC_ATL_IRQ_MASK_OR_REG;
|
or_reg = HC_ATL_IRQ_MASK_OR_REG;
|
||||||
skip_reg = HC_ATL_PTD_SKIPMAP_REG;
|
skip_reg = HC_ATL_PTD_SKIPMAP_REG;
|
||||||
|
pe = enqueue_an_ATL_packet;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1687,6 +1690,7 @@ static int isp1760_urb_dequeue(struct usb_hcd *hcd, struct urb *urb,
|
||||||
u32 skip_map;
|
u32 skip_map;
|
||||||
u32 or_map;
|
u32 or_map;
|
||||||
struct isp1760_qtd *qtd;
|
struct isp1760_qtd *qtd;
|
||||||
|
struct isp1760_qh *qh = ints->qh;
|
||||||
|
|
||||||
skip_map = isp1760_readl(hcd->regs + skip_reg);
|
skip_map = isp1760_readl(hcd->regs + skip_reg);
|
||||||
skip_map |= 1 << i;
|
skip_map |= 1 << i;
|
||||||
|
@ -1699,8 +1703,7 @@ static int isp1760_urb_dequeue(struct usb_hcd *hcd, struct urb *urb,
|
||||||
priv_write_copy(priv, (u32 *)&ptd, hcd->regs + reg_base
|
priv_write_copy(priv, (u32 *)&ptd, hcd->regs + reg_base
|
||||||
+ i * sizeof(ptd), sizeof(ptd));
|
+ i * sizeof(ptd), sizeof(ptd));
|
||||||
qtd = ints->qtd;
|
qtd = ints->qtd;
|
||||||
|
qtd = clean_up_qtdlist(qtd);
|
||||||
clean_up_qtdlist(qtd);
|
|
||||||
|
|
||||||
free_mem(priv, ints->payload);
|
free_mem(priv, ints->payload);
|
||||||
|
|
||||||
|
@ -1711,7 +1714,24 @@ static int isp1760_urb_dequeue(struct usb_hcd *hcd, struct urb *urb,
|
||||||
ints->payload = 0;
|
ints->payload = 0;
|
||||||
|
|
||||||
isp1760_urb_done(priv, urb, status);
|
isp1760_urb_done(priv, urb, status);
|
||||||
|
if (qtd)
|
||||||
|
pe(hcd, qh, qtd);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
} else if (ints->qtd) {
|
||||||
|
struct isp1760_qtd *qtd, *prev_qtd = ints->qtd;
|
||||||
|
|
||||||
|
for (qtd = ints->qtd->hw_next; qtd; qtd = qtd->hw_next) {
|
||||||
|
if (qtd->urb == urb) {
|
||||||
|
prev_qtd->hw_next = clean_up_qtdlist(qtd);
|
||||||
|
isp1760_urb_done(priv, urb, status);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
prev_qtd = qtd;
|
||||||
|
}
|
||||||
|
/* we found the urb before the end of the list */
|
||||||
|
if (qtd)
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
ints++;
|
ints++;
|
||||||
}
|
}
|
||||||
|
|
|
@ -974,6 +974,7 @@ int usb_serial_probe(struct usb_interface *interface,
|
||||||
if (retval > 0) {
|
if (retval > 0) {
|
||||||
/* quietly accept this device, but don't bind to a
|
/* quietly accept this device, but don't bind to a
|
||||||
serial port as it's about to disappear */
|
serial port as it's about to disappear */
|
||||||
|
serial->num_ports = 0;
|
||||||
goto exit;
|
goto exit;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user