Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 18 May 2013 07:03:07 +0000 (UTC)
From:      Hans Petter Selasky <hselasky@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r250763 - head/sys/dev/sound/usb
Message-ID:  <201305180703.r4I737pV031822@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: hselasky
Date: Sat May 18 07:03:06 2013
New Revision: 250763
URL: http://svnweb.freebsd.org/changeset/base/250763

Log:
  Fix issue with "Logitech Webcam C525":
  
  Set a valid alternate interface setting
  when enumerating USB audio devices else
  the device mentioned will not work like
  expected.
  
  PR:		usb/178722
  MFC after:	1 week

Modified:
  head/sys/dev/sound/usb/uaudio.c

Modified: head/sys/dev/sound/usb/uaudio.c
==============================================================================
--- head/sys/dev/sound/usb/uaudio.c	Sat May 18 05:48:46 2013	(r250762)
+++ head/sys/dev/sound/usb/uaudio.c	Sat May 18 07:03:06 2013	(r250763)
@@ -868,6 +868,7 @@ uaudio_attach(device_t dev)
 	struct usb_attach_arg *uaa = device_get_ivars(dev);
 	struct uaudio_softc *sc = device_get_softc(dev);
 	struct usb_interface_descriptor *id;
+	usb_error_t err;
 	device_t child;
 
 	sc->sc_play_chan.priv_sc = sc;
@@ -925,6 +926,19 @@ uaudio_attach(device_t dev)
 
 	if (sc->sc_play_chan.num_alt > 0) {
 		uint8_t x;
+
+		/*
+		 * Need to set a default alternate interface, else
+		 * some USB audio devices might go into an infinte
+		 * re-enumeration loop:
+		 */
+		err = usbd_set_alt_interface_index(sc->sc_udev,
+		    sc->sc_play_chan.usb_alt[0].iface_index,
+		    sc->sc_play_chan.usb_alt[0].iface_alt_index);
+		if (err) {
+			DPRINTF("setting of alternate index failed: %s!\n",
+			    usbd_errstr(err));
+		}
 		for (x = 0; x != sc->sc_play_chan.num_alt; x++) {
 			device_printf(dev, "Play: %d Hz, %d ch, %s format, "
 			    "2x8ms buffer.\n",
@@ -938,6 +952,19 @@ uaudio_attach(device_t dev)
 
 	if (sc->sc_rec_chan.num_alt > 0) {
 		uint8_t x;
+
+		/*
+		 * Need to set a default alternate interface, else
+		 * some USB audio devices might go into an infinte
+		 * re-enumeration loop:
+		 */
+		err = usbd_set_alt_interface_index(sc->sc_udev,
+		    sc->sc_rec_chan.usb_alt[0].iface_index,
+		    sc->sc_rec_chan.usb_alt[0].iface_alt_index);
+		if (err) {
+			DPRINTF("setting of alternate index failed: %s!\n",
+			    usbd_errstr(err));
+		}
 		for (x = 0; x != sc->sc_rec_chan.num_alt; x++) {
 			device_printf(dev, "Record: %d Hz, %d ch, %s format, "
 			    "2x8ms buffer.\n",



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201305180703.r4I737pV031822>