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

Commit bdfa500b authored by Ivo van Doorn's avatar Ivo van Doorn Committed by John W. Linville
Browse files

rt2x00: Remove usage of deprecated radio_enabled & IEEE80211_CONF_CHANGE_RADIO_ENABLED



In the config() callback function the fields radio_enabled and
the change flag IEEE80211_CONF_CHANGE_RADIO_ENABLED have been
deprecated. This removes the usage of those fields by improving
antenna change detection in the antenna configuration function.

Signed-off-by: default avatarIvo van Doorn <IvDoorn@gmail.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 4d30d309
Loading
Loading
Loading
Loading
+16 −6
Original line number Diff line number Diff line
@@ -124,8 +124,9 @@ enum antenna rt2x00lib_config_antenna_check(enum antenna current_ant,
}

void rt2x00lib_config_antenna(struct rt2x00_dev *rt2x00dev,
			      struct antenna_setup ant)
			      struct antenna_setup config)
{
	struct link_ant *ant = &rt2x00dev->link.ant;
	struct antenna_setup *def = &rt2x00dev->default_ant;
	struct antenna_setup *active = &rt2x00dev->link.ant.active;

@@ -134,14 +135,23 @@ void rt2x00lib_config_antenna(struct rt2x00_dev *rt2x00dev,
	 * ANTENNA_SW_DIVERSITY state to the driver.
	 * If that happens, fallback to hardware defaults,
	 * or our own default.
	 * If diversity handling is active for a particular antenna,
	 * we shouldn't overwrite that antenna.
	 * The calls to rt2x00lib_config_antenna_check()
	 * might have caused that we restore back to the already
	 * active setting. If that has happened we can quit.
	 */
	ant.rx = rt2x00lib_config_antenna_check(ant.rx, def->rx);
	ant.tx = rt2x00lib_config_antenna_check(ant.tx, def->tx);
	if (!(ant->flags & ANTENNA_RX_DIVERSITY))
		config.rx = rt2x00lib_config_antenna_check(config.rx, def->rx);
	else
		config.rx = active->rx;

	if (!(ant->flags & ANTENNA_TX_DIVERSITY))
		config.tx = rt2x00lib_config_antenna_check(config.tx, def->tx);
	else
		config.tx = active->tx;

	if (ant.rx == active->rx && ant.tx == active->tx)
	if (config.rx == active->rx && config.tx == active->tx)
		return;

	/*
@@ -156,11 +166,11 @@ void rt2x00lib_config_antenna(struct rt2x00_dev *rt2x00dev,
	 * The latter is required since we need to recalibrate the
	 * noise-sensitivity ratio for the new setup.
	 */
	rt2x00dev->ops->lib->config_ant(rt2x00dev, &ant);
	rt2x00dev->ops->lib->config_ant(rt2x00dev, &config);

	rt2x00link_reset_tuner(rt2x00dev, true);

	memcpy(active, &ant, sizeof(ant));
	memcpy(active, &config, sizeof(config));

	if (test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags))
		rt2x00lib_toggle_rx(rt2x00dev, STATE_RADIO_RX_ON_LINK);
+7 −0
Original line number Diff line number Diff line
@@ -785,6 +785,13 @@ int rt2x00lib_start(struct rt2x00_dev *rt2x00dev)
	rt2x00dev->intf_sta_count = 0;
	rt2x00dev->intf_associated = 0;

	/* Enable the radio */
	retval = rt2x00lib_enable_radio(rt2x00dev);
	if (retval) {
		rt2x00queue_uninitialize(rt2x00dev);
		return retval;
	}

	set_bit(DEVICE_STATE_STARTED, &rt2x00dev->flags);

