Loading arch/m68k/amiga/config.c +0 −174 Original line number Diff line number Diff line Loading @@ -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); Loading Loading @@ -138,10 +134,6 @@ static struct { } }; static struct resource rtc_resource = { .start = 0x00dc0000, .end = 0x00dcffff }; static struct resource ram_resource[NUM_MEMINFO]; Loading Loading @@ -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 Loading @@ -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; Loading Loading @@ -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; Loading arch/m68k/amiga/platform.c +17 −0 Original line number Diff line number Diff line Loading @@ -116,6 +116,13 @@ static const struct gayle_ide_platform_data a4000_ide_pdata __initconst = { }; static const struct resource amiga_rtc_resource __initconst = { .start = 0x00dc0000, .end = 0x00dcffff, .flags = IORESOURCE_MEM, }; static int __init amiga_init_devices(void) { struct platform_device *pdev; Loading Loading @@ -174,6 +181,16 @@ static int __init amiga_init_devices(void) if (AMIGAHW_PRESENT(AMI_PARALLEL)) platform_device_register_simple("amiga-parallel", -1, NULL, 0); /* real time clocks */ if (AMIGAHW_PRESENT(A2000_CLK)) platform_device_register_simple("rtc-msm6242", -1, &amiga_rtc_resource, 1); if (AMIGAHW_PRESENT(A3000_CLK)) platform_device_register_simple("rtc-rp5c01", -1, &amiga_rtc_resource, 1); return 0; } Loading Loading
arch/m68k/amiga/config.c +0 −174 Original line number Diff line number Diff line Loading @@ -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); Loading Loading @@ -138,10 +134,6 @@ static struct { } }; static struct resource rtc_resource = { .start = 0x00dc0000, .end = 0x00dcffff }; static struct resource ram_resource[NUM_MEMINFO]; Loading Loading @@ -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 Loading @@ -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; Loading Loading @@ -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; Loading
arch/m68k/amiga/platform.c +17 −0 Original line number Diff line number Diff line Loading @@ -116,6 +116,13 @@ static const struct gayle_ide_platform_data a4000_ide_pdata __initconst = { }; static const struct resource amiga_rtc_resource __initconst = { .start = 0x00dc0000, .end = 0x00dcffff, .flags = IORESOURCE_MEM, }; static int __init amiga_init_devices(void) { struct platform_device *pdev; Loading Loading @@ -174,6 +181,16 @@ static int __init amiga_init_devices(void) if (AMIGAHW_PRESENT(AMI_PARALLEL)) platform_device_register_simple("amiga-parallel", -1, NULL, 0); /* real time clocks */ if (AMIGAHW_PRESENT(A2000_CLK)) platform_device_register_simple("rtc-msm6242", -1, &amiga_rtc_resource, 1); if (AMIGAHW_PRESENT(A3000_CLK)) platform_device_register_simple("rtc-rp5c01", -1, &amiga_rtc_resource, 1); return 0; } Loading