[alsa-devel] USB hardware that supports implicit feedback?

Eldad Zack eldad at fogrefinery.com
Fri Nov 16 03:10:40 CET 2012


Hi Daniel,

On Thu, 15 Nov 2012, Daniel Griscom wrote:
> The audio output stream (from the computer to my device) runs at a few frames
> per second higher or lower rate than that of the input stream (from my device
> to the computer). The actual difference seems to be stable on a specific
> machine, but varies greatly between machines (I've seen differences from +7fps
> to -2fps; I presume this is due to differences in CPU clock frequencies).

Looking at the lsusb output, I assume that the sink/source coupling 
doesn't work, because it's not in an interface group.

> >I'm not an ALSA dev, but I recently posted a series of patches for the
> >M-Audio Fast Track C400, which uses the implicit feedback code that was
> >already in the tree for other devices.
> So, this device uses implicit feedback to tell ALSA to send output data at the
> same rate as its input data? Very cool; I've ordered one to test.

Yes, and it seems to work very good with my hardware. But I'm not actually sure
I want to recommend a device with broken descriptors...

Try this, it *MIGHT* work (applies against mainline 3.7-rc5) - 
completely untested, btw.

Cheers,
Eldad

diff --git a/sound/usb/pcm.c b/sound/usb/pcm.c
index 5c12a3f..fd766a3 100644
--- a/sound/usb/pcm.c
+++ b/sound/usb/pcm.c
@@ -372,6 +372,19 @@ static int set_format(struct snd_usb_substream *subs, struct audioformat *fmt)
 			alts = &iface->altsetting[1];
 			goto add_sync_ep;
 		}
+		break;
+	case USB_ID(0x03eb, 0x2311): /* AMTEL === UNTESTED === */
+		if (is_playback) {
+			implicit_fb = 1;
+			ep = 0x82;
+			iface = usb_ifnum_to_if(dev, 2);
+
+			if (!iface || iface->num_altsetting == 0)
+				return -EINVAL;
+
+			alts = &iface->altsetting[1];
+			goto add_sync_ep;
+		}
 	}
 
 	if (((is_playback && attr == USB_ENDPOINT_SYNC_ASYNC) ||



More information about the Alsa-devel mailing list