Merge tag 'devicetree-fixes-for-4.4' of git://git.kernel.org/pub/scm/linux/kernel...
[firefly-linux-kernel-4.4.55.git] / drivers / usb / gadget / function / f_printer.c
index 357f63f47b42aba69d92e24346963645227d39e2..7fb3209ed52c31c662b24b1799e78ff9a4d38700 100644 (file)
@@ -804,6 +804,8 @@ done:
 
 static void printer_reset_interface(struct printer_dev *dev)
 {
+       unsigned long   flags;
+
        if (dev->interface < 0)
                return;
 
@@ -815,9 +817,11 @@ static void printer_reset_interface(struct printer_dev *dev)
        if (dev->out_ep->desc)
                usb_ep_disable(dev->out_ep);
 
+       spin_lock_irqsave(&dev->lock, flags);
        dev->in_ep->desc = NULL;
        dev->out_ep->desc = NULL;
        dev->interface = -1;
+       spin_unlock_irqrestore(&dev->lock, flags);
 }
 
 /* Change our operational Interface. */
@@ -1035,12 +1039,10 @@ autoconf_fail:
                        cdev->gadget->name);
                return -ENODEV;
        }
-       in_ep->driver_data = in_ep;     /* claim */
 
        out_ep = usb_ep_autoconfig(cdev->gadget, &fs_ep_out_desc);
        if (!out_ep)
                goto autoconf_fail;
-       out_ep->driver_data = out_ep;   /* claim */
 
        /* assumes that all endpoints are dual-speed */
        hs_ep_in_desc.bEndpointAddress = fs_ep_in_desc.bEndpointAddress;
@@ -1131,13 +1133,10 @@ static int printer_func_set_alt(struct usb_function *f,
 static void printer_func_disable(struct usb_function *f)
 {
        struct printer_dev *dev = func_to_printer(f);
-       unsigned long           flags;
 
        DBG(dev, "%s\n", __func__);
 
-       spin_lock_irqsave(&dev->lock, flags);
        printer_reset_interface(dev);
-       spin_unlock_irqrestore(&dev->lock, flags);
 }
 
 static inline struct f_printer_opts