Headphones work with Kernel 3.8 but not kernel 3.9 -- Speakers OK in both

The title sort of says it all. Very odd.

When I upgraded the kernel to 3.9, for some reason I get no sound through the headphones, but the speaker works fine. I went through the typical troubleshooting steps, e.g. editing /etc/modprobe.d/50-sound.conf, with no luck. So I tried the earlier kernel and much to my surprise, it worked!

I did an lsmod on both kernels and they both have the same modules loaded, though as expected the 3.9 modules are of different sizes.

I suspect there is an issue with the drivers, but I really don’t know how to procede at this time. My sound card/mixer settings are OK because everything works with kernel 3.8; the ONLY difference is the kernel and some of the modules.

I have the ICH9 chipset.

Any ideas?

I have ICH9 on a ThinkPad notebook, which adds another module thinkpad_acpi that can affect sound, but no Tumbleweed added to 12.3 yet.

Sounds like a kernel regression. You can hold back and await the next one. There’s no tumbleweed rule that says you must be on the latest kernel. :slight_smile:

If you want to, file a bug report. I think Tumbleweed is considered part of Factory for that, and definitely for mailing list.

Did you run the alsa information script and get a report? That would certainly help with bug reporting as it collects all the required info.

I just ran it:


3.9 Kernel

http://www.alsa-project.org/db/?f=7ce3c0a19dde078619a3c16bb8fce1f861226679

3.8 Kernel

http://www.alsa-project.org/db/?f=1b5e4d7aaf024caed25c47f6f9c7645608ad5106

I see some differences, but I don’t know what to make of them, as I am not that familiar with the details of sound in Linux. It usually “just works.” :slight_smile:

How do I report a bug to Tumbleweed? I agree it looks like a driver issue.

Go here to learn about out that generally: openSUSE:Submitting bug report

@Thiudans

fwiw

after updating to 3.9 the sound was restored by

  1. deleting all pulseaudio packages, rebooting
  2. restarting alsa and verify working
  3. re-install of all pulseaudio packages
  4. restarting pulseaudio

all was then ok

why ? no idea

hth

Anything else tried first, such as disabling/reenabling P/A?

Thanks, will try this after work today.

Is there a reason PulseAudio would cause only the hedphones not to work? I thought openSUSE used ALSA, but as I said I am not too familiar with sound in Linux.

When I try to delete all pulse audio packages, I get a lot of scary looking dependency warnings, e.g. kwin. Will zypper with the “-f” switch work for all the packages? E.g.

zypper in -f package1 package2 etc....

openSUSE enables P/A as the default sound server. The desktop Mixers (controlling volume) use P/A which interfaces to the audio hardware through ALSA drivers. If that interface is broken by the kernel upgrade. the desktop environment and it’s applications would lose sound. If you remove P/A from the audio stack, the desktop Mixers can use ALSA directly. You can disable/re-enable P/A using YaST.

Could that broken interface only break the headphones? Who knows? Which ALSA modules were affected by the break? Different hardware or a different DE > different results. Too many unknowns. In any case it’s a bug!

That’s brave, considering you asked a pretty basic question about P/A. :slight_smile:

If you are desparate, why not try the disable/re-enable via YaST, it’s probably safer, but remember a partial break can easily get worse. Some users have had to re-install after trying to remove P/A completely, even with the standard release.

When I look at the two diagnostic scripts you point to, it makes me think this is NOT a pulse audio problem. I think removing pulse audio in your case is ‘barking up the wrong tree’ and in this case, given the evidence you provided, is not what you should be doing.

IMHO rather than remove pulse you are better off raising a bug report, likely upstream, on the 3.9.0.6 kernel. You could also try posting on the alsa mailing list, or on an openSUSE.mailing list, to try and obtain the attention of an alsa developer.

I will open a bug report, and avoid my doom-script above. :slight_smile:

BUG Report

818828

to restore the sound to the front audio jack
the following packages were deleted then re-installed after rebooting
alsa-plugins-pulse
audacious-plugins-output-pulse
pulseaudio-module-x11
pulseaudio-utils
pulseaudio
libwebrtc_audio_processing0

items that were not touched due to dependencies
libpulse0-3.0-1.6.1
libpulse0-32bit-3.0-1.6.1
libpulse-mainloop-glib0-3.0-1.6.1

yast was used for the package changes

pulseaudio is sensitive to os updates,
the above procedure has been repeated before

sorry for any misunderstanding

cheers

Thanks. I did this, but it had no effect. :frowning:

looks as though, as oldcpu said, the right way to go was to list it as a bug

its hoped a solution is found soon

From opensuse-kernel:

