[U-Boot] [PATCH] USB: move keyboard polling from EHCI driver into kbd driver
Remy Bohmer
linux at bohmer.net
Sat Dec 17 15:15:36 CET 2011
Hi,
2011/12/16 Allen Martin <amartin at nvidia.com>:
> This removes dependency on global variable "new" from EHCI driver with
> CONFIG_SYS_USB_EVENT_POLL turned on and gets USB keyboard working with
> EHCI driver again.
>
> Signed-off-by: Allen Martin <amartin at nvidia.com>
> ---
> common/usb_kbd.c | 18 +++++++++++++++++-
> drivers/usb/host/ehci-hcd.c | 30 ------------------------------
> 2 files changed, 17 insertions(+), 31 deletions(-)
>
> diff --git a/common/usb_kbd.c b/common/usb_kbd.c
> index 75107c9..e94bb7e 100644
> --- a/common/usb_kbd.c
> +++ b/common/usb_kbd.c
> @@ -313,7 +313,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;
> diff --git a/drivers/usb/host/ehci-hcd.c b/drivers/usb/host/ehci-hcd.c
> index db10316..94a5eed 100644
> --- a/drivers/usb/host/ehci-hcd.c
> +++ b/drivers/usb/host/ehci-hcd.c
> @@ -26,10 +26,6 @@
> #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"
>
> @@ -946,29 +942,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 */
The usb_event_poll() is implemented in more drivers. This is not only
limited to the EHCI driver.
Please update the other drivers as well.
drivers/usb/musb/musb_hcd.c:1274:void usb_event_poll()
drivers/usb/host/r8a66597-hcd.c:911:void usb_event_poll(void)
drivers/usb/host/ohci-hcd.c:1775:void usb_event_poll(void)
include/usb.h:152:void usb_event_poll(void);
Kind regards,
Remy
More information about the U-Boot
mailing list