	return 0;
+8 −4
Original line number Diff line number Diff line
@@ -219,6 +219,7 @@ static void rt2x00lib_antenna_diversity_eval(struct rt2x00_dev *rt2x00dev)
static void rt2x00lib_antenna_diversity(struct rt2x00_dev *rt2x00dev)
{
	struct link_ant *ant = &rt2x00dev->link.ant;
	unsigned int flags = ant->flags;

	/*
	 * Determine if software diversity is enabled for
@@ -226,13 +227,13 @@ static void rt2x00lib_antenna_diversity(struct rt2x00_dev *rt2x00dev)
	 * Always perform this check since within the link
	 * tuner interval the configuration might have changed.
	 */
	ant->flags &= ~ANTENNA_RX_DIVERSITY;
	ant->flags &= ~ANTENNA_TX_DIVERSITY;
	flags &= ~ANTENNA_RX_DIVERSITY;
	flags &= ~ANTENNA_TX_DIVERSITY;

	if (rt2x00dev->default_ant.rx == ANTENNA_SW_DIVERSITY)
		ant->flags |= ANTENNA_RX_DIVERSITY;
		flags |= ANTENNA_RX_DIVERSITY;
	if (rt2x00dev->default_ant.tx == ANTENNA_SW_DIVERSITY)
		ant->flags |= ANTENNA_TX_DIVERSITY;
		flags |= ANTENNA_TX_DIVERSITY;

	if (!(ant->flags & ANTENNA_RX_DIVERSITY) &&
	    !(ant->flags & ANTENNA_TX_DIVERSITY)) {
@@ -240,6 +241,9 @@ static void rt2x00lib_antenna_diversity(struct rt2x00_dev *rt2x00dev)
		return;
	}

	/* Update flags */
	ant->flags = flags;

	/*
	 * If we have only sampled the data over the last period
	 * we should now harvest the data. Otherwise just evaluate
+19 −35
Original line number Diff line number Diff line
@@ -338,7 +338,6 @@ int rt2x00mac_config(struct ieee80211_hw *hw, u32 changed)
{
	struct rt2x00_dev *rt2x00dev = hw->priv;
	struct ieee80211_conf *conf = &hw->conf;
	int status;

	/*
	 * mac80211 might be calling this function while we are trying
@@ -348,21 +347,12 @@ int rt2x00mac_config(struct ieee80211_hw *hw, u32 changed)
		return 0;

	/*
	 * Only change device state when the radio is enabled. It does not
	 * matter what parameters we have configured when the radio is disabled
	 * because we won't be able to send or receive anyway. Also note that
	 * some configuration parameters (e.g. channel and antenna values) can
	 * only be set when the radio is enabled.
	 * Some configuration parameters (e.g. channel and antenna values) can
	 * only be set when the radio is enabled, but do require the RX to
	 * be off.
	 */
	if (conf->radio_enabled) {
		/* For programming the values, we have to turn RX off */
	rt2x00lib_toggle_rx(rt2x00dev, STATE_RADIO_RX_OFF);

		/* Enable the radio */
		status = rt2x00lib_enable_radio(rt2x00dev);
		if (unlikely(status))
			return status;

	/*
	 * When we've just turned on the radio, we want to reprogram
	 * everything to ensure a consistent state
@@ -370,22 +360,16 @@ int rt2x00mac_config(struct ieee80211_hw *hw, u32 changed)
	rt2x00lib_config(rt2x00dev, conf, changed);

	/*
		 * The radio was enabled, configure the antenna to the
		 * default settings, the link tuner will later start
		 * continue configuring the antenna based on the software
		 * diversity. But for non-diversity configurations, we need
		 * to have configured the correct state now.
	 * After the radio has been enabled we need to configure
	 * the antenna to the default settings. rt2x00lib_config_antenna()
	 * should determine if any action should be taken based on
	 * checking if diversity has been enabled or no antenna changes
	 * have been made since the last configuration change.
	 */
		if (changed & IEEE80211_CONF_CHANGE_RADIO_ENABLED)
			rt2x00lib_config_antenna(rt2x00dev,
						 rt2x00dev->default_ant);
	rt2x00lib_config_antenna(rt2x00dev, rt2x00dev->default_ant);

	/* Turn RX back on */
	rt2x00lib_toggle_rx(rt2x00dev, STATE_RADIO_RX_ON);
	} else {
		/* Disable the radio */
		rt2x00lib_disable_radio(rt2x00dev);
	}

	return 0;
}