diff options
author | Wolfgang Wiedmeyer <wolfgit@wiedmeyer.de> | 2016-09-17 03:54:23 +0200 |
---|---|---|
committer | Wolfgang Wiedmeyer <wolfgit@wiedmeyer.de> | 2016-09-27 02:50:40 +0200 |
commit | bedf96d235bc589960365fb470046b19faca7afd (patch) | |
tree | 7b5ee6c5f65728835e8d7c76b861f602f19f0539 | |
parent | 40ad5e07e8a06c61141d8007c3b5e02a2c3f9513 (diff) | |
download | kernel_i9300_mainline-bedf96d235bc589960365fb470046b19faca7afd.zip kernel_i9300_mainline-bedf96d235bc589960365fb470046b19faca7afd.tar.gz kernel_i9300_mainline-bedf96d235bc589960365fb470046b19faca7afd.tar.bz2 |
Revert "usb: gadget: Add Uevent to notify userspace"
This reverts commit 9ba2a365af59e4a664f48cdfc8d13d12996cba66.
-rw-r--r-- | drivers/usb/gadget/Kconfig | 8 | ||||
-rw-r--r-- | drivers/usb/gadget/configfs.c | 154 |
2 files changed, 3 insertions, 159 deletions
diff --git a/drivers/usb/gadget/Kconfig b/drivers/usb/gadget/Kconfig index 010c50a..3c3f31c 100644 --- a/drivers/usb/gadget/Kconfig +++ b/drivers/usb/gadget/Kconfig @@ -381,14 +381,6 @@ config USB_CONFIGFS_F_FS implemented in kernel space (for instance Ethernet, serial or mass storage) and other are implemented in user space. -config USB_CONFIGFS_UEVENT - boolean "Uevent notification of Gadget state" - depends on USB_CONFIGFS - help - Enable uevent notifications to userspace when the gadget - state changes. The gadget can be in any of the following - three states: "CONNECTED/DISCONNECTED/CONFIGURED" - config USB_CONFIGFS_F_UAC1 bool "Audio Class 1.0" depends on USB_CONFIGFS diff --git a/drivers/usb/gadget/configfs.c b/drivers/usb/gadget/configfs.c index 5cc7ebf..f9237fe 100644 --- a/drivers/usb/gadget/configfs.c +++ b/drivers/usb/gadget/configfs.c @@ -9,20 +9,6 @@ #include "u_f.h" #include "u_os_desc.h" -#ifdef CONFIG_USB_CONFIGFS_UEVENT -#include <linux/platform_device.h> -#include <linux/kdev_t.h> -#include <linux/usb/ch9.h> -#include "u_fs.h" - -#ifdef CONFIG_USB_CONFIGFS_F_ACC -extern int acc_ctrlrequest(struct usb_composite_dev *cdev, - const struct usb_ctrlrequest *ctrl); -void acc_disconnect(void); -#endif -static struct class *android_class; -#endif - int check_user_usb_string(const char *name, struct usb_gadget_strings *stringtab_dev) { @@ -74,12 +60,6 @@ struct gadget_info { bool use_os_desc; char b_vendor_code; char qw_sign[OS_STRING_QW_SIGN_LEN]; -#ifdef CONFIG_USB_CONFIGFS_UEVENT - bool connected; - bool sw_connected; - struct work_struct work; - struct device *dev; -#endif }; static inline struct gadget_info *to_gadget_info(struct config_item *item) @@ -285,7 +265,7 @@ static ssize_t gadget_dev_desc_UDC_store(struct config_item *item, mutex_lock(&gi->lock); - if (!strlen(name) || strcmp(name, "none") == 0) { + if (!strlen(name)) { ret = unregister_gadget(gi); if (ret) goto err; @@ -1386,57 +1366,6 @@ err_comp_cleanup: return ret; } -#ifdef CONFIG_USB_CONFIGFS_UEVENT -static void android_work(struct work_struct *data) -{ - struct gadget_info *gi = container_of(data, struct gadget_info, work); - struct usb_composite_dev *cdev = &gi->cdev; - char *disconnected[2] = { "USB_STATE=DISCONNECTED", NULL }; - char *connected[2] = { "USB_STATE=CONNECTED", NULL }; - char *configured[2] = { "USB_STATE=CONFIGURED", NULL }; - /* 0-connected 1-configured 2-disconnected*/ - bool status[3] = { false, false, false }; - unsigned long flags; - bool uevent_sent = false; - - spin_lock_irqsave(&cdev->lock, flags); - if (cdev->config) - status[1] = true; - - if (gi->connected != gi->sw_connected) { - if (gi->connected) - status[0] = true; - else - status[2] = true; - gi->sw_connected = gi->connected; - } - spin_unlock_irqrestore(&cdev->lock, flags); - - if (status[0]) { - kobject_uevent_env(&gi->dev->kobj, KOBJ_CHANGE, connected); - pr_info("%s: sent uevent %s\n", __func__, connected[0]); - uevent_sent = true; - } - - if (status[1]) { - kobject_uevent_env(&gi->dev->kobj, KOBJ_CHANGE, configured); - pr_info("%s: sent uevent %s\n", __func__, configured[0]); - uevent_sent = true; - } - - if (status[2]) { - kobject_uevent_env(&gi->dev->kobj, KOBJ_CHANGE, disconnected); - pr_info("%s: sent uevent %s\n", __func__, disconnected[0]); - uevent_sent = true; - } - - if (!uevent_sent) { - pr_info("%s: did not send uevent (%d %d %p)\n", __func__, - gi->connected, gi->sw_connected, cdev->config); - } -} -#endif - static void configfs_composite_unbind(struct usb_gadget *gadget) { struct usb_composite_dev *cdev; @@ -1456,78 +1385,14 @@ static void configfs_composite_unbind(struct usb_gadget *gadget) set_gadget_data(gadget, NULL); } -#ifdef CONFIG_USB_CONFIGFS_UEVENT -static int android_setup(struct usb_gadget *gadget, - const struct usb_ctrlrequest *c) -{ - struct usb_composite_dev *cdev = get_gadget_data(gadget); - unsigned long flags; - struct gadget_info *gi = container_of(cdev, struct gadget_info, cdev); - int value = -EOPNOTSUPP; - struct usb_function_instance *fi; - - spin_lock_irqsave(&cdev->lock, flags); - if (!gi->connected) { - gi->connected = 1; - schedule_work(&gi->work); - } - spin_unlock_irqrestore(&cdev->lock, flags); - list_for_each_entry(fi, &gi->available_func, cfs_list) { - if (fi != NULL && fi->f != NULL && fi->f->setup != NULL) { - value = fi->f->setup(fi->f, c); - if (value >= 0) - break; - } - } - -#ifdef CONFIG_USB_CONFIGFS_F_ACC - if (value < 0) - value = acc_ctrlrequest(cdev, c); -#endif - - if (value < 0) - value = composite_setup(gadget, c); - - spin_lock_irqsave(&cdev->lock, flags); - if (c->bRequest == USB_REQ_SET_CONFIGURATION && - cdev->config) { - schedule_work(&gi->work); - } - spin_unlock_irqrestore(&cdev->lock, flags); - - return value; -} - -static void android_disconnect(struct usb_gadget *gadget) -{ - struct usb_composite_dev *cdev = get_gadget_data(gadget); - struct gadget_info *gi = container_of(cdev, struct gadget_info, cdev); - - /* accessory HID support can be active while the - accessory function is not actually enabled, - so we need to inform it when we are disconnected. - */ - -#ifdef CONFIG_USB_CONFIGFS_F_ACC - acc_disconnect(); -#endif - gi->connected = 0; - schedule_work(&gi->work); - composite_disconnect(gadget); -} -#endif - static const struct usb_gadget_driver configfs_driver_template = { .bind = configfs_composite_bind, .unbind = configfs_composite_unbind, -#ifdef CONFIG_USB_CONFIGFS_UEVENT - .setup = android_setup, - .disconnect = android_disconnect, -#else + .setup = composite_setup, .reset = composite_disconnect, .disconnect = composite_disconnect, -#endif + .suspend = composite_suspend, .resume = composite_resume, @@ -1587,12 +1452,6 @@ static struct config_group *gadgets_make( gi->composite.gadget_driver.function = kstrdup(name, GFP_KERNEL); gi->composite.name = gi->composite.gadget_driver.function; -#ifdef CONFIG_USB_CONFIGFS_UEVENT - INIT_WORK(&gi->work, android_work); - gi->dev = device_create(android_class, NULL, - MKDEV(0, 0), NULL, "android0"); -#endif - if (!gi->composite.gadget_driver.function) goto err; @@ -1644,13 +1503,6 @@ static int __init gadget_cfs_init(void) config_group_init(&gadget_subsys.su_group); ret = configfs_register_subsystem(&gadget_subsys); - -#ifdef CONFIG_USB_CONFIGFS_UEVENT - android_class = class_create(THIS_MODULE, "android_usb"); - if (IS_ERR(android_class)) - return PTR_ERR(android_class); -#endif - return ret; } module_init(gadget_cfs_init); |