Michael,

The patch below will make the LEDs behave correctly for the sprom values seen 
in Jon Hood's BCM4303.
In case there are other interfaces with strange values, it also limits the 
error messages to 20. It
is the same patch as was recently pushed to wireless-2.6.

Larry


Index: wireless-2.6/drivers/net/wireless/d80211/bcm43xx/bcm43xx_leds.c
===================================================================
--- wireless-2.6.orig/drivers/net/wireless/d80211/bcm43xx/bcm43xx_leds.c
+++ wireless-2.6/drivers/net/wireless/d80211/bcm43xx/bcm43xx_leds.c
@@ -168,6 +168,8 @@ void bcm43xx_leds_exit(struct bcm43xx_pr
        bcm43xx_leds_switch_all(bcm, 0);
  }

+static int bcm43xx_max_led_err = 20;
+
  void bcm43xx_leds_update(struct bcm43xx_private *bcm, int activity)
  {
        struct bcm43xx_led *led;
@@ -189,20 +191,24 @@ void bcm43xx_leds_update(struct bcm43xx_
                case BCM43xx_LED_INACTIVE:
                        continue;
                case BCM43xx_LED_OFF:
+               case BCM43xx_LED_BCM4303_3:
                        break;
                case BCM43xx_LED_ON:
                        turn_on = 1;
                        break;
                case BCM43xx_LED_ACTIVITY:
+               case BCM43xx_LED_BCM4303_0:
                        turn_on = activity;
                        break;
                case BCM43xx_LED_RADIO_ALL:
                        turn_on = radio->enabled;
                        break;
                case BCM43xx_LED_RADIO_A:
+               case BCM43xx_LED_BCM4303_2:
                        turn_on = (radio->enabled && phy->type == 
BCM43xx_PHYTYPE_A);
                        break;
                case BCM43xx_LED_RADIO_B:
+               case BCM43xx_LED_BCM4303_1:
                        turn_on = (radio->enabled &&
                                   (phy->type == BCM43xx_PHYTYPE_B ||
                                    phy->type == BCM43xx_PHYTYPE_G));
@@ -257,7 +263,11 @@ void bcm43xx_leds_update(struct bcm43xx_
                        continue;
  #endif /* CONFIG_BCM43XX_DEBUG */
                default:
-                       assert(0);
+                       if (bcm43xx_max_led_err) {
+                               printkl(KERN_INFO PFX "Bad value in 
leds_update,"
+                                       " led->behaviour: 0x%x\n", 
led->behaviour);
+                               --bcm43xx_max_led_err;
+                       }
                };

                if (led->activelow)
Index: wireless-2.6/drivers/net/wireless/d80211/bcm43xx/bcm43xx_leds.h
===================================================================
--- wireless-2.6.orig/drivers/net/wireless/d80211/bcm43xx/bcm43xx_leds.h
+++ wireless-2.6/drivers/net/wireless/d80211/bcm43xx/bcm43xx_leds.h
@@ -24,6 +24,10 @@ struct bcm43xx_led {

  #define BCM43xx_LED_BEHAVIOUR         0x7F
  #define BCM43xx_LED_ACTIVELOW         0x80
+#define BCM43xx_LED_BCM4303_0          0x2B
+#define BCM43xx_LED_BCM4303_1          0x78
+#define BCM43xx_LED_BCM4303_2          0x2E
+#define BCM43xx_LED_BCM4303_3          0x19
  enum { /* LED behaviour values */
        BCM43xx_LED_OFF,
        BCM43xx_LED_ON,


============


_______________________________________________
Bcm43xx-dev mailing list
[email protected]
https://lists.berlios.de/mailman/listinfo/bcm43xx-dev

Reply via email to