From 35579f80179a8d3b09c5edb074a1ef67aa6e327d Mon Sep 17 00:00:00 2001 From: theStack Date: Fri, 4 Sep 2009 17:12:41 +0200 Subject: [PATCH] killed the ohci_init FM_INTERVAL fail --- ohci.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/ohci.c b/ohci.c index 899d474..699f402 100644 --- a/ohci.c +++ b/ohci.c @@ -48,6 +48,17 @@ void ohci_init() { * see output in ohci.default */ + /* disable hc interrupts */ + set32(OHCI0_HC_INT_DISABLE, OHCI_INTR_MIE); + + /* save fmInterval and calculate FSMPS */ +#define FSMP(fi) (0x7fff & ((6 * ((fi) - 210)) / 7)) +#define FI 0x2edf /* 12000 bits per frame (-1) */ + u32 fmint = read32(OHCI0_HC_FM_INTERVAL) & 0x3fff; + if(fmint != FI) + gecko_printf("ohci-- fminterval delta: %d\n", fmint - FI); + fmint |= FSMP (fmint) << 16; + /* enable interrupts of both usb host controllers */ set32(EHCI_CTL, EHCI_CTL_OH0INTE | EHCI_CTL_OH1INTE | 0xe0000); @@ -82,9 +93,10 @@ void ohci_init() { /* set periodicstart */ #define FIT (1<<31) u32 fmInterval = read32(OHCI0_HC_FM_INTERVAL) &0x3fff; + printf("OHCI0_HC_FMINTERVAL: %08X OCHI0_HC_FMINTERVAL&0x3fff: %08X\n", read32(OHCI0_HC_FM_INTERVAL), fmInterval); u32 fit = read32(OHCI0_HC_FM_INTERVAL) & FIT; - write32(OHCI0_HC_FM_INTERVAL, read32(OHCI0_HC_FM_INTERVAL) | (fit ^ FIT)); + write32(OHCI0_HC_FM_INTERVAL, fmint | (fit ^ FIT)); write32(OHCI0_HC_PERIODIC_START, ((9*fmInterval)/10)&0x3fff); /* testing bla */ -- 2.25.1