Re: AC97 reset fail after suspend

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Friday 08 of May 2009 01:48:19 Tomas 'Sleep_Walker' Cech wrote:
> Hi,
>
> I've got following error on Palm LifeDrive and PalmTX after suspend &
> resume:
>
> pxa2xx_ac97_try_warm_reset: warm reset timeout (GSR=0x0)
> pxa2xx_ac97_read: read error (ac97_reg=0 GSR=0x0)
> pxa2xx_ac97_try_cold_reset: cold reset timeout (GSR=0x44)
> pxa2xx_ac97_read: read error (ac97_reg=0 GSR=0x44)
> WM9712 AC97 reset failed
> could not reset AC97 codec
>
> That completely disable whole AC97 communication, so touchscreen, sound and
> battery doesn't work any longer.
>
> I also tried this with Treo680 (code will be sent soon). HW is very
> similar, only codec is different - LD/T5/TX use WM9712, Treo680 use WM9713.
> On Treo680 there is no problem with that.
>
> Thanks for any hint about that.
>
> Tomas 'Sleep_Walker' Cech
>
> Attaching config for LD/TX and dmesg output.

The following patch fixes the issue and should be correct. It's indeed a 
regression that's not in wm9713, but is in wm9712. Please consider applying.
From 06dce145990fb342d66c8fc77704a3dff3c66313 Mon Sep 17 00:00:00 2001
From: Marek Vasut <marek.vasut@xxxxxxxxx>
Date: Thu, 14 May 2009 03:48:27 +0200
Subject: [PATCH] WM9712 coldreset on resume bugfix

The following patch fixes problem with wm9712 codec being unable to resume from
sleep because it doesn't respond after AC97 port was coldreseted (which is done
in case the warmreset wasn't successful). The solution uses similar approach as
wm9713, that is, do one more warmreset after coldreset.

Signed-off-by: Marek Vasut <marek.vasut@xxxxxxxxx>
---
 sound/soc/codecs/wm9712.c |    2 ++
 1 files changed, 2 insertions(+), 0 deletions(-)

diff --git a/sound/soc/codecs/wm9712.c b/sound/soc/codecs/wm9712.c
index 765cf1e..166ebac 100644
--- a/sound/soc/codecs/wm9712.c
+++ b/sound/soc/codecs/wm9712.c
@@ -585,6 +585,8 @@ static int wm9712_reset(struct snd_soc_codec *codec, int try_warm)
 	}
 
 	soc_ac97_ops.reset(codec->ac97);
+	if (soc_ac97_ops.warm_reset)
+		soc_ac97_ops.warm_reset(codec->ac97);
 	if (ac97_read(codec, 0) != wm9712_reg[0])
 		goto err;
 	return 0;
-- 
1.6.2.1

_______________________________________________
Alsa-devel mailing list
Alsa-devel@xxxxxxxxxxxxxxxx
http://mailman.alsa-project.org/mailman/listinfo/alsa-devel

[Index of Archives]     [ALSA User]     [Linux Audio Users]     [Kernel Archive]     [Asterisk PBX]     [Photo Sharing]     [Linux Sound]     [Video 4 Linux]     [Gimp]     [Yosemite News]

  Powered by Linux