From b65cb25145684b1294c91f1b6ee7bb37ec46393b Mon Sep 17 00:00:00 2001 From: atisDu Date: Thu, 16 Jul 2026 17:30:12 +0300 Subject: [PATCH] media: ipu7: register the psys bus before adding devices ipu7_psys_bus is defined and assigned to psys->dev.bus, but is never passed to bus_register(). device_register() on a device whose bus was never registered depends on the kernel's tolerance for that condition; newer kernels reject it outright with -EINVAL: bus_add_device: cannot add device 'ipu7-psys0' to unregistered bus 'intel-ipu7-psys' intel-ipu7-psys ipu7-psys0: psys device_register failed intel_ipu7_psys.psys intel_ipu7.psys.40: probe with driver intel_ipu7_psys.psys failed with error -22 which breaks PSys probe entirely and /dev/ipu7-psys0 is never created. Reproduced on CachyOS kernel 7.1.3 (IPU7, ThinkPad X9-14/Lunar Lake); the same tree still probed successfully on kernel 7.0.11. Register ipu7_psys_bus in module init before registering the auxiliary driver, and unregister both in reverse order on exit. --- drivers/media/pci/intel/ipu7/psys/ipu-psys.c | 23 +++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/drivers/media/pci/intel/ipu7/psys/ipu-psys.c b/drivers/media/pci/intel/ipu7/psys/ipu-psys.c index d89e8b6..ac75f75 100644 --- a/drivers/media/pci/intel/ipu7/psys/ipu-psys.c +++ b/drivers/media/pci/intel/ipu7/psys/ipu-psys.c @@ -1541,7 +1541,28 @@ static struct auxiliary_driver ipu7_psys_driver = { }, }; -module_auxiliary_driver(ipu7_psys_driver); +static int __init ipu7_psys_init(void) +{ + int ret; + + ret = bus_register(&ipu7_psys_bus); + if (ret) + return ret; + + ret = auxiliary_driver_register(&ipu7_psys_driver); + if (ret) + bus_unregister(&ipu7_psys_bus); + + return ret; +} +module_init(ipu7_psys_init); + +static void __exit ipu7_psys_exit(void) +{ + auxiliary_driver_unregister(&ipu7_psys_driver); + bus_unregister(&ipu7_psys_bus); +} +module_exit(ipu7_psys_exit); MODULE_AUTHOR("Bingbu Cao "); MODULE_AUTHOR("Qingwu Zhang ");