aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/adm8211.c
diff options
context:
space:
mode:
authorMichael Wu <flamingice@sourmilk.net>2007-09-24 18:10:25 -0400
committerDavid S. Miller <davem@sunset.davemloft.net>2007-10-10 19:53:09 -0400
commitf6ac0adf54ed3fc7fa47e66b92defcbdf37b44ab (patch)
tree9a0a07c1de6e0f0cf1ef2963d1e5a0112dc85199 /drivers/net/wireless/adm8211.c
parent0d282764eb82f89395493b5e0541c1e30c985838 (diff)
[PATCH] adm8211: Use revision from pci_dev
No need to load the revision ourselves anymore. Signed-off-by: Michael Wu <flamingice@sourmilk.net> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/adm8211.c')
-rw-r--r--drivers/net/wireless/adm8211.c44
1 files changed, 21 insertions, 23 deletions
diff --git a/drivers/net/wireless/adm8211.c b/drivers/net/wireless/adm8211.c
index ce1f8e304eaa..e950a7d55711 100644
--- a/drivers/net/wireless/adm8211.c
+++ b/drivers/net/wireless/adm8211.c
@@ -117,7 +117,7 @@ static int adm8211_read_eeprom(struct ieee80211_hw *dev)
117 break; 117 break;
118 118
119 default: 119 default:
120 if (priv->revid < ADM8211_REV_CA) 120 if (priv->pdev->revision < ADM8211_REV_CA)
121 priv->rf_type = ADM8211_TYPE_RFMD; 121 priv->rf_type = ADM8211_TYPE_RFMD;
122 else 122 else
123 priv->rf_type = ADM8211_TYPE_AIROHA; 123 priv->rf_type = ADM8211_TYPE_AIROHA;
@@ -135,7 +135,7 @@ static int adm8211_read_eeprom(struct ieee80211_hw *dev)
135 case ADM8211_TYPE_ADMTEK: 135 case ADM8211_TYPE_ADMTEK:
136 break; 136 break;
137 default: 137 default:
138 if (priv->revid < ADM8211_REV_CA) 138 if (priv->pdev->revision < ADM8211_REV_CA)
139 priv->bbp_type = ADM8211_TYPE_RFMD; 139 priv->bbp_type = ADM8211_TYPE_RFMD;
140 else 140 else
141 priv->bbp_type = ADM8211_TYPE_ADMTEK; 141 priv->bbp_type = ADM8211_TYPE_ADMTEK;
@@ -175,7 +175,7 @@ static int adm8211_read_eeprom(struct ieee80211_hw *dev)
175 break; 175 break;
176 176
177 default: 177 default:
178 if (priv->revid < ADM8211_REV_CA) 178 if (priv->pdev->revision < ADM8211_REV_CA)
179 priv->specific_bbptype = ADM8211_BBP_RFMD3000; 179 priv->specific_bbptype = ADM8211_BBP_RFMD3000;
180 else 180 else
181 priv->specific_bbptype = ADM8211_BBP_ADM8011; 181 priv->specific_bbptype = ADM8211_BBP_ADM8011;
@@ -194,11 +194,11 @@ static int adm8211_read_eeprom(struct ieee80211_hw *dev)
194 break; 194 break;
195 195
196 default: 196 default:
197 if (priv->revid == ADM8211_REV_BA) 197 if (priv->pdev->revision == ADM8211_REV_BA)
198 priv->transceiver_type = ADM8211_RFMD2958_RF3000_CONTROL_POWER; 198 priv->transceiver_type = ADM8211_RFMD2958_RF3000_CONTROL_POWER;
199 else if (priv->revid == ADM8211_REV_CA) 199 else if (priv->pdev->revision == ADM8211_REV_CA)
200 priv->transceiver_type = ADM8211_AL2210L; 200 priv->transceiver_type = ADM8211_AL2210L;
201 else if (priv->revid == ADM8211_REV_AB) 201 else if (priv->pdev->revision == ADM8211_REV_AB)
202 priv->transceiver_type = ADM8211_RFMD2948; 202 priv->transceiver_type = ADM8211_RFMD2948;
203 203
204 printk(KERN_WARNING "%s (adm8211): Unknown transceiver: %d\n", 204 printk(KERN_WARNING "%s (adm8211): Unknown transceiver: %d\n",
@@ -220,7 +220,7 @@ static inline void adm8211_write_sram(struct ieee80211_hw *dev,
220 struct adm8211_priv *priv = dev->priv; 220 struct adm8211_priv *priv = dev->priv;
221 221
222 ADM8211_CSR_WRITE(WEPCTL, addr | ADM8211_WEPCTL_TABLE_WR | 222 ADM8211_CSR_WRITE(WEPCTL, addr | ADM8211_WEPCTL_TABLE_WR |
223 (priv->revid < ADM8211_REV_BA ? 223 (priv->pdev->revision < ADM8211_REV_BA ?
224 0 : ADM8211_WEPCTL_SEL_WEPTABLE )); 224 0 : ADM8211_WEPCTL_SEL_WEPTABLE ));
225 ADM8211_CSR_READ(WEPCTL); 225 ADM8211_CSR_READ(WEPCTL);
226 msleep(1); 226 msleep(1);
@@ -238,7 +238,7 @@ static void adm8211_write_sram_bytes(struct ieee80211_hw *dev,
238 u32 reg = ADM8211_CSR_READ(WEPCTL); 238 u32 reg = ADM8211_CSR_READ(WEPCTL);
239 unsigned int i; 239 unsigned int i;
240 240
241 if (priv->revid < ADM8211_REV_BA) { 241 if (priv->pdev->revision < ADM8211_REV_BA) {
242 for (i = 0; i < len; i += 2) { 242 for (i = 0; i < len; i += 2) {
243 u16 val = buf[i] | (buf[i + 1] << 8); 243 u16 val = buf[i] | (buf[i + 1] << 8);
244 adm8211_write_sram(dev, addr + i / 2, val); 244 adm8211_write_sram(dev, addr + i / 2, val);
@@ -421,7 +421,7 @@ static void adm8211_interrupt_rci(struct ieee80211_hw *dev)
421 if (skb) { 421 if (skb) {
422 struct ieee80211_rx_status rx_status = {0}; 422 struct ieee80211_rx_status rx_status = {0};
423 423
424 if (priv->revid < ADM8211_REV_CA) 424 if (priv->pdev->revision < ADM8211_REV_CA)
425 rx_status.ssi = rssi; 425 rx_status.ssi = rssi;
426 else 426 else
427 rx_status.ssi = 100 - rssi; 427 rx_status.ssi = 100 - rssi;
@@ -703,7 +703,7 @@ static int adm8211_rf_set_channel(struct ieee80211_hw *dev, unsigned int chan)
703 adm8211_rf_write_syn_rfmd2958(dev, 0x0A, reg); 703 adm8211_rf_write_syn_rfmd2958(dev, 0x0A, reg);
704 /* set TXRX TX_GAIN */ 704 /* set TXRX TX_GAIN */
705 adm8211_rf_write_syn_rfmd2958(dev, 0x09, 0x00050 | 705 adm8211_rf_write_syn_rfmd2958(dev, 0x09, 0x00050 |
706 (priv->revid < ADM8211_REV_CA ? tx_power : 0)); 706 (priv->pdev->revision < ADM8211_REV_CA ? tx_power : 0));
707 } else { 707 } else {
708 reg = ADM8211_CSR_READ(PLCPHD); 708 reg = ADM8211_CSR_READ(PLCPHD);
709 reg &= 0xff00ffff; 709 reg &= 0xff00ffff;
@@ -722,7 +722,7 @@ static int adm8211_rf_set_channel(struct ieee80211_hw *dev, unsigned int chan)
722 tx_power<<2); 722 tx_power<<2);
723 adm8211_write_bbp(dev, RF3000_LOW_GAIN_CALIB, lpf_cutoff); 723 adm8211_write_bbp(dev, RF3000_LOW_GAIN_CALIB, lpf_cutoff);
724 adm8211_write_bbp(dev, RF3000_HIGH_GAIN_CALIB, lnags_thresh); 724 adm8211_write_bbp(dev, RF3000_HIGH_GAIN_CALIB, lnags_thresh);
725 adm8211_write_bbp(dev, 0x1c, priv->revid == ADM8211_REV_BA ? 725 adm8211_write_bbp(dev, 0x1c, priv->pdev->revision == ADM8211_REV_BA ?
726 priv->eeprom->cr28 : 0); 726 priv->eeprom->cr28 : 0);
727 adm8211_write_bbp(dev, 0x1d, priv->eeprom->cr29); 727 adm8211_write_bbp(dev, 0x1d, priv->eeprom->cr29);
728 728
@@ -761,7 +761,7 @@ static void adm8211_update_mode(struct ieee80211_hw *dev)
761 priv->nar |= ADM8211_NAR_EA | ADM8211_NAR_ST | ADM8211_NAR_SR; 761 priv->nar |= ADM8211_NAR_EA | ADM8211_NAR_ST | ADM8211_NAR_SR;
762 762
763 /* don't trust the error bits on rev 0x20 and up in adhoc */ 763 /* don't trust the error bits on rev 0x20 and up in adhoc */
764 if (priv->revid >= ADM8211_REV_BA) 764 if (priv->pdev->revision >= ADM8211_REV_BA)
765 priv->soft_rx_crc = 1; 765 priv->soft_rx_crc = 1;
766 break; 766 break;
767 case IEEE80211_IF_TYPE_MNTR: 767 case IEEE80211_IF_TYPE_MNTR:
@@ -862,7 +862,7 @@ static int adm8211_hw_init_bbp(struct ieee80211_hw *dev)
862 break; 862 break;
863 } 863 }
864 864
865 switch (priv->revid) { 865 switch (priv->pdev->revision) {
866 case ADM8211_REV_CA: 866 case ADM8211_REV_CA:
867 if (priv->transceiver_type == ADM8211_RFMD2958 || 867 if (priv->transceiver_type == ADM8211_RFMD2958 ||
868 priv->transceiver_type == ADM8211_RFMD2958_RF3000_CONTROL_POWER || 868 priv->transceiver_type == ADM8211_RFMD2958_RF3000_CONTROL_POWER ||
@@ -920,7 +920,7 @@ static int adm8211_hw_init_bbp(struct ieee80211_hw *dev)
920 adm8211_write_bbp(dev, 0x1c, 0x00); 920 adm8211_write_bbp(dev, 0x1c, 0x00);
921 adm8211_write_bbp(dev, 0x1d, 0x80); 921 adm8211_write_bbp(dev, 0x1d, 0x80);
922 } else { 922 } else {
923 if (priv->revid == ADM8211_REV_BA) 923 if (priv->pdev->revision == ADM8211_REV_BA)
924 adm8211_write_bbp(dev, 0x1c, priv->eeprom->cr28); 924 adm8211_write_bbp(dev, 0x1c, priv->eeprom->cr28);
925 else 925 else
926 adm8211_write_bbp(dev, 0x1c, 0x00); 926 adm8211_write_bbp(dev, 0x1c, 0x00);
@@ -1052,7 +1052,7 @@ static int adm8211_set_rate(struct ieee80211_hw *dev)
1052 u8 rate_buf[12] = {0}; 1052 u8 rate_buf[12] = {0};
1053 1053
1054 /* write supported rates */ 1054 /* write supported rates */
1055 if (priv->revid != ADM8211_REV_BA) { 1055 if (priv->pdev->revision != ADM8211_REV_BA) {
1056 rate_buf[0] = ARRAY_SIZE(adm8211_rates); 1056 rate_buf[0] = ARRAY_SIZE(adm8211_rates);
1057 for (i = 0; i < ARRAY_SIZE(adm8211_rates); i++) 1057 for (i = 0; i < ARRAY_SIZE(adm8211_rates); i++)
1058 rate_buf[i + 1] = (adm8211_rates[i].rate / 5) | 0x80; 1058 rate_buf[i + 1] = (adm8211_rates[i].rate / 5) | 0x80;
@@ -1136,7 +1136,7 @@ static void adm8211_hw_init(struct ieee80211_hw *dev)
1136 * PWR0PE2 = 13 us 1136 * PWR0PE2 = 13 us
1137 * PWR1PE2 = 1 us 1137 * PWR1PE2 = 1 us
1138 * PWR0TXPE = 8 or 6 */ 1138 * PWR0TXPE = 8 or 6 */
1139 if (priv->revid < ADM8211_REV_CA) 1139 if (priv->pdev->revision < ADM8211_REV_CA)
1140 ADM8211_CSR_WRITE(TOFS2, 0x8815cd18); 1140 ADM8211_CSR_WRITE(TOFS2, 0x8815cd18);
1141 else 1141 else
1142 ADM8211_CSR_WRITE(TOFS2, 0x8535cd16); 1142 ADM8211_CSR_WRITE(TOFS2, 0x8535cd16);
@@ -1165,7 +1165,7 @@ static void adm8211_hw_init(struct ieee80211_hw *dev)
1165 1165
1166 /* SLOT=20 us, SIFS=110 cycles of 22 MHz (5 us), 1166 /* SLOT=20 us, SIFS=110 cycles of 22 MHz (5 us),
1167 * DIFS=50 us, EIFS=100 us */ 1167 * DIFS=50 us, EIFS=100 us */
1168 if (priv->revid < ADM8211_REV_CA) 1168 if (priv->pdev->revision < ADM8211_REV_CA)
1169 ADM8211_CSR_WRITE(IFST, (20 << 23) | (110 << 15) | 1169 ADM8211_CSR_WRITE(IFST, (20 << 23) | (110 << 15) |
1170 (50 << 9) | 100); 1170 (50 << 9) | 100);
1171 else 1171 else
@@ -1224,13 +1224,13 @@ static int adm8211_hw_reset(struct ieee80211_hw *dev)
1224 1224
1225 ADM8211_CSR_WRITE(PAR, tmp); 1225 ADM8211_CSR_WRITE(PAR, tmp);
1226 1226
1227 if (priv->revid == ADM8211_REV_BA && 1227 if (priv->pdev->revision == ADM8211_REV_BA &&
1228 (priv->transceiver_type == ADM8211_RFMD2958_RF3000_CONTROL_POWER || 1228 (priv->transceiver_type == ADM8211_RFMD2958_RF3000_CONTROL_POWER ||
1229 priv->transceiver_type == ADM8211_RFMD2958)) { 1229 priv->transceiver_type == ADM8211_RFMD2958)) {
1230 reg = ADM8211_CSR_READ(CSR_TEST1); 1230 reg = ADM8211_CSR_READ(CSR_TEST1);
1231 reg |= (1 << 4) | (1 << 5); 1231 reg |= (1 << 4) | (1 << 5);
1232 ADM8211_CSR_WRITE(CSR_TEST1, reg); 1232 ADM8211_CSR_WRITE(CSR_TEST1, reg);
1233 } else if (priv->revid == ADM8211_REV_CA) { 1233 } else if (priv->pdev->revision == ADM8211_REV_CA) {
1234 reg = ADM8211_CSR_READ(CSR_TEST1); 1234 reg = ADM8211_CSR_READ(CSR_TEST1);
1235 reg &= ~((1 << 4) | (1 << 5)); 1235 reg &= ~((1 << 4) | (1 << 5));
1236 ADM8211_CSR_WRITE(CSR_TEST1, reg); 1236 ADM8211_CSR_WRITE(CSR_TEST1, reg);
@@ -1866,8 +1866,6 @@ static int __devinit adm8211_probe(struct pci_dev *pdev,
1866 goto err_iounmap; 1866 goto err_iounmap;
1867 } 1867 }
1868 1868
1869 pci_read_config_byte(pdev, PCI_CLASS_REVISION, &priv->revid);
1870
1871 *(u32 *)perm_addr = le32_to_cpu((__force __le32)ADM8211_CSR_READ(PAR0)); 1869 *(u32 *)perm_addr = le32_to_cpu((__force __le32)ADM8211_CSR_READ(PAR0));
1872 *(u16 *)&perm_addr[4] = 1870 *(u16 *)&perm_addr[4] =
1873 le16_to_cpu((__force __le16)ADM8211_CSR_READ(PAR1) & 0xFFFF); 1871 le16_to_cpu((__force __le16)ADM8211_CSR_READ(PAR1) & 0xFFFF);
@@ -1902,7 +1900,7 @@ static int __devinit adm8211_probe(struct pci_dev *pdev,
1902 priv->mode = IEEE80211_IF_TYPE_MNTR; 1900 priv->mode = IEEE80211_IF_TYPE_MNTR;
1903 1901
1904 /* Power-on issue. EEPROM won't read correctly without */ 1902 /* Power-on issue. EEPROM won't read correctly without */
1905 if (priv->revid >= ADM8211_REV_BA) { 1903 if (pdev->revision >= ADM8211_REV_BA) {
1906 ADM8211_CSR_WRITE(FRCTL, 0); 1904 ADM8211_CSR_WRITE(FRCTL, 0);
1907 ADM8211_CSR_READ(FRCTL); 1905 ADM8211_CSR_READ(FRCTL);
1908 ADM8211_CSR_WRITE(FRCTL, 1); 1906 ADM8211_CSR_WRITE(FRCTL, 1);
@@ -1935,7 +1933,7 @@ static int __devinit adm8211_probe(struct pci_dev *pdev,
1935 1933
1936 printk(KERN_INFO "%s: hwaddr %s, Rev 0x%02x\n", 1934 printk(KERN_INFO "%s: hwaddr %s, Rev 0x%02x\n",
1937 wiphy_name(dev->wiphy), print_mac(mac, dev->wiphy->perm_addr), 1935 wiphy_name(dev->wiphy), print_mac(mac, dev->wiphy->perm_addr),
1938 priv->revid); 1936 pdev->revision);
1939 1937
1940 return 0; 1938 return 0;
1941 1939