Commit 8a8a2257 authored by Hans de Goede's avatar Hans de Goede Committed by Marek Vasut

usb: kbd: Allow "usb reset" to continue when an usb kbd is used

Use the new force parameter to make the stdio_deregister succeed, replacing
stdin with a nulldev, and assume that the usb keyboard will come back after
the reset.
Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
parent 32d01926
......@@ -430,10 +430,10 @@ 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)
static int do_usb_stop_keyboard(int force)
{
#ifdef CONFIG_USB_KEYBOARD
if (usb_kbd_deregister() != 0) {
if (usb_kbd_deregister(force) != 0) {
printf("USB not stopped: usbkbd still using USB\n");
return 1;
}
......@@ -460,7 +460,7 @@ 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)
if (do_usb_stop_keyboard(1) != 0)
return 1;
usb_stop();
printf("(Re)start USB...\n");
......@@ -482,7 +482,7 @@ static int do_usb(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
if (strncmp(argv[1], "stop", 4) == 0) {
if (argc != 2)
console_assign(stdin, "serial");
if (do_usb_stop_keyboard() != 0)
if (do_usb_stop_keyboard(0) != 0)
return 1;
printf("stopping USB..\n");
usb_stop();
......
......@@ -547,10 +547,10 @@ int drv_usb_kbd_init(void)
}
/* Deregister the keyboard. */
int usb_kbd_deregister(void)
int usb_kbd_deregister(int force)
{
#ifdef CONFIG_SYS_STDIO_DEREGISTER
int ret = stdio_deregister(DEVNAME, 0);
int ret = stdio_deregister(DEVNAME, force);
if (ret && ret != -ENODEV)
return ret;
......
......@@ -216,7 +216,7 @@ int usb_host_eth_scan(int mode);
#ifdef CONFIG_USB_KEYBOARD
int drv_usb_kbd_init(void);
int usb_kbd_deregister(void);
int usb_kbd_deregister(int force);
#endif
/* routines */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment