aboutsummaryrefslogtreecommitdiffstats
path: root/sound/usb/usbaudio.c
diff options
context:
space:
mode:
authorPavel Machek <pavel@suse.cz>2008-04-14 07:12:47 -0400
committerTakashi Iwai <tiwai@suse.de>2008-04-24 06:00:33 -0400
commitb9d43bcd061956c8144bcb453d07d13236b6ab28 (patch)
treea81f7f606db1ed1ea428b6ad4e5fb496fe6ecf1a /sound/usb/usbaudio.c
parenteaa9985b4edb5f8008998abdda8b85ddeba05f1f (diff)
[ALSA] usb audio: Fix another Dallas quirk
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 <pavel@suse.cz> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound/usb/usbaudio.c')
-rw-r--r--sound/usb/usbaudio.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/sound/usb/usbaudio.c b/sound/usb/usbaudio.c
index 5c40c031dd57..ff2e09a46133 100644
--- a/sound/usb/usbaudio.c
+++ b/sound/usb/usbaudio.c
@@ -2676,12 +2676,23 @@ static int parse_audio_endpoints(struct snd_usb_audio *chip, int iface_no)
2676 int format; 2676 int format;
2677 struct audioformat *fp; 2677 struct audioformat *fp;
2678 unsigned char *fmt, *csep; 2678 unsigned char *fmt, *csep;
2679 int num;
2679 2680
2680 dev = chip->dev; 2681 dev = chip->dev;
2681 2682
2682 /* parse the interface's altsettings */ 2683 /* parse the interface's altsettings */
2683 iface = usb_ifnum_to_if(dev, iface_no); 2684 iface = usb_ifnum_to_if(dev, iface_no);
2684 for (i = 0; i < iface->num_altsetting; i++) { 2685
2686 num = iface->num_altsetting;
2687
2688 /*
2689 * Dallas DS4201 workaround: It presents 5 altsettings, but the last
2690 * one misses syncpipe, and does not produce any sound.
2691 */
2692 if (chip->usb_id == USB_ID(0x04fa, 0x4201))
2693 num = 4;
2694
2695 for (i = 0; i < num; i++) {
2685 alts = &iface->altsetting[i]; 2696 alts = &iface->altsetting[i];
2686 altsd = get_iface_desc(alts); 2697 altsd = get_iface_desc(alts);
2687 /* skip invalid one */ 2698 /* skip invalid one */