Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

rtl8187: use different ANAPARAM*_OFF values for 8187B

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>

authored by

Herton Ronaldo Krzesinski and committed by
John W. Linville
4ece16a1 9c0c7a42

+42 -15
+14 -7
drivers/net/wireless/rtl8187_dev.c
··· 430 430 reg = rtl818x_ioread8(priv, &priv->map->CONFIG3); 431 431 rtl818x_iowrite8(priv, &priv->map->CONFIG3, reg | 432 432 RTL818X_CONFIG3_ANAPARAM_WRITE); 433 - rtl818x_iowrite32(priv, &priv->map->ANAPARAM, RTL8225_ANAPARAM_ON); 434 - rtl818x_iowrite32(priv, &priv->map->ANAPARAM2, RTL8225_ANAPARAM2_ON); 433 + rtl818x_iowrite32(priv, &priv->map->ANAPARAM, 434 + RTL8187_RTL8225_ANAPARAM_ON); 435 + rtl818x_iowrite32(priv, &priv->map->ANAPARAM2, 436 + RTL8187_RTL8225_ANAPARAM2_ON); 435 437 rtl818x_iowrite8(priv, &priv->map->CONFIG3, reg & 436 438 ~RTL818X_CONFIG3_ANAPARAM_WRITE); 437 439 rtl818x_iowrite8(priv, &priv->map->EEPROM_CMD, ··· 455 453 reg = rtl818x_ioread8(priv, &priv->map->CONFIG3); 456 454 rtl818x_iowrite8(priv, &priv->map->CONFIG3, 457 455 reg | RTL818X_CONFIG3_ANAPARAM_WRITE); 458 - rtl818x_iowrite32(priv, &priv->map->ANAPARAM, RTL8225_ANAPARAM_ON); 459 - rtl818x_iowrite32(priv, &priv->map->ANAPARAM2, RTL8225_ANAPARAM2_ON); 456 + rtl818x_iowrite32(priv, &priv->map->ANAPARAM, 457 + RTL8187_RTL8225_ANAPARAM_ON); 458 + rtl818x_iowrite32(priv, &priv->map->ANAPARAM2, 459 + RTL8187_RTL8225_ANAPARAM2_ON); 460 460 rtl818x_iowrite8(priv, &priv->map->CONFIG3, 461 461 reg & ~RTL818X_CONFIG3_ANAPARAM_WRITE); 462 462 rtl818x_iowrite8(priv, &priv->map->EEPROM_CMD, RTL818X_EEPROM_CMD_NORMAL); ··· 570 566 reg = rtl818x_ioread8(priv, &priv->map->CONFIG3); 571 567 reg |= RTL818X_CONFIG3_ANAPARAM_WRITE | RTL818X_CONFIG3_GNT_SELECT; 572 568 rtl818x_iowrite8(priv, &priv->map->CONFIG3, reg); 573 - rtl818x_iowrite32(priv, &priv->map->ANAPARAM2, 0x727f3f52); 574 - rtl818x_iowrite32(priv, &priv->map->ANAPARAM, 0x45090658); 575 - rtl818x_iowrite8(priv, &priv->map->ANAPARAM3, 0); 569 + rtl818x_iowrite32(priv, &priv->map->ANAPARAM2, 570 + RTL8187B_RTL8225_ANAPARAM2_ON); 571 + rtl818x_iowrite32(priv, &priv->map->ANAPARAM, 572 + RTL8187B_RTL8225_ANAPARAM_ON); 573 + rtl818x_iowrite8(priv, &priv->map->ANAPARAM3, 574 + RTL8187B_RTL8225_ANAPARAM3_ON); 576 575 577 576 rtl818x_iowrite8(priv, (u8 *)0xFF61, 0x10); 578 577 reg = rtl818x_ioread8(priv, (u8 *)0xFF62);
+17 -4
drivers/net/wireless/rtl8187_rtl8225.c
··· 307 307 reg = rtl818x_ioread8(priv, &priv->map->CONFIG3); 308 308 rtl818x_iowrite8(priv, &priv->map->CONFIG3, 309 309 reg | RTL818X_CONFIG3_ANAPARAM_WRITE); 310 - rtl818x_iowrite32(priv, &priv->map->ANAPARAM2, RTL8225_ANAPARAM2_ON); 310 + rtl818x_iowrite32(priv, &priv->map->ANAPARAM2, 311 + RTL8187_RTL8225_ANAPARAM2_ON); 311 312 rtl818x_iowrite8(priv, &priv->map->CONFIG3, 312 313 reg & ~RTL818X_CONFIG3_ANAPARAM_WRITE); 313 314 rtl818x_iowrite8(priv, &priv->map->EEPROM_CMD, RTL818X_EEPROM_CMD_NORMAL); ··· 561 560 reg = rtl818x_ioread8(priv, &priv->map->CONFIG3); 562 561 rtl818x_iowrite8(priv, &priv->map->CONFIG3, 563 562 reg | RTL818X_CONFIG3_ANAPARAM_WRITE); 564 - rtl818x_iowrite32(priv, &priv->map->ANAPARAM2, RTL8225_ANAPARAM2_ON); 563 + rtl818x_iowrite32(priv, &priv->map->ANAPARAM2, 564 + RTL8187_RTL8225_ANAPARAM2_ON); 565 565 rtl818x_iowrite8(priv, &priv->map->CONFIG3, 566 566 reg & ~RTL818X_CONFIG3_ANAPARAM_WRITE); 567 567 rtl818x_iowrite8(priv, &priv->map->EEPROM_CMD, RTL818X_EEPROM_CMD_NORMAL); ··· 915 913 rtl818x_iowrite8(priv, &priv->map->EEPROM_CMD, RTL818X_EEPROM_CMD_CONFIG); 916 914 reg = rtl818x_ioread8(priv, &priv->map->CONFIG3); 917 915 rtl818x_iowrite8(priv, &priv->map->CONFIG3, reg | RTL818X_CONFIG3_ANAPARAM_WRITE); 918 - rtl818x_iowrite32(priv, &priv->map->ANAPARAM2, RTL8225_ANAPARAM2_OFF); 919 - rtl818x_iowrite32(priv, &priv->map->ANAPARAM, RTL8225_ANAPARAM_OFF); 916 + if (!priv->is_rtl8187b) { 917 + rtl818x_iowrite32(priv, &priv->map->ANAPARAM2, 918 + RTL8187_RTL8225_ANAPARAM2_OFF); 919 + rtl818x_iowrite32(priv, &priv->map->ANAPARAM, 920 + RTL8187_RTL8225_ANAPARAM_OFF); 921 + } else { 922 + rtl818x_iowrite32(priv, &priv->map->ANAPARAM2, 923 + RTL8187B_RTL8225_ANAPARAM2_OFF); 924 + rtl818x_iowrite32(priv, &priv->map->ANAPARAM, 925 + RTL8187B_RTL8225_ANAPARAM_OFF); 926 + rtl818x_iowrite8(priv, &priv->map->ANAPARAM3, 927 + RTL8187B_RTL8225_ANAPARAM3_OFF); 928 + } 920 929 rtl818x_iowrite8(priv, &priv->map->CONFIG3, reg & ~RTL818X_CONFIG3_ANAPARAM_WRITE); 921 930 rtl818x_iowrite8(priv, &priv->map->EEPROM_CMD, RTL818X_EEPROM_CMD_NORMAL); 922 931 }
+11 -4
drivers/net/wireless/rtl8187_rtl8225.h
··· 15 15 #ifndef RTL8187_RTL8225_H 16 16 #define RTL8187_RTL8225_H 17 17 18 - #define RTL8225_ANAPARAM_ON 0xa0000a59 19 - #define RTL8225_ANAPARAM2_ON 0x860c7312 20 - #define RTL8225_ANAPARAM_OFF 0xa00beb59 21 - #define RTL8225_ANAPARAM2_OFF 0x840dec11 18 + #define RTL8187_RTL8225_ANAPARAM_ON 0xa0000a59 19 + #define RTL8187_RTL8225_ANAPARAM2_ON 0x860c7312 20 + #define RTL8187_RTL8225_ANAPARAM_OFF 0xa00beb59 21 + #define RTL8187_RTL8225_ANAPARAM2_OFF 0x840dec11 22 + 23 + #define RTL8187B_RTL8225_ANAPARAM_ON 0x45090658 24 + #define RTL8187B_RTL8225_ANAPARAM2_ON 0x727f3f52 25 + #define RTL8187B_RTL8225_ANAPARAM3_ON 0x00 26 + #define RTL8187B_RTL8225_ANAPARAM_OFF 0x55480658 27 + #define RTL8187B_RTL8225_ANAPARAM2_OFF 0x72003f50 28 + #define RTL8187B_RTL8225_ANAPARAM3_OFF 0x00 22 29 23 30 const struct rtl818x_rf_ops * rtl8187_detect_rf(struct ieee80211_hw *); 24 31