diff options
| author | amartin@nvidia.com <amartin@nvidia.com> | 2011-12-20 14:56:16 +0000 | 
|---|---|---|
| committer | Wolfgang Denk <wd@denx.de> | 2012-03-03 16:56:29 +0100 | 
| commit | f9636e8d38abde096fbb32fee5a36bbdb02b7cae (patch) | |
| tree | 7b09e54faa06756e07ae31a7a9c08ee4b780492d | |
| parent | fb3ef649ed5cf3e5e73aea6ed161cdde37cb7a5f (diff) | |
| download | olio-uboot-2014.01-f9636e8d38abde096fbb32fee5a36bbdb02b7cae.tar.xz olio-uboot-2014.01-f9636e8d38abde096fbb32fee5a36bbdb02b7cae.zip | |
USB: move keyboard polling into kbd driver
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>
| -rw-r--r-- | common/usb_kbd.c | 18 | ||||
| -rw-r--r-- | drivers/usb/host/ehci-hcd.c | 30 | ||||
| -rw-r--r-- | drivers/usb/host/ohci-hcd.c | 6 | ||||
| -rw-r--r-- | drivers/usb/host/r8a66597-hcd.c | 6 | ||||
| -rw-r--r-- | drivers/usb/musb/musb_hcd.c | 28 | ||||
| -rw-r--r-- | include/usb.h | 1 | 
6 files changed, 17 insertions, 72 deletions
| diff --git a/common/usb_kbd.c b/common/usb_kbd.c index 960a70a43..19f01db1c 100644 --- a/common/usb_kbd.c +++ b/common/usb_kbd.c @@ -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; diff --git a/drivers/usb/host/ehci-hcd.c b/drivers/usb/host/ehci-hcd.c index 3f7bc2cef..d6fee814c 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" @@ -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 */ diff --git a/drivers/usb/host/ohci-hcd.c b/drivers/usb/host/ohci-hcd.c index cf906b47c..1a428e95a 100644 --- a/drivers/usb/host/ohci-hcd.c +++ b/drivers/usb/host/ohci-hcd.c @@ -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) diff --git a/drivers/usb/host/r8a66597-hcd.c b/drivers/usb/host/r8a66597-hcd.c index db611b641..aa753d800 100644 --- a/drivers/usb/host/r8a66597-hcd.c +++ b/drivers/usb/host/r8a66597-hcd.c @@ -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; diff --git a/drivers/usb/musb/musb_hcd.c b/drivers/usb/musb/musb_hcd.c index 325edb967..db7161f12 100644 --- a/drivers/usb/musb/musb_hcd.c +++ b/drivers/usb/musb/musb_hcd.c @@ -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 */ diff --git a/include/usb.h b/include/usb.h index 9b7405078..4534738f8 100644 --- a/include/usb.h +++ b/include/usb.h @@ -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 |