Merge branch 'upstream' into upstream-jgarzik
[pandora-kernel.git] / drivers / net / wireless / bcm43xx / bcm43xx_phy.c
index eafd0f6..3a5c9c2 100644 (file)
@@ -205,8 +205,8 @@ static void bcm43xx_phy_init_pctl(struct bcm43xx_private *bcm)
            (bcm->board_type == 0x0416))
                return;
 
-       bcm43xx_write16(bcm, 0x03E6, bcm43xx_read16(bcm, 0x03E6) & 0xFFDF);
        bcm43xx_phy_write(bcm, 0x0028, 0x8018);
+       bcm43xx_write16(bcm, 0x03E6, bcm43xx_read16(bcm, 0x03E6) & 0xFFDF);
 
        if (phy->type == BCM43xx_PHYTYPE_G) {
                if (!phy->connected)
@@ -317,6 +317,13 @@ static void bcm43xx_phy_agcsetup(struct bcm43xx_private *bcm)
        bcm43xx_ilt_write(bcm, offset + 0x0801, 7);
        bcm43xx_ilt_write(bcm, offset + 0x0802, 16);
        bcm43xx_ilt_write(bcm, offset + 0x0803, 28);
+
+       if (phy->rev >= 6) {
+               bcm43xx_phy_write(bcm, 0x0426, (bcm43xx_phy_read(bcm, 0x0426)
+                                 & 0xFFFC));
+               bcm43xx_phy_write(bcm, 0x0426, (bcm43xx_phy_read(bcm, 0x0426)
+                                 & 0xEFFF));
+       }
 }
 
 static void bcm43xx_phy_setupg(struct bcm43xx_private *bcm)
@@ -337,7 +344,7 @@ static void bcm43xx_phy_setupg(struct bcm43xx_private *bcm)
                for (i = 0; i < BCM43xx_ILT_NOISEG1_SIZE; i++)
                        bcm43xx_ilt_write(bcm, 0x1800 + i, bcm43xx_ilt_noiseg1[i]);
                for (i = 0; i < BCM43xx_ILT_ROTOR_SIZE; i++)
