This patch ties up udc closedown before starting Linux, and
makes sure the endpoints are off in the hardware.

Signed-off-by: Andy Green <[EMAIL PROTECTED]>
---

 common/cmd_bootm.c             |    7 +++++++
 drivers/usb/usbdcore_s3c2410.c |    5 ++++-
 2 files changed, 11 insertions(+), 1 deletions(-)

diff --git a/common/cmd_bootm.c b/common/cmd_bootm.c
index 8a454b8..057075a 100644
--- a/common/cmd_bootm.c
+++ b/common/cmd_bootm.c
@@ -60,6 +60,8 @@ extern int do_reset (cmd_tbl_t *cmdtp, int flag, int argc, 
char *argv[]);
 #include <hush.h>
 #endif
 
+extern void udc_disable (void);
+
 DECLARE_GLOBAL_DATA_PTR;
 
 extern int gunzip (void *dst, int dstlen, unsigned char *src, unsigned long 
*lenp);
@@ -230,6 +232,11 @@ int do_bootm (cmd_tbl_t *cmdtp, int flag, int argc, char 
*argv[])
        mmc_depower();
 #endif
 
+#if (defined(CONFIG_S3C2410) || defined(CONFIG_S3C2440) || \
+     defined(CONFIG_S3C2442) || defined(CONFIG_S3C2443)) && 
defined(CONFIG_USB_DEVICE)
+       udc_disable();
+#endif
+
        /*
         * We have reached the point of no return: we are going to
         * overwrite all exception vector code, so we cannot easily
diff --git a/drivers/usb/usbdcore_s3c2410.c b/drivers/usb/usbdcore_s3c2410.c
index 8a982b3..a18e7e1 100644
--- a/drivers/usb/usbdcore_s3c2410.c
+++ b/drivers/usb/usbdcore_s3c2410.c
@@ -140,7 +140,10 @@ static int s3c2410_write_noniso_tx_fifo(struct 
usb_endpoint_instance *endpoint)
 
 static void s3c2410_deconfigure_device (void)
 {
-       /* FIXME: Implement this */
+       outl(0, S3C2410_UDC_EP1_DMA_CON);
+       outl(0, S3C2410_UDC_EP2_DMA_CON);
+       outl(0, S3C2410_UDC_EP3_DMA_CON);
+       outl(0, S3C2410_UDC_EP4_DMA_CON);
 }
 
 static void s3c2410_configure_device (struct usb_device_instance *device)


Reply via email to