diff --git a/package/gluon-core/luasrc/usr/lib/lua/gluon/wireless.lua b/package/gluon-core/luasrc/usr/lib/lua/gluon/wireless.lua
index 4f2cf0882165992cb270ebcc1c40d7786729c98e..0eb68023eb96f8679f63cb979695bd5d976fcd82 100644
--- a/package/gluon-core/luasrc/usr/lib/lua/gluon/wireless.lua
+++ b/package/gluon-core/luasrc/usr/lib/lua/gluon/wireless.lua
@@ -2,16 +2,42 @@ local sysconfig = require 'gluon.sysconfig'
 local site = require 'gluon.site'
 local util = require 'gluon.util'
 
+local unistd = require 'posix.unistd'
+local dirent = require 'posix.dirent'
+
 
 local M = {}
 
 local function find_phy_by_path(path)
-	local phy = util.glob('/sys/devices/' .. path .. '/ieee80211/phy*')[1]
-		or util.glob('/sys/devices/platform/' .. path .. '/ieee80211/phy*')[1]
+	local device_path, phy_offset = string.match(path, "^(.+)%+(%d+)$")
+
+	-- Special handling required for multi-phy devices
+	if device_path == nil then
+		device_path = path
+		phy_offset = '0'
+	end
 
-	if phy then
-		return phy:match('([^/]+)$')
+	-- Find the device path. Either it's located at /sys/devices or /sys/devices/platform
+	local path_prefix = ''
+	if not unistd.access('/sys/devices/' .. device_path .. '/ieee80211') then
+		path_prefix = 'platform/'
 	end
+
+	-- Get all available PHYs of the device and dertermine the one with the lowest index
+	local phy_names = dirent.dir('/sys/devices/' .. path_prefix .. device_path .. '/ieee80211')
+	local device_phy_idxs = {}
+	for _, v in ipairs(phy_names) do
+		local phy_idx = v:match('^phy(%d+)$')
+
+		if phy_idx ~= nil then
+			table.insert(device_phy_idxs, tonumber(phy_idx))
+		end
+	end
+
+	table.sort(device_phy_idxs)
+
+	-- Index starts at 1
+	return 'phy' .. device_phy_idxs[tonumber(phy_offset) + 1]
 end
 
 local function find_phy_by_macaddr(macaddr)