diff options
Diffstat (limited to 'drivers/usb/gadget')
| -rw-r--r-- | drivers/usb/gadget/epautoconf.c | 8 | ||||
| -rw-r--r-- | drivers/usb/gadget/s3c_udc_otg.c | 10 | 
2 files changed, 11 insertions, 7 deletions
| diff --git a/drivers/usb/gadget/epautoconf.c b/drivers/usb/gadget/epautoconf.c index 189648942..5b8776e0b 100644 --- a/drivers/usb/gadget/epautoconf.c +++ b/drivers/usb/gadget/epautoconf.c @@ -25,6 +25,7 @@  #include <linux/usb/ch9.h>  #include <asm/errno.h>  #include <linux/usb/gadget.h> +#include <asm/unaligned.h>  #include "gadget_chips.h"  #define isdigit(c)      ('0' <= (c) && (c) <= '9') @@ -127,7 +128,7 @@ static int ep_matches(  	 * where it's an output parameter representing the full speed limit.  	 * the usb spec fixes high speed bulk maxpacket at 512 bytes.  	 */ -	max = 0x7ff & le16_to_cpu(desc->wMaxPacketSize); +	max = 0x7ff & le16_to_cpu(get_unaligned(&desc->wMaxPacketSize));  	switch (type) {  	case USB_ENDPOINT_XFER_INT:  		/* INT:  limit 64 bytes full speed, 1024 high speed */ @@ -143,7 +144,8 @@ static int ep_matches(  			return 0;  		/* BOTH:  "high bandwidth" works only at high speed */ -		if ((desc->wMaxPacketSize & __constant_cpu_to_le16(3<<11))) { +		if ((get_unaligned(&desc->wMaxPacketSize) & +					__constant_cpu_to_le16(3<<11))) {  			if (!gadget->is_dualspeed)  				return 0;  			/* configure your hardware with enough buffering!! */ @@ -176,7 +178,7 @@ static int ep_matches(  		/* min() doesn't work on bitfields with gcc-3.5 */  		if (size > 64)  			size = 64; -		desc->wMaxPacketSize = cpu_to_le16(size); +		put_unaligned(cpu_to_le16(size), &desc->wMaxPacketSize);  	}  	return 1;  } diff --git a/drivers/usb/gadget/s3c_udc_otg.c b/drivers/usb/gadget/s3c_udc_otg.c index 5a3ac78ff..901fac982 100644 --- a/drivers/usb/gadget/s3c_udc_otg.c +++ b/drivers/usb/gadget/s3c_udc_otg.c @@ -40,6 +40,7 @@  #include <linux/usb/gadget.h>  #include <asm/byteorder.h> +#include <asm/unaligned.h>  #include <asm/io.h>  #include <asm/mach-types.h> @@ -586,7 +587,8 @@ static int s3c_ep_enable(struct usb_ep *_ep,  	if (!_ep || !desc || ep->desc || _ep->name == ep0name  	    || desc->bDescriptorType != USB_DT_ENDPOINT  	    || ep->bEndpointAddress != desc->bEndpointAddress -	    || ep_maxpacket(ep) < le16_to_cpu(desc->wMaxPacketSize)) { +	    || ep_maxpacket(ep) < +	    le16_to_cpu(get_unaligned(&desc->wMaxPacketSize))) {  		DEBUG("%s: bad ep or descriptor\n", __func__);  		return -EINVAL; @@ -603,8 +605,8 @@ static int s3c_ep_enable(struct usb_ep *_ep,  	/* hardware _could_ do smaller, but driver doesn't */  	if ((desc->bmAttributes == USB_ENDPOINT_XFER_BULK -	     && le16_to_cpu(desc->wMaxPacketSize) != ep_maxpacket(ep)) -	    || !desc->wMaxPacketSize) { +	     && le16_to_cpu(get_unaligned(&desc->wMaxPacketSize)) != +	     ep_maxpacket(ep)) || !get_unaligned(&desc->wMaxPacketSize)) {  		DEBUG("%s: bad %s maxpacket\n", __func__, _ep->name);  		return -ERANGE; @@ -620,7 +622,7 @@ static int s3c_ep_enable(struct usb_ep *_ep,  	ep->stopped = 0;  	ep->desc = desc;  	ep->pio_irqs = 0; -	ep->ep.maxpacket = le16_to_cpu(desc->wMaxPacketSize); +	ep->ep.maxpacket = le16_to_cpu(get_unaligned(&desc->wMaxPacketSize));  	/* Reset halt state */  	s3c_udc_set_nak(ep); |