Commit ceffefd1 authored by Michael Buesch's avatar Michael Buesch Committed by John W. Linville
Browse files

mac80211: Fix initial hardware configuration



On the initial device-open we need to defer the hardware reconfiguration
after we incremented the open_count, because the hw_config checks this flag
and won't call the lowlevel driver in case it is zero.

Signed-off-by: default avatarMichael Buesch <mb@bu3sch.de>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent db433feb
Loading
Loading
Loading
Loading
+4 −1
Original line number Original line Diff line number Diff line
@@ -165,6 +165,7 @@ static int ieee80211_open(struct net_device *dev)
	struct ieee80211_local *local = wdev_priv(dev->ieee80211_ptr);
	struct ieee80211_local *local = wdev_priv(dev->ieee80211_ptr);
	struct ieee80211_if_init_conf conf;
	struct ieee80211_if_init_conf conf;
	int res;
	int res;
	bool need_hw_reconfig = 0;


	sdata = IEEE80211_DEV_TO_SUB_IF(dev);
	sdata = IEEE80211_DEV_TO_SUB_IF(dev);


@@ -218,7 +219,7 @@ static int ieee80211_open(struct net_device *dev)
			res = local->ops->start(local_to_hw(local));
			res = local->ops->start(local_to_hw(local));
		if (res)
		if (res)
			return res;
			return res;
		ieee80211_hw_config(local);
		need_hw_reconfig = 1;
		ieee80211_led_radio(local, local->hw.conf.radio_enabled);
		ieee80211_led_radio(local, local->hw.conf.radio_enabled);
	}
	}


@@ -282,6 +283,8 @@ static int ieee80211_open(struct net_device *dev)
		atomic_inc(&local->iff_promiscs);
		atomic_inc(&local->iff_promiscs);


	local->open_count++;
	local->open_count++;
	if (need_hw_reconfig)
		ieee80211_hw_config(local);


	netif_start_queue(dev);
	netif_start_queue(dev);