On Mon, Aug 12, 2024 at 10:39:47PM +0200, Hans de Goede wrote: > Platform glue code, which is not build into the kernel and thus cannot > use i2c_register_board_info() may want to use bus_register_notifier() > to listen for i2c-adapters to show up on which the platform code needs > to manually instantiate platform specific i2c_clients. > > This results in calling i2c_new_client_device() from the bus notifier > which happens near the device_add() call. > > If the i2c-core has not yet setup runtime-pm (specifically the > no-callbacks and ignore-children flags) for the device embedded > inside struct i2c_adapter and the driver for the i2c_client > calls pm_runtime_set_active() this will trigger the following > error inside __pm_runtime_set_status(): > > "runtime PM trying to activate child device %s but parent (%s) is not active\n" > > and the i2c_client's runtime-status will not be updated. > > Split the device_register() call for the adapter into device_initialize() > and device_add() and move the pm-runtime init calls inbetween these 2 calls > so that the runtime-status can be correctly set when a driver binds from > the bus-notifier. > > Note the moved pm-runtime init calls just override the initial value of > some flags in struct device set by device_initialize() and calling these > before device_add() is safe. > > Reviewed-by: Pali Rohár <pali@xxxxxxxxxx> > Reviewed-by: Andi Shyti <andi.shyti@xxxxxxxxxx> > Signed-off-by: Hans de Goede <hdegoede@xxxxxxxxxx> Acked-by: Wolfram Sang <wsa+renesas@xxxxxxxxxxxxxxxxxxxx>
Attachment:
signature.asc
Description: PGP signature