On Friday 07 October 2011 14:34:02 Mark Brown wrote:
Ensure we only have one sync during the initial startup of the card by making snd_soc_dapm_sync() a noop on non-instantiated cards. This avoids any bounces due to things like jacks reporting their initial state on partially initialised cards. The callers that don't also get called at runtime should just be removed.
Signed-off-by: Mark Brown broonie@opensource.wolfsonmicro.com
sound/soc/soc-core.c | 1 + sound/soc/soc-dapm.c | 7 +++++++ 2 files changed, 8 insertions(+), 0 deletions(-)
diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c index 2a25076..b65e3d4 100644 --- a/sound/soc/soc-core.c +++ b/sound/soc/soc-core.c @@ -1498,6 +1498,7 @@ static void snd_soc_instantiate_card(struct snd_soc_card *card) #endif
card->instantiated = 1;
- snd_soc_dapm_sync(&card->dapm);
Without prior snd_soc_dapm_new_widgets() call we just moved the kernel crash here.
mutex_unlock(&card->mutex); return;
diff --git a/sound/soc/soc-dapm.c b/sound/soc/soc-dapm.c index 8711aab..e49c56d 100644 --- a/sound/soc/soc-dapm.c +++ b/sound/soc/soc-dapm.c @@ -1845,6 +1845,13 @@ static int snd_soc_dapm_set_pin(struct snd_soc_dapm_context *dapm, */ int snd_soc_dapm_sync(struct snd_soc_dapm_context *dapm) {
- /*
* Suppress early reports (eg, jacks syncing their state) to avoid
* silly DAPM runs during card startup.
*/
- if (!dapm->card || !dapm->card->instantiated)
return 0;
- return dapm_power_widgets(dapm, SND_SOC_DAPM_STREAM_NOP);
} EXPORT_SYMBOL_GPL(snd_soc_dapm_sync);
-- Péter