2010-10-11 15:21:29

by Rafał Miłecki

[permalink] [raw]
Subject: [PATCH 1/3] b43: N-PHY: replace N-specific radio_chanspec with common code

Signed-off-by: Rafał Miłecki <[email protected]>
---
drivers/net/wireless/b43/phy_common.h | 1 +
drivers/net/wireless/b43/phy_n.c | 55 ++++++++++++++-------------------
drivers/net/wireless/b43/phy_n.h | 7 +---
3 files changed, 26 insertions(+), 37 deletions(-)

diff --git a/drivers/net/wireless/b43/phy_common.h b/drivers/net/wireless/b43/phy_common.h
index 6dcd033..0e61942 100644
--- a/drivers/net/wireless/b43/phy_common.h
+++ b/drivers/net/wireless/b43/phy_common.h
@@ -253,6 +253,7 @@ struct b43_phy {

/* Current channel */
unsigned int channel;
+ u16 channel_freq;
enum nl80211_channel_type channel_type;

/* PHY TX errors counter. */
diff --git a/drivers/net/wireless/b43/phy_n.c b/drivers/net/wireless/b43/phy_n.c
index 814127e..13d7e3b 100644
--- a/drivers/net/wireless/b43/phy_n.c
+++ b/drivers/net/wireless/b43/phy_n.c
@@ -81,21 +81,6 @@ static inline bool b43_channel_type_is_40mhz(
channel_type == NL80211_CHAN_HT40PLUS);
}

