ALSA: hda - Enable sync_write and reset for Conexant codecs
authorTakashi Iwai <tiwai@suse.de>
Wed, 25 Jan 2012 10:54:19 +0000 (11:54 +0100)
committerTakashi Iwai <tiwai@suse.de>
Thu, 2 Feb 2012 09:19:33 +0000 (10:19 +0100)
This is an attempt to fix S3-resume problems reported for a few
laptops with different Conexant codecs.  They show the communication
stalls at some time in S3, and the driver falls back into the
single-cmd mode.  This leads to the silent output or the lack of
auto-mute feature.

As a workaround, here enables the sync_write and the bus-reset flags
to make the communication more stable.

Bugzilla: https://bugzilla.novell.com/show_bug.cgi?id=740115
Bugzilla: https://bugzilla.novell.com/show_bug.cgi?id=738397

Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/pci/hda/patch_conexant.c

index a7a5733aa4d20d2ea25edf104e4568b4e42cab3d..117ae4c22be06c1141519aec9149ffdd1bf8041d 100644 (file)
@@ -4414,6 +4414,18 @@ static int patch_conexant_auto(struct hda_codec *codec)
        codec->patch_ops = cx_auto_patch_ops;
        if (spec->beep_amp)
                snd_hda_attach_beep_device(codec, spec->beep_amp);
+
+       /* Some laptops with Conexant chips show stalls in S3 resume,
+        * which falls into the single-cmd mode.
+        * Better to make reset, then.
+        */
+       if (!codec->bus->sync_write) {
+               snd_printd("hda_codec: "
+                          "Enable sync_write for stable communication\n");
+               codec->bus->sync_write = 1;
+               codec->bus->allow_bus_reset = 1;
+       }
+
        return 0;
 }