From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lukasz Majewski Date: Thu, 12 Apr 2012 09:15:29 +0200 Subject: [U-Boot] [PATCH 2/4] usb:gadget:composite: Linux composite.{h/c} code adjustement for u-boot In-Reply-To: <1334214931-19480-1-git-send-email-l.majewski@samsung.com> References: <1334214931-19480-1-git-send-email-l.majewski@samsung.com> Message-ID: <1334214931-19480-3-git-send-email-l.majewski@samsung.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de This commit fixes Linux kernel's composite.{h/c} code to work with u-boot. Signed-off-by: Lukasz Majewski Signed-off-by: Andrzej Pietrasiewicz Signed-off-by: Kyungmin Park Cc: Marek Vasut --- drivers/usb/gadget/composite.c | 58 ++++++++++++++++++++++++++-------------- include/linux/usb/composite.h | 52 +++++++++++++++++++++++++++++++++++ 2 files changed, 90 insertions(+), 20 deletions(-) diff --git a/drivers/usb/gadget/composite.c b/drivers/usb/gadget/composite.c index 1160c55..6a20278 100644 --- a/drivers/usb/gadget/composite.c +++ b/drivers/usb/gadget/composite.c @@ -18,13 +18,14 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -/* #define VERBOSE_DEBUG */ +#define VERBOSE_DEBUG -#include -#include -#include -#include +/* #include */ +/* #include */ +/* #include */ +/* #include */ +#include #include @@ -36,7 +37,7 @@ */ /* big enough to hold our biggest descriptor */ -#define USB_BUFSIZ 1024 +#define USB_BUFSIZ 4096 static struct usb_composite_driver *composite; @@ -404,13 +405,23 @@ static int set_config(struct usb_composite_dev *cdev, result = 0; INFO(cdev, "%s speed config #%d: %s\n", - ({ char *speed; - switch (gadget->speed) { - case USB_SPEED_LOW: speed = "low"; break; - case USB_SPEED_FULL: speed = "full"; break; - case USB_SPEED_HIGH: speed = "high"; break; - default: speed = "?"; break; - } ; speed; }), number, c ? c->label : "unconfigured"); + ({ char *speed; + switch (gadget->speed) { + case USB_SPEED_LOW: + speed = "low"; + break; + case USB_SPEED_FULL: + speed = "full"; + break; + case USB_SPEED_HIGH: + speed = "high"; + break; + default: + speed = "?"; + break; + }; + speed; + }), number, c ? c->label : "unconfigured"); if (!c) goto done; @@ -779,6 +790,7 @@ composite_setup(struct usb_gadget *gadget, const struct usb_ctrlrequest *ctrl) u16 w_length = le16_to_cpu(ctrl->wLength); struct usb_function *f = NULL; u8 endp; + bool standard; /* partial re-init of the response message; the function or the * gadget might need to intercept e.g. a control-OUT completion @@ -788,6 +800,10 @@ composite_setup(struct usb_gadget *gadget, const struct usb_ctrlrequest *ctrl) req->complete = composite_setup_complete; req->length = USB_BUFSIZ; gadget->ep0->driver_data = cdev; + standard = (ctrl->bRequestType & USB_TYPE_MASK) + == USB_TYPE_STANDARD; + if (!standard) + goto unknown; switch (ctrl->bRequest) { @@ -825,6 +841,8 @@ composite_setup(struct usb_gadget *gadget, const struct usb_ctrlrequest *ctrl) if (value >= 0) value = min(w_length, (u16) value); break; + default: + goto unknown; } break; @@ -963,7 +981,7 @@ static void composite_disconnect(struct usb_gadget *gadget) /*-------------------------------------------------------------------------*/ -static ssize_t composite_show_suspended(struct device *dev, +/* static ssize_t composite_show_suspended(struct device *dev, struct device_attribute *attr, char *buf) { @@ -973,7 +991,7 @@ static ssize_t composite_show_suspended(struct device *dev, return sprintf(buf, "%d\n", cdev->suspended); } -static DEVICE_ATTR(suspended, 0444, composite_show_suspended, NULL); +static DEVICE_ATTR(suspended, 0444, composite_show_suspended, NULL); */ static void composite_unbind(struct usb_gadget *gadget) @@ -985,7 +1003,7 @@ composite_unbind(struct usb_gadget *gadget) * so there's no i/o concurrency that could affect the * state protected by cdev->lock. */ - WARN_ON(cdev->config); + BUG_ON(cdev->config); while (!list_empty(&cdev->configs)) { struct usb_configuration *c; @@ -1186,9 +1204,9 @@ static struct usb_gadget_driver composite_driver = { .suspend = composite_suspend, .resume = composite_resume, - .driver = { + /* .driver = { .owner = THIS_MODULE, - }, + }, */ }; /** @@ -1213,8 +1231,8 @@ int usb_composite_register(struct usb_composite_driver *driver) if (!driver->name) driver->name = "composite"; - composite_driver.function = (char *) driver->name; - composite_driver.driver.name = driver->name; + /* composite_driver.function = (char *) driver->name; */ + /* composite_driver.driver.name = driver->name; */ composite = driver; return usb_gadget_register_driver(&composite_driver); diff --git a/include/linux/usb/composite.h b/include/linux/usb/composite.h index 6170681..0c50a26 100644 --- a/include/linux/usb/composite.h +++ b/include/linux/usb/composite.h @@ -22,6 +22,58 @@ #define __LINUX_USB_COMPOSITE_H /* + * Linux kernel compatibility layer + */ +#define true 1 +#define false 0 +#define GFP_ATOMIC ((gfp_t) 0) +#define GFP_KERNEL ((gfp_t) 0) +#define BITS_PER_BYTE 8 +#define BITS_TO_LONGS(nr) \ + DIV_ROUND_UP(nr, BITS_PER_BYTE * sizeof(long)) +#define DECLARE_BITMAP(name, bits) \ + unsigned long name[BITS_TO_LONGS(bits)] +#define min_t(type, x, y) \ + ({ type __x = (x); type __y = (y); __x < __y ? __x : __y; }) +#define dev_dbg(...) do {} while (0) +#define dev_vdbg(...) do {} while (0) +#define dev_err(...) do {} while (0) +#define dev_warn(...) do {} while (0) +#define dev_info(...) do {} while (0) +#define pr_warning(...) do {} while (0) +#define spin_lock_init(lock) do {} while (0) +#define spin_lock(lock) do {} while (0) +#define spin_unlock(lock) do {} while (0) +#define spin_lock_irqsave(lock, flags) do {flags = 1; } while (0) +#define spin_unlock_irqrestore(lock, flags) do {flags = 0; } while (0) +#define kmalloc(x, y) malloc(x) +#define kfree(x) free(x) +#define kzalloc(size, flags) calloc((size), 1) +#define module_param(...) +#define MODULE_PARM_DESC(...) +#define WARN_ON(x) x +#define device_remove_file(...) +#define device_create_file(...) 0 +#define set_bit __set_bit +typedef int spinlock_t; +typedef int bool; +#define small_const_nbits(nbits) \ + (__builtin_constant_p(nbits) && (nbits) <= BITS_PER_LONG) + +static inline void bitmap_zero(unsigned long *dst, int nbits) +{ + if (small_const_nbits(nbits)) + *dst = 0UL; + else { + int len = BITS_TO_LONGS(nbits) * sizeof(unsigned long); + memset(dst, 0, len); + } +} +/* + * end compatibility layer + */ + +/* * This framework is an optional layer on top of the USB Gadget interface, * making it easier to build (a) Composite devices, supporting multiple * functions within any single configuration, and (b) Multi-configuration -- 1.7.2.3