Merge branch 'for-john' of git://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac802...
[GitHub/mt8127/android_kernel_alcatel_ttab.git] / drivers / net / wireless / rt2x00 / rt2800lib.c
index f08a0424fe4d12bba4b7145ce793009d040850c4..72bbb962579f874b63c872cec86d1f33829575aa 100644 (file)
@@ -3147,7 +3147,7 @@ static void rt2800_config_txpower(struct rt2x00_dev *rt2x00dev,
 
 void rt2800_gain_calibration(struct rt2x00_dev *rt2x00dev)
 {
-       rt2800_config_txpower(rt2x00dev, rt2x00dev->hw->conf.channel,
+       rt2800_config_txpower(rt2x00dev, rt2x00dev->hw->conf.chandef.chan,
                              rt2x00dev->tx_power);
 }
 EXPORT_SYMBOL_GPL(rt2800_gain_calibration);
@@ -3282,11 +3282,11 @@ void rt2800_config(struct rt2x00_dev *rt2x00dev,
        if (flags & IEEE80211_CONF_CHANGE_CHANNEL) {
                rt2800_config_channel(rt2x00dev, libconf->conf,
                                      &libconf->rf, &libconf->channel);
-               rt2800_config_txpower(rt2x00dev, libconf->conf->channel,
+               rt2800_config_txpower(rt2x00dev, libconf->conf->chandef.chan,
                                      libconf->conf->power_level);
        }
        if (flags & IEEE80211_CONF_CHANGE_POWER)
-               rt2800_config_txpower(rt2x00dev, libconf->conf->channel,
+               rt2800_config_txpower(rt2x00dev, libconf->conf->chandef.chan,
                                      libconf->conf->power_level);
        if (flags & IEEE80211_CONF_CHANGE_RETRY_LIMITS)
                rt2800_config_retry_limit(rt2x00dev, libconf);
@@ -5431,9 +5431,9 @@ static int rt2800_validate_eeprom(struct rt2x00_dev *rt2x00dev)
 
 static int rt2800_init_eeprom(struct rt2x00_dev *rt2x00dev)
 {
-       u32 reg;
        u16 value;
        u16 eeprom;
+       u16 rf;
 
        /*
         * Read EEPROM word for configuration.
@@ -5445,42 +5445,14 @@ static int rt2800_init_eeprom(struct rt2x00_dev *rt2x00dev)
         * RT28xx/RT30xx: defined in "EEPROM_NIC_CONF0_RF_TYPE" field
         * RT53xx: defined in "EEPROM_CHIP_ID" field
         */
-       if (rt2x00_rt(rt2x00dev, RT3290))
-               rt2800_register_read(rt2x00dev, MAC_CSR0_3290, &reg);
-       else
-               rt2800_register_read(rt2x00dev, MAC_CSR0, &reg);
-
-       if (rt2x00_get_field32(reg, MAC_CSR0_CHIPSET) == RT3290 ||
-           rt2x00_get_field32(reg, MAC_CSR0_CHIPSET) == RT5390 ||
-           rt2x00_get_field32(reg, MAC_CSR0_CHIPSET) == RT5392)
-               rt2x00_eeprom_read(rt2x00dev, EEPROM_CHIP_ID, &value);
+       if (rt2x00_rt(rt2x00dev, RT3290) ||
+           rt2x00_rt(rt2x00dev, RT5390) ||
+           rt2x00_rt(rt2x00dev, RT5392))
+               rt2x00_eeprom_read(rt2x00dev, EEPROM_CHIP_ID, &rf);
        else
-               value = rt2x00_get_field16(eeprom, EEPROM_NIC_CONF0_RF_TYPE);
+               rf = rt2x00_get_field16(eeprom, EEPROM_NIC_CONF0_RF_TYPE);
 
-       rt2x00_set_chip(rt2x00dev, rt2x00_get_field32(reg, MAC_CSR0_CHIPSET),
-                       value, rt2x00_get_field32(reg, MAC_CSR0_REVISION));
-
-       switch (rt2x00dev->chip.rt) {
-       case RT2860:
-       case RT2872:
-       case RT2883:
-       case RT3070:
-       case RT3071:
-       case RT3090:
-       case RT3290:
-       case RT3352:
-       case RT3390:
-       case RT3572:
-       case RT5390:
-       case RT5392:
-       case RT5592:
-               break;
-       default:
-               ERROR(rt2x00dev, "Invalid RT chipset 0x%04x detected.\n", rt2x00dev->chip.rt);
-               return -ENODEV;
-       }
-
-       switch (rt2x00dev->chip.rf) {
+       switch (rf) {
        case RF2820:
        case RF2850:
        case RF2720:
@@ -5501,11 +5473,12 @@ static int rt2800_init_eeprom(struct rt2x00_dev *rt2x00dev)
        case RF5592:
                break;
        default:
-               ERROR(rt2x00dev, "Invalid RF chipset 0x%04x detected.\n",
-                     rt2x00dev->chip.rf);
+               ERROR(rt2x00dev, "Invalid RF chipset 0x%04x detected.\n", rf);
                return -ENODEV;
        }
 
+       rt2x00_set_rf(rt2x00dev, rf);
+
        /*
         * Identify default antenna configuration.
         */
@@ -6059,11 +6032,56 @@ static int rt2800_probe_hw_mode(struct rt2x00_dev *rt2x00dev)
        return 0;
 }
 
+static int rt2800_probe_rt(struct rt2x00_dev *rt2x00dev)
+{
+       u32 reg;
+       u32 rt;
+       u32 rev;
+
+       if (rt2x00_rt(rt2x00dev, RT3290))
+               rt2800_register_read(rt2x00dev, MAC_CSR0_3290, &reg);
+       else
+               rt2800_register_read(rt2x00dev, MAC_CSR0, &reg);
+
+       rt = rt2x00_get_field32(reg, MAC_CSR0_CHIPSET);
+       rev = rt2x00_get_field32(reg, MAC_CSR0_REVISION);
+
+       switch (rt) {
+       case RT2860:
+       case RT2872:
+       case RT2883:
+       case RT3070:
+       case RT3071:
+       case RT3090:
+       case RT3290:
+       case RT3352:
+       case RT3390:
+       case RT3572:
+       case RT5390:
+       case RT5392:
+       case RT5592:
+               break;
+       default:
+               ERROR(rt2x00dev,
+                     "Invalid RT chipset 0x%04x, rev %04x detected.\n",
+                     rt, rev);
+               return -ENODEV;
+       }
+
+       rt2x00_set_rt(rt2x00dev, rt, rev);
+
+       return 0;
+}
+
 int rt2800_probe_hw(struct rt2x00_dev *rt2x00dev)
 {
        int retval;
        u32 reg;
 
+       retval = rt2800_probe_rt(rt2x00dev);
+       if (retval)
+               return retval;
+
        /*
         * Allocate eeprom data.
         */
@@ -6322,7 +6340,7 @@ int rt2800_get_survey(struct ieee80211_hw *hw, int idx,
        if (idx != 0)
                return -ENOENT;
 
-       survey->channel = conf->channel;
+       survey->channel = conf->chandef.chan;
 
        rt2800_register_read(rt2x00dev, CH_IDLE_STA, &idle);
        rt2800_register_read(rt2x00dev, CH_BUSY_STA, &busy);