aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/usb
diff options
context:
space:
mode:
authorFelipe F. Tonello <eu@felipetonello.com>2016-08-08 16:30:04 -0400
committerFelipe Balbi <felipe.balbi@linux.intel.com>2016-08-25 05:13:13 -0400
commit16b114a6d7973cf027e4c2b23eae1076eaf98c25 (patch)
tree6790fe0f2c0a2a5ef926819fa27b43f73059e0af /include/linux/usb
parent6ac47090eef0c4358b04a974c4a5ac3d9bf44f79 (diff)
usb: gadget: fix usb_ep_align_maybe endianness and new usb_ep_align
USB spec specifies wMaxPacketSize to be little endian (as other properties), so when using this variable in the driver we should convert to the current CPU endianness if necessary. This patch also introduces usb_ep_align() which does always returns the aligned buffer size for an endpoint. This is useful to be used by USB requests allocator functions. Signed-off-by: Felipe F. Tonello <eu@felipetonello.com> Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
Diffstat (limited to 'include/linux/usb')
-rw-r--r--include/linux/usb/gadget.h17
1 files changed, 14 insertions, 3 deletions
diff --git a/include/linux/usb/gadget.h b/include/linux/usb/gadget.h
index 612dbdfa388e..3cc93237ff98 100644
--- a/include/linux/usb/gadget.h
+++ b/include/linux/usb/gadget.h
@@ -418,8 +418,20 @@ static inline struct usb_gadget *dev_to_usb_gadget(struct device *dev)
418 list_for_each_entry(tmp, &(gadget)->ep_list, ep_list) 418 list_for_each_entry(tmp, &(gadget)->ep_list, ep_list)
419 419
420/** 420/**
421 * usb_ep_align - returns @len aligned to ep's maxpacketsize.
422 * @ep: the endpoint whose maxpacketsize is used to align @len
423 * @len: buffer size's length to align to @ep's maxpacketsize
424 *
425 * This helper is used to align buffer's size to an ep's maxpacketsize.
426 */
427static inline size_t usb_ep_align(struct usb_ep *ep, size_t len)
428{
429 return round_up(len, (size_t)le16_to_cpu(ep->desc->wMaxPacketSize));
430}
431
432/**
421 * usb_ep_align_maybe - returns @len aligned to ep's maxpacketsize if gadget 433 * usb_ep_align_maybe - returns @len aligned to ep's maxpacketsize if gadget
422 * requires quirk_ep_out_aligned_size, otherwise reguens len. 434 * requires quirk_ep_out_aligned_size, otherwise returns len.
423 * @g: controller to check for quirk 435 * @g: controller to check for quirk
424 * @ep: the endpoint whose maxpacketsize is used to align @len 436 * @ep: the endpoint whose maxpacketsize is used to align @len
425 * @len: buffer size's length to align to @ep's maxpacketsize 437 * @len: buffer size's length to align to @ep's maxpacketsize
@@ -430,8 +442,7 @@ static inline struct usb_gadget *dev_to_usb_gadget(struct device *dev)
430static inline size_t 442static inline size_t
431usb_ep_align_maybe(struct usb_gadget *g, struct usb_ep *ep, size_t len) 443usb_ep_align_maybe(struct usb_gadget *g, struct usb_ep *ep, size_t len)
432{ 444{
433 return !g->quirk_ep_out_aligned_size ? len : 445 return g->quirk_ep_out_aligned_size ? usb_ep_align(ep, len) : len;
434 round_up(len, (size_t)ep->desc->wMaxPacketSize);
435} 446}
436 447
437/** 448/**