Re: Sound Blaster USB X-Fi configuration problem

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Alan,
thanks for the fast response and useful infos. Unfortunately your patch
does not work but triggered by it I made it working.
The changes as as follows:

First we should diverse between Audigy and X-Fi in snd_usb_apply_boot_quirk:

	case USB_ID(0x041e, 0x30df):
		/* X-Fi Surround 5.1 */
		return snd_usb_sb_x_fi_boot_quirk(dev);

and then additional function

static int snd_usb_sb_x_fi_boot_quirk(struct usb_device *dev)
{
	u16 buf = 1;

	snd_printk(KERN_ERR "X-Fi Surround 5.1 newer quirk\n");

	snd_usb_ctl_msg(dev, usb_rcvctrlpipe(dev, 0), 0x2a,
			USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_OTHER,
			0, 0, &buf, 2);
	snd_usb_ctl_msg(dev, usb_rcvctrlpipe(dev, 0), 0x2a,
			USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_OTHER,
			0, 0, &buf, 2);
	if (buf == 0) {
		snd_usb_ctl_msg(dev, usb_sndctrlpipe(dev, 0), 0x29,
				USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_OTHER,
				1, 2000, NULL, 0);
  	usb_reset_device(dev);
		return -EAGAIN; //-ENODEV;
	}
	return 0;
}

about this quirk function I am not sure. I tried to follow recorded
initialization process from WinXP running on virtual machine. I made it
finally running but without real understanding why it should be like
that. I noticed that initialization process takes a while (~2 sec.). I
do not care about that. If you think there is a smarter way to do it
just suggest and I will test it.

The patch combining these two is as follows:

===================================================================

mgrecki@mgpc:/usr/src/linux-3.9.2/sound/usb$ diff -c quirks.c.org quirks.c

===================================================================

*** quirks.c.org	2013-07-20 00:06:51.246927975 +0200
--- quirks.c	2013-07-20 00:07:28.067690027 +0200
***************
*** 374,379 ****
--- 374,401 ----
  	return 0;
  }

+ static int snd_usb_sb_x_fi_boot_quirk(struct usb_device *dev)
+ {
+ 	u16 buf = 1;
+
+ 	snd_printk(KERN_ERR "X-Fi Surround 5.1 newer quirk\n");
+
+ 	snd_usb_ctl_msg(dev, usb_rcvctrlpipe(dev, 0), 0x2a,
+ 			USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_OTHER,
+ 			0, 0, &buf, 2);
+ 	snd_usb_ctl_msg(dev, usb_rcvctrlpipe(dev, 0), 0x2a,
+ 			USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_OTHER,
+ 			0, 0, &buf, 2);
+ 	if (buf == 0) {
+ 		snd_usb_ctl_msg(dev, usb_sndctrlpipe(dev, 0), 0x29,
+ 				USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_OTHER,
+ 				1, 2000, NULL, 0);
+   	usb_reset_device(dev);
+ 		return -EAGAIN; //-ENODEV;
+ 	}
+ 	return 0;
+ }
+
  static int snd_usb_fasttrackpro_boot_quirk(struct usb_device *dev)
  {
  	int err;
***************
*** 733,738 ****
--- 755,764 ----
  		/* SB Audigy 2 NX needs its own boot-up magic, too */
   		return snd_usb_audigy2nx_boot_quirk(dev);

+ 	case USB_ID(0x041e, 0x30df):
+ 		/* X-Fi Surround 5.1 quirk for HS operation*/
+ 			return snd_usb_sb_x_fi_boot_quirk(dev);
+
  	case USB_ID(0x10f5, 0x0200):
  		/* C-Media CM106 / Turtle Beach Audio Advantage Roadie */
  		return snd_usb_cm106_boot_quirk(dev);

===================================================================

In case you would like me to perform additional tests just let me know.

Many thanks for your help. That was exactly what I was looking for.

Mariusz Grecki

PS. I still do not understand why the card was initialized to HS without
that. I really seen that once... But this is probably not important,
just a curiosity...


On 04.07.2013 18:26, Alan Stern wrote:
> As Oliver Neukum suggested earlier, your device appears to need the
> same magic message as the SoundBlaster Audigy 2 NX.  This patch for
> 3.10 should do it.  Let me know how it works.


> 
> Index: usb-3.10/sound/usb/quirks.c
> ===================================================================
> --- usb-3.10.orig/sound/usb/quirks.c
> +++ usb-3.10/sound/usb/quirks.c
> @@ -744,6 +744,8 @@ int snd_usb_apply_boot_quirk(struct usb_
>  
>  	case USB_ID(0x041e, 0x3020):
>  		/* SB Audigy 2 NX needs its own boot-up magic, too */
> +	case USB_ID(0x041e, 0x30df):
> +		/* Same for the X-Fi Surround 5.1 */
>  		return snd_usb_audigy2nx_boot_quirk(dev);
>  
>  	case USB_ID(0x10f5, 0x0200):
> 


-- 
Best regards

Mariusz Grecki

 _____________________________________________________
|                                                     |
| Dr. Mariusz Grecki                                  |
| Deutsches Elektronen-Synchrotron DESY               |
| Notkestraße 85, 22607 Hamburg, Geb. 3/109a          |
| tel.: +49 40 89985489      fax: +49 40 89983282     |
| e-mail: mariusz.grecki@xxxxxxx                      |
| pgp key: B03772F8/pool.sks-keyservers.net           |
|_____________________________________________________|
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux