Index: share/man/man4/snd_hda.4 =================================================================== --- share/man/man4/snd_hda.4 +++ share/man/man4/snd_hda.4 @@ -227,8 +227,8 @@ 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 has 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. 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)