summaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/b43/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/wireless/b43/main.c')
-rw-r--r--drivers/net/wireless/b43/main.c53
1 files changed, 12 insertions, 41 deletions
diff --git a/drivers/net/wireless/b43/main.c b/drivers/net/wireless/b43/main.c
index a9f7148493f..a603a154d49 100644
--- a/drivers/net/wireless/b43/main.c
+++ b/drivers/net/wireless/b43/main.c
@@ -2143,21 +2143,6 @@ static void b43_mgmtframe_txantenna(struct b43_wldev *dev, int antenna)
b43_shm_write16(dev, B43_SHM_SHARED, B43_SHM_SH_PRPHYCTL, tmp);
}
-/* Returns TRUE, if the radio is enabled in hardware. */
-static bool b43_is_hw_radio_enabled(struct b43_wldev *dev)
-{
- if (dev->phy.rev >= 3) {
- if (!(b43_read32(dev, B43_MMIO_RADIO_HWENABLED_HI)
- & B43_MMIO_RADIO_HWENABLED_HI_MASK))
- return 1;
- } else {
- if (b43_read16(dev, B43_MMIO_RADIO_HWENABLED_LO)
- & B43_MMIO_RADIO_HWENABLED_LO_MASK)
- return 1;
- }
- return 0;
-}
-
/* This is the opposite of b43_chip_init() */
static void b43_chip_exit(struct b43_wldev *dev)
{
@@ -2350,32 +2335,18 @@ static void b43_periodic_every15sec(struct b43_wldev *dev)
//TODO for APHY (temperature?)
}
-static void b43_periodic_every1sec(struct b43_wldev *dev)
-{
- bool radio_hw_enable;
-
- /* check if radio hardware enabled status changed */
- radio_hw_enable = b43_is_hw_radio_enabled(dev);
- if (unlikely(dev->radio_hw_enable != radio_hw_enable)) {
- dev->radio_hw_enable = radio_hw_enable;
- b43_rfkill_toggled(dev, radio_hw_enable);
- }
-}
-
static void do_periodic_work(struct b43_wldev *dev)
{
unsigned int state;
state = dev->periodic_state;
- if (state % 120 == 0)
+ if (state % 8 == 0)
b43_periodic_every120sec(dev);
- if (state % 60 == 0)
+ if (state % 4 == 0)
b43_periodic_every60sec(dev);
- if (state % 30 == 0)
+ if (state % 2 == 0)
b43_periodic_every30sec(dev);
- if (state % 15 == 0)
- b43_periodic_every15sec(dev);
- b43_periodic_every1sec(dev);
+ b43_periodic_every15sec(dev);
}
/* Estimate a "Badness" value based on the periodic work
@@ -2386,13 +2357,11 @@ static int estimate_periodic_work_badness(unsigned int state)
{
int badness = 0;
- if (state % 120 == 0) /* every 120 sec */
+ if (state % 8 == 0) /* every 120 sec */
badness += 10;
- if (state % 60 == 0) /* every 60 sec */
+ if (state % 4 == 0) /* every 60 sec */
badness += 5;
- if (state % 30 == 0) /* every 30 sec */
- badness += 1;
- if (state % 15 == 0) /* every 15 sec */
+ if (state % 2 == 0) /* every 30 sec */
badness += 1;
#define BADNESS_LIMIT 4
@@ -2443,13 +2412,13 @@ static void b43_periodic_work_handler(struct work_struct *work)
spin_unlock_irqrestore(&dev->wl->irq_lock, flags);
}
dev->periodic_state++;
- out_requeue:
+out_requeue:
if (b43_debug(dev, B43_DBG_PWORK_FAST))
delay = msecs_to_jiffies(50);
else
- delay = round_jiffies(HZ);
+ delay = round_jiffies(HZ * 15);
queue_delayed_work(dev->wl->hw->workqueue, &dev->periodic_work, delay);
- out:
+out:
mutex_unlock(&dev->wl->mutex);
}
@@ -3720,6 +3689,7 @@ static int b43_setup_modes(struct b43_wldev *dev,
static void b43_wireless_core_detach(struct b43_wldev *dev)
{
+ b43_rfkill_free(dev);
/* We release firmware that late to not be required to re-request
* is all the time when we reinit the core. */
b43_release_firmware(dev);
@@ -3805,6 +3775,7 @@ static int b43_wireless_core_attach(struct b43_wldev *dev)
if (!wl->current_dev)
wl->current_dev = dev;
INIT_WORK(&dev->restart_work, b43_chip_reset);
+ b43_rfkill_alloc(dev);
b43_radio_turn_off(dev, 1);
b43_switch_analog(dev, 0);