Commit e71d47dc authored by Helge Deller's avatar Helge Deller
Browse files

parisc: lasi: Register LASI power-off feature as sys_off_handler



Prefer the Linux kernel sys_off_handler functionality over a
home-grown implementation.

Signed-off-by: default avatarHelge Deller <deller@gmx.de>
parent 706a7415
Loading
Loading
Loading
Loading
+0 −6
Original line number Diff line number Diff line
@@ -97,18 +97,12 @@ void machine_restart(char *cmd)

}

void (*chassis_power_off)(void);

/*
 * This routine is called from sys_reboot to actually turn off the
 * machine 
 */
void machine_power_off(void)
{
	/* If there is a registered power off handler, call it. */
	if (chassis_power_off)
		chassis_power_off();

	/* Put the soft power button back under hardware control.
	 * If the user had already pressed the power button, the
	 * following call will immediately power off. */
+11 −17
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
#include <linux/module.h>
#include <linux/pm.h>
#include <linux/types.h>
#include <linux/reboot.h>

#include <asm/io.h>
#include <asm/hardware.h>
@@ -145,23 +146,19 @@ static void __init lasi_led_init(unsigned long lasi_hpa)
 * 1 to PWR_ON_L in the Power Control Register
 * 
 */

static unsigned long lasi_power_off_hpa __read_mostly;

static void lasi_power_off(void)
static int lasi_power_off(struct sys_off_data *data)
{
	unsigned long datareg;
	struct gsc_asic *lasi = data->cb_data;

	/* calculate addr of the Power Control Register */
	datareg = lasi_power_off_hpa + 0x0000C000;
	/* Power down the machine via Power Control Register */
	gsc_writel(0x02, lasi->hpa + 0x0000C000);

	/* Power down the machine */
	gsc_writel(0x02, datareg);
	/* might not be reached: */
	return NOTIFY_DONE;
}

static int __init lasi_init_chip(struct parisc_device *dev)
{
	extern void (*chassis_power_off)(void);
	struct gsc_asic *lasi;
	int ret;

@@ -212,12 +209,9 @@ static int __init lasi_init_chip(struct parisc_device *dev)

	gsc_fixup_irqs(dev, lasi, lasi_choose_irq);

	/* initialize the power off function */
	/* FIXME: Record the LASI HPA for the power off function.  This should
	 * ensure that only the first LASI (the one controlling the power off)
	 * should set the HPA here */
	lasi_power_off_hpa = lasi->hpa;
	chassis_power_off = lasi_power_off;
	/* register the LASI power off function */
	register_sys_off_handler(SYS_OFF_MODE_POWER_OFF,
		SYS_OFF_PRIO_DEFAULT, lasi_power_off, lasi);

	return ret;
}