Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 305529
b: refs/heads/master
c: d9b0951
h: refs/heads/master
i:
  305527: b47b120
v: v3
  • Loading branch information
Liam Girdwood authored and Mark Brown committed Apr 1, 2012
1 parent 909b0a5 commit 0525e7c
Show file tree
Hide file tree
Showing 5 changed files with 60 additions and 42 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: be09ad90e17b79fdb0d513a31e814ff4d42e3dff
refs/heads/master: d9b0951b96e4ee0d22fae0a30f0b53354ca541cd
4 changes: 2 additions & 2 deletions trunk/include/sound/soc-dapm.h
Original file line number Diff line number Diff line change
Expand Up @@ -369,8 +369,8 @@ int snd_soc_dapm_weak_routes(struct snd_soc_dapm_context *dapm,
const struct snd_soc_dapm_route *route, int num);

/* dapm events */
int snd_soc_dapm_stream_event(struct snd_soc_pcm_runtime *rtd, int stream,
struct snd_soc_dai *dai, int event);
void snd_soc_dapm_stream_event(struct snd_soc_pcm_runtime *rtd, int stream,
int event);
void snd_soc_dapm_shutdown(struct snd_soc_card *card);

/* external DAPM widget events */
Expand Down
8 changes: 2 additions & 6 deletions trunk/sound/soc/soc-core.c
Original file line number Diff line number Diff line change
Expand Up @@ -573,19 +573,16 @@ int snd_soc_suspend(struct device *dev)
}

for (i = 0; i < card->num_rtd; i++) {
struct snd_soc_dai *codec_dai = card->rtd[i].codec_dai;

if (card->rtd[i].dai_link->ignore_suspend)
continue;

snd_soc_dapm_stream_event(&card->rtd[i],
SNDRV_PCM_STREAM_PLAYBACK,
codec_dai,
SND_SOC_DAPM_STREAM_SUSPEND);

snd_soc_dapm_stream_event(&card->rtd[i],
SNDRV_PCM_STREAM_CAPTURE,
codec_dai,
SND_SOC_DAPM_STREAM_SUSPEND);
}

Expand Down Expand Up @@ -689,17 +686,16 @@ static void soc_resume_deferred(struct work_struct *work)
}

for (i = 0; i < card->num_rtd; i++) {
struct snd_soc_dai *codec_dai = card->rtd[i].codec_dai;

if (card->rtd[i].dai_link->ignore_suspend)
continue;

snd_soc_dapm_stream_event(&card->rtd[i],
SNDRV_PCM_STREAM_PLAYBACK, codec_dai,
SNDRV_PCM_STREAM_PLAYBACK,
SND_SOC_DAPM_STREAM_RESUME);

snd_soc_dapm_stream_event(&card->rtd[i],
SNDRV_PCM_STREAM_CAPTURE, codec_dai,
SNDRV_PCM_STREAM_CAPTURE,
SND_SOC_DAPM_STREAM_RESUME);
}

Expand Down
79 changes: 51 additions & 28 deletions trunk/sound/soc/soc-dapm.c
Original file line number Diff line number Diff line change
Expand Up @@ -2987,37 +2987,61 @@ int snd_soc_dapm_link_dai_widgets(struct snd_soc_card *card)
return 0;
}

