--- linux-2.6.2-rc2-mm1/arch/i386/kernel/apm.c.old Thu Jan 29 16:22:03 2004 +++ linux-2.6.2-rc2-mm1/arch/i386/kernel/apm.c Thu Jan 29 16:22:07 2004 @@ -1201,6 +1201,7 @@ static int suspend(int vetoable) } device_suspend(3); + device_power_down(3); /* serialize with the timer interrupt */ write_seqlock_irq(&xtime_lock); @@ -1234,6 +1235,7 @@ static int suspend(int vetoable) if (err != APM_SUCCESS) apm_error("suspend", err); err = (err == APM_SUCCESS) ? 0 : -EIO; + device_power_up(); device_resume(); pm_send_all(PM_RESUME, (void *)0); queue_event(APM_NORMAL_RESUME, NULL); @@ -1252,6 +1254,7 @@ static void standby(void) { int err; + device_power_down(3); /* serialize with the timer interrupt */ write_seqlock_irq(&xtime_lock); /* If needed, notify drivers here */ @@ -1261,6 +1264,7 @@ static void standby(void) err = set_system_power_state(APM_STATE_STANDBY); if ((err != APM_SUCCESS) && (err != APM_NO_ERROR)) apm_error("standby", err); + device_power_up(); } static apm_event_t get_event(void)