Current-Users archive

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

Sound on ThinkPad T500 (with small patch)


Couple of observations (current/amd64):

1) cdplay only works when using the digital option.  Perhaps the analog 
connection between the DVD player and the audio output is missing.

2) The keyboard volume controls only work after applying this patch

Index: src/sys/dev/pci/azalia_codec.c
RCS file: /cvsroot/src/sys/dev/pci/azalia_codec.c,v
retrieving revision 1.77
diff -u -r1.77 azalia_codec.c
--- src/sys/dev/pci/azalia_codec.c      7 Apr 2009 14:47:53 -0000       1.77
+++ src/sys/dev/pci/azalia_codec.c      15 Jul 2009 21:32:05 -0000
@@ -303,6 +303,11 @@
                this->name = "Analog Devices AD1988B";
                this->init_dacgroup = ad1988_init_dacgroup;
+       case 0x14f15051:
+               this->name = "Conexant CX20561";
+               this->mixer_init = generic_mixer_autoinit;
+               this->init_widget = generic_mixer_init_widget;
+               break;
        case 0x434d4980:
                this->name = "CMedia CMI9880";
                this->init_dacgroup = cmi9880_init_dacgroup;

3) The keyboard volume controls stop working when starting X because 
src/dev/audio.c no longer receives the events.  xev shows that the button 
presses are passed to X.  I do not know if this is the intended behavior.

4) While troubleshooting this, I came across the following code in 
src/dev/audio.c (line 443)

                        if (strcmp(, AudioNdac) == 0 &&
                            sc->sc_outports.master == -1)
                                sc->sc_outports.master = mi.index;

which looks for a DAC that can be used to control the master output volume.  
For the Conexant CX20561, this does not work because the strcmp ends up 
comparing, e.g., the strings "dac10" and "dac", which, of couse, do not match.  
When I changed strcmp statement to

        strncmp(, AudioNdac, strlen(AudioNdac))

the first DAC would end up as output master.  This change, however, assumes 
that "dac10" has a lower index than, e.g., "dac10.lrswap" which may not be a 
safe assumption.  Anyway, with the patch in (2), the change is not needed but 
I wonder if the existing code is correct.


PS For reference, here's the mixerctl -av output

inputs.dac10=198,198  delta=3
inputs.dac10.lrswap=off  [ off on ]
inputs.dac11=126,126  delta=3
inputs.dac11.lrswap=off  [ off on ]
inputs.beep13=85  delta=85
outputs.adc14.source=imic  [ imic ]
record.adc14=126,126  delta=3
record.adc14.lrswap=off  [ off on ]
record.adc15=126,126  delta=3
record.adc15.lrswap=off  [ off on ]
outputs.hp.front.source=dac10  [ dac10 dac11 ]
outputs.hp.front.boost=off  [ off on ]
outputs.mic.front=126,126  delta=63
outputs.ispkr.source=dac10  [ dac10 dac11 ]
outputs.ispkr.eapd=on  [ off on ]
outputs.imic=126,126  delta=63
playback.mode=10  [ 10 11 12 ]
record.mode=14  [ 14 15 ]
outputs.master=198,198  delta=3
inputs.dac=198,198  delta=3
record.volume=126,126  delta=3

Home | Main Index | Thread Index | Old Index