> 
> 
> On Tuesday, May 14, 2013 03:15:26 PM Basil Chupin wrote:
>  
> > Have you tried disabling pulseaudio? And then checking with alsamixer 
>  > the settings for the channels after using F6 to set your audio card?
>  > 
>  > If you must have pulseaudio, do you have pavucontrol installed (and the 
>  > headphones selected)?
>  > 
>  > BC
>  > 
>  > 
>   
> I did the following steps:
>  
> 1) Disable PulseAudion in YaST
> 2) Reboot
> 3) Test with headphones--silence
> 4) Unplug headphones--I hear sound
> 5) Install pavucontrol
> 6) Select Output Devices
> 7) Select Headhones--I see the bar moving, which indicates pavucontrol is sending the sound to the headphones, but no sound in headphones
>  
> I even re-installed pulseaudio according to the instrucyions in the Timbleweed thread on the openSUSE forums. No change.
>  
> Is there a reason you believe it is a pulse audio issue?

Not really.  There is a known regression wrt some machines with
VT1802, and you likely hit it.  The fix patch is available (copied
below), so it'd be helpful if you can test it.


Takashi

---
From: Takashi Iwai <tiwai@suse.de>
Subject: [PATCH] ALSA: hda - Fix wrong power setup for HP paths of VIA codecs

The set_widgets_power_state_*() callbacks in patch_via.c are converted
to evaluate spec->gen.indep_hp_enabled when the codec parser was
switched to use the generic parser.  However, the generic parser takes
the headphone paths in a different way as the original VIA parser; it
tries the paths with individual DACs as much as possible.  This ended
up with the incorrect check of the power status in the HP paths,
resulting in the silent output from the headphones.

This patch removes the invalid check of indep_hp_enabled flag and sets
the proper power status for those paths.

Reported-by: Alex Riesen <raa.lkml@gmail.com>
Cc: <stable@vger.kernel.org> [v3.9+]
Signed-off-by: Takashi Iwai <tiwai@suse.de>
---
 sound/pci/hda/patch_via.c | 41 +++++++++++++++--------------------------
 1 file changed, 15 insertions(+), 26 deletions(-)

diff --git a/sound/pci/hda/patch_via.c b/sound/pci/hda/patch_via.c
index e0dadcf..c74e1a1 100644
--- a/sound/pci/hda/patch_via.c
+++ b/sound/pci/hda/patch_via.c
@@ -856,7 +856,7 @@ static void set_widgets_power_state_vt1708B(struct hda_codec *codec)
        if (is_8ch) {
                update_power_state(codec, 0x25, parm);
                update_power_state(codec, 0x27, parm);
-       } else if (codec->vendor_id == 0x11064397 && spec->gen.indep_hp_enabled)
+       } else if (codec->vendor_id == 0x11064397)
                update_power_state(codec, 0x25, parm);
 }
 
