Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 511b082d authored by Johannes Berg's avatar Johannes Berg Committed by John W. Linville
Browse files

iwlagn: keep BT settings across restart



The BT SCO needs to be re-applied to the device,
while the traffic load just needs to be correct
in software.

Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
Signed-off-by: default avatarWey-Yi Guy <wey-yi.w.guy@intel.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 59079949
Loading
Loading
Loading
Loading
+16 −0
Original line number Diff line number Diff line
@@ -241,6 +241,22 @@ static void iwl6000g2b_send_bt_config(struct iwl_priv *priv)

	if (iwl_send_cmd_pdu(priv, REPLY_BT_CONFIG, sizeof(bt_cmd), &bt_cmd))
		IWL_ERR(priv, "failed to send BT Coex Config\n");

	/*
	 * When we are doing a restart, need to also reconfigure BT
	 * SCO to the device. If not doing a restart, bt_sco_active
	 * will always be false, so there's no need to have an extra
	 * variable to check for it.
	 */
	if (priv->bt_sco_active) {
		struct iwl6000g2b_bt_sco_cmd sco_cmd = { .flags = 0 };

		if (priv->bt_sco_active)
			sco_cmd.flags |= IWL6000G2B_BT_SCO_ACTIVE;
		if (iwl_send_cmd_pdu(priv, REPLY_BT_COEX_SCO,
				     sizeof(sco_cmd), &sco_cmd))
			IWL_ERR(priv, "failed to send BT SCO command\n");
	}
}

static struct iwl_sensitivity_ranges iwl6000_sensitivity = {
+20 −0
Original line number Diff line number Diff line
@@ -3079,10 +3079,30 @@ static void iwl_bg_restart(struct work_struct *data)
		return;

	if (test_and_clear_bit(STATUS_FW_ERROR, &priv->status)) {
		bool bt_sco;
		u8 bt_load;

		mutex_lock(&priv->mutex);
		priv->vif = NULL;
		priv->is_open = 0;

		/*
		 * __iwl_down() will clear the BT status variables,
		 * which is correct, but when we restart we really
		 * want to keep them so restore them afterwards.
		 *
		 * The restart process will later pick them up and
		 * re-configure the hw when we reconfigure the BT
		 * command.
		 */
		bt_sco = priv->bt_sco_active;
		bt_load = priv->bt_traffic_load;

		__iwl_down(priv);

		priv->bt_sco_active = bt_sco;
		priv->bt_traffic_load = bt_load;

		mutex_unlock(&priv->mutex);
		iwl_cancel_deferred_work(priv);
		ieee80211_restart_hw(priv->hw);