From 3e952891496fe1309fc93bc64c69906227d2e6de Mon Sep 17 00:00:00 2001 From: Florian Fainelli Date: Fri, 2 Mar 2007 13:03:50 +0000 Subject: [PATCH] Add a LED driver for MTX-1 boards, yeah baby SVN-Revision: 6454 --- target/linux/au1000-2.6/config/default | 4 +- .../au1000-2.6/patches/011-mtx1_leds.patch | 148 ++++++++++++++++++ 2 files changed, 150 insertions(+), 2 deletions(-) create mode 100644 target/linux/au1000-2.6/patches/011-mtx1_leds.patch diff --git a/target/linux/au1000-2.6/config/default b/target/linux/au1000-2.6/config/default index b62c3f0fbbd..351d6fda317 100644 --- a/target/linux/au1000-2.6/config/default +++ b/target/linux/au1000-2.6/config/default @@ -95,6 +95,8 @@ CONFIG_I2C_CHARDEV=m CONFIG_INITRAMFS_SOURCE="" CONFIG_JFFS2_FS_DEBUG=0 # CONFIG_LAN_SAA9730 is not set +CONFIG_LEDS_MTX1=y +# CONFIG_LEDS_TRIGGERS is not set # CONFIG_MACH_DECSTATION is not set # CONFIG_MACH_JAZZ is not set # CONFIG_MACH_VR41XX is not set @@ -182,12 +184,10 @@ CONFIG_MTX1_WATCHDOG=y # CONFIG_NATSEMI is not set # CONFIG_NE2K_PCI is not set # CONFIG_NET_VENDOR_3COM is not set -# CONFIG_NEW_LEDS is not set # CONFIG_PAGE_SIZE_16KB is not set CONFIG_PAGE_SIZE_4KB=y # CONFIG_PAGE_SIZE_64KB is not set # CONFIG_PAGE_SIZE_8KB is not set -# CONFIG_PCMCIA is not set # CONFIG_PCCARD is not set # CONFIG_PCIPCWATCHDOG is not set CONFIG_PHYLIB=y 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 00000000000..350c531fbee --- /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 ++ * ++ * 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 ++ ++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 "); ++MODULE_DESCRIPTION("MTX-1 LED driver"); ++MODULE_LICENSE("GPL");