@@ -1042,7 +1042,6 @@ static const struct hda_verb vt1718S_init_verbs] = {
 
 static void set_widgets_power_state_vt1718S(struct hda_codec *codec)
 {
-       struct via_spec *spec = codec->spec;
        int imux_is_smixer;
        unsigned int parm, parm2;
        /* MUX6 (1eh) = stereo mixer */
@@ -1079,10 +1078,9 @@ static void set_widgets_power_state_vt1718S(struct hda_codec *codec)
        /* PW0 (24h), AOW0 (8h) */
        parm = AC_PWRST_D3;
        set_pin_power_state(codec, 0x24, &parm);
-       if (!spec->gen.indep_hp_enabled) /* check for redirected HP */
-               set_pin_power_state(codec, 0x28, &parm);
+       set_pin_power_state(codec, 0x28, &parm);
        update_power_state(codec, 0x8, parm);
-       if (!spec->gen.indep_hp_enabled && parm2 != AC_PWRST_D3)
+       if (parm2 != AC_PWRST_D3)
                parm = parm2;
        update_power_state(codec, 0xb, parm);
        /* MW9 (21h), Mw2 (1ah), AOW0 (8h) */
@@ -1095,14 +1093,12 @@ static void set_widgets_power_state_vt1718S(struct hda_codec *codec)
                set_pin_power_state(codec, 0x2a, &parm);
        update_power_state(codec, 0x9, parm);
 
-       if (spec->gen.indep_hp_enabled) {
-               /* PW4 (28h), MW3 (1bh), MUX1(34h), AOW4 (ch) */
-               parm = AC_PWRST_D3;
-               set_pin_power_state(codec, 0x28, &parm);
-               update_power_state(codec, 0x1b, parm);
-               update_power_state(codec, 0x34, parm);
-               update_power_state(codec, 0xc, parm);
-       }
+       /* PW4 (28h), MW3 (1bh), MUX1(34h), AOW4 (ch) */
+       parm = AC_PWRST_D3;
+       set_pin_power_state(codec, 0x28, &parm);
+       update_power_state(codec, 0x1b, parm);
+       update_power_state(codec, 0x34, parm);
+       update_power_state(codec, 0xc, parm);
 }
 
 /* Add a connection to the primary DAC from AA-mixer for some codecs
@@ -1307,7 +1303,7 @@ static void set_widgets_power_state_vt1716S(struct hda_codec *codec)
                mono_out = 0;
        else {
                present = snd_hda_jack_detect(codec, 0x1d);
-               if (!spec->gen.indep_hp_enabled && present)
+               if (present)
                        mono_out = 0;
                else
                        mono_out = 1;
@@ -1321,9 +1317,7 @@ static void set_widgets_power_state_vt1716S(struct hda_codec *codec)
        parm = AC_PWRST_D3;
        set_pin_power_state(codec, 0x1c, &parm);
        set_pin_power_state(codec, 0x1d, &parm);
-       /* HP Independent Mode, power on AOW3 */
-       if (spec->gen.indep_hp_enabled)
-               update_power_state(codec, 0x25, parm);
+       update_power_state(codec, 0x25, parm);
 
        /* force to D0 for internal Speaker */
        /* MW0 (16h), AOW0 (10h) */
@@ -1410,6 +1404,7 @@ static void set_widgets_power_state_vt2002P(struct hda_codec *codec)
        /* outputs */
        /* AOW0 (8h)*/
        update_power_state(codec, 0x8, parm);
+       update_power_state(codec, 0x9, parm);
 
        if (spec->codec_type == VT1802) {
                /* PW4 (28h), MW4 (18h), MUX4(38h) */
@@ -1439,9 +1434,6 @@ static void set_widgets_power_state_vt2002P(struct hda_codec *codec)
                update_power_state(codec, 0x35, parm);
        }
 
-       if (spec->gen.indep_hp_enabled)
-               update_power_state(codec, 0x9, AC_PWRST_D0);
-
        /* Class-D */
        /* PW0 (24h), MW0(18h/14h), MUX0(34h) */
        present = snd_hda_jack_detect(codec, 0x25);
@@ -1577,7 +1569,6 @@ static const struct hda_verb vt1812_init_verbs] = {
 
 static void set_widgets_power_state_vt1812(struct hda_codec *codec)
 {
-       struct via_spec *spec = codec->spec;
        unsigned int parm;
        unsigned int present;
        /* inputs */
@@ -1596,6 +1587,7 @@ static void set_widgets_power_state_vt1812(struct hda_codec *codec)
        /* outputs */
        /* AOW0 (8h)*/
        update_power_state(codec, 0x8, AC_PWRST_D0);
+       update_power_state(codec, 0x9, AC_PWRST_D0);
 
        /* PW4 (28h), MW4 (18h), MUX4(38h) */
        parm = AC_PWRST_D3;
@@ -1608,8 +1600,6 @@ static void set_widgets_power_state_vt1812(struct hda_codec *codec)
        set_pin_power_state(codec, 0x25, &parm);
        update_power_state(codec, 0x15, parm);
        update_power_state(codec, 0x35, parm);
-       if (spec->gen.indep_hp_enabled)
-               update_power_state(codec, 0x9, AC_PWRST_D0);
 
        /* Internal Speaker */
        /* PW0 (24h), MW0(14h), MUX0(34h) */
@@ -1756,15 +1746,14 @@ static void set_widgets_power_state_vt3476(struct hda_codec *codec)
        set_pin_power_state(codec, 0x28, &parm);
        update_power_state(codec, 0x38, parm);
        update_power_state(codec, 0x18, parm);
-       if (spec->gen.indep_hp_enabled)
-               update_conv_power_state(codec, 0xb, parm, 3);
+       update_conv_power_state(codec, 0xb, parm, 3);
        parm2 = parm; /* for pin 0x0b */
 
        /* PW0 (24h), MW0(34h), MW9(3fh), AOW0 (8h) */
        parm = AC_PWRST_D3;
        set_pin_power_state(codec, 0x24, &parm);
        update_power_state(codec, 0x34, parm);
-       if (!spec->gen.indep_hp_enabled && parm2 != AC_PWRST_D3)
+       if (parm2 != AC_PWRST_D3)
                parm = parm2;
        update_conv_power_state(codec, 0x8, parm, 0);
        /* MW9 (21h), Mw2 (1ah), AOW0 (8h) */
-- 
1.8.2.1

Apparently there is a kernel regression. Unfortunately, I am hesitant to apply the patch. I Assume it will be fixed in a future kernel release.

@Thiudans

Alternatively an earlier kernel could be tried

kernel-3.8.2-1.1 is still available at

Index of /factory-tested/repo/oss

and

kernel-3.7.10-1.1.1 is still available at

Index of /distribution/12.3/repo/oss

with yast program manager its easy to install 2 or 3 kernels and then select
via the grub2 menu

the setup on this pc is
3.8.13-1-desktop #1 SMP PREEMPT Sun May 12 21:30:39 CEST 2013 x86_64 GNU/Linux
due to problems with running mtt (packaged in motv)

cheers

@keellambert
"Alternatively an earlier kernel could be tried

with yast program manager its easy to install 2 or 3 kernels and then select
via the grub2 menu"

@Thiudans may still have the previous working kernel installed, as multi-kernel
support is default in 12.3 based Tumbleweed and selectable on Grub2 boot.
If he removed it then he would probably know about using YaST (or zypper)
for installing an additional kernel.

@Thiudans: Well done for learning how and submitting the bug report. :slight_smile: