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 | |
| 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>
| -rw-r--r-- | drivers/usb/host/uhci-hcd.h | 1 | ||||
| -rw-r--r-- | drivers/usb/host/uhci-q.c | 11 |
2 files changed, 3 insertions, 9 deletions
diff --git a/drivers/usb/host/uhci-hcd.h b/drivers/usb/host/uhci-hcd.h index 1b3d23406ac4..e46d2b0203cb 100644 --- a/drivers/usb/host/uhci-hcd.h +++ b/drivers/usb/host/uhci-hcd.h | |||
| @@ -146,7 +146,6 @@ struct uhci_qh { | |||
| 146 | short phase; /* Between 0 and period-1 */ | 146 | short phase; /* Between 0 and period-1 */ |
| 147 | short load; /* Periodic time requirement, in us */ | 147 | short load; /* Periodic time requirement, in us */ |
| 148 | unsigned int iso_frame; /* Frame # for iso_packet_desc */ | 148 | unsigned int iso_frame; /* Frame # for iso_packet_desc */ |
| 149 | int iso_status; /* Status for Isochronous URBs */ | ||
| 150 | 149 | ||
| 151 | int state; /* QH_STATE_xxx; see above */ | 150 | int state; /* QH_STATE_xxx; see above */ |
| 152 | int type; /* Queue type (control, bulk, etc) */ | 151 | int type; /* Queue type (control, bulk, etc) */ |
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 | ||
