USB: move keyboard polling into kbd driver
authoramartin@nvidia.com <amartin@nvidia.com>
Tue, 20 Dec 2011 14:56:16 +0000 (14:56 +0000)
committerWolfgang Denk <wd@denx.de>
Sat, 3 Mar 2012 15:56:29 +0000 (16:56 +0100)
This moves keyboard polling logic from USB HCD drivers into USB
keyboard driver.  Remove usb_event_poll() as keyboard polling was
the only user of this API.  With this patch USB keyboard works with
EHCI controllers again.  Tested on a tegra2 seaboard.

Signed-off-by: Allen Martin <amartin@nvidia.com>
common/usb_kbd.c
drivers/usb/host/ehci-hcd.c
drivers/usb/host/ohci-hcd.c
drivers/usb/host/r8a66597-hcd.c
drivers/usb/musb/musb_hcd.c
include/usb.h

index 960a70a43d158465820e1ffe13e32386eca4767a..19f01db1caa299f8217b778b12772fd789fc013f 100644 (file)
@@ -323,7 +323,23 @@ static int usb_kbd_irq(struct usb_device *dev)
 static inline void usb_kbd_poll_for_event(struct usb_device *dev)
 {
 #if    defined(CONFIG_SYS_USB_EVENT_POLL)
-       usb_event_poll();
+       struct usb_interface *iface;
+       struct usb_endpoint_descriptor *ep;
+       struct usb_kbd_pdata *data;
+       int pipe;
+       int maxp;
+
+       /* Get the pointer to USB Keyboard device pointer */
+       data = dev->privptr;
+       iface = &dev->config.if_desc[0];
+       ep = &iface->ep_desc[0];
+       pipe = usb_rcvintpipe(dev, ep->bEndpointAddress);
+
+       /* Submit a interrupt transfer request */
+       maxp = usb_maxpacket(dev, pipe);
+       usb_submit_int_msg(dev, pipe, &data->new[0],
+                       maxp > 8 ? 8 : maxp, ep->bInterval);
+
        usb_kbd_irq_worker(dev);
 #elif  defined(CONFIG_SYS_USB_EVENT_POLL_VIA_CONTROL_EP)
        struct usb_interface *iface;
index 3f7bc2cef6ba1c96a1563b9c295f59263d0069f9..d6fee814ca891df2da207220e39c7aaebf2a0908 100644 (file)
 #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"
 
@@ -910,29 +906,3 @@ submit_int_msg(struct usb_device *dev, unsigned long pipe, void *buffer,
        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 */
index cf906b47ca35625960b47d99d06a0aea896a4836..1a428e95aeb0963d79e2b8332acb8385e5f8af14 100644 (file)
@@ -1771,12 +1771,6 @@ static int hc_start(ohci_t *ohci)
 
 /*-------------------------------------------------------------------------*/
 
-/* Poll USB interrupt. */
-void usb_event_poll(void)
-{
-       hc_interrupt();
-}
-
 /* an interrupt happens */
 
 static int hc_interrupt(void)
index db611b641fc57d11cccc57cbd6b4a868adaf0d64..aa753d800cb97f18c1bf055db61889c66353e1a7 100644 (file)
@@ -908,12 +908,6 @@ int submit_int_msg(struct usb_device *dev, unsigned long pipe, void *buffer,
        return 0;
 }
 
-void usb_event_poll(void)
-{
-       /* no implement */
-       R8A66597_DPRINT("%s\n", __func__);
-}
-
 int usb_lowlevel_init(void)
 {
        struct r8a66597 *r8a66597 = &gr8a66597;
index 325edb9677d48c69a427a8c3923a626b6fc7c9d0..db7161f120ff41c1798b7b96377cf9a6f5b6fa0e 100644 (file)
@@ -1265,31 +1265,3 @@ int submit_int_msg(struct usb_device *dev, unsigned long pipe,
        dev->act_len = len;
        return 0;
 }
-
-
-#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 */
index 9b740507863ffdfdacc6120b2ea9efeb993276e7..4534738f8d7350ffdc9f311558de1396602c6dd4 100644 (file)
@@ -149,7 +149,6 @@ int submit_control_msg(struct usb_device *dev, unsigned long pipe, void *buffer,
                        int transfer_len, struct devrequest *setup);
 int submit_int_msg(struct usb_device *dev, unsigned long pipe, void *buffer,
                        int transfer_len, int interval);
-void usb_event_poll(void);
 
 /* Defines */
 #define USB_UHCI_VEND_ID       0x8086