|
@@ -1176,22 +1176,11 @@ static void iwl4965_connection_init_rx_config(struct iwl_priv *priv)
|
|
|
|
|
|
static int iwl4965_set_mode(struct iwl_priv *priv, int mode)
|
|
|
{
|
|
|
- if (mode == IEEE80211_IF_TYPE_IBSS) {
|
|
|
- const struct iwl_channel_info *ch_info;
|
|
|
-
|
|
|
- ch_info = iwl_get_channel_info(priv,
|
|
|
- priv->band,
|
|
|
- le16_to_cpu(priv->staging_rxon.channel));
|
|
|
-
|
|
|
- if (!ch_info || !is_channel_ibss(ch_info)) {
|
|
|
- IWL_ERROR("channel %d not IBSS channel\n",
|
|
|
- le16_to_cpu(priv->staging_rxon.channel));
|
|
|
- return -EINVAL;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
priv->iw_mode = mode;
|
|
|
|
|
|
+ /* init channel/phymode to values given at driver init */
|
|
|
+ iwl_set_rxon_channel(priv, IEEE80211_BAND_2GHZ, 6);
|
|
|
+
|
|
|
iwl4965_connection_init_rx_config(priv);
|
|
|
memcpy(priv->staging_rxon.node_addr, priv->mac_addr, ETH_ALEN);
|
|
|
|
|
@@ -3892,6 +3881,14 @@ static int iwl4965_mac_config(struct ieee80211_hw *hw, struct ieee80211_conf *co
|
|
|
goto out;
|
|
|
}
|
|
|
|
|
|
+ if (priv->iw_mode == IEEE80211_IF_TYPE_IBSS &&
|
|
|
+ !is_channel_ibss(ch_info)) {
|
|
|
+ IWL_ERROR("channel %d in band %d not IBSS channel\n",
|
|
|
+ conf->channel->hw_value, conf->channel->band);
|
|
|
+ ret = -EINVAL;
|
|
|
+ goto out;
|
|
|
+ }
|
|
|
+
|
|
|
spin_lock_irqsave(&priv->lock, flags);
|
|
|
|
|
|
/* if we are switching from ht to 2.4 clear flags
|