From 77e3a0065697314cc7437a6eefd7e0d36ab06a4b Mon Sep 17 00:00:00 2001 From: Thadeu Tucci Date: Thu, 9 Jul 2026 12:02:24 -0300 Subject: [PATCH] media: intel/ipu7: psys: register bus before adding the psys device The psys driver defines a custom "intel-ipu7-psys" bus_type, assigns it to the psys device (psys->dev.bus = &ipu7_psys_bus) and then calls device_register(), but it never calls bus_register() for that bus. Older kernels tolerated registering a device on an unregistered bus, but since Linux 7.1 bus_add_device() rejects it, so probe fails: 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 As a result /dev/ipu7-psys0 is never created and the userspace camera HAL cannot open the psys device, breaking the camera on IPU7 platforms (e.g. Panther Lake with ov08x40) for every capture application. Register the bus in module init before registering the auxiliary driver, and unregister it on exit, by replacing module_auxiliary_driver() with explicit module_init()/module_exit() hooks. Link: https://github.com/intel/ipu7-drivers/issues/52 Link: https://github.com/intel/ipu7-drivers/issues/63 Link: https://github.com/intel/ipu7-drivers/issues/79 Signed-off-by: Thadeu Tucci --- 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 ");