diff options
-rw-r--r-- | drivers/net/wireless/ath/ar9170/led.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/drivers/net/wireless/ath/ar9170/led.c b/drivers/net/wireless/ath/ar9170/led.c index 3c8a5728920d..63fda6cd2101 100644 --- a/drivers/net/wireless/ath/ar9170/led.c +++ b/drivers/net/wireless/ath/ar9170/led.c | |||
@@ -74,7 +74,7 @@ static void ar9170_update_leds(struct work_struct *work) | |||
74 | 74 | ||
75 | mutex_lock(&ar->mutex); | 75 | mutex_lock(&ar->mutex); |
76 | for (i = 0; i < AR9170_NUM_LEDS; i++) | 76 | for (i = 0; i < AR9170_NUM_LEDS; i++) |
77 | if (ar->leds[i].toggled) { | 77 | if (ar->leds[i].registered && ar->leds[i].toggled) { |
78 | led_val |= 1 << i; | 78 | led_val |= 1 << i; |
79 | 79 | ||
80 | tmp = 70 + 200 / (ar->leds[i].toggled); | 80 | tmp = 70 + 200 / (ar->leds[i].toggled); |
@@ -101,6 +101,9 @@ static void ar9170_led_brightness_set(struct led_classdev *led, | |||
101 | struct ar9170_led *arl = container_of(led, struct ar9170_led, l); | 101 | struct ar9170_led *arl = container_of(led, struct ar9170_led, l); |
102 | struct ar9170 *ar = arl->ar; | 102 | struct ar9170 *ar = arl->ar; |
103 | 103 | ||
104 | if (unlikely(!arl->registered)) | ||
105 | return ; | ||
106 | |||
104 | if (arl->last_state != !!brightness) { | 107 | if (arl->last_state != !!brightness) { |
105 | arl->toggled++; | 108 | arl->toggled++; |
106 | arl->last_state = !!brightness; | 109 | arl->last_state = !!brightness; |
@@ -139,13 +142,14 @@ void ar9170_unregister_leds(struct ar9170 *ar) | |||
139 | { | 142 | { |
140 | int i; | 143 | int i; |
141 | 144 | ||
142 | cancel_delayed_work_sync(&ar->led_work); | ||
143 | |||
144 | for (i = 0; i < AR9170_NUM_LEDS; i++) | 145 | for (i = 0; i < AR9170_NUM_LEDS; i++) |
145 | if (ar->leds[i].registered) { | 146 | if (ar->leds[i].registered) { |
146 | led_classdev_unregister(&ar->leds[i].l); | 147 | led_classdev_unregister(&ar->leds[i].l); |
147 | ar->leds[i].registered = false; | 148 | ar->leds[i].registered = false; |
149 | ar->leds[i].toggled = 0; | ||
148 | } | 150 | } |
151 | |||
152 | cancel_delayed_work_sync(&ar->led_work); | ||
149 | } | 153 | } |
150 | 154 | ||
151 | int ar9170_register_leds(struct ar9170 *ar) | 155 | int ar9170_register_leds(struct ar9170 *ar) |