summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/staging/comedi/drivers/usbdux.c21
1 files changed, 11 insertions, 10 deletions
diff --git a/drivers/staging/comedi/drivers/usbdux.c b/drivers/staging/comedi/drivers/usbdux.c
index 75b2de33ffd5..991c425bb837 100644
--- a/drivers/staging/comedi/drivers/usbdux.c
+++ b/drivers/staging/comedi/drivers/usbdux.c
@@ -1799,20 +1799,21 @@ static void usbdux_detach(struct comedi_device *dev)
struct usb_interface *intf = comedi_to_usb_interface(dev);
struct usbdux_private *devpriv = dev->private;
- if (devpriv) {
- down(&devpriv->sem);
+ usb_set_intfdata(intf, NULL);
- usb_set_intfdata(intf, NULL);
+ if (!devpriv)
+ return;
+
+ down(&devpriv->sem);
- /* stop and unlink any submitted urbs */
- usbdux_pwm_stop(dev, devpriv->pwm_cmd_running);
- usbdux_ao_stop(dev, devpriv->ao_cmd_running);
- usbdux_ai_stop(dev, devpriv->ai_cmd_running);
+ /* force unlink all urbs */
+ usbdux_pwm_stop(dev, 1);
+ usbdux_ao_stop(dev, 1);
+ usbdux_ai_stop(dev, 1);
- usbdux_free_usb_buffers(devpriv);
+ usbdux_free_usb_buffers(devpriv);
- up(&devpriv->sem);
- }
+ up(&devpriv->sem);
}
static struct comedi_driver usbdux_driver = {