From: Pavel Machek Dallas USB speakers are buggy in more than one way. One of configs they offer does not work at all. Signed-off-by: Pavel Machek Cc: Jaroslav Kysela Cc: Takashi Iwai Signed-off-by: Andrew Morton --- sound/usb/usbaudio.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff -puN sound/usb/usbaudio.c~usb-audio-fix-another-dallas-quirk sound/usb/usbaudio.c --- a/sound/usb/usbaudio.c~usb-audio-fix-another-dallas-quirk +++ a/sound/usb/usbaudio.c @@ -2676,12 +2676,23 @@ static int parse_audio_endpoints(struct int format; struct audioformat *fp; unsigned char *fmt, *csep; + int num; dev = chip->dev; /* parse the interface's altsettings */ iface = usb_ifnum_to_if(dev, iface_no); - for (i = 0; i < iface->num_altsetting; i++) { + + num = iface->num_altsetting; + + /* + * Dallas DS4201 workaround: It presents 5 altsettings, but the last + * one misses syncpipe, and does not produce any sound. + */ + if (chip->usb_id == USB_ID(0x04fa, 0x4201)) + num = 4; + + for (i = 0; i < num; i++) { alts = &iface->altsetting[i]; altsd = get_iface_desc(alts); /* skip invalid one */ _