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:
Finn Thain 2018-03-11 23:38:28 -04:00 committed by Geert Uytterhoeven
parent 31b1c78017
commit 6df2afba7a

View file

@ -83,12 +83,7 @@ static void cuda_write_pram(int offset, __u8 data)
while (!req.complete) while (!req.complete)
cuda_poll(); cuda_poll();
} }
#else #endif /* CONFIG_ADB_CUDA */
#define cuda_read_time() 0
#define cuda_write_time(n)
#define cuda_read_pram NULL
#define cuda_write_pram NULL
#endif
#ifdef CONFIG_ADB_PMU68K #ifdef CONFIG_ADB_PMU68K
static long pmu_read_time(void) static long pmu_read_time(void)
@ -141,12 +136,7 @@ static void pmu_write_pram(int offset, __u8 data)
while (!req.complete) while (!req.complete)
pmu_poll(); pmu_poll();
} }
#else #endif /* CONFIG_ADB_PMU68K */
#define pmu_read_time() 0
#define pmu_write_time(n)
#define pmu_read_pram NULL
#define pmu_write_pram NULL
#endif
/* /*
* VIA PRAM/RTC access routines * VIA PRAM/RTC access routines
@ -426,19 +416,25 @@ void mac_pram_read(int offset, __u8 *buffer, int len)
int i; int i;
switch (macintosh_config->adb_type) { switch (macintosh_config->adb_type) {
case MAC_ADB_IOP:
case MAC_ADB_II:
case MAC_ADB_PB1: case MAC_ADB_PB1:
case MAC_ADB_PB2: func = via_read_pram;
func = pmu_read_pram;
break; break;
#ifdef CONFIG_ADB_CUDA
case MAC_ADB_EGRET: case MAC_ADB_EGRET:
case MAC_ADB_CUDA: case MAC_ADB_CUDA:
func = cuda_read_pram; func = cuda_read_pram;
break; break;
#endif
#ifdef CONFIG_ADB_PMU68K
case MAC_ADB_PB2:
func = pmu_read_pram;
break;
#endif
default: default:
func = via_read_pram;
}
if (!func)
return; return;
}
for (i = 0 ; i < len ; i++) { for (i = 0 ; i < len ; i++) {
buffer[i] = (*func)(offset++); buffer[i] = (*func)(offset++);
} }
@ -450,19 +446,25 @@ void mac_pram_write(int offset, __u8 *buffer, int len)
int i; int i;
switch (macintosh_config->adb_type) { switch (macintosh_config->adb_type) {
case MAC_ADB_IOP:
case MAC_ADB_II:
case MAC_ADB_PB1: case MAC_ADB_PB1:
case MAC_ADB_PB2: func = via_write_pram;
func = pmu_write_pram;
break; break;
#ifdef CONFIG_ADB_CUDA
case MAC_ADB_EGRET: case MAC_ADB_EGRET:
case MAC_ADB_CUDA: case MAC_ADB_CUDA:
func = cuda_write_pram; func = cuda_write_pram;
break; break;
#endif
#ifdef CONFIG_ADB_PMU68K
case MAC_ADB_PB2:
func = pmu_write_pram;
break;
#endif
default: default:
func = via_write_pram;
}
if (!func)
return; return;
}
for (i = 0 ; i < len ; i++) { for (i = 0 ; i < len ; i++) {
(*func)(offset++, buffer[i]); (*func)(offset++, buffer[i]);
} }
@ -663,18 +665,22 @@ int mac_hwclk(int op, struct rtc_time *t)
if (!op) { /* read */ if (!op) { /* read */
switch (macintosh_config->adb_type) { switch (macintosh_config->adb_type) {
case MAC_ADB_II:
case MAC_ADB_IOP: case MAC_ADB_IOP:
case MAC_ADB_II:
case MAC_ADB_PB1:
now = via_read_time(); now = via_read_time();
break; break;
case MAC_ADB_PB1: #ifdef CONFIG_ADB_CUDA
case MAC_ADB_PB2:
now = pmu_read_time();
break;
case MAC_ADB_EGRET: case MAC_ADB_EGRET:
case MAC_ADB_CUDA: case MAC_ADB_CUDA:
now = cuda_read_time(); now = cuda_read_time();
break; break;
#endif
#ifdef CONFIG_ADB_PMU68K
case MAC_ADB_PB2:
now = pmu_read_time();
break;
#endif
default: default:
now = 0; now = 0;
} }
@ -695,18 +701,24 @@ int mac_hwclk(int op, struct rtc_time *t)
t->tm_hour, t->tm_min, t->tm_sec); t->tm_hour, t->tm_min, t->tm_sec);
switch (macintosh_config->adb_type) { switch (macintosh_config->adb_type) {
case MAC_ADB_II:
case MAC_ADB_IOP: case MAC_ADB_IOP:
case MAC_ADB_II:
case MAC_ADB_PB1:
via_write_time(now); via_write_time(now);
break; break;
#ifdef CONFIG_ADB_CUDA
case MAC_ADB_EGRET: case MAC_ADB_EGRET:
case MAC_ADB_CUDA: case MAC_ADB_CUDA:
cuda_write_time(now); cuda_write_time(now);
break; break;
case MAC_ADB_PB1: #endif
#ifdef CONFIG_ADB_PMU68K
case MAC_ADB_PB2: case MAC_ADB_PB2:
pmu_write_time(now); pmu_write_time(now);
break; break;
#endif
default:
return -ENODEV;
} }
} }
return 0; return 0;