|
@@ -1256,7 +1256,7 @@ static void soc_resume_deferred(struct work_struct *work)
|
|
|
int snd_soc_resume(struct device *dev)
|
|
|
{
|
|
|
struct snd_soc_card *card = dev_get_drvdata(dev);
|
|
|
- int i;
|
|
|
+ int i, ac97_control = 0;
|
|
|
|
|
|
/* AC97 devices might have other drivers hanging off them so
|
|
|
* need to resume immediately. Other drivers don't have that
|
|
@@ -1265,14 +1265,15 @@ int snd_soc_resume(struct device *dev)
|
|
|
*/
|
|
|
for (i = 0; i < card->num_rtd; i++) {
|
|
|
struct snd_soc_dai *cpu_dai = card->rtd[i].cpu_dai;
|
|
|
- if (cpu_dai->driver->ac97_control) {
|
|
|
- dev_dbg(dev, "Resuming AC97 immediately\n");
|
|
|
- soc_resume_deferred(&card->deferred_resume_work);
|
|
|
- } else {
|
|
|
- dev_dbg(dev, "Scheduling resume work\n");
|
|
|
- if (!schedule_work(&card->deferred_resume_work))
|
|
|
- dev_err(dev, "resume work item may be lost\n");
|
|
|
- }
|
|
|
+ ac97_control |= cpu_dai->driver->ac97_control;
|
|
|
+ }
|
|
|
+ if (ac97_control) {
|
|
|
+ dev_dbg(dev, "Resuming AC97 immediately\n");
|
|
|
+ soc_resume_deferred(&card->deferred_resume_work);
|
|
|
+ } else {
|
|
|
+ dev_dbg(dev, "Scheduling resume work\n");
|
|
|
+ if (!schedule_work(&card->deferred_resume_work))
|
|
|
+ dev_err(dev, "resume work item may be lost\n");
|
|
|
}
|
|
|
|
|
|
return 0;
|