diff options
author | Dmitri Epshtein <dima@marvell.com> | 2009-12-14 10:17:34 -0500 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2010-03-02 17:53:13 -0500 |
commit | 22e186948a262c9cd377fb43aa50bb3c3f01c468 (patch) | |
tree | af089f6c1eeac5d5d50783f08b6a4deb262259c8 /drivers/usb/host/ehci-sched.c | |
parent | d63c66d2d08f52487f3ef32f1c9b1231d848966b (diff) |
USB: ehci: fix audio record functionality for some Full speed sound blaster devices
This patch fix audio record functionality for some Full speed sound blaster devices.
Issue: Sometimes transaction complete indication is coming from HW one frame later.
Solution: If scan_periodic process now frame or previous frame now-1 and sitd transaction
is not finished yet, exit scan_periodic function and check the same transaction in the next frame.
Signed-off-by: Dimitry Epshtein <dima@marvell.com>
Signed-off-by: Saeed Bishara <saeed@marvell.com>
Cc: David Brownell <dbrownell@users.sourceforge.net>
Cc: Alan Stern <stern@rowland.harvard.edu>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/usb/host/ehci-sched.c')
-rw-r--r-- | drivers/usb/host/ehci-sched.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/drivers/usb/host/ehci-sched.c b/drivers/usb/host/ehci-sched.c index e7a3b087083f..39340ae00ac4 100644 --- a/drivers/usb/host/ehci-sched.c +++ b/drivers/usb/host/ehci-sched.c | |||
@@ -2324,9 +2324,13 @@ restart: | |||
2324 | * No need to check for activity unless the | 2324 | * No need to check for activity unless the |
2325 | * frame is current. | 2325 | * frame is current. |
2326 | */ | 2326 | */ |
2327 | if (frame == clock_frame && live && | 2327 | if (((frame == clock_frame) || |
2328 | (q.sitd->hw_results & | 2328 | (((frame + 1) % ehci->periodic_size) |
2329 | SITD_ACTIVE(ehci))) { | 2329 | == clock_frame)) |
2330 | && live | ||
2331 | && (q.sitd->hw_results & | ||
2332 | SITD_ACTIVE(ehci))) { | ||
2333 | |||
2330 | incomplete = true; | 2334 | incomplete = true; |
2331 | q_p = &q.sitd->sitd_next; | 2335 | q_p = &q.sitd->sitd_next; |
2332 | hw_p = &q.sitd->hw_next; | 2336 | hw_p = &q.sitd->hw_next; |