提交 bdfa500b 编写于 作者: I Ivo van Doorn 提交者: John W. Linville

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: NIvo van Doorn <IvDoorn@gmail.com>
Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
上级 4d30d309
...@@ -124,8 +124,9 @@ enum antenna rt2x00lib_config_antenna_check(enum antenna current_ant, ...@@ -124,8 +124,9 @@ enum antenna rt2x00lib_config_antenna_check(enum antenna current_ant,
} }
void rt2x00lib_config_antenna(struct rt2x00_dev *rt2x00dev, 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 *def = &rt2x00dev->default_ant;
struct antenna_setup *active = &rt2x00dev->link.ant.active; struct antenna_setup *active = &rt2x00dev->link.ant.active;
...@@ -134,14 +135,23 @@ void rt2x00lib_config_antenna(struct rt2x00_dev *rt2x00dev, ...@@ -134,14 +135,23 @@ void rt2x00lib_config_antenna(struct rt2x00_dev *rt2x00dev,
* ANTENNA_SW_DIVERSITY state to the driver. * ANTENNA_SW_DIVERSITY state to the driver.
* If that happens, fallback to hardware defaults, * If that happens, fallback to hardware defaults,
* or our own default. * 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() * The calls to rt2x00lib_config_antenna_check()
* might have caused that we restore back to the already * might have caused that we restore back to the already
* active setting. If that has happened we can quit. * active setting. If that has happened we can quit.
*/ */
ant.rx = rt2x00lib_config_antenna_check(ant.rx, def->rx); if (!(ant->flags & ANTENNA_RX_DIVERSITY))
ant.tx = rt2x00lib_config_antenna_check(ant.tx, def->tx); config.rx = rt2x00lib_config_antenna_check(config.rx, def->rx);
else
config.rx = active->rx;
if (ant.rx == active->rx && ant.tx == active->tx) if (!(ant->flags & ANTENNA_TX_DIVERSITY))
config.tx = rt2x00lib_config_antenna_check(config.tx, def->tx);
else
config.tx = active->tx;
if (config.rx == active->rx && config.tx == active->tx)
return; return;
/* /*
...@@ -156,11 +166,11 @@ void rt2x00lib_config_antenna(struct rt2x00_dev *rt2x00dev, ...@@ -156,11 +166,11 @@ void rt2x00lib_config_antenna(struct rt2x00_dev *rt2x00dev,
* The latter is required since we need to recalibrate the * The latter is required since we need to recalibrate the
* noise-sensitivity ratio for the new setup. * 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); rt2x00link_reset_tuner(rt2x00dev, true);
memcpy(active, &ant, sizeof(ant)); memcpy(active, &config, sizeof(config));
if (test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags)) if (test_bit(DEVICE_STATE_ENABLED_RADIO, &rt2x00dev->flags))
rt2x00lib_toggle_rx(rt2x00dev, STATE_RADIO_RX_ON_LINK); rt2x00lib_toggle_rx(rt2x00dev, STATE_RADIO_RX_ON_LINK);
......
...@@ -785,6 +785,13 @@ int rt2x00lib_start(struct rt2x00_dev *rt2x00dev) ...@@ -785,6 +785,13 @@ int rt2x00lib_start(struct rt2x00_dev *rt2x00dev)
rt2x00dev->intf_sta_count = 0; rt2x00dev->intf_sta_count = 0;
rt2x00dev->intf_associated = 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); set_bit(DEVICE_STATE_STARTED, &rt2x00dev->flags);
return 0; return 0;
......
...@@ -219,6 +219,7 @@ static void rt2x00lib_antenna_diversity_eval(struct rt2x00_dev *rt2x00dev) ...@@ -219,6 +219,7 @@ static void rt2x00lib_antenna_diversity_eval(struct rt2x00_dev *rt2x00dev)
static void rt2x00lib_antenna_diversity(struct rt2x00_dev *rt2x00dev) static void rt2x00lib_antenna_diversity(struct rt2x00_dev *rt2x00dev)
{ {
struct link_ant *ant = &rt2x00dev->link.ant; struct link_ant *ant = &rt2x00dev->link.ant;
unsigned int flags = ant->flags;
/* /*
* Determine if software diversity is enabled for * Determine if software diversity is enabled for
...@@ -226,13 +227,13 @@ static void rt2x00lib_antenna_diversity(struct rt2x00_dev *rt2x00dev) ...@@ -226,13 +227,13 @@ static void rt2x00lib_antenna_diversity(struct rt2x00_dev *rt2x00dev)
* Always perform this check since within the link * Always perform this check since within the link
* tuner interval the configuration might have changed. * tuner interval the configuration might have changed.
*/ */
ant->flags &= ~ANTENNA_RX_DIVERSITY; flags &= ~ANTENNA_RX_DIVERSITY;
ant->flags &= ~ANTENNA_TX_DIVERSITY; flags &= ~ANTENNA_TX_DIVERSITY;
if (rt2x00dev->default_ant.rx == ANTENNA_SW_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) if (rt2x00dev->default_ant.tx == ANTENNA_SW_DIVERSITY)
ant->flags |= ANTENNA_TX_DIVERSITY; flags |= ANTENNA_TX_DIVERSITY;
if (!(ant->flags & ANTENNA_RX_DIVERSITY) && if (!(ant->flags & ANTENNA_RX_DIVERSITY) &&
!(ant->flags & ANTENNA_TX_DIVERSITY)) { !(ant->flags & ANTENNA_TX_DIVERSITY)) {
...@@ -240,6 +241,9 @@ static void rt2x00lib_antenna_diversity(struct rt2x00_dev *rt2x00dev) ...@@ -240,6 +241,9 @@ static void rt2x00lib_antenna_diversity(struct rt2x00_dev *rt2x00dev)
return; return;
} }
/* Update flags */
ant->flags = flags;
/* /*
* If we have only sampled the data over the last period * If we have only sampled the data over the last period
* we should now harvest the data. Otherwise just evaluate * we should now harvest the data. Otherwise just evaluate
......
...@@ -338,7 +338,6 @@ int rt2x00mac_config(struct ieee80211_hw *hw, u32 changed) ...@@ -338,7 +338,6 @@ int rt2x00mac_config(struct ieee80211_hw *hw, u32 changed)
{ {
struct rt2x00_dev *rt2x00dev = hw->priv; struct rt2x00_dev *rt2x00dev = hw->priv;
struct ieee80211_conf *conf = &hw->conf; struct ieee80211_conf *conf = &hw->conf;
int status;
/* /*
* mac80211 might be calling this function while we are trying * mac80211 might be calling this function while we are trying
...@@ -348,44 +347,29 @@ int rt2x00mac_config(struct ieee80211_hw *hw, u32 changed) ...@@ -348,44 +347,29 @@ int rt2x00mac_config(struct ieee80211_hw *hw, u32 changed)
return 0; return 0;
/* /*
* Only change device state when the radio is enabled. It does not * Some configuration parameters (e.g. channel and antenna values) can
* matter what parameters we have configured when the radio is disabled * only be set when the radio is enabled, but do require the RX to
* because we won't be able to send or receive anyway. Also note that * be off.
* some configuration parameters (e.g. channel and antenna values) can
* only be set when the radio is enabled.
*/ */
if (conf->radio_enabled) { rt2x00lib_toggle_rx(rt2x00dev, STATE_RADIO_RX_OFF);
/* 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); * When we've just turned on the radio, we want to reprogram
if (unlikely(status)) * everything to ensure a consistent state
return status; */
rt2x00lib_config(rt2x00dev, conf, changed);
/* /*
* When we've just turned on the radio, we want to reprogram * After the radio has been enabled we need to configure
* everything to ensure a consistent state * the antenna to the default settings. rt2x00lib_config_antenna()
*/ * should determine if any action should be taken based on
rt2x00lib_config(rt2x00dev, conf, changed); * checking if diversity has been enabled or no antenna changes
* have been made since the last configuration change.
*/
rt2x00lib_config_antenna(rt2x00dev, rt2x00dev->default_ant);
/* /* Turn RX back on */
* The radio was enabled, configure the antenna to the rt2x00lib_toggle_rx(rt2x00dev, STATE_RADIO_RX_ON);
* 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.
*/
if (changed & IEEE80211_CONF_CHANGE_RADIO_ENABLED)
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; return 0;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册