rtl8180: config carbus register for rtl8187se
authorAndrea Merello <andrea.merello@gmail.com>
Wed, 26 Mar 2014 20:01:19 +0000 (21:01 +0100)
committerJohn W. Linville <linville@tuxdriver.com>
Thu, 27 Mar 2014 18:20:08 +0000 (14:20 -0400)
configuration of carbus-related registers is different for
rtl8187se.
Introduce a dedicated function that does it for all cards in the
proper way

Signed-off-by: Andrea Merello <andrea.merello@gmail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/rtl818x/rtl8180/dev.c

index eb86ede246d27896dc75d1b45d7b8cdaf0b3ff4b..06d3c30413e05d0914b206a3e3b524465ddf12bd 100644 (file)
@@ -601,6 +601,26 @@ static void rtl8180_conf_basic_rates(struct ieee80211_hw *dev,
        }
 }
 
+static void rtl8180_config_cardbus(struct ieee80211_hw *dev)
+{
+       struct rtl8180_priv *priv = dev->priv;
+       u16 reg16;
+       u8 reg8;
+
+       reg8 = rtl818x_ioread8(priv, &priv->map->CONFIG3);
+       reg8 |= 1 << 1;
+       rtl818x_iowrite8(priv, &priv->map->CONFIG3, reg8);
+
+       if (priv->chip_family == RTL818X_CHIP_FAMILY_RTL8187SE) {
+               rtl818x_iowrite16(priv, FEMR_SE, 0xffff);
+       } else {
+               reg16 = rtl818x_ioread16(priv, &priv->map->FEMR);
+                       reg16 |= (1 << 15) | (1 << 14) | (1 << 4);
+               rtl818x_iowrite16(priv, &priv->map->FEMR, reg16);
+       }
+
+}
+
 static int rtl8180_init_hw(struct ieee80211_hw *dev)
 {
        struct rtl8180_priv *priv = dev->priv;
@@ -632,13 +652,7 @@ static int rtl8180_init_hw(struct ieee80211_hw *dev)
        msleep(200);
 
        if (rtl818x_ioread8(priv, &priv->map->CONFIG3) & (1 << 3)) {
-               /* For cardbus */
-               reg = rtl818x_ioread8(priv, &priv->map->CONFIG3);
-               reg |= 1 << 1;
-               rtl818x_iowrite8(priv, &priv->map->CONFIG3, reg);
-               reg = rtl818x_ioread16(priv, &priv->map->FEMR);
-               reg |= (1 << 15) | (1 << 14) | (1 << 4);
-               rtl818x_iowrite16(priv, &priv->map->FEMR, reg);
+               rtl8180_config_cardbus(dev);
        }
 
        rtl818x_iowrite8(priv, &priv->map->MSR, 0);