|
@@ -26,6 +26,10 @@
|
|
|
#include <asm/io.h>
|
|
|
#include <malloc.h>
|
|
|
#include <watchdog.h>
|
|
|
+#ifdef CONFIG_USB_KEYBOARD
|
|
|
+#include <stdio_dev.h>
|
|
|
+extern unsigned char new[];
|
|
|
+#endif
|
|
|
|
|
|
#include "ehci.h"
|
|
|
|
|
@@ -895,5 +899,32 @@ submit_int_msg(struct usb_device *dev, unsigned long pipe, void *buffer,
|
|
|
|
|
|
debug("dev=%p, pipe=%lu, buffer=%p, length=%d, interval=%d",
|
|
|
dev, pipe, buffer, length, interval);
|
|
|
- return -1;
|
|
|
+ return ehci_submit_async(dev, pipe, buffer, length, NULL);
|
|
|
+}
|
|
|
+
|
|
|
+#ifdef CONFIG_SYS_USB_EVENT_POLL
|
|
|
+/*
|
|
|
+ * This function polls for USB keyboard data.
|
|
|
+ */
|
|
|
+void usb_event_poll()
|
|
|
+{
|
|
|
+ struct stdio_dev *dev;
|
|
|
+ struct usb_device *usb_kbd_dev;
|
|
|
+ struct usb_interface *iface;
|
|
|
+ struct usb_endpoint_descriptor *ep;
|
|
|
+ int pipe;
|
|
|
+ int maxp;
|
|
|
+
|
|
|
+ /* Get the pointer to USB Keyboard device pointer */
|
|
|
+ dev = stdio_get_by_name("usbkbd");
|
|
|
+ usb_kbd_dev = (struct usb_device *)dev->priv;
|
|
|
+ iface = &usb_kbd_dev->config.if_desc[0];
|
|
|
+ ep = &iface->ep_desc[0];
|
|
|
+ pipe = usb_rcvintpipe(usb_kbd_dev, ep->bEndpointAddress);
|
|
|
+
|
|
|
+ /* Submit a interrupt transfer request */
|
|
|
+ maxp = usb_maxpacket(usb_kbd_dev, pipe);
|
|
|
+ usb_submit_int_msg(usb_kbd_dev, pipe, &new[0],
|
|
|
+ maxp > 8 ? 8 : maxp, ep->bInterval);
|
|
|
}
|
|
|
+#endif /* CONFIG_SYS_USB_EVENT_POLL */
|