ath5k: IQ calibration for AR5211 is slightly different
authorBruno Randolf <br1@einfach.org>
Tue, 9 Mar 2010 07:56:15 +0000 (16:56 +0900)
committerJohn W. Linville <linville@tuxdriver.com>
Wed, 10 Mar 2010 22:44:40 +0000 (17:44 -0500)
according to the HAL sources the calculation of the Q value is slightly
different for AR5211 chips.

i couldn't test this since IQ calibration never finishes on older parts. this
is a different problem...

Signed-off-by: Bruno Randolf <br1@einfach.org>
Acked-by: Nick Kossifidis <mickflemm@gmail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/ath/ath5k/phy.c

index 5aee85f27c0e2622d2b51c3303b0a6f69f6051de..20d562b07c952fbfe5ec2ef2fcb2019d4e21eb27 100644 (file)
@@ -1391,7 +1391,11 @@ static int ath5k_hw_rf511x_calibrate(struct ath5k_hw *ah,
        }
 
        i_coffd = ((i_pwr >> 1) + (q_pwr >> 1)) >> 7;
-       q_coffd = q_pwr >> 7;
+
+       if (ah->ah_version == AR5K_AR5211)
+               q_coffd = q_pwr >> 6;
+       else
+               q_coffd = q_pwr >> 7;
 
        /* No correction */
        if (i_coffd == 0 || q_coffd == 0)
@@ -1405,7 +1409,10 @@ static int ath5k_hw_rf511x_calibrate(struct ath5k_hw *ah,
        if (i_coff < -32)
                i_coff = -32;
 
-       q_coff = (((s32)i_pwr / q_coffd) - 128);
+       if (ah->ah_version == AR5K_AR5211)
+               q_coff = (i_pwr / q_coffd) - 64;
+       else
+               q_coff = (i_pwr / q_coffd) - 128;
 
        /* Boundary check */
        if (q_coff > 15)