Commit 743cdf1b authored by Ben Cahill's avatar Ben Cahill Committed by John W. Linville
Browse files

iwl3945: streamline iwl3945_rfkill_poll()

iwl3945_rfkill_poll() has been silently calling wiphy_rfkill_set_hw_state()
every 2 seconds, regardless of whether hardware RF KILL switch changed state.

Call wiphy_rfkill_set_hw_state() only when RFKILL switch changes.
Add IWL_DEBUG_RF_KILL log message and documentation.
Signed-off-by: default avatarBen Cahill <>
Signed-off-by: default avatarReinette Chatre <>
Signed-off-by: default avatarJohn W. Linville <>
parent 1a34c043
......@@ -2717,19 +2717,34 @@ static void iwl3945_bg_alive_start(struct work_struct *data)
* 3945 cannot interrupt driver when hardware rf kill switch toggles;
* driver must poll CSR_GP_CNTRL_REG register for change. This register
* *is* readable even when device has been SW_RESET into low power mode
* (e.g. during RF KILL).
static void iwl3945_rfkill_poll(struct work_struct *data)
struct iwl_priv *priv =
container_of(data, struct iwl_priv,;
bool old_rfkill = test_bit(STATUS_RF_KILL_HW, &priv->status);
bool new_rfkill = !(iwl_read32(priv, CSR_GP_CNTRL)
clear_bit(STATUS_RF_KILL_HW, &priv->status);
set_bit(STATUS_RF_KILL_HW, &priv->status);
if (new_rfkill != old_rfkill) {
if (new_rfkill)
set_bit(STATUS_RF_KILL_HW, &priv->status);
clear_bit(STATUS_RF_KILL_HW, &priv->status);
test_bit(STATUS_RF_KILL_HW, &priv->status));
wiphy_rfkill_set_hw_state(priv->hw->wiphy, new_rfkill);
IWL_DEBUG_RF_KILL(priv, "RF_KILL bit toggled to %s.\n",
new_rfkill ? "disable radio" : "enable radio");
/* Keep this running, even if radio now enabled. This will be
* cancelled in mac_start() if system decides to start again */
queue_delayed_work(priv->workqueue, &priv->rfkill_poll,
round_jiffies_relative(2 * HZ));
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment