Index: share/man/man4/snd_hda.4 =================================================================== --- share/man/man4/snd_hda.4 +++ share/man/man4/snd_hda.4 @@ -227,13 +227,13 @@ particular association. Sequence numbers can be specified as numeric values from 0 to 15. .Pp -The sequence number 15 has a special meaning for output associations. -Output pins with this number and device type +The sequence numbers 14 and 15 have a special meaning for output associations. +Output pins with these numbers and device type .Dq Ar Headphones will duplicate (with automatic mute if jack detection is supported) the first pin in that association. .Pp -The sequence numbers 14 and 15 has a special meaning for input associations. +The sequence numbers 14 and 15 have a special meaning for input associations. Their presence in association defines it as multiplexed or mixed respectively. If none of them are present and there are more than one pin in association, the association will provide multichannel input. Index: sys/dev/sound/pci/hda/hdaa.c =================================================================== --- sys/dev/sound/pci/hda/hdaa.c +++ sys/dev/sound/pci/hda/hdaa.c @@ -419,7 +419,7 @@ } } /* (Un)Mute other pins. */ - for (j = 0; j < 15; j++) { + for (j = 0; j < 14; j++) { if (as->pins[j] <= 0) continue; ctl = hdaa_audio_ctl_amp_get(devinfo, @@ -561,7 +561,8 @@ ); as = &devinfo->as[w->bindas]; - if (as->hpredir >= 0 && as->pins[15] == w->nid) + if (as->hpredir >= 0 && + (as->pins[15] == w->nid || as->pins[14] == w->nid)) hdaa_hpredir_handler(w); if (as->dir == HDAA_CTL_IN && old != 2) hdaa_autorecsrc_handler(as, w); @@ -762,7 +763,8 @@ HDA_CMD_SET_UNSOLICITED_RESPONSE_ENABLE | w->unsol)); } as = &devinfo->as[w->bindas]; - if (as->hpredir >= 0 && as->pins[15] == w->nid) { + if (as->hpredir >= 0 && + (as->pins[15] == w->nid || as->pins[14] == w->nid)) { if (HDA_PARAM_PIN_CAP_PRESENCE_DETECT_CAP(w->wclass.pin.cap) == 0 || (HDA_CONFIG_DEFAULTCONF_MISC(w->wclass.pin.config) & 1) != 0) { device_printf(devinfo->dev, @@ -3268,9 +3270,12 @@ HDA_CONFIG_DEFAULTCONF_LOCATION(w->wclass.pin.config)) { as[cnt].location = -2; } - /* Headphones with seq=15 may mean redirection. */ + /* + * Headphones with seq == 15 (or 14) may mean + * redirection. + */ if (type == HDA_CONFIG_DEFAULTCONF_DEVICE_HP_OUT && - seq == 15) + (seq == 15 || seq == 14)) hpredir = 1; as[cnt].pins[seq] = w->nid; as[cnt].pincnt++; @@ -3562,7 +3567,8 @@ if (i == 16) return (1); - hpredir = (i == 15 && ases[as].fakeredir == 0)?ases[as].hpredir:-1; + hpredir = ((i == 15 || i == 14) && + ases[as].fakeredir == 0) ? ases[as].hpredir : -1; min = 0; do { HDA_BOOTHVERBOSE( @@ -5322,7 +5328,7 @@ ch->io[ret++] = as[ch->as].dacs[ch->asindex][i]; ch->stripecap &= w->wclass.conv.stripecap; /* Do not count redirection pin/dac channels. */ - if (i == 15 && as[ch->as].hpredir >= 0) + if ((i == 15 || i == 14) && as[ch->as].hpredir >= 0) continue; channels += HDA_PARAM_AUDIO_WIDGET_CAP_CC(w->param.widget_cap) + 1; if (HDA_PARAM_AUDIO_WIDGET_CAP_CC(w->param.widget_cap) != 1)