linux-wireless.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 00/16] rtl8xxxu - additional fixes
@ 2016-04-14 20:37 Jes.Sorensen
  2016-04-14 20:37 ` [PATCH 01/16] rtl8xxxu: Mark 0x050d:0x1004 as tested Jes.Sorensen
                   ` (16 more replies)
  0 siblings, 17 replies; 20+ messages in thread
From: Jes.Sorensen @ 2016-04-14 20:37 UTC (permalink / raw)
  To: linux-wireless; +Cc: kvalo, Larry.Finger, Jes Sorensen

From: Jes Sorensen <Jes.Sorensen@redhat.com>

Hi,

This is a second set of rtl8xxxu related patches, which goes on top of
the set I sent out earlier today. If you only have time to go through
one set, please look at the other set.

This set primarily contains fixes to make rtl8188ru v2 devices work
again. I have reports that v1 devices still don't work, but I don't
have one of those, so I am not able to test this.

This also includes a fix for a crash reported by Xose Vazquez Peres
when trying to hot add a USB ID. It marks 0x050d:0x1004 as tested,
reported by Andrea Merello, and handles an old bug where the
driver didn't unregister from mac80211 before shutting down the
device. Last it includes a uninitialized return value fix from Colin
Ian King.

Cheers,
Jes


Colin Ian King (1):
  rtl8xxxu: fix uninitialized return value in ret

Jes Sorensen (15):
  rtl8xxxu: Mark 0x050d:0x1004 as tested
  rtl8xxxu: Move PHY RF init into device specific functions
  rtl8xxxu: For devices with external PA (8188RU), limit CCK TX power
  rtl8xxxu: Apply 8188RU workaround for UMC B cut parts correctly
  rtl8xxxu: Use rtl_chip == RTL8188R to identify high PA parts
  rtl8xxxu: Match 8723bu power down sequence to vendor driver
  rtl8xxxu: Unregister from mac80211 before shutting down the device
  rtl8xxxu: Update copyright statement to include 2016
  rtl8xxxu: Set register 0xfe10 on rtl8192cu based parts
  rtl8xxxu: Add TX power base values for gen1 parts
  rtl8xxxu: Fix 8188RU support
  rtl8xxxu: Fix OOPS if user tries to add device via /sys
  rtl8xxxu: Implement rtl8192e_enable_rf()
  rtl8xxxu: Pause TX before calling disable_rf()
  rtl8xxxu: MAINTAINERS: Update to point to the active devel branch

 MAINTAINERS                                        |   2 +-
 drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.c   | 378 +++++++++++++++------
 drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.h   |  30 +-
 .../net/wireless/realtek/rtl8xxxu/rtl8xxxu_regs.h  |   2 +-
 4 files changed, 306 insertions(+), 106 deletions(-)

-- 
2.5.5


^ permalink raw reply	[flat|nested] 20+ messages in thread

* [PATCH 01/16] rtl8xxxu: Mark 0x050d:0x1004 as tested
  2016-04-14 20:37 [PATCH 00/16] rtl8xxxu - additional fixes Jes.Sorensen
@ 2016-04-14 20:37 ` Jes.Sorensen
  2016-04-15 18:39   ` [01/16] " Kalle Valo
  2016-04-14 20:37 ` [PATCH 02/16] rtl8xxxu: fix uninitialized return value in ret Jes.Sorensen
                   ` (15 subsequent siblings)
  16 siblings, 1 reply; 20+ messages in thread
From: Jes.Sorensen @ 2016-04-14 20:37 UTC (permalink / raw)
  To: linux-wireless; +Cc: kvalo, Larry.Finger, Jes Sorensen

From: Jes Sorensen <Jes.Sorensen@redhat.com>

This dongle was tested successfully by Andrea Merello

Reported-by: Andrea Merello <andrea.merello@gmail.com>
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
---
 drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.c | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.c b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.c
index 39a033c..037b64f 100644
--- a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.c
+++ b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.c
@@ -9560,6 +9560,10 @@ static int rtl8xxxu_probe(struct usb_interface *interface,
 		if (id->idProduct == 0x7811)
 			untested = 0;
 		break;
+	case 0x050d:
+		if (id->idProduct == 0x1004)
+			untested = 0;
+		break;
 	default:
 		break;
 	}
