rt2x00: rt2800lib: optimize frequency offset adjustment
authorGabor Juhos <juhosg@openwrt.org>
Sat, 17 Aug 2013 12:09:29 +0000 (14:09 +0200)
committerJohn W. Linville <linville@tuxdriver.com>
Thu, 22 Aug 2013 18:30:27 +0000 (14:30 -0400)
Don't write the new value into the register if it is
the same as the old value to avoid unncessary USB bus
traffic with USB devices. The change also saves a few
cycle on MMIO based devices.

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/rt2800lib.c

index de2727774477ac6f960f91bd15619212d1170444..3407ac911fd68f30046fc00d0f4aa471ca4d9762 100644 (file)
@@ -2497,13 +2497,18 @@ static void rt2800_config_channel_rf3053(struct rt2x00_dev *rt2x00dev,
 static void rt2800_adjust_freq_offset(struct rt2x00_dev *rt2x00dev)
 {
        u8 freq_offset;
-       u8 rfcsr;
+       u8 rfcsr, prev_rfcsr;
 
        freq_offset = rt2x00_get_field8(rt2x00dev->freq_offset, RFCSR17_CODE);
        freq_offset = min_t(u8, freq_offset, FREQ_OFFSET_BOUND);
 
        rt2800_rfcsr_read(rt2x00dev, 17, &rfcsr);
+       prev_rfcsr = rfcsr;
+
        rt2x00_set_field8(&rfcsr, RFCSR17_CODE, freq_offset);
+       if (rfcsr == prev_rfcsr)
+               return;
+
        rt2800_rfcsr_write(rt2x00dev, 17, rfcsr);
 }