USB: gadget: android: Disable UMS when RNDIS ethernet is active.

Signed-off-by: Mike Lockwood <lockwood@android.com>
diff --git a/drivers/usb/gadget/android.c b/drivers/usb/gadget/android.c
index e1ea22f..70e48ac 100644
--- a/drivers/usb/gadget/android.c
+++ b/drivers/usb/gadget/android.c
@@ -325,16 +325,14 @@
 
 	if (!!f->hidden != disable) {
 		f->hidden = disable;
-		product_id = get_product_id(dev);
-		device_desc.idProduct = __constant_cpu_to_le16(product_id);
-		if (dev->cdev)
-			dev->cdev->desc.idProduct = device_desc.idProduct;
 
 #ifdef CONFIG_USB_ANDROID_RNDIS
-		/* We need to specify the COMM class in the device descriptor
-		* if we are using RNDIS.
-		*/
 		if (!strcmp(f->name, "rndis")) {
+			struct usb_function		*func;
+
+			/* We need to specify the COMM class in the device descriptor
+			 * if we are using RNDIS.
+			 */
 			if (enable)
 #ifdef CONFIG_USB_ANDROID_RNDIS_WCEIS
 				dev->cdev->desc.bDeviceClass = USB_CLASS_WIRELESS_CONTROLLER;
@@ -343,9 +341,24 @@
 #endif
 			else
 				dev->cdev->desc.bDeviceClass = USB_CLASS_PER_INTERFACE;
+
+			/* Windows does not support other interfaces when RNDIS is enabled,
+			 * so we disable UMS when RNDIS is on.
+			 */
+			list_for_each_entry(func, &android_config_driver.functions, list) {
+				if (!strcmp(func->name, "usb_mass_storage")) {
+					func->hidden = enable;
+					break;
+				}
+			}
 		}
 #endif
 
+		product_id = get_product_id(dev);
+		device_desc.idProduct = __constant_cpu_to_le16(product_id);
+		if (dev->cdev)
+			dev->cdev->desc.idProduct = device_desc.idProduct;
+
 		/* force reenumeration */
 		if (dev->cdev && dev->cdev->gadget &&
 				dev->cdev->gadget->speed != USB_SPEED_UNKNOWN) {