staging: comedi: vmk80xx: move usb_driver (*disconnect) code
The usb_driver (*disconnect) in this driver calls the comedi core comedi_usb_auto_unconfig() which calls the comedi_driver (*detach). Move the code in the (*disconnect) to the (*detach) to get all the disconnect/detach in one place. Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com> Cc: Ian Abbott <abbotti@mev.co.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
07b502f50b
commit
9377b9234f
@ -1214,12 +1214,26 @@ static void vmk80xx_detach(struct comedi_device *dev)
|
|||||||
{
|
{
|
||||||
struct vmk80xx_usb *usb = dev->private;
|
struct vmk80xx_usb *usb = dev->private;
|
||||||
|
|
||||||
if (usb) {
|
if (!usb)
|
||||||
down(&usb->limit_sem);
|
return;
|
||||||
dev->private = NULL;
|
|
||||||
usb->attached = 0;
|
mutex_lock(&glb_mutex);
|
||||||
up(&usb->limit_sem);
|
down(&usb->limit_sem);
|
||||||
}
|
|
||||||
|
dev->private = NULL;
|
||||||
|
|
||||||
|
usb->attached = 0;
|
||||||
|
usb->probed = 0;
|
||||||
|
usb_set_intfdata(usb->intf, NULL);
|
||||||
|
|
||||||
|
usb_kill_anchored_urbs(&usb->rx_anchor);
|
||||||
|
usb_kill_anchored_urbs(&usb->tx_anchor);
|
||||||
|
|
||||||
|
kfree(usb->usb_rx_buf);
|
||||||
|
kfree(usb->usb_tx_buf);
|
||||||
|
|
||||||
|
up(&usb->limit_sem);
|
||||||
|
mutex_unlock(&glb_mutex);
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct comedi_driver vmk80xx_driver = {
|
static struct comedi_driver vmk80xx_driver = {
|
||||||
@ -1382,30 +1396,7 @@ error:
|
|||||||
|
|
||||||
static void vmk80xx_usb_disconnect(struct usb_interface *intf)
|
static void vmk80xx_usb_disconnect(struct usb_interface *intf)
|
||||||
{
|
{
|
||||||
struct vmk80xx_usb *dev = usb_get_intfdata(intf);
|
|
||||||
|
|
||||||
if (!dev)
|
|
||||||
return;
|
|
||||||
|
|
||||||
comedi_usb_auto_unconfig(intf);
|
comedi_usb_auto_unconfig(intf);
|
||||||
|
|
||||||
mutex_lock(&glb_mutex);
|
|
||||||
down(&dev->limit_sem);
|
|
||||||
|
|
||||||
dev->probed = 0;
|
|
||||||
usb_set_intfdata(dev->intf, NULL);
|
|
||||||
|
|
||||||
usb_kill_anchored_urbs(&dev->rx_anchor);
|
|
||||||
usb_kill_anchored_urbs(&dev->tx_anchor);
|
|
||||||
|
|
||||||
kfree(dev->usb_rx_buf);
|
|
||||||
kfree(dev->usb_tx_buf);
|
|
||||||
|
|
||||||
dev_info(&intf->dev, "board #%d [%s] now detached\n",
|
|
||||||
dev->count, dev->board.name);
|
|
||||||
|
|
||||||
up(&dev->limit_sem);
|
|
||||||
mutex_unlock(&glb_mutex);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static const struct usb_device_id vmk80xx_usb_id_table[] = {
|
static const struct usb_device_id vmk80xx_usb_id_table[] = {
|
||||||
|
Loading…
Reference in New Issue
Block a user