fix-kill-endpoints-before-linux.patch
authorAndy Green <andy@openmoko.com>
Fri, 1 Aug 2008 06:47:19 +0000 (07:47 +0100)
committerAndy Green <agreen@pads.home.warmcat.com>
Fri, 1 Aug 2008 06:47:19 +0000 (07:47 +0100)
This patch ties up udc closedown before starting Linux, and
makes sure the endpoints are off in the hardware.

Signed-off-by: Andy Green <andy@openmoko.com>

common/cmd_bootm.c
drivers/usb/usbdcore_s3c2410.c

index 8a454b8..057075a 100644 (file)
@@ -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
index 8a982b3..a18e7e1 100644 (file)
@@ -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)