}
 }
 
+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;
        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);