[PATCH 2/7] b43: N-PHY: implement TX PHY cleanup and setup

2010-01-17 Thread Rafał Miłecki

Signed-off-by: Rafał Miłecki zaj...@gmail.com
---
  drivers/net/wireless/b43/phy_n.c |  112 +-
  1 files changed, 110 insertions(+), 2 deletions(-)

diff --git a/drivers/net/wireless/b43/phy_n.c b/drivers/net/wireless/b43/phy_n.c
index 4a1853b..34dd4a2 100644
--- a/drivers/net/wireless/b43/phy_n.c
+++ b/drivers/net/wireless/b43/phy_n.c
@@ -1505,6 +1505,114 @@ static struct nphy_txgains b43_nphy_get_tx_gains(struct 
b43_wldev *dev)
return target;
  }

+/* http://bcm-v4.sipsolutions.net/802.11/PHY/N/TxCalPhyCleanup */
+static void b43_nphy_tx_cal_phy_cleanup(struct b43_wldev *dev)
+{
+   u16 *regs = dev-phy.n-tx_rx_cal_phy_saveregs;
+
+   if (dev-phy.rev = 3) {
+   b43_phy_write(dev, B43_NPHY_AFECTL_C1, regs[0]);
+   b43_phy_write(dev, B43_NPHY_AFECTL_C2, regs[1]);
+   b43_phy_write(dev, B43_NPHY_AFECTL_OVER1, regs[2]);
+   b43_phy_write(dev, B43_NPHY_AFECTL_OVER, regs[3]);
+   b43_phy_write(dev, B43_NPHY_BBCFG, regs[4]);
+   /* TODO: Write an N PHY Table with ID 8, length 1, offset 3,
+   width 16, and data from regs[5] */
+   /* TODO: Write an N PHY Table with ID 8, length 1, offset 19,
+   width 16, and data from regs[6] */
+   b43_phy_write(dev, B43_NPHY_RFCTL_INTC1, regs[7]);
+   b43_phy_write(dev, B43_NPHY_RFCTL_INTC2, regs[8]);
+   b43_phy_write(dev, B43_NPHY_PAPD_EN0, regs[9]);
+   b43_phy_write(dev, B43_NPHY_PAPD_EN1, regs[10]);
+   b43_nphy_reset_cca(dev);
+   } else {
+   b43_phy_maskset(dev, B43_NPHY_AFECTL_C1, 0x0FFF, regs[0]);
+   b43_phy_maskset(dev, B43_NPHY_AFECTL_C2, 0x0FFF, regs[1]);
+   b43_phy_write(dev, B43_NPHY_AFECTL_OVER, regs[2]);
+   /* TODO: Write an N PHY Table with ID 8, length 1, offset 2,
+   width 16, and data from regs[3] */
+   /* TODO: Write an N PHY Table with ID 8, length 1, offset 18,
+   width 16, and data from regs[4] */
+   b43_phy_write(dev, B43_NPHY_RFCTL_INTC1, regs[5]);
+   b43_phy_write(dev, B43_NPHY_RFCTL_INTC2, regs[6]);
+   }
+}
+
+/* http://bcm-v4.sipsolutions.net/802.11/PHY/N/TxCalPhySetup */
+static void b43_nphy_tx_cal_phy_setup(struct b43_wldev *dev)
+{
+   u16 *regs = dev-phy.n-tx_rx_cal_phy_saveregs;
+   u16 tmp;
+
+   regs[0] = b43_phy_read(dev, B43_NPHY_AFECTL_C1);
+   regs[1] = b43_phy_read(dev, B43_NPHY_AFECTL_C2);
+   if (dev-phy.rev = 3) {
+   b43_phy_maskset(dev, B43_NPHY_AFECTL_C1, 0xF0FF, 0x0A00);
+   b43_phy_maskset(dev, B43_NPHY_AFECTL_C2, 0xF0FF, 0x0A00);
+
+   tmp = b43_phy_read(dev, B43_NPHY_AFECTL_OVER1);
+   regs[2] = tmp;
+   b43_phy_write(dev, B43_NPHY_AFECTL_OVER1, tmp | 0x0600);
+
+   tmp = b43_phy_read(dev, B43_NPHY_AFECTL_OVER);
+   regs[3] = tmp;
+   b43_phy_write(dev, B43_NPHY_AFECTL_OVER, tmp | 0x0600);
+
+   regs[4] = b43_phy_read(dev, B43_NPHY_BBCFG);
+   b43_phy_mask(dev, B43_NPHY_BBCFG, ~B43_NPHY_BBCFG_RSTRX);
+
+   /* TODO: Read an N PHY Table with ID 8, length 1, offset 3,
+   width 16, and data pointing to tmp */
+   regs[5] = tmp;
+
+   /* TODO: Write an N PHY Table with ID 8, length 1, offset 3,
+   width 16, and data 0 */
+   /* TODO: Read an N PHY Table with ID 8, length 1, offset 19,
+   width 16, and data pointing to tmp */
+   regs[6] = tmp;
+
+   /* TODO: Write an N PHY Table with ID 8, length 1, offset 19,
+   width 16, and data 0 */
+   regs[7] = b43_phy_read(dev, B43_NPHY_RFCTL_INTC1);
+   regs[8] = b43_phy_read(dev, B43_NPHY_RFCTL_INTC2);
+
+   /* TODO: Call N PHY RF Ctrl Intc Override with 2, 1, 3 */
+   /* TODO: Call N PHY RF Ctrl Intc Override with 1, 2, 1 */
+   /* TODO: Call N PHY RF Ctrl Intc Override with 1, 8, 2 */
+
+   regs[9] = b43_phy_read(dev, B43_NPHY_PAPD_EN0);
+   regs[10] = b43_phy_read(dev, B43_NPHY_PAPD_EN1);
+   b43_phy_mask(dev, B43_NPHY_PAPD_EN0, ~0x0001);
+   b43_phy_mask(dev, B43_NPHY_PAPD_EN1, ~0x0001);
+   } else {
+   b43_phy_maskset(dev, B43_NPHY_AFECTL_C1, 0x0FFF, 0xA000);
+   b43_phy_maskset(dev, B43_NPHY_AFECTL_C2, 0x0FFF, 0xA000);
+   tmp = b43_phy_read(dev, B43_NPHY_AFECTL_OVER);
+   regs[2] = tmp;
+   b43_phy_write(dev, B43_NPHY_AFECTL_OVER, tmp | 0x3000);
+   /* TODO: Read an N PHY Table with ID 8, length 1, offset 2,
+   width 16, and data pointing to tmp */
+   regs[3] = tmp;
+   tmp |= 0x2000;
+ 

Re: [PATCH 2/7] b43: N-PHY: implement TX PHY cleanup and setup

2010-01-17 Thread Gábor Stefanik
2010/1/17 Rafał Miłecki zaj...@gmail.com:

 Signed-off-by: Rafał Miłecki zaj...@gmail.com
 ---
  drivers/net/wireless/b43/phy_n.c |  112
 +-
  1 files changed, 110 insertions(+), 2 deletions(-)

 diff --git a/drivers/net/wireless/b43/phy_n.c
 b/drivers/net/wireless/b43/phy_n.c
 index 4a1853b..34dd4a2 100644
 --- a/drivers/net/wireless/b43/phy_n.c
 +++ b/drivers/net/wireless/b43/phy_n.c
 @@ -1505,6 +1505,114 @@ static struct nphy_txgains
 b43_nphy_get_tx_gains(struct b43_wldev *dev)
        return target;
  }

 +/* http://bcm-v4.sipsolutions.net/802.11/PHY/N/TxCalPhyCleanup */
 +static void b43_nphy_tx_cal_phy_cleanup(struct b43_wldev *dev)
 +{
 +       u16 *regs = dev-phy.n-tx_rx_cal_phy_saveregs;
 +
 +       if (dev-phy.rev = 3) {
 +               b43_phy_write(dev, B43_NPHY_AFECTL_C1, regs[0]);
 +               b43_phy_write(dev, B43_NPHY_AFECTL_C2, regs[1]);
 +               b43_phy_write(dev, B43_NPHY_AFECTL_OVER1, regs[2]);
 +               b43_phy_write(dev, B43_NPHY_AFECTL_OVER, regs[3]);
 +               b43_phy_write(dev, B43_NPHY_BBCFG, regs[4]);
 +               /* TODO: Write an N PHY Table with ID 8, length 1, offset 3,
 +                       width 16, and data from regs[5] */
 +               /* TODO: Write an N PHY Table with ID 8, length 1, offset
 19,

While you are at it, why aren't you programming these table writes?
The table handling functions are AFAIK already in place...

 +                       width 16, and data from regs[6] */
 +               b43_phy_write(dev, B43_NPHY_RFCTL_INTC1, regs[7]);
 +               b43_phy_write(dev, B43_NPHY_RFCTL_INTC2, regs[8]);
 +               b43_phy_write(dev, B43_NPHY_PAPD_EN0, regs[9]);
 +               b43_phy_write(dev, B43_NPHY_PAPD_EN1, regs[10]);
 +               b43_nphy_reset_cca(dev);
 +       } else {
 +               b43_phy_maskset(dev, B43_NPHY_AFECTL_C1, 0x0FFF, regs[0]);
 +               b43_phy_maskset(dev, B43_NPHY_AFECTL_C2, 0x0FFF, regs[1]);
 +               b43_phy_write(dev, B43_NPHY_AFECTL_OVER, regs[2]);
 +               /* TODO: Write an N PHY Table with ID 8, length 1, offset 2,
 +                       width 16, and data from regs[3] */
 +               /* TODO: Write an N PHY Table with ID 8, length 1, offset
 18,
 +                       width 16, and data from regs[4] */
 +               b43_phy_write(dev, B43_NPHY_RFCTL_INTC1, regs[5]);
 +               b43_phy_write(dev, B43_NPHY_RFCTL_INTC2, regs[6]);
 +       }
 +}
 +
 +/* http://bcm-v4.sipsolutions.net/802.11/PHY/N/TxCalPhySetup */
 +static void b43_nphy_tx_cal_phy_setup(struct b43_wldev *dev)
 +{
 +       u16 *regs = dev-phy.n-tx_rx_cal_phy_saveregs;
 +       u16 tmp;
 +
 +       regs[0] = b43_phy_read(dev, B43_NPHY_AFECTL_C1);
 +       regs[1] = b43_phy_read(dev, B43_NPHY_AFECTL_C2);
 +       if (dev-phy.rev = 3) {
 +               b43_phy_maskset(dev, B43_NPHY_AFECTL_C1, 0xF0FF, 0x0A00);
 +               b43_phy_maskset(dev, B43_NPHY_AFECTL_C2, 0xF0FF, 0x0A00);
 +
 +               tmp = b43_phy_read(dev, B43_NPHY_AFECTL_OVER1);
 +               regs[2] = tmp;
 +               b43_phy_write(dev, B43_NPHY_AFECTL_OVER1, tmp | 0x0600);
 +
 +               tmp = b43_phy_read(dev, B43_NPHY_AFECTL_OVER);
 +               regs[3] = tmp;
 +               b43_phy_write(dev, B43_NPHY_AFECTL_OVER, tmp | 0x0600);
 +
 +               regs[4] = b43_phy_read(dev, B43_NPHY_BBCFG);
 +               b43_phy_mask(dev, B43_NPHY_BBCFG, ~B43_NPHY_BBCFG_RSTRX);
 +
 +               /* TODO: Read an N PHY Table with ID 8, length 1, offset 3,
 +                       width 16, and data pointing to tmp */
 +               regs[5] = tmp;
 +
 +               /* TODO: Write an N PHY Table with ID 8, length 1, offset 3,
 +                       width 16, and data 0 */
 +               /* TODO: Read an N PHY Table with ID 8, length 1, offset 19,
 +                       width 16, and data pointing to tmp */
 +               regs[6] = tmp;
 +
 +               /* TODO: Write an N PHY Table with ID 8, length 1, offset
 19,
 +                       width 16, and data 0 */
 +               regs[7] = b43_phy_read(dev, B43_NPHY_RFCTL_INTC1);
 +               regs[8] = b43_phy_read(dev, B43_NPHY_RFCTL_INTC2);
 +
 +               /* TODO: Call N PHY RF Ctrl Intc Override with 2, 1, 3 */
 +               /* TODO: Call N PHY RF Ctrl Intc Override with 1, 2, 1 */
 +               /* TODO: Call N PHY RF Ctrl Intc Override with 1, 8, 2 */
 +
 +               regs[9] = b43_phy_read(dev, B43_NPHY_PAPD_EN0);
 +               regs[10] = b43_phy_read(dev, B43_NPHY_PAPD_EN1);
 +               b43_phy_mask(dev, B43_NPHY_PAPD_EN0, ~0x0001);
 +               b43_phy_mask(dev, B43_NPHY_PAPD_EN1, ~0x0001);
 +       } else {
 +               b43_phy_maskset(dev, B43_NPHY_AFECTL_C1, 0x0FFF, 0xA000);
 +               b43_phy_maskset(dev, B43_NPHY_AFECTL_C2, 0x0FFF, 0xA000);
 +               tmp = b43_phy_read(dev, B43_NPHY_AFECTL_OVER);
 +               regs[2] = tmp;
 +         

Re: [PATCH 2/7] b43: N-PHY: implement TX PHY cleanup and setup

2010-01-17 Thread Michael Buesch
On Sunday 17 January 2010 17:37:29 Gábor Stefanik wrote:
 While you are at it, why aren't you programming these table writes?
 The table handling functions are AFAIK already in place...

Because we like small patches.
Please do _not_ increase the patchsize.

-- 
Greetings, Michael.
___
Bcm43xx-dev mailing list
Bcm43xx-dev@lists.berlios.de
https://lists.berlios.de/mailman/listinfo/bcm43xx-dev


Re: [PATCH 2/7] b43: N-PHY: implement TX PHY cleanup and setup

2010-01-17 Thread Rafał Miłecki
2010/1/17 Gábor Stefanik netrolller...@gmail.com:
 On Sun, Jan 17, 2010 at 5:41 PM, Michael Buesch m...@bu3sch.de wrote:
 On Sunday 17 January 2010 17:37:29 Gábor Stefanik wrote:
 While you are at it, why aren't you programming these table writes?
 The table handling functions are AFAIK already in place...

 Because we like small patches.
 Please do _not_ increase the patchsize.

 They do not increase patch size - table reads/writes are one-line (in
 fact, they are shorter than the placeholder comments in place of
 them).

Well, I just started implementing code without understanding of
tables... and got stick in implementing functions. There are some
crazy IDs, offsets and it's not only writing but also some
mysterious table reading... You know, it just sounds scary ;)

I'll have to finally read specs/existing code for tables, understand
it and implement.

-- 
Rafał
___
Bcm43xx-dev mailing list
Bcm43xx-dev@lists.berlios.de
https://lists.berlios.de/mailman/listinfo/bcm43xx-dev