[Dell OptiPlex GX620 - AD1981b, playback] No sound at all

Bug #893210 reported by ben heffern on 2011-11-21
42
This bug affects 7 people
Affects Status Importance Assigned to Milestone
ALSA driver
Unknown
Medium
alsa-driver (Ubuntu)
Undecided
Unassigned

Bug Description

fresh install of ubuntu studio and updates but internal speakers do not play. dell optiplex gx620 love ya

ProblemType: Bug
DistroRelease: Ubuntu 11.10
Package: alsa-base 1.0.24+dfsg-0ubuntu2
ProcVersionSignature: Ubuntu 3.0.0-13.22-generic 3.0.6
Uname: Linux 3.0.0-13-generic i686
AlsaVersion: Advanced Linux Sound Architecture Driver Version 1.0.24.
ApportVersion: 1.23-0ubuntu4
Architecture: i386
Card0.Amixer.info:
 Card hw:0 'ICH7'/'Intel ICH7 with AD1981B at irq 23'
   Mixer name : 'Analog Devices AD1981B'
   Components : 'AC97a:41445374'
   Controls : 28
   Simple ctrls : 20
Card1.Amixer.info:
 Card hw:1 'Device'/'C-Media Electronics Inc. USB Multimedia Audio Device at usb-0000:00:1d.7-4.1.4,'
   Mixer name : 'USB Mixer'
   Components : 'USB0d8c:0105'
   Controls : 13
   Simple ctrls : 6
Date: Mon Nov 21 11:51:25 2011
InstallationMedia: Ubuntu-Studio 11.10 "Oneiric Ocelot" - Release i386 (20111011.1)
PackageArchitecture: all
ProcEnviron:
 PATH=(custom, no user)
 LANG=en_US.UTF-8
 SHELL=/bin/bash
SourcePackage: alsa-driver
Symptom: audio
Symptom_AlsaPlaybackTest: ALSA playback test through plughw:ICH7 failed
Symptom_Card: CM108 Audio Controller - USB Multimedia Audio Device
Symptom_Type: No sound at all
Title: [ICH4 - Intel ICH7, playback] No sound at all
UpgradeStatus: Upgraded to oneiric on 2011-11-12 (8 days ago)
dmi.bios.date: 11/30/2006
dmi.bios.vendor: Dell Inc.
dmi.bios.version: A11
dmi.board.name: 0F8101
dmi.board.vendor: Dell Inc.
dmi.chassis.type: 15
dmi.chassis.vendor: Dell Inc.
dmi.modalias: dmi:bvnDellInc.:bvrA11:bd11/30/2006:svnDellInc.:pnOptiPlexGX620:pvr:rvnDellInc.:rn0F8101:rvr:cvnDellInc.:ct15:cvr:
dmi.product.name: OptiPlex GX620
dmi.sys.vendor: Dell Inc.

Created attachment 52868
ALSA info gzipped

I basically have a generic Dell box with integrated ICH7 audio

 0 [ICH7 ]: ICH4 - Intel ICH7
                      Intel ICH7 with AD1981B at irq 23

When I plug my headphones into the front, in alsamixer only the Headphone slider has an effect, Master does nothing to change volume.

Now Pulseaudio somehow merges these (even if flatvol is off) and the whole range of Headphone is compressed into the low range and it gets painful very quickly.

No idea if this is ALSA bug or not. Please advise and forward accordingly.

ALSA info and pulseaudio verbose output attached

Created attachment 52869
pulseadui -vvvvvv gzipped

ben heffern (skullcrusher8785) wrote :

Have you had time to look at this yet, Maarten?

You've told me to poke you.

Launchpad Janitor (janitor) wrote :

Status changed to 'Confirmed' because the bug affects multiple users.

Changed in alsa-driver (Ubuntu):
status: New → Confirmed

I think this is expected behaviour...

Can you attach output of "pacmd ls"?

Normally I'd expect a "Headphones" port to be available for your Sink. With the jack detection capabilities added in PA 2.0, this port will hopefully now be activated automatically when a jack is plugged in. In older versions you have to enable the port manually in pavucontrol or another mixer when you plug in a jack.

Created attachment 58411
pacmd ls

Attached »pacmd ls«. (Note I have an Apple Monitor with USB audio too)

It’s not expected behaviour that when I use my volume buttons that only the two lowest ticks give me a range between threshold-of-hearing and thresold-of-pain, is it?

 |0---xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx|

0 nothing, x == pain

I don’t have a headphone port. It’s not there. And on IRC mkbosman told me he had the same problem and to open this bug.

Created attachment 58415
Plain version of alsa-info for better readability.

You appear to have two Headphone related ports available along with a couple others:
 * Headphones / Amplifier
 * Headphones / No Amplifier

ports:
 analog-output-headphones;output-amplifier-on: Headphones / Amplifier (priority 9010, available: unknown)

 analog-output-headphones;output-amplifier-off: Headphones / No Amplifier (priority 9000, available: unknown)

 analog-output-lfe-on-mono;output-amplifier-on: LFE on Separate Mono Output / Amplifier (priority 4010, available: unknown)

 analog-output-lfe-on-mono;output-amplifier-off: LFE on Separate Mono Output / No Amplifier (priority 4000, available: unknown)

What is interesting is that you do not have any "Analog Speakers" ports listed. I think we're addressing this shortly in PA master having spoken to David (I can tell you're using Ubuntu from the patches), so this is good, but I'm not sure why Master is getting adjusted here... I'd have expected the two headphone ports to adjust Headphones and Line respectively.

Ultimately, this basically boils down to writing a profile for the hardware. I'd have hoped the default profiles would have sufficed and perhaps it still can once the speakers port comes in.

For more info on writing profiles see:
http://www.freedesktop.org/wiki/Software/PulseAudio/Backends/ALSA/Profiles

I've CC'ed David to get his input here.

> in alsamixer only the Headphone slider has an effect, Master does nothing to change volume

That's an ALSA driver bug. Unfortunately I don't know how to fix AC'97s.

> What is interesting is that you do not have any "Analog Speakers" ports listed.

There does not seem to be any kcontrols indicating that you have speakers, therefore no "Analog Speakers" port.

It seems to me that if "Master" controls the speaker but not the headphones, "Master" should be renamed to "Speaker".

What needs to be done here? ALSA-side fix?

PCM Playback volume of a two channels AC97 Codec is just similar to the virtual master volume of HDA codec

Sigman (sigman32) wrote :

I run alsa-info.

Headphones produce sound, however there is no sound from internal speaker.

At /etc/modprobe.d/alsa-base.conf I added this line:

options snd-hda-intel model=mobile

it didn't help as I found out later that snd_intel8x0 is in use.

summary: - [ICH4 - Intel ICH7, playback] No sound at all
+ [Dell OptiPlex GX620 - AD1981b, playback] No sound at all

https://bugs.launchpad.net/ubuntu/+source/alsa-driver/+bug/1078704/comments/5

without the headphone plugged in
 0:72 = 0804

with the headphone plugged in
 0:72 = 080c

it is possible to add Jack detection support on some AC97 codec

Changed in alsa-driver:
importance: Unknown → Medium
status: Unknown → Confirmed
Sigman (sigman32) wrote :

I just remembered something that might be important.

When I had ubuntu 12.04, 12.10 and 13.04 I could use internal speaker. Once I upgraded to 13.10 I am not sure.

That old pc uses my father and he says that it stopped working out of sudden.

And last thing I did is Upgrade to 13.10.

I cannot test it with Live CD now, But I will try it as soon as I can.

9-mc-o (9-mc-o) wrote :

It seems that I have same problem here.
It's Dell Optiplex GX620 + fresh 13.10 install.

I have only 2 output ports in pulseaudio

        ports:
                analog-output-headphones;output-amplifier-on: Słuchawki / Amplituner (priority 9010, latency offset 0 usec, available: unknown)
                        properties:
                                device.icon_name = "audio-headphones"
                analog-output-headphones;output-amplifier-off: Słuchawki / Brak amplitunera (priority 9000, latency offset 0 usec, available: unknown)
                        properties:
                                device.icon_name = "audio-headphones"

So I cannot get any output from motherboard ports (headphone port is also too loud as somebody mentioned).

