@@ -1504,7 +1504,7 @@ static void intel_link_remove(struct auxiliary_device *auxdev)
struct sdw_bus *bus = &cdns->bus;
/*
- * Since pm_runtime is already disabled, we don't decrease
+ * Since pm_runtime will be disabled, we don't decrease
* the refcount when the clock_stop_quirk is
* SDW_INTEL_CLK_STOP_NOT_ALLOWED
*/
@@ -1513,6 +1513,8 @@ static void intel_link_remove(struct auxiliary_device *auxdev)
snd_soc_unregister_component(dev);
}
sdw_bus_master_delete(bus);
+
+ pm_runtime_disable(&auxdev->dev);
}
int intel_link_process_wakeen_event(struct auxiliary_device *auxdev)
@@ -115,7 +115,6 @@ static int sdw_intel_cleanup(struct sdw_intel_ctx *ctx)
ldev = ctx->ldev[i];
- pm_runtime_disable(&ldev->auxdev.dev);
if (!ldev->link_res.clock_stop_quirks)
pm_runtime_put_noidle(ldev->link_res.dev);
When the bus driver is removed the child drivers will be removed first. These may need to perform bus transactions to shut down, and the device driver core will runtime-resume the driver before calling its remove(). For this to work the pm_runtime of the bus driver must still be enabled. So do not disable pm_runtime until the bus driver has been unregistered. Though this could be done by powering-up the bus driver and then disabling its pm_runtime with the bus still powered-up, there's no need to bypass the standard device framework behaviour. Signed-off-by: Richard Fitzgerald <rf@opensource.cirrus.com> --- drivers/soundwire/intel.c | 4 +++- drivers/soundwire/intel_init.c | 1 - 2 files changed, 3 insertions(+), 2 deletions(-)