rt2x00: rt2800lib: use a MCU command for frequency adjustment on USB devices
authorGabor Juhos <juhosg@openwrt.org>
Sat, 17 Aug 2013 12:09:30 +0000 (14:09 +0200)
committerJohn W. Linville <linville@tuxdriver.com>
Thu, 22 Aug 2013 18:30:27 +0000 (14:30 -0400)
According to the Ralink driver, there is an MCU
command which can be used to send the frequency
offset value directly to the USB device without
going through the RFCSR writing sequence.

Based on the DPO_RT5572_LinuxSTA_2.6.0.1_20120629
driver.

Reference:
  RTMPAdjustFrequencyOffset function in common/rt_rf.c

Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/rt2x00/rt2800.h
drivers/net/wireless/rt2x00/rt2800lib.c

index 6e69b961909f3673c3fe7ff95cd5715900cefb83..e25e5bf34aa7e569fd2c091b7f2360d8d348edad 100644 (file)
@@ -2794,6 +2794,7 @@ enum rt2800_eeprom_word {
 #define MCU_RADAR                      0x60
 #define MCU_BOOT_SIGNAL                        0x72
 #define MCU_ANT_SELECT                 0X73
+#define MCU_FREQ_OFFSET                        0x74
 #define MCU_BBP_SIGNAL                 0x80
 #define MCU_POWER_SAVE                 0x83
 #define MCU_BAND_SELECT                0x91
index 3407ac911fd68f30046fc00d0f4aa471ca4d9762..bebc56f5b8498c824a2f2c4c0ba7efe3987fd4c2 100644 (file)
@@ -2509,7 +2509,11 @@ static void rt2800_adjust_freq_offset(struct rt2x00_dev *rt2x00dev)
        if (rfcsr == prev_rfcsr)
                return;
 
-       rt2800_rfcsr_write(rt2x00dev, 17, rfcsr);
+       if (rt2x00_is_usb(rt2x00dev))
+               rt2800_mcu_request(rt2x00dev, MCU_FREQ_OFFSET, 0xff,
+                                  freq_offset, prev_rfcsr);
+       else
+               rt2800_rfcsr_write(rt2x00dev, 17, rfcsr);
 }
 
 static void rt2800_config_channel_rf3290(struct rt2x00_dev *rt2x00dev,