diff options
-rw-r--r-- | common/usb_kbd.c | 34 |
1 files changed, 33 insertions, 1 deletions
diff --git a/common/usb_kbd.c b/common/usb_kbd.c index e02529f..24a1a56 100644 --- a/common/usb_kbd.c +++ b/common/usb_kbd.c @@ -8,6 +8,7 @@ * SPDX-License-Identifier: GPL-2.0+ */ #include <common.h> +#include <dm.h> #include <errno.h> #include <malloc.h> #include <stdio_dev.h> @@ -520,7 +521,37 @@ int drv_usb_kbd_init(void) { int error, i; - debug("%s: Probing for keyboard\n", __func__);/* Scan all USB Devices */ + debug("%s: Probing for keyboard\n", __func__); +#ifdef CONFIG_DM_USB + /* + * TODO: We should add USB_DEVICE() declarations to each USB ethernet + * driver and then most of this file can be removed. + */ + struct udevice *bus; + struct uclass *uc; + int ret; + + ret = uclass_get(UCLASS_USB, &uc); + if (ret) + return ret; + uclass_foreach_dev(bus, uc) { + for (i = 0; i < USB_MAX_DEVICE; i++) { + struct usb_device *dev; + + dev = usb_get_dev_index(bus, i); /* get device */ + debug("i=%d, %p\n", i, dev); + if (!dev) + break; /* no more devices available */ + + error = probe_usb_keyboard(dev); + if (!error) + return 1; + if (error && error != -ENOENT) + return error; + } /* for */ + } +#else + /* Scan all USB Devices */ for (i = 0; i < USB_MAX_DEVICE; i++) { struct usb_device *dev; @@ -538,6 +569,7 @@ int drv_usb_kbd_init(void) if (error && error != -ENOENT) return error; } +#endif /* No USB Keyboard found */ return -1; |