[ALSA] snd-aoa: fix onyx resume
authorJohannes Berg <johannes@sipsolutions.net>
Mon, 18 Dec 2006 12:20:06 +0000 (13:20 +0100)
committerJaroslav Kysela <perex@suse.cz>
Fri, 9 Feb 2007 08:02:33 +0000 (09:02 +0100)
When the machine resumes the onyx codec might be in a weird state. Hence,
simply fully reset it once (and keep the code to take it out of suspend in
case the suspend of the codec chip survives a reset).

Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Jaroslav Kysela <perex@suse.cz>
sound/aoa/codecs/snd-aoa-codec-onyx.c

index 0b7650788f1f846b5b0415682fcef6ca9d10fd21..b00fc4842c9327ecf0bf9a82bf5e24596b8b1937 100644 (file)
@@ -825,7 +825,16 @@ static int onyx_resume(struct codec_info_item *cii)
        int err = -ENXIO;
 
        mutex_lock(&onyx->mutex);
-       /* take codec out of suspend */
+
+       /* reset codec */
+       onyx->codec.gpio->methods->set_hw_reset(onyx->codec.gpio, 0);
+       msleep(1);
+       onyx->codec.gpio->methods->set_hw_reset(onyx->codec.gpio, 1);
+       msleep(1);
+       onyx->codec.gpio->methods->set_hw_reset(onyx->codec.gpio, 0);
+       msleep(1);
+
+       /* take codec out of suspend (if it still is after reset) */
        if (onyx_read_register(onyx, ONYX_REG_CONTROL, &v))
                goto out_unlock;
        onyx_write_register(onyx, ONYX_REG_CONTROL, v & ~(ONYX_ADPSV | ONYX_DAPSV));