rx_status.antenna = (flags2 >> 15) & 1;
                        rx_status.rate_idx = (flags >> 20) & 0xF;
                        agc = (flags2 >> 17) & 0x7F;
-                       if (priv->r8185) {
+
+                       if (priv->chip_family == RTL818X_CHIP_FAMILY_RTL8185) {
                                if (rx_status.rate_idx > 3)
                                        signal = 90 - clamp_t(u8, agc, 25, 90);
                                else
                   (ieee80211_get_tx_rate(dev, info)->hw_value << 24) |
                   skb->len;
 
-       if (priv->r8185)
+       if (priv->chip_family != RTL818X_CHIP_FAMILY_RTL8180)
                tx_flags |= RTL818X_TX_DESC_FLAG_DMA |
                            RTL818X_TX_DESC_FLAG_NO_ENC;
 
                rts_duration = ieee80211_rts_duration(dev, priv->vif, skb->len,
                                                      info);
 
-       if (!priv->r8185) {
+       if (priv->chip_family == RTL818X_CHIP_FAMILY_RTL8180) {
                unsigned int remainder;
 
                plcp_len = DIV_ROUND_UP(16 * (skb->len + 4),
 
        rtl818x_iowrite8(priv, &priv->map->MSR, 0);
 
-       if (!priv->r8185)
+       if (priv->chip_family == RTL818X_CHIP_FAMILY_RTL8180)
                rtl8180_set_anaparam(priv, priv->anaparam);
 
        rtl818x_iowrite32(priv, &priv->map->RDSAR, priv->rx_ring_dma);
        rtl818x_iowrite8(priv, &priv->map->EEPROM_CMD, RTL818X_EEPROM_CMD_CONFIG);
        reg = rtl818x_ioread8(priv, &priv->map->CONFIG2);
        rtl818x_iowrite8(priv, &priv->map->CONFIG2, reg & ~(1 << 3));
-       if (priv->r8185) {
+       if (priv->chip_family == RTL818X_CHIP_FAMILY_RTL8185) {
                reg = rtl818x_ioread8(priv, &priv->map->CONFIG2);
                rtl818x_iowrite8(priv, &priv->map->CONFIG2, reg | (1 << 4));
        }
 
        rtl818x_iowrite32(priv, &priv->map->INT_TIMEOUT, 0);
 
-       if (priv->r8185) {
+       if (priv->chip_family != RTL818X_CHIP_FAMILY_RTL8180) {
                rtl818x_iowrite8(priv, &priv->map->WPA_CONF, 0);
                rtl818x_iowrite8(priv, &priv->map->RATE_FALLBACK, 0x81);
                rtl818x_iowrite8(priv, &priv->map->RESP_RATE, (8 << 4) | 0);
        }
 
        priv->rf->init(dev);
-       if (priv->r8185)
+       if (priv->chip_family == RTL818X_CHIP_FAMILY_RTL8185)
                rtl818x_iowrite16(priv, &priv->map->BRSR, 0x01F3);
        return 0;
 }
              RTL818X_RX_CONF_BROADCAST |
              RTL818X_RX_CONF_NICMAC;
 
-       if (priv->r8185)
+       if (priv->chip_family == RTL818X_CHIP_FAMILY_RTL8185)
                reg |= RTL818X_RX_CONF_CSDM1 | RTL818X_RX_CONF_CSDM2;
        else {
                reg |= (priv->rfparam & RF_PARAM_CARRIERSENSE1)
        priv->rx_conf = reg;
        rtl818x_iowrite32(priv, &priv->map->RX_CONF, reg);
 
-       if (priv->r8185) {
+       if (priv->chip_family != RTL818X_CHIP_FAMILY_RTL8180) {
                reg = rtl818x_ioread8(priv, &priv->map->CW_CONF);
 
                /* CW is not on per-packet basis.
        reg |= (6 << 21 /* MAX TX DMA */) |
               RTL818X_TX_CONF_NO_ICV;
 
-       if (priv->r8185)
+
+
+       if (priv->chip_family != RTL818X_CHIP_FAMILY_RTL8180)
                reg &= ~RTL818X_TX_CONF_PROBE_DTS;
        else
                reg &= ~RTL818X_TX_CONF_HW_SEQNUM;
        switch (reg) {
        case RTL818X_TX_CONF_R8180_ABCD:
                chip_name = "RTL8180";
+               priv->chip_family = RTL818X_CHIP_FAMILY_RTL8180;
                break;
+
        case RTL818X_TX_CONF_R8180_F:
                chip_name = "RTL8180vF";
+               priv->chip_family = RTL818X_CHIP_FAMILY_RTL8180;
                break;
+
        case RTL818X_TX_CONF_R8185_ABC:
                chip_name = "RTL8185";
+               priv->chip_family = RTL818X_CHIP_FAMILY_RTL8185;
                break;
+
        case RTL818X_TX_CONF_R8185_D:
                chip_name = "RTL8185vD";
+               priv->chip_family = RTL818X_CHIP_FAMILY_RTL8185;
                break;
        default:
                printk(KERN_ERR "%s (rtl8180): Unknown chip! (0x%x)\n",
                goto err_iounmap;
        }
 
-       priv->r8185 = reg & RTL818X_TX_CONF_R8185_ABC;
-       if (priv->r8185) {
+       if (priv->chip_family != RTL818X_CHIP_FAMILY_RTL8180) {
                priv->band.n_bitrates = ARRAY_SIZE(rtl818x_rates);
                pci_try_set_mwi(pdev);
        }
 
        eeprom_93cx6_read(&eeprom, 0x17, &eeprom_val);
        priv->csthreshold = eeprom_val >> 8;
-       if (!priv->r8185) {
+       if (priv->chip_family != RTL818X_CHIP_FAMILY_RTL8185) {
                __le32 anaparam;
                eeprom_93cx6_multiread(&eeprom, 0xD, (__le16 *)&anaparam, 2);
                priv->anaparam = le32_to_cpu(anaparam);
        }
 
        /* OFDM TX power */
-       if (priv->r8185) {
+       if (priv->chip_family != RTL818X_CHIP_FAMILY_RTL8180) {
                for (i = 0; i < 14; i += 2) {
                        u16 txpwr;
                        eeprom_93cx6_read(&eeprom, 0x20 + (i >> 1), &txpwr);