diff options
author | Dima Zavin <dima@android.com> | 2011-09-14 15:12:45 -0700 |
---|---|---|
committer | Dima Zavin <dima@android.com> | 2011-09-14 15:21:36 -0700 |
commit | f85cf4f97dc037a3c8b309b3d0bdc55b3f7498cd (patch) | |
tree | 482779bcd0d77bd2eeb64db2a93bace5476b51d5 /drivers/usb | |
parent | fc7534906acf0efd26abcd2aa971a453e9b51768 (diff) | |
download | kernel_samsung_espresso10-f85cf4f97dc037a3c8b309b3d0bdc55b3f7498cd.zip kernel_samsung_espresso10-f85cf4f97dc037a3c8b309b3d0bdc55b3f7498cd.tar.gz kernel_samsung_espresso10-f85cf4f97dc037a3c8b309b3d0bdc55b3f7498cd.tar.bz2 |
usb: gadget: android: always update the sw_connected state
If we go through connected->configured->disconnected cycle very quickly,
it is possible that we may not generate a disconnect uevent to userspace.
Connected+configured could have happened before the work item got
executed, and thus would not have updated the sw_connected state. On
the disconnect, it would have noticed that a config is no longer there
but since sw_connected was still 0, it would not have sent the
disconnect event.
Change-Id: Id71175f784e3e1cf3f828bd8b24fceea1078a06b
Signed-off-by: Dima Zavin <dima@android.com>
Diffstat (limited to 'drivers/usb')
-rw-r--r-- | drivers/usb/gadget/android.c | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/drivers/usb/gadget/android.c b/drivers/usb/gadget/android.c index 8ff9972..d109bfb 100644 --- a/drivers/usb/gadget/android.c +++ b/drivers/usb/gadget/android.c @@ -167,12 +167,11 @@ static void android_work(struct work_struct *data) unsigned long flags; spin_lock_irqsave(&cdev->lock, flags); - if (cdev->config) { + if (cdev->config) uevent_envp = configured; - } else if (dev->connected != dev->sw_connected) { - dev->sw_connected = dev->connected; - uevent_envp = dev->sw_connected ? connected : disconnected; - } + else if (dev->connected != dev->sw_connected) + uevent_envp = dev->connected ? connected : disconnected; + dev->sw_connected = dev->connected; spin_unlock_irqrestore(&cdev->lock, flags); if (uevent_envp) { |