diff options
author | n_hibma <n_hibma@FreeBSD.org> | 2000-01-24 10:23:57 +0000 |
---|---|---|
committer | n_hibma <n_hibma@FreeBSD.org> | 2000-01-24 10:23:57 +0000 |
commit | 5bef12b54eb3da002e5b2f34ca1209bfbfdb7daf (patch) | |
tree | 6e11704b6b0633faf25f8e849824f570b3da04c6 /sys/dev | |
parent | f0daab572fa987771498410c18d67065203e7e6a (diff) | |
download | FreeBSD-src-5bef12b54eb3da002e5b2f34ca1209bfbfdb7daf.zip FreeBSD-src-5bef12b54eb3da002e5b2f34ca1209bfbfdb7daf.tar.gz |
The previous fix for the USB ugen device set configuration ioctl()
has a slight error, and returns EIO way too often.
PR: 16315
Submitted by: Louis Mamakos <louie@TransSys.COM>
Diffstat (limited to 'sys/dev')
-rw-r--r-- | sys/dev/usb/ugen.c | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/sys/dev/usb/ugen.c b/sys/dev/usb/ugen.c index e810440..e3a23c6 100644 --- a/sys/dev/usb/ugen.c +++ b/sys/dev/usb/ugen.c @@ -209,8 +209,12 @@ ugen_set_config(sc, configno) * control endpoint is open or not. It is always present. */ for (endptno = 1; endptno < USB_MAX_ENDPOINTS; endptno++) - if (sc->sc_is_open[endptno]) + if (sc->sc_is_open[endptno]) { + DPRINTFN(1, + ("ugen_set_config: %s - endpoint %d is open\n", + USBDEVNAME(sc->sc_dev), endptno)); return (USBD_IN_USE); + } if (usbd_get_config_descriptor(dev)->bConfigurationValue != configno) { /* Avoid setting the current value. */ @@ -957,10 +961,14 @@ ugen_do_ioctl(sc, endpt, cmd, addr, flag, p) if (!(flag & FWRITE)) return (EPERM); err = ugen_set_config(sc, *(int *)addr); - if (err == USBD_IN_USE) - return(EBUSY); - else + switch (err) { + case USBD_NORMAL_COMPLETION: + break; + case USBD_IN_USE: + return (EBUSY); + default: return (EIO); + } break; case USB_GET_ALTINTERFACE: ai = (struct usb_alt_interface *)addr; |