m68k/mac: Enable RTC for 100-series PowerBooks
According to Apple's Developer Notes, all of the early PowerBook models have their RTC connected to VIA1. Use the VIA clock ops as appropriate. This was tested on a PowerBook 170. Don't use the VIA ops when not appropriate. Calling unimplemented clock or PRAM getter or setter ops can now result in an error instead of failing silently. Tested-by: Stan Johnson <userm57@yahoo.com> Signed-off-by: Finn Thain <fthain@telegraphics.com.au> Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
This commit is contained in:
parent
31b1c78017
commit
6df2afba7a
1 changed files with 41 additions and 29 deletions
|
@ -83,12 +83,7 @@ static void cuda_write_pram(int offset, __u8 data)
|
|||
while (!req.complete)
|
||||
cuda_poll();
|
||||
}
|
||||
#else
|
||||
#define cuda_read_time() 0
|
||||
#define cuda_write_time(n)
|
||||
#define cuda_read_pram NULL
|
||||
#define cuda_write_pram NULL
|
||||
#endif
|
||||
#endif /* CONFIG_ADB_CUDA */
|
||||
|
||||
#ifdef CONFIG_ADB_PMU68K
|
||||
static long pmu_read_time(void)
|
||||
|
@ -141,12 +136,7 @@ static void pmu_write_pram(int offset, __u8 data)
|
|||
while (!req.complete)
|
||||
pmu_poll();
|
||||
}
|
||||
#else
|
||||
#define pmu_read_time() 0
|
||||
#define pmu_write_time(n)
|
||||
#define pmu_read_pram NULL
|
||||
#define pmu_write_pram NULL
|
||||
#endif
|
||||
#endif /* CONFIG_ADB_PMU68K */
|
||||
|
||||
/*
|
||||
* VIA PRAM/RTC access routines
|
||||
|
@ -426,19 +416,25 @@ void mac_pram_read(int offset, __u8 *buffer, int len)
|
|||
int i;
|
||||
|
||||
switch (macintosh_config->adb_type) {
|
||||
case MAC_ADB_IOP:
|
||||
case MAC_ADB_II:
|
||||
case MAC_ADB_PB1:
|
||||
case MAC_ADB_PB2:
|
||||
func = pmu_read_pram;
|
||||
func = via_read_pram;
|
||||
break;
|
||||
#ifdef CONFIG_ADB_CUDA
|
||||
case MAC_ADB_EGRET:
|
||||
case MAC_ADB_CUDA:
|
||||
func = cuda_read_pram;
|
||||
break;
|
||||
#endif
|
||||
#ifdef CONFIG_ADB_PMU68K
|
||||
case MAC_ADB_PB2:
|
||||
func = pmu_read_pram;
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
func = via_read_pram;
|
||||
}
|
||||
if (!func)
|
||||
return;
|
||||
}
|
||||
for (i = 0 ; i < len ; i++) {
|
||||
buffer[i] = (*func)(offset++);
|
||||
}
|
||||
|
@ -450,19 +446,25 @@ void mac_pram_write(int offset, __u8 *buffer, int len)
|
|||
int i;
|
||||
|
||||
switch (macintosh_config->adb_type) {
|
||||
case MAC_ADB_IOP:
|
||||
case MAC_ADB_II:
|
||||
case MAC_ADB_PB1:
|
||||
case MAC_ADB_PB2:
|
||||
func = pmu_write_pram;
|
||||
func = via_write_pram;
|
||||
break;
|
||||
#ifdef CONFIG_ADB_CUDA
|
||||
case MAC_ADB_EGRET:
|
||||
case MAC_ADB_CUDA:
|
||||
func = cuda_write_pram;
|
||||
break;
|
||||
#endif
|
||||
#ifdef CONFIG_ADB_PMU68K
|
||||
case MAC_ADB_PB2:
|
||||
func = pmu_write_pram;
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
func = via_write_pram;
|
||||
}
|
||||
if (!func)
|
||||
return;
|
||||
}
|
||||
for (i = 0 ; i < len ; i++) {
|
||||
(*func)(offset++, buffer[i]);
|
||||
}
|
||||
|
@ -663,18 +665,22 @@ int mac_hwclk(int op, struct rtc_time *t)
|
|||
|
||||
if (!op) { /* read */
|
||||
switch (macintosh_config->adb_type) {
|
||||
case MAC_ADB_II:
|
||||
case MAC_ADB_IOP:
|
||||
case MAC_ADB_II:
|
||||
case MAC_ADB_PB1:
|
||||
now = via_read_time();
|
||||
break;
|
||||
case MAC_ADB_PB1:
|
||||
case MAC_ADB_PB2:
|
||||
now = pmu_read_time();
|
||||
break;
|
||||
#ifdef CONFIG_ADB_CUDA
|
||||
case MAC_ADB_EGRET:
|
||||
case MAC_ADB_CUDA:
|
||||
now = cuda_read_time();
|
||||
break;
|
||||
#endif
|
||||
#ifdef CONFIG_ADB_PMU68K
|
||||
case MAC_ADB_PB2:
|
||||
now = pmu_read_time();
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
now = 0;
|
||||
}
|
||||
|
@ -695,18 +701,24 @@ int mac_hwclk(int op, struct rtc_time *t)
|
|||
t->tm_hour, t->tm_min, t->tm_sec);
|
||||
|
||||
switch (macintosh_config->adb_type) {
|
||||
case MAC_ADB_II:
|
||||
case MAC_ADB_IOP:
|
||||
case MAC_ADB_II:
|
||||
case MAC_ADB_PB1:
|
||||
via_write_time(now);
|
||||
break;
|
||||
#ifdef CONFIG_ADB_CUDA
|
||||
case MAC_ADB_EGRET:
|
||||
case MAC_ADB_CUDA:
|
||||
cuda_write_time(now);
|
||||
break;
|
||||
case MAC_ADB_PB1:
|
||||
#endif
|
||||
#ifdef CONFIG_ADB_PMU68K
|
||||
case MAC_ADB_PB2:
|
||||
pmu_write_time(now);
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
return -ENODEV;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
|
|
Loading…
Reference in a new issue