summaryrefslogtreecommitdiff
path: root/drivers/usb
diff options
context:
space:
mode:
authormake shi <b15407@freescale.com>2012-05-08 14:11:07 +0800
committerJason Liu <r64343@freescale.com>2012-07-20 13:37:18 +0800
commit4c3318cdc9b3c58dc9a8439707f08fa02122e7e7 (patch)
treed5bfba4c86ce5d6d267264f78e23ab3adacab115 /drivers/usb
parent0f4ebeca928fcead80e4cfa13f1ca870a4f5b5b1 (diff)
ENGR00178933-1 [MX6] USB zero gadget: support USB auto remote wake up test
- add some parameters in zero.c to support USB auto remote wake up test - add zero_disconnect function to clear the test result Signed-off-by: make shi <b15407@freescale.com>
Diffstat (limited to 'drivers/usb')
-rw-r--r--drivers/usb/gadget/zero.c33
1 files changed, 28 insertions, 5 deletions
diff --git a/drivers/usb/gadget/zero.c b/drivers/usb/gadget/zero.c
index 5440b0eb71ac..c6e5d054b8bc 100644
--- a/drivers/usb/gadget/zero.c
+++ b/drivers/usb/gadget/zero.c
@@ -107,16 +107,26 @@ module_param(loopdefault, bool, S_IRUGO|S_IWUSR);
#else
#define DRIVER_VENDOR_NUM 0x1a0a /* OTG test device IDs */
#define DRIVER_PRODUCT_NUM 0xbadd
-#define DEFAULT_AUTORESUME 5
+#define DEFAULT_AUTORESUME 5000
#endif
+static unsigned startms;
+
/* If the optional "autoresume" mode is enabled, it provides good
* functional coverage for the "USBCV" test harness from USB-IF.
* It's always set if OTG mode is enabled.
*/
-unsigned autoresume = DEFAULT_AUTORESUME;
+static unsigned autoresume = DEFAULT_AUTORESUME;
module_param(autoresume, uint, S_IRUGO);
-MODULE_PARM_DESC(autoresume, "zero, or seconds before remote wakeup");
+MODULE_PARM_DESC(autoresume, "minimum milliseconds before sending remote wakeup");
+
+static unsigned interval;
+module_param(interval, uint, S_IRUGO);
+MODULE_PARM_DESC(interval, "zero, or milliseconds for interval remote wakeup time");
+
+static unsigned endms = 5000;
+module_param(endms, uint, S_IRUGO);
+MODULE_PARM_DESC(endms, "max milliseconds before sending remote wakeup");
/*-------------------------------------------------------------------------*/
@@ -250,8 +260,11 @@ static void zero_suspend(struct usb_composite_dev *cdev)
return;
if (autoresume) {
- mod_timer(&autoresume_timer, jiffies + (HZ * autoresume));
- DBG(cdev, "suspend, wakeup in %d seconds\n", autoresume);
+ mod_timer(&autoresume_timer, jiffies + msecs_to_jiffies(startms));
+ DBG(cdev, "suspend, wakeup in %d milliseconds\n", startms);
+ startms += interval;
+ if (startms == endms)
+ startms = autoresume;
} else
DBG(cdev, "%s\n", __func__);
}
@@ -327,6 +340,10 @@ static int __ref zero_bind(struct usb_composite_dev *cdev)
init_utsname()->sysname, init_utsname()->release,
gadget->name);
+ startms = autoresume;
+ if (autoresume > 0 && autoresume < 5)
+ pr_warning("%s: time before sending remote wakeup is less than 5ms, should not send resume signal.\n",
+ longname);
return 0;
}
@@ -336,6 +353,11 @@ static int zero_unbind(struct usb_composite_dev *cdev)
return 0;
}
+static void zero_disconnect(struct usb_composite_dev *cdev)
+{
+ startms = autoresume;
+}
+
static struct usb_composite_driver zero_driver = {
.name = "zero",
.dev = &device_desc,
@@ -343,6 +365,7 @@ static struct usb_composite_driver zero_driver = {
.unbind = zero_unbind,
.suspend = zero_suspend,
.resume = zero_resume,
+ .disconnect = zero_disconnect,
};
MODULE_AUTHOR("David Brownell");