Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 39f7d33c authored by Rafał Miłecki's avatar Rafał Miłecki Committed by John W. Linville
Browse files

b43: LCN-PHY: prepare functions for channel switching



Switching is not fully implemented yet, prepare place for the code.

Signed-off-by: default avatarRafał Miłecki <zajec5@gmail.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent bd3bf693
Loading
Loading
Loading
Loading
+84 −2
Original line number Original line Diff line number Diff line
@@ -31,6 +31,48 @@
 * Radio 2064.
 * 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)
static void b43_radio_2064_init(struct b43_wldev *dev)
{
{
	b43_radio_write(dev, 0x09c, 0x0020);
	b43_radio_write(dev, 0x09c, 0x0020);
@@ -171,6 +213,32 @@ static void b43_phy_lcn_pre_radio_init(struct b43_wldev *dev)
	/* TODO: more ops */
	/* 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.
 * Basic PHY ops.
 **************************************************/
 **************************************************/
@@ -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)
static unsigned int b43_phy_lcn_op_get_default_chan(struct b43_wldev *dev)
{
{
	if (b43_current_band(dev->wl) == IEEE80211_BAND_2GHZ)
	if (b43_current_band(dev->wl) == IEEE80211_BAND_2GHZ)
@@ -338,9 +422,7 @@ const struct b43_phy_operations b43_phyops_lcn = {
	.radio_write		= b43_phy_lcn_op_radio_write,
	.radio_write		= b43_phy_lcn_op_radio_write,
	.software_rfkill	= b43_phy_lcn_op_software_rfkill,
	.software_rfkill	= b43_phy_lcn_op_software_rfkill,
	.switch_analog		= b43_phy_lcn_op_switch_analog,
	.switch_analog		= b43_phy_lcn_op_switch_analog,
	/*
	.switch_channel		= b43_phy_lcn_op_switch_channel,
	.switch_channel		= b43_phy_lcn_op_switch_channel,
	*/
	.get_default_chan	= b43_phy_lcn_op_get_default_chan,
	.get_default_chan	= b43_phy_lcn_op_get_default_chan,
	.recalc_txpower		= b43_phy_lcn_op_recalc_txpower,
	.recalc_txpower		= b43_phy_lcn_op_recalc_txpower,
	.adjust_txpower		= b43_phy_lcn_op_adjust_txpower,
	.adjust_txpower		= b43_phy_lcn_op_adjust_txpower,