X-Git-Url: http://git.rohieb.name/openwrt.git/blobdiff_plain/58f98ac38244ed93bb01dcf377937f1aec45202b..abcbd32697a16148ed9362f4ef29a19cc338bb0a:/target/linux/ixp4xx/patches-2.6.23/016-dsmg600_auto_power_on.patch diff --git a/target/linux/ixp4xx/patches-2.6.23/016-dsmg600_auto_power_on.patch b/target/linux/ixp4xx/patches-2.6.23/016-dsmg600_auto_power_on.patch index 25709da4f..2a1f2415f 100644 --- a/target/linux/ixp4xx/patches-2.6.23/016-dsmg600_auto_power_on.patch +++ b/target/linux/ixp4xx/patches-2.6.23/016-dsmg600_auto_power_on.patch @@ -1,13 +1,40 @@ +Upgrade the power and reset button handling for the DSMG600: + * Remove the superfluous declaration of ctrl_alt_del(). + * Convert GPIO and IRQ handling to use the api. + * Perform the reset on the release of the power button, so that + NAS devices which have been set to auto-power-on (by bridging + the power button) do not continuously power cycle. + * Remove all superflous constants from dsmg600.h + +Signed-off-by: Rod Whitby + --- - arch/arm/mach-ixp4xx/dsmg600-power.c | 13 +++++++++---- - 1 file changed, 9 insertions(+), 4 deletions(-) + arch/arm/mach-ixp4xx/dsmg600-power.c | 24 ++++++++++++++---------- + include/asm-arm/arch-ixp4xx/dsmg600.h | 7 +------ + 2 files changed, 15 insertions(+), 16 deletions(-) -Index: linux-2.6.22-rc5-armeb/arch/arm/mach-ixp4xx/dsmg600-power.c +Index: linux-2.6.23.12-armeb/arch/arm/mach-ixp4xx/dsmg600-power.c =================================================================== ---- linux-2.6.22-rc5-armeb.orig/arch/arm/mach-ixp4xx/dsmg600-power.c -+++ linux-2.6.22-rc5-armeb/arch/arm/mach-ixp4xx/dsmg600-power.c -@@ -50,6 +50,13 @@ - if (*IXP4XX_GPIO_GPINR & DSMG600_PB_BM) { +--- linux-2.6.23.12-armeb.orig/arch/arm/mach-ixp4xx/dsmg600-power.c 2008-01-11 16:20:26.000000000 +1030 ++++ linux-2.6.23.12-armeb/arch/arm/mach-ixp4xx/dsmg600-power.c 2008-01-11 16:20:30.000000000 +1030 +@@ -26,10 +26,9 @@ + #include + #include + ++#include + #include + +-extern void ctrl_alt_del(void); +- + /* This is used to make sure the power-button pusher is serious. The button + * must be held until the value of this counter reaches zero. + */ +@@ -47,9 +46,16 @@ + * state of the power button. + */ + +- if (*IXP4XX_GPIO_GPINR & DSMG600_PB_BM) { ++ if (gpio_get_value(DSMG600_PB_GPIO)) { /* IO Pin is 1 (button pushed) */ + if (power_button_countdown > 0) { @@ -20,7 +47,7 @@ Index: linux-2.6.22-rc5-armeb/arch/arm/mach-ixp4xx/dsmg600-power.c if (power_button_countdown == 0) { /* Signal init to do the ctrlaltdel action, this will bypass * init if it hasn't started and do a kernel_restart. -@@ -58,11 +65,9 @@ +@@ -58,11 +64,9 @@ /* Change the state of the power LED to "blink" */ gpio_line_set(DSMG600_LED_PWR_GPIO, IXP4XX_GPIO_LOW); @@ -34,3 +61,51 @@ Index: linux-2.6.22-rc5-armeb/arch/arm/mach-ixp4xx/dsmg600-power.c } mod_timer(&dsmg600_power_timer, jiffies + msecs_to_jiffies(500)); +@@ -81,12 +85,12 @@ + if (!(machine_is_dsmg600())) + return 0; + +- if (request_irq(DSMG600_RB_IRQ, &dsmg600_reset_handler, ++ if (request_irq(gpio_to_irq(DSMG600_RB_GPIO), &dsmg600_reset_handler, + IRQF_DISABLED | IRQF_TRIGGER_LOW, "DSM-G600 reset button", + NULL) < 0) { + + printk(KERN_DEBUG "Reset Button IRQ %d not available\n", +- DSMG600_RB_IRQ); ++ gpio_to_irq(DSMG600_RB_GPIO)); + + return -EIO; + } +@@ -114,7 +118,7 @@ + + del_timer_sync(&dsmg600_power_timer); + +- free_irq(DSMG600_RB_IRQ, NULL); ++ free_irq(gpio_to_irq(DSMG600_RB_GPIO), NULL); + } + + module_init(dsmg600_power_init); +Index: linux-2.6.23.12-armeb/include/asm-arm/arch-ixp4xx/dsmg600.h +=================================================================== +--- linux-2.6.23.12-armeb.orig/include/asm-arm/arch-ixp4xx/dsmg600.h 2008-01-11 16:20:26.000000000 +1030 ++++ linux-2.6.23.12-armeb/include/asm-arm/arch-ixp4xx/dsmg600.h 2008-01-11 16:20:30.000000000 +1030 +@@ -40,18 +40,13 @@ + /* Buttons */ + + #define DSMG600_PB_GPIO 15 /* power button */ +-#define DSMG600_PB_BM (1L << DSMG600_PB_GPIO) +- + #define DSMG600_RB_GPIO 3 /* reset button */ + +-#define DSMG600_RB_IRQ IRQ_IXP4XX_GPIO3 ++/* Power control */ + + #define DSMG600_PO_GPIO 2 /* power off */ + + /* LEDs */ + + #define DSMG600_LED_PWR_GPIO 0 +-#define DSMG600_LED_PWR_BM (1L << DSMG600_LED_PWR_GPIO) +- + #define DSMG600_LED_WLAN_GPIO 14 +-#define DSMG600_LED_WLAN_BM (1L << DSMG600_LED_WLAN_GPIO)