diff options
author | Ke Qinghua <qinghua.ke@freescale.com> | 2014-04-11 15:34:14 +0800 |
---|---|---|
committer | Nitin Garg <nitin.garg@freescale.com> | 2014-04-21 22:35:46 -0500 |
commit | 43cf0b49afa87f85eff776b7ec8207e030be5264 (patch) | |
tree | 991fa4e3f0d9ba0544bcf5ef7972f0b000d4c72c | |
parent | c404727ce417a4f91d59b083ad171716a360cd33 (diff) |
ENGR00305254-9 imx6sx sarbesd board bring up
Enable/disable USB gadget(MTP/ADB) wakelock when USB device connect/disconnect.
Signed-off-by: Ke Qinghua <qinghua.ke@freescale.com>
-rw-r--r-- | drivers/usb/gadget/android.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/drivers/usb/gadget/android.c b/drivers/usb/gadget/android.c index 64db607bfb18..a9f0e0d9c0cb 100644 --- a/drivers/usb/gadget/android.c +++ b/drivers/usb/gadget/android.c @@ -48,6 +48,7 @@ MODULE_LICENSE("GPL"); MODULE_VERSION("1.0"); static const char longname[] = "Gadget Android"; +static struct wake_lock wakelock; /* Default vendor and product IDs, overridden by userspace */ #define VENDOR_ID 0x18D1 @@ -1424,6 +1425,7 @@ android_setup(struct usb_gadget *gadget, const struct usb_ctrlrequest *c) spin_lock_irqsave(&cdev->lock, flags); if (!dev->connected) { + android_wake_lock(&wakelock); dev->connected = 1; schedule_work(&dev->work); } else if (c->bRequest == USB_REQ_SET_CONFIGURATION && @@ -1447,6 +1449,7 @@ static void android_disconnect(struct usb_composite_dev *cdev) dev->connected = 0; schedule_work(&dev->work); + android_wake_lock_timeout(&wakelock, HZ/2); } static struct usb_composite_driver android_usb_driver = { @@ -1512,6 +1515,7 @@ static int __init init(void) _android_dev = dev; + android_wake_lock_init(&wakelock, WAKE_LOCK_SUSPEND, "gadget"); err = usb_composite_probe(&android_usb_driver); if (err) { pr_err("%s: failed to probe driver %d", __func__, err); @@ -1536,6 +1540,7 @@ late_initcall(init); static void __exit cleanup(void) { + android_wake_lock_destroy(&wakelock); usb_composite_unregister(&android_usb_driver); class_destroy(android_class); kfree(_android_dev); |