]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - arch/mips/sgi-ip22/ip22-time.c
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs...
[linux-2.6-omap-h63xx.git] / arch / mips / sgi-ip22 / ip22-time.c
index de3d01823ad54b48a7d0726a607bc6730d15603f..3dcb27ec0c530b7aa4238bc4eb2cd568cd9fc794 100644 (file)
@@ -10,7 +10,6 @@
  * Copyright (C) 2003, 06 Ralf Baechle (ralf@linux-mips.org)
  */
 #include <linux/bcd.h>
-#include <linux/ds1286.h>
 #include <linux/init.h>
 #include <linux/irq.h>
 #include <linux/kernel.h>
@@ -20,6 +19,7 @@
 
 #include <asm/cpu.h>
 #include <asm/mipsregs.h>
+#include <asm/i8253.h>
 #include <asm/io.h>
 #include <asm/irq.h>
 #include <asm/time.h>
 #include <asm/sgi/hpc3.h>
 #include <asm/sgi/ip22.h>
 
-/*
- * note that mktime uses month from 1 to 12 while to_tm
- * uses 0 to 11.
- */
-static unsigned long indy_rtc_get_time(void)
-{
-       unsigned int yrs, mon, day, hrs, min, sec;
-       unsigned int save_control;
-       unsigned long flags;
-
-       spin_lock_irqsave(&rtc_lock, flags);
-       save_control = hpc3c0->rtcregs[RTC_CMD] & 0xff;
-       hpc3c0->rtcregs[RTC_CMD] = save_control | RTC_TE;
-
-       sec = BCD2BIN(hpc3c0->rtcregs[RTC_SECONDS] & 0xff);
-       min = BCD2BIN(hpc3c0->rtcregs[RTC_MINUTES] & 0xff);
-       hrs = BCD2BIN(hpc3c0->rtcregs[RTC_HOURS] & 0x3f);
-       day = BCD2BIN(hpc3c0->rtcregs[RTC_DATE] & 0xff);
-       mon = BCD2BIN(hpc3c0->rtcregs[RTC_MONTH] & 0x1f);
-       yrs = BCD2BIN(hpc3c0->rtcregs[RTC_YEAR] & 0xff);
-
-       hpc3c0->rtcregs[RTC_CMD] = save_control;
-       spin_unlock_irqrestore(&rtc_lock, flags);
-
-       if (yrs < 45)
-               yrs += 30;
-       if ((yrs += 40) < 70)
-               yrs += 100;
-
-       return mktime(yrs + 1900, mon, day, hrs, min, sec);
-}
-
-static int indy_rtc_set_time(unsigned long tim)
-{
-       struct rtc_time tm;
-       unsigned int save_control;
-       unsigned long flags;
-
-       to_tm(tim, &tm);
-
-       tm.tm_mon += 1;         /* tm_mon starts at zero */
-       tm.tm_year -= 1940;
-       if (tm.tm_year >= 100)
-               tm.tm_year -= 100;
-
-       spin_lock_irqsave(&rtc_lock, flags);
-       save_control = hpc3c0->rtcregs[RTC_CMD] & 0xff;
-       hpc3c0->rtcregs[RTC_CMD] = save_control | RTC_TE;
-
-       hpc3c0->rtcregs[RTC_YEAR] = BIN2BCD(tm.tm_year);
-       hpc3c0->rtcregs[RTC_MONTH] = BIN2BCD(tm.tm_mon);
-       hpc3c0->rtcregs[RTC_DATE] = BIN2BCD(tm.tm_mday);
-       hpc3c0->rtcregs[RTC_HOURS] = BIN2BCD(tm.tm_hour);
-       hpc3c0->rtcregs[RTC_MINUTES] = BIN2BCD(tm.tm_min);
-       hpc3c0->rtcregs[RTC_SECONDS] = BIN2BCD(tm.tm_sec);
-       hpc3c0->rtcregs[RTC_HUNDREDTH_SECOND] = 0;
-
-       hpc3c0->rtcregs[RTC_CMD] = save_control;
-       spin_unlock_irqrestore(&rtc_lock, flags);
-
-       return 0;
-}
-
 static unsigned long dosample(void)
 {
        u32 ct0, ct1;
@@ -128,7 +65,7 @@ static unsigned long dosample(void)
 /*
  * Here we need to calibrate the cycle counter to at least be close.
  */
-static __init void indy_time_init(void)
+__init void plat_time_init(void)
 {
        unsigned long r4k_ticks[3];
        unsigned long r4k_tick;
@@ -172,6 +109,9 @@ static __init void indy_time_init(void)
                (int) (r4k_tick % (500000 / HZ)));
 
        mips_hpt_frequency = r4k_tick * HZ;
+
+       if (ip22_is_fullhouse())
+               setup_pit_timer();
 }
 
 /* Generic SGI handler for (spurious) 8254 interrupts */
@@ -188,31 +128,3 @@ void indy_8254timer_irq(void)
        ArcEnterInteractiveMode();
        irq_exit();
 }
-
-void indy_r4k_timer_interrupt(void)
-{
-       int irq = SGI_TIMER_IRQ;
-
-       irq_enter();
-       kstat_this_cpu.irqs[irq]++;
-       timer_interrupt(irq, NULL);
-       irq_exit();
-}
-
-void __init plat_timer_setup(struct irqaction *irq)
-{
-       /* over-write the handler, we use our own way */
-       irq->handler = no_action;
-
-       /* setup irqaction */
-       setup_irq(SGI_TIMER_IRQ, irq);
-}
-
-void __init ip22_time_init(void)
-{
-       /* setup hookup functions */
-       rtc_mips_get_time = indy_rtc_get_time;
-       rtc_mips_set_time = indy_rtc_set_time;
-
-       board_time_init = indy_time_init;
-}