-static inline bool b43_empty_chanspec(struct b43_chanspec *chanspec)
-{
- return !chanspec->channel && !chanspec->sideband &&
- !chanspec->b_width && !chanspec->b_freq;
-}
-
-static inline bool b43_eq_chanspecs(struct b43_chanspec *chanspec1,
- struct b43_chanspec *chanspec2)
-{
- return (chanspec1->channel == chanspec2->channel &&
- chanspec1->sideband == chanspec2->sideband &&
- chanspec1->b_width == chanspec2->b_width &&
- chanspec1->b_freq == chanspec2->b_freq);
-}
-
void b43_nphy_set_rxantenna(struct b43_wldev *dev, int antenna)
{//TODO
}
@@ -788,7 +773,7 @@ static void b43_nphy_spur_workaround(struct b43_wldev *dev)
{
struct b43_phy_n *nphy = dev->phy.n;

- u8 channel = nphy->radio_chanspec.channel;
+ u8 channel = dev->phy.channel;
int tone[2] = { 57, 58 };
u32 noise[2] = { 0x3FF, 0x3FF };

@@ -862,9 +847,9 @@ static void b43_nphy_adjust_lna_gain_table(struct b43_wldev *dev)
gain[0] = 6;
gain[1] = 6;
} else {
- tmp = 40370 - 315 * nphy->radio_chanspec.channel;
+ tmp = 40370 - 315 * dev->phy.channel;
gain[0] = ((tmp >> 13) + ((tmp >> 12) & 1));
- tmp = 23242 - 224 * nphy->radio_chanspec.channel;
+ tmp = 23242 - 224 * dev->phy.channel;
gain[1] = ((tmp >> 13) + ((tmp >> 12) & 1));
}
} else {
@@ -2090,12 +2075,12 @@ static void b43_nphy_restore_rssi_cal(struct b43_wldev *dev)
u16 *rssical_phy_regs = NULL;

if (b43_current_band(dev->wl) == IEEE80211_BAND_2GHZ) {
- if (b43_empty_chanspec(&nphy->rssical_chanspec_2G))
+ if (!nphy->rssical_chanspec_2G.center_freq)
return;
rssical_radio_regs = nphy->rssical_cache.rssical_radio_regs_2G;
rssical_phy_regs = nphy->rssical_cache.rssical_phy_regs_2G;
} else {
- if (b43_empty_chanspec(&nphy->rssical_chanspec_5G))
+ if (!nphy->rssical_chanspec_5G.center_freq)
return;
rssical_radio_regs = nphy->rssical_cache.rssical_radio_regs_5G;
rssical_phy_regs = nphy->rssical_cache.rssical_phy_regs_5G;
@@ -2551,7 +2536,8 @@ static void b43_nphy_save_cal(struct b43_wldev *dev)
txcal_radio_regs[2] = b43_radio_read(dev, 0x8D);
txcal_radio_regs[3] = b43_radio_read(dev, 0xBC);
}
- *iqcal_chanspec = nphy->radio_chanspec;
+ iqcal_chanspec->center_freq = dev->phy.channel_freq;
+ iqcal_chanspec->channel_type = dev->phy.channel_type;
b43_ntab_write_bulk(dev, B43_NTAB16(15, 80), 8, table);

if (nphy->hang_avoid)
@@ -2572,12 +2558,12 @@ static void b43_nphy_restore_cal(struct b43_wldev *dev)
struct b43_phy_n_iq_comp *rxcal_coeffs = NULL;

if (b43_current_band(dev->wl) == IEEE80211_BAND_2GHZ) {
- if (b43_empty_chanspec(&nphy->iqcal_chanspec_2G))
+ if (!nphy->iqcal_chanspec_2G.center_freq)
return;
table = nphy->cal_cache.txcal_coeffs_2G;
loft = &nphy->cal_cache.txcal_coeffs_2G[5];
} else {
- if (b43_empty_chanspec(&nphy->iqcal_chanspec_5G))
+ if (!nphy->iqcal_chanspec_5G.center_freq)
return;
table = nphy->cal_cache.txcal_coeffs_5G;
loft = &nphy->cal_cache.txcal_coeffs_5G[5];
@@ -2822,7 +2808,10 @@ static int b43_nphy_cal_tx_iq_lo(struct b43_wldev *dev,
b43_ntab_read_bulk(dev, B43_NTAB16(15, 96), length,
nphy->txiqlocal_bestc);
nphy->txiqlocal_coeffsvalid = true;
- nphy->txiqlocal_chanspec = nphy->radio_chanspec;
+ nphy->txiqlocal_chanspec.center_freq =
+ dev->phy.channel_freq;
+ nphy->txiqlocal_chanspec.channel_type =
+ dev->phy.channel_type;
} else {
length = 11;
if (dev->phy.rev < 3)
@@ -2858,7 +2847,8 @@ static void b43_nphy_reapply_tx_cal_coeffs(struct b43_wldev *dev)
bool equal = true;

if (!nphy->txiqlocal_coeffsvalid ||
- b43_eq_chanspecs(&nphy->txiqlocal_chanspec, &nphy->radio_chanspec))
+ nphy->txiqlocal_chanspec.center_freq != dev->phy.channel_freq ||
+ nphy->txiqlocal_chanspec.channel_type != dev->phy.channel_type)
return;

b43_ntab_read_bulk(dev, B43_NTAB16(15, 80), 7, buffer);
@@ -3264,11 +3254,9 @@ int b43_phy_initn(struct b43_wldev *dev)
do_rssi_cal = false;
if (phy->rev >= 3) {
if (b43_current_band(dev->wl) == IEEE80211_BAND_2GHZ)
- do_rssi_cal =
- b43_empty_chanspec(&nphy->rssical_chanspec_2G);
+ do_rssi_cal = !nphy->rssical_chanspec_2G.center_freq;
else
- do_rssi_cal =
- b43_empty_chanspec(&nphy->rssical_chanspec_5G);
+ do_rssi_cal = !nphy->rssical_chanspec_5G.center_freq;

if (do_rssi_cal)
b43_nphy_rssi_cal(dev);
@@ -3280,9 +3268,9 @@ int b43_phy_initn(struct b43_wldev *dev)

if (!((nphy->measure_hold & 0x6) != 0)) {
if (b43_current_band(dev->wl) == IEEE80211_BAND_2GHZ)
- do_cal = b43_empty_chanspec(&nphy->iqcal_chanspec_2G);
+ do_cal = !nphy->iqcal_chanspec_2G.center_freq;
else
- do_cal = b43_empty_chanspec(&nphy->iqcal_chanspec_5G);
+ do_cal = !nphy->iqcal_chanspec_5G.center_freq;

if (nphy->mute)
do_cal = false;
@@ -3411,7 +3399,10 @@ static int b43_nphy_set_channel(struct b43_wldev *dev,
return -ESRCH;
}

- nphy->radio_chanspec.channel = channel->hw_value;
+ /* Channel is set later in common code, but we need to set it on our
+ own to let this function's subcalls work properly. */
+ phy->channel = channel->hw_value;
+ phy->channel_freq = channel->center_freq;

if (b43_channel_type_is_40mhz(phy->channel_type) !=
b43_channel_type_is_40mhz(channel_type))
diff --git a/drivers/net/wireless/b43/phy_n.h b/drivers/net/wireless/b43/phy_n.h
index e7acae2..f915c83 100644
--- a/drivers/net/wireless/b43/phy_n.h
+++ b/drivers/net/wireless/b43/phy_n.h
@@ -927,10 +927,8 @@
struct b43_wldev;

struct b43_chanspec {
- u8 channel;
- u8 sideband;
- u8 b_width;
- u8 b_freq;
+ u16 center_freq;
+ enum nl80211_channel_type channel_type;
};

struct b43_phy_n_iq_comp {
@@ -984,7 +982,6 @@ struct b43_phy_n {
u16 papd_epsilon_offset[2];
s32 preamble_override;
u32 bb_mult_save;
- struct b43_chanspec radio_chanspec;

bool gain_boost;
bool elna_gain_config;
--
1.7.1



2010-10-11 16:58:27

by Gábor Stefanik

[permalink] [raw]
Subject: Re: [PATCH 3/3] b43: N-PHY: add 2055 radio regs

2010/10/11 Rafa? Mi?ecki <[email protected]>:
> W dniu 11 pa?dziernika 2010 18:24 u?ytkownik G?bor Stefanik
> <[email protected]> napisa?:
>> Doesn't brcm80211 contain register names for B2055?
>
> Whoops... first of all it's 2056 radio. Commit's message should be
> 2056, not 2055.
>
> Yes, I'm sure we can grab many defines from brcm80211. However before
> copying their code/defines I wanted to finish implementing what we
> have in our RE specs. Is that acceptable? Or should I use brcm80211's
> names if I already touch such places?

I don't know, Michael is the one to decide on this; but in general,
it's bad practice to use magic numbers.

>
> --
> Rafa?
>



--
Vista: [V]iruses, [I]ntruders, [S]pyware, [T]rojans and [A]dware. :-)

2010-10-11 15:21:15

by Rafał Miłecki

[permalink] [raw]
Subject: [PATCH 2/3] b43: N-PHY: fix typo: read table when caching IQ LO calibration (do not write)

Signed-off-by: Rafał Miłecki <[email protected]>
---
drivers/net/wireless/b43/phy_n.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/drivers/net/wireless/b43/phy_n.c b/drivers/net/wireless/b43/phy_n.c
index 13d7e3b..715277e 100644
--- a/drivers/net/wireless/b43/phy_n.c
+++ b/drivers/net/wireless/b43/phy_n.c
@@ -2538,7 +2538,7 @@ static void b43_nphy_save_cal(struct b43_wldev *dev)
}
iqcal_chanspec->center_freq = dev->phy.channel_freq;
iqcal_chanspec->channel_type = dev->phy.channel_type;
- b43_ntab_write_bulk(dev, B43_NTAB16(15, 80), 8, table);
+ b43_ntab_read_bulk(dev, B43_NTAB16(15, 80), 8, table);

if (nphy->hang_avoid)
b43_nphy_stay_in_carrier_search(dev, 0);
--
1.7.1


2010-10-11 16:36:31

by Rafał Miłecki

[permalink] [raw]
Subject: Re: [PATCH 3/3] b43: N-PHY: add 2055 radio regs

W dniu 11 października 2010 18:24 użytkownik Gábor Stefanik
<[email protected]> napisał:
> Doesn't brcm80211 contain register names for B2055?

Whoops... first of all it's 2056 radio. Commit's message should be
2056, not 2055.

Yes, I'm sure we can grab many defines from brcm80211. However before
copying their code/defines I wanted to finish implementing what we
have in our RE specs. Is that acceptable? Or should I use brcm80211's
names if I already touch such places?

--
Rafał

2010-10-11 16:25:15

by Gábor Stefanik

[permalink] [raw]
Subject: Re: [PATCH 3/3] b43: N-PHY: add 2055 radio regs

RG9lc24ndCBicmNtODAyMTEgY29udGFpbiByZWdpc3RlciBuYW1lcyBmb3IgQjIwNTU/CgoyMDEw
LzEwLzExIFJhZmHFgiBNacWCZWNraSA8emFqZWM1QGdtYWlsLmNvbT46Cj4gU2lnbmVkLW9mZi1i
eTogUmFmYcWCIE1pxYJlY2tpIDx6YWplYzVAZ21haWwuY29tPgo+IC0tLQo+IEknbSBub3QgdG9v
IGhhcHB5IHdpdGggcHJlc2VudGVkIG51bWJlcmluZyBidXQ6Cj4gMSkgV2UgY2FuIG5vdCBqdXN0
IHVzZSByZWdpc2VyIG51bWJlciwgYmVjYXVzZSB3ZSB1c2Ugc2FtZSByZWdpc3RlcnMgZmV3IHRp
bWVzCj4gMikgVXNpbmcganVzdCBvcmRlciBudW1iZXJpbmcgKDAwIC0gMzYpIHdvdWxkIG1ha2Ug
cmVnaXN0ZXJzIHdyaXRpbmcgbGVzcyBjbGVhbgo+Cj4gVGhpcyB3YXkgSSBkZWNpZGVkIHRvIHVz
ZSBib3RoOiBvcmRlciBudW1iZXJpbmcgYW5kIHJlZ2lzdGVyIG51bWJlcmluZy4KPiAtLS0KPiDC
oGRyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My90YWJsZXNfbnBoeS5jIHwgwqAgNDIgKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysKPiDCoGRyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My90YWJs
ZXNfbnBoeS5oIHwgwqAgNDAgKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tCj4gwqAyIGZp
bGVzIGNoYW5nZWQsIDc5IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCj4KPiBkaWZmIC0t
Z2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3RhYmxlc19ucGh5LmMgYi9kcml2ZXJzL25l
dC93aXJlbGVzcy9iNDMvdGFibGVzX25waHkuYwo+IGluZGV4IGU3NGI4ZWIuLjBjZWRiOWEgMTAw
NjQ0Cj4gLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3RhYmxlc19ucGh5LmMKPiArKysg
Yi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvdGFibGVzX25waHkuYwo+IEBAIC0zMTcsNiArMzE3
LDQ4IEBAIHZvaWQgYjIwNTVfdXBsb2FkX2luaXR0YWIoc3RydWN0IGI0M193bGRldiAqZGV2LAo+
IMKgIMKgIMKgIMKgLnJhZGlvX2MyX3R4X3BnYXBhZHRuIMKgID0gcjIwLCDCoFwKPiDCoCDCoCDC
oCDCoC5yYWRpb19jMl90eF9teGJndHJpbSDCoCA9IHIyMQo+Cj4gKyNkZWZpbmUgUkFESU9SRUdT
MyhyMDAsIHIwMSwgcjAyLCByMDMsIHIwNCwgcjA1LCByMDYsIHIwNywgcjA4LCByMDksIFwKPiAr
IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgcjEwLCByMTEsIHIxMiwgcjEzLCByMTQsIHIxNSwg
cjE2LCByMTcsIHIxOCwgcjE5LCBcCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHIyMCwg
cjIxLCByMjIsIHIyMywgcjI0LCByMjUsIHIyNiwgcjI3LCByMjgsIHIyOSwgXAo+ICsgwqAgwqAg
wqAgwqAgwqAgwqAgwqAgwqAgwqByMzAsIHIzMSwgcjMyLCByMzMsIHIzNCwgcjM1LCByMzYpIFwK
PiArIMKgIMKgIMKgIC5yYWRpb19yZWdfMDBfNTYgwqAgwqAgwqAgwqA9IHIwMCwgwqBcCj4gKyDC
oCDCoCDCoCAucmFkaW9fcmVnXzAxXzU2IMKgIMKgIMKgIMKgPSByMDEsIMKgXAo+ICsgwqAgwqAg
wqAgLnJhZGlvX3JlZ18wMl80NiDCoCDCoCDCoCDCoD0gcjAyLCDCoFwKPiArIMKgIMKgIMKgIC5y
YWRpb19yZWdfMDNfNTEgwqAgwqAgwqAgwqA9IHIwMywgwqBcCj4gKyDCoCDCoCDCoCAucmFkaW9f
cmVnXzA0XzUwIMKgIMKgIMKgIMKgPSByMDQsIMKgXAo+ICsgwqAgwqAgwqAgLnJhZGlvX3JlZ18w
NV80YiDCoCDCoCDCoCDCoD0gcjA1LCDCoFwKPiArIMKgIMKgIMKgIC5yYWRpb19yZWdfMDZfNGMg
wqAgwqAgwqAgwqA9IHIwNiwgwqBcCj4gKyDCoCDCoCDCoCAucmFkaW9fcmVnXzA3XzRkIMKgIMKg
IMKgIMKgPSByMDcsIMKgXAo+ICsgwqAgwqAgwqAgLnJhZGlvX3JlZ18wOF80ZSDCoCDCoCDCoCDC
oD0gcjA4LCDCoFwKPiArIMKgIMKgIMKgIC5yYWRpb19yZWdfMDlfNGYgwqAgwqAgwqAgwqA9IHIw
OSwgwqBcCj4gKyDCoCDCoCDCoCAucmFkaW9fcmVnXzEwXzFiIMKgIMKgIMKgIMKgPSByMTAsIMKg
XAo+ICsgwqAgwqAgwqAgLnJhZGlvX3JlZ18xMV8xYyDCoCDCoCDCoCDCoD0gcjExLCDCoFwKPiAr
IMKgIMKgIMKgIC5yYWRpb19yZWdfMTJfMWQgwqAgwqAgwqAgwqA9IHIxMiwgwqBcCj4gKyDCoCDC
oCDCoCAucmFkaW9fcmVnXzEzXzcwIMKgIMKgIMKgIMKgPSByMTMsIMKgXAo+ICsgwqAgwqAgwqAg
LnJhZGlvX3JlZ18xNF83MiDCoCDCoCDCoCDCoD0gcjE0LCDCoFwKPiArIMKgIMKgIMKgIC5yYWRp
b19yZWdfMTVfNzUgwqAgwqAgwqAgwqA9IHIxNSwgwqBcCj4gKyDCoCDCoCDCoCAucmFkaW9fcmVn
XzE2Xzc2IMKgIMKgIMKgIMKgPSByMTYsIMKgXAo+ICsgwqAgwqAgwqAgLnJhZGlvX3JlZ18xN18y
ZCDCoCDCoCDCoCDCoD0gcjE3LCDCoFwKPiArIMKgIMKgIMKgIC5yYWRpb19yZWdfMThfMzQgwqAg
wqAgwqAgwqA9IHIxOCwgwqBcCj4gKyDCoCDCoCDCoCAucmFkaW9fcmVnXzE5XzM3IMKgIMKgIMKg
IMKgPSByMTksIMKgXAo+ICsgwqAgwqAgwqAgLnJhZGlvX3JlZ18yMF80MSDCoCDCoCDCoCDCoD0g
cjIwLCDCoFwKPiArIMKgIMKgIMKgIC5yYWRpb19yZWdfMjFfNGQgwqAgwqAgwqAgwqA9IHIyMSwg
wqBcCj4gKyDCoCDCoCDCoCAucmFkaW9fcmVnXzIyXzUzIMKgIMKgIMKgIMKgPSByMjIsIMKgXAo+
ICsgwqAgwqAgwqAgLnJhZGlvX3JlZ18yM181OCDCoCDCoCDCoCDCoD0gcjIzLCDCoFwKPiArIMKg
IMKgIMKgIC5yYWRpb19yZWdfMjRfNWUgwqAgwqAgwqAgwqA9IHIyNCwgwqBcCj4gKyDCoCDCoCDC
oCAucmFkaW9fcmVnXzI1XzYyIMKgIMKgIMKgIMKgPSByMjUsIMKgXAo+ICsgwqAgwqAgwqAgLnJh
ZGlvX3JlZ18yNl82NCDCoCDCoCDCoCDCoD0gcjI2LCDCoFwKPiArIMKgIMKgIMKgIC5yYWRpb19y
ZWdfMjdfMmQgwqAgwqAgwqAgwqA9IHIyNywgwqBcCj4gKyDCoCDCoCDCoCAucmFkaW9fcmVnXzI4
XzM0IMKgIMKgIMKgIMKgPSByMjgsIMKgXAo+ICsgwqAgwqAgwqAgLnJhZGlvX3JlZ18yOV8zNyDC
oCDCoCDCoCDCoD0gcjI5LCDCoFwKPiArIMKgIMKgIMKgIC5yYWRpb19yZWdfMzBfNDEgwqAgwqAg
wqAgwqA9IHIzMCwgwqBcCj4gKyDCoCDCoCDCoCAucmFkaW9fcmVnXzMxXzRkIMKgIMKgIMKgIMKg
PSByMzEsIMKgXAo+ICsgwqAgwqAgwqAgLnJhZGlvX3JlZ18zMl81MyDCoCDCoCDCoCDCoD0gcjMy
LCDCoFwKPiArIMKgIMKgIMKgIC5yYWRpb19yZWdfMzNfNTggwqAgwqAgwqAgwqA9IHIzMywgwqBc
Cj4gKyDCoCDCoCDCoCAucmFkaW9fcmVnXzM0XzVlIMKgIMKgIMKgIMKgPSByMzQsIMKgXAo+ICsg
wqAgwqAgwqAgLnJhZGlvX3JlZ18zNV82MiDCoCDCoCDCoCDCoD0gcjM1LCDCoFwKPiArIMKgIMKg
IMKgIC5yYWRpb19yZWdfMzZfNjQgwqAgwqAgwqAgwqA9IHIzNgo+ICsKPiDCoCNkZWZpbmUgUEhZ
UkVHUyhyMCwgcjEsIHIyLCByMywgcjQsIHI1KSDCoCDCoCDCoCDCoFwKPiDCoCDCoCDCoCDCoC5w
aHlfcmVncy5waHlfYncxYSDCoCDCoCDCoD0gcjAsIMKgIFwKPiDCoCDCoCDCoCDCoC5waHlfcmVn
cy5waHlfYncyIMKgIMKgIMKgID0gcjEsIMKgIFwKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQv
d2lyZWxlc3MvYjQzL3RhYmxlc19ucGh5LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvdGFi
bGVzX25waHkuaAo+IGluZGV4IDNlZWRiODYuLjA3YjJjMjIgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVy
cy9uZXQvd2lyZWxlc3MvYjQzL3RhYmxlc19ucGh5LmgKPiArKysgYi9kcml2ZXJzL25ldC93aXJl
bGVzcy9iNDMvdGFibGVzX25waHkuaAo+IEBAIC00OCwxMiArNDgsNDYgQEAgc3RydWN0IGI0M19u
cGh5X2NoYW5uZWx0YWJfZW50cnlfcmV2MiB7Cj4gwqB9Owo+Cj4gwqBzdHJ1Y3QgYjQzX25waHlf
Y2hhbm5lbHRhYl9lbnRyeV9yZXYzIHsKPiAtIMKgIMKgIMKgIC8qIFRoZSBjaGFubmVsIG51bWJl
ciAqLwo+IC0gwqAgwqAgwqAgdTggY2hhbm5lbDsKPiDCoCDCoCDCoCDCoC8qIFRoZSBjaGFubmVs
IGZyZXF1ZW5jeSBpbiBNSHogKi8KPiDCoCDCoCDCoCDCoHUxNiBmcmVxOwo+IMKgIMKgIMKgIMKg
LyogUmFkaW8gcmVnaXN0ZXIgdmFsdWVzIG9uIGNoYW5uZWxzd2l0Y2ggKi8KPiAtIMKgIMKgIMKg
IC8qIFRPRE8gKi8KPiArIMKgIMKgIMKgIHU4IHJhZGlvX3JlZ18wMF81NjsKPiArIMKgIMKgIMKg
IHU4IHJhZGlvX3JlZ18wMV81NjsKPiArIMKgIMKgIMKgIHU4IHJhZGlvX3JlZ18wMl80NjsKPiAr
IMKgIMKgIMKgIHU4IHJhZGlvX3JlZ18wM181MTsKPiArIMKgIMKgIMKgIHU4IHJhZGlvX3JlZ18w
NF81MDsKPiArIMKgIMKgIMKgIHU4IHJhZGlvX3JlZ18wNV80YjsKPiArIMKgIMKgIMKgIHU4IHJh
ZGlvX3JlZ18wNl80YzsKPiArIMKgIMKgIMKgIHU4IHJhZGlvX3JlZ18wN180ZDsKPiArIMKgIMKg
IMKgIHU4IHJhZGlvX3JlZ18wOF80ZTsKPiArIMKgIMKgIMKgIHU4IHJhZGlvX3JlZ18wOV80ZjsK
PiArIMKgIMKgIMKgIHU4IHJhZGlvX3JlZ18xMF8xYjsKPiArIMKgIMKgIMKgIHU4IHJhZGlvX3Jl
Z18xMV8xYzsKPiArIMKgIMKgIMKgIHU4IHJhZGlvX3JlZ18xMl8xZDsKPiArIMKgIMKgIMKgIHU4
IHJhZGlvX3JlZ18xM183MDsKPiArIMKgIMKgIMKgIHU4IHJhZGlvX3JlZ18xNF83MjsKPiArIMKg
IMKgIMKgIHU4IHJhZGlvX3JlZ18xNV83NTsKPiArIMKgIMKgIMKgIHU4IHJhZGlvX3JlZ18xNl83
NjsKPiArIMKgIMKgIMKgIHU4IHJhZGlvX3JlZ18xN18yZDsKPiArIMKgIMKgIMKgIHU4IHJhZGlv
X3JlZ18xOF8zNDsKPiArIMKgIMKgIMKgIHU4IHJhZGlvX3JlZ18xOV8zNzsKPiArIMKgIMKgIMKg
IHU4IHJhZGlvX3JlZ18yMF80MTsKPiArIMKgIMKgIMKgIHU4IHJhZGlvX3JlZ18yMV80ZDsKPiAr
IMKgIMKgIMKgIHU4IHJhZGlvX3JlZ18yMl81MzsKPiArIMKgIMKgIMKgIHU4IHJhZGlvX3JlZ18y
M181ODsKPiArIMKgIMKgIMKgIHU4IHJhZGlvX3JlZ18yNF81ZTsKPiArIMKgIMKgIMKgIHU4IHJh
ZGlvX3JlZ18yNV82MjsKPiArIMKgIMKgIMKgIHU4IHJhZGlvX3JlZ18yNl82NDsKPiArIMKgIMKg
IMKgIHU4IHJhZGlvX3JlZ18yN18yZDsKPiArIMKgIMKgIMKgIHU4IHJhZGlvX3JlZ18yOF8zNDsK
PiArIMKgIMKgIMKgIHU4IHJhZGlvX3JlZ18yOV8zNzsKPiArIMKgIMKgIMKgIHU4IHJhZGlvX3Jl
Z18zMF80MTsKPiArIMKgIMKgIMKgIHU4IHJhZGlvX3JlZ18zMV80ZDsKPiArIMKgIMKgIMKgIHU4
IHJhZGlvX3JlZ18zMl81MzsKPiArIMKgIMKgIMKgIHU4IHJhZGlvX3JlZ18zM181ODsKPiArIMKg
IMKgIMKgIHU4IHJhZGlvX3JlZ18zNF81ZTsKPiArIMKgIMKgIMKgIHU4IHJhZGlvX3JlZ18zNV82
MjsKPiArIMKgIMKgIMKgIHU4IHJhZGlvX3JlZ18zNl82NDsKPiDCoCDCoCDCoCDCoC8qIFBIWSBy
ZWdpc3RlciB2YWx1ZXMgb24gY2hhbm5lbHN3aXRjaCAqLwo+IMKgIMKgIMKgIMKgc3RydWN0IGI0
M19waHlfbl9zZm9fY2ZnIHBoeV9yZWdzOwo+IMKgfTsKPiAtLQo+IDEuNy4xCj4KPiAtLQo+IFRv
IHVuc3Vic2NyaWJlIGZyb20gdGhpcyBsaXN0OiBzZW5kIHRoZSBsaW5lICJ1bnN1YnNjcmliZSBs
aW51eC13aXJlbGVzcyIgaW4KPiB0aGUgYm9keSBvZiBhIG1lc3NhZ2UgdG8gbWFqb3Jkb21vQHZn
ZXIua2VybmVsLm9yZwo+IE1vcmUgbWFqb3Jkb21vIGluZm8gYXQgwqBodHRwOi8vdmdlci5rZXJu
ZWwub3JnL21ham9yZG9tby1pbmZvLmh0bWwKPgoKCgotLSAKVmlzdGE6IFtWXWlydXNlcywgW0ld
bnRydWRlcnMsIFtTXXB5d2FyZSwgW1Rdcm9qYW5zIGFuZCBbQV1kd2FyZS4gOi0pCg==

2010-10-11 17:57:56

by Rafał Miłecki

[permalink] [raw]
Subject: Re: [PATCH 3/3] b43: N-PHY: add 2055 radio regs

John: please ignore this patch for now. As the result, you won't be
able to apply
[PATCH] b43: N-PHY: add rev3+ tables

Patches 1/3 and 2/3 can still be applied (if noone objects).

--
Rafał

2010-10-11 15:21:18

by Rafał Miłecki

[permalink] [raw]
Subject: [PATCH 3/3] b43: N-PHY: add 2055 radio regs

Signed-off-by: Rafał Miłecki <[email protected]>
---
I'm not too happy with presented numbering but:
1) We can not just use regiser number, because we use same registers few times
2) Using just order numbering (00 - 36) would make registers writing less clean

This way I decided to use both: order numbering and register numbering.
---
drivers/net/wireless/b43/tables_nphy.c | 42 ++++++++++++++++++++++++++++++++
drivers/net/wireless/b43/tables_nphy.h | 40 ++++++++++++++++++++++++++++--
2 files changed, 79 insertions(+), 3 deletions(-)

diff --git a/drivers/net/wireless/b43/tables_nphy.c b/drivers/net/wireless/b43/tables_nphy.c
index e74b8eb..0cedb9a 100644
--- a/drivers/net/wireless/b43/tables_nphy.c
+++ b/drivers/net/wireless/b43/tables_nphy.c
@@ -317,6 +317,48 @@ void b2055_upload_inittab(struct b43_wldev *dev,
.radio_c2_tx_pgapadtn = r20, \
.radio_c2_tx_mxbgtrim = r21

+#define RADIOREGS3(r00, r01, r02, r03, r04, r05, r06, r07, r08, r09, \
+ r10, r11, r12, r13, r14, r15, r16, r17, r18, r19, \
+ r20, r21, r22, r23, r24, r25, r26, r27, r28, r29, \
+ r30, r31, r32, r33, r34, r35, r36) \
+ .radio_reg_00_56 = r00, \
+ .radio_reg_01_56 = r01, \
+ .radio_reg_02_46 = r02, \
+ .radio_reg_03_51 = r03, \
+ .radio_reg_04_50 = r04, \
+ .radio_reg_05_4b = r05, \
+ .radio_reg_06_4c = r06, \
+ .radio_reg_07_4d = r07, \
+ .radio_reg_08_4e = r08, \
+ .radio_reg_09_4f = r09, \
+ .radio_reg_10_1b = r10, \
+ .radio_reg_11_1c = r11, \
+ .radio_reg_12_1d = r12, \
+ .radio_reg_13_70 = r13, \
+ .radio_reg_14_72 = r14, \
+ .radio_reg_15_75 = r15, \
+ .radio_reg_16_76 = r16, \
+ .radio_reg_17_2d = r17, \
+ .radio_reg_18_34 = r18, \
+ .radio_reg_19_37 = r19, \
+ .radio_reg_20_41 = r20, \
+ .radio_reg_21_4d = r21, \
+ .radio_reg_22_53 = r22, \
+ .radio_reg_23_58 = r23, \
+ .radio_reg_24_5e = r24, \
+ .radio_reg_25_62 = r25, \
+ .radio_reg_26_64 = r26, \
+ .radio_reg_27_2d = r27, \
+ .radio_reg_28_34 = r28, \
+ .radio_reg_29_37 = r29, \
+ .radio_reg_30_41 = r30, \
+ .radio_reg_31_4d = r31, \
+ .radio_reg_32_53 = r32, \
+ .radio_reg_33_58 = r33, \
+ .radio_reg_34_5e = r34, \
+ .radio_reg_35_62 = r35, \
+ .radio_reg_36_64 = r36
+
#define PHYREGS(r0, r1, r2, r3, r4, r5) \
.phy_regs.phy_bw1a = r0, \
.phy_regs.phy_bw2 = r1, \
diff --git a/drivers/net/wireless/b43/tables_nphy.h b/drivers/net/wireless/b43/tables_nphy.h
index 3eedb86..07b2c22 100644
--- a/drivers/net/wireless/b43/tables_nphy.h
+++ b/drivers/net/wireless/b43/tables_nphy.h
@@ -48,12 +48,46 @@ struct b43_nphy_channeltab_entry_rev2 {
};

struct b43_nphy_channeltab_entry_rev3 {
- /* The channel number */
- u8 channel;
/* The channel frequency in MHz */
u16 freq;
/* Radio register values on channelswitch */
- /* TODO */
+ u8 radio_reg_00_56;
+ u8 radio_reg_01_56;
+ u8 radio_reg_02_46;
+ u8 radio_reg_03_51;
+ u8 radio_reg_04_50;
+ u8 radio_reg_05_4b;
+ u8 radio_reg_06_4c;
+ u8 radio_reg_07_4d;
+ u8 radio_reg_08_4e;
+ u8 radio_reg_09_4f;
+ u8 radio_reg_10_1b;
+ u8 radio_reg_11_1c;
+ u8 radio_reg_12_1d;
+ u8 radio_reg_13_70;
+ u8 radio_reg_14_72;
+ u8 radio_reg_15_75;
+ u8 radio_reg_16_76;
+ u8 radio_reg_17_2d;
+ u8 radio_reg_18_34;
+ u8 radio_reg_19_37;
+ u8 radio_reg_20_41;
+ u8 radio_reg_21_4d;
+ u8 radio_reg_22_53;
+ u8 radio_reg_23_58;
+ u8 radio_reg_24_5e;
+ u8 radio_reg_25_62;
+ u8 radio_reg_26_64;
+ u8 radio_reg_27_2d;
+ u8 radio_reg_28_34;
+ u8 radio_reg_29_37;
+ u8 radio_reg_30_41;
+ u8 radio_reg_31_4d;
+ u8 radio_reg_32_53;
+ u8 radio_reg_33_58;
+ u8 radio_reg_34_5e;
+ u8 radio_reg_35_62;
+ u8 radio_reg_36_64;
/* PHY register values on channelswitch */
struct b43_phy_n_sfo_cfg phy_regs;
};
--
1.7.1