diff options
| -rw-r--r-- | arch/arm/mach-footbridge/ebsa285.c | 22 |
1 files changed, 13 insertions, 9 deletions
diff --git a/arch/arm/mach-footbridge/ebsa285.c b/arch/arm/mach-footbridge/ebsa285.c index b08243500e2e..1a7235fb52ac 100644 --- a/arch/arm/mach-footbridge/ebsa285.c +++ b/arch/arm/mach-footbridge/ebsa285.c | |||
| @@ -30,21 +30,24 @@ static const struct { | |||
| 30 | const char *name; | 30 | const char *name; |
| 31 | const char *trigger; | 31 | const char *trigger; |
| 32 | } ebsa285_leds[] = { | 32 | } ebsa285_leds[] = { |
| 33 | { "ebsa285:amber", "heartbeat", }, | 33 | { "ebsa285:amber", "cpu0", }, |
| 34 | { "ebsa285:green", "cpu0", }, | 34 | { "ebsa285:green", "heartbeat", }, |
| 35 | { "ebsa285:red",}, | 35 | { "ebsa285:red",}, |
| 36 | }; | 36 | }; |
| 37 | 37 | ||
| 38 | static unsigned char hw_led_state; | ||
| 39 | |||
| 38 | static void ebsa285_led_set(struct led_classdev *cdev, | 40 | static void ebsa285_led_set(struct led_classdev *cdev, |
| 39 | enum led_brightness b) | 41 | enum led_brightness b) |
| 40 | { | 42 | { |
| 41 | struct ebsa285_led *led = container_of(cdev, | 43 | struct ebsa285_led *led = container_of(cdev, |
| 42 | struct ebsa285_led, cdev); | 44 | struct ebsa285_led, cdev); |
| 43 | 45 | ||
| 44 | if (b != LED_OFF) | 46 | if (b == LED_OFF) |
| 45 | *XBUS_LEDS |= led->mask; | 47 | hw_led_state |= led->mask; |
| 46 | else | 48 | else |
| 47 | *XBUS_LEDS &= ~led->mask; | 49 | hw_led_state &= ~led->mask; |
| 50 | *XBUS_LEDS = hw_led_state; | ||
| 48 | } | 51 | } |
| 49 | 52 | ||
| 50 | static enum led_brightness ebsa285_led_get(struct led_classdev *cdev) | 53 | static enum led_brightness ebsa285_led_get(struct led_classdev *cdev) |
| @@ -52,18 +55,19 @@ static enum led_brightness ebsa285_led_get(struct led_classdev *cdev) | |||
| 52 | struct ebsa285_led *led = container_of(cdev, | 55 | struct ebsa285_led *led = container_of(cdev, |
| 53 | struct ebsa285_led, cdev); | 56 | struct ebsa285_led, cdev); |
| 54 | 57 | ||
| 55 | return (*XBUS_LEDS & led->mask) ? LED_FULL : LED_OFF; | 58 | return hw_led_state & led->mask ? LED_OFF : LED_FULL; |
| 56 | } | 59 | } |
| 57 | 60 | ||
| 58 | static int __init ebsa285_leds_init(void) | 61 | static int __init ebsa285_leds_init(void) |
| 59 | { | 62 | { |
| 60 | int i; | 63 | int i; |
| 61 | 64 | ||
| 62 | if (machine_is_ebsa285()) | 65 | if (!machine_is_ebsa285()) |
| 63 | return -ENODEV; | 66 | return -ENODEV; |
| 64 | 67 | ||
| 65 | /* 3 LEDS All ON */ | 68 | /* 3 LEDS all off */ |
| 66 | *XBUS_LEDS |= XBUS_LED_AMBER | XBUS_LED_GREEN | XBUS_LED_RED; | 69 | hw_led_state = XBUS_LED_AMBER | XBUS_LED_GREEN | XBUS_LED_RED; |
| 70 | *XBUS_LEDS = hw_led_state; | ||
| 67 | 71 | ||
| 68 | for (i = 0; i < ARRAY_SIZE(ebsa285_leds); i++) { | 72 | for (i = 0; i < ARRAY_SIZE(ebsa285_leds); i++) { |
| 69 | struct ebsa285_led *led; | 73 | struct ebsa285_led *led; |
