rtl8187: use different ANAPARAM*_OFF values for 8187B
authorHerton Ronaldo Krzesinski <herton@mandriva.com.br>
Thu, 10 Jul 2008 21:55:23 +0000 (18:55 -0300)
committerJohn W. Linville <linville@tuxdriver.com>
Mon, 14 Jul 2008 18:52:56 +0000 (14:52 -0400)
For RTL8187B it seems we need special values too for ANAPARAM*_OFF
values (and not use RTL8187 ones). The ANAPARAM*_OFF values used are the
stock ones read from the hardware after a cold boot.

Signed-off-by: Herton Ronaldo Krzesinski <herton@mandriva.com.br>
Signed-off-by: Hin-Tak Leung <htl10@users.sourceforge.net>
Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/rtl8187_dev.c
drivers/net/wireless/rtl8187_rtl8225.c
drivers/net/wireless/rtl8187_rtl8225.h

index bdea1d8ad8ef992ff3f185ae9ce3f0c331aef297..d3067b1216caad08de4b94c03b6eb412e00a0276 100644 (file)
@@ -430,8 +430,10 @@ static int rtl8187_init_hw(struct ieee80211_hw *dev)
        reg = rtl818x_ioread8(priv, &priv->map->CONFIG3);
        rtl818x_iowrite8(priv, &priv->map->CONFIG3, reg |
                         RTL818X_CONFIG3_ANAPARAM_WRITE);
-       rtl818x_iowrite32(priv, &priv->map->ANAPARAM, RTL8225_ANAPARAM_ON);
-       rtl818x_iowrite32(priv, &priv->map->ANAPARAM2, RTL8225_ANAPARAM2_ON);
+       rtl818x_iowrite32(priv, &priv->map->ANAPARAM,
+                         RTL8187_RTL8225_ANAPARAM_ON);
+       rtl818x_iowrite32(priv, &priv->map->ANAPARAM2,
+                         RTL8187_RTL8225_ANAPARAM2_ON);
        rtl818x_iowrite8(priv, &priv->map->CONFIG3, reg &
                         ~RTL818X_CONFIG3_ANAPARAM_WRITE);
        rtl818x_iowrite8(priv, &priv->map->EEPROM_CMD,
@@ -453,8 +455,10 @@ static int rtl8187_init_hw(struct ieee80211_hw *dev)
        reg = rtl818x_ioread8(priv, &priv->map->CONFIG3);
        rtl818x_iowrite8(priv, &priv->map->CONFIG3,
                        reg | RTL818X_CONFIG3_ANAPARAM_WRITE);
-       rtl818x_iowrite32(priv, &priv->map->ANAPARAM, RTL8225_ANAPARAM_ON);
-       rtl818x_iowrite32(priv, &priv->map->ANAPARAM2, RTL8225_ANAPARAM2_ON);
+       rtl818x_iowrite32(priv, &priv->map->ANAPARAM,
+                         RTL8187_RTL8225_ANAPARAM_ON);
+       rtl818x_iowrite32(priv, &priv->map->ANAPARAM2,
+                         RTL8187_RTL8225_ANAPARAM2_ON);
        rtl818x_iowrite8(priv, &priv->map->CONFIG3,
                        reg & ~RTL818X_CONFIG3_ANAPARAM_WRITE);
        rtl818x_iowrite8(priv, &priv->map->EEPROM_CMD, RTL818X_EEPROM_CMD_NORMAL);
@@ -566,9 +570,12 @@ static int rtl8187b_init_hw(struct ieee80211_hw *dev)
        reg = rtl818x_ioread8(priv, &priv->map->CONFIG3);
        reg |= RTL818X_CONFIG3_ANAPARAM_WRITE | RTL818X_CONFIG3_GNT_SELECT;
        rtl818x_iowrite8(priv, &priv->map->CONFIG3, reg);
-       rtl818x_iowrite32(priv, &priv->map->ANAPARAM2, 0x727f3f52);
-       rtl818x_iowrite32(priv, &priv->map->ANAPARAM, 0x45090658);
-       rtl818x_iowrite8(priv, &priv->map->ANAPARAM3, 0);
+       rtl818x_iowrite32(priv, &priv->map->ANAPARAM2,
+                         RTL8187B_RTL8225_ANAPARAM2_ON);
+       rtl818x_iowrite32(priv, &priv->map->ANAPARAM,
+                         RTL8187B_RTL8225_ANAPARAM_ON);
+       rtl818x_iowrite8(priv, &priv->map->ANAPARAM3,
+                        RTL8187B_RTL8225_ANAPARAM3_ON);
 
        rtl818x_iowrite8(priv, (u8 *)0xFF61, 0x10);
        reg = rtl818x_ioread8(priv, (u8 *)0xFF62);
index 1e059de971163cecd1db095fdade0cefc8fed72f..1bae8990341096913c6800c19df076ac4f7e208a 100644 (file)
@@ -307,7 +307,8 @@ static void rtl8225_rf_set_tx_power(struct ieee80211_hw *dev, int channel)
        reg = rtl818x_ioread8(priv, &priv->map->CONFIG3);
        rtl818x_iowrite8(priv, &priv->map->CONFIG3,
                        reg | RTL818X_CONFIG3_ANAPARAM_WRITE);
-       rtl818x_iowrite32(priv, &priv->map->ANAPARAM2, RTL8225_ANAPARAM2_ON);
+       rtl818x_iowrite32(priv, &priv->map->ANAPARAM2,
+                         RTL8187_RTL8225_ANAPARAM2_ON);
        rtl818x_iowrite8(priv, &priv->map->CONFIG3,
                        reg & ~RTL818X_CONFIG3_ANAPARAM_WRITE);
        rtl818x_iowrite8(priv, &priv->map->EEPROM_CMD, RTL818X_EEPROM_CMD_NORMAL);
@@ -560,7 +561,8 @@ static void rtl8225z2_rf_set_tx_power(struct ieee80211_hw *dev, int channel)
        reg = rtl818x_ioread8(priv, &priv->map->CONFIG3);
        rtl818x_iowrite8(priv, &priv->map->CONFIG3,
                        reg | RTL818X_CONFIG3_ANAPARAM_WRITE);
-       rtl818x_iowrite32(priv, &priv->map->ANAPARAM2, RTL8225_ANAPARAM2_ON);
+       rtl818x_iowrite32(priv, &priv->map->ANAPARAM2,
+                         RTL8187_RTL8225_ANAPARAM2_ON);
        rtl818x_iowrite8(priv, &priv->map->CONFIG3,
                        reg & ~RTL818X_CONFIG3_ANAPARAM_WRITE);
        rtl818x_iowrite8(priv, &priv->map->EEPROM_CMD, RTL818X_EEPROM_CMD_NORMAL);
@@ -913,8 +915,19 @@ static void rtl8225_rf_stop(struct ieee80211_hw *dev)
        rtl818x_iowrite8(priv, &priv->map->EEPROM_CMD, RTL818X_EEPROM_CMD_CONFIG);
        reg = rtl818x_ioread8(priv, &priv->map->CONFIG3);
        rtl818x_iowrite8(priv, &priv->map->CONFIG3, reg | RTL818X_CONFIG3_ANAPARAM_WRITE);
-       rtl818x_iowrite32(priv, &priv->map->ANAPARAM2, RTL8225_ANAPARAM2_OFF);
-       rtl818x_iowrite32(priv, &priv->map->ANAPARAM, RTL8225_ANAPARAM_OFF);
+       if (!priv->is_rtl8187b) {
+               rtl818x_iowrite32(priv, &priv->map->ANAPARAM2,
+                                 RTL8187_RTL8225_ANAPARAM2_OFF);
+               rtl818x_iowrite32(priv, &priv->map->ANAPARAM,
+                                 RTL8187_RTL8225_ANAPARAM_OFF);
+       } else {
+               rtl818x_iowrite32(priv, &priv->map->ANAPARAM2,
+                                 RTL8187B_RTL8225_ANAPARAM2_OFF);
+               rtl818x_iowrite32(priv, &priv->map->ANAPARAM,
+                                 RTL8187B_RTL8225_ANAPARAM_OFF);
+               rtl818x_iowrite8(priv, &priv->map->ANAPARAM3,
+                                 RTL8187B_RTL8225_ANAPARAM3_OFF);
+       }
        rtl818x_iowrite8(priv, &priv->map->CONFIG3, reg & ~RTL818X_CONFIG3_ANAPARAM_WRITE);
        rtl818x_iowrite8(priv, &priv->map->EEPROM_CMD, RTL818X_EEPROM_CMD_NORMAL);
 }
