linux/drivers
Marek Vasut dea99705bc usb: typec: mux: Fix typec_switch_match()
The fwnode_typec_switch_get() sporadically returns NULL instead of an
-EPROBE_DEFER for orientation-switch described in DT. This makes it
impossible to discern whether the DT does describe an orientation-switch
which did not probe yet, or whether the DT does not describe the switch.
This happens with gpio-sbu-mux connected to an I2C GPIO expander.

The class_find_device() on typec_switch_match() may return NULL in case
the mux did not probe just yet early on boot. The sw_devs[] array can be
empty on boot as well. If these two conditions occur, then the conditional
if (to_typec_switch_dev(dev) == sw_devs[i]) evaluates to true and the match
function returns NULL, which propagates to fwnode_typec_switch_get() which
makes it look as if the orientation-switch was not described in DT.

This is incorrect, because the mux driver will probe a bit later on, but
at that point, the caller of fwnode_typec_switch_get() already got the
NULL return value. The NULL return value also does not trigger IS_ERR(),
therefore the caller driver interprets this as if the orientation-switch
is not described in DT, and does not return -EPROBE_DEFER to try again,
even if it should.

Fix this by checking the class_find_device() return value, and return
-EPROBE_DEFER if it is NULL right away. If the return value is not NULL,
perform the deduplication test, and if that test passes, consider the
return value to be already non-NULL.

