To make a 5 hour story short, this is my result: Using early patching, everything works to my linking: 0x16 0x2121101f # dock headphones 0x19 0x21a11030 # dock mic
Thank you very much for your help!
I guess that building a patch รก la ALC269_FIXUP_LENOVO_DOCK is not a big deal, but not my business. If wanted, I can do testing, as soon as I learn how to properly compile and install a custom kernel.
I'll post something on https://github.com/leoluk/thinkpad-stuff/wiki/Haswell-ThinkPad-problemsto tell other people how to fix this right away.
More to my story: I found /sys/class/sound/hwC1D0, which is a Realtek ALC292 device. The NID (what does it stand for?) of interest for the jack's output is indeed 0x16.
When headphones plugged into docking station jack: $ sudo hda-verb /dev/snd/hwC1D0 0x16 GET_PIN_SENSE 0 nid = 0x16, verb = 0xf09, param = 0x0 value = 0x80000000
When not plugged: $ sudo hda-verb /dev/snd/hwC1D0 0x16 GET_PIN_SENSE 0 nid = 0x16, verb = 0xf09, param = 0x0 value = 0x0
GET_PIN_SENSE for 0x19 is 0x80000000 when headset with mic is plugged into dock. Pin sense of 0x19 does not change to 0x80000000 when only plugging 3pole speaker cable. Therefore, I assumed that 0x19 is the dock mic input (turned out later to be true).
I installed alsa-tools-gui and used hdajackretast to override the pin config. It took a while to find out that not all changes are immediate (early patching and restart required).
Using the early patching values from above, the sound is being redirected from the internal speakers to the dock jack, when headphones are connected. [When connecting an additional speaker to the left jack on the notebook, the sound is output to both dock and notebook jack.]
autoconfig: line_outs=1 (0x14/0x0/0x0/0x0/0x0) type:speaker speaker_outs=0 (0x0/0x0/0x0/0x0/0x0) hp_outs=2 (0x15/0x1b/0x0/0x0/0x0) mono: mono_out=0x0 inputs: Internal Mic=0x12 Dock Mic=0x19 Mic=0x1a
speaker-test -c 4 -t wav -Dhw:0,0
Do you mean the driver allow 4 channels play cannot get surround 4.0 playback when model=lenovo-dock is used ? (i.e. channels_max is incorrect )
==> Best config: lo_type=1, wired=1, mio=1 multi_outs = 14/0/0/0 : 2/0/0/0 (type SP) out path: depth=3 :02:0c:14 hp_outs = 15/1b/0/0 : 3/3/0/0 hp path: depth=3 :03:0d:15 hp path: depth=3 :03:0d:1b
PCM 0 p 44100 4 16 Open PCM ALC292 Analog for play Available PCM parameters: channels: 2/4 formats: S16_LE S32_LE rates: 44100 48000 96000 192000 Prepare PCM, rate=44100, channels=4, format=16 bits PCM format_val = 0x4013 hda_codec_setup_stream: NID=0x2, stream=0x1, channel=0, format=0x4013 send: NID=0x2, VERB=0xf06(get_channel_streamid), PARM=0x0 receive: 0x0 send: NID=0x2, VERB=0x706(set_channel_streamid), PARM=0x10 send: NID=0x2, VERB=0xa00(get_stream_format), PARM=0x0 receive: 0x0 send: NID=0x2, VERB=0x240(set_stream_format), PARM=0x13 hda_codec_setup_stream: NID=0x3, stream=0x1, channel=0, format=0x4013 send: NID=0x3, VERB=0xf06(get_channel_streamid), PARM=0x0 receive: 0x0 send: NID=0x3, VERB=0x706(set_channel_streamid), PARM=0x10 send: NID=0x3, VERB=0xa00(get_stream_format), PARM=0x0 receive: 0x0 send: NID=0x3, VERB=0x240(set_stream_format), PARM=0x13 hda_codec_setup_stream: NID=0x3, stream=0x1, channel=0, format=0x4013 PCM Clean up hda_codec_cleanup_stream: NID=0x2 hda_codec_cleanup_stream: NID=0x3 hda_codec_cleanup_stream: NID=0x3