]> Pileus Git - ~andy/linux/commitdiff
b43: N-PHY: add table for antenna software control
authorRafał Miłecki <zajec5@gmail.com>
Sun, 11 Dec 2011 01:55:32 +0000 (02:55 +0100)
committerJohn W. Linville <linville@tuxdriver.com>
Tue, 13 Dec 2011 20:33:50 +0000 (15:33 -0500)
Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/b43/tables_nphy.c
drivers/net/wireless/b43/tables_nphy.h

index 05ab6a46670358b985366492bc6b8d170ab16613..691839e7541cc2f9398833b02fc20262091a1136 100644 (file)
@@ -2171,6 +2171,48 @@ static const u16 b43_ntab_loftlt1_r3[] = {
        0x0000, 0x0000,
 };
 
+/* volatile  tables, PHY revision >= 3 */
+
+/* indexed by antswctl2g */
+static const u16 b43_ntab_antswctl2g_r3[4][32] = {
+       {
+               0x0082, 0x0082, 0x0211, 0x0222, 0x0328,
+               0x0000, 0x0000, 0x0000, 0x0144, 0x0000,
+               0x0000, 0x0000, 0x0188, 0x0000, 0x0000,
+               0x0000, 0x0082, 0x0082, 0x0211, 0x0222,
+               0x0328, 0x0000, 0x0000, 0x0000, 0x0144,
+               0x0000, 0x0000, 0x0000, 0x0188, 0x0000,
+               0x0000, 0x0000,
+       },
+       {
+               0x0022, 0x0022, 0x0011, 0x0022, 0x0022,
+               0x0000, 0x0000, 0x0000, 0x0011, 0x0000,
+               0x0000, 0x0000, 0x0022, 0x0000, 0x0000,
+               0x0000, 0x0022, 0x0022, 0x0011, 0x0022,
+               0x0022, 0x0000, 0x0000, 0x0000, 0x0011,
+               0x0000, 0x0000, 0x0000, 0x0022, 0x0000,
+               0x0000, 0x0000,
+       },
+       {
+               0x0088, 0x0088, 0x0044, 0x0088, 0x0088,
+               0x0000, 0x0000, 0x0000, 0x0044, 0x0000,
+               0x0000, 0x0000, 0x0088, 0x0000, 0x0000,
+               0x0000, 0x0088, 0x0088, 0x0044, 0x0088,
+               0x0088, 0x0000, 0x0000, 0x0000, 0x0044,
+               0x0000, 0x0000, 0x0000, 0x0088, 0x0000,
+               0x0000, 0x0000,
+       },
+       {
+               0x0022, 0x0022, 0x0011, 0x0022, 0x0000,
+               0x0000, 0x0000, 0x0000, 0x0011, 0x0000,
+               0x0000, 0x0000, 0x0022, 0x0000, 0x0000,
+               0x03cc, 0x0022, 0x0022, 0x0011, 0x0022,
+               0x0000, 0x0000, 0x0000, 0x0000, 0x0011,
+               0x0000, 0x0000, 0x0000, 0x0022, 0x0000,
+               0x0000, 0x03cc,
+       }
+};
+
 /* TX gain tables */
 const u32 b43_ntab_tx_gain_rev0_1_2[] = {
        0x03cc2b44, 0x03cc2b42, 0x03cc2a44, 0x03cc2a42,
@@ -3006,6 +3048,8 @@ void b43_nphy_rev0_1_2_tables_init(struct b43_wldev *dev)
        } while (0)
 void b43_nphy_rev3plus_tables_init(struct b43_wldev *dev)
 {
+       struct ssb_sprom *sprom = dev->dev->bus_sprom;
+
        /* Static tables */
        ntab_upload_r3(dev, B43_NTAB_FRAMESTRUCT_R3, b43_ntab_framestruct_r3);
        ntab_upload_r3(dev, B43_NTAB_PILOT_R3, b43_ntab_pilot_r3);
@@ -3036,7 +3080,11 @@ void b43_nphy_rev3plus_tables_init(struct b43_wldev *dev)
        ntab_upload_r3(dev, B43_NTAB_C1_LOFEEDTH_R3, b43_ntab_loftlt1_r3);
 
        /* Volatile tables */
-       /* TODO */
+       if (sprom->fem.ghz2.antswlut < ARRAY_SIZE(b43_ntab_antswctl2g_r3))
+               ntab_upload_r3(dev, B43_NTAB_ANT_SW_CTL_R3,
+                              b43_ntab_antswctl2g_r3[sprom->fem.ghz2.antswlut]);
+       else
+               B43_WARN_ON(1);
 }
 
 struct nphy_gain_ctl_workaround_entry *b43_nphy_get_gain_ctl_workaround_ent(
index ddca0ddbb85752d624b76bc20d3b8eb6e6502ec2..97038c4819304938a6d41fed53ae3b0d65ce5a6c 100644 (file)
@@ -126,6 +126,9 @@ struct nphy_gain_ctl_workaround_entry *b43_nphy_get_gain_ctl_workaround_ent(
 #define B43_NTAB_C1_LOFEEDTH           B43_NTAB16(0x1B, 0x1C0) /* Local Oscillator Feed Through Lookup Table Core 1 */
 #define B43_NTAB_C1_LOFEEDTH_SIZE      128
 
+/* Volatile N-PHY tables, PHY revision >= 3 */
+#define B43_NTAB_ANT_SW_CTL_R3         B43_NTAB16( 9,   0) /* antenna software control */
+
 /* Static N-PHY tables, PHY revision >= 3 */
 #define B43_NTAB_FRAMESTRUCT_R3                B43_NTAB32(10,   0) /* frame struct  */
 #define B43_NTAB_PILOT_R3              B43_NTAB16(11,   0) /* pilot  */