Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 257514
b: refs/heads/master
c: 649a1a0
h: refs/heads/master
v: v3
  • Loading branch information
Mark Brown committed Jun 8, 2011
1 parent 6644cc1 commit 9eb4477
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 6 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: c7356da9e2ede4a89d000bde8a8a4408890943b9
refs/heads/master: 649a1a0ef28e5db99e838060f415a111566c63ea
37 changes: 32 additions & 5 deletions trunk/sound/soc/codecs/wm8962.c
Original file line number Diff line number Diff line change
Expand Up @@ -2186,6 +2186,8 @@ static int sysclk_event(struct snd_soc_dapm_widget *w,
struct snd_kcontrol *kcontrol, int event)
{
struct snd_soc_codec *codec = w->codec;
struct wm8962_priv *wm8962 = snd_soc_codec_get_drvdata(codec);
unsigned long timeout;
int src;
int fll;

Expand All @@ -2205,9 +2207,19 @@ static int sysclk_event(struct snd_soc_dapm_widget *w,

switch (event) {
case SND_SOC_DAPM_PRE_PMU:
if (fll)
if (fll) {
snd_soc_update_bits(codec, WM8962_FLL_CONTROL_1,
WM8962_FLL_ENA, WM8962_FLL_ENA);
if (wm8962->irq) {
timeout = msecs_to_jiffies(5);
timeout = wait_for_completion_timeout(&wm8962->fll_lock,
timeout);

if (timeout == 0)
dev_err(codec->dev,
"Timed out starting FLL\n");
}
}
break;

case SND_SOC_DAPM_POST_PMD:
Expand Down Expand Up @@ -3263,16 +3275,31 @@ static int wm8962_set_fll(struct snd_soc_codec *codec, int fll_id, int source,

dev_dbg(codec->dev, "FLL configured for %dHz->%dHz\n", Fref, Fout);

/* This should be a massive overestimate */
timeout = msecs_to_jiffies(1);
ret = 0;

if (fll1 & WM8962_FLL_ENA) {
/* This should be a massive overestimate but go even
* higher if we'll error out
*/
if (wm8962->irq)
timeout = msecs_to_jiffies(5);
else
timeout = msecs_to_jiffies(1);

timeout = wait_for_completion_timeout(&wm8962->fll_lock,
timeout);

wait_for_completion_timeout(&wm8962->fll_lock, timeout);
if (timeout == 0 && wm8962->irq) {
dev_err(codec->dev, "FLL lock timed out");
ret = -ETIMEDOUT;
}
}

wm8962->fll_fref = Fref;
wm8962->fll_fout = Fout;
wm8962->fll_src = source;

return 0;
return ret;
}

static int wm8962_mute(struct snd_soc_dai *dai, int mute)
Expand Down

0 comments on commit 9eb4477

Please sign in to comment.