@@ -9864,6 +9868,9 @@ static struct usb_device_id dev_table[] = {
 /* Tested by Larry Finger */
 {USB_DEVICE_AND_INTERFACE_INFO(0x7392, 0x7811, 0xff, 0xff, 0xff),
 	.driver_info = (unsigned long)&rtl8192cu_fops},
+/* Tested by Andrea Merello */
+{USB_DEVICE_AND_INTERFACE_INFO(0x050d, 0x1004, 0xff, 0xff, 0xff),
+	.driver_info = (unsigned long)&rtl8192cu_fops},
 /* Currently untested 8188 series devices */
 {USB_DEVICE_AND_INTERFACE_INFO(USB_VENDOR_ID_REALTEK, 0x8191, 0xff, 0xff, 0xff),
 	.driver_info = (unsigned long)&rtl8192cu_fops},
@@ -9948,8 +9955,6 @@ static struct usb_device_id dev_table[] = {
 /* Currently untested 8192 series devices */
 {USB_DEVICE_AND_INTERFACE_INFO(0x04bb, 0x0950, 0xff, 0xff, 0xff),
 	.driver_info = (unsigned long)&rtl8192cu_fops},
-{USB_DEVICE_AND_INTERFACE_INFO(0x050d, 0x1004, 0xff, 0xff, 0xff),
-	.driver_info = (unsigned long)&rtl8192cu_fops},
 {USB_DEVICE_AND_INTERFACE_INFO(0x050d, 0x2102, 0xff, 0xff, 0xff),
 	.driver_info = (unsigned long)&rtl8192cu_fops},
 {USB_DEVICE_AND_INTERFACE_INFO(0x050d, 0x2103, 0xff, 0xff, 0xff),
-- 
2.5.5


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH 02/16] rtl8xxxu: fix uninitialized return value in ret
  2016-04-14 20:37 [PATCH 00/16] rtl8xxxu - additional fixes Jes.Sorensen
  2016-04-14 20:37 ` [PATCH 01/16] rtl8xxxu: Mark 0x050d:0x1004 as tested Jes.Sorensen
@ 2016-04-14 20:37 ` Jes.Sorensen
  2016-04-14 20:37 ` [PATCH 03/16] rtl8xxxu: Move PHY RF init into device specific functions Jes.Sorensen
                   ` (14 subsequent siblings)
  16 siblings, 0 replies; 20+ messages in thread
From: Jes.Sorensen @ 2016-04-14 20:37 UTC (permalink / raw)
  To: linux-wireless; +Cc: kvalo, Larry.Finger, Colin Ian King, Jes Sorensen

From: Colin Ian King <colin.king@canonical.com>

several functions are not initializing a return status in ret
resulting in garbage to be returned instead of 0 for success.
Currently, the calls to these functions are not checking the
return, however, it seems prudent to return the correct status
in case they are to be checked at a later date.

Signed-off-by: Colin Ian King <colin.king@canonical.com>
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
---
 drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.c b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.c
index 037b64f..b88cf16 100644
--- a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.c
+++ b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.c
@@ -6370,7 +6370,7 @@ static void rtl8xxxu_set_ampdu_min_space(struct rtl8xxxu_priv *priv, u8 density)
 static int rtl8xxxu_active_to_emu(struct rtl8xxxu_priv *priv)
 {
 	u8 val8;
-	int count, ret;
+	int count, ret = 0;
 
 	/* Start of rtl8723AU_card_enable_flow */
 	/* Act to Cardemu sequence*/
@@ -6420,7 +6420,7 @@ static int rtl8723bu_active_to_emu(struct rtl8xxxu_priv *priv)
 	u8 val8;
 	u16 val16;
 	u32 val32;
-	int count, ret;
+	int count, ret = 0;
 
 	/* Turn off RF */
 	rtl8xxxu_write8(priv, REG_RF_CTRL, 0);
@@ -6477,7 +6477,7 @@ static int rtl8xxxu_active_to_lps(struct rtl8xxxu_priv *priv)
 {
 	u8 val8;
 	u8 val32;
-	int count, ret;
+	int count, ret = 0;
 
 	rtl8xxxu_write8(priv, REG_TXPAUSE, 0xff);
 
-- 
2.5.5


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH 03/16] rtl8xxxu: Move PHY RF init into device specific functions
  2016-04-14 20:37 [PATCH 00/16] rtl8xxxu - additional fixes Jes.Sorensen
  2016-04-14 20:37 ` [PATCH 01/16] rtl8xxxu: Mark 0x050d:0x1004 as tested Jes.Sorensen
  2016-04-14 20:37 ` [PATCH 02/16] rtl8xxxu: fix uninitialized return value in ret Jes.Sorensen
@ 2016-04-14 20:37 ` Jes.Sorensen
  2016-04-14 20:37 ` [PATCH 04/16] rtl8xxxu: For devices with external PA (8188RU), limit CCK TX power Jes.Sorensen
                   ` (13 subsequent siblings)
  16 siblings, 0 replies; 20+ messages in thread
From: Jes.Sorensen @ 2016-04-14 20:37 UTC (permalink / raw)
  To: linux-wireless; +Cc: kvalo, Larry.Finger, Jes Sorensen

From: Jes Sorensen <Jes.Sorensen@redhat.com>

Load the RF table in init_phy_rf(), which allows for applying device
specific RF hacks in the same place. Getting rid of more ugly if ()
clutter.

Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
---
 drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.c | 133 ++++++++++++++---------
 drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.h |   1 +
 2 files changed, 80 insertions(+), 54 deletions(-)

diff --git a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.c b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.c
index b88cf16..50ca3eb 100644
--- a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.c
+++ b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.c
@@ -4015,6 +4015,80 @@ static int rtl8xxxu_init_phy_rf(struct rtl8xxxu_priv *priv,
 	return 0;
 }
 
+static int rtl8723au_init_phy_rf(struct rtl8xxxu_priv *priv)
+{
+	int ret;
+
+	ret = rtl8xxxu_init_phy_rf(priv, rtl8723au_radioa_1t_init_table, RF_A);
+
+	/* Reduce 80M spur */
+	rtl8xxxu_write32(priv, REG_AFE_XTAL_CTRL, 0x0381808d);
+	rtl8xxxu_write32(priv, REG_AFE_PLL_CTRL, 0xf0ffff83);
+	rtl8xxxu_write32(priv, REG_AFE_PLL_CTRL, 0xf0ffff82);
+	rtl8xxxu_write32(priv, REG_AFE_PLL_CTRL, 0xf0ffff83);
+
+	return ret;
+}
+
+static int rtl8723bu_init_phy_rf(struct rtl8xxxu_priv *priv)
+{
+	int ret;
+
+	ret = rtl8xxxu_init_phy_rf(priv, rtl8723bu_radioa_1t_init_table, RF_A);
+	/*
+	 * PHY LCK
+	 */
+	rtl8xxxu_write_rfreg(priv, RF_A, 0xb0, 0xdfbe0);
+	rtl8xxxu_write_rfreg(priv, RF_A, RF6052_REG_MODE_AG, 0x8c01);
+	msleep(200);
+	rtl8xxxu_write_rfreg(priv, RF_A, 0xb0, 0xdffe0);
+
+	return ret;
+}
+
+#ifdef CONFIG_RTL8XXXU_UNTESTED
+static int rtl8192cu_init_phy_rf(struct rtl8xxxu_priv *priv)
+{
+	struct rtl8xxxu_rfregval *rftable;
+	int ret;
+
+	if (priv->rtl_chip == RTL8188C) {
+		if (priv->hi_pa)
+			rftable = rtl8188ru_radioa_1t_highpa_table;
+		else
+			rftable = rtl8192cu_radioa_1t_init_table;
+		ret = rtl8xxxu_init_phy_rf(priv, rftable, RF_A);
+	} else if (priv->rf_paths == 1) {
+		rftable = rtl8192cu_radioa_1t_init_table;
+		ret = rtl8xxxu_init_phy_rf(priv, rftable, RF_A);
+	} else {
+		rftable = rtl8192cu_radioa_2t_init_table;
+		ret = rtl8xxxu_init_phy_rf(priv, rftable, RF_A);
+		if (ret)
+			goto exit;
+		rftable = rtl8192cu_radiob_2t_init_table;
+		ret = rtl8xxxu_init_phy_rf(priv, rftable, RF_B);
+	}
+
+exit:
+	return ret;
+}
+#endif
+
+static int rtl8192eu_init_phy_rf(struct rtl8xxxu_priv *priv)
+{
+	int ret;
+
+	ret = rtl8xxxu_init_phy_rf(priv, rtl8192eu_radioa_init_table, RF_A);
+	if (ret)
+		goto exit;
+
+	ret = rtl8xxxu_init_phy_rf(priv, rtl8192eu_radiob_init_table, RF_B);
+
+exit:
+	return ret;
+}
+
 static int rtl8xxxu_llt_write(struct rtl8xxxu_priv *priv, u8 address, u8 data)
 {
 	int ret = -EBUSY;
@@ -7552,7 +7626,6 @@ static int rtl8xxxu_init_device(struct ieee80211_hw *hw)
 {
 	struct rtl8xxxu_priv *priv = hw->priv;
 	struct device *dev = &priv->udev->dev;
-	struct rtl8xxxu_rfregval *rftable;
 	bool macpower;
 	int ret;
 	u8 val8;
@@ -7617,59 +7690,7 @@ static int rtl8xxxu_init_device(struct ieee80211_hw *hw)
 	if (ret)
 		goto exit;
 
-	switch(priv->rtl_chip) {
-	case RTL8723A:
-		rftable = rtl8723au_radioa_1t_init_table;
-		ret = rtl8xxxu_init_phy_rf(priv, rftable, RF_A);
-
-		/* Reduce 80M spur */
-		rtl8xxxu_write32(priv, REG_AFE_XTAL_CTRL, 0x0381808d);
-		rtl8xxxu_write32(priv, REG_AFE_PLL_CTRL, 0xf0ffff83);
-		rtl8xxxu_write32(priv, REG_AFE_PLL_CTRL, 0xf0ffff82);
-		rtl8xxxu_write32(priv, REG_AFE_PLL_CTRL, 0xf0ffff83);
-		break;
-	case RTL8723B:
-		rftable = rtl8723bu_radioa_1t_init_table;
-		ret = rtl8xxxu_init_phy_rf(priv, rftable, RF_A);
-		/*
-		 * PHY LCK
-		 */
-		rtl8xxxu_write_rfreg(priv, RF_A, 0xb0, 0xdfbe0);
-		rtl8xxxu_write_rfreg(priv, RF_A, RF6052_REG_MODE_AG, 0x8c01);
-		msleep(200);
-		rtl8xxxu_write_rfreg(priv, RF_A, 0xb0, 0xdffe0);
-		break;
-	case RTL8188C:
-		if (priv->hi_pa)
-			rftable = rtl8188ru_radioa_1t_highpa_table;
-		else
-			rftable = rtl8192cu_radioa_1t_init_table;
-		ret = rtl8xxxu_init_phy_rf(priv, rftable, RF_A);
-		break;
-	case RTL8191C:
-		rftable = rtl8192cu_radioa_1t_init_table;
-		ret = rtl8xxxu_init_phy_rf(priv, rftable, RF_A);
-		break;
-	case RTL8192C:
-		rftable = rtl8192cu_radioa_2t_init_table;
-		ret = rtl8xxxu_init_phy_rf(priv, rftable, RF_A);
-		if (ret)
-			break;
-		rftable = rtl8192cu_radiob_2t_init_table;
-		ret = rtl8xxxu_init_phy_rf(priv, rftable, RF_B);
-		break;
-	case RTL8192E:
-		rftable = rtl8192eu_radioa_init_table;
-		ret = rtl8xxxu_init_phy_rf(priv, rftable, RF_A);
-		if (ret)
-			break;
-		rftable = rtl8192eu_radiob_init_table;
-		ret = rtl8xxxu_init_phy_rf(priv, rftable, RF_B);
-		break;
-	default:
-		ret = -EINVAL;
-	}
-
+	ret = priv->fops->init_phy_rf(priv);
 	if (ret)
 		goto exit;
 
@@ -9715,6 +9736,7 @@ static struct rtl8xxxu_fileops rtl8723au_fops = {
 	.reset_8051 = rtl8xxxu_reset_8051,
 	.llt_init = rtl8xxxu_init_llt_table,
 	.init_phy_bb = rtl8723au_init_phy_bb,
+	.init_phy_rf = rtl8723au_init_phy_rf,
 	.phy_iq_calibrate = rtl8723au_phy_iq_calibrate,
 	.config_channel = rtl8723au_config_channel,
 	.parse_rx_desc = rtl8xxxu_parse_rxdesc16,
@@ -9747,6 +9769,7 @@ static struct rtl8xxxu_fileops rtl8723bu_fops = {
 	.reset_8051 = rtl8723bu_reset_8051,
 	.llt_init = rtl8xxxu_auto_llt_table,
 	.init_phy_bb = rtl8723bu_init_phy_bb,
+	.init_phy_rf = rtl8723bu_init_phy_rf,
 	.phy_init_antenna_selection = rtl8723bu_phy_init_antenna_selection,
 	.phy_iq_calibrate = rtl8723bu_phy_iq_calibrate,
 	.config_channel = rtl8723bu_config_channel,
@@ -9785,6 +9808,7 @@ static struct rtl8xxxu_fileops rtl8192cu_fops = {
 	.reset_8051 = rtl8xxxu_reset_8051,
 	.llt_init = rtl8xxxu_init_llt_table,
 	.init_phy_bb = rtl8723au_init_phy_bb,
+	.init_phy_rf = rtl8192cu_init_phy_rf,
 	.phy_iq_calibrate = rtl8723au_phy_iq_calibrate,
 	.config_channel = rtl8723au_config_channel,
 	.parse_rx_desc = rtl8xxxu_parse_rxdesc16,
@@ -9819,6 +9843,7 @@ static struct rtl8xxxu_fileops rtl8192eu_fops = {
 	.reset_8051 = rtl8xxxu_reset_8051,
 	.llt_init = rtl8xxxu_auto_llt_table,
 	.init_phy_bb = rtl8192eu_init_phy_bb,
+	.init_phy_rf = rtl8192eu_init_phy_rf,
 	.phy_iq_calibrate = rtl8192eu_phy_iq_calibrate,
 	.config_channel = rtl8723bu_config_channel,
 	.parse_rx_desc = rtl8xxxu_parse_rxdesc24,
diff --git a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.h b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.h
index da86f3f..3efbb60 100644
--- a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.h
+++ b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.h
@@ -1284,6 +1284,7 @@ struct rtl8xxxu_fileops {
 	void (*reset_8051) (struct rtl8xxxu_priv *priv);
 	int (*llt_init) (struct rtl8xxxu_priv *priv, u8 last_tx_page);
 	void (*init_phy_bb) (struct rtl8xxxu_priv *priv);
+	int (*init_phy_rf) (struct rtl8xxxu_priv *priv);
 	void (*phy_init_antenna_selection) (struct rtl8xxxu_priv *priv);
 	void (*phy_iq_calibrate) (struct rtl8xxxu_priv *priv);
 	void (*config_channel) (struct ieee80211_hw *hw);
-- 
2.5.5


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH 04/16] rtl8xxxu: For devices with external PA (8188RU), limit CCK TX power
  2016-04-14 20:37 [PATCH 00/16] rtl8xxxu - additional fixes Jes.Sorensen
                   ` (2 preceding siblings ...)
  2016-04-14 20:37 ` [PATCH 03/16] rtl8xxxu: Move PHY RF init into device specific functions Jes.Sorensen
@ 2016-04-14 20:37 ` Jes.Sorensen
  2016-04-14 20:37 ` [PATCH 05/16] rtl8xxxu: Apply 8188RU workaround for UMC B cut parts correctly Jes.Sorensen
                   ` (12 subsequent siblings)
  16 siblings, 0 replies; 20+ messages in thread
From: Jes.Sorensen @ 2016-04-14 20:37 UTC (permalink / raw)
  To: linux-wireless; +Cc: kvalo, Larry.Finger, Jes Sorensen

From: Jes Sorensen <Jes.Sorensen@redhat.com>

Per the vendor driver, devices with an external PA needs limiting it's
TX power to 0x20.

Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
---
 drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.c | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.c b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.c
index 50ca3eb..578d1bf 100644
--- a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.c
+++ b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.c
@@ -2421,6 +2421,13 @@ rtl8723a_set_tx_power(struct rtl8xxxu_priv *priv, int channel, bool ht40)
 	cck[0] = priv->cck_tx_power_index_A[group];
 	cck[1] = priv->cck_tx_power_index_B[group];
 
+	if (priv->hi_pa) {
+		if (cck[0] > 0x20)
+			cck[0] = 0x20;
+		if (cck[1] > 0x20)
+			cck[1] = 0x20;
+	}
+
 	ofdm[0] = priv->ht40_1s_tx_power_index_A[group];
 	ofdm[1] = priv->ht40_1s_tx_power_index_B[group];
 
-- 
2.5.5


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH 05/16] rtl8xxxu: Apply 8188RU workaround for UMC B cut parts correctly
  2016-04-14 20:37 [PATCH 00/16] rtl8xxxu - additional fixes Jes.Sorensen
                   ` (3 preceding siblings ...)
  2016-04-14 20:37 ` [PATCH 04/16] rtl8xxxu: For devices with external PA (8188RU), limit CCK TX power Jes.Sorensen
@ 2016-04-14 20:37 ` Jes.Sorensen
  2016-04-14 20:37 ` [PATCH 06/16] rtl8xxxu: Use rtl_chip == RTL8188R to identify high PA parts Jes.Sorensen
                   ` (11 subsequent siblings)
  16 siblings, 0 replies; 20+ messages in thread
From: Jes.Sorensen @ 2016-04-14 20:37 UTC (permalink / raw)
  To: linux-wireless; +Cc: kvalo, Larry.Finger, Jes Sorensen

From: Jes Sorensen <Jes.Sorensen@redhat.com>

This patch was being missed since rtl_chip will never match RTL8188C
if hi_pa is true.

Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
---
 drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.c b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.c
index 578d1bf..bebe484 100644
--- a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.c
+++ b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.c
@@ -3756,7 +3756,7 @@ static void rtl8723au_init_phy_bb(struct rtl8xxxu_priv *priv)
 	else
 		rtl8xxxu_init_phy_regs(priv, rtl8723a_phy_1t_init_table);
 
-	if (priv->rtl_chip == RTL8188C && priv->hi_pa &&
+	if (priv->rtl_chip == RTL8188R && priv->hi_pa &&
 	    priv->vendor_umc && priv->chip_cut == 1)
 		rtl8xxxu_write8(priv, REG_OFDM0_AGC_PARM1 + 2, 0x50);
 
-- 
2.5.5


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH 06/16] rtl8xxxu: Use rtl_chip == RTL8188R to identify high PA parts
  2016-04-14 20:37 [PATCH 00/16] rtl8xxxu - additional fixes Jes.Sorensen
                   ` (4 preceding siblings ...)
  2016-04-14 20:37 ` [PATCH 05/16] rtl8xxxu: Apply 8188RU workaround for UMC B cut parts correctly Jes.Sorensen
@ 2016-04-14 20:37 ` Jes.Sorensen
  2016-04-14 20:37 ` [PATCH 07/16] rtl8xxxu: Match 8723bu power down sequence to vendor driver Jes.Sorensen
                   ` (10 subsequent siblings)
  16 siblings, 0 replies; 20+ messages in thread
From: Jes.Sorensen @ 2016-04-14 20:37 UTC (permalink / raw)
  To: linux-wireless; +Cc: kvalo, Larry.Finger, Jes Sorensen

From: Jes Sorensen <Jes.Sorensen@redhat.com>

This is simpler than checking for RTL8188C && hi_pa.

Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
---
 drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.c | 12 +++++-------
 1 file changed, 5 insertions(+), 7 deletions(-)

diff --git a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.c b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.c
index bebe484..8bf9a74 100644
--- a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.c
+++ b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.c
@@ -3054,6 +3054,7 @@ static int rtl8192cu_parse_efuse(struct rtl8xxxu_priv *priv)
 
 	if (efuse->rf_regulatory & 0x20) {
 		sprintf(priv->chip_name, "8188RU");
+		priv->rtl_chip = RTL8188R;
 		priv->hi_pa = 1;
 	}
 
@@ -4059,11 +4060,8 @@ static int rtl8192cu_init_phy_rf(struct rtl8xxxu_priv *priv)
 	struct rtl8xxxu_rfregval *rftable;
 	int ret;
 
-	if (priv->rtl_chip == RTL8188C) {
-		if (priv->hi_pa)
-			rftable = rtl8188ru_radioa_1t_highpa_table;
-		else
-			rftable = rtl8192cu_radioa_1t_init_table;
+	if (priv->rtl_chip == RTL8188R) {
+		rftable = rtl8188ru_radioa_1t_highpa_table;
 		ret = rtl8xxxu_init_phy_rf(priv, rftable, RF_A);
 	} else if (priv->rf_paths == 1) {
 		rftable = rtl8192cu_radioa_1t_init_table;
@@ -7219,7 +7217,7 @@ static int rtl8192cu_power_on(struct rtl8xxxu_priv *priv)
 	/*
 	 * Workaround for 8188RU LNA power leakage problem.
 	 */
-	if (priv->rtl_chip == RTL8188C && priv->hi_pa) {
+	if (priv->rtl_chip == RTL8188R) {
 		val32 = rtl8xxxu_read32(priv, REG_FPGA0_XCD_RF_PARM);
 		val32 &= ~BIT(1);
 		rtl8xxxu_write32(priv, REG_FPGA0_XCD_RF_PARM, val32);
@@ -7323,7 +7321,7 @@ static void rtl8xxxu_power_off(struct rtl8xxxu_priv *priv)
 	/*
 	 * Workaround for 8188RU LNA power leakage problem.
 	 */
-	if (priv->rtl_chip == RTL8188C && priv->hi_pa) {
+	if (priv->rtl_chip == RTL8188R) {
 		val32 = rtl8xxxu_read32(priv, REG_FPGA0_XCD_RF_PARM);
 		val32 |= BIT(1);
 		rtl8xxxu_write32(priv, REG_FPGA0_XCD_RF_PARM, val32);
-- 
2.5.5


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH 07/16] rtl8xxxu: Match 8723bu power down sequence to vendor driver
  2016-04-14 20:37 [PATCH 00/16] rtl8xxxu - additional fixes Jes.Sorensen
                   ` (5 preceding siblings ...)
  2016-04-14 20:37 ` [PATCH 06/16] rtl8xxxu: Use rtl_chip == RTL8188R to identify high PA parts Jes.Sorensen
@ 2016-04-14 20:37 ` Jes.Sorensen
  2016-04-14 20:37 ` [PATCH 08/16] rtl8xxxu: Unregister from mac80211 before shutting down the device Jes.Sorensen
                   ` (9 subsequent siblings)
  16 siblings, 0 replies; 20+ messages in thread
From: Jes.Sorensen @ 2016-04-14 20:37 UTC (permalink / raw)
  To: linux-wireless; +Cc: kvalo, Larry.Finger, Jes Sorensen

From: Jes Sorensen <Jes.Sorensen@redhat.com>

In particular set APS_FSMCO_WLON_RESET in the right register, and do
not overwrite too much of REG_CR.

Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
---
 drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.c | 16 ++++++++++++----
 1 file changed, 12 insertions(+), 4 deletions(-)

diff --git a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.c b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.c
index 8bf9a74..5685fd7 100644
--- a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.c
+++ b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.c
@@ -6510,9 +6510,9 @@ static int rtl8723bu_active_to_emu(struct rtl8xxxu_priv *priv)
 	rtl8xxxu_write16(priv, REG_GPIO_INTM, val16);
 
 	/* Release WLON reset 0x04[16]= 1*/
-	val32 = rtl8xxxu_read32(priv, REG_GPIO_INTM);
+	val32 = rtl8xxxu_read32(priv, REG_APS_FSMCO);
 	val32 |= APS_FSMCO_WLON_RESET;
-	rtl8xxxu_write32(priv, REG_GPIO_INTM, val32);
+	rtl8xxxu_write32(priv, REG_APS_FSMCO, val32);
 
 	/* 0x0005[1] = 1 turn off MAC by HW state machine*/
 	val8 = rtl8xxxu_read8(priv, REG_APS_FSMCO + 1);
@@ -7376,7 +7376,7 @@ static void rtl8723bu_power_off(struct rtl8xxxu_priv *priv)
 	val8 &= ~TX_REPORT_CTRL_TIMER_ENABLE;
 	rtl8xxxu_write8(priv, REG_TX_REPORT_CTRL, val8);
 
-	rtl8xxxu_write16(priv, REG_CR, 0x0000);
+	rtl8xxxu_write8(priv, REG_CR, 0x0000);
 
 	rtl8xxxu_active_to_lps(priv);
 
@@ -7393,7 +7393,15 @@ static void rtl8723bu_power_off(struct rtl8xxxu_priv *priv)
 	rtl8xxxu_write8(priv, REG_MCU_FW_DL, 0x00);
 
 	rtl8723bu_active_to_emu(priv);
-	rtl8xxxu_emu_to_disabled(priv);
+
+	val8 = rtl8xxxu_read8(priv, REG_APS_FSMCO + 1);
+	val8 |= BIT(3); /* APS_FSMCO_HW_SUSPEND */
+	rtl8xxxu_write8(priv, REG_APS_FSMCO + 1, val8);
+
+	/* 0x48[16] = 1 to enable GPIO9 as EXT wakeup */
+	val8 = rtl8xxxu_read8(priv, REG_GPIO_INTM + 2);
+	val8 |= BIT(0);
+	rtl8xxxu_write8(priv, REG_GPIO_INTM + 2, val8);
 }
 
 #ifdef NEED_PS_TDMA
-- 
2.5.5


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH 08/16] rtl8xxxu: Unregister from mac80211 before shutting down the device
  2016-04-14 20:37 [PATCH 00/16] rtl8xxxu - additional fixes Jes.Sorensen
                   ` (6 preceding siblings ...)
  2016-04-14 20:37 ` [PATCH 07/16] rtl8xxxu: Match 8723bu power down sequence to vendor driver Jes.Sorensen
@ 2016-04-14 20:37 ` Jes.Sorensen
  2016-04-14 20:37 ` [PATCH 09/16] rtl8xxxu: Update copyright statement to include 2016 Jes.Sorensen
                   ` (8 subsequent siblings)
  16 siblings, 0 replies; 20+ messages in thread
From: Jes.Sorensen @ 2016-04-14 20:37 UTC (permalink / raw)
  To: linux-wireless; +Cc: kvalo, Larry.Finger, Jes Sorensen

From: Jes Sorensen <Jes.Sorensen@redhat.com>

This fixes a long standing bug where mac80211 would send disconnect
packets to the device, after we had shut down the device.

Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
---
 drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.c | 14 ++++----------
 1 file changed, 4 insertions(+), 10 deletions(-)

diff --git a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.c b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.c
index 5685fd7..2b71a2b 100644
--- a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.c
+++ b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.c
@@ -8003,13 +8003,6 @@ exit:
 	return ret;
 }
 
-static void rtl8xxxu_disable_device(struct ieee80211_hw *hw)
-{
-	struct rtl8xxxu_priv *priv = hw->priv;
-
-	priv->fops->power_off(priv);
-}
-
 static void rtl8xxxu_cam_write(struct rtl8xxxu_priv *priv,
 			       struct ieee80211_key_conf *key, const u8 *mac)
 {
@@ -9726,13 +9719,14 @@ static void rtl8xxxu_disconnect(struct usb_interface *interface)
 	hw = usb_get_intfdata(interface);
 	priv = hw->priv;
 
-	rtl8xxxu_disable_device(hw);
+	ieee80211_unregister_hw(hw);
+
+	priv->fops->power_off(priv);
+
 	usb_set_intfdata(interface, NULL);
 
 	dev_info(&priv->udev->dev, "disconnecting\n");
 
-	ieee80211_unregister_hw(hw);
-
 	kfree(priv->fw_data);
 	mutex_destroy(&priv->usb_buf_mutex);
 	mutex_destroy(&priv->h2c_mutex);
-- 
2.5.5


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH 09/16] rtl8xxxu: Update copyright statement to include 2016
  2016-04-14 20:37 [PATCH 00/16] rtl8xxxu - additional fixes Jes.Sorensen
                   ` (7 preceding siblings ...)
  2016-04-14 20:37 ` [PATCH 08/16] rtl8xxxu: Unregister from mac80211 before shutting down the device Jes.Sorensen
@ 2016-04-14 20:37 ` Jes.Sorensen
  2016-04-14 20:37 ` [PATCH 10/16] rtl8xxxu: Set register 0xfe10 on rtl8192cu based parts Jes.Sorensen
                   ` (7 subsequent siblings)
  16 siblings, 0 replies; 20+ messages in thread
From: Jes.Sorensen @ 2016-04-14 20:37 UTC (permalink / raw)
  To: linux-wireless; +Cc: kvalo, Larry.Finger, Jes Sorensen

From: Jes Sorensen <Jes.Sorensen@redhat.com>

Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
---
 drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.c      | 2 +-
 drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.h      | 2 +-
 drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_regs.h | 2 +-
 3 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.c b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.c
index 2b71a2b..de62f0b 100644
--- a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.c
+++ b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.c
@@ -1,7 +1,7 @@
 /*
  * RTL8XXXU mac80211 USB driver
  *
- * Copyright (c) 2014 - 2015 Jes Sorensen <Jes.Sorensen@redhat.com>
+ * Copyright (c) 2014 - 2016 Jes Sorensen <Jes.Sorensen@redhat.com>
  *
  * Portions, notably calibration code:
  * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
diff --git a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.h b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.h
index 3efbb60..a1b076c 100644
--- a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.h
+++ b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014 - 2015 Jes Sorensen <Jes.Sorensen@redhat.com>
+ * Copyright (c) 2014 - 2016 Jes Sorensen <Jes.Sorensen@redhat.com>
  *
  * This program is free software; you can redistribute it and/or modify it
  * under the terms of version 2 of the GNU General Public License as
diff --git a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_regs.h b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_regs.h
index e7709a5..b0e0c64 100644
--- a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_regs.h
+++ b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_regs.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014 - 2015 Jes Sorensen <Jes.Sorensen@redhat.com>
+ * Copyright (c) 2014 - 2016 Jes Sorensen <Jes.Sorensen@redhat.com>
  *
  * This program is free software; you can redistribute it and/or modify it
  * under the terms of version 2 of the GNU General Public License as
-- 
2.5.5


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH 10/16] rtl8xxxu: Set register 0xfe10 on rtl8192cu based parts
  2016-04-14 20:37 [PATCH 00/16] rtl8xxxu - additional fixes Jes.Sorensen
                   ` (8 preceding siblings ...)
  2016-04-14 20:37 ` [PATCH 09/16] rtl8xxxu: Update copyright statement to include 2016 Jes.Sorensen
@ 2016-04-14 20:37 ` Jes.Sorensen
  2016-04-14 20:37 ` [PATCH 11/16] rtl8xxxu: Add TX power base values for gen1 parts Jes.Sorensen
                   ` (6 subsequent siblings)
  16 siblings, 0 replies; 20+ messages in thread
From: Jes.Sorensen @ 2016-04-14 20:37 UTC (permalink / raw)
  To: linux-wireless; +Cc: kvalo, Larry.Finger, Jes Sorensen

From: Jes Sorensen <Jes.Sorensen@redhat.com>

This register is undocumented in the vendor code, but it is set
unconditionally for all 8192cu/8188cu/8188ru parts.

Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
---
 drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.c b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.c
index de62f0b..6280d3d 100644
--- a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.c
+++ b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.c
@@ -7214,6 +7214,8 @@ static int rtl8192cu_power_on(struct rtl8xxxu_priv *priv)
 		CR_SCHEDULE_ENABLE | CR_MAC_TX_ENABLE | CR_MAC_RX_ENABLE;
 	rtl8xxxu_write16(priv, REG_CR, val16);
 
+	rtl8xxxu_write8(priv, 0xfe10, 0x19);
+
 	/*
 	 * Workaround for 8188RU LNA power leakage problem.
 	 */
-- 
2.5.5


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH 11/16] rtl8xxxu: Add TX power base values for gen1 parts
  2016-04-14 20:37 [PATCH 00/16] rtl8xxxu - additional fixes Jes.Sorensen
                   ` (9 preceding siblings ...)
  2016-04-14 20:37 ` [PATCH 10/16] rtl8xxxu: Set register 0xfe10 on rtl8192cu based parts Jes.Sorensen
@ 2016-04-14 20:37 ` Jes.Sorensen
  2016-04-14 20:37 ` [PATCH 12/16] rtl8xxxu: Fix 8188RU support Jes.Sorensen
                   ` (5 subsequent siblings)
  16 siblings, 0 replies; 20+ messages in thread
From: Jes.Sorensen @ 2016-04-14 20:37 UTC (permalink / raw)
  To: linux-wireless; +Cc: kvalo, Larry.Finger, Jes Sorensen

From: Jes Sorensen <Jes.Sorensen@redhat.com>

Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
---
 drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.c | 118 ++++++++++++++++++++---
 drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.h |  26 +++++
 2 files changed, 130 insertions(+), 14 deletions(-)

diff --git a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.c b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.c
index 6280d3d..422e7fa 100644
--- a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.c
+++ b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.c
@@ -214,6 +214,72 @@ static struct rtl8xxxu_reg8val rtl8192e_mac_init_table[] = {
 	{0xffff, 0xff},
 };
 
+static struct rtl8xxxu_power_base rtl8188r_power_base = {
+	.reg_0e00 = 0x06080808,
+	.reg_0e04 = 0x00040406,
+	.reg_0e08 = 0x00000000,
+	.reg_086c = 0x00000000,
+
+	.reg_0e10 = 0x04060608,
+	.reg_0e14 = 0x00020204,
+	.reg_0e18 = 0x04060608,
+	.reg_0e1c = 0x00020204,
+
+	.reg_0830 = 0x06080808,
+	.reg_0834 = 0x00040406,
+	.reg_0838 = 0x00000000,
+	.reg_086c_2 = 0x00000000,
+
+	.reg_083c = 0x04060608,
+	.reg_0848 = 0x00020204,
+	.reg_084c = 0x04060608,
+	.reg_0868 = 0x00020204,
+};
+
+static struct rtl8xxxu_power_base rtl8192c_power_base = {
+	.reg_0e00 = 0x07090c0c,
+	.reg_0e04 = 0x01020405,
+	.reg_0e08 = 0x00000000,
+	.reg_086c = 0x00000000,
+
+	.reg_0e10 = 0x0b0c0c0e,
+	.reg_0e14 = 0x01030506,
+	.reg_0e18 = 0x0b0c0d0e,
+	.reg_0e1c = 0x01030509,
+
+	.reg_0830 = 0x07090c0c,
+	.reg_0834 = 0x01020405,
+	.reg_0838 = 0x00000000,
+	.reg_086c_2 = 0x00000000,
+
+	.reg_083c = 0x0b0c0d0e,
+	.reg_0848 = 0x01030509,
+	.reg_084c = 0x0b0c0d0e,
+	.reg_0868 = 0x01030509,
+};
+
+static struct rtl8xxxu_power_base rtl8723a_power_base = {
+	.reg_0e00 = 0x0a0c0c0c,
+	.reg_0e04 = 0x02040608,
+	.reg_0e08 = 0x00000000,
+	.reg_086c = 0x00000000,
+
+	.reg_0e10 = 0x0a0c0d0e,
+	.reg_0e14 = 0x02040608,
+	.reg_0e18 = 0x0a0c0d0e,
+	.reg_0e1c = 0x02040608,
+
+	.reg_0830 = 0x0a0c0c0c,
+	.reg_0834 = 0x02040608,
+	.reg_0838 = 0x00000000,
+	.reg_086c_2 = 0x00000000,
+
+	.reg_083c = 0x0a0c0d0e,
+	.reg_0848 = 0x02040608,
+	.reg_084c = 0x0a0c0d0e,
+	.reg_0868 = 0x02040608,
+};
+
 static struct rtl8xxxu_reg32val rtl8723a_phy_1t_init_table[] = {
 	{0x800, 0x80040000}, {0x804, 0x00000003},
 	{0x808, 0x0000fc00}, {0x80c, 0x0000000a},
@@ -2410,6 +2476,7 @@ static void rtl8723bu_config_channel(struct ieee80211_hw *hw)
 static void
 rtl8723a_set_tx_power(struct rtl8xxxu_priv *priv, int channel, bool ht40)
 {
+	struct rtl8xxxu_power_base *power_base = priv->power_base;
 	u8 cck[RTL8723A_MAX_RF_PATHS], ofdm[RTL8723A_MAX_RF_PATHS];
 	u8 ofdmbase[RTL8723A_MAX_RF_PATHS], mcsbase[RTL8723A_MAX_RF_PATHS];
 	u32 val32, ofdm_a, ofdm_b, mcs_a, mcs_b;
@@ -2418,8 +2485,8 @@ rtl8723a_set_tx_power(struct rtl8xxxu_priv *priv, int channel, bool ht40)
 
 	group = rtl8723a_channel_to_group(channel);
 
-	cck[0] = priv->cck_tx_power_index_A[group];
-	cck[1] = priv->cck_tx_power_index_B[group];
+	cck[0] = priv->cck_tx_power_index_A[group] - 1;
+	cck[1] = priv->cck_tx_power_index_B[group] - 1;
 
 	if (priv->hi_pa) {
 		if (cck[0] > 0x20)
@@ -2430,6 +2497,10 @@ rtl8723a_set_tx_power(struct rtl8xxxu_priv *priv, int channel, bool ht40)
 
 	ofdm[0] = priv->ht40_1s_tx_power_index_A[group];
 	ofdm[1] = priv->ht40_1s_tx_power_index_B[group];
+	if (ofdm[0])
+		ofdm[0] -= 1;
+	if (ofdm[1])
+		ofdm[1] -= 1;
 
 	ofdmbase[0] = ofdm[0] +	priv->ofdm_tx_power_index_diff[group].a;
 	ofdmbase[1] = ofdm[1] +	priv->ofdm_tx_power_index_diff[group].b;
@@ -2485,27 +2556,39 @@ rtl8723a_set_tx_power(struct rtl8xxxu_priv *priv, int channel, bool ht40)
 		ofdmbase[0] << 16 | ofdmbase[0] << 24;
 	ofdm_b = ofdmbase[1] | ofdmbase[1] << 8 |
 		ofdmbase[1] << 16 | ofdmbase[1] << 24;
-	rtl8xxxu_write32(priv, REG_TX_AGC_A_RATE18_06, ofdm_a);
-	rtl8xxxu_write32(priv, REG_TX_AGC_B_RATE18_06, ofdm_b);
 
-	rtl8xxxu_write32(priv, REG_TX_AGC_A_RATE54_24, ofdm_a);
-	rtl8xxxu_write32(priv, REG_TX_AGC_B_RATE54_24, ofdm_b);
+	rtl8xxxu_write32(priv, REG_TX_AGC_A_RATE18_06,
+			 ofdm_a + power_base->reg_0e00);
+	rtl8xxxu_write32(priv, REG_TX_AGC_B_RATE18_06,
+			 ofdm_b + power_base->reg_0830);
+
+	rtl8xxxu_write32(priv, REG_TX_AGC_A_RATE54_24,
+			 ofdm_a + power_base->reg_0e04);
+	rtl8xxxu_write32(priv, REG_TX_AGC_B_RATE54_24,
+			 ofdm_b + power_base->reg_0834);
 
 	mcs_a = mcsbase[0] | mcsbase[0] << 8 |
 		mcsbase[0] << 16 | mcsbase[0] << 24;
 	mcs_b = mcsbase[1] | mcsbase[1] << 8 |
 		mcsbase[1] << 16 | mcsbase[1] << 24;
 
-	rtl8xxxu_write32(priv, REG_TX_AGC_A_MCS03_MCS00, mcs_a);
-	rtl8xxxu_write32(priv, REG_TX_AGC_B_MCS03_MCS00, mcs_b);
+	rtl8xxxu_write32(priv, REG_TX_AGC_A_MCS03_MCS00,
+			 mcs_a + power_base->reg_0e10);
+	rtl8xxxu_write32(priv, REG_TX_AGC_B_MCS03_MCS00,
+			 mcs_b + power_base->reg_083c);
 
-	rtl8xxxu_write32(priv, REG_TX_AGC_A_MCS07_MCS04, mcs_a);
-	rtl8xxxu_write32(priv, REG_TX_AGC_B_MCS07_MCS04, mcs_b);
+	rtl8xxxu_write32(priv, REG_TX_AGC_A_MCS07_MCS04,
+			 mcs_a + power_base->reg_0e14);
+	rtl8xxxu_write32(priv, REG_TX_AGC_B_MCS07_MCS04,
+			 mcs_b + power_base->reg_0848);
 
-	rtl8xxxu_write32(priv, REG_TX_AGC_A_MCS11_MCS08, mcs_a);
-	rtl8xxxu_write32(priv, REG_TX_AGC_B_MCS11_MCS08, mcs_b);
+	rtl8xxxu_write32(priv, REG_TX_AGC_A_MCS11_MCS08,
+			 mcs_a + power_base->reg_0e18);
+	rtl8xxxu_write32(priv, REG_TX_AGC_B_MCS11_MCS08,
+			 mcs_b + power_base->reg_084c);
 
-	rtl8xxxu_write32(priv, REG_TX_AGC_A_MCS15_MCS12, mcs_a);
+	rtl8xxxu_write32(priv, REG_TX_AGC_A_MCS15_MCS12,
+			 mcs_a + power_base->reg_0e1c);
 	for (i = 0; i < 3; i++) {
 		if (i != 2)
 			val8 = (mcsbase[0] > 8) ? (mcsbase[0] - 8) : 0;
@@ -2513,7 +2596,8 @@ rtl8723a_set_tx_power(struct rtl8xxxu_priv *priv, int channel, bool ht40)
 			val8 = (mcsbase[0] > 6) ? (mcsbase[0] - 6) : 0;
 		rtl8xxxu_write8(priv, REG_OFDM0_XC_TX_IQ_IMBALANCE + i, val8);
 	}
-	rtl8xxxu_write32(priv, REG_TX_AGC_B_MCS15_MCS12, mcs_b);
+	rtl8xxxu_write32(priv, REG_TX_AGC_B_MCS15_MCS12,
+			 mcs_b + power_base->reg_0868);
 	for (i = 0; i < 3; i++) {
 		if (i != 2)
 			val8 = (mcsbase[1] > 8) ? (mcsbase[1] - 8) : 0;
@@ -2920,6 +3004,9 @@ static int rtl8723au_parse_efuse(struct rtl8xxxu_priv *priv)
 		priv->has_xtalk = 1;
 		priv->xtalk = priv->efuse_wifi.efuse8723.xtal_k & 0x3f;
 	}
+
+	priv->power_base = &rtl8723a_power_base;
+
 	dev_info(&priv->udev->dev, "Vendor: %.7s\n",
 		 efuse->vendor_name);
 	dev_info(&priv->udev->dev, "Product: %.41s\n",
@@ -3052,10 +3139,13 @@ static int rtl8192cu_parse_efuse(struct rtl8xxxu_priv *priv)
 	dev_info(&priv->udev->dev, "Product: %.20s\n",
 		 efuse->device_name);
 
+	priv->power_base = &rtl8192c_power_base;
+
 	if (efuse->rf_regulatory & 0x20) {
 		sprintf(priv->chip_name, "8188RU");
 		priv->rtl_chip = RTL8188R;
 		priv->hi_pa = 1;
+		priv->power_base = &rtl8188r_power_base;
 	}
 
 	if (rtl8xxxu_debug & RTL8XXXU_DEBUG_EFUSE) {
diff --git a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.h b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.h
index a1b076c..ebd1a6e 100644
--- a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.h
+++ b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.h
@@ -630,6 +630,31 @@ struct rtl8xxxu_firmware_header {
 };
 
 /*
+ * 8723au/8192cu/8188ru required base power index offset tables.
+ */
+struct rtl8xxxu_power_base {
+	u32 reg_0e00;
+	u32 reg_0e04;
+	u32 reg_0e08;
+	u32 reg_086c;
+
+	u32 reg_0e10;
+	u32 reg_0e14;
+	u32 reg_0e18;
+	u32 reg_0e1c;
+
+	u32 reg_0830;
+	u32 reg_0834;
+	u32 reg_0838;
+	u32 reg_086c_2;
+
+	u32 reg_083c;
+	u32 reg_0848;
+	u32 reg_084c;
+	u32 reg_0868;
+};
+
+/*
  * The 8723au has 3 channel groups: 1-3, 4-9, and 10-14
  */
 struct rtl8723au_idx {
@@ -1201,6 +1226,7 @@ struct rtl8xxxu_priv {
 	struct rtl8723au_idx ofdm_tx_power_diff[RTL8723B_TX_COUNT];
 	struct rtl8723au_idx ht20_tx_power_diff[RTL8723B_TX_COUNT];
 	struct rtl8723au_idx ht40_tx_power_diff[RTL8723B_TX_COUNT];
+	struct rtl8xxxu_power_base *power_base;
 	u32 chip_cut:4;
 	u32 rom_rev:4;
 	u32 is_multi_func:1;
-- 
2.5.5


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH 12/16] rtl8xxxu: Fix 8188RU support
  2016-04-14 20:37 [PATCH 00/16] rtl8xxxu - additional fixes Jes.Sorensen
                   ` (10 preceding siblings ...)
  2016-04-14 20:37 ` [PATCH 11/16] rtl8xxxu: Add TX power base values for gen1 parts Jes.Sorensen
@ 2016-04-14 20:37 ` Jes.Sorensen
  2016-04-14 20:37 ` [PATCH 13/16] rtl8xxxu: Fix OOPS if user tries to add device via /sys Jes.Sorensen
                   ` (4 subsequent siblings)
  16 siblings, 0 replies; 20+ messages in thread
From: Jes.Sorensen @ 2016-04-14 20:37 UTC (permalink / raw)
  To: linux-wireless; +Cc: kvalo, Larry.Finger, Jes Sorensen

From: Jes Sorensen <Jes.Sorensen@redhat.com>

The 8188RU does not like PAPE to be enabled, while all the other gen1
parts seem to require it.

This makes the RTL8188RU able to associate for me.

Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
---
 drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.c | 21 ++++++++++++++-------
 drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.h |  1 +
 2 files changed, 15 insertions(+), 7 deletions(-)

diff --git a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.c b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.c
index 422e7fa..cf7832b 100644
--- a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.c
+++ b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.c
@@ -3145,6 +3145,7 @@ static int rtl8192cu_parse_efuse(struct rtl8xxxu_priv *priv)
 		sprintf(priv->chip_name, "8188RU");
 		priv->rtl_chip = RTL8188R;
 		priv->hi_pa = 1;
+		priv->no_pape = 1;
 		priv->power_base = &rtl8188r_power_base;
 	}
 
@@ -5555,9 +5556,12 @@ static void rtl8xxxu_phy_iqcalibrate(struct rtl8xxxu_priv *priv,
 	rtl8xxxu_write32(priv, REG_OFDM0_TR_MUX_PAR, 0x000800e4);
 	rtl8xxxu_write32(priv, REG_FPGA0_XCD_RF_SW_CTRL, 0x22204000);
 
-	val32 = rtl8xxxu_read32(priv, REG_FPGA0_XAB_RF_SW_CTRL);
-	val32 |= (FPGA0_RF_PAPE | (FPGA0_RF_PAPE << FPGA0_RF_BD_CTRL_SHIFT));
-	rtl8xxxu_write32(priv, REG_FPGA0_XAB_RF_SW_CTRL, val32);
+	if (!priv->no_pape) {
+		val32 = rtl8xxxu_read32(priv, REG_FPGA0_XAB_RF_SW_CTRL);
+		val32 |= (FPGA0_RF_PAPE |
+			  (FPGA0_RF_PAPE << FPGA0_RF_BD_CTRL_SHIFT));
+		rtl8xxxu_write32(priv, REG_FPGA0_XAB_RF_SW_CTRL, val32);
+	}
 
 	val32 = rtl8xxxu_read32(priv, REG_FPGA0_XA_RF_INT_OE);
 	val32 &= ~BIT(10);
@@ -7804,11 +7808,14 @@ static int rtl8xxxu_init_device(struct ieee80211_hw *hw)
 		rtl8xxxu_write32(priv, REG_FPGA0_TX_INFO, 0x00000003);
 
 	val32 = FPGA0_RF_TRSW | FPGA0_RF_TRSWB | FPGA0_RF_ANTSW |
-		FPGA0_RF_ANTSWB | FPGA0_RF_PAPE |
-		((FPGA0_RF_ANTSW | FPGA0_RF_ANTSWB | FPGA0_RF_PAPE) <<
-		 FPGA0_RF_BD_CTRL_SHIFT);
-
+		FPGA0_RF_ANTSWB |
+		((FPGA0_RF_ANTSW | FPGA0_RF_ANTSWB) << FPGA0_RF_BD_CTRL_SHIFT);
+	if (!priv->no_pape) {
+		val32 |= (FPGA0_RF_PAPE |
+			  (FPGA0_RF_PAPE << FPGA0_RF_BD_CTRL_SHIFT));
+	}
 	rtl8xxxu_write32(priv, REG_FPGA0_XAB_RF_SW_CTRL, val32);
+
 	/* 0x860[6:5]= 00 - why? - this sets antenna B */
 	if (priv->rtl_chip != RTL8192E)
 		rtl8xxxu_write32(priv, REG_FPGA0_XA_RF_INT_OE, 0x66f60210);
diff --git a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.h b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.h
index ebd1a6e..3e2643c 100644
--- a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.h
+++ b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.h
@@ -1287,6 +1287,7 @@ struct rtl8xxxu_priv {
 	u32 bb_recovery_backup[RTL8XXXU_BB_REGS];
 	enum rtl8xxxu_rtl_chip rtl_chip;
 	u8 pi_enabled:1;
+	u8 no_pape:1;
 	u8 int_buf[USB_INTR_CONTENT_LENGTH];
 };
 
-- 
2.5.5


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH 13/16] rtl8xxxu: Fix OOPS if user tries to add device via /sys
  2016-04-14 20:37 [PATCH 00/16] rtl8xxxu - additional fixes Jes.Sorensen
                   ` (11 preceding siblings ...)
  2016-04-14 20:37 ` [PATCH 12/16] rtl8xxxu: Fix 8188RU support Jes.Sorensen
@ 2016-04-14 20:37 ` Jes.Sorensen
  2016-04-14 20:37 ` [PATCH 14/16] rtl8xxxu: Implement rtl8192e_enable_rf() Jes.Sorensen
                   ` (3 subsequent siblings)
  16 siblings, 0 replies; 20+ messages in thread
From: Jes.Sorensen @ 2016-04-14 20:37 UTC (permalink / raw)
  To: linux-wireless; +Cc: kvalo, Larry.Finger, Jes Sorensen

From: Jes Sorensen <Jes.Sorensen@redhat.com>

This driver relies on driver_info in struct usb_device_id, so allowing
adding a device via /sys/bus/usb/drivers/rtl8xxxu/new_id will cause a
NULL pointer dereference.

Set .no_dynamic_id = 1 to disable hot add of USB IDs.

Reported-by: Xose Vazquez Perez <xose.vazquez@gmail.com>
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
---
 drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.c b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.c
index cf7832b..2d92e64 100644
--- a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.c
+++ b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.c
@@ -10141,6 +10141,7 @@ static struct usb_driver rtl8xxxu_driver = {
 	.probe = rtl8xxxu_probe,
 	.disconnect = rtl8xxxu_disconnect,
 	.id_table = dev_table,
+	.no_dynamic_id = 1,
 	.disable_hub_initiated_lpm = 1,
 };
 
-- 
2.5.5


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH 14/16] rtl8xxxu: Implement rtl8192e_enable_rf()
  2016-04-14 20:37 [PATCH 00/16] rtl8xxxu - additional fixes Jes.Sorensen
                   ` (12 preceding siblings ...)
  2016-04-14 20:37 ` [PATCH 13/16] rtl8xxxu: Fix OOPS if user tries to add device via /sys Jes.Sorensen
@ 2016-04-14 20:37 ` Jes.Sorensen
  2016-04-14 20:37 ` [PATCH 15/16] rtl8xxxu: Pause TX before calling disable_rf() Jes.Sorensen
                   ` (2 subsequent siblings)
  16 siblings, 0 replies; 20+ messages in thread
From: Jes.Sorensen @ 2016-04-14 20:37 UTC (permalink / raw)
  To: linux-wireless; +Cc: kvalo, Larry.Finger, Jes Sorensen

From: Jes Sorensen <Jes.Sorensen@redhat.com>

This implements an 8192eu specific enable_rf() function. The 8192eu is
not a combo device, so no need for doing the BT specific bits needed
by the 8723bu.

Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
---
 drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.c | 39 +++++++++++++++++++++++-
 1 file changed, 38 insertions(+), 1 deletion(-)

diff --git a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.c b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.c
index 2d92e64..a86b5c4 100644
--- a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.c
+++ b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.c
@@ -7517,6 +7517,43 @@ static void rtl8723bu_set_ps_tdma(struct rtl8xxxu_priv *priv,
 }
 #endif
 
+static void rtl8192e_enable_rf(struct rtl8xxxu_priv *priv)
+{
+	u32 val32;
+	u8 val8;
+
+	val8 = rtl8xxxu_read8(priv, REG_GPIO_MUXCFG);
+	val8 |= BIT(5);
+	rtl8xxxu_write8(priv, REG_GPIO_MUXCFG, val8);
+
+	/*
+	 * WLAN action by PTA
+	 */
+	rtl8xxxu_write8(priv, REG_WLAN_ACT_CONTROL_8723B, 0x04);
+
+	val32 = rtl8xxxu_read32(priv, REG_PWR_DATA);
+	val32 |= PWR_DATA_EEPRPAD_RFE_CTRL_EN;
+	rtl8xxxu_write32(priv, REG_PWR_DATA, val32);
+
+	val32 = rtl8xxxu_read32(priv, REG_RFE_BUFFER);
+	val32 |= (BIT(0) | BIT(1));
+	rtl8xxxu_write32(priv, REG_RFE_BUFFER, val32);
+
+	rtl8xxxu_write8(priv, REG_RFE_CTRL_ANTA_SRC, 0x77);
+
+	val32 = rtl8xxxu_read32(priv, REG_LEDCFG0);
+	val32 &= ~BIT(24);
+	val32 |= BIT(23);
+	rtl8xxxu_write32(priv, REG_LEDCFG0, val32);
+
+	/*
+	 * Fix external switch Main->S1, Aux->S0
+	 */
+	val8 = rtl8xxxu_read8(priv, REG_PAD_CTRL1);
+	val8 &= ~BIT(0);
+	rtl8xxxu_write8(priv, REG_PAD_CTRL1, val8);
+}
+
 static void rtl8723b_enable_rf(struct rtl8xxxu_priv *priv)
 {
 	struct h2c_cmd h2c;
@@ -9953,7 +9990,7 @@ static struct rtl8xxxu_fileops rtl8192eu_fops = {
 	.phy_iq_calibrate = rtl8192eu_phy_iq_calibrate,
 	.config_channel = rtl8723bu_config_channel,
 	.parse_rx_desc = rtl8xxxu_parse_rxdesc24,
-	.enable_rf = rtl8723b_enable_rf,
+	.enable_rf = rtl8192e_enable_rf,
 	.disable_rf = rtl8723b_disable_rf,
 	.usb_quirks = rtl8xxxu_gen2_usb_quirks,
 	.set_tx_power = rtl8192e_set_tx_power,
-- 
2.5.5


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH 15/16] rtl8xxxu: Pause TX before calling disable_rf()
  2016-04-14 20:37 [PATCH 00/16] rtl8xxxu - additional fixes Jes.Sorensen
                   ` (13 preceding siblings ...)
  2016-04-14 20:37 ` [PATCH 14/16] rtl8xxxu: Implement rtl8192e_enable_rf() Jes.Sorensen
@ 2016-04-14 20:37 ` Jes.Sorensen
  2016-04-14 20:37 ` [PATCH 16/16] rtl8xxxu: MAINTAINERS: Update to point to the active devel branch Jes.Sorensen
  2016-04-14 20:50 ` [PATCH 00/16] rtl8xxxu - additional fixes Larry Finger
  16 siblings, 0 replies; 20+ messages in thread
From: Jes.Sorensen @ 2016-04-14 20:37 UTC (permalink / raw)
  To: linux-wireless; +Cc: kvalo, Larry.Finger, Jes Sorensen

From: Jes Sorensen <Jes.Sorensen@redhat.com>

All the disable_rf() functions were setting REG_TXPAUSE to 0xff to
stop transmission. Do it centrally before calling disable_rf()
instead.

Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
---
 drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.c | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.c b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.c
index a86b5c4..928ca56 100644
--- a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.c
+++ b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.c
@@ -2125,8 +2125,6 @@ static void rtl8723a_disable_rf(struct rtl8xxxu_priv *priv)
 	u8 sps0;
 	u32 val32;
 
-	rtl8xxxu_write8(priv, REG_TXPAUSE, 0xff);
-
 	sps0 = rtl8xxxu_read8(priv, REG_SPS0_CTRL);
 
 	/* RF RX code for preamble power saving */
@@ -7665,8 +7663,6 @@ static void rtl8723b_disable_rf(struct rtl8xxxu_priv *priv)
 {
 	u32 val32;
 
-	rtl8xxxu_write8(priv, REG_TXPAUSE, 0xff);
-
 	val32 = rtl8xxxu_read32(priv, REG_RX_WAIT_CCA);
 	val32 &= ~(BIT(22) | BIT(23));
 	rtl8xxxu_write32(priv, REG_RX_WAIT_CCA, val32);
@@ -9591,6 +9587,8 @@ static void rtl8xxxu_stop(struct ieee80211_hw *hw)
 	if (priv->usb_interrupts)
 		usb_kill_anchored_urbs(&priv->int_anchor);
 
+	rtl8xxxu_write8(priv, REG_TXPAUSE, 0xff);
+
 	priv->fops->disable_rf(priv);
 
 	/*
-- 
2.5.5


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* [PATCH 16/16] rtl8xxxu: MAINTAINERS: Update to point to the active devel branch
  2016-04-14 20:37 [PATCH 00/16] rtl8xxxu - additional fixes Jes.Sorensen
                   ` (14 preceding siblings ...)
  2016-04-14 20:37 ` [PATCH 15/16] rtl8xxxu: Pause TX before calling disable_rf() Jes.Sorensen
@ 2016-04-14 20:37 ` Jes.Sorensen
  2016-04-14 20:50 ` [PATCH 00/16] rtl8xxxu - additional fixes Larry Finger
  16 siblings, 0 replies; 20+ messages in thread
From: Jes.Sorensen @ 2016-04-14 20:37 UTC (permalink / raw)
  To: linux-wireless; +Cc: kvalo, Larry.Finger, Jes Sorensen

From: Jes Sorensen <Jes.Sorensen@redhat.com>

Update the MAINTAINERS info to reflect active development of the
rtl8xxxu driver.

Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
---
 MAINTAINERS | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/MAINTAINERS b/MAINTAINERS
index 4851f02..6ac970b 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -9490,7 +9490,7 @@ F:	drivers/net/wireless/realtek/rtlwifi/rtl8192ce/
 RTL8XXXU WIRELESS DRIVER (rtl8xxxu)
 M:	Jes Sorensen <Jes.Sorensen@redhat.com>
 L:	linux-wireless@vger.kernel.org
-T:	git git://git.kernel.org/pub/scm/linux/kernel/git/jes/linux.git rtl8723au-mac80211
+T:	git git://git.kernel.org/pub/scm/linux/kernel/git/jes/linux.git rtl8xxxu-devel
 S:	Maintained
 F:	drivers/net/wireless/realtek/rtl8xxxu/
 
-- 
2.5.5


^ permalink raw reply related	[flat|nested] 20+ messages in thread

* Re: [PATCH 00/16] rtl8xxxu - additional fixes
  2016-04-14 20:37 [PATCH 00/16] rtl8xxxu - additional fixes Jes.Sorensen
                   ` (15 preceding siblings ...)
  2016-04-14 20:37 ` [PATCH 16/16] rtl8xxxu: MAINTAINERS: Update to point to the active devel branch Jes.Sorensen
@ 2016-04-14 20:50 ` Larry Finger
  2016-04-14 21:11   ` Jes Sorensen
  16 siblings, 1 reply; 20+ messages in thread
From: Larry Finger @ 2016-04-14 20:50 UTC (permalink / raw)
  To: Jes.Sorensen, linux-wireless; +Cc: kvalo

On 04/14/2016 03:37 PM, Jes.Sorensen@redhat.com wrote:
> From: Jes Sorensen <Jes.Sorensen@redhat.com>
>
> Hi,
>
> This is a second set of rtl8xxxu related patches, which goes on top of
> the set I sent out earlier today. If you only have time to go through
> one set, please look at the other set.
>
> This set primarily contains fixes to make rtl8188ru v2 devices work
> again. I have reports that v1 devices still don't work, but I don't
> have one of those, so I am not able to test this.
>
> This also includes a fix for a crash reported by Xose Vazquez Peres
> when trying to hot add a USB ID. It marks 0x050d:0x1004 as tested,
> reported by Andrea Merello, and handles an old bug where the
> driver didn't unregister from mac80211 before shutting down the
> device. Last it includes a uninitialized return value fix from Colin
> Ian King.

I can confirm that the rtl8188ru v1 devices still do not work. Using "iwlist 
scan", my APs at 2m have signal levels from -90 to -98 dBm. I do not know if it 
is a problem in setting the gain, or if the antenna selection is wrong.

By the way, I have the same problem with the rtl8723bu device.

Larry



^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [PATCH 00/16] rtl8xxxu - additional fixes
  2016-04-14 20:50 ` [PATCH 00/16] rtl8xxxu - additional fixes Larry Finger
@ 2016-04-14 21:11   ` Jes Sorensen
  0 siblings, 0 replies; 20+ messages in thread
From: Jes Sorensen @ 2016-04-14 21:11 UTC (permalink / raw)
  To: Larry Finger; +Cc: linux-wireless, kvalo

Larry Finger <Larry.Finger@lwfinger.net> writes:
> On 04/14/2016 03:37 PM, Jes.Sorensen@redhat.com wrote:
>> From: Jes Sorensen <Jes.Sorensen@redhat.com>
>>
>> Hi,
>>
>> This is a second set of rtl8xxxu related patches, which goes on top of
>> the set I sent out earlier today. If you only have time to go through
>> one set, please look at the other set.
>>
>> This set primarily contains fixes to make rtl8188ru v2 devices work
>> again. I have reports that v1 devices still don't work, but I don't
>> have one of those, so I am not able to test this.
>>
>> This also includes a fix for a crash reported by Xose Vazquez Peres
>> when trying to hot add a USB ID. It marks 0x050d:0x1004 as tested,
>> reported by Andrea Merello, and handles an old bug where the
>> driver didn't unregister from mac80211 before shutting down the
>> device. Last it includes a uninitialized return value fix from Colin
>> Ian King.
>
> I can confirm that the rtl8188ru v1 devices still do not work. Using
> "iwlist scan", my APs at 2m have signal levels from -90 to -98 dBm. I
> do not know if it is a problem in setting the gain, or if the antenna
> selection is wrong.
>
> By the way, I have the same problem with the rtl8723bu device.

Note that the Realtek devices don't allow you to set gains for RX, only
for TX power.

For the 8723bu it works for me if I remove the device, reload the
driver, restart NetworkMangler, then insert the device. There is
something in the device reset code that doesn't work right at the
moment, but I haven't figured it out yet.

The 8188ru v1 issue is likely different from the 8723bu issue though.

I also won't guarantee you can trust the signal levels reported by
iwlist scan .... it's possible I haven't implemented all of that yet,
but I could be wrong there.

In either case, support for some usage is better than no usage, until we
figure out the remaining problems :)

Cheers,
Jes

^ permalink raw reply	[flat|nested] 20+ messages in thread

* Re: [01/16] rtl8xxxu: Mark 0x050d:0x1004 as tested
  2016-04-14 20:37 ` [PATCH 01/16] rtl8xxxu: Mark 0x050d:0x1004 as tested Jes.Sorensen
@ 2016-04-15 18:39   ` Kalle Valo
  0 siblings, 0 replies; 20+ messages in thread
From: Kalle Valo @ 2016-04-15 18:39 UTC (permalink / raw)
  To: Jes Sorensen; +Cc: linux-wireless, Larry.Finger, Jes Sorensen


> From: Jes Sorensen <Jes.Sorensen@redhat.com>
> 
> This dongle was tested successfully by Andrea Merello
> 
> Reported-by: Andrea Merello <andrea.merello@gmail.com>
> Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>

Thanks, 16 patches applied to wireless-drivers-next.git:

e1d70c9b0400 rtl8xxxu: Mark 0x050d:0x1004 as tested
37ba4b6265ea rtl8xxxu: fix uninitialized return value in ret
4062b8ffec36 rtl8xxxu: Move PHY RF init into device specific functions
b591e982bc44 rtl8xxxu: For devices with external PA (8188RU), limit CCK TX power
78a8421959af rtl8xxxu: Apply 8188RU workaround for UMC B cut parts correctly
8d95c8084f56 rtl8xxxu: Use rtl_chip == RTL8188R to identify high PA parts
8e2549609043 rtl8xxxu: Match 8723bu power down sequence to vendor driver
8cae2f1da87c rtl8xxxu: Unregister from mac80211 before shutting down the device
eb18806261da rtl8xxxu: Update copyright statement to include 2016
b9f9d6992f83 rtl8xxxu: Set register 0xfe10 on rtl8192cu based parts
2fc0b8e5a17d rtl8xxxu: Add TX power base values for gen1 parts
cabb550e2b97 rtl8xxxu: Fix 8188RU support
6a62f9d5273d rtl8xxxu: Fix OOPS if user tries to add device via /sys
ae5c01fd2fd8 rtl8xxxu: Implement rtl8192e_enable_rf()
265697eb2f1b rtl8xxxu: Pause TX before calling disable_rf()
171a900c4eb7 rtl8xxxu: MAINTAINERS: Update to point to the active devel branch

Kalle Valo

^ permalink raw reply	[flat|nested] 20+ messages in thread

end of thread, other threads:[~2016-04-15 18:39 UTC | newest]

Thread overview: 20+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-04-14 20:37 [PATCH 00/16] rtl8xxxu - additional fixes Jes.Sorensen
2016-04-14 20:37 ` [PATCH 01/16] rtl8xxxu: Mark 0x050d:0x1004 as tested Jes.Sorensen
2016-04-15 18:39   ` [01/16] " Kalle Valo
2016-04-14 20:37 ` [PATCH 02/16] rtl8xxxu: fix uninitialized return value in ret Jes.Sorensen
2016-04-14 20:37 ` [PATCH 03/16] rtl8xxxu: Move PHY RF init into device specific functions Jes.Sorensen
2016-04-14 20:37 ` [PATCH 04/16] rtl8xxxu: For devices with external PA (8188RU), limit CCK TX power Jes.Sorensen
2016-04-14 20:37 ` [PATCH 05/16] rtl8xxxu: Apply 8188RU workaround for UMC B cut parts correctly Jes.Sorensen
2016-04-14 20:37 ` [PATCH 06/16] rtl8xxxu: Use rtl_chip == RTL8188R to identify high PA parts Jes.Sorensen
2016-04-14 20:37 ` [PATCH 07/16] rtl8xxxu: Match 8723bu power down sequence to vendor driver Jes.Sorensen
2016-04-14 20:37 ` [PATCH 08/16] rtl8xxxu: Unregister from mac80211 before shutting down the device Jes.Sorensen
2016-04-14 20:37 ` [PATCH 09/16] rtl8xxxu: Update copyright statement to include 2016 Jes.Sorensen
2016-04-14 20:37 ` [PATCH 10/16] rtl8xxxu: Set register 0xfe10 on rtl8192cu based parts Jes.Sorensen
2016-04-14 20:37 ` [PATCH 11/16] rtl8xxxu: Add TX power base values for gen1 parts Jes.Sorensen
2016-04-14 20:37 ` [PATCH 12/16] rtl8xxxu: Fix 8188RU support Jes.Sorensen
2016-04-14 20:37 ` [PATCH 13/16] rtl8xxxu: Fix OOPS if user tries to add device via /sys Jes.Sorensen
2016-04-14 20:37 ` [PATCH 14/16] rtl8xxxu: Implement rtl8192e_enable_rf() Jes.Sorensen
2016-04-14 20:37 ` [PATCH 15/16] rtl8xxxu: Pause TX before calling disable_rf() Jes.Sorensen
2016-04-14 20:37 ` [PATCH 16/16] rtl8xxxu: MAINTAINERS: Update to point to the active devel branch Jes.Sorensen
2016-04-14 20:50 ` [PATCH 00/16] rtl8xxxu - additional fixes Larry Finger
2016-04-14 21:11   ` Jes Sorensen

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).