stable.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: linux-kernel@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	stable@vger.kernel.org, Larry Finger <Larry.Finger@lwfinger.net>,
	"John W. Linville" <linville@tuxdriver.com>
Subject: [PATCH 3.13 038/140] rtlwifi: rtl8192c: Update dynamic gain calculations
Date: Tue,  4 Feb 2014 13:10:25 -0800	[thread overview]
Message-ID: <20140204211038.055031147@linuxfoundation.org> (raw)
In-Reply-To: <20140204211036.967663852@linuxfoundation.org>

3.13-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Larry Finger <Larry.Finger@lwfinger.net>

commit 796e453436b183057e2d7d9b2bcff88d0bf53ba7 upstream.

The vendor driver contained a number of improvements in the gain settings
for the rtl8192c{e,u} devices. This patch implements them in the kernel
driver.

Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 drivers/net/wireless/rtlwifi/rtl8192c/dm_common.c |  291 ++++++++++++++--------
 1 file changed, 193 insertions(+), 98 deletions(-)

--- a/drivers/net/wireless/rtlwifi/rtl8192c/dm_common.c
+++ b/drivers/net/wireless/rtlwifi/rtl8192c/dm_common.c
@@ -216,7 +216,12 @@ static void rtl92c_dm_diginit(struct iee
 	dm_digtable->back_range_max = DM_DIG_BACKOFF_MAX;
 	dm_digtable->back_range_min = DM_DIG_BACKOFF_MIN;
 	dm_digtable->pre_cck_pd_state = CCK_PD_STAGE_MAX;
-	dm_digtable->cur_cck_pd_state = CCK_PD_STAGE_MAX;
+	dm_digtable->cur_cck_pd_state = CCK_PD_STAGE_LowRssi;
+
+	dm_digtable->forbidden_igi = DM_DIG_MIN;
+	dm_digtable->large_fa_hit = 0;
+	dm_digtable->recover_cnt = 0;
+	dm_digtable->dig_dynamic_min  = 0x25;
 }
 
 static u8 rtl92c_dm_initial_gain_min_pwdb(struct ieee80211_hw *hw)
@@ -242,7 +247,9 @@ static u8 rtl92c_dm_initial_gain_min_pwd
 		rssi_val_min = rtlpriv->dm.entry_min_undec_sm_pwdb;
 	}
 
-	return (u8) rssi_val_min;
+	if (rssi_val_min > 100)
+		rssi_val_min = 100;
+	return (u8)rssi_val_min;
 }
 
 static void rtl92c_dm_false_alarm_counter_statistics(struct ieee80211_hw *hw)
@@ -260,9 +267,17 @@ static void rtl92c_dm_false_alarm_counte
 
 	ret_value = rtl_get_bbreg(hw, ROFDM_PHYCOUNTER3, MASKDWORD);
 	falsealm_cnt->cnt_mcs_fail = (ret_value & 0xffff);
+
+	 ret_value = rtl_get_bbreg(hw, ROFDM0_FRAMESYNC, MASKDWORD);
+	falsealm_cnt->cnt_fast_fsync_fail = (ret_value & 0xffff);
+	falsealm_cnt->cnt_sb_search_fail = ((ret_value & 0xffff0000) >> 16);
+
 	falsealm_cnt->cnt_ofdm_fail = falsealm_cnt->cnt_parity_fail +
-	    falsealm_cnt->cnt_rate_illegal +
-	    falsealm_cnt->cnt_crc8_fail + falsealm_cnt->cnt_mcs_fail;
+				      falsealm_cnt->cnt_rate_illegal +
+				      falsealm_cnt->cnt_crc8_fail +
+				      falsealm_cnt->cnt_mcs_fail +
+				      falsealm_cnt->cnt_fast_fsync_fail +
+				      falsealm_cnt->cnt_sb_search_fail;
 
 	rtl_set_bbreg(hw, RCCK0_FALSEALARMREPORT, BIT(14), 1);
 	ret_value = rtl_get_bbreg(hw, RCCK0_FACOUNTERLOWER, MASKBYTE0);
@@ -307,12 +322,14 @@ static void rtl92c_dm_ctrl_initgain_by_f
 		value_igi++;
 	else if (rtlpriv->falsealm_cnt.cnt_all >= DM_DIG_FA_TH2)
 		value_igi += 2;
+
 	if (value_igi > DM_DIG_FA_UPPER)
 		value_igi = DM_DIG_FA_UPPER;
 	else if (value_igi < DM_DIG_FA_LOWER)
 		value_igi = DM_DIG_FA_LOWER;
+
 	if (rtlpriv->falsealm_cnt.cnt_all > 10000)
-		value_igi = 0x32;
+		value_igi = DM_DIG_FA_UPPER;
 
 	dm_digtable->cur_igvalue = value_igi;
 	rtl92c_dm_write_dig(hw);
