Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 265959
b: refs/heads/master
c: 39f7d33
h: refs/heads/master
i:
  265957: 7a5de7e
  265955: d8fcef6
  265951: 7b8f952
v: v3
  • Loading branch information
Rafał Miłecki authored and John W. Linville committed Sep 13, 2011
1 parent 2beb4c9 commit 3e36aea
Show file tree
Hide file tree
Showing 2 changed files with 85 additions and 3 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: bd3bf693c72826d7c5be9df09fe3d1198b89b538
refs/heads/master: 39f7d33c499980267f68fcb1fadd03bdcbc9ab9a
86 changes: 84 additions & 2 deletions trunk/drivers/net/wireless/b43/phy_lcn.c
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,48 @@
* Radio 2064.
**************************************************/

static void b43_radio_2064_channel_setup(struct b43_wldev *dev)
{
u16 save[2];

b43_radio_set(dev, 0x09d, 0x4);
b43_radio_write(dev, 0x09e, 0xf);

b43_radio_write(dev, 0x02a, 0xb);
b43_radio_maskset(dev, 0x030, ~0x3, 0xa);
b43_radio_maskset(dev, 0x091, ~0x3, 0);
b43_radio_maskset(dev, 0x038, ~0xf, 0x7);
b43_radio_maskset(dev, 0x030, ~0xc, 0x8);
b43_radio_maskset(dev, 0x05e, ~0xf, 0x8);
b43_radio_maskset(dev, 0x05e, ~0xf0, 0x80);
b43_radio_write(dev, 0x06c, 0x80);

save[0] = b43_radio_read(dev, 0x044);
save[1] = b43_radio_read(dev, 0x12b);

b43_radio_set(dev, 0x044, 0x7);
b43_radio_set(dev, 0x12b, 0xe);

/* TODO */

b43_radio_write(dev, 0x040, 0xfb);

b43_radio_write(dev, 0x041, 0x9a);
b43_radio_write(dev, 0x042, 0xa3);
b43_radio_write(dev, 0x043, 0x0c);

/* TODO */

b43_radio_set(dev, 0x044, 0x0c);
udelay(1);

b43_radio_write(dev, 0x044, save[0]);
b43_radio_write(dev, 0x12b, save[1]);

b43_radio_write(dev, 0x038, 0x0);
b43_radio_write(dev, 0x091, 0x7);
}

static void b43_radio_2064_init(struct b43_wldev *dev)
{
b43_radio_write(dev, 0x09c, 0x0020);
Expand Down Expand Up @@ -171,6 +213,32 @@ static void b43_phy_lcn_pre_radio_init(struct b43_wldev *dev)
/* TODO: more ops */
}

/**************************************************
* Channel switching ops.
**************************************************/

static int b43_phy_lcn_set_channel(struct b43_wldev *dev,
struct ieee80211_channel *channel,
enum nl80211_channel_type channel_type)
{
/* TODO: PLL and PHY ops */

b43_phy_set(dev, 0x44a, 0x44);
b43_phy_write(dev, 0x44a, 0x80);

b43_phy_set(dev, 0x44a, 0x44);
b43_phy_write(dev, 0x44a, 0x80);

b43_radio_2064_channel_setup(dev);
mdelay(1);

b43_phy_lcn_afe_set_unset(dev);

/* TODO */

return 0;
}

/**************************************************
* Basic PHY ops.
**************************************************/
Expand Down Expand Up @@ -265,6 +333,22 @@ static void b43_phy_lcn_op_switch_analog(struct b43_wldev *dev, bool on)
}
}

static int b43_phy_lcn_op_switch_channel(struct b43_wldev *dev,
unsigned int new_channel)
{
struct ieee80211_channel *channel = dev->wl->hw->conf.channel;
enum nl80211_channel_type channel_type = dev->wl->hw->conf.channel_type;

if (b43_current_band(dev->wl) == IEEE80211_BAND_2GHZ) {
if ((new_channel < 1) || (new_channel > 14))
return -EINVAL;
} else {
return -EINVAL;
}

return b43_phy_lcn_set_channel(dev, channel, channel_type);
}

static unsigned int b43_phy_lcn_op_get_default_chan(struct b43_wldev *dev)
{
if (b43_current_band(dev->wl) == IEEE80211_BAND_2GHZ)
Expand Down Expand Up @@ -338,9 +422,7 @@ const struct b43_phy_operations b43_phyops_lcn = {
.radio_write = b43_phy_lcn_op_radio_write,
.software_rfkill = b43_phy_lcn_op_software_rfkill,
.switch_analog = b43_phy_lcn_op_switch_analog,
/*
.switch_channel = b43_phy_lcn_op_switch_channel,
*/
.get_default_chan = b43_phy_lcn_op_get_default_chan,
.recalc_txpower = b43_phy_lcn_op_recalc_txpower,
.adjust_txpower = b43_phy_lcn_op_adjust_txpower,
Expand Down

0 comments on commit 3e36aea

Please sign in to comment.