iwlagn: update bt status upon scan complete
authorWey-Yi Guy <wey-yi.w.guy@intel.com>
Mon, 23 Aug 2010 14:57:15 +0000 (07:57 -0700)
committerJohn W. Linville <linville@tuxdriver.com>
Wed, 25 Aug 2010 18:34:53 +0000 (14:34 -0400)
Update bt status upon receive scan complete notification

Signed-off-by: Wey-Yi Guy <wey-yi.w.guy@intel.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/iwlwifi/iwl-commands.h
drivers/net/wireless/iwlwifi/iwl-scan.c

index 8ed2412862d7cf5ae36ed7ceef7f7821b70afb9c..9b535832f117be65619c7856de04cb712cd53e80 100644 (file)
@@ -3013,7 +3013,7 @@ struct iwl_scanresults_notification {
 struct iwl_scancomplete_notification {
        u8 scanned_channels;
        u8 status;
-       u8 reserved;
+       u8 bt_status;   /* BT On/Off status */
        u8 last_channel;
        __le32 tsf_low;
        __le32 tsf_high;
index 8d7fa59364feaa455ace2c23348e6cecb87be75f..33aa7a5eea8afce8b8d7e37f2821ab485f735986 100644 (file)
@@ -236,6 +236,26 @@ static void iwl_rx_scan_complete_notif(struct iwl_priv *priv,
 
        clear_bit(STATUS_SCANNING, &priv->status);
 
+       if (priv->iw_mode != NL80211_IFTYPE_ADHOC &&
+           priv->cfg->advanced_bt_coexist && priv->bt_status !=
+           scan_notif->bt_status) {
+               if (scan_notif->bt_status) {
+                       /* BT on */
+                       if (!priv->bt_ch_announce)
+                               priv->bt_traffic_load =
+                                       IWL_BT_COEX_TRAFFIC_LOAD_HIGH;
+                       /*
+                        * otherwise, no traffic load information provided
+                        * no changes made
+                        */
+               } else {
+                       /* BT off */
+                       priv->bt_traffic_load =
+                               IWL_BT_COEX_TRAFFIC_LOAD_NONE;
+               }
+               priv->bt_status = scan_notif->bt_status;
+               queue_work(priv->workqueue, &priv->bt_traffic_change_work);
+       }
        queue_work(priv->workqueue, &priv->scan_completed);
 }