=== modified file 'uspace/drv/bus/usb/ohci/hc.c'
--- /tmp/bzr-diff-dudJ16/old/uspace/drv/bus/usb/ohci/hc.c	2011-06-19 16:38:59.404999000 +0200
+++ /home/orome/helenos/uspace/drv/bus/usb/ohci/hc.c	2011-06-23 23:23:56.683081210 +0200
@@ -518,6 +518,7 @@
 	instance->registers->control &= (C_HCFS_OPERATIONAL << C_HCFS_SHIFT);
 	usb_log_debug("OHCI HC up and running (ctl_reg=0x%x).\n",
 	    instance->registers->control);
+	rh_replug(&instance->rh);
 }
 /*----------------------------------------------------------------------------*/
 /** Initialize schedule queues
=== modified file 'uspace/drv/bus/usb/ohci/ohci_regs.h'
--- /tmp/bzr-diff-dudJ16/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-dudJ16/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 23:22:41.116075563 +0200
@@ -218,13 +218,15 @@
 	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
+
+	/* 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);
@@ -236,6 +238,24 @@
 
 	return EOK;
 }
+
+void rh_replug(rh_t *instance)
+{
+	assert(instance);
+	/* 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;
+}
 /*----------------------------------------------------------------------------*/
 
 /**
=== modified file 'uspace/drv/bus/usb/ohci/root_hub.h'
--- /tmp/bzr-diff-dudJ16/old/uspace/drv/bus/usb/ohci/root_hub.h	2011-05-17 10:54:43.513999000 +0200
+++ /home/orome/helenos/uspace/drv/bus/usb/ohci/root_hub.h	2011-06-23 23:23:08.339717339 +0200
@@ -73,6 +73,8 @@
 
 int rh_init(rh_t *instance, ohci_regs_t *regs);
 
+void rh_replug(rh_t *instance);
+
 int rh_request(rh_t *instance, usb_transfer_batch_t *request);
 
 void rh_interrupt(rh_t *instance);
