|
@@ -97,10 +97,6 @@ static void amiga_get_model(char *model);
|
|
|
static void amiga_get_hardware_list(struct seq_file *m);
|
|
|
/* amiga specific timer functions */
|
|
|
static unsigned long amiga_gettimeoffset(void);
|
|
|
-static int a3000_hwclk(int, struct rtc_time *);
|
|
|
-static int a2000_hwclk(int, struct rtc_time *);
|
|
|
-static int amiga_set_clock_mmss(unsigned long);
|
|
|
-static unsigned int amiga_get_ss(void);
|
|
|
extern void amiga_mksound(unsigned int count, unsigned int ticks);
|
|
|
static void amiga_reset(void);
|
|
|
extern void amiga_init_sound(void);
|
|
@@ -138,10 +134,6 @@ static struct {
|
|
|
}
|
|
|
};
|
|
|
|
|
|
-static struct resource rtc_resource = {
|
|
|
- .start = 0x00dc0000, .end = 0x00dcffff
|
|
|
-};
|
|
|
-
|
|
|
static struct resource ram_resource[NUM_MEMINFO];
|
|
|
|
|
|
|
|
@@ -387,15 +379,6 @@ void __init config_amiga(void)
|
|
|
mach_get_model = amiga_get_model;
|
|
|
mach_get_hardware_list = amiga_get_hardware_list;
|
|
|
mach_gettimeoffset = amiga_gettimeoffset;
|
|
|
- if (AMIGAHW_PRESENT(A3000_CLK)) {
|
|
|
- mach_hwclk = a3000_hwclk;
|
|
|
- rtc_resource.name = "A3000 RTC";
|
|
|
- request_resource(&iomem_resource, &rtc_resource);
|
|
|
- } else /* if (AMIGAHW_PRESENT(A2000_CLK)) */ {
|
|
|
- mach_hwclk = a2000_hwclk;
|
|
|
- rtc_resource.name = "A2000 RTC";
|
|
|
- request_resource(&iomem_resource, &rtc_resource);
|
|
|
- }
|
|
|
|
|
|
/*
|
|
|
* default MAX_DMA=0xffffffff on all machines. If we don't do so, the SCSI
|
|
@@ -404,8 +387,6 @@ void __init config_amiga(void)
|
|
|
*/
|
|
|
mach_max_dma_address = 0xffffffff;
|
|
|
|
|
|
- mach_set_clock_mmss = amiga_set_clock_mmss;
|
|
|
- mach_get_ss = amiga_get_ss;
|
|
|
mach_reset = amiga_reset;
|
|
|
#if defined(CONFIG_INPUT_M68K_BEEP) || defined(CONFIG_INPUT_M68K_BEEP_MODULE)
|
|
|
mach_beep = amiga_mksound;
|
|
@@ -530,161 +511,6 @@ static unsigned long amiga_gettimeoffset(void)
|
|
|
return ticks + offset;
|
|
|
}
|
|
|
|
|
|
-static int a3000_hwclk(int op, struct rtc_time *t)
|
|
|
-{
|
|
|
- tod_3000.cntrl1 = TOD3000_CNTRL1_HOLD;
|
|
|
-
|
|
|
- if (!op) { /* read */
|
|
|
- t->tm_sec = tod_3000.second1 * 10 + tod_3000.second2;
|
|
|
- t->tm_min = tod_3000.minute1 * 10 + tod_3000.minute2;
|
|
|
- t->tm_hour = tod_3000.hour1 * 10 + tod_3000.hour2;
|
|
|
- t->tm_mday = tod_3000.day1 * 10 + tod_3000.day2;
|
|
|
- t->tm_wday = tod_3000.weekday;
|
|
|
- t->tm_mon = tod_3000.month1 * 10 + tod_3000.month2 - 1;
|
|
|
- t->tm_year = tod_3000.year1 * 10 + tod_3000.year2;
|
|
|
- if (t->tm_year <= 69)
|
|
|
- t->tm_year += 100;
|
|
|
- } else {
|
|
|
- tod_3000.second1 = t->tm_sec / 10;
|
|
|
- tod_3000.second2 = t->tm_sec % 10;
|
|
|
- tod_3000.minute1 = t->tm_min / 10;
|
|
|
- tod_3000.minute2 = t->tm_min % 10;
|
|
|
- tod_3000.hour1 = t->tm_hour / 10;
|
|
|
- tod_3000.hour2 = t->tm_hour % 10;
|
|
|
- tod_3000.day1 = t->tm_mday / 10;
|
|
|
- tod_3000.day2 = t->tm_mday % 10;
|
|
|
- if (t->tm_wday != -1)
|
|
|
- tod_3000.weekday = t->tm_wday;
|
|
|
- tod_3000.month1 = (t->tm_mon + 1) / 10;
|
|
|
- tod_3000.month2 = (t->tm_mon + 1) % 10;
|
|
|
- if (t->tm_year >= 100)
|
|
|
- t->tm_year -= 100;
|
|
|
- tod_3000.year1 = t->tm_year / 10;
|
|
|
- tod_3000.year2 = t->tm_year % 10;
|
|
|
- }
|
|
|
-
|
|
|
- tod_3000.cntrl1 = TOD3000_CNTRL1_FREE;
|
|
|
-
|
|
|
- return 0;
|
|
|
-}
|
|
|
-
|
|
|
-static int a2000_hwclk(int op, struct rtc_time *t)
|
|
|
-{
|
|
|
- int cnt = 5;
|
|
|
-
|
|
|
- tod_2000.cntrl1 = TOD2000_CNTRL1_HOLD;
|
|
|
-
|
|
|
- while ((tod_2000.cntrl1 & TOD2000_CNTRL1_BUSY) && cnt) {
|
|
|
- tod_2000.cntrl1 &= ~TOD2000_CNTRL1_HOLD;
|
|
|
- udelay(70);
|
|
|
- tod_2000.cntrl1 |= TOD2000_CNTRL1_HOLD;
|
|
|
- --cnt;
|
|
|
- }
|
|
|
-
|
|
|
- if (!cnt)
|
|
|
- printk(KERN_INFO "hwclk: timed out waiting for RTC (0x%x)\n",
|
|
|
- tod_2000.cntrl1);
|
|
|
-
|
|
|
- if (!op) { /* read */
|
|
|
- t->tm_sec = tod_2000.second1 * 10 + tod_2000.second2;
|
|
|
- t->tm_min = tod_2000.minute1 * 10 + tod_2000.minute2;
|
|
|
- t->tm_hour = (tod_2000.hour1 & 3) * 10 + tod_2000.hour2;
|
|
|
- t->tm_mday = tod_2000.day1 * 10 + tod_2000.day2;
|
|
|
- t->tm_wday = tod_2000.weekday;
|
|
|
- t->tm_mon = tod_2000.month1 * 10 + tod_2000.month2 - 1;
|
|
|
- t->tm_year = tod_2000.year1 * 10 + tod_2000.year2;
|
|
|
- if (t->tm_year <= 69)
|
|
|
- t->tm_year += 100;
|
|
|
-
|
|
|
- if (!(tod_2000.cntrl3 & TOD2000_CNTRL3_24HMODE)) {
|
|
|
- if (!(tod_2000.hour1 & TOD2000_HOUR1_PM) && t->tm_hour == 12)
|
|
|
- t->tm_hour = 0;
|
|
|
- else if ((tod_2000.hour1 & TOD2000_HOUR1_PM) && t->tm_hour != 12)
|
|
|
- t->tm_hour += 12;
|
|
|
- }
|
|
|
- } else {
|
|
|
- tod_2000.second1 = t->tm_sec / 10;
|
|
|
- tod_2000.second2 = t->tm_sec % 10;
|
|
|
- tod_2000.minute1 = t->tm_min / 10;
|
|
|
- tod_2000.minute2 = t->tm_min % 10;
|
|
|
- if (tod_2000.cntrl3 & TOD2000_CNTRL3_24HMODE)
|
|
|
- tod_2000.hour1 = t->tm_hour / 10;
|
|
|
- else if (t->tm_hour >= 12)
|
|
|
- tod_2000.hour1 = TOD2000_HOUR1_PM +
|
|
|
- (t->tm_hour - 12) / 10;
|
|
|
- else
|
|
|
- tod_2000.hour1 = t->tm_hour / 10;
|
|
|
- tod_2000.hour2 = t->tm_hour % 10;
|
|
|
- tod_2000.day1 = t->tm_mday / 10;
|
|
|
- tod_2000.day2 = t->tm_mday % 10;
|
|
|
- if (t->tm_wday != -1)
|
|
|
- tod_2000.weekday = t->tm_wday;
|
|
|
- tod_2000.month1 = (t->tm_mon + 1) / 10;
|
|
|
- tod_2000.month2 = (t->tm_mon + 1) % 10;
|
|
|
- if (t->tm_year >= 100)
|
|
|
- t->tm_year -= 100;
|
|
|
- tod_2000.year1 = t->tm_year / 10;
|
|
|
- tod_2000.year2 = t->tm_year % 10;
|
|
|
- }
|
|
|
-
|
|
|
- tod_2000.cntrl1 &= ~TOD2000_CNTRL1_HOLD;
|
|
|
-
|
|
|
- return 0;
|
|
|
-}
|
|
|
-
|
|
|
-static int amiga_set_clock_mmss(unsigned long nowtime)
|
|
|
-{
|
|
|
- short real_seconds = nowtime % 60, real_minutes = (nowtime / 60) % 60;
|
|
|
-
|
|
|
- if (AMIGAHW_PRESENT(A3000_CLK)) {
|
|
|
- tod_3000.cntrl1 = TOD3000_CNTRL1_HOLD;
|
|
|
-
|
|
|
- tod_3000.second1 = real_seconds / 10;
|
|
|
- tod_3000.second2 = real_seconds % 10;
|
|
|
- tod_3000.minute1 = real_minutes / 10;
|
|
|
- tod_3000.minute2 = real_minutes % 10;
|
|
|
-
|
|
|
- tod_3000.cntrl1 = TOD3000_CNTRL1_FREE;
|
|
|
- } else /* if (AMIGAHW_PRESENT(A2000_CLK)) */ {
|
|
|
- int cnt = 5;
|
|
|
-
|
|
|
- tod_2000.cntrl1 |= TOD2000_CNTRL1_HOLD;
|
|
|
-
|
|
|
- while ((tod_2000.cntrl1 & TOD2000_CNTRL1_BUSY) && cnt) {
|
|
|
- tod_2000.cntrl1 &= ~TOD2000_CNTRL1_HOLD;
|
|
|
- udelay(70);
|
|
|
- tod_2000.cntrl1 |= TOD2000_CNTRL1_HOLD;
|
|
|
- --cnt;
|
|
|
- }
|
|
|
-
|
|
|
- if (!cnt)
|
|
|
- printk(KERN_INFO "set_clock_mmss: timed out waiting for RTC (0x%x)\n", tod_2000.cntrl1);
|
|
|
-
|
|
|
- tod_2000.second1 = real_seconds / 10;
|
|
|
- tod_2000.second2 = real_seconds % 10;
|
|
|
- tod_2000.minute1 = real_minutes / 10;
|
|
|
- tod_2000.minute2 = real_minutes % 10;
|
|
|
-
|
|
|
- tod_2000.cntrl1 &= ~TOD2000_CNTRL1_HOLD;
|
|
|
- }
|
|
|
-
|
|
|
- return 0;
|
|
|
-}
|
|
|
-
|
|
|
-static unsigned int amiga_get_ss(void)
|
|
|
-{
|
|
|
- unsigned int s;
|
|
|
-
|
|
|
- if (AMIGAHW_PRESENT(A3000_CLK)) {
|
|
|
- tod_3000.cntrl1 = TOD3000_CNTRL1_HOLD;
|
|
|
- s = tod_3000.second1 * 10 + tod_3000.second2;
|
|
|
- tod_3000.cntrl1 = TOD3000_CNTRL1_FREE;
|
|
|
- } else /* if (AMIGAHW_PRESENT(A2000_CLK)) */ {
|
|
|
- s = tod_2000.second1 * 10 + tod_2000.second2;
|
|
|
- }
|
|
|
- return s;
|
|
|
-}
|
|
|
-
|
|
|
static NORET_TYPE void amiga_reset(void)
|
|
|
ATTRIB_NORET;
|
|
|
|