diff options
author | Xinyu Chen <xinyu.chen@freescale.com> | 2012-04-20 11:22:08 +0800 |
---|---|---|
committer | Xinyu Chen <xinyu.chen@freescale.com> | 2012-04-20 11:22:08 +0800 |
commit | 2914e50b00af66d52eac98fa58e4f4f159a2305b (patch) | |
tree | cf5151c9fee50585ce81e4a364ec9a4d74a6949c /drivers | |
parent | 7a63dba784c8a19ecadc7a7ed6856c5f6f641374 (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.c | 118 | ||||
-rw-r--r-- | drivers/usb/gadget/f_adb.c | 11 |
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; } |