diff --git a/common/usb.c b/common/usb.c
index 9502f39038b1637149d2804c9e7ede2405a76e77..52e5964c77039ecc2bcd4088d466a91d094ddf2e 100644
--- a/common/usb.c
+++ b/common/usb.c
@@ -126,10 +126,15 @@ int usb_init(void)
  */
 int usb_stop(void)
 {
-	asynch_allowed=1;
-	usb_started = 0;
-	usb_hub_reset();
-	return usb_lowlevel_stop();
+	int res = 0;
+
+	if (usb_started) {
+		asynch_allowed = 1;
+		usb_started = 0;
+		usb_hub_reset();
+		res = usb_lowlevel_stop();
+	}
+	return res;
 }
 
 /*
diff --git a/drivers/usb/usb_ohci.c b/drivers/usb/usb_ohci.c
index fd5567f713fe607e5ed70fcea8cba04de0afa295..da11ecbc0fef92f1c936fd9684628829ca51496e 100644
--- a/drivers/usb/usb_ohci.c
+++ b/drivers/usb/usb_ohci.c
@@ -1943,7 +1943,9 @@ int usb_lowlevel_stop(void)
 	if(usb_cpu_stop())
 		return -1;
 #endif
-
+	/* This driver is no longer initialised. It needs a new low-level
+	 * init (board/cpu) before it can be used again. */
+	ohci_inited = 0;
 	return 0;
 }
 #endif /* CONFIG_USB_OHCI_NEW */