diff options
Diffstat (limited to 'arch/arm/mach-ixp4xx/nslu2-setup.c')
| -rw-r--r-- | arch/arm/mach-ixp4xx/nslu2-setup.c | 23 | 
1 files changed, 14 insertions, 9 deletions
diff --git a/arch/arm/mach-ixp4xx/nslu2-setup.c b/arch/arm/mach-ixp4xx/nslu2-setup.c index 7e55236c26e..88c025f52d8 100644 --- a/arch/arm/mach-ixp4xx/nslu2-setup.c +++ b/arch/arm/mach-ixp4xx/nslu2-setup.c @@ -197,11 +197,8 @@ static void nslu2_power_off(void)  {  	/* This causes the box to drop the power and go dead. */ -	/* enable the pwr cntl gpio */ -	gpio_line_config(NSLU2_PO_GPIO, IXP4XX_GPIO_OUT); - -	/* do the deed */ -	gpio_line_set(NSLU2_PO_GPIO, IXP4XX_GPIO_HIGH); +	/* enable the pwr cntl gpio and assert power off */ +	gpio_direction_output(NSLU2_PO_GPIO, 1);  }  static irqreturn_t nslu2_power_handler(int irq, void *dev_id) @@ -223,6 +220,16 @@ static irqreturn_t nslu2_reset_handler(int irq, void *dev_id)  	return IRQ_HANDLED;  } +static int __init nslu2_gpio_init(void) +{ +	if (!machine_is_nslu2()) +		return 0; + +	/* Request the power off GPIO */ +	return gpio_request(NSLU2_PO_GPIO, "power off"); +} +device_initcall(nslu2_gpio_init); +  static void __init nslu2_timer_init(void)  {      /* The xtal on this machine is non-standard. */ @@ -258,16 +265,14 @@ static void __init nslu2_init(void)  	pm_power_off = nslu2_power_off;  	if (request_irq(gpio_to_irq(NSLU2_RB_GPIO), &nslu2_reset_handler, -		IRQF_DISABLED | IRQF_TRIGGER_LOW, -		"NSLU2 reset button", NULL) < 0) { +		IRQF_TRIGGER_LOW, "NSLU2 reset button", NULL) < 0) {  		printk(KERN_DEBUG "Reset Button IRQ %d not available\n",  			gpio_to_irq(NSLU2_RB_GPIO));  	}  	if (request_irq(gpio_to_irq(NSLU2_PB_GPIO), &nslu2_power_handler, -		IRQF_DISABLED | IRQF_TRIGGER_HIGH, -		"NSLU2 power button", NULL) < 0) { +		IRQF_TRIGGER_HIGH, "NSLU2 power button", NULL) < 0) {  		printk(KERN_DEBUG "Power Button IRQ %d not available\n",  			gpio_to_irq(NSLU2_PB_GPIO));  | 