@@ -322,32 +339,80 @@ static void rtl92c_dm_ctrl_initgain_by_r
 {
 	struct rtl_priv *rtlpriv = rtl_priv(hw);
 	struct dig_t *digtable = &rtlpriv->dm_digtable;
+	u32 isbt;
 
-	if (rtlpriv->falsealm_cnt.cnt_all > digtable->fa_highthresh) {
-		if ((digtable->back_val - 2) < digtable->back_range_min)
-			digtable->back_val = digtable->back_range_min;
-		else
-			digtable->back_val -= 2;
-	} else if (rtlpriv->falsealm_cnt.cnt_all < digtable->fa_lowthresh) {
-		if ((digtable->back_val + 2) > digtable->back_range_max)
-			digtable->back_val = digtable->back_range_max;
-		else
-			digtable->back_val += 2;
+	/* modify DIG lower bound, deal with abnorally large false alarm */
+	if (rtlpriv->falsealm_cnt.cnt_all > 10000) {
+		digtable->large_fa_hit++;
+		if (digtable->forbidden_igi < digtable->cur_igvalue) {
+			digtable->forbidden_igi = digtable->cur_igvalue;
+			digtable->large_fa_hit = 1;
+		}
+
+		if (digtable->large_fa_hit >= 3) {
+			if ((digtable->forbidden_igi + 1) >
+			    digtable->rx_gain_max)
+				digtable->rx_gain_min = digtable->rx_gain_max;
+			else
+				digtable->rx_gain_min = (digtable->forbidden_igi + 1);
+			digtable->recover_cnt = 3600; /* 3600=2hr */
+		}
+	} else {
+		/* Recovery mechanism for IGI lower bound */
+		if (digtable->recover_cnt != 0) {
+			digtable->recover_cnt--;
+		} else {
+			if (digtable->large_fa_hit == 0) {
+				if ((digtable->forbidden_igi-1) < DM_DIG_MIN) {
+					digtable->forbidden_igi = DM_DIG_MIN;
+					digtable->rx_gain_min = DM_DIG_MIN;
+				} else {
+					digtable->forbidden_igi--;
+					digtable->rx_gain_min = digtable->forbidden_igi + 1;
+				}
+			} else if (digtable->large_fa_hit == 3) {
+				digtable->large_fa_hit = 0;
+			}
+		}
 	}
+	if (rtlpriv->falsealm_cnt.cnt_all < 250) {
+		isbt = rtl_read_byte(rtlpriv, 0x4fd) & 0x01;
 
-	if ((digtable->rssi_val_min + 10 - digtable->back_val) >
-	    digtable->rx_gain_max)
+		if (!isbt) {
+			if (rtlpriv->falsealm_cnt.cnt_all >
+			    digtable->fa_lowthresh) {
+				if ((digtable->back_val - 2) <
+				   digtable->back_range_min)
+					digtable->back_val = digtable->back_range_min;
+				else
+					digtable->back_val -= 2;
+			} else if (rtlpriv->falsealm_cnt.cnt_all <
+				   digtable->fa_lowthresh) {
+				if ((digtable->back_val + 2) >
+				    digtable->back_range_max)
+					digtable->back_val = digtable->back_range_max;
+				else
+					digtable->back_val += 2;
+			}
+		} else {
+			digtable->back_val = DM_DIG_BACKOFF_DEFAULT;
+		}
+	} else {
+		/* Adjust initial gain by false alarm */
+		if (rtlpriv->falsealm_cnt.cnt_all > 1000)
+			digtable->cur_igvalue = digtable->pre_igvalue + 2;
+		else if (rtlpriv->falsealm_cnt.cnt_all > 750)
+			digtable->cur_igvalue = digtable->pre_igvalue + 1;
+		else if (rtlpriv->falsealm_cnt.cnt_all < 500)
+			digtable->cur_igvalue = digtable->pre_igvalue - 1;
+	}
+
+	/* Check initial gain by upper/lower bound */
+	if (digtable->cur_igvalue > digtable->rx_gain_max)
 		digtable->cur_igvalue = digtable->rx_gain_max;
-	else if ((digtable->rssi_val_min + 10 -
-		  digtable->back_val) < digtable->rx_gain_min)
-		digtable->cur_igvalue = digtable->rx_gain_min;
-	else
-		digtable->cur_igvalue = digtable->rssi_val_min + 10 -
-		    digtable->back_val;
 
-	RT_TRACE(rtlpriv, COMP_DIG, DBG_TRACE,
-		 "rssi_val_min = %x back_val %x\n",
-		 digtable->rssi_val_min, digtable->back_val);
+	if (digtable->cur_igvalue < digtable->rx_gain_min)
+		digtable->cur_igvalue = digtable->rx_gain_min;
 
 	rtl92c_dm_write_dig(hw);
 }
@@ -365,7 +430,7 @@ static void rtl92c_dm_initial_gain_multi
 		multi_sta = true;
 
 	if (!multi_sta ||
-	    dm_digtable->cursta_cstate != DIG_STA_DISCONNECT) {
+	    dm_digtable->cursta_cstate == DIG_STA_DISCONNECT) {
 		initialized = false;
 		dm_digtable->dig_ext_port_stage = DIG_EXT_PORT_STAGE_MAX;
 		return;
@@ -411,7 +476,6 @@ static void rtl92c_dm_initial_gain_sta(s
 	RT_TRACE(rtlpriv, COMP_DIG, DBG_TRACE,
 		 "presta_cstate = %x, cursta_cstate = %x\n",
 		 dm_digtable->presta_cstate, dm_digtable->cursta_cstate);
-
 	if (dm_digtable->presta_cstate == dm_digtable->cursta_cstate ||
 	    dm_digtable->cursta_cstate == DIG_STA_BEFORE_CONNECT ||
 	    dm_digtable->cursta_cstate == DIG_STA_CONNECT) {
@@ -419,6 +483,8 @@ static void rtl92c_dm_initial_gain_sta(s
 		if (dm_digtable->cursta_cstate != DIG_STA_DISCONNECT) {
 			dm_digtable->rssi_val_min =
 			    rtl92c_dm_initial_gain_min_pwdb(hw);
+			if (dm_digtable->rssi_val_min > 100)
+				dm_digtable->rssi_val_min = 100;
 			rtl92c_dm_ctrl_initgain_by_rssi(hw);
 		}
 	} else {
@@ -434,11 +500,12 @@ static void rtl92c_dm_initial_gain_sta(s
 static void rtl92c_dm_cck_packet_detection_thresh(struct ieee80211_hw *hw)
 {
 	struct rtl_priv *rtlpriv = rtl_priv(hw);
-	struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
 	struct dig_t *dm_digtable = &rtlpriv->dm_digtable;
 
 	if (dm_digtable->cursta_cstate == DIG_STA_CONNECT) {
 		dm_digtable->rssi_val_min = rtl92c_dm_initial_gain_min_pwdb(hw);
+		if (dm_digtable->rssi_val_min > 100)
+			dm_digtable->rssi_val_min = 100;
 
 		if (dm_digtable->pre_cck_pd_state == CCK_PD_STAGE_LowRssi) {
 			if (dm_digtable->rssi_val_min <= 25)
@@ -460,48 +527,14 @@ static void rtl92c_dm_cck_packet_detecti
 	}
 
 	if (dm_digtable->pre_cck_pd_state != dm_digtable->cur_cck_pd_state) {
-		if (dm_digtable->cur_cck_pd_state == CCK_PD_STAGE_LowRssi) {
-			if (rtlpriv->falsealm_cnt.cnt_cck_fail > 800)
-				dm_digtable->cur_cck_fa_state =
-				    CCK_FA_STAGE_High;
-			else
-				dm_digtable->cur_cck_fa_state = CCK_FA_STAGE_Low;
-
-			if (dm_digtable->pre_cck_fa_state !=
-			    dm_digtable->cur_cck_fa_state) {
-				if (dm_digtable->cur_cck_fa_state ==
-				    CCK_FA_STAGE_Low)
-					rtl_set_bbreg(hw, RCCK0_CCA, MASKBYTE2,
-						      0x83);
-				else
-					rtl_set_bbreg(hw, RCCK0_CCA, MASKBYTE2,
-						      0xcd);
-
-				dm_digtable->pre_cck_fa_state =
-				    dm_digtable->cur_cck_fa_state;
-			}
-
-			rtl_set_bbreg(hw, RCCK0_SYSTEM, MASKBYTE1, 0x40);
-
-			if (IS_92C_SERIAL(rtlhal->version))
-				rtl_set_bbreg(hw, RCCK0_FALSEALARMREPORT,
-					      MASKBYTE2, 0xd7);
-		} else {
+		if ((dm_digtable->cur_cck_pd_state == CCK_PD_STAGE_LowRssi) ||
+		    (dm_digtable->cur_cck_pd_state == CCK_PD_STAGE_MAX))
+			rtl_set_bbreg(hw, RCCK0_CCA, MASKBYTE2, 0x83);
+		else
 			rtl_set_bbreg(hw, RCCK0_CCA, MASKBYTE2, 0xcd);
-			rtl_set_bbreg(hw, RCCK0_SYSTEM, MASKBYTE1, 0x47);
 
-			if (IS_92C_SERIAL(rtlhal->version))
-				rtl_set_bbreg(hw, RCCK0_FALSEALARMREPORT,
-					      MASKBYTE2, 0xd3);
-		}
 		dm_digtable->pre_cck_pd_state = dm_digtable->cur_cck_pd_state;
 	}
-
-	RT_TRACE(rtlpriv, COMP_DIG, DBG_TRACE, "CCKPDStage=%x\n",
-		 dm_digtable->cur_cck_pd_state);
-
-	RT_TRACE(rtlpriv, COMP_DIG, DBG_TRACE, "is92C=%x\n",
-		 IS_92C_SERIAL(rtlhal->version));
 }
 
 static void rtl92c_dm_ctrl_initgain_by_twoport(struct ieee80211_hw *hw)
@@ -518,6 +551,8 @@ static void rtl92c_dm_ctrl_initgain_by_t
 	else
 		dm_digtable->cursta_cstate = DIG_STA_DISCONNECT;
 
+	dm_digtable->curmultista_cstate = DIG_MULTISTA_DISCONNECT;
+
 	rtl92c_dm_initial_gain_sta(hw);
 	rtl92c_dm_initial_gain_multi_sta(hw);
 	rtl92c_dm_cck_packet_detection_thresh(hw);
@@ -529,23 +564,26 @@ static void rtl92c_dm_ctrl_initgain_by_t
 static void rtl92c_dm_dig(struct ieee80211_hw *hw)
 {
 	struct rtl_priv *rtlpriv = rtl_priv(hw);
-	struct dig_t *dm_digtable = &rtlpriv->dm_digtable;
 
 	if (rtlpriv->dm.dm_initialgain_enable == false)
 		return;
-	if (dm_digtable->dig_enable_flag == false)
+	if (!rtlpriv->dm.dm_flag & DYNAMIC_FUNC_DIG)
 		return;
 
 	rtl92c_dm_ctrl_initgain_by_twoport(hw);
-
 }
 
 static void rtl92c_dm_init_dynamic_txpower(struct ieee80211_hw *hw)
 {
 	struct rtl_priv *rtlpriv = rtl_priv(hw);
 
-	rtlpriv->dm.dynamic_txpower_enable = false;
-
+	if (rtlpriv->rtlhal.interface == INTF_USB &&
+	    rtlpriv->rtlhal.board_type & 0x1) {
+		dm_savepowerindex(hw);
+		rtlpriv->dm.dynamic_txpower_enable = true;
+	} else {
+		rtlpriv->dm.dynamic_txpower_enable = false;
+	}
 	rtlpriv->dm.last_dtp_lvl = TXHIGHPWRLEVEL_NORMAL;
 	rtlpriv->dm.dynamic_txhighpower_lvl = TXHIGHPWRLEVEL_NORMAL;
 }
@@ -560,9 +598,14 @@ void rtl92c_dm_write_dig(struct ieee8021
 		 dm_digtable->cur_igvalue, dm_digtable->pre_igvalue,
 		 dm_digtable->back_val);
 
-	dm_digtable->cur_igvalue += 2;
-	if (dm_digtable->cur_igvalue > 0x3f)
-		dm_digtable->cur_igvalue = 0x3f;
+	if (rtlpriv->rtlhal.interface == INTF_USB &&
+	    !dm_digtable->dig_enable_flag) {
+		dm_digtable->pre_igvalue = 0x17;
+		return;
+	}
+	dm_digtable->cur_igvalue -= 1;
+	if (dm_digtable->cur_igvalue < DM_DIG_MIN)
+		dm_digtable->cur_igvalue = DM_DIG_MIN;
 
 	if (dm_digtable->pre_igvalue != dm_digtable->cur_igvalue) {
 		rtl_set_bbreg(hw, ROFDM0_XAAGCCORE1, 0x7f,
@@ -572,11 +615,47 @@ void rtl92c_dm_write_dig(struct ieee8021
 
 		dm_digtable->pre_igvalue = dm_digtable->cur_igvalue;
 	}
+	RT_TRACE(rtlpriv, COMP_DIG, DBG_WARNING,
+		 "dig values 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x\n",
+		 dm_digtable->cur_igvalue, dm_digtable->pre_igvalue,
+		 dm_digtable->rssi_val_min, dm_digtable->back_val,
+		 dm_digtable->rx_gain_max, dm_digtable->rx_gain_min,
+		 dm_digtable->large_fa_hit, dm_digtable->forbidden_igi);
 }
 EXPORT_SYMBOL(rtl92c_dm_write_dig);
 
 static void rtl92c_dm_pwdb_monitor(struct ieee80211_hw *hw)
 {
+	struct rtl_priv *rtlpriv = rtl_priv(hw);
+	struct rtl_mac *mac = rtl_mac(rtl_priv(hw));
+	long tmpentry_max_pwdb = 0, tmpentry_min_pwdb = 0xff;
+
+	if (mac->link_state != MAC80211_LINKED)
+		return;
+
+	if (mac->opmode == NL80211_IFTYPE_ADHOC ||
+	    mac->opmode == NL80211_IFTYPE_AP) {
+		/* TODO: Handle ADHOC and AP Mode */
+	}
+
+	if (tmpentry_max_pwdb != 0)
+		rtlpriv->dm.entry_max_undec_sm_pwdb = tmpentry_max_pwdb;
+	else
+		rtlpriv->dm.entry_max_undec_sm_pwdb = 0;
+
+	if (tmpentry_min_pwdb != 0xff)
+		rtlpriv->dm.entry_min_undec_sm_pwdb = tmpentry_min_pwdb;
+	else
+		rtlpriv->dm.entry_min_undec_sm_pwdb = 0;
+
+/* TODO:
+ *	if (mac->opmode == NL80211_IFTYPE_STATION) {
+ *		if (rtlpriv->rtlhal.fw_ready) {
+ *			u32 param = (u32)(rtlpriv->dm.undec_sm_pwdb << 16);
+ *			rtl8192c_set_rssi_cmd(hw, param);
+ *		}
+ *	}
+ */
 }
 
 void rtl92c_dm_init_edca_turbo(struct ieee80211_hw *hw)
@@ -786,6 +865,7 @@ static void rtl92c_dm_txpower_tracking_c
 				rtlpriv->dm.ofdm_index[i] = ofdm_index_old[i];
 			rtlpriv->dm.cck_index = cck_index_old;
 		}
+		/* Handle USB High PA boards */
 
 		delta = (thermalvalue > rtlpriv->dm.thermalvalue) ?
 		    (thermalvalue - rtlpriv->dm.thermalvalue) :
@@ -1176,22 +1256,22 @@ void rtl92c_dm_rf_saving(struct ieee8021
 {
 	struct rtl_priv *rtlpriv = rtl_priv(hw);
 	struct ps_t *dm_pstable = &rtlpriv->dm_pstable;
-	static u8 initialize;
-	static u32 reg_874, reg_c70, reg_85c, reg_a74;
 
-	if (initialize == 0) {
-		reg_874 = (rtl_get_bbreg(hw, RFPGA0_XCD_RFINTERFACESW,
-					 MASKDWORD) & 0x1CC000) >> 14;
+	if (!rtlpriv->reg_init) {
+		rtlpriv->reg_874 = (rtl_get_bbreg(hw,
+						  RFPGA0_XCD_RFINTERFACESW,
+						  MASKDWORD) & 0x1CC000) >> 14;
 
-		reg_c70 = (rtl_get_bbreg(hw, ROFDM0_AGCPARAMETER1,
-					 MASKDWORD) & BIT(3)) >> 3;
+		rtlpriv->reg_c70 = (rtl_get_bbreg(hw, ROFDM0_AGCPARAMETER1,
+				    MASKDWORD) & BIT(3)) >> 3;
 
-		reg_85c = (rtl_get_bbreg(hw, RFPGA0_XCD_SWITCHCONTROL,
-					 MASKDWORD) & 0xFF000000) >> 24;
+		rtlpriv->reg_85c = (rtl_get_bbreg(hw, RFPGA0_XCD_SWITCHCONTROL,
+				    MASKDWORD) & 0xFF000000) >> 24;
 
-		reg_a74 = (rtl_get_bbreg(hw, 0xa74, MASKDWORD) & 0xF000) >> 12;
+		rtlpriv->reg_a74 = (rtl_get_bbreg(hw, 0xa74, MASKDWORD) &
+				    0xF000) >> 12;
 
-		initialize = 1;
+		rtlpriv->reg_init = true;
 	}
 
 	if (!bforce_in_normal) {
@@ -1228,12 +1308,12 @@ void rtl92c_dm_rf_saving(struct ieee8021
 			rtl_set_bbreg(hw, 0x818, BIT(28), 0x1);
 		} else {
 			rtl_set_bbreg(hw, RFPGA0_XCD_RFINTERFACESW,
-				      0x1CC000, reg_874);
+				      0x1CC000, rtlpriv->reg_874);
 			rtl_set_bbreg(hw, ROFDM0_AGCPARAMETER1, BIT(3),
-				      reg_c70);
+				      rtlpriv->reg_c70);
 			rtl_set_bbreg(hw, RFPGA0_XCD_SWITCHCONTROL, 0xFF000000,
-				      reg_85c);
-			rtl_set_bbreg(hw, 0xa74, 0xF000, reg_a74);
+				      rtlpriv->reg_85c);
+			rtl_set_bbreg(hw, 0xa74, 0xF000, rtlpriv->reg_a74);
 			rtl_set_bbreg(hw, 0x818, BIT(28), 0x0);
 		}
 
@@ -1249,6 +1329,7 @@ static void rtl92c_dm_dynamic_bb_powersa
 	struct rtl_mac *mac = rtl_mac(rtl_priv(hw));
 	struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
 
+	/* Determine the minimum RSSI */
 	if (((mac->link_state == MAC80211_NOLINK)) &&
 	    (rtlpriv->dm.entry_min_undec_sm_pwdb == 0)) {
 		dm_pstable->rssi_val_min = 0;
@@ -1277,6 +1358,7 @@ static void rtl92c_dm_dynamic_bb_powersa
 			 dm_pstable->rssi_val_min);
 	}
 
+	/* Power Saving for 92C */
 	if (IS_92C_SERIAL(rtlhal->version))
 		;/* rtl92c_dm_1r_cca(hw); */
 	else
@@ -1288,12 +1370,23 @@ void rtl92c_dm_init(struct ieee80211_hw
 	struct rtl_priv *rtlpriv = rtl_priv(hw);
 
 	rtlpriv->dm.dm_type = DM_TYPE_BYDRIVER;
+	rtlpriv->dm.dm_flag = DYNAMIC_FUNC_DISABLE | DYNAMIC_FUNC_DIG;
+	rtlpriv->dm.undec_sm_pwdb = -1;
+	rtlpriv->dm.undec_sm_cck = -1;
+	rtlpriv->dm.dm_initialgain_enable = true;
 	rtl92c_dm_diginit(hw);
+
+	rtlpriv->dm.dm_flag |= HAL_DM_HIPWR_DISABLE;
 	rtl92c_dm_init_dynamic_txpower(hw);
+
 	rtl92c_dm_init_edca_turbo(hw);
 	rtl92c_dm_init_rate_adaptive_mask(hw);
+	rtlpriv->dm.dm_flag |= DYNAMIC_FUNC_SS;
 	rtl92c_dm_initialize_txpower_tracking(hw);
 	rtl92c_dm_init_dynamic_bb_powersaving(hw);
+
+	rtlpriv->dm.ofdm_pkt_cnt = 0;
+	rtlpriv->dm.dm_rssi_sel = RSSI_DEFAULT;
 }
 EXPORT_SYMBOL(rtl92c_dm_init);
 
@@ -1344,7 +1437,7 @@ void rtl92c_dm_dynamic_txpower(struct ie
 	}
 
 	if (undec_sm_pwdb >= TX_POWER_NEAR_FIELD_THRESH_LVL2) {
-		rtlpriv->dm.dynamic_txhighpower_lvl = TXHIGHPWRLEVEL_LEVEL1;
+		rtlpriv->dm.dynamic_txhighpower_lvl = TXHIGHPWRLEVEL_LEVEL2;
 		RT_TRACE(rtlpriv, COMP_POWER, DBG_LOUD,
 			 "TXHIGHPWRLEVEL_LEVEL1 (TxPwr=0x0)\n");
 	} else if ((undec_sm_pwdb < (TX_POWER_NEAR_FIELD_THRESH_LVL2 - 3)) &&
@@ -1364,8 +1457,16 @@ void rtl92c_dm_dynamic_txpower(struct ie
 			 "PHY_SetTxPowerLevel8192S() Channel = %d\n",
 			 rtlphy->current_channel);
 		rtl92c_phy_set_txpower_level(hw, rtlphy->current_channel);
+		if (rtlpriv->dm.dynamic_txhighpower_lvl ==
+		    TXHIGHPWRLEVEL_NORMAL)
+			dm_restorepowerindex(hw);
+		else if (rtlpriv->dm.dynamic_txhighpower_lvl ==
+			 TXHIGHPWRLEVEL_LEVEL1)
+			dm_writepowerindex(hw, 0x14);
+		else if (rtlpriv->dm.dynamic_txhighpower_lvl ==
+			 TXHIGHPWRLEVEL_LEVEL2)
+			dm_writepowerindex(hw, 0x10);
 	}
-
 	rtlpriv->dm.last_dtp_lvl = rtlpriv->dm.dynamic_txhighpower_lvl;
 }
 
@@ -1436,12 +1537,6 @@ u8 rtl92c_bt_rssi_state_change(struct ie
 	else
 		curr_bt_rssi_state &= (~BT_RSSI_STATE_SPECIAL_LOW);
 
-	/* Set Tx Power according to BT status. */
-	if (undec_sm_pwdb >= 30)
-		curr_bt_rssi_state |=  BT_RSSI_STATE_TXPOWER_LOW;
-	else if (undec_sm_pwdb < 25)
-		curr_bt_rssi_state &= (~BT_RSSI_STATE_TXPOWER_LOW);
-
 	/* Check BT state related to BT_Idle in B/G mode. */
 	if (undec_sm_pwdb < 15)
 		curr_bt_rssi_state |=  BT_RSSI_STATE_BG_EDCA_LOW;



  parent reply	other threads:[~2014-02-04 21:10 UTC|newest]

Thread overview: 142+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-02-04 21:09 [PATCH 3.13 000/140] 3.13.2-stable review Greg Kroah-Hartman
2014-02-04 21:09 ` [PATCH 3.13 001/140] e752x_edac: Fix pci_dev usage count Greg Kroah-Hartman
2014-02-04 21:09 ` [PATCH 3.13 002/140] mm/mempolicy.c: fix mempolicy printing in numa_maps Greg Kroah-Hartman
2014-02-04 21:09 ` [PATCH 3.13 003/140] x86, x32: Correct invalid use of user timespec in the kernel Greg Kroah-Hartman
2014-02-04 21:09 ` [PATCH 3.13 004/140] xen/pci: Fix build on non-x86 Greg Kroah-Hartman
2014-02-04 21:09 ` [PATCH 3.13 005/140] x86/efi: Fix off-by-one bug in EFI Boot Services reservation Greg Kroah-Hartman
2014-02-04 21:09 ` [PATCH 3.13 006/140] x86: Add check for number of available vectors before CPU down Greg Kroah-Hartman
2014-02-04 21:09 ` [PATCH 3.13 007/140] KVM: x86: limit PIT timer frequency Greg Kroah-Hartman
2014-02-04 21:09 ` [PATCH 3.13 008/140] x86, kvm: cache the base of the KVM cpuid leaves Greg Kroah-Hartman
2014-02-04 21:09 ` [PATCH 3.13 009/140] x86, kvm: correctly access the KVM_CPUID_FEATURES leaf at 0x40000101 Greg Kroah-Hartman
2014-02-04 21:09 ` [PATCH 3.13 010/140] usb: chipidea: add freescale imx28 special write register method Greg Kroah-Hartman
2014-02-04 21:09 ` [PATCH 3.13 011/140] usb: chipidea: imx: set CI_HDRC_IMX28_WRITE_FIX for imx28 Greg Kroah-Hartman
2014-02-04 21:09 ` [PATCH 3.13 012/140] usb: chipidea: need to mask INT_STATUS when write otgsc Greg Kroah-Hartman
2014-02-04 21:10 ` [PATCH 3.13 013/140] usb: chipidea: udc: using MultO at TD as real mult value for ISO-TX Greg Kroah-Hartman
2014-02-04 21:10 ` [PATCH 3.13 016/140] usb: dwc3: fix the glue drivers using the nop phy Greg Kroah-Hartman
2014-02-04 21:10 ` [PATCH 3.13 018/140] usb: option: add new zte 3g modem pids to option driver Greg Kroah-Hartman
2014-02-04 21:10 ` [PATCH 3.13 020/140] USB: cypress_m8: fix ring-indicator detection and reporting Greg Kroah-Hartman
2014-02-04 21:10 ` [PATCH 3.13 021/140] USB: ftdi_sio: added CS5 quirk for broken smartcard readers Greg Kroah-Hartman
2014-02-04 21:10 ` [PATCH 3.13 022/140] USB: Nokia 502 is an unusual device Greg Kroah-Hartman
2014-02-04 21:10 ` [PATCH 3.13 023/140] usb: xhci: Check for XHCI_PLAT in xhci_cleanup_msix() Greg Kroah-Hartman
2014-02-04 21:10 ` [PATCH 3.13 024/140] USB: fix race between hub_disconnect and recursively_mark_NOTATTACHED Greg Kroah-Hartman
2014-02-04 21:10 ` [PATCH 3.13 025/140] usb: ehci: add freescale imx28 special write register method Greg Kroah-Hartman
2014-02-04 21:10 ` [PATCH 3.13 026/140] rtlwifi: rtl8192cu: Add new device ID Greg Kroah-Hartman
2014-02-04 21:10 ` [PATCH 3.13 027/140] rtlwifi: Update beacon statistics for USB driver Greg Kroah-Hartman
2014-02-04 21:10 ` [PATCH 3.13 028/140] rtlwifi: rtl8192c: Prevent reconnect attempts if not connected Greg Kroah-Hartman
2014-02-04 21:10 ` [PATCH 3.13 029/140] rtlwifi: rtl8192cu: Add new firmware Greg Kroah-Hartman
2014-02-04 21:10 ` [PATCH 3.13 030/140] rtlwifi: Redo register save locations Greg Kroah-Hartman
2014-02-04 21:10 ` [PATCH 3.13 031/140] rtlwifi: Set the link state Greg Kroah-Hartman
2014-02-04 21:10 ` [PATCH 3.13 032/140] rtlwifi: rtl8192c: Add new definitions in the dm_common header Greg Kroah-Hartman
2014-02-04 21:10 ` [PATCH 3.13 033/140] rtlwifi: Increase the RX queue length for USB drivers Greg Kroah-Hartman
2014-02-04 21:10 ` [PATCH 3.13 034/140] rtlwifi: rtl8192c: Add routines to save/restore power index registers Greg Kroah-Hartman
2014-02-04 21:10 ` [PATCH 3.13 035/140] rtlwifi: rtl8192cu: Update the " Greg Kroah-Hartman
2014-02-04 21:10 ` [PATCH 3.13 036/140] rtlwifi: rtl8192cu: Fix some code in RF handling Greg Kroah-Hartman
2014-02-04 21:10 ` [PATCH 3.13 037/140] rtlwifi: Add missing code to PWDB statics routine Greg Kroah-Hartman
2014-02-04 21:10 ` Greg Kroah-Hartman [this message]
2014-02-04 21:10 ` [PATCH 3.13 039/140] rtlwifi: rtl8188ee: Fix typo in code Greg Kroah-Hartman
2014-02-04 21:10 ` [PATCH 3.13 040/140] mwifiex: add missing endian conversion for fw_tsf Greg Kroah-Hartman
2014-02-04 21:10 ` [PATCH 3.13 041/140] mwifiex: fix wrong 11ac bits setting in fw_cap_info Greg Kroah-Hartman
2014-02-04 21:10 ` [PATCH 3.13 042/140] iwlwifi: pcie: enable oscillator for L1 exit Greg Kroah-Hartman
2014-02-04 21:10 ` [PATCH 3.13 043/140] iwlwifi: mvm: fix missing cleanup in .start() error path Greg Kroah-Hartman
2014-02-04 21:10 ` [PATCH 3.13 044/140] b43: Fix lockdep splat Greg Kroah-Hartman
2014-02-04 21:10 ` [PATCH 3.13 045/140] b43: Fix unload oops if firmware is not available Greg Kroah-Hartman
2014-02-04 21:10 ` [PATCH 3.13 046/140] b43legacy: " Greg Kroah-Hartman
2014-02-04 21:10 ` [PATCH 3.13 047/140] b43: fix the wrong assignment of status.freq in b43_rx() Greg Kroah-Hartman
2014-02-04 21:10 ` [PATCH 3.13 048/140] ath9k: Use correct channel for RX packets Greg Kroah-Hartman
2014-02-04 21:10 ` [PATCH 3.13 049/140] ath9k: Disable cross-band FCC Greg Kroah-Hartman
2014-02-04 21:10 ` [PATCH 3.13 050/140] staging/lustre/ptlrpc: Fix a crash when dereferencing NULL pointer Greg Kroah-Hartman
2014-02-04 21:10 ` [PATCH 3.13 051/140] staging: r8712u: Set device type to wlan Greg Kroah-Hartman
2014-02-04 21:10 ` [PATCH 3.13 052/140] staging: vt6656: [BUG] BBvUpdatePreEDThreshold Always set sensitivity on bScanning Greg Kroah-Hartman
2014-02-04 21:10 ` [PATCH 3.13 053/140] staging: vt6656: CARDqGetNextTBTT correct uLowNextTBTT Greg Kroah-Hartman
2014-02-04 21:10 ` [PATCH 3.13 054/140] mei: use hbm idle state to prevent spurious resets Greg Kroah-Hartman
2014-02-06 21:27   ` Paul Bolle
2014-02-06 21:39     ` Greg Kroah-Hartman
2014-02-06 21:53       ` [PATCH 3.13] mei: mei_hbm_dispatch() returns void Paul Bolle
2014-02-07  0:26         ` Winkler, Tomas
2014-02-04 21:10 ` [PATCH 3.13 055/140] tty/serial: at91: Handle shutdown more safely Greg Kroah-Hartman
2014-02-04 21:10 ` [PATCH 3.13 056/140] tty/serial: at91: fix race condition in atmel_serial_remove Greg Kroah-Hartman
2014-02-04 21:10 ` [PATCH 3.13 057/140] tty/serial: at91: reset rx_ring when port is shutdown Greg Kroah-Hartman
2014-02-04 21:10 ` [PATCH 3.13 058/140] tty/serial: at91: disable uart timer at start of shutdown Greg Kroah-Hartman
2014-02-04 21:10 ` [PATCH 3.13 059/140] ARM: at91: at91sam9g45: set default mmc pinctrl-names Greg Kroah-Hartman
2014-02-04 21:10 ` [PATCH 3.13 060/140] ARM: at91: smc: bug fix in sam9_smc_cs_read() Greg Kroah-Hartman
2014-02-04 21:10 ` [PATCH 3.13 061/140] hwmon: (k10temp) Add support for Kaveri CPUs Greg Kroah-Hartman
2014-02-04 21:10 ` [PATCH 3.13 062/140] xhci: Avoid infinite loop when sg urb requires too many trbs Greg Kroah-Hartman
2014-02-04 21:10 ` [PATCH 3.13 063/140] xhci: Set scatter-gather limit to avoid failed block writes Greg Kroah-Hartman
2014-02-04 21:10 ` [PATCH 3.13 064/140] uio: fix devm_request_irq usage Greg Kroah-Hartman
2014-02-04 21:10 ` [PATCH 3.13 065/140] serial: add support for 200 v3 series Titan card Greg Kroah-Hartman
2014-02-04 21:10 ` [PATCH 3.13 066/140] serial: 8250: Fix initialisation of Quatech cards with the AMCC PCI chip Greg Kroah-Hartman
2014-02-04 21:10 ` [PATCH 3.13 067/140] serial: 8250: enable UART_BUG_NOMSR for Tegra Greg Kroah-Hartman
2014-02-04 21:10 ` [PATCH 3.13 068/140] s390/compat: fix PSW32_USER_BITS definition Greg Kroah-Hartman
2014-02-04 21:10 ` [PATCH 3.13 069/140] KVM: s390: Always store status during SIGP STOP_AND_STORE_STATUS Greg Kroah-Hartman
2014-02-04 21:10 ` [PATCH 3.13 070/140] KVM: s390: fix diagnose code extraction Greg Kroah-Hartman
2014-02-04 21:10 ` [PATCH 3.13 071/140] KVM: s390: ioeventfd: ignore leftmost bits Greg Kroah-Hartman
2014-02-04 21:10 ` [PATCH 3.13 072/140] s390/uapi: fix struct statfs64 definition Greg Kroah-Hartman
2014-02-04 21:11 ` [PATCH 3.13 073/140] parport: parport_pc: remove double PCI ID for NetMos Greg Kroah-Hartman
2014-02-04 21:11 ` [PATCH 3.13 074/140] rtc-cmos: Add an alarm disable quirk Greg Kroah-Hartman
2014-02-04 21:11 ` [PATCH 3.13 075/140] rtc: max8907: weekday encoding fixes Greg Kroah-Hartman
2014-02-04 21:11 ` [PATCH 3.13 076/140] misc: mic: bug fix for interrupt acknowledgement in MSI/INTx case Greg Kroah-Hartman
2014-02-04 21:11 ` [PATCH 3.13 077/140] pinctrl: sunxi: Honor GPIO output initial vaules Greg Kroah-Hartman
2014-02-04 21:11 ` [PATCH 3.13 078/140] perf kvm: Fix kvm report without guestmount Greg Kroah-Hartman
2014-02-04 21:11 ` [PATCH 3.13 079/140] mfd: max77686: Fix regmap resource leak on driver remove Greg Kroah-Hartman
2014-02-04 21:11 ` [PATCH 3.13 080/140] ASoC: adau1701: Fix ADAU1701_SEROCTL_WORD_LEN_16 constant Greg Kroah-Hartman
2014-02-04 21:11 ` [PATCH 3.13 081/140] ASoC: codec: tlv320aic32x4: Fix regmap range config Greg Kroah-Hartman
2014-02-04 21:11 ` [PATCH 3.13 082/140] ASoC: tlv320aic32x4: Fix regmap range_min Greg Kroah-Hartman
2014-02-04 21:11 ` [PATCH 3.13 083/140] ASoC: wm5110: Extend SYSCLK patch file for rev D Greg Kroah-Hartman
2014-02-04 21:11 ` [PATCH 3.13 084/140] ALSA: rme9652: fix a missing comma in channel_map_9636_ds[] Greg Kroah-Hartman
2014-02-04 21:11 ` [PATCH 3.13 085/140] ALSA: hda - Correct AD1986A 3stack pin configs Greg Kroah-Hartman
2014-02-04 21:11 ` [PATCH 3.13 086/140] ALSA: hda - Dont create duplicated ctls for loopback paths Greg Kroah-Hartman
2014-02-04 21:11 ` [PATCH 3.13 087/140] ALSA: Enable CONFIG_ZONE_DMA for smaller PCI DMA masks Greg Kroah-Hartman
2014-02-04 21:11 ` [PATCH 3.13 088/140] ALSA: hda - automute via amp instead of pinctl on some AIO models Greg Kroah-Hartman
2014-02-04 21:11 ` [PATCH 3.13 089/140] ALSA: hda - add headset mic detect quirks for some Dell machines Greg Kroah-Hartman
2014-02-04 21:11 ` [PATCH 3.13 090/140] ALSA: bits vs bytes bug in snd_card_create() Greg Kroah-Hartman
2014-02-04 21:11 ` [PATCH 3.13 092/140] ALSA: hda - add headset mic detect quirks for another Dell laptop Greg Kroah-Hartman
2014-02-04 21:11 ` [PATCH 3.13 093/140] ALSA: hda/hdmi - allow PIN_OUT to be dynamically enabled Greg Kroah-Hartman
2014-02-04 21:11 ` [PATCH 3.13 094/140] tpm/tpm_i2c_stm_st33: Check return code of get_burstcount Greg Kroah-Hartman
2014-02-04 21:11 ` [PATCH 3.13 095/140] tpm/tpm_ppi: Do not compare strcmp(a,b) == -1 Greg Kroah-Hartman
2014-02-04 21:11 ` [PATCH 3.13 096/140] ima: change the default hash algorithm to SHA1 in ima_eventdigest_ng_init() Greg Kroah-Hartman
2014-02-04 21:11 ` [PATCH 3.13 097/140] ata: sata_mv: introduce compatible string "marvell, armada-370-sata" Greg Kroah-Hartman
2014-02-04 21:11 ` [PATCH 3.13 098/140] ata: sata_mv: fix disk hotplug for Armada 370/XP SoCs Greg Kroah-Hartman
2014-02-04 21:11 ` [PATCH 3.13 099/140] ARM: mvebu: update the SATA compatible string for Armada 370/XP Greg Kroah-Hartman
2014-02-04 21:11 ` [PATCH 3.13 100/140] libata: disable LPM for some WD SATA-I devices Greg Kroah-Hartman
2014-02-04 21:11 ` [PATCH 3.13 101/140] ext4: avoid clearing beyond i_blocks when truncating an inline data file Greg Kroah-Hartman
2014-02-04 21:11 ` [PATCH 3.13 102/140] vfs: Remove second variable named error in __dentry_path Greg Kroah-Hartman
2014-02-04 21:11 ` [PATCH 3.13 103/140] vfs: Is mounted should be testing mnt_ns for NULL or error Greg Kroah-Hartman
2014-02-04 21:11 ` [PATCH 3.13 104/140] bcache: Data corruption fix Greg Kroah-Hartman
2014-02-04 21:11 ` [PATCH 3.13 105/140] zram: fix race between reset and flushing pending work Greg Kroah-Hartman
2014-02-04 21:11 ` [PATCH 3.13 107/140] ARM: mvebu: Add support to get the ID and the revision of a SoC Greg Kroah-Hartman
2014-02-04 21:11 ` [PATCH 3.13 108/140] ARM: mvebu: Add quirk for i2c for the OpenBlocks AX3-4 board Greg Kroah-Hartman
2014-02-04 21:11 ` [PATCH 3.13 109/140] i2c: mv64xxx: Fix bus hang on A0 version of the Armada XP SoCs Greg Kroah-Hartman
2014-02-04 21:11 ` [PATCH 3.13 110/140] i2c: mv64xxx: Document the newly introduced Armada XP A0 compatible Greg Kroah-Hartman
2014-02-04 21:11 ` [PATCH 3.13 111/140] i2c: piix4: Add support for AMD ML and CZ SMBus changes Greg Kroah-Hartman
2014-02-04 21:11 ` [PATCH 3.13 113/140] ip_tunnel: clear IPCB in ip_tunnel_xmit() in case dst_link_failure() is called Greg Kroah-Hartman
2014-02-04 21:11 ` [PATCH 3.13 114/140] net/vxlan: Share RX skb de-marking and checksum checks with ovs Greg Kroah-Hartman
2014-02-04 21:11 ` [PATCH 3.13 115/140] fib_frontend: fix possible NULL pointer dereference Greg Kroah-Hartman
2014-02-04 21:11 ` [PATCH 3.13 116/140] net: Fix memory leak if TPROXY used with TCP early demux Greg Kroah-Hartman
2014-02-04 21:11 ` [PATCH 3.13 117/140] xen-netfront: fix resource leak in netfront Greg Kroah-Hartman
2014-02-04 21:11 ` [PATCH 3.13 118/140] net: gre: use icmp_hdr() to get inner ip header Greg Kroah-Hartman
2014-02-04 21:11 ` [PATCH 3.13 119/140] mmc: sdhci: add quirk for broken HS200 support Greg Kroah-Hartman
2014-02-04 21:11 ` [PATCH 3.13 120/140] mmc: sdhci-pci: add broken HS200 quirk for Intel Merrifield Greg Kroah-Hartman
2014-02-04 21:11 ` [PATCH 3.13 121/140] mmc: sdhci: fix lockdep error in tuning routine Greg Kroah-Hartman
2014-02-04 21:11 ` [PATCH 3.13 122/140] mmc: sdhci-esdhc-imx: fix access hardirq-unsafe lock in atomic context Greg Kroah-Hartman
2014-02-04 21:11 ` [PATCH 3.13 123/140] alpha: fix broken network checksum Greg Kroah-Hartman
2014-02-04 21:11 ` [PATCH 3.13 124/140] parisc/sti_console: prefer Linux fonts over built-in ROM fonts Greg Kroah-Hartman
2014-02-04 21:11 ` [PATCH 3.13 125/140] parisc: fix cache-flushing Greg Kroah-Hartman
2014-02-04 21:11 ` [PATCH 3.13 126/140] KVM: PPC: Book3S HV: use xics_wake_cpu only when defined Greg Kroah-Hartman
2014-02-04 21:11 ` [PATCH 3.13 127/140] KVM: PPC: e500: Fix bad address type in deliver_tlb_misss() Greg Kroah-Hartman
2014-02-04 21:11 ` [PATCH 3.13 128/140] ALSA: hda - Dont set indep_hp flag for old AD codecs Greg Kroah-Hartman
2014-02-04 21:11 ` [PATCH 3.13 129/140] hpfs: remember free space Greg Kroah-Hartman
2014-02-04 21:11 ` [PATCH 3.13 130/140] usb: core: get config and string descriptors for unauthorized devices Greg Kroah-Hartman
2014-02-04 21:11 ` [PATCH 3.13 131/140] SCSI: bfa: Chinook quad port 16G FC HBA claim issue Greg Kroah-Hartman
2014-02-04 21:11 ` [PATCH 3.13 132/140] SCSI: qla4xxx: overflow in qla4xxx_set_chap_entry() Greg Kroah-Hartman
2014-02-04 21:12 ` [PATCH 3.13 133/140] virtio-scsi: Fix hotcpu_notifier use-after-free with virtscsi_freeze Greg Kroah-Hartman
2014-02-04 21:12 ` [PATCH 3.13 134/140] iscsi-target: Pre-allocate more tags to avoid ack starvation Greg Kroah-Hartman
2014-02-04 21:12 ` [PATCH 3.13 135/140] target/iscsi: Fix network portal creation race Greg Kroah-Hartman
2014-02-04 21:12 ` [PATCH 3.13 136/140] Btrfs: handle EAGAIN case properly in btrfs_drop_snapshot() Greg Kroah-Hartman
2014-02-04 21:12 ` [PATCH 3.13 137/140] Btrfs: setup inode location during btrfs_init_inode_locked Greg Kroah-Hartman
2014-02-04 21:12 ` [PATCH 3.13 138/140] btrfs: restrict snapshotting to own subvolumes Greg Kroah-Hartman
2014-02-04 21:12 ` [PATCH 3.13 139/140] powerpc: Fix the setup of CPU-to-Node mappings during CPU online Greg Kroah-Hartman
2014-02-04 21:12 ` [PATCH 3.13 140/140] powerpc: Make sure "cache" directory is removed when offlining cpu Greg Kroah-Hartman
2014-02-05  6:41 ` [PATCH 3.13 000/140] 3.13.2-stable review Guenter Roeck
2014-02-05 17:37   ` Greg Kroah-Hartman
2014-02-05 20:41 ` Shuah Khan
2014-02-05 22:27   ` Greg Kroah-Hartman

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20140204211038.055031147@linuxfoundation.org \
    --to=gregkh@linuxfoundation.org \
    --cc=Larry.Finger@lwfinger.net \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linville@tuxdriver.com \
    --cc=stable@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).