summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Lockwood <lockwood@android.com>2010-01-12 10:33:59 -0800
committerColin Cross <ccross@android.com>2011-06-14 09:08:55 -0700
commit789ef237b38a79f988738ff18ae6d756551afb92 (patch)
tree96e509fea36cf35be557e0069e616be7d235e5cd
parenta9e8c44fc578157d2124d66e1c72266df6391f47 (diff)
USB: gadget: android: android USB gadget improvements:
usb: gadget: f_mass_storage: use dev_set_name() Replacing strcpy() to device->bus_id which no longer exists in 2.6.32 Change-Id: Id978c881f457044c750bfd62f4c5bcc35bcd4fc5 Signed-off-by: Mike Lockwood <lockwood@android.com> USB: gadget: f_adb: Claim endpoints so they are not reused by another function. Change-Id: Ic9536cca800162e701c81cab36054f51ea759b72 Signed-off-by: Mike Lockwood <lockwood@android.com> USB: gadget: f_acm: Fix crashes in acm_set_alt() Change-Id: I91b761d392f8b1ca8784c69069b43e402b90d6a4 Signed-off-by: Mike Lockwood <lockwood@android.com> USB: gadget: f_acm: Include android code only if CONFIG_USB_ANDROID_ACM is set. Signed-off-by: Mike Lockwood <lockwood@android.com> USB: gadget: Android support for RNDIS serial ethernet function. Signed-off-by: Mike Lockwood <lockwood@android.com> USB: gadget: android: Add function name to android_register_function printk. Change-Id: I38bf79d9b544cdeaec9385f7482a131417fc4b23 Signed-off-by: Mike Lockwood <lockwood@android.com>
-rw-r--r--drivers/usb/gadget/Kconfig14
-rw-r--r--drivers/usb/gadget/Makefile1
-rw-r--r--drivers/usb/gadget/android.c2
-rw-r--r--drivers/usb/gadget/f_acm.c21
-rw-r--r--drivers/usb/gadget/f_adb.c2
-rw-r--r--drivers/usb/gadget/f_mass_storage_tmp.c6
-rw-r--r--drivers/usb/gadget/f_rndis.c45
-rw-r--r--drivers/usb/gadget/u_ether.h2
8 files changed, 68 insertions, 25 deletions
diff --git a/drivers/usb/gadget/Kconfig b/drivers/usb/gadget/Kconfig
index e1e5af52a1c..8f317ab1f6f 100644
--- a/drivers/usb/gadget/Kconfig
+++ b/drivers/usb/gadget/Kconfig
@@ -944,22 +944,28 @@ config USB_ANDROID
enabled and disabled dynamically.
config USB_ANDROID_ACM
- boolean "Android gadget ACM function"
+ boolean "Android gadget ACM serial function"
depends on USB_ANDROID
help
- Provides adb function for adb gadget driver.
+ Provides ACM serial function for android gadget driver.
config USB_ANDROID_ADB
boolean "Android gadget adb function"
depends on USB_ANDROID
help
- Provides adb function for adb gadget driver.
+ Provides adb function for android gadget driver.
config USB_ANDROID_MASS_STORAGE
boolean "Android gadget mass storage function"
depends on USB_ANDROID && SWITCH
help
- Provides USB mass storage function for adb gadget driver.
+ Provides USB mass storage function for android gadget driver.
+
+config USB_ANDROID_RNDIS
+ boolean "Android gadget RNDIS ethernet function"
+ depends on USB_ANDROID
+ help
+ Provides RNDIS ethernet function for android gadget driver.
config USB_CDC_COMPOSITE
tristate "CDC Composite Device (Ethernet and ACM)"
diff --git a/drivers/usb/gadget/Makefile b/drivers/usb/gadget/Makefile
index 321e1c8f667..216271aca82 100644
--- a/drivers/usb/gadget/Makefile
+++ b/drivers/usb/gadget/Makefile
@@ -71,3 +71,4 @@ obj-$(CONFIG_USB_ANDROID) += android.o
obj-$(CONFIG_USB_ANDROID_ACM) += f_acm.o u_serial.o
obj-$(CONFIG_USB_ANDROID_ADB) += f_adb.o
obj-$(CONFIG_USB_ANDROID_MASS_STORAGE) += f_mass_storage_tmp.o
+obj-$(CONFIG_USB_ANDROID_RNDIS) += f_rndis.o u_ether.o
diff --git a/drivers/usb/gadget/android.c b/drivers/usb/gadget/android.c
index d10568ef894..ce7426be487 100644
--- a/drivers/usb/gadget/android.c
+++ b/drivers/usb/gadget/android.c
@@ -305,7 +305,7 @@ void android_register_function(struct android_usb_function *f)
{
struct android_dev *dev = _android_dev;
- printk(KERN_INFO "android_register_function\n");
+ printk(KERN_INFO "android_register_function %s\n", f->name);
list_add_tail(&f->list, &_functions);
_registered_function_count++;
diff --git a/drivers/usb/gadget/f_acm.c b/drivers/usb/gadget/f_acm.c
index b6fb4cfe79e..ddbb98861be 100644
--- a/drivers/usb/gadget/f_acm.c
+++ b/drivers/usb/gadget/f_acm.c
@@ -17,10 +17,10 @@
#include <linux/slab.h>
#include <linux/kernel.h>
#include <linux/device.h>
+#include <linux/usb/android_composite.h>
#include "u_serial.h"
#include "gadget_chips.h"
-#include "linux/usb/android_composite.h"
/*
@@ -406,10 +406,10 @@ static int acm_set_alt(struct usb_function *f, unsigned intf, unsigned alt)
usb_ep_disable(acm->notify);
} else {
VDBG(cdev, "init acm ctrl interface %d\n", intf);
- acm->notify_desc = ep_choose(cdev->gadget,
- acm->hs.notify,
- acm->fs.notify);
}
+ acm->notify_desc = ep_choose(cdev->gadget,
+ acm->hs.notify,
+ acm->fs.notify);
usb_ep_enable(acm->notify, acm->notify_desc);
acm->notify->driver_data = acm;
@@ -419,11 +419,11 @@ static int acm_set_alt(struct usb_function *f, unsigned intf, unsigned alt)
gserial_disconnect(&acm->port);
} else {
DBG(cdev, "activate acm ttyGS%d\n", acm->port_num);
- acm->port.in_desc = ep_choose(cdev->gadget,
- acm->hs.in, acm->fs.in);
- acm->port.out_desc = ep_choose(cdev->gadget,
- acm->hs.out, acm->fs.out);
}
+ acm->port.in_desc = ep_choose(cdev->gadget,
+ acm->hs.in, acm->fs.in);
+ acm->port.out_desc = ep_choose(cdev->gadget,
+ acm->hs.out, acm->fs.out);
gserial_connect(&acm->port, acm->port_num);
} else
@@ -784,6 +784,8 @@ int acm_bind_config(struct usb_configuration *c, u8 port_num)
return status;
}
+#ifdef CONFIG_USB_ANDROID_ACM
+
int acm_function_bind_config(struct usb_configuration *c)
{
int ret = acm_bind_config(c, 0);
@@ -799,7 +801,10 @@ static struct android_usb_function acm_function = {
static int __init init(void)
{
+ printk(KERN_INFO "f_acm init\n");
android_register_function(&acm_function);
return 0;
}
module_init(init);
+
+#endif /* CONFIG_USB_ANDROID_ACM */
diff --git a/drivers/usb/gadget/f_adb.c b/drivers/usb/gadget/f_adb.c
index 7186cb601c2..194c767efdd 100644
--- a/drivers/usb/gadget/f_adb.c
+++ b/drivers/usb/gadget/f_adb.c
@@ -235,6 +235,7 @@ static int __init create_bulk_endpoints(struct adb_dev *dev,
return -ENODEV;
}
DBG(cdev, "usb_ep_autoconfig for ep_in got %s\n", ep->name);
+ ep->driver_data = dev; /* claim the endpoint */
dev->ep_in = ep;
ep = usb_ep_autoconfig(cdev->gadget, out_desc);
@@ -243,6 +244,7 @@ static int __init create_bulk_endpoints(struct adb_dev *dev,
return -ENODEV;
}
DBG(cdev, "usb_ep_autoconfig for adb ep_out got %s\n", ep->name);
+ ep->driver_data = dev; /* claim the endpoint */
dev->ep_out = ep;
/* now allocate requests for our endpoints */
diff --git a/drivers/usb/gadget/f_mass_storage_tmp.c b/drivers/usb/gadget/f_mass_storage_tmp.c
index 79044f72652..065448a8dd7 100644
--- a/drivers/usb/gadget/f_mass_storage_tmp.c
+++ b/drivers/usb/gadget/f_mass_storage_tmp.c
@@ -69,10 +69,9 @@
#include <linux/wakelock.h>
#include <linux/platform_device.h>
+#include <linux/usb.h>
#include <linux/usb_usual.h>
#include <linux/usb/ch9.h>
-#include <linux/usb/composite.h>
-#include <linux/usb/gadget.h>
#include <linux/usb/android_composite.h>
#include "gadget_chips.h"
@@ -2756,8 +2755,7 @@ fsg_function_bind(struct usb_configuration *c, struct usb_function *f)
else
curlun->dev.parent = &cdev->gadget->dev;
dev_set_drvdata(&curlun->dev, fsg);
- snprintf(curlun->dev.bus_id, BUS_ID_SIZE,
- "lun%d", i);
+ dev_set_name(&curlun->dev,"lun%d", i);
rc = device_register(&curlun->dev);
if (rc != 0) {
diff --git a/drivers/usb/gadget/f_rndis.c b/drivers/usb/gadget/f_rndis.c
index fa12ec8364e..39d2df570e8 100644
--- a/drivers/usb/gadget/f_rndis.c
+++ b/drivers/usb/gadget/f_rndis.c
@@ -28,6 +28,7 @@
#include <linux/kernel.h>
#include <linux/device.h>
#include <linux/etherdevice.h>
+#include <linux/usb/android_composite.h>
#include <asm/atomic.h>
@@ -486,10 +487,10 @@ static int rndis_set_alt(struct usb_function *f, unsigned intf, unsigned alt)
usb_ep_disable(rndis->notify);
} else {
VDBG(cdev, "init rndis ctrl %d\n", intf);
- rndis->notify_desc = ep_choose(cdev->gadget,
- rndis->hs.notify,
- rndis->fs.notify);
}
+ rndis->notify_desc = ep_choose(cdev->gadget,
+ rndis->hs.notify,
+ rndis->fs.notify);
usb_ep_enable(rndis->notify, rndis->notify_desc);
rndis->notify->driver_data = rndis;
@@ -503,11 +504,11 @@ static int rndis_set_alt(struct usb_function *f, unsigned intf, unsigned alt)
if (!rndis->port.in) {
DBG(cdev, "init rndis\n");
- rndis->port.in = ep_choose(cdev->gadget,
- rndis->hs.in, rndis->fs.in);
- rndis->port.out = ep_choose(cdev->gadget,
- rndis->hs.out, rndis->fs.out);
}
+ rndis->port.in = ep_choose(cdev->gadget,
+ rndis->hs.in, rndis->fs.in);
+ rndis->port.out = ep_choose(cdev->gadget,
+ rndis->hs.out, rndis->fs.out);
/* Avoid ZLPs; they can be troublesome. */
rndis->port.is_zlp_ok = false;
@@ -857,3 +858,33 @@ fail:
}
return status;
}
+
+#ifdef CONFIG_USB_ANDROID_RNDIS
+#include "rndis.c"
+
+// FIXME - using bogus MAC address for now
+
+static u8 ethaddr[ETH_ALEN] = { 11, 22, 33, 44, 55, 66 };
+
+int rndis_function_bind_config(struct usb_configuration *c)
+{
+ int ret = gether_setup(c->cdev->gadget, ethaddr);
+ if (ret == 0)
+ ret = rndis_bind_config(c, ethaddr);
+ return ret;
+}
+
+static struct android_usb_function rndis_function = {
+ .name = "rndis",
+ .bind_config = rndis_function_bind_config,
+};
+
+static int __init init(void)
+{
+ printk(KERN_INFO "f_rndis init\n");
+ android_register_function(&rndis_function);
+ return 0;
+}
+module_init(init);
+
+#endif /* CONFIG_USB_ANDROID_RNDIS */
diff --git a/drivers/usb/gadget/u_ether.h b/drivers/usb/gadget/u_ether.h
index b56e1e7d423..27798652568 100644
--- a/drivers/usb/gadget/u_ether.h
+++ b/drivers/usb/gadget/u_ether.h
@@ -110,7 +110,7 @@ int ecm_bind_config(struct usb_configuration *c, u8 ethaddr[ETH_ALEN]);
int ncm_bind_config(struct usb_configuration *c, u8 ethaddr[ETH_ALEN]);
int eem_bind_config(struct usb_configuration *c);
-#ifdef USB_ETH_RNDIS
+#if defined(USB_ETH_RNDIS) || defined(CONFIG_USB_ANDROID_RNDIS)
int rndis_bind_config(struct usb_configuration *c, u8 ethaddr[ETH_ALEN]);