patch-2.4.19 linux-2.4.19/arch/arm/mach-sa1100/leds-frodo.c
Next file: linux-2.4.19/arch/arm/mach-sa1100/leds-system3.c
Previous file: linux-2.4.19/arch/arm/mach-sa1100/leds-flexanet.c
Back to the patch index
Back to the overall index
- Lines: 122
- Date:
Fri Aug 2 17:39:42 2002
- Orig file:
linux-2.4.18/arch/arm/mach-sa1100/leds-frodo.c
- Orig date:
Wed Dec 31 16:00:00 1969
diff -urN linux-2.4.18/arch/arm/mach-sa1100/leds-frodo.c linux-2.4.19/arch/arm/mach-sa1100/leds-frodo.c
@@ -0,0 +1,121 @@
+
+/*
+ * linux/arch/arm/mach-sa1100/leds-frodo.c
+ *
+ * Author: Abraham van der Merwe <abraham@2d3d.co.za>
+ *
+ * This file contains the 2d3D, Inc. SA-1110 Development Board LED
+ * event handler.
+ *
+ * Frodo LEDs
+ *
+ * - led6 - toggles state every 50 timer interrupts (Heartbeat)
+ * - led7 - on if system is not idle (CPU load)
+ */
+
+#include <linux/config.h>
+#include <linux/init.h>
+
+#include <asm/hardware.h>
+#include <asm/leds.h>
+#include <asm/system.h>
+
+#include "leds.h"
+
+#define led6_on() FRODO_CPLD_GENERAL |= FRODO_LED2
+#define led6_off() FRODO_CPLD_GENERAL &= ~FRODO_LED2
+#define led6_invert() do { \
+ if ((FRODO_CPLD_GENERAL & FRODO_LED2)) \
+ led6_off (); \
+ else \
+ led6_on (); \
+ } while (0)
+
+#define led7_on() FRODO_CPLD_GENERAL |= FRODO_LED1
+#define led7_off() FRODO_CPLD_GENERAL &= ~FRODO_LED1
+#define led7_invert() do { \
+ if ((FRODO_CPLD_GENERAL & FRODO_LED1)) \
+ led7_off (); \
+ else \
+ led7_on (); \
+ } while (0)
+
+static int claimed;
+
+void frodo_leds_event (led_event_t evt)
+{
+ unsigned long flags;
+
+ local_irq_save (flags);
+
+ switch (evt)
+ {
+#ifdef CONFIG_LEDS_CPU
+ /* turn off CPU load LED */
+ case led_idle_start:
+ if (!claimed) led7_off ();
+ break;
+
+ /* turn on CPU load LED */
+ case led_idle_end:
+ if (!claimed) led7_on ();
+ break;
+#endif
+
+#ifdef CONFIG_LEDS_TIMER
+ /* toggle heartbeat LED */
+ case led_timer:
+ if (!claimed) led6_invert ();
+ break;
+#endif
+
+ /* start: turn on LEDs and set claimed to 0 */
+ case led_start:
+ led6_on ();
+ led7_on ();
+ claimed = 0;
+ break;
+
+ /* stop: turn off LEDs */
+ case led_stop:
+ led6_off ();
+ led7_off ();
+ break;
+
+ /* override CPU load & timer LEDs */
+ case led_claim:
+ claimed = 1;
+ break;
+
+ /* restore CPU load & timer LEDs */
+ case led_release:
+ claimed = 0;
+ break;
+
+ /* direct LED access (must be previously claimed) */
+
+ /* led7 */
+ case led_green_on:
+ if (claimed) led7_on ();
+ break;
+
+ case led_green_off:
+ if (claimed) led7_off ();
+ break;
+
+ /* led6 -- at the moment this is actually also green */
+ case led_red_on:
+ if (claimed) led6_on ();
+ break;
+
+ case led_red_off:
+ if (claimed) led6_off ();
+ break;
+
+ default:
+ break;
+ }
+
+ local_irq_restore (flags);
+}
+
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)