diff options
author | Tom Rini <trini@konsulko.com> | 2016-01-08 10:02:25 -0500 |
---|---|---|
committer | Tom Rini <trini@konsulko.com> | 2016-01-08 10:02:25 -0500 |
commit | 8c20dc40741a7eb03087ab47e988a899fd7175b1 (patch) | |
tree | 325eba236bc636aa08588a3d5348cac5ef417aaa /common/usb_kbd.c | |
parent | 67ecb84ccbfd609170978833fd09b0b87fc4b630 (diff) | |
parent | c5a75339cf1595ee89a3513cd4fd84c10c0cd910 (diff) |
Merge git://git.denx.de/u-boot-dm
Diffstat (limited to 'common/usb_kbd.c')
-rw-r--r-- | common/usb_kbd.c | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/common/usb_kbd.c b/common/usb_kbd.c index 9617a4848ad..cbb1995de33 100644 --- a/common/usb_kbd.c +++ b/common/usb_kbd.c @@ -611,6 +611,41 @@ static int usb_kbd_probe(struct udevice *dev) return ret; } +static int usb_kbd_remove(struct udevice *dev) +{ + struct usb_device *udev = dev_get_parent_priv(dev); + struct usb_kbd_pdata *data; + struct stdio_dev *sdev; + int ret; + + sdev = stdio_get_by_name(DEVNAME); + if (!sdev) { + ret = -ENXIO; + goto err; + } + data = udev->privptr; + if (stdio_deregister_dev(sdev, true)) { + ret = -EPERM; + goto err; + } +#ifdef CONFIG_CONSOLE_MUX + if (iomux_doenv(stdin, getenv("stdin"))) { + ret = -ENOLINK; + goto err; + } +#endif +#ifdef CONFIG_SYS_USB_EVENT_POLL_VIA_INT_QUEUE + destroy_int_queue(udev, data->intq); +#endif + free(data->new); + free(data); + + return 0; +err: + printf("%s: warning, ret=%d", __func__, ret); + return ret; +} + static const struct udevice_id usb_kbd_ids[] = { { .compatible = "usb-keyboard" }, { } @@ -621,6 +656,7 @@ U_BOOT_DRIVER(usb_kbd) = { .id = UCLASS_KEYBOARD, .of_match = usb_kbd_ids, .probe = usb_kbd_probe, + .remove = usb_kbd_remove, }; static const struct usb_device_id kbd_id_table[] = { |