That does the trick.  Here's a patch against 0.9.5.

I don't know if this is related, but one thing I've been puzzling over 
is that half the time after I plug in the audiophile I get static 
instead of sound.  I have to unload alsa and plug it in again.  (As I 
mentioned before, I always get static if I load the alsa modules 
explicitly).

Ben

On Wednesday 23 July 2003 2:17 am, Takashi Iwai wrote:
> At Wed, 23 Jul 2003 02:05:50 -0800,
>
> Ben Saylor wrote:
> > > ok, then it supports other sample rates :)
> > >
> > > about the symptom: do you mean that the playback gets too fast
> > > with the lower sample rate,
> >
> > Yes.  i.e. it will play a 44100 hz or whatever stream, but playback
> > is too fast.
>
> so apparently we need some workaround (as found below line 2291 of
> usbaudio.c).
> please try to check the product and vendor id and set
>       fp->attribtes |= EP_CS_ATTR_SAMPLERATE
> with that condition.
> if it works, please give me the patch.
>
>
> thanks,
>
> Takashi
--- alsa-driver-0.9.5/alsa-kernel/usb/usbaudio.c	2003-06-23 04:41:36.000000000 -0800
+++ alsa-driver-0.9.5-brs/alsa-kernel/usb/usbaudio.c	2003-07-23 12:53:19.000000000 -0800
@@ -2295,6 +2295,14 @@
 			 */
 			fp->attributes &= ~EP_CS_ATTR_SAMPLE_RATE;
 		}
+
+		/* workaround for M-Audio Audiophile USB */
+		if (dev->descriptor.idVendor == 0x0763 &&
+		    dev->descriptor.idProduct == 0x2003) {
+			/* doesn't set the sample rate attribute, but supports it */
+			fp->attributes |= EP_CS_ATTR_SAMPLE_RATE;
+		}
+
 		/*
 		 * plantronics headset and Griffin iMic have set adaptive-in
 		 * although it's really not...
@@ -2695,11 +2703,6 @@
 	if (quirk && quirk->ifnum != QUIRK_ANY_INTERFACE && ifnum != quirk->ifnum)
 		goto __err_val;
 
-	if (usb_set_configuration(dev, get_cfg_desc(config)->bConfigurationValue) < 0) {
-		snd_printk(KERN_ERR "cannot set configuration (value 0x%x)\n", get_cfg_desc(config)->bConfigurationValue);
-		goto __err_val;
-	}
-
 	/* SB Extigy needs special boot-up sequence */
 	/* if more models come, this will go to the quirk list. */
 	if (dev->descriptor.idVendor == 0x041e && dev->descriptor.idProduct == 0x3000) {
@@ -2729,6 +2732,11 @@
 		/* it's a fresh one.
 		 * now look for an empty slot and create a new card instance
 		 */
+		if (usb_set_configuration(dev, get_cfg_desc(config)->bConfigurationValue) < 0) {
+			snd_printk(KERN_ERR "cannot set configuration (value 0x%x)\n", get_cfg_desc(config)->bConfigurationValue);
+			goto __err_val;
+		}
+
 		for (i = 0; i < SNDRV_CARDS; i++)
 			if (enable[i] && ! usb_chip[i] &&
 			    (vid[i] == -1 || vid[i] == dev->descriptor.idVendor) &&

Reply via email to