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: Johannes Berg <johannes.berg@intel.com> Signed-off-by: Wey-Yi Guy <wey-yi.w.guy@intel.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
Родитель
59079949fa
Коммит
511b082d29
|
@ -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 = {
|
||||
|
|
|
@ -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);
|
||||
|
|
Загрузка…
Ссылка в новой задаче