Loading drivers/usb/gadget/configfs.c +28 −16 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ void acc_disconnect(void); static struct class *android_class; static struct device *android_device; static int index; static int gadget_index; struct device *create_function_device(char *name) { Loading Loading @@ -1430,21 +1431,21 @@ static void android_work(struct work_struct *data) spin_unlock_irqrestore(&cdev->lock, flags); if (status[0]) { kobject_uevent_env(&android_device->kobj, 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(&android_device->kobj, 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(&android_device->kobj, kobject_uevent_env(&gi->dev->kobj, KOBJ_CHANGE, disconnected); pr_info("%s: sent uevent %s\n", __func__, disconnected[0]); uevent_sent = true; Loading Loading @@ -1612,21 +1613,25 @@ static int android_device_create(struct gadget_info *gi) struct device_attribute *attr; INIT_WORK(&gi->work, android_work); android_device = device_create(android_class, NULL, MKDEV(0, 0), NULL, "android0"); if (IS_ERR(android_device)) return PTR_ERR(android_device); gi->dev = device_create(android_class, NULL, MKDEV(0, 0), NULL, "android%d", gadget_index++); if (IS_ERR(gi->dev)) return PTR_ERR(gi->dev); dev_set_drvdata(android_device, gi); pr_debug("Creating gadget index %d\n", gadget_index); dev_set_drvdata(gi->dev, gi); if (!android_device) android_device = gi->dev; attrs = android_usb_attributes; while ((attr = *attrs++)) { int err; err = device_create_file(android_device, attr); err = device_create_file(gi->dev, attr); if (err) { device_destroy(android_device->class, android_device->devt); device_destroy(gi->dev->class, gi->dev->devt); return err; } } Loading @@ -1634,15 +1639,19 @@ static int android_device_create(struct gadget_info *gi) return 0; } static void android_device_destroy(void) static void android_device_destroy(struct gadget_info *gi) { struct device_attribute **attrs; struct device_attribute *attr; if (!gi->dev) return; attrs = android_usb_attributes; while ((attr = *attrs++)) device_remove_file(android_device, attr); device_destroy(android_device->class, android_device->devt); device_remove_file(dev, attr); device_destroy(dev->class, dev->devt); gi->dev = NULL; } #else static inline int android_device_create(struct gadget_info *gi) Loading @@ -1650,7 +1659,7 @@ static inline int android_device_create(struct gadget_info *gi) return 0; } static inline void android_device_destroy(void) static inline void android_device_destroy(struct gadget_info *gi) { } #endif Loading Loading @@ -1718,8 +1727,11 @@ static struct config_group *gadgets_make( static void gadgets_drop(struct config_group *group, struct config_item *item) { struct gadget_info *gi; gi = container_of(to_config_group(item), struct gadget_info, group); config_item_put(item); android_device_destroy(); android_device_destroy(gi); } static struct configfs_group_operations gadgets_ops = { Loading Loading
drivers/usb/gadget/configfs.c +28 −16 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ void acc_disconnect(void); static struct class *android_class; static struct device *android_device; static int index; static int gadget_index; struct device *create_function_device(char *name) { Loading Loading @@ -1430,21 +1431,21 @@ static void android_work(struct work_struct *data) spin_unlock_irqrestore(&cdev->lock, flags); if (status[0]) { kobject_uevent_env(&android_device->kobj, 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(&android_device->kobj, 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(&android_device->kobj, kobject_uevent_env(&gi->dev->kobj, KOBJ_CHANGE, disconnected); pr_info("%s: sent uevent %s\n", __func__, disconnected[0]); uevent_sent = true; Loading Loading @@ -1612,21 +1613,25 @@ static int android_device_create(struct gadget_info *gi) struct device_attribute *attr; INIT_WORK(&gi->work, android_work); android_device = device_create(android_class, NULL, MKDEV(0, 0), NULL, "android0"); if (IS_ERR(android_device)) return PTR_ERR(android_device); gi->dev = device_create(android_class, NULL, MKDEV(0, 0), NULL, "android%d", gadget_index++); if (IS_ERR(gi->dev)) return PTR_ERR(gi->dev); dev_set_drvdata(android_device, gi); pr_debug("Creating gadget index %d\n", gadget_index); dev_set_drvdata(gi->dev, gi); if (!android_device) android_device = gi->dev; attrs = android_usb_attributes; while ((attr = *attrs++)) { int err; err = device_create_file(android_device, attr); err = device_create_file(gi->dev, attr); if (err) { device_destroy(android_device->class, android_device->devt); device_destroy(gi->dev->class, gi->dev->devt); return err; } } Loading @@ -1634,15 +1639,19 @@ static int android_device_create(struct gadget_info *gi) return 0; } static void android_device_destroy(void) static void android_device_destroy(struct gadget_info *gi) { struct device_attribute **attrs; struct device_attribute *attr; if (!gi->dev) return; attrs = android_usb_attributes; while ((attr = *attrs++)) device_remove_file(android_device, attr); device_destroy(android_device->class, android_device->devt); device_remove_file(dev, attr); device_destroy(dev->class, dev->devt); gi->dev = NULL; } #else static inline int android_device_create(struct gadget_info *gi) Loading @@ -1650,7 +1659,7 @@ static inline int android_device_create(struct gadget_info *gi) return 0; } static inline void android_device_destroy(void) static inline void android_device_destroy(struct gadget_info *gi) { } #endif Loading Loading @@ -1718,8 +1727,11 @@ static struct config_group *gadgets_make( static void gadgets_drop(struct config_group *group, struct config_item *item) { struct gadget_info *gi; gi = container_of(to_config_group(item), struct gadget_info, group); config_item_put(item); android_device_destroy(); android_device_destroy(gi); } static struct configfs_group_operations gadgets_ops = { Loading