diff options
-rw-r--r-- | target/linux/lantiq/base-files/etc/hotplug.d/button/10-generic.sh | 22 | ||||
-rw-r--r-- | target/linux/lantiq/files-3.1/arch/mips/lantiq/xway/mach-arv45xx.c | 19 |
2 files changed, 39 insertions, 2 deletions
diff --git a/target/linux/lantiq/base-files/etc/hotplug.d/button/10-generic.sh b/target/linux/lantiq/base-files/etc/hotplug.d/button/10-generic.sh new file mode 100644 index 000000000..b2fdda23f --- /dev/null +++ b/target/linux/lantiq/base-files/etc/hotplug.d/button/10-generic.sh @@ -0,0 +1,22 @@ +#!/bin/sh + +[ "${ACTION}" = "released" ] || exit 0 + +. /lib/functions.sh + +case "${BUTTON}" in + BTN_0) + logger "reset pressed" + sync + reboot + ;; + BTN_1) + logger "factory pressed" + jffs2_mark_erase "rootfs_data" + sync + reboot + ;; + *) + logger "unknown button ${BUTTON}" + ;; +esac diff --git a/target/linux/lantiq/files-3.1/arch/mips/lantiq/xway/mach-arv45xx.c b/target/linux/lantiq/files-3.1/arch/mips/lantiq/xway/mach-arv45xx.c index b08ada5e3..751667514 100644 --- a/target/linux/lantiq/files-3.1/arch/mips/lantiq/xway/mach-arv45xx.c +++ b/target/linux/lantiq/files-3.1/arch/mips/lantiq/xway/mach-arv45xx.c @@ -22,6 +22,7 @@ #include <lantiq_soc.h> #include <lantiq_platform.h> #include <dev-gpio-leds.h> +#include <dev-gpio-buttons.h> #include "../machtypes.h" #include "../dev-wifi-rt2x00.h" @@ -460,11 +461,11 @@ MIPS_MACHINE(LANTIQ_MACH_ARV452CPW, "ARV452CPW - Arcor A801", arv452Cpw_init); -#define ARV4525PW_MADWIFI_ADDR 0xb07f0400 static void __init arv4525pw_init(void) { +#define ARV4525PW_MADWIFI_ADDR 0xb07f0400 ltq_add_device_gpio_leds(-1, ARRAY_SIZE(arv4525pw_gpio_leds), arv4525pw_gpio_leds); ltq_register_nor(&arv45xx_flash_data); ltq_pci_data.clock = PCI_CLOCK_INT; @@ -479,13 +480,27 @@ MIPS_MACHINE(LANTIQ_MACH_ARV4525PW, "ARV4525PW - Speedport W502V", arv4525pw_init); +static struct gpio_keys_button +arv7525pw_gpio_keys[] __initdata = { + { + .desc = "restart", + .type = EV_KEY, + .code = BTN_0, + .debounce_interval = LTQ_KEYS_DEBOUNCE_INTERVAL, + .gpio = 29, + .active_low = 1, + }, +}; + static void __init arv7525pw_init(void) { ltq_add_device_gpio_leds(-1, ARRAY_SIZE(arv4525pw_gpio_leds), arv4525pw_gpio_leds); ltq_register_nor(&arv7525_flash_data); + ltq_register_gpio_keys_polled(-1, LTQ_KEYS_POLL_INTERVAL, + ARRAY_SIZE(arv7525pw_gpio_keys), arv7525pw_gpio_keys); ltq_pci_data.clock = PCI_CLOCK_INT; - ltq_pci_data.gpio |= PCI_EXIN1; + ltq_pci_data.gpio = PCI_GNT1 | PCI_EXIN1; ltq_pci_data.irq[14] = (INT_NUM_IM3_IRL0 + 31); ltq_register_pci(<q_pci_data); ltq_eth_data.mii_mode = PHY_INTERFACE_MODE_MII; |