[ramips] add common GPIO LED support
authorGabor Juhos <juhosg@openwrt.org>
Mon, 31 Aug 2009 09:14:14 +0000 (09:14 +0000)
committerGabor Juhos <juhosg@openwrt.org>
Mon, 31 Aug 2009 09:14:14 +0000 (09:14 +0000)
SVN-Revision: 17448

target/linux/ramips/files/arch/mips/include/asm/mach-ralink/dev_gpio_leds.h [new file with mode: 0644]
target/linux/ramips/files/arch/mips/ralink/Kconfig
target/linux/ramips/files/arch/mips/ralink/common/Makefile
target/linux/ramips/files/arch/mips/ralink/common/dev-gpio-leds.c [new file with mode: 0644]
target/linux/ramips/files/arch/mips/ralink/rt305x/Kconfig

diff --git a/target/linux/ramips/files/arch/mips/include/asm/mach-ralink/dev_gpio_leds.h b/target/linux/ramips/files/arch/mips/include/asm/mach-ralink/dev_gpio_leds.h
new file mode 100644 (file)
index 0000000..1d6fbc2
--- /dev/null
@@ -0,0 +1,26 @@
+/*
+ *  Ralink SoC GPIO LED device support
+ *
+ *  Copyright (C) 2009 Gabor Juhos <juhosg@openwrt.org>
+ *
+ *  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.
+ */
+
+#ifndef __ASM_MACH_RALINK_DEV_GPIO_LEDS_H
+#define __ASM_MACH_RALINK_DEV_GPIO_LEDS_H
+
+struct gpio_led;
+
+#ifdef CONFIG_RALINK_DEV_GPIO_LEDS
+__init void ramips_register_gpio_leds(int id, unsigned num_leds,
+                                     struct gpio_led *leds);
+#else
+static inline void ramips_register_gpio_leds(int id, unsigned num_leds,
+                                            struct gpio_led *leds)
+{
+}
+#endif
+
+#endif /* __ASM_MACH_RALINK_DEV_GPIO_LEDS_H */
index e180eabd65512f5352d1cd766c2b8f7c0ad53686..fac5c7bfd653ae9a48184ae75fa0aa6b7ff05dd4 100644 (file)
@@ -48,4 +48,7 @@ config SOC_RT305X
        select SYS_HAS_EARLY_PRINTK
        select MIPS_MACHINE
 
+config RALINK_DEV_GPIO_LEDS
+       def_bool n
+
 endif
index 08e16dd5c20d896d33bb350e0b0a6d85aa476859..24f67ea6c3bd39d23271a6262bc504fc72887350 100644 (file)
@@ -8,3 +8,5 @@
 # by the Free Software Foundation.
 
 obj-y  := intc.o gpio.o
+
+obj-$(CONFIG_RALINK_DEV_GPIO_LEDS)     += dev-gpio-leds.o
diff --git a/target/linux/ramips/files/arch/mips/ralink/common/dev-gpio-leds.c b/target/linux/ramips/files/arch/mips/ralink/common/dev-gpio-leds.c
new file mode 100644 (file)
index 0000000..96651e7
--- /dev/null
@@ -0,0 +1,54 @@
+/*
+ *  Ralink SoC GPIO LED device support
+ *
+ *  Copyright (C) 2009 Gabor Juhos <juhosg@openwrt.org>
+ *
+ *  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/init.h>
+#include <linux/platform_device.h>
+#include <linux/leds.h>
+
+#include <asm/mach-ralink/dev_gpio_leds.h>
+
+void __init ramips_register_gpio_leds(int id, unsigned num_leds,
+                                     struct gpio_led *leds)
+{
+       struct platform_device *pdev;
+       struct gpio_led_platform_data pdata;
+       struct gpio_led *p;
+       int err;
+
+       p = kmalloc(num_leds * sizeof(*p), GFP_KERNEL);
+       if (!p)
+               return;
+
+       memcpy(p, leds, num_leds * sizeof(*p));
+
+       pdev = platform_device_alloc("leds-gpio", id);
+       if (!pdev)
+               goto err_free_leds;
+
+       memset(&pdata, 0, sizeof(pdata));
+       pdata.num_leds = num_leds;
+       pdata.leds = p;
+
+       err = platform_device_add_data(pdev, &pdata, sizeof(pdata));
+       if (err)
+               goto err_put_pdev;
+
+       err = platform_device_add(pdev);
+       if (err)
+               goto err_put_pdev;
+
+       return;
+
+err_put_pdev:
+       platform_device_put(pdev);
+
+err_free_leds:
+       kfree(p);
+}
index 3b5e15e1b8d8465a3c8505b97fa84066b3bb02dc..85bee65423212dfed8016010553c44142a430ee5 100644 (file)
@@ -9,6 +9,7 @@ config RT305X_MACH_GENERIC
 config RT305X_MACH_WHR_G300N
        bool "Buffalo WHR-G300N support"
        default y
+       select RALINK_DEV_GPIO_LEDS
 
 endmenu