summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorXinyu Chen <xinyu.chen@freescale.com>2012-04-20 11:22:08 +0800
committerXinyu Chen <xinyu.chen@freescale.com>2012-04-20 11:22:08 +0800
commit2914e50b00af66d52eac98fa58e4f4f159a2305b (patch)
treecf5151c9fee50585ce81e4a364ec9a4d74a6949c /drivers
parent7a63dba784c8a19ecadc7a7ed6856c5f6f641374 (diff)
Revert "usb: gadget: adb: Only enable the gadget when adbd is ready"
This reverts commit 17ce6ff9516dab940486898ad855ba410e364dc9.
Diffstat (limited to 'drivers')
-rw-r--r--drivers/usb/gadget/android.c118
-rw-r--r--drivers/usb/gadget/f_adb.c11
2 files changed, 9 insertions, 120 deletions
diff --git a/drivers/usb/gadget/android.c b/drivers/usb/gadget/android.c
index 1d661ad37143..8df739c1a84d 100644
--- a/drivers/usb/gadget/android.c
+++ b/drivers/usb/gadget/android.c
@@ -82,11 +82,6 @@ struct android_usb_function {
int (*init)(struct android_usb_function *, struct usb_composite_dev *);
/* Optional: cleanup during gadget unbind */
void (*cleanup)(struct android_usb_function *);
- /* Optional: called when the function is added the list of
- * enabled functions */
- void (*enable)(struct android_usb_function *);
- /* Optional: called when it is removed */
- void (*disable)(struct android_usb_function *);
int (*bind_config)(struct android_usb_function *, struct usb_configuration *);
@@ -105,7 +100,6 @@ struct android_dev {
struct device *dev;
bool enabled;
- int disable_depth;
struct mutex mutex;
bool connected;
bool sw_connected;
@@ -188,55 +182,18 @@ static void android_work(struct work_struct *data)
}
}
-static void android_enable(struct android_dev *dev)
-{
- struct usb_composite_dev *cdev = dev->cdev;
-
- BUG_ON(!mutex_is_locked(&dev->mutex));
- BUG_ON(!dev->disable_depth);
-
- if (--dev->disable_depth == 0) {
- usb_add_config(cdev, &android_config_driver,
- android_bind_config);
- usb_gadget_connect(cdev->gadget);
- }
-}
-
-static void android_disable(struct android_dev *dev)
-{
- struct usb_composite_dev *cdev = dev->cdev;
-
- BUG_ON(!mutex_is_locked(&dev->mutex));
-
- if (dev->disable_depth++ == 0) {
- usb_gadget_disconnect(cdev->gadget);
- /* Cancel pending control requests */
- usb_ep_dequeue(cdev->gadget->ep0, cdev->req);
- usb_remove_config(cdev, &android_config_driver);
- }
-}
/*-------------------------------------------------------------------------*/
/* Supported functions initialization */
-struct adb_data {
- bool opened;
- bool enabled;
-};
-
static int adb_function_init(struct android_usb_function *f, struct usb_composite_dev *cdev)
{
- f->config = kzalloc(sizeof(struct adb_data), GFP_KERNEL);
- if (!f->config)
- return -ENOMEM;
-
return adb_setup();
}
static void adb_function_cleanup(struct android_usb_function *f)
{
adb_cleanup();
- kfree(f->config);
}
static int adb_function_bind_config(struct android_usb_function *f, struct usb_configuration *c)
@@ -244,69 +201,13 @@ static int adb_function_bind_config(struct android_usb_function *f, struct usb_c
return adb_bind_config(c);
}
-static void adb_android_function_enable(struct android_usb_function *f)
-{
- struct android_dev *dev = _android_dev;
- struct adb_data *data = f->config;
-
- data->enabled = true;
-
- /* Disable the gadget until adbd is ready */
- if (!data->opened)
- android_disable(dev);
-}
-
-static void adb_android_function_disable(struct android_usb_function *f)
-{
- struct android_dev *dev = _android_dev;
- struct adb_data *data = f->config;
-
- data->enabled = false;
-
- /* Balance the disable that was called in closed_callback */
- if (!data->opened)
- android_enable(dev);
-}
-
static struct android_usb_function adb_function = {
.name = "adb",
- .enable = adb_android_function_enable,
- .disable = adb_android_function_disable,
.init = adb_function_init,
.cleanup = adb_function_cleanup,
.bind_config = adb_function_bind_config,
};
-static void adb_ready_callback(void)
-{
- struct android_dev *dev = _android_dev;
- struct adb_data *data = adb_function.config;
-
- mutex_lock(&dev->mutex);
-
- data->opened = true;
-
- if (data->enabled)
- android_enable(dev);
-
- mutex_unlock(&dev->mutex);
-}
-
-static void adb_closed_callback(void)
-{
- struct android_dev *dev = _android_dev;
- struct adb_data *data = adb_function.config;
-
- mutex_lock(&dev->mutex);
-
- data->opened = false;
-
- if (data->enabled)
- android_disable(dev);
-
- mutex_unlock(&dev->mutex);
-}
-
#define MAX_ACM_INSTANCES 4
struct acm_function_config {
@@ -931,7 +832,6 @@ static ssize_t enable_store(struct device *pdev, struct device_attribute *attr,
{
struct android_dev *dev = dev_get_drvdata(pdev);
struct usb_composite_dev *cdev = dev->cdev;
- struct android_usb_function *f;
int enabled = 0;
mutex_lock(&dev->mutex);
@@ -945,18 +845,15 @@ static ssize_t enable_store(struct device *pdev, struct device_attribute *attr,
cdev->desc.bDeviceClass = device_desc.bDeviceClass;
cdev->desc.bDeviceSubClass = device_desc.bDeviceSubClass;
cdev->desc.bDeviceProtocol = device_desc.bDeviceProtocol;
- list_for_each_entry(f, &dev->enabled_functions, enabled_list) {
- if (f->enable)
- f->enable(f);
- }
- android_enable(dev);
+ usb_add_config(cdev, &android_config_driver,
+ android_bind_config);
+ usb_gadget_connect(cdev->gadget);
dev->enabled = true;
} else if (!enabled && dev->enabled) {
- android_disable(dev);
- list_for_each_entry(f, &dev->enabled_functions, enabled_list) {
- if (f->disable)
- f->disable(f);
- }
+ usb_gadget_disconnect(cdev->gadget);
+ /* Cancel pending control requests */
+ usb_ep_dequeue(cdev->gadget->ep0, cdev->req);
+ usb_remove_config(cdev, &android_config_driver);
dev->enabled = false;
} else {
pr_err("android_usb: already %s\n",
@@ -1251,7 +1148,6 @@ static int __init init(void)
if (!dev)
return -ENOMEM;
- dev->disable_depth = 1;
dev->functions = supported_functions;
INIT_LIST_HEAD(&dev->enabled_functions);
INIT_WORK(&dev->work, android_work);
diff --git a/drivers/usb/gadget/f_adb.c b/drivers/usb/gadget/f_adb.c
index 1c0166c6df21..fe4455e50d10 100644
--- a/drivers/usb/gadget/f_adb.c
+++ b/drivers/usb/gadget/f_adb.c
@@ -111,8 +111,6 @@ static struct usb_descriptor_header *hs_adb_descs[] = {
NULL,
};
-static void adb_ready_callback(void);
-static void adb_closed_callback(void);
/* temporary variable used between adb_open() and adb_gadget_bind() */
static struct adb_dev *_adb_dev;
@@ -408,7 +406,7 @@ static ssize_t adb_write(struct file *fp, const char __user *buf,
static int adb_open(struct inode *ip, struct file *fp)
{
- pr_info("adb_open\n");
+ printk(KERN_INFO "adb_open\n");
if (!_adb_dev)
return -ENODEV;
@@ -420,17 +418,12 @@ static int adb_open(struct inode *ip, struct file *fp)
/* clear the error latch */
_adb_dev->error = 0;
- adb_ready_callback();
-
return 0;
}
static int adb_release(struct inode *ip, struct file *fp)
{
- pr_info("adb_release\n");
-
- adb_closed_callback();
-
+ printk(KERN_INFO "adb_release\n");
adb_unlock(&_adb_dev->open_excl);
return 0;
}