aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb/class/cdc-acm.c
diff options
context:
space:
mode:
authorH. Peter Anvin <hpa@zytor.com>2009-08-26 20:17:51 -0400
committerH. Peter Anvin <hpa@zytor.com>2009-08-26 20:24:28 -0400
commitb855192c08fcb14adbc5d3a7cab182022d433cca (patch)
tree3a10cafbfbf98cafacf667eb218c71300b351bfa /drivers/usb/class/cdc-acm.c
parentd886c73cd4cf02a71e1650cbcb6176799d78aac1 (diff)
parent3e0e1e9c5a327d4dba8490d83ef55c0564e6e8a7 (diff)
Merge branch 'x86/urgent' into x86/pat
Reason: Change to is_new_memtype_allowed() in x86/urgent Resolved semantic conflicts in: arch/x86/mm/pat.c arch/x86/mm/ioremap.c Signed-off-by: H. Peter Anvin <hpa@zytor.com>
Diffstat (limited to 'drivers/usb/class/cdc-acm.c')
-rw-r--r--drivers/usb/class/cdc-acm.c33
1 files changed, 24 insertions, 9 deletions
diff --git a/drivers/usb/class/cdc-acm.c b/drivers/usb/class/cdc-acm.c
index 3f1045993474..2bfc41ece0e1 100644
--- a/drivers/usb/class/cdc-acm.c
+++ b/drivers/usb/class/cdc-acm.c
@@ -462,11 +462,18 @@ urbs:
462 462
463 rcv->buffer = buf; 463 rcv->buffer = buf;
464 464
465 usb_fill_bulk_urb(rcv->urb, acm->dev, 465 if (acm->is_int_ep)
466 acm->rx_endpoint, 466 usb_fill_int_urb(rcv->urb, acm->dev,
467 buf->base, 467 acm->rx_endpoint,
468 acm->readsize, 468 buf->base,
469 acm_read_bulk, rcv); 469 acm->readsize,
470 acm_read_bulk, rcv, acm->bInterval);
471 else
472 usb_fill_bulk_urb(rcv->urb, acm->dev,
473 acm->rx_endpoint,
474 buf->base,
475 acm->readsize,
476 acm_read_bulk, rcv);
470 rcv->urb->transfer_dma = buf->dma; 477 rcv->urb->transfer_dma = buf->dma;
471 rcv->urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; 478 rcv->urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
472 479
@@ -740,7 +747,7 @@ static int acm_tty_chars_in_buffer(struct tty_struct *tty)
740{ 747{
741 struct acm *acm = tty->driver_data; 748 struct acm *acm = tty->driver_data;
742 if (!ACM_READY(acm)) 749 if (!ACM_READY(acm))
743 return -EINVAL; 750 return 0;
744 /* 751 /*
745 * This is inaccurate (overcounts), but it works. 752 * This is inaccurate (overcounts), but it works.
746 */ 753 */
@@ -1173,6 +1180,9 @@ made_compressed_probe:
1173 spin_lock_init(&acm->read_lock); 1180 spin_lock_init(&acm->read_lock);
1174 mutex_init(&acm->mutex); 1181 mutex_init(&acm->mutex);
1175 acm->rx_endpoint = usb_rcvbulkpipe(usb_dev, epread->bEndpointAddress); 1182 acm->rx_endpoint = usb_rcvbulkpipe(usb_dev, epread->bEndpointAddress);
1183 acm->is_int_ep = usb_endpoint_xfer_int(epread);
1184 if (acm->is_int_ep)
1185 acm->bInterval = epread->bInterval;
1176 tty_port_init(&acm->port); 1186 tty_port_init(&acm->port);
1177 acm->port.ops = &acm_port_ops; 1187 acm->port.ops = &acm_port_ops;
1178 1188
@@ -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 }