=== modified file 'uspace/drv/bus/usb/ohci/ohci_regs.h'
--- /tmp/bzr-diff-XQWvaK/old/uspace/drv/bus/usb/ohci/ohci_regs.h	2011-05-18 20:24:22.578999000 +0200
+++ /home/orome/helenos/uspace/drv/bus/usb/ohci/ohci_regs.h	2011-06-23 12:43:38.755045000 +0200
@@ -137,8 +137,8 @@
 
 	/** The first root hub control register */
 	volatile uint32_t rh_desc_a;
-#define RHDA_NDS_MASK (0xff) /* Number of downstream ports, max 15 */
-#define RHDA_NDS_SHIFT (0)
+#define RHDA_NDP_MASK  (0xff)    /* Number of downstream ports, max 15 */
+#define RHDA_NDP_SHIFT (0)
 #define RHDA_PSM_FLAG  (1 << 8)  /* Power switching mode: 0-global, 1-per port*/
 #define RHDA_NPS_FLAG  (1 << 9)  /* No power switch: 1-power on, 0-use PSM*/
 #define RHDA_DT_FLAG   (1 << 10) /* 1-Compound device, must be 0 */
=== modified file 'uspace/drv/bus/usb/ohci/root_hub.c'
--- /tmp/bzr-diff-XQWvaK/old/uspace/drv/bus/usb/ohci/root_hub.c	2011-06-18 21:18:41.516999000 +0200
+++ /home/orome/helenos/uspace/drv/bus/usb/ohci/root_hub.c	2011-06-23 12:56:42.434287917 +0200
@@ -218,13 +218,26 @@
 	assert(instance);
 	instance->registers = regs;
 	instance->port_count =
-	    (instance->registers->rh_desc_a >> RHDA_NDS_SHIFT) & RHDA_NDS_MASK;
+	    (instance->registers->rh_desc_a >> RHDA_NDP_SHIFT) & RHDA_NDP_MASK;
 	int opResult = rh_init_descriptors(instance);
 	if (opResult != EOK) {
 		return opResult;
 	}
-	// set port power mode to no-power-switching
+	/* Simulate unplug */
+
+	/* Enable power-switching */
+	instance->registers->rh_desc_a &= ~RHDA_NPS_FLAG;
+	/* Set power switch to global */
+	instance->registers->rh_desc_a &= ~RHDA_PSM_FLAG;
+	/* Shut down ports */
+	instance->registers->rh_status |= RHS_CLEAR_PORT_POWER;
+	async_usleep(10000);
+	instance->registers->rh_status |= RHS_SET_PORT_POWER;
+
+
+	/* Set port power mode to no-power-switching (always on) */
 	instance->registers->rh_desc_a |= RHDA_NPS_FLAG;
+
 	instance->unfinished_interrupt_transfer = NULL;
 	instance->interrupt_mask_size = (instance->port_count + 8) / 8;
 	instance->interrupt_buffer = malloc(instance->interrupt_mask_size);
