From 751ae55c0d87634d1db695775e8aee69feb1452a Mon Sep 17 00:00:00 2001 From: Felix Fietkau Date: Fri, 20 Feb 2026 13:24:52 +0000 Subject: [PATCH] wifi: mt76: improve fix for multi-radio on-channel scanning Compare channel frequency instead of pointer to fix 6G. Fix scanning main operation channel. Signed-off-by: Felix Fietkau --- scan.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/scan.c b/scan.c index 73920f38..9c76781c 100644 --- a/scan.c +++ b/scan.c @@ -104,7 +104,7 @@ void mt76_scan_work(struct work_struct *work) struct cfg80211_chan_def chandef = {}; struct mt76_phy *phy = dev->scan.phy; int duration = HZ / 9; /* ~110 ms */ - bool beacon_rx; + bool beacon_rx, offchannel = true; int i; if (!phy || !req) @@ -129,13 +129,20 @@ void mt76_scan_work(struct work_struct *work) dev->scan.chan = req->channels[dev->scan.chan_idx++]; cfg80211_chandef_create(&chandef, dev->scan.chan, NL80211_CHAN_HT20); - if (dev->scan.chan != phy->main_chandef.chan) - mt76_set_channel(phy, &chandef, true); + if (phy->main_chandef.chan && + phy->main_chandef.chan->center_freq == dev->scan.chan->center_freq) { + chandef = phy->main_chandef; + offchannel = false; + } + + mt76_set_channel(phy, &chandef, offchannel); if (!req->n_ssids) goto out; - if (chandef.chan->flags & (IEEE80211_CHAN_NO_IR | IEEE80211_CHAN_RADAR)) { + if ((chandef.chan->flags & (IEEE80211_CHAN_NO_IR | + IEEE80211_CHAN_RADAR)) && + offchannel) { dev->scan.beacon_received = false; dev->scan.beacon_wait = true; goto out;