/*
* pit.c -- Motorola ColdFire PIT timer. Currently this type of
* hardware timer only exists in the Motorola ColdFire
- * 5270/5271 and 5282 CPUs.
+ * 5282 CPU.
*
- * Copyright (C) 1999-2004, Greg Ungerer (gerg@snapgear.com)
- * Copyright (C) 2001-2004, SnapGear Inc. (www.snapgear.com)
+ * Copyright (C) 1999-2003, Greg Ungerer (gerg@snapgear.com)
+ * Copyright (C) 2001-2003, SnapGear Inc. (www.snapgear.com)
*
*/
volatile unsigned long *imrp;
volatile struct mcfpit *tp;
- request_irq(MCFINT_VECBASE + MCFINT_PIT1, handler, SA_INTERRUPT,
- "ColdFire Timer", NULL);
+ request_irq(64+55, handler, SA_INTERRUPT, "ColdFire Timer", NULL);
icrp = (volatile unsigned char *) (MCF_IPSBAR + MCFICM_INTC0 +
MCFINTC_ICR0 + MCFINT_PIT1);
*icrp = 0x2b; /* PIT1 with level 5, priority 3 */
imrp = (volatile unsigned long *) (MCF_IPSBAR + MCFICM_INTC0 + MCFINTC_IMRH);
- *imrp &= ~(1 << (MCFINT_PIT1 - 32));
+ *imrp &= ~(1 << (55 - 32));
/* Set up PIT timer 1 as poll clock */
tp = (volatile struct mcfpit *) (MCF_IPSBAR + MCFPIT_BASE1);
tp = (volatile struct mcfpit *) (MCF_IPSBAR + MCFPIT_BASE1);
ipr = (volatile unsigned long *) (MCF_IPSBAR + MCFICM_INTC0 + MCFINTC_IPRH);
- pmr = *(&tp->pmr);
- pcntr = *(&tp->pcntr);
+ pmr = tp->pmr;
+ pcntr = tp->pcntr;
/*
* If we are still in the first half of the upcount and a
* timer interupt is pending, then add on a ticks worth of time.
*/
- offset = ((pmr - pcntr) * (1000000 / HZ)) / pmr;
- if ((offset < (1000000 / HZ / 2)) && (*ipr & (1 << (MCFINT_PIT1 - 32))))
+ offset = ((pcntr * (1000000 / HZ)) / pmr);
+ if ((offset < (1000000 / HZ / 2)) && (*ipr & (1 << (55 - 32))))
offset += 1000000 / HZ;
return offset;
}