[U-Boot] [PATCH 6/7] usb: kbd: Cache pipe, interval and packetsize
Michael Trimarchi
michael at amarulasolutions.com
Sat Sep 20 19:53:04 CEST 2014
Hi
On Sat, Sep 20, 2014 at 5:01 PM, Hans de Goede <hdegoede at redhat.com> wrote:
> Instead of looking them up every time we need them.
>
split subject and patch description
> Signed-off-by: Hans de Goede <hdegoede at redhat.com>
> ---
> common/usb_kbd.c | 34 +++++++++++++---------------------
> 1 file changed, 13 insertions(+), 21 deletions(-)
>
> diff --git a/common/usb_kbd.c b/common/usb_kbd.c
> index cb869ac..85ee1c8 100644
> --- a/common/usb_kbd.c
> +++ b/common/usb_kbd.c
> @@ -99,6 +99,10 @@ static const unsigned char usb_kbd_arrow[] = {
> #define USB_KBD_BOOT_REPORT_SIZE 8
>
> struct usb_kbd_pdata {
> + unsigned long intpipe;
unsigned int intpipe ??
Michael
> + int intpktsize;
> + int intinterval;
> +
> uint32_t repeat_delay;
>
> uint32_t usb_in_pointer;
> @@ -305,23 +309,11 @@ 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)
> - 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);
> + struct usb_kbd_pdata *data = dev->privptr;
>
> /* Submit a interrupt transfer request */
> - maxp = usb_maxpacket(dev, pipe);
> - usb_submit_int_msg(dev, pipe, &data->new[0],
> - min(maxp, USB_KBD_BOOT_REPORT_SIZE),
> - ep->bInterval);
> + usb_submit_int_msg(dev, data->intpipe, &data->new[0], data->intpktsize,
> + data->intinterval);
>
> usb_kbd_irq_worker(dev);
> #elif defined(CONFIG_SYS_USB_EVENT_POLL_VIA_CONTROL_EP)
> @@ -389,7 +381,6 @@ static int usb_kbd_probe(struct usb_device *dev, unsigned int ifnum)
> struct usb_interface *iface;
> struct usb_endpoint_descriptor *ep;
> struct usb_kbd_pdata *data;
> - int pipe, maxp;
>
> if (dev->descriptor.bNumConfigurations != 1)
> return 0;
> @@ -438,8 +429,10 @@ static int usb_kbd_probe(struct usb_device *dev, unsigned int ifnum)
> /* Set IRQ handler */
> dev->irq_handle = usb_kbd_irq;
>
> - pipe = usb_rcvintpipe(dev, ep->bEndpointAddress);
> - maxp = usb_maxpacket(dev, pipe);
> + data->intpipe = usb_rcvintpipe(dev, ep->bEndpointAddress);
> + data->intpktsize = min(usb_maxpacket(dev, data->intpipe),
> + USB_KBD_BOOT_REPORT_SIZE);
> + data->intinterval = ep->bInterval;
>
> /* We found a USB Keyboard, install it. */
> usb_set_protocol(dev, iface->desc.bInterfaceNumber, 0);
> @@ -448,9 +441,8 @@ static int usb_kbd_probe(struct usb_device *dev, unsigned int ifnum)
> usb_set_idle(dev, iface->desc.bInterfaceNumber, REPEAT_RATE, 0);
>
> debug("USB KBD: enable interrupt pipe...\n");
> - if (usb_submit_int_msg(dev, pipe, data->new,
> - min(maxp, USB_KBD_BOOT_REPORT_SIZE),
> - ep->bInterval) < 0) {
> + if (usb_submit_int_msg(dev, data->intpipe, data->new, data->intpktsize,
> + data->intinterval) < 0) {
> printf("Failed to get keyboard state from device %04x:%04x\n",
> dev->descriptor.idVendor, dev->descriptor.idProduct);
> /* Abort, we don't want to use that non-functional keyboard. */
> --
> 2.1.0
>
> _______________________________________________
> U-Boot mailing list
> U-Boot at lists.denx.de
> http://lists.denx.de/mailman/listinfo/u-boot
--
| Michael Nazzareno Trimarchi Amarula Solutions BV |
| COO - Founder Cruquiuskade 47 |
| +31(0)851119172 Amsterdam 1018 AM NL |
| [`as] http://www.amarulasolutions.com |
More information about the U-Boot
mailing list