My alsa-info is at
http://www.alsa-project.org/db/?f=e1ab95695370eaa14f1c47947e1a2a0a3232d2f0
(there's also nvidia card with intel-hd hdmi stuff inside)

Please tell me if I can provide any additional useful info to fix this.

Neil (kingfisher) wrote :

Its the same with 14.04, 14.10 and 15.04, is support discontinued for Dell GX600, It would be nice if someone with expert knowledge would explain how the internal speaker can be correctly detected, after all it all worked perfectly in 12.04

MASTER VOLUME REGISTER Index 0x02

 This register controls the Line_Out volume controls for both stereo channels and the mute bit. Each volume subregister contains five bits, generating 32 volume levels with 31 steps of 1.5 dB each. Because AC ’97 defines 6-bit volume registers, to maintain compatibility whenever the D5 or D13 bits are set to 1, their respective lower five volume bits are automatically set to 1 by the codec logic. On readback, all lower five bits read 1s whenever these bits are set to 1. Refer to Table 12 for examples.

HEADPHONE VOLUME REGISTER Index 0x04
This register controls the headphone volume controls for both stereo channels and the mute bit. Each volume subregister contains five bits, generating 32 volume levels with 31 steps of 1.5 dB each. Because AC ’97 defines 6-bit volume registers, to maintain compatibility, whenever the D5 or D13 bits are set to 1, their respective lower five volume bits are automatically set to 1 by the codec logic. On readback, all lower five bits read 1s whenever these bits are set to 1. Refer to Table 12 for examples.

this is quite different from those virtual master of hda codecs

Raymond (superquad-vortex2) wrote :

you have to provide pulseaudio verbose log and

pactl list sink

if line out use master playback volume and headohone use headphone playback volume

you need to use customised pulseaudio conf files

http://cgit.freedesktop.org/pulseaudio/pulseaudio/tree/src/modules/alsa/mixer/paths

Changed in alsa-driver (Ubuntu):
status: Confirmed → Incomplete
Neil (kingfisher) wrote :

Thank you Raymond, please see the following:

pactl list sinks
http://pastebin.com/8ypDq0vr

pulseverbose.log
http://pastebin.com/ThJQ7372

pulseaudio dB range (-127.5,+12) is incorrect

662| 0.000) D: [pulseaudio] alsa-mixer.c: Path analog-output-headphones (Headphones), direction=1, priority=90, probed=yes, supported=yes, has_mute=yes, has_volume=yes, has_dB=yes, min_volume=0, max_volume=31, min_dB=-127.5, max_dB=12

( 0.662| 0.000) D: [pulseaudio] alsa-mixer.c: Element Master, direction=1, switch=1, volume=1, volume_limit=-1, enumeration=0, required=0, required_any=0, required_absent=0, mask=0x3600000000f66, n_channels=2, override_map=yes

( 0.662| 0.000) D: [pulseaudio] alsa-mixer.c: Element Master Mono, direction=1, switch=2, volume=2, volume_limit=-1, enumeration=0, required=0, required_any=0, required_absent=0, mask=0x7ffffffffffff, n_channels=1, override_map=no

( 0.662| 0.000) D: [pulseaudio] alsa-mixer.c: Element Headphone, direction=1, switch=1, volume=1, volume_limit=-1, enumeration=0, required=0, required_any=4, required_absent=0, mask=0x3600000000f66, n_channels=2, override_map=yes

( 0.662| 0.000) D: [pulseaudio] alsa-mixer.c: Element PCM, direction=1, switch=1, volume=1, volume_limit=-1, enumeration=0, required=0, required_any=0, required_absent=0, mask=0x3600000000f66, n_channels=2, override_map=yes

( 0.662| 0.000) D: [pulseaudio] alsa-mixer.c: Element External Amplifier, direction=1, switch=4, volume=0, volume_limit=-1, enumeration=0, required=0, required_any=0, required_absent=0, mask=0x0, n_channels=0, override_map=no

( 0.662| 0.000) D: [pulseaudio] alsa-mixer.c: Option on (output-amplifier-on/Amplifier) index=1, priority=10

( 0.662| 0.000) D: [pulseaudio] alsa-mixer.c: Option off (output-amplifier-off/No Amplifier) index=0, priority=0

( 0.663| 0.000) D: [pulseaudio] alsa-mixer.c: Jack Front Headphone, alsa_name='Front Headphone Jack', detection unavailable

( 0.663| 0.000) D: [pulseaudio] alsa-mixer.c: Jack Front Headphone Phantom, alsa_name='Front Headphone Phantom Jack', detection unavailable

( 0.663| 0.000) D: [pulseaudio] alsa-mixer.c: Jack Headphone, alsa_name='Headphone Jack', detection unavailable

( 0.663| 0.000) D: [pulseaudio] alsa-mixer.c: Jack Headphone Phantom, alsa_name='Headphone Phantom Jack', detection unavailable

( 0.663| 0.000) D: [pulseaudio] alsa-mixer.c: Jack Headphone Mic, alsa_name='Headphone Mic Jack', detection unavailable

( 0.663| 0.000) D: [pulseaudio] alsa-mixer.c: Setting output-amplifier-on (Amplifier) priority=10

( 0.663| 0.000) D: [pulseaudio] alsa-mixer.c: Setting output-amplifier-off (No Amplifier) priority=

Raymond (superquad-vortex2) wrote :

can you post the oit put of alsa-info.sh when headphone is not plugged and headphone is plugged

are there any difference in value of thosr ac97 registers when headphone is plugged/unplugged

Card0.Codecs.codec97.0.ac97.0.0.regs.txt

Neil (kingfisher) wrote :

alsa-info.txt
http://pastebin.com/pefj0dfq

differences with and without headphone socket occupied
alsa-info.patch.txt
http://pastebin.com/jzJBNd8e

--- /home/kingfisher/Desktop/alsa-info.no-hp.txt
+++ /home/kingfisher/Desktop/alsa-info.hp.txt

@@ -3,7 +3,7 @@

 !!ALSA Information Script v 0.4.64

 !!################################

-!!Script ran on: Fri Sep 11 02:28:42 UTC 2015
+!!Script ran on: Fri Sep 11 02:31:15 UTC 2015

 !!Linux Distribution

@@ -215,7 +215,7 @@
 0:6c = 0000
 0:6e = 0000
 0:70 = 0000
-0:72 = 1804
+0:72 = 180c
 0:74 = 1001
 0:76 = 2010
 0:78 = 0000

JACK SENSE/AUDIO INTERRUPT/STATUS REGISTER Index 0x72
Reg No. Name D15 D14 D13 D12 D11 D10 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0

0x72 Jack Sense X X X JS MT2 JS MT1 JS MT0 JS1 EQB JS0 EQB JS1 TMR JS0 TMR JS1 MD JS0 MD JS1 ST JS0 ST JS1 INT JS0 INT

All register bits are read/write except for JS0ST and JS1ST, which are read-only.
All registers are not shown, and bits containing an X are assumed to be reserved.

Table 41. Jack Sense Mute Select—JSMT [2:0] Ref JS1 Headphone JS0 LINE_OUT JSMT2 JSMT1 JSMT0 HP_OUT LINE_OUT MONO_OUT
Notes 0 OUT (0) OUT (0) 0 0 0 ACTIVE ACTIVE ACTIVE JS0 and JS1 ignored.

16 OUT (0) OUT (0) 1 0 0 FMUTE FMUTE ACTIVE JS0 mutes Mono; JS1 no mute action.
17 OUT (0) IN (1) 1 0 0 FMUTE ACTIVE FMUTE
18 IN (1) OUT (0) 1 0 0 ACTIVE FMUTE ACTIVE
19 IN (1) IN (1) 1 0 0 ACTIVE ACTIVE FMUTE

Raymond (superquad-vortex2) wrote :

--- /home/kingfisher/Desktop/alsa-info.no-hp.txt
+++ /home/kingfisher/Desktop/alsa-info.hp.txt

@@ -3,7 +3,7 @@

 !!ALSA Information Script v 0.4.64

 !!################################

-!!Script ran on: Fri Sep 11 02:28:42 UTC 2015
+!!Script ran on: Fri Sep 11 02:31:15 UTC 2015

 !!Linux Distribution

@@ -215,7 +215,7 @@

 0:6c = 0000
 0:6e = 0000
 0:70 = 0000
-0:72 = 1804
+0:72 = 180c
 0:74 = 1001
 0:76 = 2010
 0:78 = 0000

