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

Commit 8d2ef7bd authored by Juuso Oikarinen's avatar Juuso Oikarinen Committed by John W. Linville
Browse files

wl1271: Disable dynamic PS based on BT co-ext sense events



This patch requests mac80211 to disable dynamic PSM based on sense events
coming from the firmware. Effectively, whenever there is bluetooth traffic,
the mac80211 is forced into full PSM mode.

Signed-off-by: default avatarJuuso Oikarinen <juuso.oikarinen@nokia.com>
Reviewed-by: default avatarLuciano Coelho <luciano.coelho@nokia.com>
Signed-off-by: default avatarLuciano Coelho <luciano.coelho@nokia.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent ca52a5eb
Loading
Loading
Loading
Loading
+2 −1
Original line number Original line Diff line number Diff line
@@ -415,7 +415,8 @@ static int wl1271_boot_run_firmware(struct wl1271 *wl)
		JOIN_EVENT_COMPLETE_ID |
		JOIN_EVENT_COMPLETE_ID |
		DISCONNECT_EVENT_COMPLETE_ID |
		DISCONNECT_EVENT_COMPLETE_ID |
		RSSI_SNR_TRIGGER_0_EVENT_ID |
		RSSI_SNR_TRIGGER_0_EVENT_ID |
		PSPOLL_DELIVERY_FAILURE_EVENT_ID;
		PSPOLL_DELIVERY_FAILURE_EVENT_ID |
		SOFT_GEMINI_SENSE_EVENT_ID;


	ret = wl1271_event_unmask(wl);
	ret = wl1271_event_unmask(wl);
	if (ret < 0) {
	if (ret < 0) {
+9 −0
Original line number Original line Diff line number Diff line
@@ -225,6 +225,15 @@ static int wl1271_event_process(struct wl1271 *wl, struct event_mailbox *mbox)
			return ret;
			return ret;
	}
	}


	/* disable dynamic PS when requested by the firmware */
	if (vector & SOFT_GEMINI_SENSE_EVENT_ID &&
	    wl->bss_type == BSS_TYPE_STA_BSS) {
		if (mbox->soft_gemini_sense_info)
			ieee80211_disable_dyn_ps(wl->vif, true);
		else
			ieee80211_disable_dyn_ps(wl->vif, false);
	}

	/*
	/*
	 * The BSS_LOSE_EVENT_ID is only needed while psm (and hence beacon
	 * The BSS_LOSE_EVENT_ID is only needed while psm (and hence beacon
	 * filtering) is enabled. Without PSM, the stack will receive all
	 * filtering) is enabled. Without PSM, the stack will receive all
+7 −1
Original line number Original line Diff line number Diff line
@@ -54,7 +54,7 @@ static struct conf_drv_settings default_conf = {
			[CONF_SG_HV3_MAX_OVERRIDE]                  = 0,
			[CONF_SG_HV3_MAX_OVERRIDE]                  = 0,
			[CONF_SG_BT_NFS_SAMPLE_INTERVAL]            = 400,
			[CONF_SG_BT_NFS_SAMPLE_INTERVAL]            = 400,
			[CONF_SG_BT_LOAD_RATIO]                     = 50,
			[CONF_SG_BT_LOAD_RATIO]                     = 50,
			[CONF_SG_AUTO_PS_MODE]                      = 0,
			[CONF_SG_AUTO_PS_MODE]                      = 1,
			[CONF_SG_AUTO_SCAN_PROBE_REQ]               = 170,
			[CONF_SG_AUTO_SCAN_PROBE_REQ]               = 170,
			[CONF_SG_ACTIVE_SCAN_DURATION_FACTOR_HV3]   = 50,
			[CONF_SG_ACTIVE_SCAN_DURATION_FACTOR_HV3]   = 50,
			[CONF_SG_ANTENNA_CONFIGURATION]             = 0,
			[CONF_SG_ANTENNA_CONFIGURATION]             = 0,
@@ -937,6 +937,9 @@ static void wl1271_op_remove_interface(struct ieee80211_hw *hw,


	WARN_ON(wl->state != WL1271_STATE_ON);
	WARN_ON(wl->state != WL1271_STATE_ON);


	/* enable dyn ps just in case (if left on due to fw crash etc) */
	ieee80211_disable_dyn_ps(wl->vif, false);

	if (test_and_clear_bit(WL1271_FLAG_SCANNING, &wl->flags)) {
	if (test_and_clear_bit(WL1271_FLAG_SCANNING, &wl->flags)) {
		mutex_unlock(&wl->mutex);
		mutex_unlock(&wl->mutex);
		ieee80211_scan_completed(wl->hw, true);
		ieee80211_scan_completed(wl->hw, true);
@@ -1774,6 +1777,9 @@ static void wl1271_op_bss_info_changed(struct ieee80211_hw *hw,
			clear_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags);
			clear_bit(WL1271_FLAG_STA_ASSOCIATED, &wl->flags);
			wl->aid = 0;
			wl->aid = 0;


			/* re-enable dynamic ps - just in case */
			ieee80211_disable_dyn_ps(wl->vif, false);

			/* revert back to minimum rates for the current band */
			/* revert back to minimum rates for the current band */
			wl1271_set_band_rate(wl);
			wl1271_set_band_rate(wl);
			wl->basic_rate = wl1271_min_rate_get(wl);
			wl->basic_rate = wl1271_min_rate_get(wl);