diff --git a/drivers/net/wireless/b43legacy/leds.c b/drivers/net/wireless/b43legacy/leds.c
index 498912ddeddb75222eccca01f6fd48cd625cb9d4..a584ea810502f8289fd961798e849e484581a26d 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 3e935d0d4b8066e37584f15182b3858c5b3ec36f..a793f183a2c01c566f0f958ec62482e70a2f0590 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 673935e67e64ae86c1be599cca750e80275debe2..68435c50d8e07fd05f1e3993501f19520ee6fc67 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 54067f082825760a12ee5c515d032b9801e30c78..a361dee664af59ebe7922955f23c6c0b379da3f4 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);
 }