summaryrefslogtreecommitdiffstats
path: root/sys/dev/sound
diff options
context:
space:
mode:
authorhselasky <hselasky@FreeBSD.org>2013-05-18 07:03:06 +0000
committerhselasky <hselasky@FreeBSD.org>2013-05-18 07:03:06 +0000
commitc987c2e1e2f890213c17b74c869ded5ca392d53b (patch)
treee568b3cce866d0b9481a16f20d17b820aec5bc6e /sys/dev/sound
parent960402d8a4c86e0690805d08a9234d62a335662e (diff)
downloadFreeBSD-src-c987c2e1e2f890213c17b74c869ded5ca392d53b.zip
FreeBSD-src-c987c2e1e2f890213c17b74c869ded5ca392d53b.tar.gz
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
Diffstat (limited to 'sys/dev/sound')
-rw-r--r--sys/dev/sound/usb/uaudio.c27
1 files changed, 27 insertions, 0 deletions
diff --git a/sys/dev/sound/usb/uaudio.c b/sys/dev/sound/usb/uaudio.c
index 63e9f43..f778afa 100644
--- a/sys/dev/sound/usb/uaudio.c
+++ b/sys/dev/sound/usb/uaudio.c
@@ -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",
OpenPOWER on IntegriCloud