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>
This commit is contained in:
parent
fb3ef649ed
commit
f9636e8d38
@ -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;
|
||||
|
@ -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 */
|
||||
|
@ -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)
|
||||
|
@ -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;
|
||||
|
@ -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 */
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user