[PATCH 1/3] ASoC: component: Propagate result of suspend and resume callbacks
Cezary Rojewski
cezary.rojewski at intel.com
Fri Nov 4 14:12:42 CET 2022
From: Amadeusz Sławiński <amadeuszx.slawinski at linux.intel.com>
Both component->driver->suspend and ->resume() do return an int value
but it isn't propagated to the core later on. Update
snd_soc_component_suspend() and snd_soc_component_resume() so that the
possible errors are not squelched.
Signed-off-by: Amadeusz Sławiński <amadeuszx.slawinski at linux.intel.com>
Signed-off-by: Cezary Rojewski <cezary.rojewski at intel.com>
---
include/sound/soc-component.h | 4 ++--
sound/soc/soc-component.c | 22 ++++++++++++++++------
2 files changed, 18 insertions(+), 8 deletions(-)
diff --git a/include/sound/soc-component.h b/include/sound/soc-component.h
index c26ffb033777..421f0fc4df3e 100644
--- a/include/sound/soc-component.h
+++ b/include/sound/soc-component.h
@@ -456,8 +456,8 @@ int snd_soc_component_open(struct snd_soc_component *component,
int snd_soc_component_close(struct snd_soc_component *component,
struct snd_pcm_substream *substream,
int rollback);
-void snd_soc_component_suspend(struct snd_soc_component *component);
-void snd_soc_component_resume(struct snd_soc_component *component);
+int snd_soc_component_suspend(struct snd_soc_component *component);
+int snd_soc_component_resume(struct snd_soc_component *component);
int snd_soc_component_is_suspended(struct snd_soc_component *component);
int snd_soc_component_probe(struct snd_soc_component *component);
void snd_soc_component_remove(struct snd_soc_component *component);
diff --git a/sound/soc/soc-component.c b/sound/soc/soc-component.c
index e12f8244242b..27b862ded846 100644
--- a/sound/soc/soc-component.c
+++ b/sound/soc/soc-component.c
@@ -318,18 +318,28 @@ int snd_soc_component_close(struct snd_soc_component *component,
return soc_component_ret(component, ret);
}
-void snd_soc_component_suspend(struct snd_soc_component *component)
+int snd_soc_component_suspend(struct snd_soc_component *component)
{
+ int ret = 0;
+
if (component->driver->suspend)
- component->driver->suspend(component);
- component->suspended = 1;
+ ret = component->driver->suspend(component);
+ if (!ret)
+ component->suspended = 1;
+
+ return soc_component_ret(component, ret);
}
-void snd_soc_component_resume(struct snd_soc_component *component)
+int snd_soc_component_resume(struct snd_soc_component *component)
{
+ int ret = 0;
+
if (component->driver->resume)
- component->driver->resume(component);
- component->suspended = 0;
+ ret = component->driver->resume(component);
+ if (!ret)
+ component->suspended = 0;
+
+ return soc_component_ret(component, ret);
}
int snd_soc_component_is_suspended(struct snd_soc_component *component)
--
2.25.1
More information about the Alsa-devel
mailing list