--- linux-2.4.19/arch/arm/mach-footbridge/netwinder-leds.c~ Mon Sep 18 18:15:25 2000 +++ linux-2.4.19/arch/arm/mach-footbridge/netwinder-leds.c Wed Oct 16 20:20:04 2002 @@ -27,9 +27,6 @@ #include #include -#define LED_STATE_ENABLED 1 -#define LED_STATE_CLAIMED 2 -static char led_state; static char hw_led_state; static spinlock_t leds_lock = SPIN_LOCK_UNLOCKED; @@ -42,77 +39,37 @@ spin_lock_irqsave(&leds_lock, flags); switch (evt) { - case led_start: - led_state |= LED_STATE_ENABLED; - hw_led_state = GPIO_GREEN_LED; - break; - - case led_stop: - led_state &= ~LED_STATE_ENABLED; - break; - - case led_claim: - led_state |= LED_STATE_CLAIMED; - hw_led_state = 0; - break; - - case led_release: - led_state &= ~LED_STATE_CLAIMED; - hw_led_state = 0; - break; #ifdef CONFIG_LEDS_TIMER case led_timer: - if (!(led_state & LED_STATE_CLAIMED)) - hw_led_state ^= GPIO_GREEN_LED; + hw_led_state ^= GPIO_GREEN_LED; break; #endif #ifdef CONFIG_LEDS_CPU case led_idle_start: - if (!(led_state & LED_STATE_CLAIMED)) - hw_led_state &= ~GPIO_RED_LED; + hw_led_state &= ~GPIO_RED_LED; break; case led_idle_end: - if (!(led_state & LED_STATE_CLAIMED)) - hw_led_state |= GPIO_RED_LED; + hw_led_state |= GPIO_RED_LED; break; #endif - case led_halted: - if (!(led_state & LED_STATE_CLAIMED)) - hw_led_state |= GPIO_RED_LED; - break; - case led_green_on: - if (led_state & LED_STATE_CLAIMED) - hw_led_state |= GPIO_GREEN_LED; + hw_led_state |= GPIO_GREEN_LED; break; case led_green_off: - if (led_state & LED_STATE_CLAIMED) - hw_led_state &= ~GPIO_GREEN_LED; - break; - - case led_amber_on: - if (led_state & LED_STATE_CLAIMED) - hw_led_state |= GPIO_GREEN_LED | GPIO_RED_LED; - break; - - case led_amber_off: - if (led_state & LED_STATE_CLAIMED) - hw_led_state &= ~(GPIO_GREEN_LED | GPIO_RED_LED); + hw_led_state &= ~GPIO_GREEN_LED; break; case led_red_on: - if (led_state & LED_STATE_CLAIMED) - hw_led_state |= GPIO_RED_LED; + hw_led_state |= GPIO_RED_LED; break; case led_red_off: - if (led_state & LED_STATE_CLAIMED) - hw_led_state &= ~GPIO_RED_LED; + hw_led_state &= ~GPIO_RED_LED; break; default: @@ -121,11 +78,9 @@ spin_unlock_irqrestore(&leds_lock, flags); - if (led_state & LED_STATE_ENABLED) { - spin_lock_irqsave(&gpio_lock, flags); - gpio_modify_op(GPIO_RED_LED | GPIO_GREEN_LED, hw_led_state); - spin_unlock_irqrestore(&gpio_lock, flags); - } + spin_lock_irqsave(&gpio_lock, flags); + gpio_modify_op(GPIO_RED_LED | GPIO_GREEN_LED, hw_led_state); + spin_unlock_irqrestore(&gpio_lock, flags); } static int __init leds_init(void) @@ -133,7 +88,8 @@ if (machine_is_netwinder()) leds_event = netwinder_leds_event; - leds_event(led_start); + hw_leds_state = 0; + leds_event(led_green_on); return 0; } --- linux-2.4.19/drivers/char/nwflash.c~ Fri Oct 12 16:48:42 2001 +++ linux-2.4.19/drivers/char/nwflash.c Wed Oct 16 20:05:54 2002 @@ -202,7 +202,6 @@ written = 0; - leds_event(led_claim); leds_event(led_green_on); nBlock = (int) p >> 16; //block # of 64K bytes @@ -283,7 +282,8 @@ /* * restore reg on exit */ - leds_event(led_release); + leds_event(led_red_off); + leds_event(led_green_on); up(&nwflash_sem); @@ -342,7 +342,8 @@ /* * orange LED == erase */ - leds_event(led_amber_on); + leds_event(led_red_on); + leds_event(led_green_on); /* * reset footbridge to the correct offset 0 (...0..3) @@ -455,7 +456,7 @@ /* * red LED == write */ - leds_event(led_amber_off); + leds_event(led_green_off); leds_event(led_red_on); pWritePtr = (unsigned char *) ((unsigned int) (FLASH_BASE + p)); @@ -566,7 +567,8 @@ /* * no LED == waiting */ - leds_event(led_amber_off); + leds_event(led_green_off); + leds_event(led_red_off); /* * wait couple ms */ @@ -592,7 +594,7 @@ /* * green LED == read/verify */ - leds_event(led_amber_off); + leds_event(led_red_off); leds_event(led_green_on); flash_wait(HZ / 100);