index d39ed0295b6e70887f15954330f6e560a585aa18..20c5b6ead0f6649194984cc8f3f464cae74b24c5 100644 (file)
 #ifndef RTL8187_RTL8225_H
 #define RTL8187_RTL8225_H
 
-#define RTL8225_ANAPARAM_ON    0xa0000a59
-#define RTL8225_ANAPARAM2_ON   0x860c7312
-#define RTL8225_ANAPARAM_OFF   0xa00beb59
-#define RTL8225_ANAPARAM2_OFF  0x840dec11
+#define RTL8187_RTL8225_ANAPARAM_ON    0xa0000a59
+#define RTL8187_RTL8225_ANAPARAM2_ON   0x860c7312
+#define RTL8187_RTL8225_ANAPARAM_OFF   0xa00beb59
+#define RTL8187_RTL8225_ANAPARAM2_OFF  0x840dec11
+
+#define RTL8187B_RTL8225_ANAPARAM_ON   0x45090658
+#define RTL8187B_RTL8225_ANAPARAM2_ON  0x727f3f52
+#define RTL8187B_RTL8225_ANAPARAM3_ON  0x00
+#define RTL8187B_RTL8225_ANAPARAM_OFF  0x55480658
+#define RTL8187B_RTL8225_ANAPARAM2_OFF 0x72003f50
+#define RTL8187B_RTL8225_ANAPARAM3_OFF 0x00
 
 const struct rtl818x_rf_ops * rtl8187_detect_rf(struct ieee80211_hw *);