-                       bcm43xx_ilt_write(bcm, 0x2000 + i, bcm43xx_ilt_rotor[i]);
+                       bcm43xx_ilt_write32(bcm, 0x2000 + i, bcm43xx_ilt_rotor[i]);
        } else {
                /* nrssi values are signed 6-bit values. Not sure why we write 0x7654 here... */
                bcm43xx_nrssi_hw_write(bcm, 0xBA98, (s16)0x7654);
@@ -361,7 +368,7 @@ static void bcm43xx_phy_setupg(struct bcm43xx_private *bcm)
        if (phy->rev <= 2)
                for (i = 0; i < BCM43xx_ILT_NOISESCALEG_SIZE; i++)
                        bcm43xx_ilt_write(bcm, 0x1400 + i, bcm43xx_ilt_noisescaleg1[i]);
-       else if ((phy->rev == 7) && (bcm43xx_phy_read(bcm, 0x0449) & 0x0200))
+       else if ((phy->rev >= 7) && (bcm43xx_phy_read(bcm, 0x0449) & 0x0200))
                for (i = 0; i < BCM43xx_ILT_NOISESCALEG_SIZE; i++)
                        bcm43xx_ilt_write(bcm, 0x1400 + i, bcm43xx_ilt_noisescaleg3[i]);
        else
@@ -371,13 +378,13 @@ static void bcm43xx_phy_setupg(struct bcm43xx_private *bcm)
        if (phy->rev == 2)
                for (i = 0; i < BCM43xx_ILT_SIGMASQR_SIZE; i++)
                        bcm43xx_ilt_write(bcm, 0x5000 + i, bcm43xx_ilt_sigmasqr1[i]);
-       else if ((phy->rev > 2) && (phy->rev <= 7))
+       else if ((phy->rev > 2) && (phy->rev <= 8))
                for (i = 0; i < BCM43xx_ILT_SIGMASQR_SIZE; i++)
                        bcm43xx_ilt_write(bcm, 0x5000 + i, bcm43xx_ilt_sigmasqr2[i]);
        
        if (phy->rev == 1) {
                for (i = 0; i < BCM43xx_ILT_RETARD_SIZE; i++)
-                       bcm43xx_ilt_write(bcm, 0x2400 + i, bcm43xx_ilt_retard[i]);
+                       bcm43xx_ilt_write32(bcm, 0x2400 + i, bcm43xx_ilt_retard[i]);
                for (i = 0; i < 4; i++) {
                        bcm43xx_ilt_write(bcm, 0x5404 + i, 0x0020);
                        bcm43xx_ilt_write(bcm, 0x5408 + i, 0x0020);
@@ -500,10 +507,10 @@ static void bcm43xx_phy_setupa(struct bcm43xx_private *bcm)
                for (i = 0; i < BCM43xx_ILT_NOISEA2_SIZE; i++)
                        bcm43xx_ilt_write(bcm, 0x1800 + i, bcm43xx_ilt_noisea2[i]);
                for (i = 0; i < BCM43xx_ILT_ROTOR_SIZE; i++)
-                       bcm43xx_ilt_write(bcm, 0x2000 + i, bcm43xx_ilt_rotor[i]);
+                       bcm43xx_ilt_write32(bcm, 0x2000 + i, bcm43xx_ilt_rotor[i]);
                bcm43xx_phy_init_noisescaletbl(bcm);
                for (i = 0; i < BCM43xx_ILT_RETARD_SIZE; i++)
-                       bcm43xx_ilt_write(bcm, 0x2400 + i, bcm43xx_ilt_retard[i]);
+                       bcm43xx_ilt_write32(bcm, 0x2400 + i, bcm43xx_ilt_retard[i]);
                break;
        case 3:
                for (i = 0; i < 64; i++)
@@ -729,19 +736,19 @@ static void bcm43xx_phy_initb5(struct bcm43xx_private *bcm)
        struct bcm43xx_phyinfo *phy = bcm43xx_current_phy(bcm);
        struct bcm43xx_radioinfo *radio = bcm43xx_current_radio(bcm);
        u16 offset;
+       u16 value;
+       u8 old_channel;
 
-       if (phy->version == 1 &&
-           radio->version == 0x2050) {
+       if (phy->analog == 1)
                bcm43xx_radio_write16(bcm, 0x007A,
                                      bcm43xx_radio_read16(bcm, 0x007A)
                                      | 0x0050);
-       }
        if ((bcm->board_vendor != PCI_VENDOR_ID_BROADCOM) &&
            (bcm->board_type != 0x0416)) {
+               value = 0x2120;
                for (offset = 0x00A8 ; offset < 0x00C7; offset++) {
-                       bcm43xx_phy_write(bcm, offset,
-                                         (bcm43xx_phy_read(bcm, offset) + 0x2020)
-                                         & 0x3F3F);
+                       bcm43xx_phy_write(bcm, offset, value);
+                       value += 0x0202;
                }
        }
        bcm43xx_phy_write(bcm, 0x0035,
@@ -750,7 +757,7 @@ static void bcm43xx_phy_initb5(struct bcm43xx_private *bcm)
        if (radio->version == 0x2050)
                bcm43xx_phy_write(bcm, 0x0038, 0x0667);
 
-       if (phy->connected) {
+       if (phy->type == BCM43xx_PHYTYPE_G) {
                if (radio->version == 0x2050) {
                        bcm43xx_radio_write16(bcm, 0x007A,
                                              bcm43xx_radio_read16(bcm, 0x007A)
@@ -776,7 +783,7 @@ static void bcm43xx_phy_initb5(struct bcm43xx_private *bcm)
                                  bcm43xx_phy_read(bcm, BCM43xx_PHY_RADIO_BITFIELD) | (1 << 11));
        }
 
-       if (phy->version == 1 && radio->version == 0x2050) {
+       if (phy->analog == 1) {
                bcm43xx_phy_write(bcm, 0x0026, 0xCE00);
                bcm43xx_phy_write(bcm, 0x0021, 0x3763);
                bcm43xx_phy_write(bcm, 0x0022, 0x1BC3);
@@ -787,14 +794,15 @@ static void bcm43xx_phy_initb5(struct bcm43xx_private *bcm)
        bcm43xx_phy_write(bcm, 0x0030, 0x00C6);
        bcm43xx_write16(bcm, 0x03EC, 0x3F22);
 
-       if (phy->version == 1 && radio->version == 0x2050)
+       if (phy->analog == 1)
                bcm43xx_phy_write(bcm, 0x0020, 0x3E1C);
        else
                bcm43xx_phy_write(bcm, 0x0020, 0x301C);
 
-       if (phy->version == 0)
+       if (phy->analog == 0)
                bcm43xx_write16(bcm, 0x03E4, 0x3000);
 
+       old_channel = radio->channel;
        /* Force to channel 7, even if not supported. */
        bcm43xx_radio_selectchannel(bcm, 7, 0);
 
@@ -816,11 +824,11 @@ static void bcm43xx_phy_initb5(struct bcm43xx_private *bcm)
 
        bcm43xx_radio_write16(bcm, 0x007A, bcm43xx_radio_read16(bcm, 0x007A) | 0x0007);
 
-       bcm43xx_radio_selectchannel(bcm, BCM43xx_RADIO_DEFAULT_CHANNEL_BG, 0);
+       bcm43xx_radio_selectchannel(bcm, old_channel, 0);
 
        bcm43xx_phy_write(bcm, 0x0014, 0x0080);
        bcm43xx_phy_write(bcm, 0x0032, 0x00CA);
-       bcm43xx_phy_write(bcm, 0x88A3, 0x002A);
+       bcm43xx_phy_write(bcm, 0x002A, 0x88A3);
 
        bcm43xx_radio_set_txpower_bg(bcm, 0xFFFF, 0xFFFF, 0xFFFF);
 
@@ -835,61 +843,24 @@ static void bcm43xx_phy_initb6(struct bcm43xx_private *bcm)
        struct bcm43xx_phyinfo *phy = bcm43xx_current_phy(bcm);
        struct bcm43xx_radioinfo *radio = bcm43xx_current_radio(bcm);
        u16 offset, val;
+       u8 old_channel;
 
        bcm43xx_phy_write(bcm, 0x003E, 0x817A);
        bcm43xx_radio_write16(bcm, 0x007A,
                              (bcm43xx_radio_read16(bcm, 0x007A) | 0x0058));
-       if ((radio->manufact == 0x17F) &&
-           (radio->version == 0x2050) &&
-           (radio->revision == 3 ||
-            radio->revision == 4 ||
-            radio->revision == 5)) {
-               bcm43xx_radio_write16(bcm, 0x0051, 0x001F);
-               bcm43xx_radio_write16(bcm, 0x0052, 0x0040);
-               bcm43xx_radio_write16(bcm, 0x0053, 0x005B);
-               bcm43xx_radio_write16(bcm, 0x0054, 0x0098);
+       if (radio->revision == 4 ||
+            radio->revision == 5) {
+               bcm43xx_radio_write16(bcm, 0x0051, 0x0037);
+               bcm43xx_radio_write16(bcm, 0x0052, 0x0070);
+               bcm43xx_radio_write16(bcm, 0x0053, 0x00B3);
+               bcm43xx_radio_write16(bcm, 0x0054, 0x009B);
                bcm43xx_radio_write16(bcm, 0x005A, 0x0088);
                bcm43xx_radio_write16(bcm, 0x005B, 0x0088);
                bcm43xx_radio_write16(bcm, 0x005D, 0x0088);
                bcm43xx_radio_write16(bcm, 0x005E, 0x0088);
                bcm43xx_radio_write16(bcm, 0x007D, 0x0088);
        }
-       if ((radio->manufact == 0x17F) &&
-           (radio->version == 0x2050) &&
-           (radio->revision == 6)) {
-               bcm43xx_radio_write16(bcm, 0x0051, 0x0000);
-               bcm43xx_radio_write16(bcm, 0x0052, 0x0040);
-               bcm43xx_radio_write16(bcm, 0x0053, 0x00B7);
-               bcm43xx_radio_write16(bcm, 0x0054, 0x0098);
-               bcm43xx_radio_write16(bcm, 0x005A, 0x0088);
-               bcm43xx_radio_write16(bcm, 0x005B, 0x008B);
-               bcm43xx_radio_write16(bcm, 0x005C, 0x00B5);
-               bcm43xx_radio_write16(bcm, 0x005D, 0x0088);
-               bcm43xx_radio_write16(bcm, 0x005E, 0x0088);
-               bcm43xx_radio_write16(bcm, 0x007D, 0x0088);
-               bcm43xx_radio_write16(bcm, 0x007C, 0x0001);
-               bcm43xx_radio_write16(bcm, 0x007E, 0x0008);
-       }
-       if ((radio->manufact == 0x17F) &&
-           (radio->version == 0x2050) &&
-           (radio->revision == 7)) {
-               bcm43xx_radio_write16(bcm, 0x0051, 0x0000);
-               bcm43xx_radio_write16(bcm, 0x0052, 0x0040);
-               bcm43xx_radio_write16(bcm, 0x0053, 0x00B7);
-               bcm43xx_radio_write16(bcm, 0x0054, 0x0098);
-               bcm43xx_radio_write16(bcm, 0x005A, 0x0088);
-               bcm43xx_radio_write16(bcm, 0x005B, 0x00A8);
-               bcm43xx_radio_write16(bcm, 0x005C, 0x0075);
-               bcm43xx_radio_write16(bcm, 0x005D, 0x00F5);
-               bcm43xx_radio_write16(bcm, 0x005E, 0x00B8);
-               bcm43xx_radio_write16(bcm, 0x007D, 0x00E8);
-               bcm43xx_radio_write16(bcm, 0x007C, 0x0001);
-               bcm43xx_radio_write16(bcm, 0x007E, 0x0008);
-               bcm43xx_radio_write16(bcm, 0x007B, 0x0000);
-       }
-       if ((radio->manufact == 0x17F) &&
-           (radio->version == 0x2050) &&
-           (radio->revision == 8)) {
+       if (radio->revision == 8) {
                bcm43xx_radio_write16(bcm, 0x0051, 0x0000);
                bcm43xx_radio_write16(bcm, 0x0052, 0x0040);
                bcm43xx_radio_write16(bcm, 0x0053, 0x00B7);
@@ -933,20 +904,26 @@ static void bcm43xx_phy_initb6(struct bcm43xx_private *bcm)
                                  bcm43xx_phy_read(bcm, 0x0802) | 0x0100);
                bcm43xx_phy_write(bcm, 0x042B,
                                  bcm43xx_phy_read(bcm, 0x042B) | 0x2000);
+               bcm43xx_phy_write(bcm, 0x5B, 0x0000);
+               bcm43xx_phy_write(bcm, 0x5C, 0x0000);
        }
 
-       /* Force to channel 7, even if not supported. */
-       bcm43xx_radio_selectchannel(bcm, 7, 0);
+       old_channel = radio->channel;
+       if (old_channel >= 8)
+               bcm43xx_radio_selectchannel(bcm, 1, 0);
+       else
+               bcm43xx_radio_selectchannel(bcm, 13, 0);
 
        bcm43xx_radio_write16(bcm, 0x0050, 0x0020);
        bcm43xx_radio_write16(bcm, 0x0050, 0x0023);
        udelay(40);
-       bcm43xx_radio_write16(bcm, 0x007C, (bcm43xx_radio_read16(bcm, 0x007C) | 0x0002));
-       bcm43xx_radio_write16(bcm, 0x0050, 0x0020);
-       if (radio->manufact == 0x17F &&
-           radio->version == 0x2050 &&
-           radio->revision <= 2) {
+       if (radio->revision < 6 || radio-> revision == 8) {
+               bcm43xx_radio_write16(bcm, 0x007C, (bcm43xx_radio_read16(bcm, 0x007C)
+                                     | 0x0002));
                bcm43xx_radio_write16(bcm, 0x0050, 0x0020);
+       }
+       if (radio->revision <= 2) {
+               bcm43xx_radio_write16(bcm, 0x007C, 0x0020);
                bcm43xx_radio_write16(bcm, 0x005A, 0x0070);
                bcm43xx_radio_write16(bcm, 0x005B, 0x007B);
                bcm43xx_radio_write16(bcm, 0x005C, 0x00B0);
@@ -954,46 +931,41 @@ static void bcm43xx_phy_initb6(struct bcm43xx_private *bcm)
        bcm43xx_radio_write16(bcm, 0x007A,
                              (bcm43xx_radio_read16(bcm, 0x007A) & 0x00F8) | 0x0007);
 
-       bcm43xx_radio_selectchannel(bcm, BCM43xx_RADIO_DEFAULT_CHANNEL_BG, 0);
+       bcm43xx_radio_selectchannel(bcm, old_channel, 0);
 
        bcm43xx_phy_write(bcm, 0x0014, 0x0200);
-       if (radio->version == 0x2050){
-               if (radio->revision == 3 ||
-                   radio->revision == 4 ||
-                   radio->revision == 5)
-                       bcm43xx_phy_write(bcm, 0x002A, 0x8AC0);
-               else
-                       bcm43xx_phy_write(bcm, 0x002A, 0x88C2);
-       }
+       if (radio->revision >= 6)
+               bcm43xx_phy_write(bcm, 0x002A, 0x88C2);
+       else
+               bcm43xx_phy_write(bcm, 0x002A, 0x8AC0);
        bcm43xx_phy_write(bcm, 0x0038, 0x0668);
        bcm43xx_radio_set_txpower_bg(bcm, 0xFFFF, 0xFFFF, 0xFFFF);
-       if (radio->version == 0x2050) {
-               if (radio->revision == 3 ||
-                   radio->revision == 4 ||
-                   radio->revision == 5)
-                       bcm43xx_phy_write(bcm, 0x005D, bcm43xx_phy_read(bcm, 0x005D) | 0x0003);
-               else if (radio->revision <= 2)
-                       bcm43xx_radio_write16(bcm, 0x005D, 0x000D);
-       }
+       if (radio->revision <= 5)
+               bcm43xx_phy_write(bcm, 0x005D, bcm43xx_phy_read(bcm, 0x005D) | 0x0003);
+       if (radio->revision <= 2)
+               bcm43xx_radio_write16(bcm, 0x005D, 0x000D);
        
-       if (phy->rev == 4)
-               bcm43xx_phy_write(bcm, 0x0002, (bcm43xx_phy_read(bcm, 0x0002) & 0xFFC0) | 0x0004);
-       else
+       if (phy->analog == 4){
                bcm43xx_write16(bcm, 0x03E4, 0x0009);
+               bcm43xx_phy_write(bcm, 0x61, bcm43xx_phy_read(bcm, 0x61) & 0xFFF);
+       } else {
+               bcm43xx_phy_write(bcm, 0x0002, (bcm43xx_phy_read(bcm, 0x0002) & 0xFFC0) | 0x0004);
+       }
+       if (phy->type == BCM43xx_PHYTYPE_G)
+               bcm43xx_write16(bcm, 0x03E6, 0x0);
        if (phy->type == BCM43xx_PHYTYPE_B) {
                bcm43xx_write16(bcm, 0x03E6, 0x8140);
                bcm43xx_phy_write(bcm, 0x0016, 0x0410);
                bcm43xx_phy_write(bcm, 0x0017, 0x0820);
                bcm43xx_phy_write(bcm, 0x0062, 0x0007);
                (void) bcm43xx_radio_calibrationvalue(bcm);
-               bcm43xx_phy_lo_b_measure(bcm);
+               bcm43xx_phy_lo_g_measure(bcm);
                if (bcm->sprom.boardflags & BCM43xx_BFL_RSSI) {
                        bcm43xx_calc_nrssi_slope(bcm);
                        bcm43xx_calc_nrssi_threshold(bcm);
                }
                bcm43xx_phy_init_pctl(bcm);
-       } else
-               bcm43xx_write16(bcm, 0x03E6, 0x0);
+       }
 }
 
 static void bcm43xx_calc_loopback_gain(struct bcm43xx_private *bcm)
@@ -1063,7 +1035,7 @@ static void bcm43xx_calc_loopback_gain(struct bcm43xx_private *bcm)
        bcm43xx_phy_write(bcm, 0x005A, 0x0780);
        bcm43xx_phy_write(bcm, 0x0059, 0xC810);
        bcm43xx_phy_write(bcm, 0x0058, 0x000D);
-       if (phy->version == 0) {
+       if (phy->analog == 0) {
                bcm43xx_phy_write(bcm, 0x0003, 0x0122);
        } else {
                bcm43xx_phy_write(bcm, 0x000A,
@@ -1197,7 +1169,7 @@ static void bcm43xx_phy_initg(struct bcm43xx_private *bcm)
 
        if (phy->rev == 1)
                bcm43xx_phy_initb5(bcm);
-       else if (phy->rev >= 2 && phy->rev <= 7)
+       else
                bcm43xx_phy_initb6(bcm);
        if (phy->rev >= 2 || phy->connected)
                bcm43xx_phy_inita(bcm);
@@ -1205,27 +1177,30 @@ static void bcm43xx_phy_initg(struct bcm43xx_private *bcm)
        if (phy->rev >= 2) {
                bcm43xx_phy_write(bcm, 0x0814, 0x0000);
                bcm43xx_phy_write(bcm, 0x0815, 0x0000);
-               if (phy->rev == 2)
-                       bcm43xx_phy_write(bcm, 0x0811, 0x0000);
-               else if (phy->rev >= 3)
-                       bcm43xx_phy_write(bcm, 0x0811, 0x0400);
+       }
+       if (phy->rev == 2) {
+               bcm43xx_phy_write(bcm, 0x0811, 0x0000);
                bcm43xx_phy_write(bcm, 0x0015, 0x00C0);
-               if (phy->connected) {
-                       tmp = bcm43xx_phy_read(bcm, 0x0400) & 0xFF;
-                       if (tmp < 6) {
-                               bcm43xx_phy_write(bcm, 0x04C2, 0x1816);
-                               bcm43xx_phy_write(bcm, 0x04C3, 0x8006);
-                               if (tmp != 3) {
-                                       bcm43xx_phy_write(bcm, 0x04CC,
-                                                         (bcm43xx_phy_read(bcm, 0x04CC)
-                                                          & 0x00FF) | 0x1F00);
-                               }
+       }
+       if (phy->rev >= 3) {
+               bcm43xx_phy_write(bcm, 0x0811, 0x0400);
+               bcm43xx_phy_write(bcm, 0x0015, 0x00C0);
+       }
+       if (phy->connected) {
+               tmp = bcm43xx_phy_read(bcm, 0x0400) & 0xFF;
+               if (tmp < 6) {
+                       bcm43xx_phy_write(bcm, 0x04C2, 0x1816);
+                       bcm43xx_phy_write(bcm, 0x04C3, 0x8006);
+                       if (tmp != 3) {
+                               bcm43xx_phy_write(bcm, 0x04CC,
+                                                 (bcm43xx_phy_read(bcm, 0x04CC)
+                                                  & 0x00FF) | 0x1F00);
                        }
                }
        }
        if (phy->rev < 3 && phy->connected)
                bcm43xx_phy_write(bcm, 0x047E, 0x0078);
-       if (phy->rev >= 6 && phy->rev <= 8) {
+       if (radio->revision == 8) {
                bcm43xx_phy_write(bcm, 0x0801, bcm43xx_phy_read(bcm, 0x0801) | 0x0080);
                bcm43xx_phy_write(bcm, 0x043E, bcm43xx_phy_read(bcm, 0x043E) | 0x0004);
        }
@@ -1241,23 +1216,22 @@ static void bcm43xx_phy_initg(struct bcm43xx_private *bcm)
                bcm43xx_phy_lo_g_measure(bcm);
        } else {
                if (radio->version == 0x2050 && radio->revision == 8) {
-                       //FIXME
+                       bcm43xx_radio_write16(bcm, 0x0052,
+                                             (radio->txctl1 << 4) | radio->txctl2);
                } else {
                        bcm43xx_radio_write16(bcm, 0x0052,
                                              (bcm43xx_radio_read16(bcm, 0x0052)
                                               & 0xFFF0) | radio->txctl1);
                }
                if (phy->rev >= 6) {
-                       /*
                        bcm43xx_phy_write(bcm, 0x0036,
                                          (bcm43xx_phy_read(bcm, 0x0036)
-                                          & 0xF000) | (FIXME << 12));
-                       */
+                                          & 0xF000) | (radio->txctl2 << 12));
                }
                if (bcm->sprom.boardflags & BCM43xx_BFL_PACTRL)
                        bcm43xx_phy_write(bcm, 0x002E, 0x8075);
                else
-                       bcm43xx_phy_write(bcm, 0x003E, 0x807F);
+                       bcm43xx_phy_write(bcm, 0x002E, 0x807F);
                if (phy->rev < 2)
                        bcm43xx_phy_write(bcm, 0x002F, 0x0101);
                else
@@ -1639,14 +1613,14 @@ void bcm43xx_phy_set_baseband_attenuation(struct bcm43xx_private *bcm,
        struct bcm43xx_phyinfo *phy = bcm43xx_current_phy(bcm);
        u16 value;
 
-       if (phy->version == 0) {
+       if (phy->analog == 0) {
                value = (bcm43xx_read16(bcm, 0x03E6) & 0xFFF0);
                value |= (baseband_attenuation & 0x000F);
                bcm43xx_write16(bcm, 0x03E6, value);
                return;
        }
 
-       if (phy->version > 1) {
+       if (phy->analog > 1) {
                value = bcm43xx_phy_read(bcm, 0x0060) & ~0x003C;
                value |= (baseband_attenuation << 2) & 0x003C;
        } else {