1
0
mirror of https://git.FreeBSD.org/src.git synced 2024-12-22 11:17:19 +00:00

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
This commit is contained in:
Hans Petter Selasky 2013-05-18 07:03:06 +00:00
parent 21278efe5b
commit 33da3daa40
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=250763

View File

@ -868,6 +868,7 @@ uaudio_attach(device_t dev)
struct usb_attach_arg *uaa = device_get_ivars(dev); struct usb_attach_arg *uaa = device_get_ivars(dev);
struct uaudio_softc *sc = device_get_softc(dev); struct uaudio_softc *sc = device_get_softc(dev);
struct usb_interface_descriptor *id; struct usb_interface_descriptor *id;
usb_error_t err;
device_t child; device_t child;
sc->sc_play_chan.priv_sc = sc; sc->sc_play_chan.priv_sc = sc;
@ -925,6 +926,19 @@ uaudio_attach(device_t dev)
if (sc->sc_play_chan.num_alt > 0) { if (sc->sc_play_chan.num_alt > 0) {
uint8_t x; 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++) { for (x = 0; x != sc->sc_play_chan.num_alt; x++) {
device_printf(dev, "Play: %d Hz, %d ch, %s format, " device_printf(dev, "Play: %d Hz, %d ch, %s format, "
"2x8ms buffer.\n", "2x8ms buffer.\n",
@ -938,6 +952,19 @@ uaudio_attach(device_t dev)
if (sc->sc_rec_chan.num_alt > 0) { if (sc->sc_rec_chan.num_alt > 0) {
uint8_t x; 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++) { for (x = 0; x != sc->sc_rec_chan.num_alt; x++) {
device_printf(dev, "Record: %d Hz, %d ch, %s format, " device_printf(dev, "Record: %d Hz, %d ch, %s format, "
"2x8ms buffer.\n", "2x8ms buffer.\n",