summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/usb/misc/rio500.c24
1 files changed, 18 insertions, 6 deletions
diff --git a/drivers/usb/misc/rio500.c b/drivers/usb/misc/rio500.c
index 7b9adeb3e7aa..1d397d93d127 100644
--- a/drivers/usb/misc/rio500.c
+++ b/drivers/usb/misc/rio500.c
@@ -447,15 +447,23 @@ static int probe_rio(struct usb_interface *intf,
447{ 447{
448 struct usb_device *dev = interface_to_usbdev(intf); 448 struct usb_device *dev = interface_to_usbdev(intf);
449 struct rio_usb_data *rio = &rio_instance; 449 struct rio_usb_data *rio = &rio_instance;
450 int retval; 450 int retval = 0;
451 451
452 dev_info(&intf->dev, "USB Rio found at address %d\n", dev->devnum); 452 mutex_lock(&rio500_mutex);
453 if (rio->present) {
454 dev_info(&intf->dev, "Second USB Rio at address %d refused\n", dev->devnum);
455 retval = -EBUSY;
456 goto bail_out;
457 } else {
458 dev_info(&intf->dev, "USB Rio found at address %d\n", dev->devnum);
459 }
453 460
454 retval = usb_register_dev(intf, &usb_rio_class); 461 retval = usb_register_dev(intf, &usb_rio_class);
455 if (retval) { 462 if (retval) {
456 dev_err(&dev->dev, 463 dev_err(&dev->dev,
457 "Not able to get a minor for this device.\n"); 464 "Not able to get a minor for this device.\n");
458 return -ENOMEM; 465 retval = -ENOMEM;
466 goto bail_out;
459 } 467 }
460 468
461 rio->rio_dev = dev; 469 rio->rio_dev = dev;
@@ -464,7 +472,8 @@ static int probe_rio(struct usb_interface *intf,
464 dev_err(&dev->dev, 472 dev_err(&dev->dev,
465 "probe_rio: Not enough memory for the output buffer\n"); 473 "probe_rio: Not enough memory for the output buffer\n");
466 usb_deregister_dev(intf, &usb_rio_class); 474 usb_deregister_dev(intf, &usb_rio_class);
467 return -ENOMEM; 475 retval = -ENOMEM;
476 goto bail_out;
468 } 477 }
469 dev_dbg(&intf->dev, "obuf address:%p\n", rio->obuf); 478 dev_dbg(&intf->dev, "obuf address:%p\n", rio->obuf);
470 479
@@ -473,7 +482,8 @@ static int probe_rio(struct usb_interface *intf,
473 "probe_rio: Not enough memory for the input buffer\n"); 482 "probe_rio: Not enough memory for the input buffer\n");
474 usb_deregister_dev(intf, &usb_rio_class); 483 usb_deregister_dev(intf, &usb_rio_class);
475 kfree(rio->obuf); 484 kfree(rio->obuf);
476 return -ENOMEM; 485 retval = -ENOMEM;
486 goto bail_out;
477 } 487 }
478 dev_dbg(&intf->dev, "ibuf address:%p\n", rio->ibuf); 488 dev_dbg(&intf->dev, "ibuf address:%p\n", rio->ibuf);
479 489
@@ -481,8 +491,10 @@ static int probe_rio(struct usb_interface *intf,
481 491
482 usb_set_intfdata (intf, rio); 492 usb_set_intfdata (intf, rio);
483 rio->present = 1; 493 rio->present = 1;
494bail_out:
495 mutex_unlock(&rio500_mutex);
484 496
485 return 0; 497 return retval;
486} 498}
487 499
488static void disconnect_rio(struct usb_interface *intf) 500static void disconnect_rio(struct usb_interface *intf)