svn commit: r250987 - stable/9/sys/dev/sound/usb
Hans Petter Selasky
hselasky at FreeBSD.org
Sat May 25 17:16:32 UTC 2013
Author: hselasky
Date: Sat May 25 17:16:31 2013
New Revision: 250987
URL: http://svnweb.freebsd.org/changeset/base/250987
Log:
MFC r250763 and r250765:
Fix some USB audio device issues.
PR: usb/178722
Modified:
stable/9/sys/dev/sound/usb/uaudio.c
Directory Properties:
stable/9/sys/ (props changed)
stable/9/sys/dev/ (props changed)
Modified: stable/9/sys/dev/sound/usb/uaudio.c
==============================================================================
--- stable/9/sys/dev/sound/usb/uaudio.c Sat May 25 17:09:58 2013 (r250986)
+++ stable/9/sys/dev/sound/usb/uaudio.c Sat May 25 17:16:31 2013 (r250987)
@@ -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",
@@ -5565,7 +5592,6 @@ umidi_open(struct usb_fifo *fifo, int ff
}
/* clear stall first */
mtx_lock(&chan->mtx);
- usbd_xfer_set_stall(chan->xfer[UMIDI_TX_TRANSFER]);
chan->write_open_refcount++;
sub->write_open = 1;
@@ -5664,9 +5690,6 @@ umidi_probe(device_t dev)
mtx_lock(&chan->mtx);
- /* clear stall first */
- usbd_xfer_set_stall(chan->xfer[UMIDI_RX_TRANSFER]);
-
/*
* NOTE: At least one device will not work properly unless the
* BULK IN pipe is open all the time. This might have to do
@@ -5771,8 +5794,11 @@ tr_setup:
break;
default: /* Error */
+
+ DPRINTF("error=%s\n", usbd_errstr(error));
+
if (error != USB_ERR_CANCELLED) {
- /* try clear stall first */
+ /* try to clear stall first */
usbd_xfer_set_stall(xfer);
goto tr_setup;
}
More information about the svn-src-stable-9
mailing list