mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-11 05:17:10 +09:00
usb: gadget: android: follow proper order on disconnect
We should composite_disconnect *before* updating our internal state and sending uevent to userspace. Also, hold cdev->lock while updating internal state. Change-Id: If66a5a4f7d4a102a44aefc3ce4a154a5a1517dcf Signed-off-by: Dima Zavin <dima@android.com>
This commit is contained in:
@@ -1081,9 +1081,15 @@ android_setup(struct usb_gadget *gadget, const struct usb_ctrlrequest *c)
|
||||
static void android_disconnect(struct usb_gadget *gadget)
|
||||
{
|
||||
struct android_dev *dev = _android_dev;
|
||||
struct usb_composite_dev *cdev = get_gadget_data(gadget);
|
||||
unsigned long flags;
|
||||
|
||||
composite_disconnect(gadget);
|
||||
|
||||
spin_lock_irqsave(&cdev->lock, flags);
|
||||
dev->connected = 0;
|
||||
schedule_work(&dev->work);
|
||||
composite_disconnect(gadget);
|
||||
spin_unlock_irqrestore(&cdev->lock, flags);
|
||||
}
|
||||
|
||||
static int android_create_device(struct android_dev *dev)
|
||||
|
||||
Reference in New Issue
Block a user