1 From 6d5b4ef30046d74efe773613767d13d9ab95ed3d Mon Sep 17 00:00:00 2001
2 From: Jes Sorensen <Jes.Sorensen@redhat.com>
3 Date: Mon, 27 Jun 2016 15:19:04 -0400
4 Subject: [PATCH] rtl8xxxu: Add initial code to parse 8188eu efuse
6 This obtains the MAC address, but work is still needed to handle TX
9 Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
11 drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.h | 40 ++++++++++++++++++++++
12 .../net/wireless/realtek/rtl8xxxu/rtl8xxxu_8188e.c | 34 ++++++++++++++++++
13 2 files changed, 74 insertions(+)
15 --- a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.h
16 +++ b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.h
17 @@ -872,6 +872,45 @@ struct rtl8192eu_efuse {
21 +struct rtl8188eu_efuse {
24 + u8 cck_tx_power_index_A[3]; /* 0x10 */
25 + u8 cck_tx_power_index_B[3];
26 + u8 ht40_1s_tx_power_index_A[3]; /* 0x16 */
27 + u8 ht40_1s_tx_power_index_B[3];
29 + u8 channel_plan; /* 0xb8 */
35 + u8 rf_feature_option;
38 + u8 eeprom_customer_id;
40 + u8 rf_antenna_option; /* 0xc9 */
46 + u8 usb_optional_function;
48 + u8 mac_addr[ETH_ALEN]; /* 0xd7 */
52 + u8 device_name[0x0b]; /* 0xe8 */
54 + u8 serial[0x0b]; /* 0xf5 */
56 + u8 unknown[0x0d]; /* 0x130 */
60 struct rtl8xxxu_reg8val {
63 @@ -1290,6 +1329,7 @@ struct rtl8xxxu_priv {
64 struct rtl8723bu_efuse efuse8723bu;
65 struct rtl8192cu_efuse efuse8192;
66 struct rtl8192eu_efuse efuse8192eu;
67 + struct rtl8188eu_efuse efuse8188eu;
69 u32 adda_backup[RTL8XXXU_ADDA_REGS];
70 u32 mac_backup[RTL8XXXU_MAC_REGS];
71 --- a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_8188e.c
72 +++ b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_8188e.c
75 static int rtl8188eu_parse_efuse(struct rtl8xxxu_priv *priv)
77 + struct rtl8188eu_efuse *efuse = &priv->efuse_wifi.efuse8188eu;
80 + if (efuse->rtl_id != cpu_to_le16(0x8129))
83 + ether_addr_copy(priv->mac_addr, efuse->mac_addr);
85 + memcpy(priv->cck_tx_power_index_A, efuse->cck_tx_power_index_A,
86 + sizeof(efuse->cck_tx_power_index_A));
87 + memcpy(priv->cck_tx_power_index_B, efuse->cck_tx_power_index_B,
88 + sizeof(efuse->cck_tx_power_index_B));
90 + memcpy(priv->ht40_1s_tx_power_index_A,
91 + priv->efuse_wifi.efuse8188eu.ht40_1s_tx_power_index_A,
92 + sizeof(priv->ht40_1s_tx_power_index_A));
93 + memcpy(priv->ht40_1s_tx_power_index_B,
94 + priv->efuse_wifi.efuse8188eu.ht40_1s_tx_power_index_B,
95 + sizeof(priv->ht40_1s_tx_power_index_B));
97 + dev_info(&priv->udev->dev, "Vendor: %.7s\n", efuse->vendor_name);
98 + dev_info(&priv->udev->dev, "Product: %.11s\n", efuse->device_name);
99 + dev_info(&priv->udev->dev, "Serial: %.11s\n", efuse->serial);
101 + if (rtl8xxxu_debug & RTL8XXXU_DEBUG_EFUSE) {
102 + unsigned char *raw = priv->efuse_wifi.raw;
104 + dev_info(&priv->udev->dev,
105 + "%s: dumping efuse (0x%02zx bytes):\n",
106 + __func__, sizeof(struct rtl8188eu_efuse));
107 + for (i = 0; i < sizeof(struct rtl8188eu_efuse); i += 8)
108 + dev_info(&priv->udev->dev, "%02x: %8ph\n", i, &raw[i]);