2016-10-06 10:49:31 +00:00
|
|
|
From 0c6fa292a9c6d7f1b870c42ed9166674463206f1 Mon Sep 17 00:00:00 2001
|
2016-06-29 15:04:05 +00:00
|
|
|
From: Jes Sorensen <Jes.Sorensen@redhat.com>
|
|
|
|
Date: Tue, 19 Jul 2016 17:12:42 -0400
|
|
|
|
Subject: [PATCH] rtl8xxxu: Implement rtl8188eu_init_phy_rf()
|
|
|
|
|
|
|
|
Include the table rtl8188eu_radioa_init_table derived from vendor
|
|
|
|
driver. The vendor table relies on a hack setting RF6052_REG_RCK1 +
|
|
|
|
RF6052_REG_RCK2 with delays. This workaround is open coded here
|
|
|
|
instead of modifying the table parsing code.
|
|
|
|
|
|
|
|
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
|
|
|
|
---
|
|
|
|
.../net/wireless/realtek/rtl8xxxu/rtl8xxxu_8188e.c | 65 ++++++++++++++++++++++
|
|
|
|
1 file changed, 65 insertions(+)
|
|
|
|
|
|
|
|
--- a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_8188e.c
|
|
|
|
+++ b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_8188e.c
|
|
|
|
@@ -235,6 +235,54 @@ static struct rtl8xxxu_reg32val rtl8188e
|
|
|
|
{0xffff, 0xffffffff}
|
|
|
|
};
|
|
|
|
|
|
|
|
+static struct rtl8xxxu_rfregval rtl8188eu_radioa_init_table[] = {
|
|
|
|
+ {0x00, 0x00030000}, {0x08, 0x00084000},
|
|
|
|
+ {0x18, 0x00000407}, {0x19, 0x00000012},
|
|
|
|
+ {0x1e, 0x00080009}, {0x1f, 0x00000880},
|
|
|
|
+ {0x2f, 0x0001a060}, {0x3f, 0x00000000},
|
|
|
|
+ {0x42, 0x000060c0}, {0x57, 0x000d0000},
|
|
|
|
+ {0x58, 0x000be180}, {0x67, 0x00001552},
|
|
|
|
+ {0x83, 0x00000000}, {0xb0, 0x000ff8fc},
|
|
|
|
+ {0xb1, 0x00054400}, {0xb2, 0x000ccc19},
|
|
|
|
+ {0xb4, 0x00043003}, {0xb6, 0x0004953e},
|
|
|
|
+ {0xb7, 0x0001c718}, {0xb8, 0x000060ff},
|
|
|
|
+ {0xb9, 0x00080001}, {0xba, 0x00040000},
|
|
|
|
+ {0xbb, 0x00000400}, {0xbf, 0x000c0000},
|
|
|
|
+ {0xc2, 0x00002400}, {0xc3, 0x00000009},
|
|
|
|
+ {0xc4, 0x00040c91}, {0xc5, 0x00099999},
|
|
|
|
+ {0xc6, 0x000000a3}, {0xc7, 0x00088820},
|
|
|
|
+ {0xc8, 0x00076c06}, {0xc9, 0x00000000},
|
|
|
|
+ {0xca, 0x00080000}, {0xdf, 0x00000180},
|
|
|
|
+ {0xef, 0x000001a0}, {0x51, 0x0006b27d},
|
|
|
|
+ {0x52, 0x0007e49d}, /* Set to 0x0007e4dd for SDIO */
|
|
|
|
+ {0x53, 0x00000073}, {0x56, 0x00051ff3},
|
|
|
|
+ {0x35, 0x00000086}, {0x35, 0x00000186},
|
|
|
|
+ {0x35, 0x00000286}, {0x36, 0x00001c25},
|
|
|
|
+ {0x36, 0x00009c25}, {0x36, 0x00011c25},
|
|
|
|
+ {0x36, 0x00019c25}, {0xb6, 0x00048538},
|
|
|
|
+ {0x18, 0x00000c07}, {0x5a, 0x0004bd00},
|
|
|
|
+ {0x19, 0x000739d0}, {0x34, 0x0000adf3},
|
|
|
|
+ {0x34, 0x00009df0}, {0x34, 0x00008ded},
|
|
|
|
+ {0x34, 0x00007dea}, {0x34, 0x00006de7},
|
|
|
|
+ {0x34, 0x000054ee}, {0x34, 0x000044eb},
|
|
|
|
+ {0x34, 0x000034e8}, {0x34, 0x0000246b},
|
|
|
|
+ {0x34, 0x00001468}, {0x34, 0x0000006d},
|
|
|
|
+ {0x00, 0x00030159}, {0x84, 0x00068200},
|
|
|
|
+ {0x86, 0x000000ce}, {0x87, 0x00048a00},
|
|
|
|
+ {0x8e, 0x00065540}, {0x8f, 0x00088000},
|
|
|
|
+ {0xef, 0x000020a0}, {0x3b, 0x000f02b0},
|
|
|
|
+ {0x3b, 0x000ef7b0}, {0x3b, 0x000d4fb0},
|
|
|
|
+ {0x3b, 0x000cf060}, {0x3b, 0x000b0090},
|
|
|
|
+ {0x3b, 0x000a0080}, {0x3b, 0x00090080},
|
|
|
|
+ {0x3b, 0x0008f780}, {0x3b, 0x000722b0},
|
|
|
|
+ {0x3b, 0x0006f7b0}, {0x3b, 0x00054fb0},
|
|
|
|
+ {0x3b, 0x0004f060}, {0x3b, 0x00030090},
|
|
|
|
+ {0x3b, 0x00020080}, {0x3b, 0x00010080},
|
|
|
|
+ {0x3b, 0x0000f780}, {0xef, 0x000000a0},
|
|
|
|
+ {0x00, 0x00010159}, {0x18, 0x0000f407},
|
|
|
|
+ {0xff, 0xffffffff}
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
static int rtl8188eu_parse_efuse(struct rtl8xxxu_priv *priv)
|
|
|
|
{
|
|
|
|
struct rtl8188eu_efuse *efuse = &priv->efuse_wifi.efuse8188eu;
|
|
|
|
@@ -320,6 +368,22 @@ static void rtl8188eu_init_phy_bb(struct
|
|
|
|
rtl8xxxu_write32(priv, REG_AFE_XTAL_CTRL, val32);
|
|
|
|
}
|
|
|
|
|
|
|
|
+static int rtl8188eu_init_phy_rf(struct rtl8xxxu_priv *priv)
|
|
|
|
+{
|
|
|
|
+ int ret;
|
|
|
|
+
|
|
|
|
+ ret = rtl8xxxu_init_phy_rf(priv, rtl8188eu_radioa_init_table, RF_A);
|
|
|
|
+
|
|
|
|
+ msleep(100);
|
|
|
|
+ rtl8xxxu_write_rfreg(priv, RF_A, RF6052_REG_RCK2, 0x80003);
|
|
|
|
+ msleep(100);
|
|
|
|
+ rtl8xxxu_write_rfreg(priv, RF_A, RF6052_REG_RCK1, 0x00001);
|
|
|
|
+ rtl8xxxu_write_rfreg(priv, RF_A, RF6052_REG_RCK2, 0x80000);
|
|
|
|
+ rtl8xxxu_write_rfreg(priv, RF_A, RF6052_REG_AC, 0x33e60);
|
|
|
|
+
|
|
|
|
+ return ret;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
static void rtl8188e_disabled_to_emu(struct rtl8xxxu_priv *priv)
|
|
|
|
{
|
|
|
|
u16 val16;
|
|
|
|
@@ -454,6 +518,7 @@ struct rtl8xxxu_fileops rtl8188eu_fops =
|
|
|
|
.power_off = rtl8xxxu_power_off,
|
|
|
|
.reset_8051 = rtl8xxxu_reset_8051,
|
|
|
|
.init_phy_bb = rtl8188eu_init_phy_bb,
|
|
|
|
+ .init_phy_rf = rtl8188eu_init_phy_rf,
|
|
|
|
.usb_quirks = rtl8188e_usb_quirks,
|
|
|
|
.writeN_block_size = 128,
|
|
|
|
/*
|