2005-04-16 15:20:36 -07:00
/*
* Cobalt Reset operations
*
* This file is subject to the terms and conditions of the GNU General Public
* License . See the file " COPYING " in the main directory of this archive
* for more details .
*
* Copyright ( C ) 1995 , 1996 , 1997 by Ralf Baechle
* Copyright ( C ) 2001 by Liam Davies ( ldavies @ agile . tv )
*/
2007-03-06 21:34:44 +09:00
# include <linux/jiffies.h>
2005-04-16 15:20:36 -07:00
# include <asm/io.h>
# include <asm/reboot.h>
2007-03-06 21:34:44 +09:00
# include <cobalt.h>
2005-04-16 15:20:36 -07:00
2005-02-21 16:18:36 +00:00
void cobalt_machine_halt ( void )
2005-04-16 15:20:36 -07:00
{
2005-02-21 16:18:36 +00:00
int state , last , diff ;
unsigned long mark ;
2005-04-16 15:20:36 -07:00
/*
2005-02-21 16:18:36 +00:00
* turn off bar on Qube , flash power off LED on RaQ ( 0.5 Hz )
*
* restart if ENTER and SELECT are pressed
2005-04-16 15:20:36 -07:00
*/
2005-02-21 16:18:36 +00:00
last = COBALT_KEY_PORT ;
2005-04-16 15:20:36 -07:00
2005-02-21 16:18:36 +00:00
for ( state = 0 ; ; ) {
state ^ = COBALT_LED_POWER_OFF ;
COBALT_LED_PORT = state ;
diff = COBALT_KEY_PORT ^ last ;
last ^ = diff ;
2005-04-16 15:20:36 -07:00
2005-02-21 16:18:36 +00:00
if ( ( diff & ( COBALT_KEY_ENTER | COBALT_KEY_SELECT ) ) & & ! ( ~ last & ( COBALT_KEY_ENTER | COBALT_KEY_SELECT ) ) )
COBALT_LED_PORT = COBALT_LED_RESET ;
for ( mark = jiffies ; jiffies - mark < HZ ; )
;
2005-04-16 15:20:36 -07:00
}
}
2005-02-21 16:18:36 +00:00
void cobalt_machine_restart ( char * command )
{
COBALT_LED_PORT = COBALT_LED_RESET ;
/* we should never get here */
cobalt_machine_halt ( ) ;
}
2005-04-16 15:20:36 -07:00
/*
* This triggers the luser mode device driver for the power switch ; - )
*/
void cobalt_machine_power_off ( void )
{
printk ( " You can switch the machine off now. \n " ) ;
cobalt_machine_halt ( ) ;
}