summaryrefslogtreecommitdiff
path: root/target/linux/au1000-2.6/patches/011-mtx1_leds.patch
blob: 350c531fbee7fbefa5fcc9a59bcfdf9358469c00 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
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");