Commit 463288b9 authored by Malcolm Priestley's avatar Malcolm Priestley Committed by Greg Kroah-Hartman
Browse files

staging: vt6556: vnt_rf_setpower convert to use ieee80211_channel.



ieee80211_channel contains all the necessary information to change
power according to tx mode required.

vnt_rf_setpower is moved and so that vnt_rf_set_txpower the only
caller becomes static.

Signed-off-by: default avatarMalcolm Priestley <tvboxspy@gmail.com>
Link: https://lore.kernel.org/r/9eab9af8-fde9-1dc6-fced-95c7a36ecc01@gmail.com


Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent a6a002fd
Loading
Loading
Loading
Loading
+4 −12
Original line number Diff line number Diff line
@@ -685,15 +685,8 @@ static int vnt_config(struct ieee80211_hw *hw, u32 changed)
			priv->bb_type = BB_TYPE_11G;
	}

	if (changed & IEEE80211_CONF_CHANGE_POWER) {
		if (priv->bb_type == BB_TYPE_11B)
			priv->current_rate = RATE_1M;
		else
			priv->current_rate = RATE_54M;

		vnt_rf_setpower(priv, priv->current_rate,
				conf->chandef.chan->hw_value);
	}
	if (changed & IEEE80211_CONF_CHANGE_POWER)
		vnt_rf_setpower(priv, conf->chandef.chan);

	return 0;
}
@@ -747,9 +740,8 @@ static void vnt_bss_info_changed(struct ieee80211_hw *hw,
		vnt_update_pre_ed_threshold(priv, false);
	}

	if (changed & BSS_CHANGED_TXPOWER)
		vnt_rf_setpower(priv, priv->current_rate,
				conf->chandef.chan->hw_value);
	if (changed & (BSS_CHANGED_TXPOWER | BSS_CHANGED_BANDWIDTH))
		vnt_rf_setpower(priv, conf->chandef.chan);

	if (changed & BSS_CHANGED_BEACON_ENABLED) {
		dev_dbg(&priv->usb->dev,
+37 −42
Original line number Diff line number Diff line
@@ -537,42 +537,6 @@ int vnt_rf_write_embedded(struct vnt_private *priv, u32 data)
	return true;
}

/* Set Tx power by rate and channel number */
int vnt_rf_setpower(struct vnt_private *priv, u32 rate, u32 channel)
{
	u8 power = priv->cck_pwr;

	if (channel == 0)
		return -EINVAL;

	switch (rate) {
	case RATE_1M:
	case RATE_2M:
	case RATE_5M:
	case RATE_11M:
		channel--;

		if (channel < sizeof(priv->cck_pwr_tbl))
			power = priv->cck_pwr_tbl[channel];
		break;
	case RATE_6M:
	case RATE_9M:
	case RATE_12M:
	case RATE_18M:
	case RATE_24M:
	case RATE_36M:
	case RATE_48M:
	case RATE_54M:
		if (channel > CB_MAX_CHANNEL_24G)
			power = priv->ofdm_a_pwr_tbl[channel - 15];
		else
			power = priv->ofdm_pwr_tbl[channel - 1];
		break;
	}

	return vnt_rf_set_txpower(priv, power, rate);
}

static u8 vnt_rf_addpower(struct vnt_private *priv)
{
	s32 rssi = -priv->current_rssi;
@@ -600,7 +564,8 @@ static u8 vnt_rf_addpower(struct vnt_private *priv)
}

/* Set Tx power by power level and rate */
int vnt_rf_set_txpower(struct vnt_private *priv, u8 power, u32 rate)
static int vnt_rf_set_txpower(struct vnt_private *priv, u8 power,
			      struct ieee80211_channel *ch)
{
	u32 power_setting = 0;
	int ret = true;
@@ -620,7 +585,7 @@ int vnt_rf_set_txpower(struct vnt_private *priv, u8 power, u32 rate)

		ret &= vnt_rf_write_embedded(priv, power_setting);

		if (rate <= RATE_11M)
		if (ch->flags & IEEE80211_CHAN_NO_OFDM)
			ret &= vnt_rf_write_embedded(priv, 0x0001b400);
		else
			ret &= vnt_rf_write_embedded(priv, 0x0005a400);
@@ -630,7 +595,7 @@ int vnt_rf_set_txpower(struct vnt_private *priv, u8 power, u32 rate)

		ret &= vnt_rf_write_embedded(priv, power_setting);

		if (rate <= RATE_11M) {
		if (ch->flags & IEEE80211_CHAN_NO_OFDM) {
			ret &= vnt_rf_write_embedded(priv, 0x040c1400);
			ret &= vnt_rf_write_embedded(priv, 0x00299b00);
		} else {
@@ -640,7 +605,7 @@ int vnt_rf_set_txpower(struct vnt_private *priv, u8 power, u32 rate)
		break;

	case RF_AIROHA7230:
		if (rate <= RATE_11M)
		if (ch->flags & IEEE80211_CHAN_NO_OFDM)
			ret &= vnt_rf_write_embedded(priv, 0x111bb900);
		else
			ret &= vnt_rf_write_embedded(priv, 0x221bb900);
@@ -670,8 +635,8 @@ int vnt_rf_set_txpower(struct vnt_private *priv, u8 power, u32 rate)
		if (power >= VT3226_PWR_IDX_LEN)
			return false;

		if (rate <= RATE_11M) {
			u16 hw_value = priv->hw->conf.chandef.chan->hw_value;
		if (ch->flags & IEEE80211_CHAN_NO_OFDM) {
			u16 hw_value = ch->hw_value;

			power_setting = ((0x3f - power) << 20) | (0xe07 << 8);

@@ -716,6 +681,36 @@ int vnt_rf_set_txpower(struct vnt_private *priv, u8 power, u32 rate)
	return ret;
}

/* Set Tx power by channel number type */
int vnt_rf_setpower(struct vnt_private *priv,
		    struct ieee80211_channel *ch)
{
	u16 channel;
	u8 power = priv->cck_pwr;

	if (!ch)
		return -EINVAL;

	/* set channel number to array number */
	channel = ch->hw_value - 1;

	if (ch->flags & IEEE80211_CHAN_NO_OFDM) {
		if (channel < ARRAY_SIZE(priv->cck_pwr_tbl))
			power = priv->cck_pwr_tbl[channel];
	} else if (ch->band == NL80211_BAND_5GHZ) {
		/* remove 14 channels to array size */
		channel -= 14;

		if (channel < ARRAY_SIZE(priv->ofdm_a_pwr_tbl))
			power = priv->ofdm_a_pwr_tbl[channel];
	} else {
		if (channel < ARRAY_SIZE(priv->ofdm_pwr_tbl))
			power = priv->ofdm_pwr_tbl[channel];
	}

	return vnt_rf_set_txpower(priv, power, ch);
}

/* Convert rssi to dbm */
void vnt_rf_rssi_to_dbm(struct vnt_private *priv, u8 rssi, long *dbm)
{
+1 −2
Original line number Diff line number Diff line
@@ -41,8 +41,7 @@
#define	VNT_RF_REG_LEN      0x17 /* 24 bit length */

int vnt_rf_write_embedded(struct vnt_private *priv, u32 data);
int vnt_rf_setpower(struct vnt_private *priv, u32 rate, u32 channel);
int vnt_rf_set_txpower(struct vnt_private *priv, u8 power, u32 rate);
int vnt_rf_setpower(struct vnt_private *priv, struct ieee80211_channel *ch);
void vnt_rf_rssi_to_dbm(struct vnt_private *priv, u8 rssi, long *dbm);
int vnt_rf_table_download(struct vnt_private *priv);

+1 −2
Original line number Diff line number Diff line
@@ -122,8 +122,7 @@ void vnt_run_command(struct work_struct *work)

	case WLAN_CMD_SETPOWER_START:

		vnt_rf_setpower(priv, priv->current_rate,
				priv->hw->conf.chandef.chan->hw_value);
		vnt_rf_setpower(priv, priv->hw->conf.chandef.chan);

		break;