# This is a BitKeeper generated patch for the following project:
# Project Name: Linux kernel tree
# This patch format is intended for GNU patch command version 2.5 or higher.
# This patch includes the following deltas:
#	           ChangeSet	1.570   -> 1.571  
#	drivers/usb/image/mdc800.c	1.17    -> 1.18   
#	drivers/usb/class/printer.c	1.22    -> 1.23   
#	drivers/usb/image/scanner.c	1.19    -> 1.20   
#	drivers/usb/misc/auerswald.c	1.12    -> 1.13   
#	drivers/usb/input/hiddev.c	1.11    -> 1.12   
#	drivers/usb/usb-skeleton.c	1.11    -> 1.12   
#	drivers/usb/misc/brlvger.c	1.2     -> 1.3    
#	drivers/usb/media/dabusb.c	1.15    -> 1.16   
#
# The following is the BitKeeper ChangeSet Log
# --------------------------------------------
# 02/05/02	greg@kroah.com	1.571
# USB
# 
# cleaned up checking the return value of usb_register_dev()
# --------------------------------------------
#
diff -Nru a/drivers/usb/class/printer.c b/drivers/usb/class/printer.c
--- a/drivers/usb/class/printer.c	Thu May  2 16:46:28 2002
+++ b/drivers/usb/class/printer.c	Thu May  2 16:46:28 2002
@@ -794,6 +794,7 @@
 {
 	struct usblp *usblp = 0;
 	int protocol;
+	int retval;
 	char name[6];
 
 	/* Malloc and start initializing usblp structure so we can use it
@@ -808,7 +809,12 @@
 	init_waitqueue_head(&usblp->wait);
 	usblp->ifnum = ifnum;
 
-	if (usb_register_dev(&usblp_driver, 1, &usblp->minor)) {
+	retval = usb_register_dev(&usblp_driver, 1, &usblp->minor);
+	if (retval) {
+		if (retval != -ENODEV) {
+			err("Not able to get a minor for this device.");
+			goto abort;
+		}
 		/* Look for a free usblp_table entry on our own. */
 		while (usblp_table[usblp->minor]) {
 			usblp->minor++;
diff -Nru a/drivers/usb/image/mdc800.c b/drivers/usb/image/mdc800.c
--- a/drivers/usb/image/mdc800.c	Thu May  2 16:46:28 2002
+++ b/drivers/usb/image/mdc800.c	Thu May  2 16:46:28 2002
@@ -411,6 +411,7 @@
 	int i,j;
 	struct usb_interface_descriptor	*intf_desc;
 	int irq_interval=0;
+	int retval;
 
 	dbg ("(mdc800_usb_probe) called.");
 
@@ -475,7 +476,11 @@
 
 	down (&mdc800->io_lock);
 
-	usb_register_dev (&mdc800_usb_driver, 1, &mdc800->minor);
+	retval = usb_register_dev (&mdc800_usb_driver, 1, &mdc800->minor);
+	if (retval && (retval != -ENODEV)) {
+		err ("Not able to get a minor for this device.");
+		return 0;
+	}
 
 	mdc800->dev=dev;
 	mdc800->open=0;
diff -Nru a/drivers/usb/image/scanner.c b/drivers/usb/image/scanner.c
--- a/drivers/usb/image/scanner.c	Thu May  2 16:46:28 2002
+++ b/drivers/usb/image/scanner.c	Thu May  2 16:46:28 2002
@@ -812,6 +812,7 @@
 	int ep_cnt;
 	int ix;
 	int scn_minor;
+	int retval;
 
 	char valid_device = 0;
 	char have_bulk_in, have_bulk_out, have_intr;
@@ -953,7 +954,13 @@
 	
 	down(&scn_mutex);
 
-	if (usb_register_dev(&scanner_driver, 1, &scn_minor)) {
+	retval = usb_register_dev(&scanner_driver, 1, &scn_minor);
+	if (retval) {
+		if (retval != -ENODEV) {
+			err ("Not able to get a minor for this device.");
+			up(&scn_mutex);
+			return NULL;
+		}
 		for (scn_minor = 0; scn_minor < SCN_MAX_MNR; scn_minor++) {
 			if (!p_scn_table[scn_minor])
 				break;
diff -Nru a/drivers/usb/input/hiddev.c b/drivers/usb/input/hiddev.c
--- a/drivers/usb/input/hiddev.c	Thu May  2 16:46:28 2002
+++ b/drivers/usb/input/hiddev.c	Thu May  2 16:46:28 2002
@@ -606,6 +606,7 @@
 {
 	struct hiddev *hiddev;
 	int minor, i;
+	int retval;
 	char devfs_name[16];
 
 	for (i = 0; i < hid->maxapplication; i++)
@@ -615,7 +616,12 @@
 	if (i == hid->maxapplication)
 		return -1;
 
-	if (usb_register_dev (&hiddev_driver, 1, &minor)) {
+	retval = usb_register_dev (&hiddev_driver, 1, &minor);
+	if (retval) {
+		if (retval != -ENODEV) {
+			err ("Not able to get a minor for this device.");
+			return -1;
+		}
 		for (minor = 0; minor < HIDDEV_MINORS && hiddev_table[minor]; minor++);
 		if (minor == HIDDEV_MINORS) {
 			printk(KERN_ERR "hiddev: no more free hiddev devices\n");
diff -Nru a/drivers/usb/media/dabusb.c b/drivers/usb/media/dabusb.c
--- a/drivers/usb/media/dabusb.c	Thu May  2 16:46:28 2002
+++ b/drivers/usb/media/dabusb.c	Thu May  2 16:46:28 2002
@@ -727,6 +727,7 @@
 			   const struct usb_device_id *id)
 {
 	int devnum;
+	int retval;
 	pdabusb_t s;
 
 	dbg("dabusb: probe: vendor id 0x%x, device id 0x%x ifnum:%d",
@@ -739,7 +740,10 @@
 	if (ifnum != _DABUSB_IF && usbdev->descriptor.idProduct == 0x9999)
 		return NULL;
 
-	if (usb_register_dev (&dabusb_driver, 1, &devnum)) {
+	retval = usb_register_dev (&dabusb_driver, 1, &devnum);
+	if (retval) {
+		if (retval != -ENODEV)
+			return NULL;
 		devnum = dabusb_find_struct ();
 		if (devnum == -1)
 			return NULL;
diff -Nru a/drivers/usb/misc/auerswald.c b/drivers/usb/misc/auerswald.c
--- a/drivers/usb/misc/auerswald.c	Thu May  2 16:46:28 2002
+++ b/drivers/usb/misc/auerswald.c	Thu May  2 16:46:28 2002
@@ -1948,7 +1948,13 @@
 	init_waitqueue_head (&cp->bufferwait);
 
 	down (&dev_table_mutex);
-	if (usb_register_dev (&auerswald_driver, 1, &dtindex)) {
+	ret = usb_register_dev (&auerswald_driver, 1, &dtindex);
+	if (ret) {
+		if (ret != -ENODEV) {
+			err ("Not able to get a minor for this device.");
+			up (&dev_table_mutex);
+			goto pfail;
+		}
 		/* find a free slot in the device table */
 		for (dtindex = 0; dtindex < AUER_MAX_DEVICES; ++dtindex) {
 			if (dev_table[dtindex] == NULL)
diff -Nru a/drivers/usb/misc/brlvger.c b/drivers/usb/misc/brlvger.c
--- a/drivers/usb/misc/brlvger.c	Thu May  2 16:46:28 2002
+++ b/drivers/usb/misc/brlvger.c	Thu May  2 16:46:28 2002
@@ -290,6 +290,7 @@
 {
 	struct brlvger_priv *priv = NULL;
 	int i;
+	int retval;
 	struct usb_endpoint_descriptor *endpoint;
 	struct usb_interface_descriptor *actifsettings;
 	/* protects against reentrance: once we've found a free slot
@@ -315,7 +316,12 @@
 
 	down(&reserve_sem);
 
-	if (usb_register_dev(&brlvger_driver, 1, &i)) {
+	retval = usb_register_dev(&brlvger_driver, 1, &i);
+	if (retval) {
+		if (retval != -ENODEV) {
+			err("Not able to get a minor for this device.");
+			goto error;
+		}
 		for( i = 0; i < MAX_NR_BRLVGER_DEVS; i++ )
 			if( display_table[i] == NULL )
 				break;
diff -Nru a/drivers/usb/usb-skeleton.c b/drivers/usb/usb-skeleton.c
--- a/drivers/usb/usb-skeleton.c	Thu May  2 16:46:28 2002
+++ b/drivers/usb/usb-skeleton.c	Thu May  2 16:46:28 2002
@@ -525,6 +525,7 @@
 	int minor;
 	int buffer_size;
 	int i;
+	int retval;
 	char name[10];
 
 	
@@ -535,14 +536,20 @@
 	}
 
 	down (&minor_table_mutex);
-	if (usb_register_dev (&skel_driver, 1, &minor)) {
+	retval = usb_register_dev (&skel_driver, 1, &minor);
+	if (retval) {
+		if (retval != -ENODEV) {
+			/* something prevented us from registering this driver */
+			err ("Not able to get a minor for this device.");
+			goto exit;
+		}
 		/* we could not get a dynamic minor, so lets find one of our own */
 		for (minor = 0; minor < MAX_DEVICES; ++minor) {
 			if (minor_table[minor] == NULL)
 				break;
 		}
 		if (minor >= MAX_DEVICES) {
-			info ("Too many devices plugged in, can not handle this device.");
+			err ("Too many devices plugged in, can not handle this device.");
 			goto exit;
 		}
 	}
