b43: only hardcode LED behavior if SPROM doesn't encode any
authorLucas Stach <dev@lynxeye.de>
Fri, 3 Jun 2016 21:04:03 +0000 (23:04 +0200)
committerKalle Valo <kvalo@codeaurora.org>
Thu, 16 Jun 2016 15:14:46 +0000 (18:14 +0300)
Only hardcode the LED behavior if the SROM doesn't provide any for all
LEDs of the card. This avoids instantiating LED triggers for unconnected
LEDs, while (hopefully) keeping things working for old cards with a
blank SROM.

Signed-off-by: Lucas Stach <dev@lynxeye.de>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
drivers/net/wireless/broadcom/b43/leds.c

index d79ab2a227e183c9acf3d29288c7c0618aa3ad4b..cb987c2ecc6bf5295684c11da9604c03ef4d2e32 100644 (file)
@@ -222,7 +222,7 @@ static void b43_led_get_sprominfo(struct b43_wldev *dev,
        sprom[2] = dev->dev->bus_sprom->gpio2;
        sprom[3] = dev->dev->bus_sprom->gpio3;
 
-       if (sprom[led_index] == 0xFF) {
+       if ((sprom[0] & sprom[1] & sprom[2] & sprom[3]) == 0xff) {
                /* There is no LED information in the SPROM
                 * for this LED. Hardcode it here. */
                *activelow = false;
@@ -250,7 +250,11 @@ static void b43_led_get_sprominfo(struct b43_wldev *dev,
                        return;
                }
        } else {
-               *behaviour = sprom[led_index] & B43_LED_BEHAVIOUR;
+               /* keep LED disabled if no mapping is defined */
+               if (sprom[led_index] == 0xff)
+                       *behaviour = B43_LED_OFF;
+               else
+                       *behaviour = sprom[led_index] & B43_LED_BEHAVIOUR;
                *activelow = !!(sprom[led_index] & B43_LED_ACTIVELOW);
        }
 }