diff mbox series

soundwire: intel_auxdevice: improve pm_prepare step

Message ID 20230323025228.1537107-1-yung-chuan.liao@linux.intel.com (mailing list archive)
State New, archived
Headers show
Series soundwire: intel_auxdevice: improve pm_prepare step | expand

Commit Message

Bard Liao March 23, 2023, 2:52 a.m. UTC
From: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>

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>
---
 drivers/soundwire/intel_auxdevice.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

Comments

Vinod Koul April 12, 2023, 10:07 a.m. UTC | #1
On 23-03-23, 10:52, Bard Liao wrote:
> From: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
> 
> 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.

Applied, thanks
diff mbox series

Patch

diff --git a/drivers/soundwire/intel_auxdevice.c b/drivers/soundwire/intel_auxdevice.c
index 5021be0f4158..b21e86084f7b 100644
--- a/drivers/soundwire/intel_auxdevice.c
+++ b/drivers/soundwire/intel_auxdevice.c
@@ -358,10 +358,12 @@  static int intel_resume_child_device(struct device *dev, void *data)
 	}
 
 	ret = pm_request_resume(dev);
-	if (ret < 0)
+	if (ret < 0) {
 		dev_err(dev, "%s: pm_request_resume failed: %d\n", __func__, ret);
+		return ret;
+	}
 
-	return ret;
+	return 0;
 }
 
 static int __maybe_unused intel_pm_prepare(struct device *dev)