diff options
author | Rafał Miłecki <zajec5@gmail.com> | 2010-12-21 11:13:44 -0500 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2010-12-22 15:43:29 -0500 |
commit | ea7ee14b8a6371f006d73333ef2b7fe929b6dab0 (patch) | |
tree | 3b1cdcadfad481e62ae0b1b1dc95aaab64f2d6ab /drivers/net/wireless/b43/radio_2056.c | |
parent | e41596a118a5cb15a045ef773dc117b2596e6a86 (diff) |
b43: N-PHY: implement radio 2056 init steps
Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/b43/radio_2056.c')
-rw-r--r-- | drivers/net/wireless/b43/radio_2056.c | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/drivers/net/wireless/b43/radio_2056.c b/drivers/net/wireless/b43/radio_2056.c index 0cdf6a46ba4b..1752d52ab40e 100644 --- a/drivers/net/wireless/b43/radio_2056.c +++ b/drivers/net/wireless/b43/radio_2056.c | |||
@@ -24,6 +24,39 @@ | |||
24 | #include "radio_2056.h" | 24 | #include "radio_2056.h" |
25 | #include "phy_common.h" | 25 | #include "phy_common.h" |
26 | 26 | ||
27 | struct b2056_inittab_entry { | ||
28 | /* Value to write if we use the 5GHz band. */ | ||
29 | u16 ghz5; | ||
30 | /* Value to write if we use the 2.4GHz band. */ | ||
31 | u16 ghz2; | ||
32 | /* Flags */ | ||
33 | u8 flags; | ||
34 | }; | ||
35 | #define B2056_INITTAB_ENTRY_OK 0x01 | ||
36 | #define B2056_INITTAB_UPLOAD 0x02 | ||
37 | #define UPLOAD .flags = B2056_INITTAB_ENTRY_OK | B2056_INITTAB_UPLOAD | ||
38 | #define NOUPLOAD .flags = B2056_INITTAB_ENTRY_OK | ||
39 | |||
40 | struct b2056_inittabs_pts { | ||
41 | const struct b2056_inittab_entry *syn; | ||
42 | unsigned int syn_length; | ||
43 | const struct b2056_inittab_entry *tx; | ||
44 | unsigned int tx_length; | ||
45 | const struct b2056_inittab_entry *rx; | ||
46 | unsigned int rx_length; | ||
47 | }; | ||
48 | |||
49 | #define INITTABSPTS(prefix) \ | ||
50 | .syn = prefix##_syn, \ | ||
51 | .syn_length = ARRAY_SIZE(prefix##_syn), \ | ||
52 | .tx = prefix##_tx, \ | ||
53 | .tx_length = ARRAY_SIZE(prefix##_tx), \ | ||
54 | .rx = prefix##_rx, \ | ||
55 | .rx_length = ARRAY_SIZE(prefix##_rx) | ||
56 | |||
57 | struct b2056_inittabs_pts b2056_inittabs[] = { | ||
58 | }; | ||
59 | |||
27 | #define RADIOREGS3(r00, r01, r02, r03, r04, r05, r06, r07, r08, r09, \ | 60 | #define RADIOREGS3(r00, r01, r02, r03, r04, r05, r06, r07, r08, r09, \ |
28 | r10, r11, r12, r13, r14, r15, r16, r17, r18, r19, \ | 61 | r10, r11, r12, r13, r14, r15, r16, r17, r18, r19, \ |
29 | r20, r21, r22, r23, r24, r25, r26, r27, r28, r29, \ | 62 | r20, r21, r22, r23, r24, r25, r26, r27, r28, r29, \ |
@@ -6045,6 +6078,50 @@ static const struct b43_nphy_channeltab_entry_rev3 b43_nphy_channeltab_rev8[] = | |||
6045 | }, | 6078 | }, |
6046 | }; | 6079 | }; |
6047 | 6080 | ||
6081 | static void b2056_upload_inittab(struct b43_wldev *dev, bool ghz5, | ||
6082 | bool ignore_uploadflag, u16 routing, | ||
6083 | const struct b2056_inittab_entry *e, | ||
6084 | unsigned int length) | ||
6085 | { | ||
6086 | unsigned int i; | ||
6087 | u16 value; | ||
6088 | |||
6089 | for (i = 0; i < length; i++, e++) { | ||
6090 | if (!(e->flags & B2056_INITTAB_ENTRY_OK)) | ||
6091 | continue; | ||
6092 | if ((e->flags & B2056_INITTAB_UPLOAD) || ignore_uploadflag) { | ||
6093 | if (ghz5) | ||
6094 | value = e->ghz5; | ||
6095 | else | ||
6096 | value = e->ghz2; | ||
6097 | b43_radio_write(dev, routing | i, value); | ||
6098 | } | ||
6099 | } | ||
6100 | } | ||
6101 | |||
6102 | void b2056_upload_inittabs(struct b43_wldev *dev, | ||
6103 | bool ghz5, bool ignore_uploadflag) | ||
6104 | { | ||
6105 | struct b2056_inittabs_pts *pts; | ||
6106 | |||
6107 | if (dev->phy.rev >= ARRAY_SIZE(b2056_inittabs)) { | ||
6108 | B43_WARN_ON(1); | ||
6109 | return; | ||
6110 | } | ||
6111 | pts = &b2056_inittabs[dev->phy.rev]; | ||
6112 | |||
6113 | b2056_upload_inittab(dev, ghz5, ignore_uploadflag, | ||
6114 | B2056_SYN, pts->syn, pts->syn_length); | ||
6115 | b2056_upload_inittab(dev, ghz5, ignore_uploadflag, | ||
6116 | B2056_TX0, pts->tx, pts->tx_length); | ||
6117 | b2056_upload_inittab(dev, ghz5, ignore_uploadflag, | ||
6118 | B2056_TX1, pts->tx, pts->tx_length); | ||
6119 | b2056_upload_inittab(dev, ghz5, ignore_uploadflag, | ||
6120 | B2056_RX0, pts->rx, pts->rx_length); | ||
6121 | b2056_upload_inittab(dev, ghz5, ignore_uploadflag, | ||
6122 | B2056_RX1, pts->rx, pts->rx_length); | ||
6123 | } | ||
6124 | |||
6048 | /* TODO: add support for rev4+ devices by searching in rev4+ tables */ | 6125 | /* TODO: add support for rev4+ devices by searching in rev4+ tables */ |
6049 | const struct b43_nphy_channeltab_entry_rev3 * | 6126 | const struct b43_nphy_channeltab_entry_rev3 * |
6050 | b43_nphy_get_chantabent_rev3(struct b43_wldev *dev, u16 freq) | 6127 | b43_nphy_get_chantabent_rev3(struct b43_wldev *dev, u16 freq) |