diff -Naur linux-2.6.25.maxim/drivers/usb/gadget/serial.c linux-2.6.25.at91-20080908/drivers/usb/gadget/serial.c
--- linux-2.6.25.maxim/drivers/usb/gadget/serial.c	2008-04-16 21:49:44.000000000 -0500
+++ linux-2.6.25.at91-20080908/drivers/usb/gadget/serial.c	2008-09-08 11:06:33.000000000 -0500
@@ -38,10 +38,14 @@
 #define GS_LONG_NAME			"Gadget Serial"
 #define GS_SHORT_NAME			"g_serial"
 
-#define GS_MAJOR			127
-#define GS_MINOR_START			0
+//#define GS_MAJOR			127
+//#define GS_MINOR_START			0
 
-#define GS_NUM_PORTS			16
+//#define GS_NUM_PORTS			16
+/* Maybe this should be a config option. For most cases 16 devices
+ * would add clutter and be a waste of resources -- tstrat
+ */
+#define GS_NUM_PORTS			4
 
 #define GS_NUM_CONFIGS			1
 #define GS_NO_CONFIG_ID			0
@@ -563,9 +567,10 @@
 		return -ENOMEM;
 	gs_tty_driver->owner = THIS_MODULE;
 	gs_tty_driver->driver_name = GS_SHORT_NAME;
-	gs_tty_driver->name = "ttygs";
-	gs_tty_driver->major = GS_MAJOR;
-	gs_tty_driver->minor_start = GS_MINOR_START;
+	gs_tty_driver->name = "ttyGS";
+	
+	/* uses dynamically assigned dev_t values */
+
 	gs_tty_driver->type = TTY_DRIVER_TYPE_SERIAL;
 	gs_tty_driver->subtype = SERIAL_TYPE_NORMAL;
 	gs_tty_driver->flags = TTY_DRIVER_REAL_RAW | TTY_DRIVER_DYNAMIC_DEV;
@@ -584,6 +589,14 @@
 				"ret=%d\n", retval);
 		return retval;
 	}
+	for(i = 0; i < GS_NUM_PORTS; i++) {
+		struct device *tty_dev;
+		tty_dev = tty_register_device(gs_tty_driver, i, &(gs_device->dev_gadget->dev));
+		if (IS_ERR(tty_dev))
+			pr_warning("%s: no classdev for port %d, err %ld\n",
+				__func__, i, PTR_ERR(tty_dev));
+	}
+
 
 	pr_info("gs_module_init: %s %s loaded\n",
 			GS_LONG_NAME, GS_VERSION_STR);
