From c795794eef8737f6272b2acce9025807af52da81 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Rojas?= Date: Thu, 29 Sep 2016 09:48:09 +0200 Subject: mac80211: use upstream patches for rtl8xxxu MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Also improves rtl8188eu support. Signed-off-by: Álvaro Fernández Rojas --- ...tl8xxxu-Implement-rtl8188eu_active_to_emu.patch | 68 ++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 package/kernel/mac80211/patches/657-0047-rtl8xxxu-Implement-rtl8188eu_active_to_emu.patch (limited to 'package/kernel/mac80211/patches/657-0047-rtl8xxxu-Implement-rtl8188eu_active_to_emu.patch') diff --git a/package/kernel/mac80211/patches/657-0047-rtl8xxxu-Implement-rtl8188eu_active_to_emu.patch b/package/kernel/mac80211/patches/657-0047-rtl8xxxu-Implement-rtl8188eu_active_to_emu.patch new file mode 100644 index 0000000000..4c11f02450 --- /dev/null +++ b/package/kernel/mac80211/patches/657-0047-rtl8xxxu-Implement-rtl8188eu_active_to_emu.patch @@ -0,0 +1,68 @@ +From e36a438e6ae82a4426c06babb48bc3c4567aaec5 Mon Sep 17 00:00:00 2001 +From: Jes Sorensen +Date: Fri, 26 Aug 2016 15:16:32 -0400 +Subject: [PATCH] rtl8xxxu: Implement rtl8188eu_active_to_emu() + +Per the vendor driver's sequence table, this seems to be the correct +way to disable RF on the 8188eu, even if the driver doesn't actually +call the sequence by itself. + +Signed-off-by: Jes Sorensen +--- + .../net/wireless/realtek/rtl8xxxu/rtl8xxxu_8188e.c | 38 ++++++++++++++++++++++ + 1 file changed, 38 insertions(+) + +--- a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_8188e.c ++++ b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_8188e.c +@@ -1155,6 +1155,42 @@ exit: + return ret; + } + ++static int rtl8188eu_active_to_emu(struct rtl8xxxu_priv *priv) ++{ ++ u8 val8; ++ int count, ret = 0; ++ ++ /* Turn off RF */ ++ rtl8xxxu_write8(priv, REG_RF_CTRL, 0); ++ ++ /* LDO Sleep mode */ ++ val8 = rtl8xxxu_read8(priv, REG_LPLDO_CTRL); ++ val8 |= BIT(4); ++ rtl8xxxu_write8(priv, REG_LPLDO_CTRL, val8); ++ ++ /* 0x0005[1] = 1 turn off MAC by HW state machine*/ ++ val8 = rtl8xxxu_read8(priv, REG_APS_FSMCO + 1); ++ val8 |= BIT(1); ++ rtl8xxxu_write8(priv, REG_APS_FSMCO + 1, val8); ++ ++ for (count = RTL8XXXU_MAX_REG_POLL; count; count--) { ++ val8 = rtl8xxxu_read8(priv, REG_APS_FSMCO + 1); ++ if ((val8 & BIT(1)) == 0) ++ break; ++ udelay(10); ++ } ++ ++ if (!count) { ++ dev_warn(&priv->udev->dev, "%s: Disabling MAC timed out\n", ++ __func__); ++ ret = -EBUSY; ++ goto exit; ++ } ++ ++exit: ++ return ret; ++} ++ + static int rtl8188eu_power_on(struct rtl8xxxu_priv *priv) + { + u16 val16; +@@ -1202,6 +1238,8 @@ static void rtl8188e_disable_rf(struct r + rtl8xxxu_write_rfreg(priv, RF_A, RF6052_REG_AC, 0); + if (priv->rf_paths == 2) + rtl8xxxu_write_rfreg(priv, RF_B, RF6052_REG_AC, 0); ++ ++ rtl8188eu_active_to_emu(priv); + } + + static void rtl8188e_usb_quirks(struct rtl8xxxu_priv *priv) -- cgit v1.2.3