@@ -904,8 +904,26 @@ static int zd_op_config(struct ieee80211_hw *hw, u32 changed)
{
struct zd_mac *mac = zd_hw_mac(hw);
struct ieee80211_conf *conf = &hw->conf;
+ int ret;
- return zd_chip_set_channel(&mac->chip, conf->channel->hw_value);
+ if (changed & IEEE80211_CONF_CHANGE_MONITOR) {
+ /*
+ * Warning : enabling this register kills RX & TX
+ * performance
+ */
+ u32 cr_sniffer = !!(conf->flags & IEEE80211_CONF_MONITOR);
+ ret = zd_iowrite32(&mac->chip, CR_SNIFFER_ON, cr_sniffer);
+ if (!ret)
+ return ret;
+ }
+
+ if (changed & IEEE80211_CONF_CHANGE_CHANNEL) {
+ ret = zd_chip_set_channel(&mac->chip, conf->channel->hw_value);
+ if (!ret)
+ return ret;
+ }
+
+ return 0;
}
static void zd_process_intr(struct work_struct *work)