24 OUT (0) OUT (0) 1 1 0 FMUTE FMUTE ACTIVE JS0 mutes Mono; JS1 mutes Mono and Line-Out.
25 OUT (0) IN (1) 1 1 0 FMUTE ACTIVE FMUTE
26 IN (1) OUT (0) 1 1 0 ACTIVE FMUTE FMUTE
27 IN (1) IN (1) 1 1 0 ACTIVE FMUTE FMUTE

FMUTE = Output is forced to mute independent of the respective volume register setting.
ACTIVE = Output is not muted, and its status is dependent on the respective volume register setting.
OUT = Nothing plugged into the jack and, therefore, the JS status is low (via the load resistor pull-down).
 IN = Jack has plug inserted and, therefore, the JS status is high (via the codec JS internal pull-up).

Created attachment 118207
attachment-25654-0.html

Just for the record, the reporter (me) doesn't have access to that PC
anymore.
On 11 Sep 2015 05:57, <email address hidden> wrote:

> *Comment # 13 <https://bugs.freedesktop.org/show_bug.cgi?id=42353#c13> on
> bug 42353 <https://bugs.freedesktop.org/show_bug.cgi?id=42353> from Raymond
> <email address hidden> *
>
>
>
>
> --- /home/kingfisher/Desktop/alsa-info.no-hp.txt
> +++ /home/kingfisher/Desktop/alsa-info.hp.txt
>
> @@ -3,7 +3,7 @@
>
> !!ALSA Information Script v 0.4.64
>
> !!################################
>
>
>
> -!!Script ran on: Fri Sep 11 02:28:42 UTC 2015
> +!!Script ran on: Fri Sep 11 02:31:15 UTC 2015
>
>
> !!Linux Distribution
>
> @@ -215,7 +215,7 @@
> 0:6c = 0000
> 0:6e = 0000
> 0:70 = 0000
> -0:72 = 1804
> +0:72 = 180c
> 0:74 = 1001
> 0:76 = 2010
> 0:78 = 0000
>
>
> JACK SENSE/AUDIO INTERRUPT/STATUS REGISTER Index 0x72
> Reg No. Name D15 D14 D13 D12 D11 D10 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0
>
> 0x72 Jack Sense X X X JS MT2 JS MT1 JS MT0 JS1 EQB JS0 EQB JS1 TMR
> JS0 TMR JS1 MD JS0 MD JS1 ST JS0 ST JS1 INT JS0 INT
>
> All register bits are read/write except for JS0ST and JS1ST, which are
> read-only.
> All registers are not shown, and bits containing an X are assumed to be
> reserved.
>
>
> Table 41. Jack Sense Mute Select—JSMT [2:0] Ref JS1 Headphone JS0 LINE_OUT
> JSMT2 JSMT1 JSMT0 HP_OUT LINE_OUT MONO_OUT
> Notes 0 OUT (0) OUT (0) 0 0 0 ACTIVE ACTIVE ACTIVE JS0 and JS1 ignored.
>
>
> 16 OUT (0) OUT (0) 1 0 0 FMUTE FMUTE ACTIVE JS0 mutes Mono; JS1 no mute action.
> 17 OUT (0) IN (1) 1 0 0 FMUTE ACTIVE FMUTE
> 18 IN (1) OUT (0) 1 0 0 ACTIVE FMUTE ACTIVE
> 19 IN (1) IN (1) 1 0 0 ACTIVE ACTIVE FMUTE
>
> ------------------------------
> You are receiving this mail because:
>
> - You reported the bug.
>
>

