diff options
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/staging/comedi/drivers/usbdux.c | 21 |
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 = { |