svn commit: r282652 - head/sys/dev/sound/usb

Hans Petter Selasky hselasky at FreeBSD.org
Fri May 8 17:48:49 UTC 2015


Author: hselasky
Date: Fri May  8 17:48:48 2015
New Revision: 282652
URL: https://svnweb.freebsd.org/changeset/base/282652

Log:
  Ensure the USB audio driver doesn't attach twice on the same USB
  device by grabbing all the USB audio device interfaces.
  
  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	Fri May  8 17:07:11 2015	(r282651)
+++ head/sys/dev/sound/usb/uaudio.c	Fri May  8 17:48:48 2015	(r282652)
@@ -1575,6 +1575,19 @@ uaudio_chan_fill_info_sub(struct uaudio_
 			asf1d.v1 = NULL;
 			ed1 = NULL;
 			sed.v1 = NULL;
+
+			/*
+			 * There can only be one USB audio instance
+			 * per USB device. Grab all USB audio
+			 * interfaces on this USB device so that we
+			 * don't attach USB audio twice:
+			 */
+			if (alt_index == 0 && curidx != sc->sc_mixer_iface_index &&
+			    (id->bInterfaceClass == UICLASS_AUDIO || audio_if != 0 ||
+			    midi_if != 0)) {
+				usbd_set_parent_iface(sc->sc_udev, curidx,
+				    sc->sc_mixer_iface_index);
+			}
 		}
 
 		if (audio_if == 0) {
@@ -1810,9 +1823,6 @@ uaudio_chan_fill_info_sub(struct uaudio_
 		chan_alt->iface_index = curidx;
 		chan_alt->iface_alt_index = alt_index;
 
-		usbd_set_parent_iface(sc->sc_udev, curidx,
-		    sc->sc_mixer_iface_index);
-
 		if (ep_dir == UE_DIR_IN)
 			chan_alt->usb_cfg = uaudio_cfg_record;
 		else


More information about the svn-src-head mailing list