Fixes: a53b4f9c51 ("usb: typec: mux: avoid duplicated orientation switches")
Cc: stable <stable@kernel.org>
Signed-off-by: Marek Vasut <marex@nabladev.com>
Reviewed-by: Sebastian Reichel <sebastian.reichel@collabora.com>
Tested-by: Jens Glathe <jens.glathe@oldschoolsolutions.biz>
Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
Link: https://patch.msgid.link/20260817182302.146546-1-marex@nabladev.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2026-09-01 16:31:23 +02:00
..
accel drm for 7.3-rc1 2026-08-21 08:41:00 -07:00
accessibility
acpi Revert "ACPI: scan: Defer device power initialization" 2026-08-27 16:03:20 +02:00
amba
android Char/Misc/IIO/etc driver update for 7.3-rc1 2026-08-25 09:38:50 -07:00
ata pci-v7.3-changes 2026-08-23 12:44:10 -07:00
atm
auxdisplay auxdisplay for v7.3-1 2026-08-24 08:15:59 -07:00
base mm.git review status for linus..mm-stable 2026-08-27 09:17:06 -07:00
bcma
block mm.git review status for linus..mm-stable 2026-08-27 09:17:06 -07:00
bluetooth Including fixes from Bluetooth, IPSec and Netfilter. 2026-08-27 13:53:43 -07:00
bus Char/Misc/IIO/etc driver update for 7.3-rc1 2026-08-25 09:38:50 -07:00
cache
cdrom
cdx
char ipmi: Fix some minor issues, add async init 2026-08-28 16:32:12 -07:00
clk MFD for v7.3 2026-08-27 10:45:08 -07:00
clocksource hyperv-next for v7.3-rc1 2026-08-26 16:47:40 -07:00
comedi
connector
counter Char/Misc/IIO/etc driver update for 7.3-rc1 2026-08-25 09:38:50 -07:00
cpufreq More power management updates for 7.3-rc1 2026-08-26 14:13:26 -07:00
cpuidle MFD for v7.3 2026-08-27 10:45:08 -07:00
crypto dmaengine updates for v7.3 2026-08-24 12:21:15 -07:00
cxl
dax mm.git review status for mm-hotfixes-stable..mm-stable 2026-08-20 18:17:08 -07:00
dca
devfreq
dibs net/dibs: Correct freeing of dmb_clientid_arr 2026-08-12 17:08:05 -07:00
dio
dma dmaengine updates for v7.3 2026-08-24 12:21:15 -07:00
dma-buf Linux 7.2 2026-08-20 10:58:44 +10:00
dpll Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net 2026-08-18 10:42:41 -07:00
edac x86/msr updates for v7.3: 2026-08-18 14:02:15 -07:00
eisa
extcon
firewire firewire updates for v7.3 2026-08-22 08:41:28 -07:00
firmware remoteproc updates for v7.3 2026-08-25 14:03:31 -07:00
fpga Char/Misc/IIO/etc driver update for 7.3-rc1 2026-08-25 09:38:50 -07:00
fsi
fwctl rust: introduce abstractions for fwctl 2026-08-14 19:21:17 -03:00
gnss
gpib Char/Misc/IIO/etc driver update for 7.3-rc1 2026-08-25 09:38:50 -07:00
gpio gpio updates for v7.3-rc1 2026-08-19 09:10:07 -07:00
gpu drm next/fixes for 7.3-rc1 2026-08-28 16:37:55 -07:00
greybus
hid platform-drivers-x86 for v7.3-1 2026-08-24 10:16:35 -07:00
hsi HSI changes for the 7.3 series 2026-08-21 12:01:23 -07:00
hte
hv hyperv-next for v7.3-rc1 2026-08-26 16:47:40 -07:00
hwmon Char/Misc/IIO/etc driver update for 7.3-rc1 2026-08-25 09:38:50 -07:00
hwspinlock
hwtracing Char/Misc/IIO/etc driver update for 7.3-rc1 2026-08-25 09:38:50 -07:00
i2c i2c-fixes for v7.3-rc1 2026-08-30 10:53:24 -07:00
i3c i3c: dw: reduce do_daa time if there's no client 2026-08-19 09:28:33 +02:00
idle
iio More thermal control updates for 7.3-rc1 2026-08-26 14:21:30 -07:00
infiniband Including fixes from Bluetooth, IPSec and Netfilter. 2026-08-27 13:53:43 -07:00
input Char/Misc/IIO/etc driver update for 7.3-rc1 2026-08-25 09:38:50 -07:00
interconnect This pull request contains the following interconnect updates for 2026-08-19 09:55:37 +02:00
iommu dma-mapping updates for Linux 7.3: 2026-08-24 11:35:46 -07:00
ipack Char/Misc/IIO/etc driver update for 7.3-rc1 2026-08-25 09:38:50 -07:00
irqchip pci-v7.3-changes 2026-08-23 12:44:10 -07:00
leds LEDs for v7.3 2026-08-27 11:05:51 -07:00
macintosh
mailbox mailbox: add Axiado AX3005 mailbox driver 2026-08-23 15:41:13 -05:00
mcb
md for-7.3/block-20260819 2026-08-20 13:55:16 -07:00
media USB / Thunderbolt changes for 7.3-rc1 2026-08-25 10:44:46 -07:00
memory * Raw NAND changes 2026-08-23 09:11:21 -07:00
memstick
message
mfd MFD for v7.3 2026-08-27 10:45:08 -07:00
misc Char/Misc/IIO/etc driver update for 7.3-rc1 2026-08-25 09:38:50 -07:00
mmc MMC core: 2026-08-21 11:58:08 -07:00
most
mtd This pull request contains updates for UBI and UBIFS: 2026-08-28 10:59:07 -07:00
mux
net Including fixes from Bluetooth, IPSec and Netfilter. 2026-08-27 13:53:43 -07:00
nfc Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net 2026-08-18 10:42:41 -07:00
ntb NTB: ntb_transport: Reject oversized TX buffers 2026-08-20 13:43:24 -07:00
nubus
nvdimm vhost,vdpa,virtio: fixes, features 2026-08-20 17:07:50 -07:00
nvme dmaengine updates for v7.3 2026-08-24 12:21:15 -07:00
nvmem Char/Misc/IIO/etc driver update for 7.3-rc1 2026-08-25 09:38:50 -07:00
of Devicetree fixes for v7.3, part 1: 2026-08-27 12:53:43 -07:00
opp
parisc parisc: eisa: Fix infinite loop when parsing invalid IRQ value 2026-08-18 11:43:05 +02:00
parport
pci hyperv-next for v7.3-rc1 2026-08-26 16:47:40 -07:00
pcmcia
peci
perf RISC-V updates for v7.3 2026-08-20 14:53:54 -07:00
phy Mostly the usual clk driver updates and new SoC additions plus non-critical 2026-08-26 11:14:30 -07:00
pinctrl Pin control bulk changes for kernel v7.3 2026-08-24 08:46:03 -07:00
platform MFD for v7.3 2026-08-27 10:45:08 -07:00
pmdomain Mostly the usual clk driver updates and new SoC additions plus non-critical 2026-08-26 11:14:30 -07:00
pnp
power power sequencing updates for v7.3-rc1 2026-08-26 08:45:09 -07:00
powercap More power management updates for 7.3-rc1 2026-08-26 14:13:26 -07:00
pps
ps3
ptp ptp: netc: fix period truncation and potential divide-by-zero in PEROUT 2026-08-22 12:34:39 -07:00
pwm Driver core changes for 7.3-rc1 2026-08-19 10:42:18 -07:00
rapidio
ras
regulator regulator: Fix for v7.3 2026-08-27 12:21:56 -07:00
remoteproc
resctrl arm64 updates for 7.3 2026-08-18 11:57:17 -07:00
reset Mostly the usual clk driver updates and new SoC additions plus non-critical 2026-08-26 11:14:30 -07:00
rpmsg
rtc RTC for 7.3 2026-08-28 09:53:43 -07:00
s390 Arm: 2026-08-25 11:48:04 -07:00
sbus
scsi SCSI updates for 7.3 2026-08-29 11:55:36 -07:00
sh
siox
slimbus
soc remoteproc updates for v7.3 2026-08-25 14:03:31 -07:00
soundwire soundwire updates for 7.3 2026-08-24 12:16:16 -07:00
spi spi: Fixes for v7.3 2026-08-27 12:38:05 -07:00
spmi
ssb
staging Staging driver updates for 7.3-rc1 2026-08-25 10:16:19 -07:00
target USB / Thunderbolt changes for 7.3-rc1 2026-08-25 10:44:46 -07:00
tc
tee soc: drivers for 7.3 2026-08-18 19:40:29 -07:00
thermal MFD for v7.3 2026-08-27 10:45:08 -07:00
thunderbolt thunderbolt: Changes for v7.3 merge window 2026-08-19 10:01:59 +02:00
tty TTY / Serial driver updates for 7.3-rc1 2026-08-25 10:59:12 -07:00
ufs SCSI updates for 7.3 2026-08-29 11:55:36 -07:00
uio
usb usb: typec: mux: Fix typec_switch_match() 2026-09-01 16:31:23 +02:00
vdpa vduse: Add suspend 2026-08-19 06:38:48 -04:00
vfio mm.git review status for mm-hotfixes-stable..mm-stable 2026-08-20 18:17:08 -07:00
vhost vhost,vdpa,virtio: fixes, features 2026-08-20 17:07:50 -07:00
video Backlight for v7.3 2026-08-27 11:16:39 -07:00
virt arm64 updates for 7.3 2026-08-18 11:57:17 -07:00
virtio virtio_ring: fix infinite loop in virtnet_poll_cleantx when device is broken 2026-08-19 06:38:47 -04:00
w1
watchdog MFD for v7.3 2026-08-27 10:45:08 -07:00
xen dma-mapping updates for Linux 7.3: 2026-08-24 11:35:46 -07:00
zorro
Kconfig
Makefile