rt2x00: Don't alter rt2x00dev->default_ant
PATCH 1/1 rt2x00: Don't alter rt2x00dev->default_ant
From: Lars Ericsson <[email protected]>
rt2x00dev->default_ant should be initialized once by the driver,
and should not be changed afterwards. Because rt2x00lib_config_antenna() was using a reference to the struct antenna_setup it actually had the oppurtunity to change the default antenna setting and it actually did that during the validation.
Instead of passing a pointer to antenna_setup the entire structure should be copied.
Signed-off-by Lars Ericsson <[email protected]>
Signed-off-by Ivo van Doorn <[email protected]>
---
drivers/net/wireless/rt2x00/rt2x00config.c +6 -6
@@ -124,7 +124,7 @@ 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 ant) {struct antenna_setup *def = &rt2x00dev->default_ant;struct antenna_setup *active = &rt2x00dev->link.ant.active;
@@ -138,10 +138,10 @@ void rt2x00lib_config_antenna(struct rt2x00_dev *rt2x00dev,* 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); + ant.rx =rt2x00lib_config_antenna_check (ant.rx, def->rx); + ant.tx =rt2x00lib_config_antenna_check (ant.tx, def->tx); -if (ant->rx == active->rx && ant->tx == active->tx) +if (ant.rx == active->rx && ant.tx == active->tx)return ;/*
@@ -156,11 +156,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, &ant);rt2x00link_reset_tuner (rt2x00dev, true); -memcpy (active, ant,sizeof (*ant)); +memcpy (active, &ant,sizeof (ant));if (test_bit (DEVICE_STATE_ENABLED_RADIO , &rt2x00dev->flags))rt2x00lib_toggle_rx (rt2x00dev,STATE_RADIO_RX_ON_LINK );
drivers/net/wireless/rt2x00/rt2x00lib.h +1 -1
@@ -88,7 +88,7 @@ void rt2x00lib_config_erp(struct rt2x00_dev *rt2x00dev,struct rt2x00_intf *intf, struct ieee80211_bss_conf *conf);void rt2x00lib_config_antenna (struct rt2x00_dev *rt2x00dev, -struct antenna_setup *ant); +struct antenna_setup ant);void rt2x00lib_config (struct rt2x00_dev *rt2x00dev,struct ieee80211_conf *conf,const unsigned int changed_flags);
drivers/net/wireless/rt2x00/rt2x00link.c +2 -2
@@ -173,7 +173,7 @@ static void rt2x00lib_antenna_diversity_sample(struct rt2x00_dev *rt2x00dev)if (ant->flags &ANTENNA_TX_DIVERSITY ) new_ant.tx = (sample_a > sample_b) ?ANTENNA_A :ANTENNA_B ; -rt2x00lib_config_antenna (rt2x00dev, &new_ant); +rt2x00lib_config_antenna (rt2x00dev, new_ant); }static void rt2x00lib_antenna_diversity_eval (struct rt2x00_dev *rt2x00dev)
@@ -213,7 +213,7 @@ static void rt2x00lib_antenna_diversity_eval(struct rt2x00_dev *rt2x00dev)if (ant->flags &ANTENNA_TX_DIVERSITY ) new_ant.tx = (new_ant.tx ==ANTENNA_A ) ?ANTENNA_B :ANTENNA_A ; -rt2x00lib_config_antenna (rt2x00dev, &new_ant); +rt2x00lib_config_antenna (rt2x00dev, new_ant); }static void rt2x00lib_antenna_diversity (struct rt2x00_dev *rt2x00dev)
drivers/net/wireless/rt2x00/rt2x00mac.c +1 -1
@@ -378,7 +378,7 @@ int rt2x00mac_config(struct ieee80211_hw *hw, u32 changed)*/ if (changed &IEEE80211_CONF_CHANGE_RADIO_ENABLED )rt2x00lib_config_antenna (rt2x00dev, - &rt2x00dev->default_ant); + rt2x00dev->default_ant);/* Turn RX back on */ rt2x00lib_toggle_rx (rt2x00dev,STATE_RADIO_RX_ON );