PERFORCE change 155810 for review

Hans Petter Selasky hselasky at FreeBSD.org
Thu Jan 8 10:28:08 UTC 2009


http://perforce.freebsd.org/chv.cgi?CH=155810

Change 155810 by hselasky at hselasky_laptop001 on 2009/01/08 10:27:16

	
	Usability improvement. Make sure that setting
	power mode ON resurrects the device if powered OFF.
	Reported by: Alexander Best.

Affected files ...

.. //depot/projects/usb/src/sys/dev/usb2/core/usb2_generic.c#40 edit

Differences ...

==== //depot/projects/usb/src/sys/dev/usb2/core/usb2_generic.c#40 (text+ko) ====

@@ -1688,15 +1688,23 @@
 {
 	struct usb2_device *udev = f->udev;
 	int err;
+	uint8_t old_mode;
 
 	if ((udev == NULL) ||
 	    (udev->parent_hub == NULL)) {
 		return (EINVAL);
 	}
 	err = priv_check(curthread, PRIV_ROOT);
-	if (err) {
+	if (err)
 		return (err);
-	}
+
+	/* get old power mode */
+	old_mode = udev->power_mode;
+
+	/* if no change, then just return */
+	if (old_mode == mode)
+		return (0);
+
 	switch (mode) {
 	case USB_POWER_MODE_OFF:
 		/* get the device unconfigured */
@@ -1734,6 +1742,13 @@
 	if (err)
 		return (ENXIO);		/* I/O failure */
 
+	/* if we are powered off we need to re-enumerate first */
+	if (old_mode == USB_POWER_MODE_OFF) {
+		err = ugen_re_enumerate(f);
+		if (err)
+			return (err);
+	}
+
 	/* set new power mode */
 	usb2_set_power_mode(udev, mode);
 


More information about the p4-projects mailing list