aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb/class/cdc-acm.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/usb/class/cdc-acm.c')
-rw-r--r--drivers/usb/class/cdc-acm.c35
1 files changed, 25 insertions, 10 deletions
diff --git a/drivers/usb/class/cdc-acm.c b/drivers/usb/class/cdc-acm.c
index 38bfdb0f6660..5b15d9d8896b 100644
--- a/drivers/usb/class/cdc-acm.c
+++ b/drivers/usb/class/cdc-acm.c
@@ -387,6 +387,7 @@ static void acm_rx_tasklet(unsigned long _acm)
387 struct acm_ru *rcv; 387 struct acm_ru *rcv;
388 unsigned long flags; 388 unsigned long flags;
389 unsigned char throttled; 389 unsigned char throttled;
390 struct usb_host_endpoint *ep;
390 391
391 dbg("Entering acm_rx_tasklet"); 392 dbg("Entering acm_rx_tasklet");
392 393
@@ -462,11 +463,20 @@ urbs:
462 463
463 rcv->buffer = buf; 464 rcv->buffer = buf;
464 465
465 usb_fill_bulk_urb(rcv->urb, acm->dev, 466 ep = (usb_pipein(acm->rx_endpoint) ? acm->dev->ep_in : acm->dev->ep_out)
466 acm->rx_endpoint, 467 [usb_pipeendpoint(acm->rx_endpoint)];
467 buf->base, 468 if (usb_endpoint_xfer_int(&ep->desc))
468 acm->readsize, 469 usb_fill_int_urb(rcv->urb, acm->dev,
469 acm_read_bulk, rcv); 470 acm->rx_endpoint,
471 buf->base,
472 acm->readsize,
473 acm_read_bulk, rcv, ep->desc.bInterval);
474 else
475 usb_fill_bulk_urb(rcv->urb, acm->dev,
476 acm->rx_endpoint,
477 buf->base,
478 acm->readsize,
479 acm_read_bulk, rcv);
470 rcv->urb->transfer_dma = buf->dma; 480 rcv->urb->transfer_dma = buf->dma;
471 rcv->urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; 481 rcv->urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
472 482
@@ -550,7 +560,7 @@ static void acm_waker(struct work_struct *waker)
550static int acm_tty_open(struct tty_struct *tty, struct file *filp) 560static int acm_tty_open(struct tty_struct *tty, struct file *filp)
551{ 561{
552 struct acm *acm; 562 struct acm *acm;
553 int rv = -EINVAL; 563 int rv = -ENODEV;
554 int i; 564 int i;
555 dbg("Entering acm_tty_open."); 565 dbg("Entering acm_tty_open.");
556 566
@@ -677,7 +687,7 @@ static void acm_tty_close(struct tty_struct *tty, struct file *filp)
677 687
678 /* Perform the closing process and see if we need to do the hardware 688 /* Perform the closing process and see if we need to do the hardware
679 shutdown */ 689 shutdown */
680 if (tty_port_close_start(&acm->port, tty, filp) == 0) 690 if (!acm || tty_port_close_start(&acm->port, tty, filp) == 0)
681 return; 691 return;
682 acm_port_down(acm, 0); 692 acm_port_down(acm, 0);
683 tty_port_close_end(&acm->port, tty); 693 tty_port_close_end(&acm->port, tty);
@@ -1227,9 +1237,14 @@ made_compressed_probe:
1227 goto alloc_fail7; 1237 goto alloc_fail7;
1228 } 1238 }
1229 1239
1230 usb_fill_bulk_urb(snd->urb, usb_dev, 1240 if (usb_endpoint_xfer_int(epwrite))
1231 usb_sndbulkpipe(usb_dev, epwrite->bEndpointAddress), 1241 usb_fill_int_urb(snd->urb, usb_dev,
1232 NULL, acm->writesize, acm_write_bulk, snd); 1242 usb_sndbulkpipe(usb_dev, epwrite->bEndpointAddress),
1243 NULL, acm->writesize, acm_write_bulk, snd, epwrite->bInterval);
1244 else
1245 usb_fill_bulk_urb(snd->urb, usb_dev,
1246 usb_sndbulkpipe(usb_dev, epwrite->bEndpointAddress),
1247 NULL, acm->writesize, acm_write_bulk, snd);
1233 snd->urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; 1248 snd->urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
1234 snd->instance = acm; 1249 snd->instance = acm;
1235 } 1250 }