From fd4f68ca924f2d36905cd09b9e1a8c98196e4aa0 Mon Sep 17 00:00:00 2001 From: yangkai Date: Tue, 31 May 2011 16:17:15 +0800 Subject: [PATCH] fix a bug for hub split transaction --- drivers/usb/dwc_otg/dwc_otg_hcd_intr.c | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/drivers/usb/dwc_otg/dwc_otg_hcd_intr.c b/drivers/usb/dwc_otg/dwc_otg_hcd_intr.c index d0b892a19717..5d68cf2d6c0b 100755 --- a/drivers/usb/dwc_otg/dwc_otg_hcd_intr.c +++ b/drivers/usb/dwc_otg/dwc_otg_hcd_intr.c @@ -196,22 +196,21 @@ int32_t dwc_otg_hcd_handle_sof_intr (dwc_otg_hcd_t *_hcd) * fix bug for alcro hub * do not send csplit after start_split_frame+4 */ + qtd = list_entry(qh->qtd_list.next, dwc_otg_qtd_t, qtd_list_entry); if((qh->do_split)&&dwc_frame_num_gt(_hcd->frame_number, - dwc_frame_num_inc(qh->start_split_frame, 4))) + dwc_frame_num_inc(qh->start_split_frame, 4))&&(qtd->complete_split)) { - qtd = list_entry(qh->qtd_list.next, dwc_otg_qtd_t, qtd_list_entry); - if ((qh->do_split) &&(qtd->complete_split)) - { - qtd->complete_split = 0; - - qh->sched_frame = dwc_frame_num_inc(qh->start_split_frame, - qh->interval); - if (dwc_frame_num_le(qh->sched_frame, _hcd->frame_number)) { - qh->sched_frame = _hcd->frame_number; - } - qh->sched_frame |= 0x7; - qh->start_split_frame = qh->sched_frame; + DWC_PRINT("frame_number 0x%x, start 0x%x, complete: %x", + _hcd->frame_number, qh->start_split_frame, qtd->complete_split); + qtd->complete_split = 0; + + qh->sched_frame = dwc_frame_num_inc(qh->start_split_frame, + qh->interval); + if (dwc_frame_num_le(qh->sched_frame, _hcd->frame_number)) { + qh->sched_frame = _hcd->frame_number; } + qh->sched_frame |= 0x7; + qh->start_split_frame = qh->sched_frame; } else { -- 2.34.1