ASoC: Intel: fix broadwell module removing failed issue
authorLiam Girdwood <liam.r.girdwood@linux.intel.com>
Thu, 28 May 2015 06:14:18 +0000 (14:14 +0800)
committerMark Brown <broonie@kernel.org>
Thu, 28 May 2015 19:27:00 +0000 (20:27 +0100)
In haswell-pcm module unloading, we can't free runtime modules
directly, for they may be already freed in runtime suspend.

Here add executing suspend call to unload runtime modules, only
for status not equal to RPM_SUSPEND, to fix broadwell module
removing failed issue.

Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com>
Signed-off-by: Jie Yang <yang.jie@intel.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/intel/haswell/sst-haswell-pcm.c

index 225c04c38e42352a015005074548693583dfe46b..1557e37abe19e5b998a20cad4eafa61f20d48ff2 100644 (file)
@@ -1103,8 +1103,10 @@ static int hsw_pcm_remove(struct snd_soc_platform *platform)
                snd_soc_platform_get_drvdata(platform);
        int i;
 
+       /* execute a suspend call to unload all FW resources */
+       if (!pm_runtime_status_suspended(platform->dev))
+               pm_runtime_put_sync_suspend(platform->dev);
        pm_runtime_disable(platform->dev);
-       hsw_pcm_free_modules(priv_data);
 
        for (i = 0; i < ARRAY_SIZE(hsw_dais); i++) {
                if (hsw_dais[i].playback.channels_min)