diff options
author | Alan Stern <stern@rowland.harvard.edu> | 2007-08-21 15:37:50 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2007-10-12 17:55:18 -0400 |
commit | ee7d1f3f0c32d8abe9627aa73dc62ee5bf2daf7f (patch) | |
tree | fdf3fe49bf6d6478efde1c30ff5f7aa0779080f5 /drivers/usb/host/uhci-q.c | |
parent | dfd1e53777afe1050e3a0a3f0dd063a64242b818 (diff) |
USB: remove Iso status value in uhci-hcd
This patch (968) changes the way uhci-hcd reports status for
Isochronous URBs. Until now urb->status has been set to the last
detected error code. But other HCDs don't do this; they leave the
status set to 0 and report errors only in the individual iso packet
descriptors. So this patch removes the extra computation and makes
uhci-hcd behave like the others.
Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/usb/host/uhci-q.c')
-rw-r--r-- | drivers/usb/host/uhci-q.c | 11 |
1 files changed, 3 insertions, 8 deletions
diff --git a/drivers/usb/host/uhci-q.c b/drivers/usb/host/uhci-q.c index bff200cb3d2e..793a04685ef4 100644 --- a/drivers/usb/host/uhci-q.c +++ b/drivers/usb/host/uhci-q.c | |||
@@ -1324,7 +1324,6 @@ static int uhci_submit_isochronous(struct uhci_hcd *uhci, struct urb *urb, | |||
1324 | if (list_empty(&qh->queue)) { | 1324 | if (list_empty(&qh->queue)) { |
1325 | qh->iso_packet_desc = &urb->iso_frame_desc[0]; | 1325 | qh->iso_packet_desc = &urb->iso_frame_desc[0]; |
1326 | qh->iso_frame = urb->start_frame; | 1326 | qh->iso_frame = urb->start_frame; |
1327 | qh->iso_status = 0; | ||
1328 | } | 1327 | } |
1329 | 1328 | ||
1330 | qh->skel = SKEL_ISO; | 1329 | qh->skel = SKEL_ISO; |
@@ -1361,18 +1360,15 @@ static int uhci_result_isochronous(struct uhci_hcd *uhci, struct urb *urb) | |||
1361 | qh->iso_packet_desc->actual_length = actlength; | 1360 | qh->iso_packet_desc->actual_length = actlength; |
1362 | qh->iso_packet_desc->status = status; | 1361 | qh->iso_packet_desc->status = status; |
1363 | } | 1362 | } |
1364 | 1363 | if (status) | |
1365 | if (status) { | ||
1366 | urb->error_count++; | 1364 | urb->error_count++; |
1367 | qh->iso_status = status; | ||
1368 | } | ||
1369 | 1365 | ||
1370 | uhci_remove_td_from_urbp(td); | 1366 | uhci_remove_td_from_urbp(td); |
1371 | uhci_free_td(uhci, td); | 1367 | uhci_free_td(uhci, td); |
1372 | qh->iso_frame += qh->period; | 1368 | qh->iso_frame += qh->period; |
1373 | ++qh->iso_packet_desc; | 1369 | ++qh->iso_packet_desc; |
1374 | } | 1370 | } |
1375 | return qh->iso_status; | 1371 | return 0; |
1376 | } | 1372 | } |
1377 | 1373 | ||
1378 | static int uhci_urb_enqueue(struct usb_hcd *hcd, | 1374 | static int uhci_urb_enqueue(struct usb_hcd *hcd, |
@@ -1517,7 +1513,6 @@ __acquires(uhci->lock) | |||
1517 | 1513 | ||
1518 | qh->iso_packet_desc = &nurb->iso_frame_desc[0]; | 1514 | qh->iso_packet_desc = &nurb->iso_frame_desc[0]; |
1519 | qh->iso_frame = nurb->start_frame; | 1515 | qh->iso_frame = nurb->start_frame; |
1520 | qh->iso_status = 0; | ||
1521 | } | 1516 | } |
1522 | 1517 | ||
1523 | /* Take the URB off the QH's queue. If the queue is now empty, | 1518 | /* Take the URB off the QH's queue. If the queue is now empty, |
@@ -1586,7 +1581,7 @@ static void uhci_scan_qh(struct uhci_hcd *uhci, struct uhci_qh *qh) | |||
1586 | } | 1581 | } |
1587 | 1582 | ||
1588 | uhci_giveback_urb(uhci, qh, urb); | 1583 | uhci_giveback_urb(uhci, qh, urb); |
1589 | if (status < 0 && qh->type != USB_ENDPOINT_XFER_ISOC) | 1584 | if (status < 0) |
1590 | break; | 1585 | break; |
1591 | } | 1586 | } |
1592 | 1587 | ||