static void soc_dapm_stream_event(struct snd_soc_dapm_context *dapm,
int stream, struct snd_soc_dai *dai,
int event)
static void soc_dapm_stream_event(struct snd_soc_pcm_runtime *rtd, int stream,
int event)
{
struct snd_soc_dapm_widget *w;

if (stream == SNDRV_PCM_STREAM_PLAYBACK)
w = dai->playback_widget;
else
w = dai->capture_widget;
struct snd_soc_dapm_widget *w_cpu, *w_codec;
struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
struct snd_soc_dai *codec_dai = rtd->codec_dai;

if (!w)
return;
if (stream == SNDRV_PCM_STREAM_PLAYBACK) {
w_cpu = cpu_dai->playback_widget;
w_codec = codec_dai->playback_widget;
} else {
w_cpu = cpu_dai->capture_widget;
w_codec = codec_dai->capture_widget;
}

dapm_mark_dirty(w, "stream event");
if (w_cpu) {

switch (event) {
case SND_SOC_DAPM_STREAM_START:
w->active = 1;
break;
case SND_SOC_DAPM_STREAM_STOP:
w->active = 0;
break;
case SND_SOC_DAPM_STREAM_SUSPEND:
case SND_SOC_DAPM_STREAM_RESUME:
case SND_SOC_DAPM_STREAM_PAUSE_PUSH:
case SND_SOC_DAPM_STREAM_PAUSE_RELEASE:
break;
dapm_mark_dirty(w_cpu, "stream event");

switch (event) {
case SND_SOC_DAPM_STREAM_START:
w_cpu->active = 1;
break;
case SND_SOC_DAPM_STREAM_STOP:
w_cpu->active = 0;
break;
case SND_SOC_DAPM_STREAM_SUSPEND:
case SND_SOC_DAPM_STREAM_RESUME:
case SND_SOC_DAPM_STREAM_PAUSE_PUSH:
case SND_SOC_DAPM_STREAM_PAUSE_RELEASE:
break;
}
}

if (w_codec) {

dapm_mark_dirty(w_codec, "stream event");

switch (event) {
case SND_SOC_DAPM_STREAM_START:
w_codec->active = 1;
break;
case SND_SOC_DAPM_STREAM_STOP:
w_codec->active = 0;
break;
case SND_SOC_DAPM_STREAM_SUSPEND:
case SND_SOC_DAPM_STREAM_RESUME:
case SND_SOC_DAPM_STREAM_PAUSE_PUSH:
case SND_SOC_DAPM_STREAM_PAUSE_RELEASE:
break;
}
}

dapm_power_widgets(dapm, event);
dapm_power_widgets(&rtd->card->dapm, event);
}

/**
Expand All @@ -3031,15 +3055,14 @@ static void soc_dapm_stream_event(struct snd_soc_dapm_context *dapm,
*
* Returns 0 for success else error.
*/
int snd_soc_dapm_stream_event(struct snd_soc_pcm_runtime *rtd, int stream,
struct snd_soc_dai *dai, int event)
void snd_soc_dapm_stream_event(struct snd_soc_pcm_runtime *rtd, int stream,
int event)
{
struct snd_soc_card *card = rtd->card;

mutex_lock_nested(&card->dapm_mutex, SND_SOC_DAPM_CLASS_PCM);
soc_dapm_stream_event(&card->dapm, stream, dai, event);
soc_dapm_stream_event(rtd, stream, event);
mutex_unlock(&card->dapm_mutex);
return 0;
}

/**
Expand Down
9 changes: 4 additions & 5 deletions trunk/sound/soc/soc-pcm.c
Original file line number Diff line number Diff line change
Expand Up @@ -308,7 +308,7 @@ static void close_delayed_work(struct work_struct *work)
if (codec_dai->pop_wait == 1) {
codec_dai->pop_wait = 0;
snd_soc_dapm_stream_event(rtd, SNDRV_PCM_STREAM_PLAYBACK,
codec_dai, SND_SOC_DAPM_STREAM_STOP);
SND_SOC_DAPM_STREAM_STOP);
}

mutex_unlock(&rtd->pcm_mutex);
Expand Down Expand Up @@ -373,7 +373,6 @@ static int soc_pcm_close(struct snd_pcm_substream *substream)
/* powered down playback stream now */
snd_soc_dapm_stream_event(rtd,
SNDRV_PCM_STREAM_PLAYBACK,
codec_dai,
SND_SOC_DAPM_STREAM_STOP);
} else {
/* start delayed pop wq here for playback streams */
Expand All @@ -384,7 +383,7 @@ static int soc_pcm_close(struct snd_pcm_substream *substream)
} else {
/* capture streams can be powered down now */
snd_soc_dapm_stream_event(rtd, SNDRV_PCM_STREAM_CAPTURE,
codec_dai, SND_SOC_DAPM_STREAM_STOP);
SND_SOC_DAPM_STREAM_STOP);
}

mutex_unlock(&rtd->pcm_mutex);
Expand Down Expand Up @@ -453,8 +452,8 @@ static int soc_pcm_prepare(struct snd_pcm_substream *substream)
cancel_delayed_work(&rtd->delayed_work);
}

snd_soc_dapm_stream_event(rtd, substream->stream, codec_dai,
SND_SOC_DAPM_STREAM_START);
snd_soc_dapm_stream_event(rtd, substream->stream,
SND_SOC_DAPM_STREAM_START);

snd_soc_dai_digital_mute(codec_dai, 0);

Expand Down

0 comments on commit 0525e7c

Please sign in to comment.