mirror of
git://projects.qi-hardware.com/openwrt-xburst.git
synced 2024-11-09 16:26:15 +02:00
318 lines
7.8 KiB
Diff
318 lines
7.8 KiB
Diff
|
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 <a.zummo@towertech.it>
|
||
|
+ *
|
||
|
+ * Copyright (C) 2008 Constantin Baranov <const@mimas.ru>
|
||
|
+ * Copyright (C) 2011 Ed Wildgoose <kernel@wildgooses.com>
|
||
|
+ * and Philip Prindeville <philipp@redfish-solutions.com>
|
||
|
+ *
|
||
|
+ * 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 <linux/kernel.h>
|
||
|
+#include <linux/init.h>
|
||
|
+#include <linux/io.h>
|
||
|
+#include <linux/string.h>
|
||
|
+#include <linux/module.h>
|
||
|
+#include <linux/leds.h>
|
||
|
+#include <linux/platform_device.h>
|
||
|
+#include <linux/gpio.h>
|
||
|
+#include <linux/input.h>
|
||
|
+#include <linux/gpio_keys.h>
|
||
|
+
|
||
|
+#include <asm/geode.h>
|
||
|
+
|
||
|
+#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 <philipp@redfish-solutions.com>");
|
||
|
+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 <a.zummo@towertech.it>
|
||
|
- *
|
||
|
- * 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 <linux/kernel.h>
|
||
|
-#include <linux/init.h>
|
||
|
-#include <linux/io.h>
|
||
|
-#include <linux/string.h>
|
||
|
-#include <linux/leds.h>
|
||
|
-#include <linux/platform_device.h>
|
||
|
-#include <linux/gpio.h>
|
||
|
-#include <linux/module.h>
|
||
|
-
|
||
|
-#include <asm/geode.h>
|
||
|
-
|
||
|
-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
|