diff options
| -rw-r--r-- | drivers/net/wireless/b43legacy/leds.c | 12 | ||||
| -rw-r--r-- | drivers/net/wireless/b43legacy/main.c | 25 | ||||
| -rw-r--r-- | drivers/net/wireless/b43legacy/main.h | 20 | ||||
| -rw-r--r-- | drivers/net/wireless/b43legacy/radio.c | 2 | 
4 files changed, 25 insertions, 34 deletions
diff --git a/drivers/net/wireless/b43legacy/leds.c b/drivers/net/wireless/b43legacy/leds.c index 498912ddedd..a584ea81050 100644 --- a/drivers/net/wireless/b43legacy/leds.c +++ b/drivers/net/wireless/b43legacy/leds.c @@ -182,6 +182,7 @@ void b43legacy_leds_update(struct b43legacy_wldev *dev, int activity)  	unsigned long interval = 0;  	u16 ledctl;  	unsigned long flags; +	bool radio_enabled = (phy->radio_on && dev->radio_hw_enable);  	spin_lock_irqsave(&dev->wl->leds_lock, flags);  	ledctl = b43legacy_read16(dev, B43legacy_MMIO_GPIO_CONTROL); @@ -201,20 +202,15 @@ void b43legacy_leds_update(struct b43legacy_wldev *dev, int activity)  			turn_on = activity;  			break;  		case B43legacy_LED_RADIO_ALL: -			turn_on = phy->radio_on && -				  b43legacy_is_hw_radio_enabled(dev); +			turn_on = radio_enabled;  			break;  		case B43legacy_LED_RADIO_A:  			break;  		case B43legacy_LED_RADIO_B: -			turn_on = (phy->radio_on && -				   b43legacy_is_hw_radio_enabled(dev) && -				   (phy->type == B43legacy_PHYTYPE_B || -				    phy->type == B43legacy_PHYTYPE_G)); +			turn_on = radio_enabled;  			break;  		case B43legacy_LED_MODE_BG: -			if (phy->type == B43legacy_PHYTYPE_G && -			    b43legacy_is_hw_radio_enabled(dev)) +			if (phy->type == B43legacy_PHYTYPE_G && radio_enabled)  				turn_on = 1;  			break;  		case B43legacy_LED_TRANSFER: diff --git a/drivers/net/wireless/b43legacy/main.c b/drivers/net/wireless/b43legacy/main.c index 3e935d0d4b8..a793f183a2c 100644 --- a/drivers/net/wireless/b43legacy/main.c +++ b/drivers/net/wireless/b43legacy/main.c @@ -2007,6 +2007,21 @@ static void b43legacy_mgmtframe_txantenna(struct b43legacy_wldev *dev,  			      B43legacy_SHM_SH_PRPHYCTL, tmp);  } +/* Returns TRUE, if the radio is enabled in hardware. */ +static bool b43legacy_is_hw_radio_enabled(struct b43legacy_wldev *dev) +{ +	if (dev->phy.rev >= 3) { +		if (!(b43legacy_read32(dev, B43legacy_MMIO_RADIO_HWENABLED_HI) +		      & B43legacy_MMIO_RADIO_HWENABLED_HI_MASK)) +			return 1; +	} else { +		if (b43legacy_read16(dev, B43legacy_MMIO_RADIO_HWENABLED_LO) +		    & B43legacy_MMIO_RADIO_HWENABLED_LO_MASK) +			return 1; +	} +	return 0; +} +  /* This is the opposite of b43legacy_chip_init() */  static void b43legacy_chip_exit(struct b43legacy_wldev *dev)  { @@ -2046,9 +2061,6 @@ static int b43legacy_chip_init(struct b43legacy_wldev *dev)  	if (err)  		goto err_gpio_cleanup;  	b43legacy_radio_turn_on(dev); -	dev->radio_hw_enable = b43legacy_is_hw_radio_enabled(dev); -	b43legacyinfo(dev->wl, "Radio %s by hardware\n", -	       (dev->radio_hw_enable == 0) ? "disabled" : "enabled");  	b43legacy_write16(dev, 0x03E6, 0x0000);  	err = b43legacy_phy_init(dev); @@ -2170,14 +2182,14 @@ static void b43legacy_periodic_every15sec(struct b43legacy_wldev *dev)  static void b43legacy_periodic_every1sec(struct b43legacy_wldev *dev)  { -	int radio_hw_enable; +	bool radio_hw_enable;  	/* check if radio hardware enabled status changed */  	radio_hw_enable = b43legacy_is_hw_radio_enabled(dev);  	if (unlikely(dev->radio_hw_enable != radio_hw_enable)) {  		dev->radio_hw_enable = radio_hw_enable;  		b43legacyinfo(dev->wl, "Radio hardware status changed to %s\n", -		       (radio_hw_enable == 0) ? "disabled" : "enabled"); +		       (radio_hw_enable) ? "enabled" : "disabled");  		b43legacy_leds_update(dev, 0);  	}  } @@ -2933,6 +2945,9 @@ static void setup_struct_phy_for_init(struct b43legacy_wldev *dev,  	/* Flags */  	phy->locked = 0; +	/* Assume the radio is enabled. If it's not enabled, the state will +	 * immediately get fixed on the first periodic work run. */ +	dev->radio_hw_enable = 1;  	phy->savedpctlreg = 0xFFFF;  	phy->aci_enable = 0; diff --git a/drivers/net/wireless/b43legacy/main.h b/drivers/net/wireless/b43legacy/main.h index 673935e67e6..68435c50d8e 100644 --- a/drivers/net/wireless/b43legacy/main.h +++ b/drivers/net/wireless/b43legacy/main.h @@ -97,26 +97,6 @@ int b43legacy_is_ofdm_rate(int rate)  	return !b43legacy_is_cck_rate(rate);  } -static inline -int b43legacy_is_hw_radio_enabled(struct b43legacy_wldev *dev) -{ -	/* function to return state of hardware enable of radio -	 * returns 0 if radio disabled, 1 if radio enabled -	 */ -	struct b43legacy_phy *phy = &dev->phy; - -	if (phy->rev >= 3) -		return ((b43legacy_read32(dev, -				B43legacy_MMIO_RADIO_HWENABLED_HI) -				& B43legacy_MMIO_RADIO_HWENABLED_HI_MASK) -				== 0) ? 1 : 0; -	else -		return ((b43legacy_read16(dev, -				B43legacy_MMIO_RADIO_HWENABLED_LO) -				& B43legacy_MMIO_RADIO_HWENABLED_LO_MASK) -				== 0) ? 0 : 1; -} -  void b43legacy_tsf_read(struct b43legacy_wldev *dev, u64 *tsf);  void b43legacy_tsf_write(struct b43legacy_wldev *dev, u64 tsf); diff --git a/drivers/net/wireless/b43legacy/radio.c b/drivers/net/wireless/b43legacy/radio.c index 54067f08282..a361dee664a 100644 --- a/drivers/net/wireless/b43legacy/radio.c +++ b/drivers/net/wireless/b43legacy/radio.c @@ -2134,7 +2134,7 @@ void b43legacy_radio_turn_off(struct b43legacy_wldev *dev)  	} else  		b43legacy_phy_write(dev, 0x0015, 0xAA00);  	phy->radio_on = 0; -	b43legacydbg(dev->wl, "Radio turned off\n"); +	b43legacydbg(dev->wl, "Radio initialized\n");  	b43legacy_leds_update(dev, 0);  }  |