|
@@ -898,7 +898,8 @@ static void rt2800_config_channel(struct rt2x00_dev *rt2x00dev,
|
|
|
rt2x00_set_field8(&bbp, BBP3_HT40_PLUS, conf_is_ht40_plus(conf));
|
|
|
rt2800_bbp_write(rt2x00dev, 3, bbp);
|
|
|
|
|
|
- if (rt2x00_rev(rt2x00dev) == RT2860C_VERSION) {
|
|
|
+ if (rt2x00_rt(rt2x00dev, RT2860) &&
|
|
|
+ (rt2x00_rev(rt2x00dev) == RT2860C_VERSION)) {
|
|
|
if (conf_is_ht40(conf)) {
|
|
|
rt2800_bbp_write(rt2x00dev, 69, 0x1a);
|
|
|
rt2800_bbp_write(rt2x00dev, 70, 0x0a);
|
|
@@ -1061,7 +1062,8 @@ static u8 rt2800_get_default_vgc(struct rt2x00_dev *rt2x00dev)
|
|
|
{
|
|
|
if (rt2x00dev->curr_band == IEEE80211_BAND_2GHZ) {
|
|
|
if (rt2x00_is_usb(rt2x00dev) &&
|
|
|
- rt2x00_rev(rt2x00dev) == RT3070_VERSION)
|
|
|
+ rt2x00_rt(rt2x00dev, RT3070) &&
|
|
|
+ (rt2x00_rev(rt2x00dev) == RT3070_VERSION))
|
|
|
return 0x1c + (2 * rt2x00dev->lna_gain);
|
|
|
else
|
|
|
return 0x2e + rt2x00dev->lna_gain;
|
|
@@ -1092,7 +1094,8 @@ EXPORT_SYMBOL_GPL(rt2800_reset_tuner);
|
|
|
void rt2800_link_tuner(struct rt2x00_dev *rt2x00dev, struct link_qual *qual,
|
|
|
const u32 count)
|
|
|
{
|
|
|
- if (rt2x00_rev(rt2x00dev) == RT2860C_VERSION)
|
|
|
+ if (rt2x00_rt(rt2x00dev, RT2860) &&
|
|
|
+ (rt2x00_rev(rt2x00dev) == RT2860C_VERSION))
|
|
|
return;
|
|
|
|
|
|
/*
|
|
@@ -1178,7 +1181,8 @@ int rt2800_init_registers(struct rt2x00_dev *rt2x00dev)
|
|
|
rt2800_register_write(rt2x00dev, BCN_TIME_CFG, reg);
|
|
|
|
|
|
if (rt2x00_is_usb(rt2x00dev) &&
|
|
|
- rt2x00_rev(rt2x00dev) == RT3070_VERSION) {
|
|
|
+ rt2x00_rt(rt2x00dev, RT3070) &&
|
|
|
+ (rt2x00_rev(rt2x00dev) == RT3070_VERSION)) {
|
|
|
rt2800_register_write(rt2x00dev, TX_SW_CFG0, 0x00000400);
|
|
|
rt2800_register_write(rt2x00dev, TX_SW_CFG1, 0x00000000);
|
|
|
rt2800_register_write(rt2x00dev, TX_SW_CFG2, 0x00000000);
|
|
@@ -1205,8 +1209,14 @@ int rt2800_init_registers(struct rt2x00_dev *rt2x00dev)
|
|
|
|
|
|
rt2800_register_read(rt2x00dev, MAX_LEN_CFG, ®);
|
|
|
rt2x00_set_field32(®, MAX_LEN_CFG_MAX_MPDU, AGGREGATION_SIZE);
|
|
|
- if (rt2x00_rev(rt2x00dev) >= RT2880E_VERSION &&
|
|
|
- rt2x00_rev(rt2x00dev) < RT3070_VERSION)
|
|
|
+ if ((rt2x00_rt(rt2x00dev, RT2872) &&
|
|
|
+ (rt2x00_rev(rt2x00dev) >= RT2880E_VERSION)) ||
|
|
|
+ rt2x00_rt(rt2x00dev, RT2880) ||
|
|
|
+ rt2x00_rt(rt2x00dev, RT2883) ||
|
|
|
+ rt2x00_rt(rt2x00dev, RT2890) ||
|
|
|
+ rt2x00_rt(rt2x00dev, RT3052) ||
|
|
|
+ (rt2x00_rt(rt2x00dev, RT3070) &&
|
|
|
+ (rt2x00_rev(rt2x00dev) < RT3070_VERSION)))
|
|
|
rt2x00_set_field32(®, MAX_LEN_CFG_MAX_PSDU, 2);
|
|
|
else
|
|
|
rt2x00_set_field32(®, MAX_LEN_CFG_MAX_PSDU, 1);
|
|
@@ -1485,16 +1495,19 @@ int rt2800_init_bbp(struct rt2x00_dev *rt2x00dev)
|
|
|
rt2800_bbp_write(rt2x00dev, 103, 0x00);
|
|
|
rt2800_bbp_write(rt2x00dev, 105, 0x05);
|
|
|
|
|
|
- if (rt2x00_rev(rt2x00dev) == RT2860C_VERSION) {
|
|
|
+ if (rt2x00_rt(rt2x00dev, RT2860) &&
|
|
|
+ (rt2x00_rev(rt2x00dev) == RT2860C_VERSION)) {
|
|
|
rt2800_bbp_write(rt2x00dev, 69, 0x16);
|
|
|
rt2800_bbp_write(rt2x00dev, 73, 0x12);
|
|
|
}
|
|
|
|
|
|
- if (rt2x00_rev(rt2x00dev) > RT2860D_VERSION)
|
|
|
+ if (rt2x00_rt(rt2x00dev, RT2860) &&
|
|
|
+ (rt2x00_rev(rt2x00dev) > RT2860D_VERSION))
|
|
|
rt2800_bbp_write(rt2x00dev, 84, 0x19);
|
|
|
|
|
|
if (rt2x00_is_usb(rt2x00dev) &&
|
|
|
- rt2x00_rev(rt2x00dev) == RT3070_VERSION) {
|
|
|
+ rt2x00_rt(rt2x00dev, RT3070) &&
|
|
|
+ (rt2x00_rev(rt2x00dev) == RT3070_VERSION)) {
|
|
|
rt2800_bbp_write(rt2x00dev, 70, 0x0a);
|
|
|
rt2800_bbp_write(rt2x00dev, 84, 0x99);
|
|
|
rt2800_bbp_write(rt2x00dev, 105, 0x05);
|
|
@@ -1586,7 +1599,8 @@ int rt2800_init_rfcsr(struct rt2x00_dev *rt2x00dev)
|
|
|
u8 bbp;
|
|
|
|
|
|
if (rt2x00_is_usb(rt2x00dev) &&
|
|
|
- rt2x00_rev(rt2x00dev) != RT3070_VERSION)
|
|
|
+ rt2x00_rt(rt2x00dev, RT3070) &&
|
|
|
+ (rt2x00_rev(rt2x00dev) != RT3070_VERSION))
|
|
|
return 0;
|
|
|
|
|
|
if (rt2x00_is_pci(rt2x00dev) || rt2x00_is_soc(rt2x00dev)) {
|
|
@@ -1757,7 +1771,12 @@ int rt2800_validate_eeprom(struct rt2x00_dev *rt2x00dev)
|
|
|
rt2x00_set_field16(&word, EEPROM_ANTENNA_RF_TYPE, RF2820);
|
|
|
rt2x00_eeprom_write(rt2x00dev, EEPROM_ANTENNA, word);
|
|
|
EEPROM(rt2x00dev, "Antenna: 0x%04x\n", word);
|
|
|
- } else if (rt2x00_rev(rt2x00dev) < RT2883_VERSION) {
|
|
|
+ } else if (rt2x00_rt(rt2x00dev, RT2860) ||
|
|
|
+ rt2x00_rt(rt2x00dev, RT2870) ||
|
|
|
+ rt2x00_rt(rt2x00dev, RT2872) ||
|
|
|
+ rt2x00_rt(rt2x00dev, RT2880) ||
|
|
|
+ (rt2x00_rt(rt2x00dev, RT2883) &&
|
|
|
+ (rt2x00_rev(rt2x00dev) < RT2883_VERSION))) {
|
|
|
/*
|
|
|
* There is a max of 2 RX streams for RT28x0 series
|
|
|
*/
|
|
@@ -1842,7 +1861,6 @@ EXPORT_SYMBOL_GPL(rt2800_validate_eeprom);
|
|
|
int rt2800_init_eeprom(struct rt2x00_dev *rt2x00dev)
|
|
|
{
|
|
|
u32 reg;
|
|
|
- u16 chip;
|
|
|
u16 value;
|
|
|
u16 eeprom;
|
|
|
|
|
@@ -1857,41 +1875,25 @@ int rt2800_init_eeprom(struct rt2x00_dev *rt2x00dev)
|
|
|
value = rt2x00_get_field16(eeprom, EEPROM_ANTENNA_RF_TYPE);
|
|
|
rt2800_register_read(rt2x00dev, MAC_CSR0, ®);
|
|
|
|
|
|
- if (rt2x00_is_pci(rt2x00dev)) {
|
|
|
-#if defined(CONFIG_RT2X00_LIB_PCI) || defined(CONFIG_RT2X00_LIB_PCI_MODULE)
|
|
|
- pci_read_config_word(to_pci_dev(rt2x00dev->dev),
|
|
|
- PCI_DEVICE_ID,
|
|
|
- &chip);
|
|
|
-#else
|
|
|
- BUG();
|
|
|
-#endif
|
|
|
- } else if (rt2x00_is_usb(rt2x00dev)) {
|
|
|
- /*
|
|
|
- * The check for rt2860 is not a typo, some rt2870 hardware
|
|
|
- * identifies itself as rt2860 in the CSR register.
|
|
|
- */
|
|
|
- if (((reg & 0xfff00000) == 0x28600000) ||
|
|
|
- ((reg & 0xfff00000) == 0x28700000) ||
|
|
|
- ((reg & 0xfff00000) == 0x28800000)) {
|
|
|
- chip = RT2870;
|
|
|
- } else if ((reg & 0xffff0000) == 0x30700000) {
|
|
|
- chip = RT3070;
|
|
|
- } else {
|
|
|
- ERROR(rt2x00dev, "Invalid RT chipset detected.\n");
|
|
|
- return -ENODEV;
|
|
|
- }
|
|
|
- } else if (rt2x00_is_soc(rt2x00dev)) {
|
|
|
-#if defined(CONFIG_RALINK_RT288X)
|
|
|
- chip = RT2880;
|
|
|
-#elif defined(CONFIG_RALINK_RT305X)
|
|
|
- chip = RT3052;
|
|
|
-#else
|
|
|
- BUG();
|
|
|
-#endif
|
|
|
+ rt2x00_set_chip(rt2x00dev, rt2x00_get_field32(reg, MAC_CSR0_CHIPSET),
|
|
|
+ value, rt2x00_get_field32(reg, MAC_CSR0_REVISION));
|
|
|
+
|
|
|
+ if (!rt2x00_rt(rt2x00dev, RT2860) &&
|
|
|
+ !rt2x00_rt(rt2x00dev, RT2870) &&
|
|
|
+ !rt2x00_rt(rt2x00dev, RT2872) &&
|
|
|
+ !rt2x00_rt(rt2x00dev, RT2880) &&
|
|
|
+ !rt2x00_rt(rt2x00dev, RT2883) &&
|
|
|
+ !rt2x00_rt(rt2x00dev, RT2890) &&
|
|
|
+ !rt2x00_rt(rt2x00dev, RT3052) &&
|
|
|
+ !rt2x00_rt(rt2x00dev, RT3070) &&
|
|
|
+ !rt2x00_rt(rt2x00dev, RT3071) &&
|
|
|
+ !rt2x00_rt(rt2x00dev, RT3090) &&
|
|
|
+ !rt2x00_rt(rt2x00dev, RT3390) &&
|
|
|
+ !rt2x00_rt(rt2x00dev, RT3572)) {
|
|
|
+ ERROR(rt2x00dev, "Invalid RT chipset detected.\n");
|
|
|
+ return -ENODEV;
|
|
|
}
|
|
|
|
|
|
- rt2x00_set_chip(rt2x00dev, chip, value, reg);
|
|
|
-
|
|
|
if (!rt2x00_rf(rt2x00dev, RF2820) &&
|
|
|
!rt2x00_rf(rt2x00dev, RF2850) &&
|
|
|
!rt2x00_rf(rt2x00dev, RF2720) &&
|