@ -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 */