linux/drivers/i2c
Geert Uytterhoeven 9e5f81f9a6 i2c: dev: Fix bus callback return values
The i2cdev_{at,de}tach_adapter() callbacks are used for two purposes:
  1. As notifier callbacks, when (un)registering I2C adapters created or
     destroyed after i2c_dev_init(),
  2. As bus iterator callbacks, for registering already existing
     adapters from i2c_dev_init(), and for cleanup.

Unfortunately both use cases expect different return values: the former
expects NOTIFY_* return codes, while the latter expects zero or error
codes, and aborts in case of error.

Hence in case 2, as soon as i2cdev_{at,de}tach_adapter() returns
(non-zero) NOTIFY_OK, the bus iterator aborts.  This causes (a) only the
first already existing adapter to be registered, leading to missing
/dev/i2c-* entries, and (b) a failure to unregister all but the first
I2C adapter during cleanup.

Fix this by introducing separate callbacks for the bus iterator,
wrapping the notifier functions, and always returning succes.
Any errors inside these callback functions are unlikely to happen, and
are fatal anyway.

Fixes: cddf70d0bc ("i2c: dev: fix notifier return values")
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Reviewed-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
Signed-off-by: Wolfram Sang <wsa@kernel.org>
2023-03-09 22:07:52 +01:00
..
algos i2c: algo: bit: allow getsda to be NULL 2023-01-23 23:15:49 +01:00
busses i2c: gxp: fix an error code in probe 2023-03-03 21:00:54 +01:00
muxes i2c: mux: Convert all drivers to new .probe() callback 2023-03-09 21:59:18 +01:00
i2c-boardinfo.c i2c: Remove support for dangling device properties 2021-04-10 21:43:02 +02:00
i2c-core-acpi.c i2c: add fwnode APIs 2023-01-17 09:29:59 +01:00
i2c-core-base.c i2c: Convert drivers to new .probe() callback 2023-03-09 21:59:30 +01:00
i2c-core-of.c i2c: add fwnode APIs 2023-01-17 09:29:59 +01:00
i2c-core-slave.c i2c: add tracepoints for I2C slave events 2022-03-20 00:11:05 +01:00
i2c-core-smbus.c i2c: smbus: Check for parent device before dereference 2022-02-19 12:37:20 +01:00
i2c-core.h i2c: acpi: Use ACPI wake capability bit to set wake_irq 2022-10-04 15:41:12 +02:00
i2c-dev.c i2c: dev: Fix bus callback return values 2023-03-09 22:07:52 +01:00
i2c-mux.c i2c: mux: harden i2c_mux_alloc() against integer overflows 2022-09-21 22:12:06 +02:00
i2c-slave-eeprom.c i2c: Convert drivers to new .probe() callback 2023-03-09 21:59:30 +01:00
i2c-slave-testunit.c i2c: Convert drivers to new .probe() callback 2023-03-09 21:59:30 +01:00
i2c-smbus.c i2c: Convert drivers to new .probe() callback 2023-03-09 21:59:30 +01:00
i2c-stub.c i2c: stub: remove definition of DEBUG 2021-01-17 13:00:10 +01:00
Kconfig i2c: add slave testunit driver 2020-09-21 11:02:17 +02:00
Makefile i2c: add slave testunit driver 2020-09-21 11:02:17 +02:00