From 25d605ab0ead3a5fcb98edd57f9b2352cfdf6c0c Mon Sep 17 00:00:00 2001 From: Jo-Philipp Wich Date: Fri, 3 Feb 2012 18:14:02 +0000 Subject: [PATCH] net5501: backport drivers from linux-next Backport net5501 platform driver from 3.4. Remove vestiges of old (pre-2.6.30) leds-net5501.c driver. Signed-off-by: Philip Prindeville SVN-Revision: 30021 --- target/linux/x86/net5501/target.mk | 2 +- .../patches-3.2/005-net5501_platform.patch | 317 ++++++++++++++++++ 2 files changed, 318 insertions(+), 1 deletion(-) create mode 100644 target/linux/x86/patches-3.2/005-net5501_platform.patch diff --git a/target/linux/x86/net5501/target.mk b/target/linux/x86/net5501/target.mk index f92496ee26..7afc1da4ba 100644 --- a/target/linux/x86/net5501/target.mk +++ b/target/linux/x86/net5501/target.mk @@ -15,7 +15,7 @@ DEFAULT_PACKAGES += kmod-crypto-hw-geode kmod-crypto-ocf \ kmod-mppe kmod-pppoe kmod-pppoa kmod-pppo2ltp \ kmod-ath kmod-ath5k kmod-ath9k \ kmod-leds-gpio kmod-input-gpio-keys-polled \ - kmod-button-hotplug kmod-leds-net5501 \ + kmod-button-hotplug \ kmod-ledtrig-heartbeat kmod-ledtrig-gpio \ kmod-ledtrig-netdev \ kmod-cpu-msr \ diff --git a/target/linux/x86/patches-3.2/005-net5501_platform.patch b/target/linux/x86/patches-3.2/005-net5501_platform.patch new file mode 100644 index 0000000000..1297214641 --- /dev/null +++ b/target/linux/x86/patches-3.2/005-net5501_platform.patch @@ -0,0 +1,317 @@ +diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig +index 2f18a15..7a4f34b 100644 +--- a/arch/x86/Kconfig ++++ b/arch/x86/Kconfig +@@ -2174,6 +2174,12 @@ config GEOS + ---help--- + This option enables system support for the Traverse Technologies GEOS. + ++config NET5501 ++ bool "Soekris Engineering net5501 System Support (LEDS, GPIO, etc)" ++ select GPIOLIB ++ ---help--- ++ This option enables system support for the Soekris Engineering net5501. ++ + endif # X86_32 + + config AMD_NB +diff --git a/arch/x86/platform/geode/Makefile b/arch/x86/platform/geode/Makefile +index d8ba564..5b51194 100644 +--- a/arch/x86/platform/geode/Makefile ++++ b/arch/x86/platform/geode/Makefile +@@ -1,2 +1,3 @@ + obj-$(CONFIG_ALIX) += alix.o ++obj-$(CONFIG_NET5501) += net5501.o + obj-$(CONFIG_GEOS) += geos.o +diff --git a/arch/x86/platform/geode/net5501.c b/arch/x86/platform/geode/net5501.c +new file mode 100644 +index 0000000..66d377e +--- /dev/null ++++ b/arch/x86/platform/geode/net5501.c +@@ -0,0 +1,154 @@ ++/* ++ * System Specific setup for Soekris net5501 ++ * At the moment this means setup of GPIO control of LEDs and buttons ++ * on net5501 boards. ++ * ++ * ++ * Copyright (C) 2008-2009 Tower Technologies ++ * Written by Alessandro Zummo ++ * ++ * Copyright (C) 2008 Constantin Baranov ++ * Copyright (C) 2011 Ed Wildgoose ++ * and Philip Prindeville ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License version 2 ++ * as published by the Free Software Foundation. ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++ ++#define BIOS_REGION_BASE 0xffff0000 ++#define BIOS_REGION_SIZE 0x00010000 ++ ++static struct gpio_keys_button net5501_gpio_buttons[] = { ++ { ++ .code = KEY_RESTART, ++ .gpio = 24, ++ .active_low = 1, ++ .desc = "Reset button", ++ .type = EV_KEY, ++ .wakeup = 0, ++ .debounce_interval = 100, ++ .can_disable = 0, ++ } ++}; ++static struct gpio_keys_platform_data net5501_buttons_data = { ++ .buttons = net5501_gpio_buttons, ++ .nbuttons = ARRAY_SIZE(net5501_gpio_buttons), ++ .poll_interval = 20, ++}; ++ ++static struct platform_device net5501_buttons_dev = { ++ .name = "gpio-keys-polled", ++ .id = 1, ++ .dev = { ++ .platform_data = &net5501_buttons_data, ++ } ++}; ++ ++static struct gpio_led net5501_leds[] = { ++ { ++ .name = "net5501:1", ++ .gpio = 6, ++ .default_trigger = "default-on", ++ .active_low = 1, ++ }, ++}; ++ ++static struct gpio_led_platform_data net5501_leds_data = { ++ .num_leds = ARRAY_SIZE(net5501_leds), ++ .leds = net5501_leds, ++}; ++ ++static struct platform_device net5501_leds_dev = { ++ .name = "leds-gpio", ++ .id = -1, ++ .dev.platform_data = &net5501_leds_data, ++}; ++ ++static struct __initdata platform_device *net5501_devs[] = { ++ &net5501_buttons_dev, ++ &net5501_leds_dev, ++}; ++ ++static void __init register_net5501(void) ++{ ++ /* Setup LED control through leds-gpio driver */ ++ platform_add_devices(net5501_devs, ARRAY_SIZE(net5501_devs)); ++} ++ ++struct net5501_board { ++ u16 offset; ++ u16 len; ++ char *sig; ++}; ++ ++static struct net5501_board __initdata boards[] = { ++ { 0xb7b, 7, "net5501" }, /* net5501 v1.33/1.33c */ ++ { 0xb1f, 7, "net5501" }, /* net5501 v1.32i */ ++}; ++ ++static bool __init net5501_present(void) ++{ ++ int i; ++ unsigned char *rombase, *bios; ++ bool found = false; ++ ++ rombase = ioremap(BIOS_REGION_BASE, BIOS_REGION_SIZE - 1); ++ if (!rombase) { ++ printk(KERN_ERR "%s: failed to get rombase\n", KBUILD_MODNAME); ++ return found; ++ } ++ ++ bios = rombase + 0x20; /* null terminated */ ++ ++ if (memcmp(bios, "comBIOS", 7)) ++ goto unmap; ++ ++ for (i = 0; i < ARRAY_SIZE(boards); i++) { ++ unsigned char *model = rombase + boards[i].offset; ++ ++ if (!memcmp(model, boards[i].sig, boards[i].len)) { ++ printk(KERN_INFO "%s: system is recognized as \"%s\"\n", ++ KBUILD_MODNAME, model); ++ ++ found = true; ++ break; ++ } ++ } ++ ++unmap: ++ iounmap(rombase); ++ return found; ++} ++ ++static int __init net5501_init(void) ++{ ++ if (!is_geode()) ++ return 0; ++ ++ if (!net5501_present()) ++ return 0; ++ ++ register_net5501(); ++ ++ return 0; ++} ++ ++module_init(net5501_init); ++ ++MODULE_AUTHOR("Philip Prindeville "); ++MODULE_DESCRIPTION("Soekris net5501 System Setup"); ++MODULE_LICENSE("GPL"); +diff --git a/drivers/leds/leds-net5501.c b/drivers/leds/leds-net5501.c +deleted file mode 100644 +index 0555d47..0000000 +--- a/drivers/leds/leds-net5501.c ++++ /dev/null +@@ -1,97 +0,0 @@ +-/* +- * Soekris board support code +- * +- * Copyright (C) 2008-2009 Tower Technologies +- * Written by Alessandro Zummo +- * +- * This program is free software; you can redistribute it and/or modify +- * it under the terms of the GNU General Public License version 2 +- * as published by the Free Software Foundation. +- */ +- +-#include +-#include +-#include +-#include +-#include +-#include +-#include +-#include +- +-#include +- +-static const struct gpio_led net5501_leds[] = { +- { +- .name = "error", +- .gpio = 6, +- .default_trigger = "default-on", +- }, +-}; +- +-static struct gpio_led_platform_data net5501_leds_data = { +- .num_leds = ARRAY_SIZE(net5501_leds), +- .leds = net5501_leds, +-}; +- +-static struct platform_device net5501_leds_dev = { +- .name = "leds-gpio", +- .id = -1, +- .dev.platform_data = &net5501_leds_data, +-}; +- +-static void __init init_net5501(void) +-{ +- platform_device_register(&net5501_leds_dev); +-} +- +-struct soekris_board { +- u16 offset; +- char *sig; +- u8 len; +- void (*init)(void); +-}; +- +-static struct soekris_board __initdata boards[] = { +- { 0xb7b, "net5501", 7, init_net5501 }, /* net5501 v1.33/1.33c */ +- { 0xb1f, "net5501", 7, init_net5501 }, /* net5501 v1.32i */ +-}; +- +-static int __init soekris_init(void) +-{ +- int i; +- unsigned char *rombase, *bios; +- +- if (!is_geode()) +- return 0; +- +- rombase = ioremap(0xffff0000, 0xffff); +- if (!rombase) { +- printk(KERN_INFO "Soekris net5501 LED driver failed to get rombase"); +- return 0; +- } +- +- bios = rombase + 0x20; /* null terminated */ +- +- if (strncmp(bios, "comBIOS", 7)) +- goto unmap; +- +- for (i = 0; i < ARRAY_SIZE(boards); i++) { +- unsigned char *model = rombase + boards[i].offset; +- +- if (strncmp(model, boards[i].sig, boards[i].len) == 0) { +- printk(KERN_INFO "Soekris %s: %s\n", model, bios); +- +- if (boards[i].init) +- boards[i].init(); +- break; +- } +- } +- +-unmap: +- iounmap(rombase); +- return 0; +-} +- +-arch_initcall(soekris_init); +- +-MODULE_LICENSE("GPL"); +--- a/drivers/leds/Kconfig 2012-01-29 23:22:59.487891522 -0700 ++++ b/drivers/leds/Kconfig 2012-02-03 10:33:39.650202054 -0700 +@@ -89,16 +89,6 @@ config LEDS_NET48XX + This option enables support for the Soekris net4801 and net4826 error + LED. + +-config LEDS_NET5501 +- tristate "LED Support for Soekris net5501 series Error LED" +- depends on LEDS_TRIGGERS +- depends on X86 && GPIO_CS5535 +- select LEDS_TRIGGER_DEFAULT_ON +- default n +- help +- Add support for the Soekris net5501 board (detection, error led +- and GPIO). +- + config LEDS_FSG + tristate "LED Support for the Freecom FSG-3" + depends on LEDS_CLASS +--- a/drivers/leds/Makefile 2012-01-29 23:22:59.487891522 -0700 ++++ b/drivers/leds/Makefile 2012-02-03 10:33:24.468430696 -0700 +@@ -14,7 +14,6 @@ obj-$(CONFIG_LEDS_MIKROTIK_RB532) += led + obj-$(CONFIG_LEDS_S3C24XX) += leds-s3c24xx.o + obj-$(CONFIG_LEDS_AMS_DELTA) += leds-ams-delta.o + obj-$(CONFIG_LEDS_NET48XX) += leds-net48xx.o +-obj-$(CONFIG_LEDS_NET5501) += leds-net5501.o + obj-$(CONFIG_LEDS_WRAP) += leds-wrap.o + obj-$(CONFIG_LEDS_COBALT_QUBE) += leds-cobalt-qube.o + obj-$(CONFIG_LEDS_COBALT_RAQ) += leds-cobalt-raq.o