diff options
-rw-r--r-- | drivers/net/wireless/rtl8187_dev.c | 79 | ||||
-rw-r--r-- | drivers/net/wireless/rtl818x.h | 4 |
2 files changed, 47 insertions, 36 deletions
diff --git a/drivers/net/wireless/rtl8187_dev.c b/drivers/net/wireless/rtl8187_dev.c index 3bc4a1c39258..33527e58256f 100644 --- a/drivers/net/wireless/rtl8187_dev.c +++ b/drivers/net/wireless/rtl8187_dev.c | |||
@@ -981,8 +981,7 @@ static int __devinit rtl8187_probe(struct usb_interface *intf, | |||
981 | } | 981 | } |
982 | 982 | ||
983 | priv = dev->priv; | 983 | priv = dev->priv; |
984 | priv->is_rtl8187b = (id->driver_info == DEVICE_RTL8187B) || | 984 | priv->is_rtl8187b = (id->driver_info == DEVICE_RTL8187B); |
985 | !memcmp(udev->product, "RTL8187B", 8); | ||
986 | 985 | ||
987 | SET_IEEE80211_DEV(dev, &intf->dev); | 986 | SET_IEEE80211_DEV(dev, &intf->dev); |
988 | usb_set_intfdata(intf, dev); | 987 | usb_set_intfdata(intf, dev); |
@@ -1011,13 +1010,6 @@ static int __devinit rtl8187_probe(struct usb_interface *intf, | |||
1011 | dev->flags = IEEE80211_HW_HOST_BROADCAST_PS_BUFFERING | | 1010 | dev->flags = IEEE80211_HW_HOST_BROADCAST_PS_BUFFERING | |
1012 | IEEE80211_HW_RX_INCLUDES_FCS | | 1011 | IEEE80211_HW_RX_INCLUDES_FCS | |
1013 | IEEE80211_HW_SIGNAL_UNSPEC; | 1012 | IEEE80211_HW_SIGNAL_UNSPEC; |
1014 | dev->extra_tx_headroom = (!priv->is_rtl8187b) ? | ||
1015 | sizeof(struct rtl8187_tx_hdr) : | ||
1016 | sizeof(struct rtl8187b_tx_hdr); | ||
1017 | if (!priv->is_rtl8187b) | ||
1018 | dev->queues = 1; | ||
1019 | else | ||
1020 | dev->queues = 4; | ||
1021 | dev->max_signal = 65; | 1013 | dev->max_signal = 65; |
1022 | 1014 | ||
1023 | eeprom.data = dev; | 1015 | eeprom.data = dev; |
@@ -1052,26 +1044,6 @@ static int __devinit rtl8187_probe(struct usb_interface *intf, | |||
1052 | (*channel++).hw_value = txpwr & 0xFF; | 1044 | (*channel++).hw_value = txpwr & 0xFF; |
1053 | (*channel++).hw_value = txpwr >> 8; | 1045 | (*channel++).hw_value = txpwr >> 8; |
1054 | } | 1046 | } |
1055 | if (!priv->is_rtl8187b) { | ||
1056 | for (i = 0; i < 2; i++) { | ||
1057 | eeprom_93cx6_read(&eeprom, | ||
1058 | RTL8187_EEPROM_TXPWR_CHAN_6 + i, | ||
1059 | &txpwr); | ||
1060 | (*channel++).hw_value = txpwr & 0xFF; | ||
1061 | (*channel++).hw_value = txpwr >> 8; | ||
1062 | } | ||
1063 | } else { | ||
1064 | eeprom_93cx6_read(&eeprom, RTL8187_EEPROM_TXPWR_CHAN_6, | ||
1065 | &txpwr); | ||
1066 | (*channel++).hw_value = txpwr & 0xFF; | ||
1067 | |||
1068 | eeprom_93cx6_read(&eeprom, 0x0A, &txpwr); | ||
1069 | (*channel++).hw_value = txpwr & 0xFF; | ||
1070 | |||
1071 | eeprom_93cx6_read(&eeprom, 0x1C, &txpwr); | ||
1072 | (*channel++).hw_value = txpwr & 0xFF; | ||
1073 | (*channel++).hw_value = txpwr >> 8; | ||
1074 | } | ||
1075 | 1047 | ||
1076 | eeprom_93cx6_read(&eeprom, RTL8187_EEPROM_TXPWR_BASE, | 1048 | eeprom_93cx6_read(&eeprom, RTL8187_EEPROM_TXPWR_BASE, |
1077 | &priv->txpwr_base); | 1049 | &priv->txpwr_base); |
@@ -1090,17 +1062,20 @@ static int __devinit rtl8187_probe(struct usb_interface *intf, | |||
1090 | reg32 = rtl818x_ioread32(priv, &priv->map->TX_CONF); | 1062 | reg32 = rtl818x_ioread32(priv, &priv->map->TX_CONF); |
1091 | reg32 &= RTL818X_TX_CONF_HWVER_MASK; | 1063 | reg32 &= RTL818X_TX_CONF_HWVER_MASK; |
1092 | switch (reg32) { | 1064 | switch (reg32) { |
1093 | case RTL818X_TX_CONF_R8187vD_1: | 1065 | case RTL818X_TX_CONF_R8187vD_B: |
1094 | case RTL818X_TX_CONF_R8187vD_2: | 1066 | /* Some RTL8187B devices have a USB ID of 0x8187 |
1067 | * detect them here */ | ||
1068 | chip_name = "RTL8187BvB(early)"; | ||
1069 | priv->is_rtl8187b = 1; | ||
1070 | priv->hw_rev = RTL8187BvB; | ||
1071 | break; | ||
1072 | case RTL818X_TX_CONF_R8187vD: | ||
1095 | chip_name = "RTL8187vD"; | 1073 | chip_name = "RTL8187vD"; |
1096 | break; | 1074 | break; |
1097 | default: | 1075 | default: |
1098 | chip_name = "RTL8187vB (default)"; | 1076 | chip_name = "RTL8187vB (default)"; |
1099 | } | 1077 | } |
1100 | } else { | 1078 | } else { |
1101 | printk(KERN_WARNING "rtl8187: 8187B chip detected. Support " | ||
1102 | "is EXPERIMENTAL, and could damage your\n" | ||
1103 | " hardware, use at your own risk\n"); | ||
1104 | /* | 1079 | /* |
1105 | * Force USB request to write radio registers for 8187B, Realtek | 1080 | * Force USB request to write radio registers for 8187B, Realtek |
1106 | * only uses it in their sources | 1081 | * only uses it in their sources |
@@ -1129,7 +1104,43 @@ static int __devinit rtl8187_probe(struct usb_interface *intf, | |||
1129 | } | 1104 | } |
1130 | } | 1105 | } |
1131 | 1106 | ||
1107 | if (!priv->is_rtl8187b) { | ||
1108 | for (i = 0; i < 2; i++) { | ||
1109 | eeprom_93cx6_read(&eeprom, | ||
1110 | RTL8187_EEPROM_TXPWR_CHAN_6 + i, | ||
1111 | &txpwr); | ||
1112 | (*channel++).hw_value = txpwr & 0xFF; | ||
1113 | (*channel++).hw_value = txpwr >> 8; | ||
1114 | } | ||
1115 | } else { | ||
1116 | eeprom_93cx6_read(&eeprom, RTL8187_EEPROM_TXPWR_CHAN_6, | ||
1117 | &txpwr); | ||
1118 | (*channel++).hw_value = txpwr & 0xFF; | ||
1119 | |||
1120 | eeprom_93cx6_read(&eeprom, 0x0A, &txpwr); | ||
1121 | (*channel++).hw_value = txpwr & 0xFF; | ||
1122 | |||
1123 | eeprom_93cx6_read(&eeprom, 0x1C, &txpwr); | ||
1124 | (*channel++).hw_value = txpwr & 0xFF; | ||
1125 | (*channel++).hw_value = txpwr >> 8; | ||
1126 | } | ||
1127 | |||
1128 | if (priv->is_rtl8187b) | ||
1129 | printk(KERN_WARNING "rtl8187: 8187B chip detected. Support " | ||
1130 | "is EXPERIMENTAL, and could damage your\n" | ||
1131 | " hardware, use at your own risk\n"); | ||
1132 | if ((id->driver_info == DEVICE_RTL8187) && priv->is_rtl8187b) | ||
1133 | printk(KERN_INFO "rtl8187: inconsistency between id with OEM" | ||
1134 | " info!\n"); | ||
1135 | |||
1132 | priv->rf = rtl8187_detect_rf(dev); | 1136 | priv->rf = rtl8187_detect_rf(dev); |
1137 | dev->extra_tx_headroom = (!priv->is_rtl8187b) ? | ||
1138 | sizeof(struct rtl8187_tx_hdr) : | ||
1139 | sizeof(struct rtl8187b_tx_hdr); | ||
1140 | if (!priv->is_rtl8187b) | ||
1141 | dev->queues = 1; | ||
1142 | else | ||
1143 | dev->queues = 4; | ||
1133 | 1144 | ||
1134 | err = ieee80211_register_hw(dev); | 1145 | err = ieee80211_register_hw(dev); |
1135 | if (err) { | 1146 | if (err) { |
diff --git a/drivers/net/wireless/rtl818x.h b/drivers/net/wireless/rtl818x.h index 85a6394e4309..00900fe16fce 100644 --- a/drivers/net/wireless/rtl818x.h +++ b/drivers/net/wireless/rtl818x.h | |||
@@ -66,8 +66,8 @@ struct rtl818x_csr { | |||
66 | #define RTL818X_TX_CONF_R8180_F (3 << 25) | 66 | #define RTL818X_TX_CONF_R8180_F (3 << 25) |
67 | #define RTL818X_TX_CONF_R8185_ABC (4 << 25) | 67 | #define RTL818X_TX_CONF_R8185_ABC (4 << 25) |
68 | #define RTL818X_TX_CONF_R8185_D (5 << 25) | 68 | #define RTL818X_TX_CONF_R8185_D (5 << 25) |
69 | #define RTL818X_TX_CONF_R8187vD_1 (5 << 25) | 69 | #define RTL818X_TX_CONF_R8187vD (5 << 25) |
70 | #define RTL818X_TX_CONF_R8187vD_2 (6 << 25) | 70 | #define RTL818X_TX_CONF_R8187vD_B (6 << 25) |
71 | #define RTL818X_TX_CONF_HWVER_MASK (7 << 25) | 71 | #define RTL818X_TX_CONF_HWVER_MASK (7 << 25) |
72 | #define RTL818X_TX_CONF_DISREQQSIZE (1 << 28) | 72 | #define RTL818X_TX_CONF_DISREQQSIZE (1 << 28) |
73 | #define RTL818X_TX_CONF_PROBE_DTS (1 << 29) | 73 | #define RTL818X_TX_CONF_PROBE_DTS (1 << 29) |