diff --git a/drivers/usb/gadget/configfs.c b/drivers/usb/gadget/configfs.c index efcbf28b93e0..e6a4516a2a75 100644 --- a/drivers/usb/gadget/configfs.c +++ b/drivers/usb/gadget/configfs.c @@ -1483,97 +1483,6 @@ static void configfs_composite_unbind(struct usb_gadget *gadget) spin_unlock_irqrestore(&gi->spinlock, flags); } -static int configfs_composite_setup(struct usb_gadget *gadget, - const struct usb_ctrlrequest *ctrl) -{ - struct usb_composite_dev *cdev; - struct gadget_info *gi; - unsigned long flags; - int ret; - - cdev = get_gadget_data(gadget); - if (!cdev) - return 0; - - gi = container_of(cdev, struct gadget_info, cdev); - spin_lock_irqsave(&gi->spinlock, flags); - cdev = get_gadget_data(gadget); - if (!cdev || gi->unbind) { - spin_unlock_irqrestore(&gi->spinlock, flags); - return 0; - } - - ret = composite_setup(gadget, ctrl); - spin_unlock_irqrestore(&gi->spinlock, flags); - return ret; -} - -static void configfs_composite_disconnect(struct usb_gadget *gadget) -{ - struct usb_composite_dev *cdev; - struct gadget_info *gi; - unsigned long flags; - - cdev = get_gadget_data(gadget); - if (!cdev) - return; - - gi = container_of(cdev, struct gadget_info, cdev); - spin_lock_irqsave(&gi->spinlock, flags); - cdev = get_gadget_data(gadget); - if (!cdev || gi->unbind) { - spin_unlock_irqrestore(&gi->spinlock, flags); - return; - } - - composite_disconnect(gadget); - spin_unlock_irqrestore(&gi->spinlock, flags); -} - -static void configfs_composite_suspend(struct usb_gadget *gadget) -{ - struct usb_composite_dev *cdev; - struct gadget_info *gi; - unsigned long flags; - - cdev = get_gadget_data(gadget); - if (!cdev) - return; - - gi = container_of(cdev, struct gadget_info, cdev); - spin_lock_irqsave(&gi->spinlock, flags); - cdev = get_gadget_data(gadget); - if (!cdev || gi->unbind) { - spin_unlock_irqrestore(&gi->spinlock, flags); - return; - } - - composite_suspend(gadget); - spin_unlock_irqrestore(&gi->spinlock, flags); -} - -static void configfs_composite_resume(struct usb_gadget *gadget) -{ - struct usb_composite_dev *cdev; - struct gadget_info *gi; - unsigned long flags; - - cdev = get_gadget_data(gadget); - if (!cdev) - return; - - gi = container_of(cdev, struct gadget_info, cdev); - spin_lock_irqsave(&gi->spinlock, flags); - cdev = get_gadget_data(gadget); - if (!cdev || gi->unbind) { - spin_unlock_irqrestore(&gi->spinlock, flags); - return; - } - - composite_resume(gadget); - spin_unlock_irqrestore(&gi->spinlock, flags); -} - #ifdef CONFIG_USB_CONFIGFS_UEVENT static int android_setup(struct usb_gadget *gadget, const struct usb_ctrlrequest *c) @@ -1645,7 +1554,101 @@ static void android_disconnect(struct usb_gadget *gadget) schedule_work(&gi->work); composite_disconnect(gadget); } -#endif + +#else // CONFIG_USB_CONFIGFS_UEVENT + +static int configfs_composite_setup(struct usb_gadget *gadget, + const struct usb_ctrlrequest *ctrl) +{ + struct usb_composite_dev *cdev; + struct gadget_info *gi; + unsigned long flags; + int ret; + + cdev = get_gadget_data(gadget); + if (!cdev) + return 0; + + gi = container_of(cdev, struct gadget_info, cdev); + spin_lock_irqsave(&gi->spinlock, flags); + cdev = get_gadget_data(gadget); + if (!cdev || gi->unbind) { + spin_unlock_irqrestore(&gi->spinlock, flags); + return 0; + } + + ret = composite_setup(gadget, ctrl); + spin_unlock_irqrestore(&gi->spinlock, flags); + return ret; +} + +static void configfs_composite_disconnect(struct usb_gadget *gadget) +{ + struct usb_composite_dev *cdev; + struct gadget_info *gi; + unsigned long flags; + + cdev = get_gadget_data(gadget); + if (!cdev) + return; + + gi = container_of(cdev, struct gadget_info, cdev); + spin_lock_irqsave(&gi->spinlock, flags); + cdev = get_gadget_data(gadget); + if (!cdev || gi->unbind) { + spin_unlock_irqrestore(&gi->spinlock, flags); + return; + } + + composite_disconnect(gadget); + spin_unlock_irqrestore(&gi->spinlock, flags); +} + +#endif // CONFIG_USB_CONFIGFS_UEVENT + +static void configfs_composite_suspend(struct usb_gadget *gadget) +{ + struct usb_composite_dev *cdev; + struct gadget_info *gi; + unsigned long flags; + + cdev = get_gadget_data(gadget); + if (!cdev) + return; + + gi = container_of(cdev, struct gadget_info, cdev); + spin_lock_irqsave(&gi->spinlock, flags); + cdev = get_gadget_data(gadget); + if (!cdev || gi->unbind) { + spin_unlock_irqrestore(&gi->spinlock, flags); + return; + } + + composite_suspend(gadget); + spin_unlock_irqrestore(&gi->spinlock, flags); +} + +static void configfs_composite_resume(struct usb_gadget *gadget) +{ + struct usb_composite_dev *cdev; + struct gadget_info *gi; + unsigned long flags; + + cdev = get_gadget_data(gadget); + if (!cdev) + return; + + gi = container_of(cdev, struct gadget_info, cdev); + spin_lock_irqsave(&gi->spinlock, flags); + cdev = get_gadget_data(gadget); + if (!cdev || gi->unbind) { + spin_unlock_irqrestore(&gi->spinlock, flags); + return; + } + + composite_resume(gadget); + spin_unlock_irqrestore(&gi->spinlock, flags); +} static const struct usb_gadget_driver configfs_driver_template = { .bind = configfs_composite_bind,