summaryrefslogtreecommitdiff
path: root/drivers/staging/line6
diff options
context:
space:
mode:
authorStefan Hajnoczi <stefanha@gmail.com>2011-11-23 08:20:44 (GMT)
committerGreg Kroah-Hartman <gregkh@suse.de>2011-11-27 00:14:12 (GMT)
commit3b08db37cb04a80dccac8c2d7b03690b5f179487 (patch)
tree00f8b478eba19a6f785c1530d954c4c17124d3f3 /drivers/staging/line6
parent1dc403ffecae26ae52414488e326761a9ae10de7 (diff)
downloadlinux-fsl-qoriq-3b08db37cb04a80dccac8c2d7b03690b5f179487.tar.xz
staging: line6: use smallest iso ep packet size
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>
Diffstat (limited to 'drivers/staging/line6')
-rw-r--r--drivers/staging/line6/pcm.c11
1 files 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;