diff --git a/drivers/net/wireless/b43/phy_n.c b/drivers/net/wireless/b43/phy_n.c
index 8bcfda5..0f7a9a6 100644
--- a/drivers/net/wireless/b43/phy_n.c
+++ b/drivers/net/wireless/b43/phy_n.c
@@ -28,7 +28,7 @@
 #include "b43.h"
 #include "phy_n.h"
 #include "tables_nphy.h"
-
+#include "main.h"

 void b43_nphy_set_rxantenna(struct b43_wldev *dev, int antenna)
 {//TODO
@@ -97,7 +97,7 @@ static int nphy_channel_switch(struct b43_wldev
*dev, unsigned int channel)
                return -ESRCH;

        //FIXME enable/disable band select upper20 in RXCTL
-       if (0 /*FIXME 5Ghz*/)
+       if (b43_current_band(dev->wl) == IEEE80211_BAND_5GHZ)
                b43_radio_maskset(dev, B2055_MASTER1, 0xFF8F, 0x20);
        else
                b43_radio_maskset(dev, B2055_MASTER1, 0xFF8F, 0x50);
@@ -107,7 +107,7 @@ static int nphy_channel_switch(struct b43_wldev
*dev, unsigned int channel)
        b43_radio_write16(dev, B2055_VCO_CAL10, 45);
        b43_radio_write16(dev, B2055_VCO_CAL10, 65);
        udelay(300);
-       if (0 /*FIXME 5Ghz*/)
+       if (b43_current_band(dev->wl) == IEEE80211_BAND_5GHZ)
                b43_phy_set(dev, B43_NPHY_BANDCTL, B43_NPHY_BANDCTL_5GHZ);
        else
                b43_phy_mask(dev, B43_NPHY_BANDCTL, ~B43_NPHY_BANDCTL_5GHZ);
@@ -117,6 +117,7 @@ static int nphy_channel_switch(struct b43_wldev
*dev, unsigned int channel)
        return 0;
 }

+
 static void b43_radio_init2055_pre(struct b43_wldev *dev)
 {
        b43_phy_mask(dev, B43_NPHY_RFCTL_CMD,
@@ -234,6 +235,8 @@ static void b43_nphy_tables_init(struct b43_wldev *dev)
        ntab_upload(dev, B43_NTAB_C1_IQLT, b43_ntab_iqlt1);
        ntab_upload(dev, B43_NTAB_C0_LOFEEDTH, b43_ntab_loftlt0);
        ntab_upload(dev, B43_NTAB_C1_LOFEEDTH, b43_ntab_loftlt1);
+
+       /* TODO for rev >= 3 */
 }

 static void b43_nphy_workarounds(struct b43_wldev *dev)
@@ -392,13 +395,17 @@ ok:
                     ~(B43_NPHY_RFSEQMODE_CAOVER | B43_NPHY_RFSEQMODE_TROVER));
 }

