summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKe Qinghua <qinghua.ke@freescale.com>2014-04-11 15:34:14 +0800
committerNitin Garg <nitin.garg@freescale.com>2014-04-21 22:35:46 -0500
commit43cf0b49afa87f85eff776b7ec8207e030be5264 (patch)
tree991fa4e3f0d9ba0544bcf5ef7972f0b000d4c72c
parentc404727ce417a4f91d59b083ad171716a360cd33 (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.c5
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);