diff options
author | Wolfgang Denk <wd@denx.de> | 2011-12-17 20:51:16 +0100 |
---|---|---|
committer | Wolfgang Denk <wd@denx.de> | 2011-12-17 20:51:16 +0100 |
commit | 8b0affecb98f91142015ccf8c43653e1ad87c156 (patch) | |
tree | c8845c9e4ceef07fb7946326f137ad615f8acf9b /common | |
parent | 509adc8b77f885e946449ed62191fbef7fe67b56 (diff) | |
parent | b2fb47f1873ae812ce33129996a22b11a36d0aa9 (diff) |
Merge branch 'master' of git://git.denx.de/u-boot-usb
* 'master' of git://git.denx.de/u-boot-usb:
USB: Use (get|put)_unaligned for accessing wMaxPacketSize
usb:gadget:s5p Enable the USB Gadget framework at Exynos4210 (C210 Universal)
README: add documentation for CONFIG_USB_ULPI*
USB: ULPI: increase error case verbosity
USB: ULPI: clean a mixup of return types
USB: ULPI: switch argument type from u8 to unsigned
Diffstat (limited to 'common')
-rw-r--r-- | common/cmd_usb.c | 3 | ||||
-rw-r--r-- | common/usb.c | 27 |
2 files changed, 21 insertions, 9 deletions
diff --git a/common/cmd_usb.c b/common/cmd_usb.c index d4ec2a291c..320667f5fb 100644 --- a/common/cmd_usb.c +++ b/common/cmd_usb.c @@ -28,6 +28,7 @@ #include <common.h> #include <command.h> #include <asm/byteorder.h> +#include <asm/unaligned.h> #include <part.h> #include <usb.h> @@ -240,7 +241,7 @@ void usb_display_ep_desc(struct usb_endpoint_descriptor *epdesc) printf("Interrupt"); break; } - printf(" MaxPacket %d", epdesc->wMaxPacketSize); + printf(" MaxPacket %d", get_unaligned(&epdesc->wMaxPacketSize)); if ((epdesc->bmAttributes & 0x03) == 0x3) printf(" Interval %dms", epdesc->bInterval); printf("\n"); diff --git a/common/usb.c b/common/usb.c index 4418c70f46..63a11c8f50 100644 --- a/common/usb.c +++ b/common/usb.c @@ -49,6 +49,7 @@ #include <asm/processor.h> #include <linux/ctype.h> #include <asm/byteorder.h> +#include <asm/unaligned.h> #include <usb.h> #ifdef CONFIG_4xx @@ -279,30 +280,32 @@ usb_set_maxpacket_ep(struct usb_device *dev, int if_idx, int ep_idx) { int b; struct usb_endpoint_descriptor *ep; + u16 ep_wMaxPacketSize; ep = &dev->config.if_desc[if_idx].ep_desc[ep_idx]; b = ep->bEndpointAddress & USB_ENDPOINT_NUMBER_MASK; + ep_wMaxPacketSize = get_unaligned(&ep->wMaxPacketSize); if ((ep->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) == USB_ENDPOINT_XFER_CONTROL) { /* Control => bidirectional */ - dev->epmaxpacketout[b] = ep->wMaxPacketSize; - dev->epmaxpacketin[b] = ep->wMaxPacketSize; + dev->epmaxpacketout[b] = ep_wMaxPacketSize; + dev->epmaxpacketin[b] = ep_wMaxPacketSize; USB_PRINTF("##Control EP epmaxpacketout/in[%d] = %d\n", b, dev->epmaxpacketin[b]); } else { if ((ep->bEndpointAddress & 0x80) == 0) { /* OUT Endpoint */ - if (ep->wMaxPacketSize > dev->epmaxpacketout[b]) { - dev->epmaxpacketout[b] = ep->wMaxPacketSize; + if (ep_wMaxPacketSize > dev->epmaxpacketout[b]) { + dev->epmaxpacketout[b] = ep_wMaxPacketSize; USB_PRINTF("##EP epmaxpacketout[%d] = %d\n", b, dev->epmaxpacketout[b]); } } else { /* IN Endpoint */ - if (ep->wMaxPacketSize > dev->epmaxpacketin[b]) { - dev->epmaxpacketin[b] = ep->wMaxPacketSize; + if (ep_wMaxPacketSize > dev->epmaxpacketin[b]) { + dev->epmaxpacketin[b] = ep_wMaxPacketSize; USB_PRINTF("##EP epmaxpacketin[%d] = %d\n", b, dev->epmaxpacketin[b]); } @@ -333,6 +336,7 @@ int usb_parse_config(struct usb_device *dev, unsigned char *buffer, int cfgno) struct usb_descriptor_header *head; int index, ifno, epno, curr_if_num; int i; + u16 ep_wMaxPacketSize; ifno = -1; epno = -1; @@ -378,8 +382,15 @@ int usb_parse_config(struct usb_device *dev, unsigned char *buffer, int cfgno) dev->config.if_desc[ifno].no_of_ep++; memcpy(&dev->config.if_desc[ifno].ep_desc[epno], &buffer[index], buffer[index]); - le16_to_cpus(&(dev->config.if_desc[ifno].ep_desc[epno].\ - wMaxPacketSize)); + ep_wMaxPacketSize = get_unaligned(&dev->config.\ + if_desc[ifno].\ + ep_desc[epno].\ + wMaxPacketSize); + put_unaligned(le16_to_cpu(ep_wMaxPacketSize), + &dev->config.\ + if_desc[ifno].\ + ep_desc[epno].\ + wMaxPacketSize); USB_PRINTF("if %d, ep %d\n", ifno, epno); break; default: |