summaryrefslogtreecommitdiffstats
path: root/sys/dev
diff options
context:
space:
mode:
authorn_hibma <n_hibma@FreeBSD.org>2000-01-24 10:23:57 +0000
committern_hibma <n_hibma@FreeBSD.org>2000-01-24 10:23:57 +0000
commit5bef12b54eb3da002e5b2f34ca1209bfbfdb7daf (patch)
tree6e11704b6b0633faf25f8e849824f570b3da04c6 /sys/dev
parentf0daab572fa987771498410c18d67065203e7e6a (diff)
downloadFreeBSD-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.c16
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;
OpenPOWER on IntegriCloud