]> git.kernelconcepts.de Git - karo-tx-uboot.git/blobdiff - common/cmd_usb.c
usb: kbd: On a "usb reset" call usb_kbd_deregister() before calling usb_stop()
[karo-tx-uboot.git] / common / cmd_usb.c
index 2519497dad8cf1a821cbf4c8889a7e38d74aca43..b2aa44c2a724eab626800598f17696261b6f2f57 100644 (file)
@@ -430,6 +430,16 @@ static int do_usbboot(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 }
 #endif /* CONFIG_USB_STORAGE */
 
+static int do_usb_stop_keyboard(void)
+{
+#ifdef CONFIG_USB_KEYBOARD
+       if (usb_kbd_deregister() != 0) {
+               printf("USB not stopped: usbkbd still using USB\n");
+               return 1;
+       }
+#endif
+       return 0;
+}
 
 /******************************************************************************
  * usb command intepreter
@@ -450,6 +460,8 @@ static int do_usb(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
        if ((strncmp(argv[1], "reset", 5) == 0) ||
                 (strncmp(argv[1], "start", 5) == 0)) {
                bootstage_mark_name(BOOTSTAGE_ID_USB_START, "usb_start");
+               if (do_usb_stop_keyboard() != 0)
+                       return 1;
                usb_stop();
                printf("(Re)start USB...\n");
                if (usb_init() >= 0) {
@@ -468,19 +480,10 @@ static int do_usb(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
                return 0;
        }
        if (strncmp(argv[1], "stop", 4) == 0) {
-#ifdef CONFIG_USB_KEYBOARD
-               if (argc == 2) {
-                       if (usb_kbd_deregister() != 0) {
-                               printf("USB not stopped: usbkbd still"
-                                       " using USB\n");
-                               return 1;
-                       }
-               } else {
-                       /* forced stop, switch console in to serial */
+               if (argc != 2)
                        console_assign(stdin, "serial");
-                       usb_kbd_deregister();
-               }
-#endif
+               if (do_usb_stop_keyboard() != 0)
+                       return 1;
                printf("stopping USB..\n");
                usb_stop();
                return 0;