patch-2.4.0-test7 linux/arch/arm/kernel/leds-sa1100.c

Next file: linux/arch/arm/kernel/oldlatches.c
Previous file: linux/arch/arm/kernel/leds-footbridge.c
Back to the patch index
Back to the overall index

diff -u --recursive --new-file v2.4.0-test6/linux/arch/arm/kernel/leds-sa1100.c linux/arch/arm/kernel/leds-sa1100.c
@@ -36,6 +36,7 @@
 
 #include <asm/hardware.h>
 #include <asm/leds.h>
+#include <asm/mach-types.h>
 #include <asm/system.h>
 
 
@@ -95,6 +96,9 @@
 		break;
 #endif
 
+	case led_halted:
+		break;
+
 	case led_green_on:
 		if (led_state & LED_STATE_CLAIMED)
 			hw_led_state &= ~BCR_LED_GREEN;
@@ -302,6 +306,100 @@
 
 #endif /* CONFIG_SA1100_LART */
 
+#ifdef CONFIG_SA1100_CERF
+#define LED_D0          GPIO_GPIO(0)
+#define LED_D1          GPIO_GPIO(1)
+#define LED_D2          GPIO_GPIO(2)
+#define LED_D3          GPIO_GPIO(3)
+#define LED_MASK        (LED_D0|LED_D1|LED_D2|LED_D3)
+
+static void cerf_leds_event(led_event_t evt)
+{
+        unsigned long flags;
+
+        save_flags_cli(flags);
+
+        switch (evt) {
+        case led_start:
+                hw_led_state = LED_MASK;
+                led_state = LED_STATE_ENABLED;
+                break;
+
+        case led_stop:
+                led_state &= ~LED_STATE_ENABLED;
+                break;
+
+        case led_claim:
+                led_state |= LED_STATE_CLAIMED;
+                hw_led_state = LED_MASK;
+                break;
+        case led_release:
+                led_state &= ~LED_STATE_CLAIMED;
+                hw_led_state = LED_MASK;
+                break;
+
+#ifdef CONFIG_LEDS_TIMER
+        case led_timer:
+                if (!(led_state & LED_STATE_CLAIMED))
+                        hw_led_state ^= LED_D0;
+                break;
+#endif
+
+#ifdef CONFIG_LEDS_CPU
+        case led_idle_start:
+                if (!(led_state & LED_STATE_CLAIMED))
+                        hw_led_state &= ~LED_D1;
+                break;
+
+        case led_idle_end:
+                if (!(led_state & LED_STATE_CLAIMED))
+                        hw_led_state |= LED_D1;
+                break;
+#endif
+        case led_green_on:
+                if (!(led_state & LED_STATE_CLAIMED))
+                        hw_led_state &= ~LED_D2;
+                break;
+
+        case led_green_off:
+                if (!(led_state & LED_STATE_CLAIMED))
+                        hw_led_state |= LED_D2;
+                break;
+
+        case led_amber_on:
+                if (!(led_state & LED_STATE_CLAIMED))
+                        hw_led_state &= ~LED_D3;
+                break;
+
+        case led_amber_off:
+                if (!(led_state & LED_STATE_CLAIMED))
+                        hw_led_state |= LED_D3;
+                break;
+
+        case led_red_on:
+                if (!(led_state & LED_STATE_CLAIMED))
+                        hw_led_state &= ~LED_D1;
+                break;
+
+        case led_red_off:
+                if (!(led_state & LED_STATE_CLAIMED))
+                        hw_led_state |= LED_D1;
+                break;
+
+        default:
+                break;
+        }
+
+        if  (led_state & LED_STATE_ENABLED) {
+                GPSR = hw_led_state;
+                GPCR = hw_led_state ^ LED_MASK;
+        }
+
+        restore_flags(flags);
+}
+
+#endif /* CONFIG_SA1100_CERF */
+
 static void dummy_leds_event(led_event_t evt)
 {
 }
@@ -325,7 +423,13 @@
 	if (machine_is_lart())
 		leds_event = lart_leds_event;
 #endif
-
+#ifdef CONFIG_SA1100_CERF
+       if (machine_is_cerf())
+       {
+                //GPDR |= 0x0000000F;
+               leds_event = cerf_leds_event;
+       }
+#endif
 	leds_event(led_start);
 	return 0;
 }

FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)