usb/android_gadget: disconnect from host when disabling android_gadget
authorWu, Hao <hao.wu@intel.com>
Wed, 9 Nov 2011 23:04:54 +0000 (07:04 +0800)
committerGross, Mark <mark.gross@intel.com>
Wed, 9 Nov 2011 23:10:21 +0000 (15:10 -0800)
BZ: 13984

This patch adds gadget_disconnect() the first time disabling android_gadget via
userspace interface /sys/class/android_usb/android0/enable. This will ensure the
host can enumerate correctly when it is enabled next time.

Change-Id: Ib4c6c0fb7d72b7a1bcb2120ac0a4d23e7da6ec4b
Signed-off-by: Wu, Hao <hao.wu@intel.com>
Reviewed-on: http://android.intel.com:8080/23757
Reviewed-by: Gross, Mark <mark.gross@intel.com>
Tested-by: Gross, Mark <mark.gross@intel.com>
drivers/usb/gadget/android.c

index d109bfb..38f1fda 100644 (file)
@@ -838,6 +838,9 @@ static ssize_t enable_store(struct device *pdev, struct device_attribute *attr,
                usb_gadget_disconnect(cdev->gadget);
                usb_remove_config(cdev, &android_config_driver);
                dev->enabled = false;
+       } else if (!enabled && !dev->enabled) {
+               usb_gadget_disconnect(cdev->gadget);
+               dev->enabled = false;
        } else {
                pr_err("android_usb: already %s\n",
                                dev->enabled ? "enabled" : "disabled");