diff options
author | Florian Fainelli <florian@openwrt.org> | 2007-03-02 13:03:50 +0000 |
---|---|---|
committer | Florian Fainelli <florian@openwrt.org> | 2007-03-02 13:03:50 +0000 |
commit | 3e952891496fe1309fc93bc64c69906227d2e6de (patch) | |
tree | eba9f0c16a1d5203aba9de96ff8f7619e0eb33b0 /target/linux/au1000-2.6/patches | |
parent | 28ab697fae8067ac8b46c34953767b5d071db44b (diff) | |
download | upstream-3e952891496fe1309fc93bc64c69906227d2e6de.tar.gz upstream-3e952891496fe1309fc93bc64c69906227d2e6de.tar.bz2 upstream-3e952891496fe1309fc93bc64c69906227d2e6de.zip |
Add a LED driver for MTX-1 boards, yeah baby
SVN-Revision: 6454
Diffstat (limited to 'target/linux/au1000-2.6/patches')
-rw-r--r-- | target/linux/au1000-2.6/patches/011-mtx1_leds.patch | 148 |
1 files changed, 148 insertions, 0 deletions
diff --git a/target/linux/au1000-2.6/patches/011-mtx1_leds.patch b/target/linux/au1000-2.6/patches/011-mtx1_leds.patch new file mode 100644 index 0000000000..350c531fbe --- /dev/null +++ b/target/linux/au1000-2.6/patches/011-mtx1_leds.patch @@ -0,0 +1,148 @@ +diff -urN linux-2.6.19.2/drivers/leds/Kconfig linux-2.6.19.2.new/drivers/leds/Kconfig +--- linux-2.6.19.2/drivers/leds/Kconfig 2007-01-10 20:10:37.000000000 +0100 ++++ linux-2.6.19.2.new/drivers/leds/Kconfig 2007-03-02 13:50:28.000000000 +0100 +@@ -76,6 +76,13 @@ + This option enables support for the Soekris net4801 and net4826 error + LED. + ++config LEDS_MTX1 ++ tristate "LED Support for MTX-1 boards" ++ depends on LEDS_CLASS && MIPS_MTX1 ++ help ++ This option enables support for the MTX-1 power and status LED. ++ ++ + comment "LED Triggers" + + config LEDS_TRIGGERS +diff -urN linux-2.6.19.2/drivers/leds/Makefile linux-2.6.19.2.new/drivers/leds/Makefile +--- linux-2.6.19.2/drivers/leds/Makefile 2007-01-10 20:10:37.000000000 +0100 ++++ linux-2.6.19.2.new/drivers/leds/Makefile 2007-03-02 13:49:35.000000000 +0100 +@@ -13,6 +13,7 @@ + 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_MTX1) += leds-mtx1.o + + # LED Triggers + obj-$(CONFIG_LEDS_TRIGGER_TIMER) += ledtrig-timer.o +diff -urN linux-2.6.19.2/drivers/leds/leds-mtx1.c linux-2.6.19.2.new/drivers/leds/leds-mtx1.c +--- linux-2.6.19.2/drivers/leds/leds-mtx1.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.19.2.new/drivers/leds/leds-mtx1.c 2007-03-02 13:49:08.000000000 +0100 +@@ -0,0 +1,116 @@ ++/* ++ * LED driver for MTX-1 boards ++ * ++ * Copyright 2007 Florian Fainelli <florian@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/kernel.h> ++#include <linux/init.h> ++#include <linux/platform_device.h> ++#include <linux/leds.h> ++#include <linux/err.h> ++#include <asm/mach-au1x00/au1000.h> ++ ++static struct platform_device *pdev; ++ ++static void mtx1_green_led_set(struct led_classdev *led_cdev, enum led_brightness brightness) ++{ ++ /* The power LED cannot be controlled the same way as for the Status LED */ ++ if (brightness) { ++ au_writel( 0x18000800, GPIO2_OUTPUT ); ++ } else { ++ au_writel( 0x18000000, GPIO2_OUTPUT); ++ } ++} ++ ++static void mtx1_red_led_set(struct led_classdev *led_cdev, enum led_brightness brightness) ++{ ++ /* We store GPIO address (originally address - 200) in the "flags" field*/ ++ unsigned long pinmask = 1 << led_cdev->flags; ++ if (brightness) { ++ au_writel((pinmask << 16) | pinmask, GPIO2_OUTPUT); ++ } else { ++ au_writel((pinmask << 16) | 0, GPIO2_OUTPUT); ++ } ++} ++ ++static struct led_classdev mtx1_green_led = { ++ .name = "mtx1:green", ++ .brightness_set = mtx1_green_led_set, ++}; ++ ++static struct led_classdev mtx1_red_led = { ++ .name = "mtx1:red", ++ .flags = 12, ++ .brightness_set = mtx1_red_led_set, ++ .default_trigger = "ide-disk", ++}; ++ ++static int mtx1_leds_probe(struct platform_device *pdev) ++{ ++ int ret; ++ ++ ret = led_classdev_register(&pdev->dev, &mtx1_green_led); ++ if (ret < 0) ++ goto out; ++ ++ ret = led_classdev_register(&pdev->dev, &mtx1_red_led); ++ if (ret < 0) ++ led_classdev_unregister(&mtx1_green_led); ++ ++out: ++ return ret; ++} ++ ++static int mtx1_leds_remove(struct platform_device *pdev) ++{ ++ led_classdev_unregister(&mtx1_green_led); ++ led_classdev_unregister(&mtx1_red_led); ++ return 0; ++} ++ ++static struct platform_driver mtx1_leds_driver = { ++ .probe = mtx1_leds_probe, ++ .remove = mtx1_leds_remove, ++ .driver = { ++ .name = "mtx1-leds", ++ } ++}; ++ ++static int __init mtx1_leds_init(void) ++{ ++ int ret; ++ ++ ret = platform_driver_register(&mtx1_leds_driver); ++ if (ret < 0) ++ goto out; ++ ++ pdev = platform_device_register_simple("mtx1-leds", -1, NULL, 0); ++ if (IS_ERR(pdev)) { ++ ret = PTR_ERR(pdev); ++ platform_driver_unregister(&mtx1_leds_driver); ++ goto out; ++ } ++ ++out: ++ return ret; ++ ++} ++ ++static void __exit mtx1_leds_exit(void) ++{ ++ platform_device_unregister(pdev); ++ platform_driver_unregister(&mtx1_leds_driver); ++} ++ ++module_init(mtx1_leds_init); ++module_exit(mtx1_leds_exit); ++ ++MODULE_AUTHOR("Florian Fainelli <florian@openwrt.org>"); ++MODULE_DESCRIPTION("MTX-1 LED driver"); ++MODULE_LICENSE("GPL"); |