> @@ -1395,6 +1395,8 @@ int ieee80211_register_hw(struct ieee80211_hw *hw) > debugfs_hw_add(local); > rate_control_add_debugfs(local); > > + ieee80211_check_wbrf_support(local); > + > rtnl_lock(); > wiphy_lock(hw->wiphy); > > +void ieee80211_check_wbrf_support(struct ieee80211_local *local) > +{ > + struct wiphy *wiphy = local->hw.wiphy; > + struct device *dev; > + > + if (!wiphy) > + return; > + > + dev = wiphy->dev.parent; > + if (!dev) > + return; > + > + local->wbrf_supported = wbrf_supported_producer(dev); > + dev_dbg(dev, "WBRF is %s supported\n", > + local->wbrf_supported ? "" : "not"); > +} This seems wrong. wbrf_supported_producer() is about "Should this device report the frequencies it is using?" The answer to that depends on a combination of: Are there consumers registered with the core, and is the policy set so WBRF should take actions. The problem here is, you have no idea of the probe order. It could be this device probes before others, so wbrf_supported_producer() reports false, but a few second later would report true, once other devices have probed. It should be an inexpensive call into the core, so can be made every time the channel changes. All the core needs to do is check if the list of consumers is empty, and if not, check a Boolean policy value. Andrew