From ecad504c39ee2d914d65c84b5ca1e4f7dd3d1c1d Mon Sep 17 00:00:00 2001 From: Florian Fainelli Date: Sat, 18 Jul 2009 00:40:23 +0000 Subject: [PATCH] register GPIO-connected LEDs for known boards SVN-Revision: 16887 --- target/linux/brcm63xx/base-files/etc/diag.sh | 12 + target/linux/brcm63xx/config-2.6.27 | 3 +- .../arch/mips/bcm63xx/boards/board_bcm963xx.c | 241 +++++++++++++++++- .../asm-mips/mach-bcm63xx/board_bcm963xx.h | 5 + 4 files changed, 259 insertions(+), 2 deletions(-) create mode 100755 target/linux/brcm63xx/base-files/etc/diag.sh diff --git a/target/linux/brcm63xx/base-files/etc/diag.sh b/target/linux/brcm63xx/base-files/etc/diag.sh new file mode 100755 index 0000000000..325e4806ea --- /dev/null +++ b/target/linux/brcm63xx/base-files/etc/diag.sh @@ -0,0 +1,12 @@ +#!/bin/sh +# Copyright (C) 2009 OpenWrt.org + +set_state() { + case "$1" in + done) + [ -d /sys/class/leds/power ] && { + echo 1 >/sys/class/leds/power/brightness + } + ;; + esac +} diff --git a/target/linux/brcm63xx/config-2.6.27 b/target/linux/brcm63xx/config-2.6.27 index 387df15f71..1b638dc25a 100644 --- a/target/linux/brcm63xx/config-2.6.27 +++ b/target/linux/brcm63xx/config-2.6.27 @@ -77,6 +77,7 @@ CONFIG_GENERIC_GPIO=y # CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ is not set CONFIG_GPIOLIB=y CONFIG_GPIO_DEVICE=y +CONFIG_GPIO_SYSFS=y # CONFIG_HAMRADIO is not set CONFIG_HAS_DMA=y CONFIG_HAS_IOMEM=y @@ -108,7 +109,7 @@ CONFIG_IRQ_CPU=y # CONFIG_ISDN is not set CONFIG_KEXEC=y CONFIG_LBD=y -# CONFIG_LEDS_GPIO is not set +CONFIG_LEDS_GPIO=y # CONFIG_LEDS_TRIGGER_HEARTBEAT is not set # CONFIG_LEMOTE_FULONG is not set # CONFIG_MACH_ALCHEMY is not set diff --git a/target/linux/brcm63xx/files/arch/mips/bcm63xx/boards/board_bcm963xx.c b/target/linux/brcm63xx/files/arch/mips/bcm63xx/boards/board_bcm963xx.c index e3ae72bff2..52d4c27a08 100644 --- a/target/linux/brcm63xx/files/arch/mips/bcm63xx/boards/board_bcm963xx.c +++ b/target/linux/brcm63xx/files/arch/mips/bcm63xx/boards/board_bcm963xx.c @@ -4,6 +4,7 @@ * for more details. * * Copyright (C) 2008 Maxime Bizon + * Copyright (C) 2009 Florian Fainelli */ #include @@ -54,6 +55,35 @@ static struct board_info __initdata board_96338gw = { }, .has_ohci0 = 1, + + .leds = { + { + .name = "adsl", + .gpio = 3, + .active_low = 1, + }, + { + .name = "ses", + .gpio = 5, + .active_low = 1, + }, + { + .name = "ppp-fail", + .gpio = 4, + .active_low = 1, + }, + { + .name = "power", + .gpio = 0, + .active_low = 1, + .default_trigger = "default-on", + }, + { + .name = "stop", + .gpio = 1, + .active_low = 1, + } + }, }; static struct board_info __initdata board_96338w = { @@ -64,7 +94,36 @@ static struct board_info __initdata board_96338w = { .enet0 = { .force_speed_100 = 1, .force_duplex_full = 1, - } + }, + + .leds = { + { + .name = "adsl", + .gpio = 3, + .active_low = 1, + }, + { + .name = "ses", + .gpio = 5, + .active_low = 1, + }, + { + .name = "ppp-fail", + .gpio = 4, + .active_low = 1, + }, + { + .name = "power", + .gpio = 0, + .active_low = 1, + .default_trigger = "default-on", + }, + { + .name = "stop", + .gpio = 1, + .active_low = 1, + }, + }, }; #endif @@ -93,6 +152,36 @@ static struct board_info __initdata board_96348r = { .has_phy = 1, .use_internal_phy = 1, }, + + .leds = { + { + .name = "adsl-fail", + .gpio = 2, + .active_low = 1, + }, + { + .name = "ppp", + .gpio = 3, + .active_low = 1, + }, + { + .name = "ppp-fail", + .gpio = 4, + .active_low = 1, + }, + { + .name = "power", + .gpio = 0, + .active_low = 1, + .default_trigger = "default-on", + + }, + { + .name = "stop", + .gpio = 1, + .active_low = 1, + }, + }, }; static struct board_info __initdata board_96348gw_10 = { @@ -123,6 +212,35 @@ static struct board_info __initdata board_96348gw_10 = { .cs = 2, .ext_irq = 2, }, + + .leds = { + { + .name = "adsl-fail", + .gpio = 2, + .active_low = 1, + }, + { + .name = "ppp", + .gpio = 3, + .active_low = 1, + }, + { + .name = "ppp-fail", + .gpio = 4, + .active_low = 1, + }, + { + .name = "power", + .gpio = 0, + .active_low = 1, + .default_trigger = "default-on", + }, + { + .name = "stop", + .gpio = 1, + .active_low = 1, + }, + }, }; static struct board_info __initdata board_96348gw_11 = { @@ -147,6 +265,35 @@ static struct board_info __initdata board_96348gw_11 = { .has_ohci0 = 1, .has_pccard = 1, .has_ehci0 = 1, + + .leds = { + { + .name = "adsl-fail", + .gpio = 2, + .active_low = 1, + }, + { + .name = "ppp", + .gpio = 3, + .active_low = 1, + }, + { + .name = "ppp-fail", + .gpio = 4, + .active_low = 1, + }, + { + .name = "power", + .gpio = 0, + .active_low = 1, + .default_trigger = "default-on", + }, + { + .name = "stop", + .gpio = 1, + .active_low = 1, + }, + }, }; static struct board_info __initdata board_96348gw = { @@ -175,6 +322,35 @@ static struct board_info __initdata board_96348gw = { .ext_irq = 2, .cs = 2, }, + + .leds = { + { + .name = "adsl-fail", + .gpio = 2, + .active_low = 1, + }, + { + .name = "ppp", + .gpio = 3, + .active_low = 1, + }, + { + .name = "ppp-fail", + .gpio = 4, + .active_low = 1, + }, + { + .name = "power", + .gpio = 0, + .active_low = 1, + .default_trigger = "default-on", + }, + { + .name = "stop", + .gpio = 1, + .active_low = 1, + }, + }, }; static struct board_info __initdata board_FAST2404 = { @@ -270,6 +446,33 @@ static struct board_info __initdata board_96358vw = { .has_ohci0 = 1, .has_pccard = 1, .has_ehci0 = 1, + + .leds = { + { + .name = "adsl-fail", + .gpio = 15, + .active_low = 1, + }, + { + .name = "ppp", + .gpio = 22, + .active_low = 1, + }, + { + .name = "ppp-fail", + .gpio = 23, + .active_low = 1, + }, + { + .name = "power", + .gpio = 4, + .default_trigger = "default-on", + }, + { + .name = "stop", + .gpio = 5, + }, + }, }; static struct board_info __initdata board_96358vw2 = { @@ -294,6 +497,29 @@ static struct board_info __initdata board_96358vw2 = { .has_ohci0 = 1, .has_pccard = 1, .has_ehci0 = 1, + + .leds = { + { + .name = "adsl", + .gpio = 22, + .active_low = 1, + }, + { + .name = "ppp-fail", + .gpio = 23, + }, + { + .name = "power", + .gpio = 5, + .active_low = 1, + .default_trigger = "default-on", + }, + { + .name = "stop", + .gpio = 4, + .active_low = 1, + }, + }, }; static struct board_info __initdata board_AGPFS0 = { @@ -546,6 +772,14 @@ static struct resource gpiodev_resource = { .start = 0xFFFFFFFF, }; +static struct gpio_led_platform_data bcm63xx_led_data; + +static struct platform_device bcm63xx_gpio_leds = { + .name = "leds-gpio", + .id = 0, + .dev.platform_data = &bcm63xx_led_data, +}; + /* * third stage init callback, register all board devices. */ @@ -606,6 +840,11 @@ int __init board_register_devices(void) /* Register GPIODEV */ platform_device_register_simple("GPIODEV", 0, &gpiodev_resource, 1); + bcm63xx_led_data.num_leds = ARRAY_SIZE(board.leds); + bcm63xx_led_data.leds = board.leds; + + platform_device_register(&bcm63xx_gpio_leds); + return 0; } diff --git a/target/linux/brcm63xx/files/include/asm-mips/mach-bcm63xx/board_bcm963xx.h b/target/linux/brcm63xx/files/include/asm-mips/mach-bcm63xx/board_bcm963xx.h index 85d1e5f418..d154b2859e 100644 --- a/target/linux/brcm63xx/files/include/asm-mips/mach-bcm63xx/board_bcm963xx.h +++ b/target/linux/brcm63xx/files/include/asm-mips/mach-bcm63xx/board_bcm963xx.h @@ -2,6 +2,8 @@ #define BOARD_BCM963XX_H_ #include +#include +#include #include #include @@ -51,6 +53,9 @@ struct board_info { /* DSP config */ struct bcm63xx_dsp_platform_data dsp; + + /* GPIO LEDs */ + struct gpio_led leds[5]; }; #endif /* ! BOARD_BCM963XX_H_ */