|
@@ -45,6 +45,7 @@
|
|
|
|
|
|
#ifdef CONFIG_USB_OHCI
|
|
|
|
|
|
+/* mk: are these really required? */
|
|
|
#if defined(CONFIG_S3C2400)
|
|
|
# include <s3c2400.h>
|
|
|
#elif defined(CONFIG_S3C2410)
|
|
@@ -53,6 +54,8 @@
|
|
|
# include <asm/arch/hardware.h>
|
|
|
#elif defined(CONFIG_CPU_MONAHANS)
|
|
|
# include <asm/arch/pxa-regs.h>
|
|
|
+#elif defined(CONFIG_MPC5200)
|
|
|
+# include <mpc5xxx.h>
|
|
|
#endif
|
|
|
|
|
|
#include <malloc.h>
|
|
@@ -557,8 +560,10 @@ static int ep_link (ohci_t *ohci, ed_t *edi)
|
|
|
* the link from the ed still points to another operational ed or 0
|
|
|
* so the HC can eventually finish the processing of the unlinked ed */
|
|
|
|
|
|
-static int ep_unlink (ohci_t *ohci, ed_t *ed)
|
|
|
+static int ep_unlink (ohci_t *ohci, ed_t *edi)
|
|
|
{
|
|
|
+ volatile ed_t *ed = edi;
|
|
|
+
|
|
|
ed->hwINFO |= m32_swap (OHCI_ED_SKIP);
|
|
|
|
|
|
switch (ed->type) {
|
|
@@ -825,6 +830,9 @@ static td_t * dl_reverse_done_list (ohci_t *ohci)
|
|
|
} else
|
|
|
td_list->ed->hwHeadP &= m32_swap (0xfffffff2);
|
|
|
}
|
|
|
+#ifdef CONFIG_MPC5200
|
|
|
+ td_list->hwNextTD = 0;
|
|
|
+#endif
|
|
|
}
|
|
|
|
|
|
td_list->next_dl_td = td_rev;
|
|
@@ -1448,7 +1456,8 @@ static int hc_reset (ohci_t *ohci)
|
|
|
readl(&ohci->regs->control));
|
|
|
|
|
|
/* Reset USB (needed by some controllers) */
|
|
|
- writel (0, &ohci->regs->control);
|
|
|
+ ohci->hc_control = 0;
|
|
|
+ writel (ohci->hc_control, &ohci->regs->control);
|
|
|
|
|
|
/* HC Reset requires max 10 us delay */
|
|
|
writel (OHCI_HCR, &ohci->regs->cmdstatus);
|