diff --git a/drivers/usb/gadget/ether.c b/drivers/usb/gadget/ether.c
index 9c4422a..504e122 100644
 drivers/usb/gadget/ether.c       |    2 -
 drivers/usb/gadget/s3c2410_udc.c |   58 +++++++++++++++++++++------------------
 drivers/usb/gadget/zero.c        |    2 -
 3 files changed, 34 insertions(+), 28 deletions(-)

Index: linux-2.6/drivers/usb/gadget/ether.c
===================================================================
--- linux-2.6.orig/drivers/usb/gadget/ether.c	2006-05-12 20:35:37.000000000 +0200
+++ linux-2.6/drivers/usb/gadget/ether.c	2006-05-12 20:35:40.000000000 +0200
@@ -2517,7 +2517,7 @@ fail0:
 fail1:
 	dev_dbg(&gadget->dev, "register_netdev failed, %d\n", status);
 fail:
-	eth_unbind (gadget);
+//	eth_unbind (gadget);
 	return status;
 }
 
Index: linux-2.6/drivers/usb/gadget/s3c2410_udc.c
===================================================================
--- linux-2.6.orig/drivers/usb/gadget/s3c2410_udc.c	2006-05-12 20:35:37.000000000 +0200
+++ linux-2.6/drivers/usb/gadget/s3c2410_udc.c	2006-05-21 17:31:27.000000000 +0200
@@ -292,6 +293,9 @@ static int write_fifo(struct s3c2410_ep 
 			break;
 	}
 
+	if (!idx)
+		dprintk(DEBUG_NORMAL, "fifo count : %x\n", fifo_count_out());
+
 	count = write_packet(fifo_reg, req, ep->ep.maxpacket);
 
 	/* last packet is often short (sometimes a zlp) */
@@ -509,7 +513,10 @@ read_fifo_crq(struct usb_ctrlrequest *cr
 	fifo_count = fifo_count_out();
 
 	dprintk(DEBUG_NORMAL, "read_fifo_crq(): fifo_count=%d\n", fifo_count );
-
+#if 0
+	readsb(S3C2410_UDC_EP0_FIFO_REG + base_addr, crq, fifo_count);
+	bytes_read = fifo_count;
+#else
 	fifo_count = sizeof(struct usb_ctrlrequest);
 	while( fifo_count-- ) {
 		i = 0;
@@ -526,6 +533,7 @@ read_fifo_crq(struct usb_ctrlrequest *cr
 		pOut++;
 		bytes_read++;
 	}
+#endif
 
 	dprintk(DEBUG_VERBOSE, "read_fifo_crq: len=%d %02x:%02x {%x,%x,%x}\n",
 			bytes_read, crq->bRequest, crq->bRequestType,
@@ -1491,10 +1499,13 @@ usb_gadget_register_driver (struct usb_g
 		return -ENODEV;
 	if (udc->driver)
 		return -EBUSY;
-	if (!driver->bind || !driver->unbind || !driver->setup
-			|| driver->speed == USB_SPEED_UNKNOWN)
+	if (!driver->bind || !driver->setup
+			|| driver->speed != USB_SPEED_FULL) {
+		printk(KERN_ERR "Invalid driver\n");
 		return -EINVAL;
+	}
 
+	
 	/* Hook the driver */
 	udc->driver = driver;
 	udc->gadget.dev.driver = &driver->driver;
Index: linux-2.6/drivers/usb/gadget/zero.c
===================================================================
--- linux-2.6.orig/drivers/usb/gadget/zero.c	2006-05-12 20:35:37.000000000 +0200
+++ linux-2.6/drivers/usb/gadget/zero.c	2006-05-12 20:35:40.000000000 +0200
@@ -1249,7 +1249,7 @@ autoconf_fail:
 	return 0;
 
 enomem:
-	zero_unbind (gadget);
+//	zero_unbind (gadget);
 	return -ENOMEM;
 }
 
