45 lines
1.7 KiB
Diff
45 lines
1.7 KiB
Diff
From: Stefan Hajnoczi <stefanha@gmail.com>
|
|
Date: Wed, 23 Nov 2011 08:20:44 +0000
|
|
Subject: [004/106] staging: line6: use smallest iso ep packet size
|
|
|
|
commit 3b08db37cb04a80dccac8c2d7b03690b5f179487 upstream.
|
|
|
|
The POD HD300 isochronous endpoints have different max packet sizes for
|
|
read and write. Using the read endpoint max packet size may be too
|
|
large for the write endpoint. Instead we should use the minimum of both
|
|
endpoints to be sure the size is acceptable.
|
|
|
|
In theory we could decouple read and write packet sizes but the driver
|
|
currently uses a single size which I chose not to mess with since other
|
|
features like software monitoring may depend on a single packet size for
|
|
both endpoints.
|
|
|
|
Signed-off-by: Stefan Hajnoczi <stefanha@gmail.com>
|
|
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
|
|
---
|
|
drivers/staging/line6/pcm.c | 11 ++++++++---
|
|
1 file changed, 8 insertions(+), 3 deletions(-)
|
|
|
|
diff --git a/drivers/staging/line6/pcm.c b/drivers/staging/line6/pcm.c
|
|
index f56c642..ae98434 100644
|
|
--- a/drivers/staging/line6/pcm.c
|
|
+++ b/drivers/staging/line6/pcm.c
|
|
@@ -452,9 +452,14 @@ int line6_init_pcm(struct usb_line6 *line6,
|
|
line6pcm->line6 = line6;
|
|
line6pcm->ep_audio_read = ep_read;
|
|
line6pcm->ep_audio_write = ep_write;
|
|
- line6pcm->max_packet_size = usb_maxpacket(line6->usbdev,
|
|
- usb_rcvintpipe(line6->usbdev,
|
|
- ep_read), 0);
|
|
+
|
|
+ /* Read and write buffers are sized identically, so choose minimum */
|
|
+ line6pcm->max_packet_size = min(
|
|
+ usb_maxpacket(line6->usbdev,
|
|
+ usb_rcvisocpipe(line6->usbdev, ep_read), 0),
|
|
+ usb_maxpacket(line6->usbdev,
|
|
+ usb_sndisocpipe(line6->usbdev, ep_write), 1));
|
|
+
|
|
line6pcm->properties = properties;
|
|
line6->line6pcm = line6pcm;
|
|
|