+static void b43_nphy_mimo_config(struct b43_wldev *dev)
+{
+
+}
 static void b43_nphy_bphy_init(struct b43_wldev *dev)
 {
        unsigned int i;
        u16 val;

        val = 0x1E1F;
-       for (i = 0; i < 14; i++) {
+       for (i = 0; i < 16; i++) {
                b43_phy_write(dev, B43_PHY_N_BMODE(0x88 + i), val);
                val -= 0x202;
        }
@@ -410,6 +417,7 @@ static void b43_nphy_bphy_init(struct b43_wldev *dev)
        b43_phy_write(dev, B43_PHY_N_BMODE(0x38), 0x668);
 }

+
 /* RSSI Calibration */
 static void b43_nphy_rssi_cal(struct b43_wldev *dev, u8 type)
 {
@@ -421,11 +429,16 @@ int b43_phy_initn(struct b43_wldev *dev)
        struct b43_phy *phy = &dev->phy;
        u16 tmp;

-       //TODO: Spectral management
        b43_nphy_tables_init(dev);

-       /* Clear all overrides */
-       b43_phy_write(dev, B43_NPHY_RFCTL_OVER, 0);
+       if (phy->rev >= 3) {
+               b43_phy_write(dev, B43_NPHY_TXF_40CO_B1S1, 0);
+               b43_phy_write(dev, B43_NPHY_RFCTL_OVER, 0);
+               b43_phy_write(dev, B43_NPHY_TXF_40CO_B1S0, 0);
+               b43_phy_write(dev, B43_NPHY_TXF_40CO_B32S1, 0);
+       } else
+               b43_phy_write(dev, B43_NPHY_RFCTL_OVER, 0);
+
        b43_phy_write(dev, B43_NPHY_RFCTL_INTC1, 0);
        b43_phy_write(dev, B43_NPHY_RFCTL_INTC2, 0);
        b43_phy_write(dev, B43_NPHY_RFCTL_INTC3, 0);
@@ -433,6 +446,9 @@ int b43_phy_initn(struct b43_wldev *dev)
        b43_phy_mask(dev, B43_NPHY_RFSEQMODE,
                     ~(B43_NPHY_RFSEQMODE_CAOVER |
                       B43_NPHY_RFSEQMODE_TROVER));
+
+       if (phy->rev >= 3)
+               b43_phy_write(dev, B43_PHY_N(0x8F), 0);
        b43_phy_write(dev, B43_NPHY_AFECTL_OVER, 0);

        tmp = (phy->rev < 2) ? 64 : 59;
@@ -443,49 +459,75 @@ int b43_phy_initn(struct b43_wldev *dev)
        b43_phy_write(dev, B43_NPHY_AFESEQ_TX2RX_PUD_20M, 0x20);
        b43_phy_write(dev, B43_NPHY_AFESEQ_TX2RX_PUD_40M, 0x20);

+       /* Fixme for Apple board? */
        b43_phy_write(dev, B43_NPHY_TXREALFD, 184);
-       b43_phy_write(dev, B43_NPHY_MIMO_CRSTXEXT, 200);
-       b43_phy_write(dev, B43_NPHY_PLOAD_CSENSE_EXTLEN, 80);
-       b43_phy_write(dev, B43_NPHY_C2_BCLIPBKOFF, 511);

-       //TODO MIMO-Config
+       b43_phy_write(dev, B43_NPHY_MIMO_CRSTXEXT, 0xC8);
+       b43_phy_write(dev, B43_NPHY_PLOAD_CSENSE_EXTLEN, 0x50);
+       b43_phy_write(dev, B43_NPHY_TXRIFS_FRDEL, 0x30);
+
+       /* Set to mix/auto mode */
+       b43_phy_set(dev, B43_NPHY_MIMOCFG, B43_NPHY_MIMOCFG_AUTO);
+       b43_phy_mask(dev, B43_NPHY_MIMOCFG, ~B43_NPHY_MIMOCFG_GF);
+
        //TODO Update TX/RX chain

        if (phy->rev < 2) {
                b43_phy_write(dev, B43_NPHY_DUP40_GFBL, 0xAA8);
                b43_phy_write(dev, B43_NPHY_DUP40_BL, 0x9A4);
        }
+
        b43_nphy_workarounds(dev);
        b43_nphy_reset_cca(dev);

        ssb_write32(dev->dev, SSB_TMSLOW,
                    ssb_read32(dev->dev, SSB_TMSLOW) | B43_TMSLOW_MACPHYCLKEN);
-       b43_nphy_force_rf_sequence(dev, B43_RFSEQ_RX2TX);
-       b43_nphy_force_rf_sequence(dev, B43_RFSEQ_RESET2RX);
-
-       b43_phy_read(dev, B43_NPHY_CLASSCTL); /* dummy read */
-       //TODO read core1/2 clip1 thres regs
-
-       if (1 /* FIXME Band is 2.4GHz */)
+       do {
+               u16 rfctl1, rfctl2;
+
+               /* turn off PA override */
+               rfctl1 = b43_phy_read(dev, B43_NPHY_RFCTL_INTC1);
+               rfctl2 = b43_phy_read(dev, B43_NPHY_RFCTL_INTC2);
+               tmp = (b43_current_band(dev->wl) == IEEE80211_BAND_2GHZ)?
+                       0x120 : 0x180;
+               /* Fixme b43_phy_set or b43_phy_write? */
+               b43_phy_set(dev, B43_NPHY_RFCTL_INTC1, tmp);
+               b43_phy_set(dev, B43_NPHY_RFCTL_INTC2, tmp);
+               
+               b43_nphy_force_rf_sequence(dev, B43_RFSEQ_RX2TX);
+               b43_nphy_force_rf_sequence(dev, B43_RFSEQ_RESET2RX);
+
+               /* turn on PA override */
+               b43_phy_write(dev, B43_NPHY_RFCTL_INTC1, rfctl1);
+               b43_phy_write(dev, B43_NPHY_RFCTL_INTC2, rfctl2);
+       } while (0);
+
+       if ( b43_current_band(dev->wl) == IEEE80211_BAND_2GHZ )
                b43_nphy_bphy_init(dev);
-       //TODO disable TX power control
-       //TODO Fix the TX power settings
-       //TODO Init periodic calibration with reason 3
+
+       /* turning off power control */
+       b43_nphy_tx_power_type_set(dev, 0);
+       b43_nphy_tx_power_fix(dev);
+       /* TODO measure idle TSSI (tx power control)  */
+       /* TODO set up tx power control  */
+       /* TODO write the below table to the 32-bit table 26 and 27 at offset 
192  */
+       b43_nphy_periodic_calibration_init(dev, B43_PHY_INIT);
        b43_nphy_rssi_cal(dev, 2);
        b43_nphy_rssi_cal(dev, 0);
        b43_nphy_rssi_cal(dev, 1);
-       //TODO get TX gain
+       b43_nphy_tx_gain_get(dev);
        //TODO init superswitch
-       //TODO calibrate LO
-       //TODO idle TSSI TX pctl
-       //TODO TX power control power setup
-       //TODO table writes
-       //TODO TX power control coefficients
-       //TODO enable TX power control
-       //TODO control antenna selection
-       //TODO init radar detection
-       //TODO reset channel if changed
-
+       /* 36. FIXME (already do periodic calibration) */
+       /*   37. set up TX power control coefficients */
+       /*   38. set TX power control type to the configured type */
+       /* 39. If antenna selection type is 2x3 or 2x4 */
+       /*          1. update antenna configuration  */
+       /*   40. init radar detection */
+       b43_phy_write(dev, B43_NPHY_TXMACIF_HOLDOFF, 0x15);
+       b43_phy_write(dev, B43_NPHY_TXMACDELAY, 0x320);
+       
+       /*     43. set TX LPF bandwidth */
+       /*     44. spur workaround  */
        b43err(dev->wl, "IEEE 802.11n devices are not supported, yet.\n");
        return 0;
 }
@@ -508,8 +550,8 @@ static void b43_nphy_op_prepare_structs(struct
b43_wldev *dev)
        struct b43_phy_n *nphy = phy->n;

        memset(nphy, 0, sizeof(*nphy));
-
-       //TODO init struct b43_phy_n
+       if (phy->rev == 3 || phy->rev == 4)
+               nphy->havoid = 1;
 }

 static void b43_nphy_op_free(struct b43_wldev *dev)
_______________________________________________
Bcm43xx-dev mailing list
[email protected]
https://lists.berlios.de/mailman/listinfo/bcm43xx-dev

Reply via email to