(In reply to Arun Raghavan from comment #8)
> What needs to be done here? ALSA-side fix?

https://bugs.launchpad.net/ubuntu/+source/alsa-driver/+bug/893210

it is unlikely fix in alsa driver as pulseaudio expect jack detection kctl

although js0 ST or js1 ST of ac97 register 0x72 of ad1981b may reflect hp status

it is not clear how and when to check the change in jack state by timer or interrept

Table 40. Bit Mnemonic JS0 Interrupt Function JS1 TMR JS0 TMR JS1 MD JS0 MD JS1 ST JS0 ST JS1 INT JS0 INT 0x0000

JS1INT JS0ST JS1ST JS0MD JS1MD JS0TMR JS1TMR JS0EQB JS1EQB JSMT [2:0]

JS0INT
This bit indicates that Pin JS0 has generated an interrupt. This bit remains set until the software services the JS0 interrupt, that is, JS0 ISR should clear this bit by writing a 0 to it. The interrupt to the system is an OR combination of this bit and JS1INT. The actual interrupt implementation is selected by the INTS bit (Register 0x76). It is also possible to generate a software system interrupt by writing a 1 to this bit.

Js1 Interrupt
This bit indicates that Pin JS1 has generated an interrupt. This bit remains set until the software services the JS1 interrupt, that is, JS1 ISR should clear this bit by writing a 0 to it. See the JS0INT description for details.

JS0 State
This bit always reports the logic state of the JS0 pin.

JS1 State
This bit always reports the logic state of the JS1 pin.

JS0 Mode
This bit selects the operation mode for the JS0 pin. 0 = Jack sense mode (default). 1 = Interrupt mode.

JS1 Mode
This bit selects the operation mode for the JS1 pin. 0 = Jack sense mode (default). 1 = Interrupt mode.

JS0 Timer Enable
If this bit is set to 1, JS0 must be high for >278 ms to be recognized.

JS1 Timer Enable
If this bit is set to 1, JS1 must be high for >278 ms to be recognized.

 JS0 EQ Bypass Enable
This bit enables JS0 to control the EQ bypass. When this bit is set to 1, JS0 = 1 causes the EQ to be bypassed.

JS1 EQ Bypass Enable
This bit enables JS1 to control the EQ bypass. When this bit is set to 1, JS1 = 1 causes the EQ to be bypassed.

JS Mute Enable Selector

These three bits select and enable the jack sense muting action (see Table 41

static const struct snd_kcontrol_new snd_ac97_ad1981x_jack_sense[] = {
 AC97_SINGLE("Headphone Jack Sense", AC97_AD_JACK_SPDIF, 11, 1, 0),
 AC97_SINGLE("Line Jack Sense", AC97_AD_JACK_SPDIF, 12, 1, 0),
};

these two controls only change JSMT2 and JSMT1

you need bit 2 and bit3 of AC97_AD_JACK_SPDIF for JS0 ST and JS1 ST

create hp jack kctl similar to

https://git.kernel.org/cgit/linux/kernel/git/tiwai/sound.git/commit/sound/pci/oxygen?id=435feac648cab190990aa0bf9355f77d1f082db3

the point is when do the driver call snd_jack_report by interrupt or timer

http://cgit.freedesktop.org/pulseaudio/pulseaudio/tree/src/modules/alsa/mixer/paths/analog-output-headphones.conf

you need to remove Element Master from analog-output-headphones.conf since master is used by line out jack

[Element Master]
switch = mute
volume = merge
override-map.1 = all
override-map.2 = all-left,all-right

Raymond (superquad-vortex2) wrote :

static const struct snd_kcontrol_new snd_ac97_ad1981x_jack_sense[] = {
 AC97_SINGLE("Headphone Jack Sense", AC97_AD_JACK_SPDIF, 11, 1, 0),
 AC97_SINGLE("Line Jack Sense", AC97_AD_JACK_SPDIF, 12, 1, 0),
};

Simple mixer control 'Headphone Jack Sense',0
  Capabilities: pswitch pswitch-joined
  Playback channels: Mono
  Mono: Playback [on]

Simple mixer control 'Line Jack Sense',0
  Capabilities: pswitch pswitch-joined
  Playback channels: Mono
  Mono: Playback [on]

these two control only change JS MT2 and JSMT1

JS Mute Enable Selector

These three bits select and enable the jack sense muting action (see Table 41

try toogle to see any difference since FMUTE = Output is forced to mute independent of the respective volume register setting.

             device.vendor.name = "Intel Corporation"
                device.product.id = "27de"
                device.product.name = "OptiPlex GX620"
                device.form_factor = "internal"
                device.string = "front:0"
                device.buffering.buffer_size = "65536"
                device.buffering.fragment_size = "65536"
                device.access_mode = "mmap+timer"
                device.profile.name = "analog-stereo"
                device.profile.description = "Analogue Stereo"
                device.description = "Built-in Audio Analogue Stereo"
                alsa.mixer_name = "Analog Devices AD1981B"
                alsa.components = "AC97a:41445374"
                module-udev-detect.discovered = "1"
                device.icon_name = "audio-card-pci"
        Ports:
                analog-output-headphones;output-amplifier-on: Headphones / Amplifier (priority: 9010)
                analog-output-headphones;output-amplifier-off: Headphones / No Amplifier (priority: 9000)

        Active Port: analog-output-headphones;output-amplifier-off

the port is different from those ac97 codec in virtualbox 4.x or those ac97 codec without headphone volume control

Neil (kingfisher) wrote :

Thank you for your reply Raymond, i am uncertain what you are asking me do.

14.04, 14.10 and 15.04 sound settings output look like this:
https://www.dropbox.com/s/h38d1w4n16...%3A50.png?dl=0
and the associated alsa mixer controls e.g. speaker are missing

this is what 12.04 looked like and worked:
https://www.dropbox.com/s/0k376713gb...%3A05.png?dl=0

Raymond (superquad-vortex2) wrote :

can you post the output of alsa-info.sh

and

pactl list sinks

in working 12.04

  the name of the port change since pulseaudio try to remove reduant path

Ports:

                analog-output-headphones;output-amplifier-on: Headphones / Amplifier (priority: 9010)

                analog-output-headphones;output-amplifier-off: Headphones / No Amplifier (priority: 9000)

        Active Port: analog-output-headphones;output-amplifier-off

Raymond (superquad-vortex2) wrote :
Download full text (3.1 KiB)

how do those master playback volume , headphone playback volume and pcm playback volume affect your computer audio output in 12.04

662| 0.000) D: [pulseaudio] alsa-mixer.c: Path analog-output-headphones (Headphones), direction=1, priority=90, probed=yes, supported=yes, has_mute=yes, has_volume=yes, has_dB=yes, min_volume=0, max_volume=31, min_dB=-127.5, max_dB=12

pulseaudio dB range is the sum of three playback volume controls

control.2 {

                iface MIXER

                name 'Master Playback Volume'

                value.0 28

                value.1 28

                comment {

                        access 'read write'

                        type INTEGER

                        count 2

                        range '0 - 31'

                        dbmin -4650

                        dbmax 0

                        dbvalue.0 -450

                        dbvalue.1 -450

                }

        }

        control.3 {

                iface MIXER

                name 'Headphone Playback Switch'

                value.0 true

                value.1 true

                comment {

                        access 'read write'

                        type BOOLEAN

                        count 2

                }

        }

        control.4 {

                iface MIXER

                name 'Headphone Playback Volume'

                value.0 31

                value.1 31

                comment {

                        access 'read write'

                        type INTEGER

                        count 2

                        range '0 - 31'

                        dbmin -4650

                        dbmax 0

                        dbvalue.0 0

                        dbvalue.1 0

                }

        }

        control.5 {

                iface MIXER

                name 'Master Mono Playback Switch'

                value false

                comment {

                        access 'read write'

                        type BOOLEAN

                        count 1

                }

        }

        control.6 {

                iface MIXER

                name 'Master Mono Playback Volume'

                value 0

                comment {

                        access 'read write'

                        type INTEGER

                        count 1

                        range '0 - 31'

                        dbmin -4650

                        dbmax 0

                        dbvalue.0 -4650

                }

        }
    control.18 {
                iface MIXER
                name 'PCM Playback Switch'
                value.0 true
                value.1 true
                comment {

        control.19 {

                iface MIXER

                name 'PCM Playback Volume'

                value.0 23
                value.1 23
                comment {
                        access 'read write'
                        type INTEGER
                        count 2
                        range '0 - 31'
                        dbmin -3450
                        dbmax 1200
                        dbvalue.0 0
                        dbvalue.1 0

 ...

Read more...

Neil (kingfisher) wrote :

booted from ubuntu-12.04.5-desktop-amd64.iso

12.04.5 alsa-info.txt
http://pastebin.com/uUkhy9H5

12.04.5 pactl list sinks
http://pastebin.com/zatgyeE7

Raymond (superquad-vortex2) wrote :

Try turn off those jack sense controls

Simple mixer control 'Headphone Jack Sense',0
  Capabilities: pswitch pswitch-joined penum
  Playback channels: Mono
  Mono: Playback [off]

Simple mixer control 'PCM',0
  Capabilities: pvolume pswitch penum
  Playback channels: Front Left - Front Right
  Limits: Playback 0 - 31
  Mono:
  Front Left: Playback 23 [74%] [0.00dB] [on]
  Front Right: Playback 23 [74%] [0.00dB] [on]

Simple mixer control 'Line Jack Sense',0
  Capabilities: pswitch pswitch-joined penum
  Playback channels: Mono
  Mono: Playback [off]

Simple mixer control 'Mono Output Select',0
  Capabilities: enum
  Items: 'Mix' 'Mic'
  Item0: 'Mix'

Simple mixer control 'External Amplifier',0
  Capabilities: pswitch pswitch-joined penum
  Playback channels: Mono
  Mono: Playback [on]

Raymond (superquad-vortex2) wrote :

https://git.kernel.org/cgit/linux/kernel/git/tiwai/sound.git/commit/?id=78fad343a4fd4c837e3034dcbca13269a783e0f6

ALSA: intel8x0 - add Dell Optiplex GX620 (AD1981B) to AC97 clock whitelist

your ac97 registers in 14.04 should be same as your 12.04 or the alsa info in the bug report of the above patch

Raymond (superquad-vortex2) wrote :

https://bugzilla.redhat.com/attachment.cgi?id=321801

0:72 = 0004
0:74 = 1001
0:76 = 2000
0:78 = 0000
0:7a = 0000
0:7c = 4144
0:7e = 5374

seem JS0 and JS1 ignored.

Table 41. Jack Sense Mute Select—JSMT [2:0] Ref JS1 Headphone JS0 LINE_OUT JSMT2 JSMT1 JSMT0 HP_OUT LINE_OUT MONO_OUT Notes

0 OUT (0) OUT (0) 0 0 0 ACTIVE ACTIVE ACTIVE JS0 and JS1 ignored.
1 OUT (0) IN (1) 0 0 0 ACTIVE ACTIVE ACTIVE
2 IN (1) OUT (0) 0 0 0 ACTIVE ACTIVE ACTIVE
3 IN (1) IN (1) 0 0 0 ACTIVE ACTIVE ACTIVE

Raymond (superquad-vortex2) wrote :

your 12.04 also ignore js0 and js1

0:72 = 0004
0:74 = 1001
0:76 = 2010
0:78 = 0000
0:7a = 0000
0:7c = 4144
0:7e = 5374

do js0 st and js1 st of register 0x72 reflect the jack state of headphone and line out jack ?

Neil (kingfisher) wrote :

--- /home/kingfisher/alsa-info.txt.yCKDtvMxUL
+++ /home/kingfisher/alsa-info.txt.3NDI7H9Nbu
@@ -3,7 +3,7 @@
 !!ALSA Information Script v 0.4.64
 !!################################

-!!Script ran on: Sat Sep 12 20:05:02 UTC 2015
+!!Script ran on: Sat Sep 12 20:08:12 UTC 2015

 !!Linux Distribution
@@ -215,7 +215,7 @@
 0:6c = 0000
 0:6e = 0000
 0:70 = 0000
-0:72 = 1804
+0:72 = 180c
 0:74 = 1001
 0:76 = 2010
 0:78 = 0000

Neil (kingfisher) wrote :

post #35 relates to 14.04.3

This post relates to 12.04.05

--- /media/kingfisher/FLASH DRIVE/alsa-info1
+++ /media/kingfisher/FLASH DRIVE/alsa-info2
@@ -3,7 +3,7 @@
 !!ALSA Information Script v 0.4.64
 !!################################

-!!Script ran on: Sat Sep 12 20:38:39 UTC 2015
+!!Script ran on: Sat Sep 12 20:40:18 UTC 2015

 !!Linux Distribution
@@ -211,7 +211,7 @@
 0:6c = 0000
 0:6e = 0000
 0:70 = 0000
-0:72 = 0004
+0:72 = 000c
 0:74 = 1001
 0:76 = 2010
 0:78 = 0000

Raymond (superquad-vortex2) wrote :

https://bugs.freedesktop.org/attachment.cgi?id=58415

0:72 = 0008
0:74 = 1001
0:76 = 2050

if you look at the functional block diagram, the headphone path and line out path have only two volume controls

pcm + headphone

and

pcm + master

pulseaudio just keep PCM at 0dB as Element PCM is defined in analog-output.conf.common

so the effective dB range of headphone is -46.5 dB to 0 dB

ftp://ftp.alsa-project.org/pub/manuals/intel/

refer to ac97 2.1/2.3 specification

Figure 16. AC ‘97 Mixer Functional Diagram

master volume control line out
headphone volume control hp
master mono volume control mono out

Neil (kingfisher) wrote :

so how can I get pactl list sinks to include:

analog-output-lfe-on-mono;output-amplifier-on: LFE on Separate Mono Output / Amplifier (priority: 4010)
analog-output-lfe-on-mono;output-amplifier-off: LFE on Separate Mono Output / No Amplifier (priority: 4000)

Raymond (superquad-vortex2) wrote :

do your gx620 have any mono output ?

ftp://ftp.alsa-project.org/pub/manuals/intel/

take a look at ac97 2.x specification

Figure 16. AC ‘97 Mixer Functional Diagram

master volume control line out
headphone volume control hp
master mono volume control mono out

> so how can I get pactl list sinks to include:

>analog-output-lfe-on-mono;output-amplifier-on: LFE on Separate Mono Output / Amplifier (priority: 4010)
>analog-output-lfe-on-mono;output-amplifier-off: LFE on Separate Mono Output / No Amplifier (priority: 4000)

do you mean the internal speaker is using mono out, you have to ask pulseaudio developer ?

http://cgit.freedesktop.org/pulseaudio/pulseaudio/commit/src/modules/alsa/mixer?id=9e4229cfe03d441a01a0f1bd02972936048ae85d

Raymond (superquad-vortex2) wrote :

> so how can I get pactl list sinks to include:

>analog-output-lfe-on-mono;output-amplifier-on: LFE on Separate Mono Output / Amplifier (priority: 4010)
>analog-output-lfe-on-mono;output-amplifier-off: LFE on Separate Mono Output / No Amplifier (priority: 4000)

do you mean the internal speaker is using mono out, you have to ask pulseaudio developer ?

http://cgit.freedesktop.org/pulseaudio/pulseaudio/commit/src/modules/alsa/mixer?id=9e4229cfe03d441a01a0f1bd02972936048ae85d

Neil (kingfisher) wrote :

I don't know Raymond. I just booted from ubuntu-12.04.5-desktop-amd64.iso, played a music file, opened alsamixer, and discovered that; changing Master M volume independently changed the internal speaker volume. In 14.04 Master M is muted by default, unmuting and raising the volume has no effect.

Raymond (superquad-vortex2) wrote :

http://cgit.freedesktop.org/pulseaudio/pulseaudio/tree/src/modules/alsa/mixer/paths/analog-output-headphones.conf

it is because headphone port mute master mono

[Element Master Mono]
switch = off
volume = off

as only snd-hda-intel implement jack detection kctl

those snd-intel8x0 does not have any jack detection kctl

Raymond (superquad-vortex2) wrote :

24 OUT (0) OUT (0) 1 1 0 FMUTE FMUTE ACTIVE JS0 mutes Mono; JS1 mutes Mono and Line-Out.
25 OUT (0) IN (1) 1 1 0 FMUTE ACTIVE FMUTE
26 IN (1) OUT (0) 1 1 0 ACTIVE FMUTE FMUTE
27 IN (1) IN (1) 1 1 0 ACTIVE FMUTE FMUTE

the other thing is that you have change mute enable selector to 110 which mute mono when you have line out or hp plugged

Raymond (superquad-vortex2) wrote :

try to set those ac97 registers 0x72 by turn off headphone jack sense and line jack sense control

http://cgit.freedesktop.org/pulseaudio/pulseaudio/patch/src/modules/alsa/mixer/paths?id=ba0203c4c0938fd646cf559456e3d691fc889029

do you mean regression of this patch ?

you have to open another pulseaudio bug report

> I just booted from ubuntu-12.04.5-desktop-amd64.iso, played a music file, opened alsamixer, and discovered that; changing Master M volume independently changed the internal speaker volume. In 14.04 Master M is muted by default, unmuting and raising the volume has no effect.

You have to turn off headphone jack sense and line jack sense controls to set mute enable selector JSMT[2:0] to 0

http://cgit.freedesktop.org/pulseaudio/pulseaudio/patch/src/modules/alsa/mixer/paths?id=ba0203c4c0938fd646cf559456e3d691fc889029

you have to send email to the author if you think it is a regression of this patch

Neil (kingfisher) wrote :

changed analog-output-headphones.conf
[Element Master Mono]
switch = on
volume = on
No effect

turned off headphone jack sense and line jack sense control
no effect, and were re-enabled by rebooting

Do not know how to implement the details in your post #43

just as an experiment I temporarily replaced the /usr/share/pulseaudio/alsa-mixer/paths/ directory with the one from 12.04
and that made no difference either!

AndrewGX620 (andrewgx620) wrote :

Hi, I am also trying to get internal speakers to work on Dell OptiPlex GX620 (model no.: DCCY). External speakers work, however internal speakers are not even listed in PulseAudio Volume Control (and there is no sound). The internal speakers worked on previous OS (Windows XP).

If you need another test system, please let me know what to run. I would really like to make this work.

AndrewGX620 (andrewgx620) wrote :

Small error on my part: I have OptiPlex GX520, not GX620. Should be similar though. Attaching my alsa-info.

AndrewGX620 (andrewgx620) wrote :

Hi, I am also trying to get internal speakers to work on Dell OptiPlex GX620 (model no.: DCCY). External speakers work, however internal speakers are not even listed in PulseAudio Volume Control (and there is no sound). The internal speakers worked on previous OS (Windows XP).

do you mean your desktop have stereo internal speakers since ad1981b only has three output

line out
hp
mono out

and your dell gx520 seem have hp at front and line out at rear

Small error on my part: I have OptiPlex GX520, not GX620. Should be similar though. Attaching my alsa-info.

https://launchpadlibrarian.net/217865539/alsa-info.txt.TO94irU7Fb

0:72 = 0800
0:74 = 1001
0:76 = 2010
0:78 = 0000
0:7a = 0000
0:7c = 4144
0:7e = 5374

js1 st and js0 st seem to be clear , mono out is not muted by FMUTE

Raymond (superquad-vortex2) wrote :

http://git.alsa-project.org/?p=alsa-utils.git;a=blob;f=alsactl/init/default;hb=HEAD

master mono is muted by default when ac97 codec is cold reset

alsactl init

only initialise master, pcm

http://cgit.freedesktop.org/pulseaudio/pulseaudio/commit/src/modules/alsa/mixer?id=052316e4195cc01c6b13ce9e21724cb7c25aad82

as desktop speaker.conf has beem merged

if your desktop speaker use mono out playback volume/switch

you have to add element master mono to speaker.conf

Raymond (superquad-vortex2) wrote :

http://cgit.freedesktop.org/pulseaudio/pulseaudio/commit/src/modules/alsa/mixer?id=052316e4195cc01c6b13ce9e21724cb7c25aad82

as desktop speaker.conf has beem merged

if your desktop speaker use mono out playback volume/switch

you have to add element master mono to speaker.conf

you also need to implement headphone jack and line out jack detection kctl and internal speaker phantom jack using bit 2 and bit 3 of AC97_AD_JACK_SPDIF register

Created attachment 118260
ad1981b - add jack detect kctl

This patch still lack the interrupt to call ad198x_handle_hp_jack() and ad198x_handle_lo_jack() when hp or line out is plugged

Raymond (superquad-vortex2) wrote :

diff --git a/include/sound/ac97_codec.h b/include/sound/ac97_codec.h
index 0e9d75b..9e659e2 100644
--- a/include/sound/ac97_codec.h
+++ b/include/sound/ac97_codec.h
@@ -31,6 +31,7 @@
 #include <sound/pcm.h>
 #include <sound/control.h>
 #include <sound/info.h>
+#include <sound/jack.h>

 /* maximum number of devices on the AC97 bus */
 #define AC97_BUS_MAX_DEVICES 4
@@ -531,6 +532,10 @@ struct snd_ac97 {
  struct device dev;

  struct snd_pcm_chmap *chmaps[2]; /* channel-maps (optional) */
+
+ struct snd_jack *hp_jack;
+ struct snd_jack *lo_jack;
+ struct snd_jack *sp_jack;
 };

 #define to_ac97_t(d) container_of(d, struct snd_ac97, dev)
diff --git a/sound/pci/ac97/ac97_patch.c b/sound/pci/ac97/ac97_patch.c
index f4234ed..581000c 100644
--- a/sound/pci/ac97/ac97_patch.c
+++ b/sound/pci/ac97/ac97_patch.c
@@ -1886,6 +1886,23 @@ static int patch_ad1981a(struct snd_ac97 *ac97)
 static const struct snd_kcontrol_new snd_ac97_ad198x_2cmic =
 AC97_SINGLE("Stereo Mic", AC97_AD_MISC, 6, 1, 0);

+#define AD198X_JS1_ST 0x08
+#define AD198X_JS0_ST 0x04
+
+void ad198x_handle_hp_jack(struct snd_ac97 *ac97)
+{
+ bool hp_plugged = (snd_ac97_read(ac97, AC97_AD_JACK_SPDIF) &
+ AD198X_JS1_ST) == AD198X_JS1_ST;
+ snd_jack_report(ac97->hp_jack, hp_plugged ? SND_JACK_HEADPHONE : 0);
+}
+
+void ad198x_handle_lo_jack(struct snd_ac97 *ac97)
+{
+ bool lo_plugged = (snd_ac97_read(ac97, AC97_AD_JACK_SPDIF) &
+ AD198X_JS0_ST) == AD198X_JS0_ST;
+ snd_jack_report(ac97->lo_jack, lo_plugged ? SND_JACK_LINEOUT : 0);
+}
+
 static int patch_ad1981b_specific(struct snd_ac97 *ac97)
 {
  int err;
@@ -1894,8 +1911,23 @@ static int patch_ad1981b_specific(struct snd_ac97 *ac97)
   return err;
  if (check_list(ac97, ad1981_jacks_blacklist))
   return 0;
- return patch_build_controls(ac97, snd_ac97_ad1981x_jack_sense,
+ err = patch_build_controls(ac97, snd_ac97_ad1981x_jack_sense,
         ARRAY_SIZE(snd_ac97_ad1981x_jack_sense));
+ if (err < 0)
+ return err;
+ if (( err = snd_jack_new(ac97->bus->card, "Headphone", SND_JACK_HEADPHONE,
+ &ac97->hp_jack, true, false)) < 0)
+ return err;
+ ad198x_handle_hp_jack(ac97);
+ if (( err = snd_jack_new(ac97->bus->card, "Line Out", SND_JACK_LINEOUT,
+ &ac97->lo_jack, true, false)) < 0)
+ return err;
+ ad198x_handle_lo_jack(ac97);
+ if (( err = snd_jack_new(ac97->bus->card, "Internal Speaker", SND_JACK_LINEOUT,
+ &ac97->sp_jack, true, true)) < 0)
+ return err;
+ snd_jack_report(ac97->sp_jack, SND_JACK_LINEOUT);
+ return 0;
 }

 static const struct snd_ac97_build_ops patch_ad1981b_build_ops = {

Neil (kingfisher) wrote :

you have to add element master mono to speaker.conf

there appears not to be a speaker.conf
there is;
/usr/share/alsa/cards/PC-Speaker.conf
/usr/share/pulseaudio/alsa-mixer/paths/analog-output-desktop-speaker.conf
/usr/share/pulseaudio/alsa-mixer/paths/analog-output-speaker.conf
/usr/share/pulseaudio/alsa-mixer/profile-sets/force-speaker.conf

you also need to implement headphone jack and line out jack detection kctl and internal speaker phantom jack using bit 2 and bit 3 of AC97_AD_JACK_SPDIF register

Need your guidance, do not know how to implement

Raymond (superquad-vortex2) wrote :

ac97 patch only create hp jack kctl, line out jack kctl and internal speaker phantom jack

BUT still missing the most important part which the driver need to check the status of the jack by interrupt or timer periodically or just call once when pcm start playback

the conf file of three path should only contain the element which affect the path

speaker.conf require master mono expect
lineout.conf require master
headphones.cons require headphone

pulseaudio use conf to find out element require for the path and turn off the other element

you will also need to schedule the driver to call ad198x_handle_hp_jack and ad198x_handle_lo_jack in intel8x0.c periodically similar to hda vt1708 codec

https://git.kernel.org/cgit/linux/kernel/git/tiwai/sound.git/commit/sound/pci/hda/patch_via.c?id=187d333edc0a8e1bb507900ce89853ffe3bd2c84

Created attachment 118276
patch for ac97 codec with HP, Line Out and Speaker

For AC97 codec which

Line Out use Master Playback Volume
Headphone use Headphone Playback Volume
Speaker use Master Mono Playback Volume

Raymond (superquad-vortex2) wrote :

diff --git a/src/modules/alsa/mixer/paths/analog-output-headphones.conf b/src/modules/alsa/mixer/paths/analog-output-headphones.conf
index b6ee70b..e1e7e04 100644
--- a/src/modules/alsa/mixer/paths/analog-output-headphones.conf
+++ b/src/modules/alsa/mixer/paths/analog-output-headphones.conf
@@ -58,12 +58,6 @@ volume = merge
 override-map.1 = all
 override-map.2 = all-left,all-right

-[Element Master]
-switch = mute
-volume = merge
-override-map.1 = all
-override-map.2 = all-left,all-right
-
 [Element Master Mono]
 switch = off
 volume = off
diff --git a/src/modules/alsa/mixer/paths/analog-output-speaker.conf b/src/modules/alsa/mixer/paths/analog-output-speaker.conf
index 39193dd..b610b17 100644
--- a/src/modules/alsa/mixer/paths/analog-output-speaker.conf
+++ b/src/modules/alsa/mixer/paths/analog-output-speaker.conf
@@ -60,16 +60,12 @@ volume = merge
 override-map.1 = all
 override-map.2 = all-left,all-right

-[Element Master]
+[Element Master Mono]
 switch = mute
 volume = merge
 override-map.1 = all
 override-map.2 = all-left,all-right

-[Element Master Mono]
-switch = off
-volume = off
-
 ; This profile path is intended to control the speaker, let's mute headphones
 ; else there will be a spike when plugging in headphones
 [Element Headphone]

SERIAL CONFIGURATION REGISTER Index 0x74

D4

INTS Interrupt Mode Select This bit selects the JS interrupt implementation path.
0 = Bit 0 Slot 12 (modem interrupt).
 1 = Slot 6 valid bit (MIC ADC interrupt).

2.2.9 GLOB_STA—Global Status Register (Audio—D30:F2) I/O Address: Default Value: Lockable: Bit 31:30Reserved. NABMBAR + 30h

GPI Status Change Interrupt (GSCI) — R/WC.
0 =Software clears this bit by writing a 1 to it.
1 =This bit reflects the state of bit 0 in slot 12, and is set when bit 0 of slot 12 is set. This indicates that one of the GPI’s changed state, and that the new values are available in slot 12. This bit is not affected by AC ‘97 Audio Function D3HOT to D0 Reset.

Neil (kingfisher) wrote :

pactl list sinks
Sink #0
 State: SUSPENDED
 Name: alsa_output.pci-0000_00_1e.2.analog-stereo
 Description: Built-in Audio Analogue Stereo
 Driver: module-alsa-card.c
 Sample Specification: s16le 2ch 48000Hz
 Channel Map: front-left,front-right
 Owner Module: 6
 Mute: no
 Volume: 0: 0% 1: 0%
         0: -inf dB 1: -inf dB
         balance 0.00
 Base Volume: 63%
              -12.00 dB
 Monitor Source: alsa_output.pci-0000_00_1e.2.analog-stereo.monitor
 Latency: 0 usec, configured 0 usec
 Flags: HARDWARE HW_MUTE_CTRL HW_VOLUME_CTRL DECIBEL_VOLUME LATENCY
 Properties:
  alsa.resolution_bits = "16"
  device.api = "alsa"
  device.class = "sound"
  alsa.class = "generic"
  alsa.subclass = "generic-mix"
  alsa.name = "Intel ICH7"
  alsa.id = "Intel ICH"
  alsa.subdevice = "0"
  alsa.subdevice_name = "subdevice #0"
  alsa.device = "0"
  alsa.card = "0"
  alsa.card_name = "Intel ICH7"
  alsa.long_card_name = "Intel ICH7 with AD1981B at irq 23"
  alsa.driver_name = "snd_intel8x0"
  device.bus_path = "pci-0000:00:1e.2"
  sysfs.path = "/devices/pci0000:00/0000:00:1e.2/sound/card0"
  device.bus = "pci"
  device.vendor.id = "8086"
  device.vendor.name = "Intel Corporation"
  device.product.id = "27de"
  device.product.name = "OptiPlex GX620"
  device.form_factor = "internal"
  device.string = "front:0"
  device.buffering.buffer_size = "65536"
  device.buffering.fragment_size = "65536"
  device.access_mode = "mmap+timer"
  device.profile.name = "analog-stereo"
  device.profile.description = "Analogue Stereo"
  device.description = "Built-in Audio Analogue Stereo"
  alsa.mixer_name = "Analog Devices AD1981B"
  alsa.components = "AC97a:41445374"
  module-udev-detect.discovered = "1"
  device.icon_name = "audio-card-pci"
 Ports:
  analog-output;output-amplifier-on: Analogue Output / Amplifier (priority: 9910)
  analog-output;output-amplifier-off: Analogue Output / No Amplifier (priority: 9900)
  analog-output-headphones;output-amplifier-on: Headphones / Amplifier (priority: 9010)
  analog-output-headphones;output-amplifier-off: Headphones / No Amplifier (priority: 9000)
 Active Port: analog-output;output-amplifier-off
 Formats:
  pcm
ouput successful from line out and headphones, not from internal speaker

Raymond (superquad-vortex2) wrote :

cat /proc/asound/card0/intel8x0

show the values of global control and global status registers of ac97 controller

SERIAL CONFIGURATION REGISTER Index 0x74

D4

INTS Interrupt Mode Select This bit selects the JS interrupt implementation path.
0 = Bit 0 Slot 12 (modem interrupt).
 1 = Slot 6 valid bit (MIC ADC interrupt).

2.2.9 GLOB_STA—Global Status Register (Audio—D30:F2) I/O Address: Default Value: Lockable: Bit 31:30Reserved. NABMBAR + 30h

GPI Status Change Interrupt (GSCI) — R/WC.
0 =Software clears this bit by writing a 1 to it.
1 =This bit reflects the state of bit 0 in slot 12, and is set when bit 0 of slot 12 is set. This indicates that one of the GPI’s changed state, and that the new values are available in slot 12. This bit is not affected by AC ‘97 Audio Function D3HOT to D0 Reset.

have you patch ac97 codec ?

you need ac97 codec create three jack detect kctls for [Jack Headphone] , [Jack Line Out] and [Jack Speaker Phantom]

the avaliablity of the port is determined by those jack detect kctls

post the output of alsa-info.sh

https://bugs.launchpad.net/ubuntu/+source/alsa-driver/+bug/1078704

however ad1981b is also used in notebook or desktop

this mean that you need to differentitate desktop and notebook

most likely you need pulseaudio to adjust the element in speaker path in alsa-mixer.c if notebook use master for the speaker

Neil (kingfisher) wrote :

no sorry, still trying to figure out what goes where!

Sorry for late reply Raymond, I missed this post... :(

To clarify: I have an audi jack at front and another at the back. Both work if I plug some speakers in them. But this computer also has some internal speakers (sorry, don't know if they are mono or stereo - how can I find that out? I don't have WinXP anymore...) - these internal speakers don't show up in PulseAudio Volume Control.

I was messing around with it some more... If I put this in /lib/udev/rules.d/90-pulseaudio.rules:
ATTRS{subsystem_vendor}=="0x1028", ENV{PULSE_PROFILE_SET}="force-speaker-and-int-mic.conf"
or:
ATTRS{subsystem_vendor}=="0x1028", ENV{PULSE_PROFILE_SET}="force-speaker.conf"
... then I see the internal speakers in volume control (and additional controls in Gnome Alsa mixer), but I still can't get any sound from them.

> js1 st and js0 st seem to be clear , mono out is not muted by FMUTE

I have no idea what you mean? Also, are the patches meant to be applied at kernel sources? Sorry for noob questions, but I have zero experience in audio programming (or setup for that matter)... Would appreciate some pointers on how to apply your suggestions.

Neil (kingfisher) wrote :

are these correct so far?

analog-output-headphones.conf.patch
http://pastebin.com/cSZEpc10

analog-output-speaker.conf.patch
http://pastebin.com/0fXR5gmZ

ac97_codec.h.patch
http://pastebin.com/mkj5tmzN

I need your help with the following section, i'm guessing goes in ac97_codec.h
but i dont know if it does or where in the file to edit:

diff --git a/sound/pci/ac97/ac97_patch.c b/sound/pci/ac97/ac97_patch.c
index f4234ed..581000c 100644
--- a/sound/pci/ac97/ac97_patch.c
+++ b/sound/pci/ac97/ac97_patch.c
@@ -1886,6 +1886,23 @@ static int patch_ad1981a(struct snd_ac97 *ac97)
 static const struct snd_kcontrol_new snd_ac97_ad198x_2cmic =
 AC97_SINGLE("Stereo Mic", AC97_AD_MISC, 6, 1, 0);

+#define AD198X_JS1_ST 0x08
+#define AD198X_JS0_ST 0x04
+
+void ad198x_handle_hp_jack(struct snd_ac97 *ac97)
+{
+ bool hp_plugged = (snd_ac97_read(ac97, AC97_AD_JACK_SPDIF) &
+ AD198X_JS1_ST) == AD198X_JS1_ST;
+ snd_jack_report(ac97->hp_jack, hp_plugged ? SND_JACK_HEADPHONE : 0);
+}
+
+void ad198x_handle_lo_jack(struct snd_ac97 *ac97)
+{
+ bool lo_plugged = (snd_ac97_read(ac97, AC97_AD_JACK_SPDIF) &
+ AD198X_JS0_ST) == AD198X_JS0_ST;
+ snd_jack_report(ac97->lo_jack, lo_plugged ? SND_JACK_LINEOUT : 0);
+}
+
 static int patch_ad1981b_specific(struct snd_ac97 *ac97)
 {
  int err;
@@ -1894,8 +1911,23 @@ static int patch_ad1981b_specific(struct snd_ac97 *ac97)
   return err;
  if (check_list(ac97, ad1981_jacks_blacklist))
   return 0;
- return patch_build_controls(ac97, snd_ac97_ad1981x_jack_sense,
+ err = patch_build_controls(ac97, snd_ac97_ad1981x_jack_sense,
         ARRAY_SIZE(snd_ac97_ad1981x_jack_sense));
+ if (err < 0)
+ return err;
+ if (( err = snd_jack_new(ac97->bus->card, "Headphone", SND_JACK_HEADPHONE,
+ &ac97->hp_jack, true, false)) < 0)
+ return err;
+ ad198x_handle_hp_jack(ac97);
+ if (( err = snd_jack_new(ac97->bus->card, "Line Out", SND_JACK_LINEOUT,
+ &ac97->lo_jack, true, false)) < 0)
+ return err;
+ ad198x_handle_lo_jack(ac97);
+ if (( err = snd_jack_new(ac97->bus->card, "SPEAKER", SND_JACK_LINEOUT,
+ &ac97->sp_jack, true, true)) < 0)
+ return err;
+ snd_jack_report(ac97->sp_jack, SND_JACK_LINEOUT);
+ return 0;
 }

 static const struct snd_ac97_build_ops patch_ad1981b_build_ops = {

Raymond (superquad-vortex2) wrote :

+ if (( err = snd_jack_new(ac97->bus->card, "Speaker Phantom", SND_JACK_LINEOUT,
 + &ac97->sp_jack, true, true)) < 0)
 + return err;

You to check whether "External Amplifier" is hardcoded to which path

the name of this bit in ac97 is EAPD (External Amplifier Power Down)

only those in whitelist call snd_ac97_update_bits(ac97, AC97_AD_JACK_SPDIF, 1<<11, 1<<11);

https://git.kernel.org/cgit/linux/kernel/git/tiwai/sound.git/tree/sound/pci/ac97/ac97_patch.c

static unsigned int ad1981_jacks_whitelist[] = {
 0x0e11005a, /* HP nc4000/4010 */
 0x103c0890, /* HP nc6000 */
 0x103c0938, /* HP nc4220 */
 0x103c099c, /* HP nx6110 */
 0x103c0944, /* HP nc6220 */
 0x103c0934, /* HP nc8220 */
 0x103c006d, /* HP nx9105 */
 0x103c300d, /* HP Compaq dc5100 SFF(PT003AW) */
 0x17340088, /* FSC Scenic-W */
 0 /* end */
};

static void check_ad1981_hp_jack_sense(struct snd_ac97 *ac97)
{
 if (check_list(ac97, ad1981_jacks_whitelist))
  /* enable headphone jack sense */
  snd_ac97_update_bits(ac97, AC97_AD_JACK_SPDIF, 1<<11, 1<<11);
}

http://cgit.freedesktop.org/pulseaudio/pulseaudio/tree/src/modules/alsa/mixer/paths/analog-output.conf.common

another problem is external amplifier defined in

[Element External Amplifier]
switch = select

[Option External Amplifier:on]
name = output-amplifier-on
priority = 10

[Option External Amplifier:off]
name = output-amplifier-off
priority = 0

you have to determine it affect which output paths

Raymond (superquad-vortex2) wrote :

http://cgit.freedesktop.org/pulseaudio/pulseaudio/tree/src/modules/alsa/mixer/paths/analog-output.conf

Intended for the 'default' output if your ac97 codec does not have headphone

when your desktop have three ports, you need jack detect kctl for each port

but element in analog-output.conf affect line out only and does not affect the desktop speaker

Raymond (superquad-vortex2) wrote :

add headphone, line out, speaker phantom jack detect kctl

rename Master to LineOut
rename Master Mono to Speaker

you may need to change system id if you are using gx520

The attachment "dell_gx620.patch" seems to be a patch. If it isn't, please remove the "patch" flag from the attachment, remove the "patch" tag, and if you are a member of the ~ubuntu-reviewers, unsubscribe the team.

[This is an automated message performed by a Launchpad user owned by ~brian-murray, for any issues please contact him.]

tags: added: patch

 if (check_list(ac97, ad1981_jacks_blacklist))
   return 0;
+ if (ac97->subsystem_vendor == 0x1028 &&
+ ac97->subsystem_device == 0x01ad) {

+ snd_ac97_rename_vol_ctl(ac97, "Master Playback", "Line Out Playback");
+ snd_ac97_rename_vol_ctl(ac97, "Master Mono Playback",
+ "Speaker Playback");
+ }
  return patch_build_controls(ac97, snd_ac97_ad1981x_jack_sense,
         ARRAY_SIZE(snd_ac97_ad1981x_jack_sense));
 }

post the output of

cat /proc/asound/card0/intel8x0

check whether bit 0 of the global status of your ich controller change when you enable js interrupt by set js1 mode of ac97 registers using echo

https://git.kernel.org/cgit/linux/kernel/git/tiwai/sound.git/tree/Documentation/sound/alsa/Procfile.txt

AC97 Codec Information
----------------------

card*/codec97#*/ac97#?-?
 Shows the general information of this AC97 codec chip, such as
 name, capabilities, set up.

card*/codec97#0/ac97#?-?+regs
 Shows the AC97 register dump. Useful for debugging.

 When CONFIG_SND_DEBUG is enabled, you can write to this file for
 changing an AC97 register directly. Pass two hex numbers.
 For example,

 # echo 02 9f1f > /proc/asound/card0/codec97#0/ac97#0-0+regs

Neil (kingfisher) wrote :

cat /proc/asound/card0/intel8x0
Intel8x0

Global control : 0xc0000002
Global status : 0x00700100
SDM : 0x00000008
AC'97 codecs ready : primary
AC'97 codecs SDIN : 0 0 0

0:72 = 1804
0:74 = 1001
0:76 = 2010

cat /proc/asound/card0/intel8x0
 Intel8x0

Global control : 0xc0000002
 Global status : 0x00700100
 SDM : 0x00000008
 AC'97 codecs ready : primary
 AC'97 codecs SDIN : 0 0 0

card*/codec97#0/ac97#?-?+regs
  Shows the AC97 register dump. Useful for debugging.

 recompile alsa driver with CONFIG_SND_DEBUG is enabled, you can write to this file for
  changing an AC97 register directly.

Pass two hex numbers.
  For example,

 # echo 02 9f1f > /proc/asound/card0/codec97#0/ac97#0-0+regs

this change master playback volume register

with headphone unplugged

set js1 mode bit of ac97 register 0x72

echo 72 1824 > /proc/asound/card0/codec97#0/ac97#0-0+regs

plug headphone

cat /proc/asound/card0/intel8x0

check bit 0 of global status is set or not

repeat the test with line out by set js0 mode

if gpi bit of global status was set after jack is plugged

we need to add a check of this bit in snd_intel8x0_interrupt and call those ad198x_handle_jp_jack

-- GitLab Migration Automatic Message --

This bug has been migrated to freedesktop.org's GitLab instance and has been closed from further activity.

You can subscribe and participate further through the new bug through this link to our GitLab instance: https://gitlab.freedesktop.org/pulseaudio/pulseaudio/issues/393.

Changed in alsa-driver:
status: Confirmed → Unknown

pon, 30. srp 2018. 13:50 Bug Watch Updater <email address hidden> je
napisao:

> ** Changed in: alsa-driver
> Status: Confirmed => Unknown
>
> --
> You received this bug notification because you are subscribed to the bug
> report.
> https://bugs.launchpad.net/bugs/893210
>
> Title:
> [Dell OptiPlex GX620 - AD1981b, playback] No sound at all
>
> Status in ALSA driver:
> Unknown
> Status in alsa-driver package in Ubuntu:
> Incomplete
>
> Bug description:
> fresh install of ubuntu studio and updates but internal speakers do
> not play. dell optiplex gx620 love ya
>
> ProblemType: Bug
> DistroRelease: Ubuntu 11.10
> Package: alsa-base 1.0.24+dfsg-0ubuntu2
> ProcVersionSignature: Ubuntu 3.0.0-13.22-generic 3.0.6
> Uname: Linux 3.0.0-13-generic i686
> AlsaVersion: Advanced Linux Sound Architecture Driver Version 1.0.24.
> ApportVersion: 1.23-0ubuntu4
> Architecture: i386
> Card0.Amixer.info:
> Card hw:0 'ICH7'/'Intel ICH7 with AD1981B at irq 23'
> Mixer name : 'Analog Devices AD1981B'
> Components : 'AC97a:41445374'
> Controls : 28
> Simple ctrls : 20
> Card1.Amixer.info:
> Card hw:1 'Device'/'C-Media Electronics Inc. USB Multimedia Audio
> Device at usb-0000:00:1d.7-4.1.4,'
> Mixer name : 'USB Mixer'
> Components : 'USB0d8c:0105'
> Controls : 13
> Simple ctrls : 6
> Date: Mon Nov 21 11:51:25 2011
> InstallationMedia: Ubuntu-Studio 11.10 "Oneiric Ocelot" - Release i386
> (20111011.1)
> PackageArchitecture: all
> ProcEnviron:
> PATH=(custom, no user)
> LANG=en_US.UTF-8
> SHELL=/bin/bash
> SourcePackage: alsa-driver
> Symptom: audio
> Symptom_AlsaPlaybackTest: ALSA playback test through plughw:ICH7 failed
> Symptom_Card: CM108 Audio Controller - USB Multimedia Audio Device
> Symptom_Type: No sound at all
> Title: [ICH4 - Intel ICH7, playback] No sound at all
> UpgradeStatus: Upgraded to oneiric on 2011-11-12 (8 days ago)
> dmi.bios.date: 11/30/2006
> dmi.bios.vendor: Dell Inc.
> dmi.bios.version: A11
> dmi.board.name: 0F8101
> dmi.board.vendor: Dell Inc.
> dmi.chassis.type: 15
> dmi.chassis.vendor: Dell Inc.
> dmi.modalias:
> dmi:bvnDellInc.:bvrA11:bd11/30/2006:svnDellInc.:pnOptiPlexGX620:pvr:rvnDellInc.:rn0F8101:rvr:cvnDellInc.:ct15:cvr:
> dmi.product.name: OptiPlex GX620
> dmi.sys.vendor: Dell Inc.
>
> To manage notifications about this bug go to:
> https://bugs.launchpad.net/alsa-driver/+bug/893210/+subscriptions
>

To post a comment you must log in.
This report contains Public information  Edit
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.