Skip to content

Commit 67572c8

Browse files
plbossartvinodkoul
authored andcommitted
soundwire: intel_auxdevice: improve pm_prepare step
In the case where multiple peripherals are attached on the same link, it's possible that they are in different pm_runtime states. The device_for_each_child() loop to resume all devices before a system suspend would not work if one peripheral was active and others suspended. pm_runtime_resume() returns 1 in the former case, which is taken as a error. As a result, a pm_runtime suspended device might be skipped if the first device was active. This patch changes the behavior of the helper function to only return zero or a negative error. A Fixes tag is not provided since there are no existing configurations on Intel platforms with different types of devices on the same link. Amplifiers may be used on the same link, but they are used by the same dailink so their pm_runtime state is always matching. This assumption may not be true in the future, so we should improve the behavior and align with AMD. Reported-by: Mukunda,Vijendar <vijendar.mukunda@amd.com> Link: https://lore.kernel.org/lkml/4cbbff8a-c596-e9cc-a6cf-6f8b66607505@amd.com/ Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> Reviewed-by: Rander Wang <rander.wang@intel.com> Signed-off-by: Bard Liao <yung-chuan.liao@linux.intel.com> Link: https://lore.kernel.org/r/20230323025228.1537107-1-yung-chuan.liao@linux.intel.com Signed-off-by: Vinod Koul <vkoul@kernel.org>
1 parent e953796 commit 67572c8

1 file changed

Lines changed: 4 additions & 2 deletions

File tree

drivers/soundwire/intel_auxdevice.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -358,10 +358,12 @@ static int intel_resume_child_device(struct device *dev, void *data)
358358
}
359359

360360
ret = pm_request_resume(dev);
361-
if (ret < 0)
361+
if (ret < 0) {
362362
dev_err(dev, "%s: pm_request_resume failed: %d\n", __func__, ret);
363+
return ret;
364+
}
363365

364-
return ret;
366+
return 0;
365367
}
366368

367369
static int __maybe_unused intel_pm_prepare(struct device *dev)

0 commit comments

Comments
 (0)