[LUGA] Mit freundlicher Unterstützung von:
WSR

Mail Thread Index


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[luga] Re: [lll]: Wenn alte Laptops schlafen...



On Sat, May 16, 1998 at 11:36:04PM +0200, Peter J. Holzer wrote:
> On Sat, May 16, 1998 at 10:52:21AM +0200, Christian Czezatke wrote:
> > Das Problem ist nur, dass waehrend der Laptop "schlaeft" auch die
> > Betriebssystemuhr nicht weiterlaeuft, da ja die CPU angehalten wird. --
> > Oeffnet man den Deckel also nach 2 Stunden wieder, geht die Uhr 2 Stunden
> > hinten. Abhilfe schafft ein haendisches Synchronisieren mit der
> > Hardwareclock.
> 
> 
> Das Problem habe ich bei meinem Acer auch. Der ist zwar relativ neu,
> aber nicht ganz APM-kompatibel.

Ich habe mir gestern die Kernel-Sourcen zu Gemüte geführt und
festgestellt, daß die Zeit nur nach einem Suspend, aber nicht nach einem
Standby (was ist da der Unterschied?) von der Hardware-Clock gelesen
wird. Anbei ist ein Patch. Auf meinem AcerNote 370 funktioniert er, aber
ich hätte gern, daß ihn jemand auf anderer Hardware testet, bevor ich
ihn submitte.

Der Patch ist relativ zu 2.0.32, weil ich das auf meinem Schlepptop
installiert habe, aber das Problem existiert auch (einem kurzen Blick in
die Patches nach zu schließen) in 2.0.33 und 2.0.34pre16. Der Patch
sollte auch dort passen.

	hp

-- 
   _  | Peter J. Holzer             | But now it's
|_|_) | Sysadmin WSR                | implementation-defined
| |   | hjp@wsr.ac.at               | whether it's undefined.
__/   | http://wsrx.wsr.ac.at/~hjp/ |     -- Clive Feather
--- drivers/char/apm_bios.c.orig	Wed May 15 08:06:55 1996
+++ drivers/char/apm_bios.c	Mon May 25 11:37:30 1998
@@ -145,7 +145,7 @@
 /*
  * Define to have debug messages.
  */
-#undef APM_DEBUG
+#define APM_DEBUG 1
 
 /*
  * Define to always call the APM BIOS busy routine even if the clock was
@@ -613,6 +613,9 @@
 {
 	unsigned long	flags;
 
+#ifdef APM_DEBUG
+	printk("APM BIOS: got_clock_diff=%d\n", got_clock_diff);
+#endif
 	if (!got_clock_diff)	/* Don't know time zone, can't set clock */
 		return;
 
@@ -620,6 +623,9 @@
 	cli();
 	CURRENT_TIME = get_cmos_time() + clock_cmos_diff;
 	restore_flags(flags);
+#ifdef APM_DEBUG
+	printk("APM BIOS: set_time: CURRENT_TIME=%ld\n", CURRENT_TIME);
+#endif
 }
 
 static void suspend(void)
@@ -644,11 +650,23 @@
 
 static void standby(void)
 {
-	int	err;
+	unsigned long	flags;
+	int		err;
+
+				/* Estimate time zone so that set_time can
+                                   update the clock */
+	save_flags(flags);
+	clock_cmos_diff = -get_cmos_time();
+	cli();
+	clock_cmos_diff += CURRENT_TIME;
+	got_clock_diff = 1;
+	restore_flags(flags);
+	
 
 	err = apm_set_power_state(APM_STATE_STANDBY);
 	if (err)
 		apm_error("standby", err);
+	set_time();
 }
 
 static apm_event_t get_event(void)

Attachment: pgpisuwnIy4qn.pgp
Description: PGP signature



powered by LINUX the choice of a gnu generation
linux user group austria;
Suche
Suche
Letzte Änderung:
webmaster@luga.at
September 2010