git.openpandora.org
/
pandora-kernel.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Pull novell-bugzilla-156426 into release branch
[pandora-kernel.git]
/
arch
/
powerpc
/
platforms
/
powermac
/
time.c
diff --git
a/arch/powerpc/platforms/powermac/time.c
b/arch/powerpc/platforms/powermac/time.c
index
5947b21
..
890758a
100644
(file)
--- a/
arch/powerpc/platforms/powermac/time.c
+++ b/
arch/powerpc/platforms/powermac/time.c
@@
-102,7
+102,7
@@
static unsigned long from_rtc_time(struct rtc_time *tm)
static unsigned long cuda_get_time(void)
{
struct adb_request req;
static unsigned long cuda_get_time(void)
{
struct adb_request req;
- unsigned
long
now;
+ unsigned
int
now;
if (cuda_request(&req, NULL, 2, CUDA_PACKET, CUDA_GET_TIME) < 0)
return 0;
if (cuda_request(&req, NULL, 2, CUDA_PACKET, CUDA_GET_TIME) < 0)
return 0;
@@
-113,7
+113,7
@@
static unsigned long cuda_get_time(void)
req.reply_len);
now = (req.reply[3] << 24) + (req.reply[4] << 16)
+ (req.reply[5] << 8) + req.reply[6];
req.reply_len);
now = (req.reply[3] << 24) + (req.reply[4] << 16)
+ (req.reply[5] << 8) + req.reply[6];
- return
now
- RTC_OFFSET;
+ return
((unsigned long)now)
- RTC_OFFSET;
}
#define cuda_get_rtc_time(tm) to_rtc_time(cuda_get_time(), (tm))
}
#define cuda_get_rtc_time(tm) to_rtc_time(cuda_get_time(), (tm))
@@
-146,7
+146,7
@@
static int cuda_set_rtc_time(struct rtc_time *tm)
static unsigned long pmu_get_time(void)
{
struct adb_request req;
static unsigned long pmu_get_time(void)
{
struct adb_request req;
- unsigned
long
now;
+ unsigned
int
now;
if (pmu_request(&req, NULL, 1, PMU_READ_RTC) < 0)
return 0;
if (pmu_request(&req, NULL, 1, PMU_READ_RTC) < 0)
return 0;
@@
-156,7
+156,7
@@
static unsigned long pmu_get_time(void)
req.reply_len);
now = (req.reply[0] << 24) + (req.reply[1] << 16)
+ (req.reply[2] << 8) + req.reply[3];
req.reply_len);
now = (req.reply[0] << 24) + (req.reply[1] << 16)
+ (req.reply[2] << 8) + req.reply[3];
- return
now
- RTC_OFFSET;
+ return
((unsigned long)now)
- RTC_OFFSET;
}
#define pmu_get_rtc_time(tm) to_rtc_time(pmu_get_time(), (tm))
}
#define pmu_get_rtc_time(tm) to_rtc_time(pmu_get_time(), (tm))
@@
-199,6
+199,7
@@
static unsigned long smu_get_time(void)
#define smu_set_rtc_time(tm, spin) 0
#endif
#define smu_set_rtc_time(tm, spin) 0
#endif
+/* Can't be __init, it's called when suspending and resuming */
unsigned long pmac_get_boot_time(void)
{
/* Get the time from the RTC, used only at boot time */
unsigned long pmac_get_boot_time(void)
{
/* Get the time from the RTC, used only at boot time */
@@
-257,15
+258,20
@@
int __init via_calibrate_decr(void)
volatile unsigned char __iomem *via;
int count = VIA_TIMER_FREQ_6 / 100;
unsigned int dstart, dend;
volatile unsigned char __iomem *via;
int count = VIA_TIMER_FREQ_6 / 100;
unsigned int dstart, dend;
+ struct resource rsrc;
- vias =
find_devices(
"via-cuda");
+ vias =
of_find_node_by_name(NULL,
"via-cuda");
if (vias == 0)
if (vias == 0)
- vias =
find_devices(
"via-pmu");
+ vias =
of_find_node_by_name(NULL,
"via-pmu");
if (vias == 0)
if (vias == 0)
- vias =
find_devices(
"via");
- if (vias == 0 ||
vias->n_addrs == 0
)
+ vias =
of_find_node_by_name(NULL,
"via");
+ if (vias == 0 ||
of_address_to_resource(vias, 0, &rsrc)
)
return 0;
return 0;
- via = ioremap(vias->addrs[0].address, vias->addrs[0].size);
+ via = ioremap(rsrc.start, rsrc.end - rsrc.start + 1);
+ if (via == NULL) {
+ printk(KERN_ERR "Failed to map VIA for timer calibration !\n");
+ return 0;
+ }
/* set timer 1 for continuous interrupts */
out_8(&via[ACR], (via[ACR] & ~T1MODE) | T1MODE_CONT);
/* set timer 1 for continuous interrupts */
out_8(&via[ACR], (via[ACR] & ~T1MODE) | T1MODE_CONT);
@@
-330,10
+336,10
@@
static struct pmu_sleep_notifier time_sleep_notifier = {
*/
void __init pmac_calibrate_decr(void)
{
*/
void __init pmac_calibrate_decr(void)
{
-#if
def CONFIG_PM
+#if
defined(CONFIG_PM) && defined(CONFIG_ADB_PMU)
/* XXX why here? */
pmu_register_sleep_notifier(&time_sleep_notifier);
/* XXX why here? */
pmu_register_sleep_notifier(&time_sleep_notifier);
-#endif
/* CONFIG_PM */
+#endif
generic_calibrate_decr();
generic_calibrate_decr();