[ALSA] usb-audio: fix packets per URB calculation for playback

USB generic driver
When determining how many packets are needed for one period, we cannot
assume that all packets have their maximum size -- we always use the
nominal sample rate when sending data, and could use an even lower rate
when the endpoint uses frequency feedback.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
diff --git a/sound/usb/usbaudio.c b/sound/usb/usbaudio.c
index 9e38d3d..d28106e 100644
--- a/sound/usb/usbaudio.c
+++ b/sound/usb/usbaudio.c
@@ -938,7 +938,15 @@
 
 	/* decide how many packets to be used */
 	if (is_playback) {
-		total_packs = (period_bytes + maxsize - 1) / maxsize;
+		unsigned int minsize;
+		/* determine how small a packet can be */
+		minsize = (subs->freqn >> (16 - subs->datainterval))
+			  * (frame_bits >> 3);
+		/* with sync from device, assume it can be 25% lower */
+		if (subs->syncpipe)
+			minsize -= minsize >> 2;
+		minsize = max(minsize, 1u);
+		total_packs = (period_bytes + minsize - 1) / minsize;
 		if (total_packs < 2 * MIN_PACKS_URB)
 			total_packs = 2 * MIN_PACKS_URB;
 	} else {