Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6df2afba authored by Finn Thain's avatar Finn Thain Committed by Geert Uytterhoeven
Browse files

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: default avatarStan Johnson <userm57@yahoo.com>
Signed-off-by: default avatarFinn Thain <fthain@telegraphics.com.au>
Signed-off-by: default avatarGeert Uytterhoeven <geert@linux-m68k.org>
parent 31b1c780
Loading
Loading
Loading
Loading
+41 −29
Original line number Diff line number Diff line
@@ -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:
			now = via_read_time();
			break;
		case MAC_ADB_II:
		case MAC_ADB_PB1:
		case MAC_ADB_PB2:
			now = pmu_read_time();
			now = via_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;