diff options
Diffstat (limited to 'arch/sh/boards/sh03')
| -rw-r--r-- | arch/sh/boards/sh03/Makefile | 6 | ||||
| -rw-r--r-- | arch/sh/boards/sh03/led.c | 48 | ||||
| -rw-r--r-- | arch/sh/boards/sh03/rtc.c | 133 | ||||
| -rw-r--r-- | arch/sh/boards/sh03/setup.c | 71 |
4 files changed, 0 insertions, 258 deletions
diff --git a/arch/sh/boards/sh03/Makefile b/arch/sh/boards/sh03/Makefile deleted file mode 100644 index 321be50e36a..00000000000 --- a/arch/sh/boards/sh03/Makefile +++ /dev/null @@ -1,6 +0,0 @@ -# -# Makefile for the Interface (CTP/PCI-SH03) specific parts of the kernel -# - -obj-y := setup.o rtc.o -obj-$(CONFIG_HEARTBEAT) += led.o diff --git a/arch/sh/boards/sh03/led.c b/arch/sh/boards/sh03/led.c deleted file mode 100644 index d38562ad6be..00000000000 --- a/arch/sh/boards/sh03/led.c +++ /dev/null @@ -1,48 +0,0 @@ -/* - * linux/arch/sh/boards/sh03/led.c - * - * Copyright (C) 2004 Saito.K Interface Corporation. - * - * This file contains Interface CTP/PCI-SH03 specific LED code. - */ - -#include <linux/sched.h> - -/* Cycle the LED's in the clasic Knightrider/Sun pattern */ -void heartbeat_sh03(void) -{ - static unsigned int cnt = 0, period = 0; - volatile unsigned char* p = (volatile unsigned char*)0xa0800000; - static unsigned bit = 0, up = 1; - - cnt += 1; - if (cnt < period) { - return; - } - - cnt = 0; - - /* Go through the points (roughly!): - * f(0)=10, f(1)=16, f(2)=20, f(5)=35,f(inf)->110 - */ - period = 110 - ( (300<<FSHIFT)/ - ((avenrun[0]/5) + (3<<FSHIFT)) ); - - if (up) { - if (bit == 7) { - bit--; - up=0; - } else { - bit ++; - } - } else { - if (bit == 0) { - bit++; - up=1; - } else { - bit--; - } - } - *p = 1<<bit; - -} diff --git a/arch/sh/boards/sh03/rtc.c b/arch/sh/boards/sh03/rtc.c deleted file mode 100644 index d609863cfe5..00000000000 --- a/arch/sh/boards/sh03/rtc.c +++ /dev/null @@ -1,133 +0,0 @@ -/* - * linux/arch/sh/boards/sh03/rtc.c -- CTP/PCI-SH03 on-chip RTC support - * - * Copyright (C) 2004 Saito.K & Jeanne(ksaito@interface.co.jp) - * - */ - -#include <linux/init.h> -#include <linux/kernel.h> -#include <linux/sched.h> -#include <linux/time.h> -#include <linux/bcd.h> -#include <asm/io.h> -#include <linux/rtc.h> -#include <linux/spinlock.h> - -#define RTC_BASE 0xb0000000 -#define RTC_SEC1 (RTC_BASE + 0) -#define RTC_SEC10 (RTC_BASE + 1) -#define RTC_MIN1 (RTC_BASE + 2) -#define RTC_MIN10 (RTC_BASE + 3) -#define RTC_HOU1 (RTC_BASE + 4) -#define RTC_HOU10 (RTC_BASE + 5) -#define RTC_WEE1 (RTC_BASE + 6) -#define RTC_DAY1 (RTC_BASE + 7) -#define RTC_DAY10 (RTC_BASE + 8) -#define RTC_MON1 (RTC_BASE + 9) -#define RTC_MON10 (RTC_BASE + 10) -#define RTC_YEA1 (RTC_BASE + 11) -#define RTC_YEA10 (RTC_BASE + 12) -#define RTC_YEA100 (RTC_BASE + 13) -#define RTC_YEA1000 (RTC_BASE + 14) -#define RTC_CTL (RTC_BASE + 15) -#define RTC_BUSY 1 -#define RTC_STOP 2 - -extern void (*rtc_get_time)(struct timespec *); -extern int (*rtc_set_time)(const time_t); -extern spinlock_t rtc_lock; - -unsigned long get_cmos_time(void) -{ - unsigned int year, mon, day, hour, min, sec; - - spin_lock(&rtc_lock); - again: - do { - sec = (ctrl_inb(RTC_SEC1) & 0xf) + (ctrl_inb(RTC_SEC10) & 0x7) * 10; - min = (ctrl_inb(RTC_MIN1) & 0xf) + (ctrl_inb(RTC_MIN10) & 0xf) * 10; - hour = (ctrl_inb(RTC_HOU1) & 0xf) + (ctrl_inb(RTC_HOU10) & 0xf) * 10; - day = (ctrl_inb(RTC_DAY1) & 0xf) + (ctrl_inb(RTC_DAY10) & 0xf) * 10; - mon = (ctrl_inb(RTC_MON1) & 0xf) + (ctrl_inb(RTC_MON10) & 0xf) * 10; - year = (ctrl_inb(RTC_YEA1) & 0xf) + (ctrl_inb(RTC_YEA10) & 0xf) * 10 - + (ctrl_inb(RTC_YEA100 ) & 0xf) * 100 - + (ctrl_inb(RTC_YEA1000) & 0xf) * 1000; - } while (sec != (ctrl_inb(RTC_SEC1) & 0xf) + (ctrl_inb(RTC_SEC10) & 0x7) * 10); - if (year == 0 || mon < 1 || mon > 12 || day > 31 || day < 1 || - hour > 23 || min > 59 || sec > 59) { - printk(KERN_ERR - "SH-03 RTC: invalid value, resetting to 1 Jan 2000\n"); - printk("year=%d, mon=%d, day=%d, hour=%d, min=%d, sec=%d\n", - year, mon, day, hour, min, sec); - - ctrl_outb(0, RTC_SEC1); ctrl_outb(0, RTC_SEC10); - ctrl_outb(0, RTC_MIN1); ctrl_outb(0, RTC_MIN10); - ctrl_outb(0, RTC_HOU1); ctrl_outb(0, RTC_HOU10); - ctrl_outb(6, RTC_WEE1); - ctrl_outb(1, RTC_DAY1); ctrl_outb(0, RTC_DAY10); - ctrl_outb(1, RTC_MON1); ctrl_outb(0, RTC_MON10); - ctrl_outb(0, RTC_YEA1); ctrl_outb(0, RTC_YEA10); - ctrl_outb(0, RTC_YEA100); - ctrl_outb(2, RTC_YEA1000); - ctrl_outb(0, RTC_CTL); - goto again; - } - - spin_unlock(&rtc_lock); - return mktime(year, mon, day, hour, min, sec); -} - -void sh03_rtc_gettimeofday(struct timespec *tv) -{ - - tv->tv_sec = get_cmos_time(); - tv->tv_nsec = 0; -} - -static int set_rtc_mmss(unsigned long nowtime) -{ - int retval = 0; - int real_seconds, real_minutes, cmos_minutes; - int i; - - /* gets recalled with irq locally disabled */ - spin_lock(&rtc_lock); - for (i = 0 ; i < 1000000 ; i++) /* may take up to 1 second... */ - if (!(ctrl_inb(RTC_CTL) & RTC_BUSY)) - break; - cmos_minutes = (ctrl_inb(RTC_MIN1) & 0xf) + (ctrl_inb(RTC_MIN10) & 0xf) * 10; - real_seconds = nowtime % 60; - real_minutes = nowtime / 60; - if (((abs(real_minutes - cmos_minutes) + 15)/30) & 1) - real_minutes += 30; /* correct for half hour time zone */ - real_minutes %= 60; - - if (abs(real_minutes - cmos_minutes) < 30) { - ctrl_outb(real_seconds % 10, RTC_SEC1); - ctrl_outb(real_seconds / 10, RTC_SEC10); - ctrl_outb(real_minutes % 10, RTC_MIN1); - ctrl_outb(real_minutes / 10, RTC_MIN10); - } else { - printk(KERN_WARNING - "set_rtc_mmss: can't update from %d to %d\n", - cmos_minutes, real_minutes); - retval = -1; - } - spin_unlock(&rtc_lock); - - return retval; -} - -int sh03_rtc_settimeofday(const time_t secs) -{ - unsigned long nowtime = secs; - - return set_rtc_mmss(nowtime); -} - -void sh03_time_init(void) -{ - rtc_get_time = sh03_rtc_gettimeofday; - rtc_set_time = sh03_rtc_settimeofday; -} diff --git a/arch/sh/boards/sh03/setup.c b/arch/sh/boards/sh03/setup.c deleted file mode 100644 index 60290f8f289..00000000000 --- a/arch/sh/boards/sh03/setup.c +++ /dev/null @@ -1,71 +0,0 @@ -/* - * linux/arch/sh/boards/sh03/setup.c - * - * Copyright (C) 2004 Interface Co.,Ltd. Saito.K - * - */ - -#include <linux/init.h> -#include <linux/irq.h> -#include <linux/hdreg.h> -#include <linux/ide.h> -#include <asm/io.h> -#include <asm/sh03/io.h> -#include <asm/sh03/sh03.h> -#include <asm/addrspace.h> -#include "../../drivers/pci/pci-sh7751.h" - -extern void (*board_time_init)(void); - -const char *get_system_type(void) -{ - return "Interface CTP/PCI-SH03)"; -} - -void init_sh03_IRQ(void) -{ - ctrl_outw(ctrl_inw(INTC_ICR) | INTC_ICR_IRLM, INTC_ICR); - - make_ipr_irq(IRL0_IRQ, IRL0_IPR_ADDR, IRL0_IPR_POS, IRL0_PRIORITY); - make_ipr_irq(IRL1_IRQ, IRL1_IPR_ADDR, IRL1_IPR_POS, IRL1_PRIORITY); - make_ipr_irq(IRL2_IRQ, IRL2_IPR_ADDR, IRL2_IPR_POS, IRL2_PRIORITY); - make_ipr_irq(IRL3_IRQ, IRL3_IPR_ADDR, IRL3_IPR_POS, IRL3_PRIORITY); -} - -extern void *cf_io_base; - -unsigned long sh03_isa_port2addr(unsigned long port) -{ - if (PXSEG(port)) - return port; - /* CompactFlash (IDE) */ - if (((port >= 0x1f0) && (port <= 0x1f7)) || (port == 0x3f6)) { - return (unsigned long)cf_io_base + port; - } - return port + SH7751_PCI_IO_BASE; -} - -/* - * The Machine Vector - */ - -struct sh_machine_vector mv_sh03 __initmv = { - .mv_nr_irqs = 48, - .mv_isa_port2addr = sh03_isa_port2addr, - .mv_init_irq = init_sh03_IRQ, - -#ifdef CONFIG_HEARTBEAT - .mv_heartbeat = heartbeat_sh03, -#endif -}; - -ALIAS_MV(sh03) - -/* arch/sh/boards/sh03/rtc.c */ -void sh03_time_init(void); - -int __init platform_setup(void) -{ - board_time_init = sh03_time_init; - return 0; -} |
