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

Daniel Griscom griscom at suitable.com
Fri Nov 16 03:41:35 CET 2012

At 3:08 AM +0100 11/16/12, Eldad Zack wrote:
>I think that Autodiscovery should fail with this amtel device because
>the number of endpoints is 1 for the playback ep (this is what I encountered
>with the C400).
>Maybe a info message could be added in case the attributes do say
>implicit feedback, but bNumEndpoints < 2?

Good point. I'll look into changing that.

At 3:10 AM +0100 11/16/12, Eldad Zack wrote:
>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.

And, good point number 2.

>  > >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.
>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) ||

Very, ultra, mega-cool. Even if it doesn't work as-is, this will give 
me big hints on how to get it done.

Thanks for all the help,

Daniel T. Griscom             griscom at suitable.com
Suitable Systems              http://www.suitable.com/
1 Centre Street, Suite 204    (781) 665-0053
Wakefield, MA  01880-2400

More information about the Alsa-devel mailing list