Skip to content

Commit

Permalink
b43: bus: abstract SPROM
Browse files Browse the repository at this point in the history
SPROM is another frequently used struct. We decided to share SPROM
struct between ssb na bcma as long as we will not need any hacks.

Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
  • Loading branch information
Rafał Miłecki authored and John W. Linville committed Jun 1, 2011
1 parent 21d889d commit 0581483
Show file tree
Hide file tree
Showing 12 changed files with 107 additions and 99 deletions.
2 changes: 2 additions & 0 deletions drivers/net/wireless/b43/bus.c
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,8 @@ struct b43_bus_dev *b43_bus_dev_ssb_init(struct ssb_device *sdev)
dev->block_read = b43_bus_ssb_block_read;
dev->block_write = b43_bus_ssb_block_write;

dev->bus_sprom = &sdev->bus->sprom;

dev->core_id = sdev->id.coreid;
dev->core_rev = sdev->id.revision;

Expand Down
2 changes: 2 additions & 0 deletions drivers/net/wireless/b43/bus.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ struct b43_bus_dev {
void (*block_write)(struct b43_bus_dev *dev, const void *buffer,
size_t count, u16 offset, u8 reg_width);

struct ssb_sprom *bus_sprom;

u16 core_id;
u8 core_rev;
};
Expand Down
8 changes: 4 additions & 4 deletions drivers/net/wireless/b43/leds.c
Original file line number Diff line number Diff line change
Expand Up @@ -218,10 +218,10 @@ static void b43_led_get_sprominfo(struct b43_wldev *dev,
struct ssb_bus *bus = dev->sdev->bus;
u8 sprom[4];

sprom[0] = bus->sprom.gpio0;
sprom[1] = bus->sprom.gpio1;
sprom[2] = bus->sprom.gpio2;
sprom[3] = bus->sprom.gpio3;
sprom[0] = dev->dev->bus_sprom->gpio0;
sprom[1] = dev->dev->bus_sprom->gpio1;
sprom[2] = dev->dev->bus_sprom->gpio2;
sprom[3] = dev->dev->bus_sprom->gpio3;

if (sprom[led_index] == 0xFF) {
/* There is no LED information in the SPROM
Expand Down
4 changes: 2 additions & 2 deletions drivers/net/wireless/b43/lo.c
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ static u16 lo_measure_feedthrough(struct b43_wldev *dev,
rfover |= pga;
rfover |= lna;
rfover |= trsw_rx;
if ((dev->sdev->bus->sprom.boardflags_lo & B43_BFL_EXTLNA)
if ((dev->dev->bus_sprom->boardflags_lo & B43_BFL_EXTLNA)
&& phy->rev > 6)
rfover |= B43_PHY_RFOVERVAL_EXTLNA;

Expand Down Expand Up @@ -387,7 +387,7 @@ struct lo_g_saved_values {
static void lo_measure_setup(struct b43_wldev *dev,
struct lo_g_saved_values *sav)
{
struct ssb_sprom *sprom = &dev->sdev->bus->sprom;
struct ssb_sprom *sprom = dev->dev->bus_sprom;
struct b43_phy *phy = &dev->phy;
struct b43_phy_g *gphy = phy->g;
struct b43_txpower_lo_control *lo = gphy->lo_control;
Expand Down
10 changes: 5 additions & 5 deletions drivers/net/wireless/b43/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -1427,9 +1427,9 @@ u8 b43_ieee80211_antenna_sanitize(struct b43_wldev *dev,

/* Get the mask of available antennas. */
if (dev->phy.gmode)
antenna_mask = dev->sdev->bus->sprom.ant_available_bg;
antenna_mask = dev->dev->bus_sprom->ant_available_bg;
else
antenna_mask = dev->sdev->bus->sprom.ant_available_a;
antenna_mask = dev->dev->bus_sprom->ant_available_a;

if (!(antenna_mask & (1 << (antenna_nr - 1)))) {
/* This antenna is not available. Fall back to default. */
Expand Down Expand Up @@ -2599,7 +2599,7 @@ static int b43_gpio_init(struct b43_wldev *dev)
mask |= 0x0180;
set |= 0x0180;
}
if (dev->sdev->bus->sprom.boardflags_lo & B43_BFL_PACTRL) {
if (dev->dev->bus_sprom->boardflags_lo & B43_BFL_PACTRL) {
b43_write16(dev, B43_MMIO_GPIO_MASK,
b43_read16(dev, B43_MMIO_GPIO_MASK)
| 0x0200);
Expand Down Expand Up @@ -4204,7 +4204,7 @@ static void setup_struct_wldev_for_init(struct b43_wldev *dev)

static void b43_bluetooth_coext_enable(struct b43_wldev *dev)
{
struct ssb_sprom *sprom = &dev->sdev->bus->sprom;
struct ssb_sprom *sprom = dev->dev->bus_sprom;
u64 hf;

if (!modparam_btcoex)
Expand Down Expand Up @@ -4318,7 +4318,7 @@ static void b43_wireless_core_exit(struct b43_wldev *dev)
static int b43_wireless_core_init(struct b43_wldev *dev)
{
struct ssb_bus *bus = dev->sdev->bus;
struct ssb_sprom *sprom = &bus->sprom;
struct ssb_sprom *sprom = dev->dev->bus_sprom;
struct b43_phy *phy = &dev->phy;
int err;
u64 hf;
Expand Down
14 changes: 7 additions & 7 deletions drivers/net/wireless/b43/phy_a.c
Original file line number Diff line number Diff line change
Expand Up @@ -311,7 +311,7 @@ void b43_phy_inita(struct b43_wldev *dev)
}

if ((phy->type == B43_PHYTYPE_G) &&
(dev->sdev->bus->sprom.boardflags_lo & B43_BFL_PACTRL)) {
(dev->dev->bus_sprom->boardflags_lo & B43_BFL_PACTRL)) {
b43_phy_maskset(dev, B43_PHY_OFDM(0x6E), 0xE000, 0x3CF);
}
}
Expand All @@ -323,17 +323,17 @@ static int b43_aphy_init_tssi2dbm_table(struct b43_wldev *dev)
struct b43_phy_a *aphy = phy->a;
s16 pab0, pab1, pab2;

pab0 = (s16) (dev->sdev->bus->sprom.pa1b0);
pab1 = (s16) (dev->sdev->bus->sprom.pa1b1);
pab2 = (s16) (dev->sdev->bus->sprom.pa1b2);
pab0 = (s16) (dev->dev->bus_sprom->pa1b0);
pab1 = (s16) (dev->dev->bus_sprom->pa1b1);
pab2 = (s16) (dev->dev->bus_sprom->pa1b2);

if (pab0 != 0 && pab1 != 0 && pab2 != 0 &&
pab0 != -1 && pab1 != -1 && pab2 != -1) {
/* The pabX values are set in SPROM. Use them. */
if ((s8) dev->sdev->bus->sprom.itssi_a != 0 &&
(s8) dev->sdev->bus->sprom.itssi_a != -1)
if ((s8) dev->dev->bus_sprom->itssi_a != 0 &&
(s8) dev->dev->bus_sprom->itssi_a != -1)
aphy->tgt_idle_tssi =
(s8) (dev->sdev->bus->sprom.itssi_a);
(s8) (dev->dev->bus_sprom->itssi_a);
else
aphy->tgt_idle_tssi = 62;
aphy->tssi2dbm = b43_generate_dyn_tssi2dbm_tab(dev, pab0,
Expand Down
36 changes: 18 additions & 18 deletions drivers/net/wireless/b43/phy_g.c
Original file line number Diff line number Diff line change
Expand Up @@ -718,7 +718,7 @@ static void b43_calc_nrssi_threshold(struct b43_wldev *dev)
B43_WARN_ON(phy->type != B43_PHYTYPE_G);

if (!phy->gmode ||
!(dev->sdev->bus->sprom.boardflags_lo & B43_BFL_RSSI)) {
!(dev->dev->bus_sprom->boardflags_lo & B43_BFL_RSSI)) {
tmp16 = b43_nrssi_hw_read(dev, 0x20);
if (tmp16 >= 0x20)
tmp16 -= 0x40;
Expand Down Expand Up @@ -1114,7 +1114,7 @@ static u16 radio2050_rfover_val(struct b43_wldev *dev,
{
struct b43_phy *phy = &dev->phy;
struct b43_phy_g *gphy = phy->g;
struct ssb_sprom *sprom = &(dev->sdev->bus->sprom);
struct ssb_sprom *sprom = dev->dev->bus_sprom;

if (!phy->gmode)
return 0;
Expand Down Expand Up @@ -1620,7 +1620,7 @@ static void b43_phy_initb6(struct b43_wldev *dev)
b43_radio_write16(dev, 0x5A, 0x88);
b43_radio_write16(dev, 0x5B, 0x6B);
b43_radio_write16(dev, 0x5C, 0x0F);
if (dev->sdev->bus->sprom.boardflags_lo & B43_BFL_ALTIQ) {
if (dev->dev->bus_sprom->boardflags_lo & B43_BFL_ALTIQ) {
b43_radio_write16(dev, 0x5D, 0xFA);
b43_radio_write16(dev, 0x5E, 0xD8);
} else {
Expand Down Expand Up @@ -1787,7 +1787,7 @@ static void b43_calc_loopback_gain(struct b43_wldev *dev)
b43_phy_set(dev, B43_PHY_RFOVER, 0x0100);
b43_phy_mask(dev, B43_PHY_RFOVERVAL, 0xCFFF);

if (dev->sdev->bus->sprom.boardflags_lo & B43_BFL_EXTLNA) {
if (dev->dev->bus_sprom->boardflags_lo & B43_BFL_EXTLNA) {
if (phy->rev >= 7) {
b43_phy_set(dev, B43_PHY_RFOVER, 0x0800);
b43_phy_set(dev, B43_PHY_RFOVERVAL, 0x8000);
Expand Down Expand Up @@ -2053,7 +2053,7 @@ static void b43_phy_initg(struct b43_wldev *dev)
if (phy->rev >= 6) {
b43_phy_maskset(dev, B43_PHY_CCK(0x36), 0x0FFF, (gphy->lo_control->tx_bias << 12));
}
if (dev->sdev->bus->sprom.boardflags_lo & B43_BFL_PACTRL)
if (dev->dev->bus_sprom->boardflags_lo & B43_BFL_PACTRL)
b43_phy_write(dev, B43_PHY_CCK(0x2E), 0x8075);
else
b43_phy_write(dev, B43_PHY_CCK(0x2E), 0x807F);
Expand All @@ -2066,7 +2066,7 @@ static void b43_phy_initg(struct b43_wldev *dev)
b43_phy_write(dev, B43_PHY_LO_MASK, 0x8078);
}

if (!(dev->sdev->bus->sprom.boardflags_lo & B43_BFL_RSSI)) {
if (!(dev->dev->bus_sprom->boardflags_lo & B43_BFL_RSSI)) {
/* The specs state to update the NRSSI LT with
* the value 0x7FFFFFFF here. I think that is some weird
* compiler optimization in the original driver.
Expand Down Expand Up @@ -2105,7 +2105,7 @@ void b43_gphy_channel_switch(struct b43_wldev *dev,
b43_write16(dev, B43_MMIO_CHANNEL, channel2freq_bg(channel));

if (channel == 14) {
if (dev->sdev->bus->sprom.country_code ==
if (dev->dev->bus_sprom->country_code ==
SSB_SPROM1CCODE_JAPAN)
b43_hf_write(dev,
b43_hf_read(dev) & ~B43_HF_ACPR);
Expand Down Expand Up @@ -2384,9 +2384,9 @@ static int b43_gphy_init_tssi2dbm_table(struct b43_wldev *dev)
struct b43_phy_g *gphy = phy->g;
s16 pab0, pab1, pab2;

pab0 = (s16) (dev->sdev->bus->sprom.pa0b0);
pab1 = (s16) (dev->sdev->bus->sprom.pa0b1);
pab2 = (s16) (dev->sdev->bus->sprom.pa0b2);
pab0 = (s16) (dev->dev->bus_sprom->pa0b0);
pab1 = (s16) (dev->dev->bus_sprom->pa0b1);
pab2 = (s16) (dev->dev->bus_sprom->pa0b2);

B43_WARN_ON((dev->sdev->bus->chip_id == 0x4301) &&
(phy->radio_ver != 0x2050)); /* Not supported anymore */
Expand All @@ -2396,10 +2396,10 @@ static int b43_gphy_init_tssi2dbm_table(struct b43_wldev *dev)
if (pab0 != 0 && pab1 != 0 && pab2 != 0 &&
pab0 != -1 && pab1 != -1 && pab2 != -1) {
/* The pabX values are set in SPROM. Use them. */
if ((s8) dev->sdev->bus->sprom.itssi_bg != 0 &&
(s8) dev->sdev->bus->sprom.itssi_bg != -1) {
if ((s8) dev->dev->bus_sprom->itssi_bg != 0 &&
(s8) dev->dev->bus_sprom->itssi_bg != -1) {
gphy->tgt_idle_tssi =
(s8) (dev->sdev->bus->sprom.itssi_bg);
(s8) (dev->dev->bus_sprom->itssi_bg);
} else
gphy->tgt_idle_tssi = 62;
gphy->tssi2dbm = b43_generate_dyn_tssi2dbm_tab(dev, pab0,
Expand Down Expand Up @@ -2840,7 +2840,7 @@ static void b43_gphy_op_adjust_txpower(struct b43_wldev *dev)
B43_TXCTL_TXMIX;
rfatt += 2;
bbatt += 2;
} else if (dev->sdev->bus->sprom.
} else if (dev->dev->bus_sprom->
boardflags_lo &
B43_BFL_PACTRL) {
bbatt += 4 * (rfatt - 2);
Expand Down Expand Up @@ -2914,14 +2914,14 @@ static enum b43_txpwr_result b43_gphy_op_recalc_txpower(struct b43_wldev *dev,
estimated_pwr = b43_gphy_estimate_power_out(dev, average_tssi);

B43_WARN_ON(phy->type != B43_PHYTYPE_G);
max_pwr = dev->sdev->bus->sprom.maxpwr_bg;
if (dev->sdev->bus->sprom.boardflags_lo & B43_BFL_PACTRL)
max_pwr = dev->dev->bus_sprom->maxpwr_bg;
if (dev->dev->bus_sprom->boardflags_lo & B43_BFL_PACTRL)
max_pwr -= 3; /* minus 0.75 */
if (unlikely(max_pwr >= INT_TO_Q52(30/*dBm*/))) {
b43warn(dev->wl,
"Invalid max-TX-power value in SPROM.\n");
max_pwr = INT_TO_Q52(20); /* fake it */
dev->sdev->bus->sprom.maxpwr_bg = max_pwr;
dev->dev->bus_sprom->maxpwr_bg = max_pwr;
}

/* Get desired power (in Q5.2) */
Expand Down Expand Up @@ -3014,7 +3014,7 @@ static void b43_gphy_op_pwork_60sec(struct b43_wldev *dev)
{
struct b43_phy *phy = &dev->phy;

if (!(dev->sdev->bus->sprom.boardflags_lo & B43_BFL_RSSI))
if (!(dev->dev->bus_sprom->boardflags_lo & B43_BFL_RSSI))
return;

b43_mac_suspend(dev);
Expand Down
Loading

0 comments on commit 0581483

Please sign in to comment.