diff options
-rw-r--r-- | sys/dev/sound/pci/hda/hdac.c | 315 |
1 files changed, 173 insertions, 142 deletions
diff --git a/sys/dev/sound/pci/hda/hdac.c b/sys/dev/sound/pci/hda/hdac.c index 66211be..5993248 100644 --- a/sys/dev/sound/pci/hda/hdac.c +++ b/sys/dev/sound/pci/hda/hdac.c @@ -83,8 +83,7 @@ #include "mixer_if.h" -#define HDA_DRV_TEST_REV "20080913_0111" -#define HDA_WIDGET_PARSER_REV 2 +#define HDA_DRV_TEST_REV "20080916_0112" SND_DECLARE_FILE("$FreeBSD$"); @@ -94,6 +93,12 @@ SND_DECLARE_FILE("$FreeBSD$"); } \ } while(0) +#define HDA_BOOTHVERBOSE(stmt) do { \ + if (snd_verbose > 3) { \ + stmt \ + } \ +} while(0) + #if 1 #undef HDAC_INTR_EXTRA #define HDAC_INTR_EXTRA 1 @@ -1317,7 +1322,7 @@ hdac_get_capabilities(struct hdac_softc *sc) return (ENXIO); } - HDA_BOOTVERBOSE( + HDA_BOOTHVERBOSE( device_printf(sc->dev, " CORB size: %d\n", sc->corb_size); device_printf(sc->dev, " RIRB size: %d\n", sc->rirb_size); device_printf(sc->dev, " Streams: ISS=%d OSS=%d BSS=%d\n", @@ -1416,7 +1421,7 @@ hdac_dma_alloc(struct hdac_softc *sc, struct hdac_dma *dma, bus_size_t size) goto hdac_dma_alloc_fail; } - HDA_BOOTVERBOSE( + HDA_BOOTHVERBOSE( device_printf(sc->dev, "%s: size=%ju -> roundsz=%ju\n", __func__, (uintmax_t)size, (uintmax_t)roundsz); ); @@ -1809,7 +1814,7 @@ hdac_probe_codec(struct hdac_codec *codec) startnode = HDA_PARAM_SUB_NODE_COUNT_START(subnode); endnode = startnode + HDA_PARAM_SUB_NODE_COUNT_TOTAL(subnode); - HDA_BOOTVERBOSE( + HDA_BOOTHVERBOSE( device_printf(sc->dev, "\tstartnode=%d endnode=%d\n", startnode, endnode); ); @@ -3152,7 +3157,7 @@ hdac_stream_setup(struct hdac_chan *ch) nid_t cad = ch->devinfo->codec->cad; uint16_t fmt, dfmt; - HDA_BOOTVERBOSE( + HDA_BOOTHVERBOSE( device_printf(ch->pdevinfo->dev, "PCMDIR_%s: Stream setup fmt=%08x speed=%d\n", (ch->dir == PCMDIR_PLAY) ? "PLAY" : "REC", @@ -3195,7 +3200,7 @@ hdac_stream_setup(struct hdac_chan *ch) if (as->hpredir >= 0 && i == as->pincnt) chn = 0; - HDA_BOOTVERBOSE( + HDA_BOOTHVERBOSE( device_printf(ch->pdevinfo->dev, "PCMDIR_%s: Stream setup nid=%d: " "fmt=0x%04x, dfmt=0x%04x\n", @@ -3650,7 +3655,7 @@ hdac_audio_ctl_recsel_comm(struct hdac_pcm_devinfo *pdevinfo, uint32_t src, nid_ HDA_AMP_MUTE_DEFAULT, HDA_AMP_VOL_DEFAULT, HDA_AMP_VOL_DEFAULT); } - HDA_BOOTVERBOSE( + HDA_BOOTHVERBOSE( device_printf(pdevinfo->dev, "Recsel (%s): nid %d source %d %s\n", hdac_audio_ctl_ossmixer_mask2allname( @@ -3664,7 +3669,7 @@ hdac_audio_ctl_recsel_comm(struct hdac_pcm_devinfo *pdevinfo, uint32_t src, nid_ continue; /* If we found requested source - select it and exit. */ hdac_widget_connection_select(w, i); - HDA_BOOTVERBOSE( + HDA_BOOTHVERBOSE( device_printf(pdevinfo->dev, "Recsel (%s): nid %d source %d select\n", hdac_audio_ctl_ossmixer_mask2allname( @@ -3801,7 +3806,7 @@ hdac_attach(device_t dev) /* TCSEL -> TC0 */ v = pci_read_config(dev, 0x44, 1); pci_write_config(dev, 0x44, v & 0xf8, 1); - HDA_BOOTVERBOSE( + HDA_BOOTHVERBOSE( device_printf(dev, "TCSEL: 0x%02d -> 0x%02d\n", v, pci_read_config(dev, 0x44, 1)); ); @@ -3865,7 +3870,7 @@ hdac_attach(device_t dev) } #endif - HDA_BOOTVERBOSE( + HDA_BOOTHVERBOSE( device_printf(dev, "DMA Coherency: %s / vendor=0x%04x\n", (sc->flags & HDAC_F_DMA_NOCACHE) ? "Uncacheable" : "PCIe snoop", vendor); @@ -3895,7 +3900,7 @@ hdac_attach(device_t dev) goto hdac_attach_fail; /* Quiesce everything */ - HDA_BOOTVERBOSE( + HDA_BOOTHVERBOSE( device_printf(dev, "Reset controller...\n"); ); hdac_reset(sc, 1); @@ -3943,10 +3948,10 @@ hdac_audio_parse(struct hdac_devinfo *devinfo) devinfo->function.audio.gpio = res; HDA_BOOTVERBOSE( - device_printf(sc->dev, " GPIO: 0x%08x\n", - devinfo->function.audio.gpio); - device_printf(sc->dev, " NumGPIO=%d NumGPO=%d " + device_printf(sc->dev, "GPIO: 0x%08x " + "NumGPIO=%d NumGPO=%d " "NumGPI=%d GPIWake=%d GPIUnsol=%d\n", + devinfo->function.audio.gpio, HDA_PARAM_GPIO_COUNT_NUM_GPIO(devinfo->function.audio.gpio), HDA_PARAM_GPIO_COUNT_NUM_GPO(devinfo->function.audio.gpio), HDA_PARAM_GPIO_COUNT_NUM_GPI(devinfo->function.audio.gpio), @@ -4272,7 +4277,7 @@ hdac_audio_as_parse(struct hdac_devinfo *devinfo) } HDA_BOOTVERBOSE( device_printf(sc->dev, - "%d associations found\n", max); + "%d associations found:\n", max); for (i = 0; i < max; i++) { device_printf(sc->dev, "Association %d (%d) %s%s:\n", @@ -4282,7 +4287,7 @@ hdac_audio_as_parse(struct hdac_devinfo *devinfo) if (as[i].pins[j] == 0) continue; device_printf(sc->dev, - " Pin nid=%d seq=%d\n", + " Pin nid=%d seq=%d\n", as[i].pins[j], j); } } @@ -4439,7 +4444,7 @@ hdac_audio_trace_dac(struct hdac_devinfo *devinfo, int as, int seq, nid_t nid, w = hdac_widget_get(devinfo, nid); if (w == NULL || w->enable == 0) return (0); - HDA_BOOTVERBOSE( + HDA_BOOTHVERBOSE( if (!only) { device_printf(devinfo->codec->sc->dev, " %*stracing via nid %d\n", @@ -4448,7 +4453,7 @@ hdac_audio_trace_dac(struct hdac_devinfo *devinfo, int as, int seq, nid_t nid, ); /* Use only unused widgets */ if (w->bindas >= 0 && w->bindas != as) { - HDA_BOOTVERBOSE( + HDA_BOOTHVERBOSE( if (!only) { device_printf(devinfo->codec->sc->dev, " %*snid %d busy by association %d\n", @@ -4459,7 +4464,7 @@ hdac_audio_trace_dac(struct hdac_devinfo *devinfo, int as, int seq, nid_t nid, } if (dupseq < 0) { if (w->bindseqmask != 0) { - HDA_BOOTVERBOSE( + HDA_BOOTHVERBOSE( if (!only) { device_printf(devinfo->codec->sc->dev, " %*snid %d busy by seqmask %x\n", @@ -4472,7 +4477,7 @@ hdac_audio_trace_dac(struct hdac_devinfo *devinfo, int as, int seq, nid_t nid, /* If this is headphones - allow duplicate first pin. */ if (w->bindseqmask != 0 && (w->bindseqmask & (1 << dupseq)) == 0) { - HDA_BOOTVERBOSE( + HDA_BOOTHVERBOSE( device_printf(devinfo->codec->sc->dev, " %*snid %d busy by seqmask %x\n", depth + 1, "", w->nid, w->bindseqmask); @@ -4524,7 +4529,7 @@ hdac_audio_trace_dac(struct hdac_devinfo *devinfo, int as, int seq, nid_t nid, w->bindas = as; w->bindseqmask |= (1 << seq); } - HDA_BOOTVERBOSE( + HDA_BOOTHVERBOSE( if (!only) { device_printf(devinfo->codec->sc->dev, " %*snid %d returned %d\n", @@ -4550,14 +4555,14 @@ hdac_audio_trace_adc(struct hdac_devinfo *devinfo, int as, int seq, nid_t nid, w = hdac_widget_get(devinfo, nid); if (w == NULL || w->enable == 0) return (0); - HDA_BOOTVERBOSE( + HDA_BOOTHVERBOSE( device_printf(devinfo->codec->sc->dev, " %*stracing via nid %d\n", depth + 1, "", w->nid); ); /* Use only unused widgets */ if (w->bindas >= 0 && w->bindas != as) { - HDA_BOOTVERBOSE( + HDA_BOOTHVERBOSE( device_printf(devinfo->codec->sc->dev, " %*snid %d busy by association %d\n", depth + 1, "", w->nid, w->bindas); @@ -4603,7 +4608,7 @@ hdac_audio_trace_adc(struct hdac_devinfo *devinfo, int as, int seq, nid_t nid, w->bindas = as; w->bindseqmask |= (1 << seq); } - HDA_BOOTVERBOSE( + HDA_BOOTHVERBOSE( device_printf(devinfo->codec->sc->dev, " %*snid %d returned %d\n", depth + 1, "", w->nid, res); @@ -4661,14 +4666,13 @@ hdac_audio_trace_as_out(struct hdac_devinfo *devinfo, int as, int seq) min = 0; res = 0; do { - HDA_BOOTVERBOSE( + HDA_BOOTHVERBOSE( device_printf(devinfo->codec->sc->dev, " Tracing pin %d with min nid %d", ases[as].pins[i], min); if (hpredir >= 0) - printf(" and hpredir %d\n", hpredir); - else - printf("\n"); + printf(" and hpredir %d", hpredir); + printf("\n"); ); /* Trace this pin taking min nid into account. */ res = hdac_audio_trace_dac(devinfo, as, i, @@ -4678,16 +4682,23 @@ hdac_audio_trace_as_out(struct hdac_devinfo *devinfo, int as, int seq) HDA_BOOTVERBOSE( device_printf(devinfo->codec->sc->dev, " Unable to trace pin %d seq %d with min " - "nid %d hpredir %d\n", - ases[as].pins[i], i, min, hpredir); + "nid %d", + ases[as].pins[i], i, min); + if (hpredir >= 0) + printf(" and hpredir %d", hpredir); + printf("\n"); ); return (0); } HDA_BOOTVERBOSE( device_printf(devinfo->codec->sc->dev, - " Pin %d traced to DAC %d%s\n", - ases[as].pins[i], res, - ases[as].fakeredir?" with fake redirection":""); + " Pin %d traced to DAC %d", + ases[as].pins[i], res); + if (hpredir >= 0) + printf(" and hpredir %d", hpredir); + if (ases[as].fakeredir) + printf(" with fake redirection"); + printf("\n"); ); /* Trace again to mark the path */ hdac_audio_trace_dac(devinfo, as, i, @@ -4727,7 +4738,7 @@ hdac_audio_trace_as_in(struct hdac_devinfo *devinfo, int as) if (ases[as].pins[i] == 0) continue; - HDA_BOOTVERBOSE( + HDA_BOOTHVERBOSE( device_printf(devinfo->codec->sc->dev, " Tracing pin %d to ADC %d\n", ases[as].pins[i], j); @@ -4738,7 +4749,7 @@ hdac_audio_trace_as_in(struct hdac_devinfo *devinfo, int as) /* If we failed - return to previous and redo it. */ HDA_BOOTVERBOSE( device_printf(devinfo->codec->sc->dev, - " Unable to trace pin %d to ADC %d\n", + " Unable to trace pin %d to ADC %d, undo traces\n", ases[as].pins[i], j); ); hdac_audio_undo_trace(devinfo, as, -1); @@ -4748,8 +4759,8 @@ hdac_audio_trace_as_in(struct hdac_devinfo *devinfo, int as) } HDA_BOOTVERBOSE( device_printf(devinfo->codec->sc->dev, - " Traced to ADC %d\n", - j); + " Pin %d traced to ADC %d\n", + ases[as].pins[i], j); ); ases[as].dacs[i] = j; } @@ -4762,7 +4773,7 @@ hdac_audio_trace_as_in(struct hdac_devinfo *devinfo, int as) /* * Trace input monitor path from mixer to output association. */ -static nid_t +static int hdac_audio_trace_to_out(struct hdac_devinfo *devinfo, nid_t nid, int depth) { struct hdac_audio_as *ases = devinfo->function.audio.as; @@ -4775,7 +4786,7 @@ hdac_audio_trace_to_out(struct hdac_devinfo *devinfo, nid_t nid, int depth) w = hdac_widget_get(devinfo, nid); if (w == NULL || w->enable == 0) return (0); - HDA_BOOTVERBOSE( + HDA_BOOTHVERBOSE( device_printf(devinfo->codec->sc->dev, " %*stracing via nid %d\n", depth + 1, "", w->nid); @@ -4783,14 +4794,14 @@ hdac_audio_trace_to_out(struct hdac_devinfo *devinfo, nid_t nid, int depth) /* Use only unused widgets */ if (depth > 0 && w->bindas != -1) { if (w->bindas < 0 || ases[w->bindas].dir == HDA_CTL_OUT) { - HDA_BOOTVERBOSE( + HDA_BOOTHVERBOSE( device_printf(devinfo->codec->sc->dev, " %*snid %d found output association %d\n", depth + 1, "", w->nid, w->bindas); ); return (1); } else { - HDA_BOOTVERBOSE( + HDA_BOOTHVERBOSE( device_printf(devinfo->codec->sc->dev, " %*snid %d busy by input association %d\n", depth + 1, "", w->nid, w->bindas); @@ -4833,7 +4844,7 @@ hdac_audio_trace_to_out(struct hdac_devinfo *devinfo, nid_t nid, int depth) if (res) w->bindas = -2; - HDA_BOOTVERBOSE( + HDA_BOOTHVERBOSE( device_printf(devinfo->codec->sc->dev, " %*snid %d returned %d\n", depth + 1, "", w->nid, res); @@ -4893,12 +4904,18 @@ hdac_audio_trace_as_extra(struct hdac_devinfo *devinfo) continue; if (w->type != HDA_PARAM_AUDIO_WIDGET_CAP_TYPE_BEEP_WIDGET) continue; - HDA_BOOTVERBOSE( + HDA_BOOTHVERBOSE( device_printf(devinfo->codec->sc->dev, " Tracing nid %d to out\n", j); ); - hdac_audio_trace_to_out(devinfo, w->nid, 0); + if (hdac_audio_trace_to_out(devinfo, w->nid, 0)) { + HDA_BOOTVERBOSE( + device_printf(devinfo->codec->sc->dev, + " nid %d traced to out\n", + j); + ); + } w->bindas = -2; } } @@ -4979,7 +4996,7 @@ hdac_audio_disable_nonaudio(struct hdac_devinfo *devinfo) if (w->type == HDA_PARAM_AUDIO_WIDGET_CAP_TYPE_POWER_WIDGET || w->type == HDA_PARAM_AUDIO_WIDGET_CAP_TYPE_VOLUME_WIDGET) { w->enable = 0; - HDA_BOOTVERBOSE( + HDA_BOOTHVERBOSE( device_printf(devinfo->codec->sc->dev, " Disabling nid %d due to it's" " non-audio type.\n", @@ -5006,7 +5023,7 @@ hdac_audio_disable_useless(struct hdac_devinfo *devinfo) HDA_CONFIG_DEFAULTCONF_CONNECTIVITY_MASK) == HDA_CONFIG_DEFAULTCONF_CONNECTIVITY_NONE) { w->enable = 0; - HDA_BOOTVERBOSE( + HDA_BOOTHVERBOSE( device_printf(devinfo->codec->sc->dev, " Disabling pin nid %d due" " to None connectivity.\n", @@ -5032,7 +5049,7 @@ hdac_audio_disable_useless(struct hdac_devinfo *devinfo) if (ctl->ndir == HDA_CTL_IN) ctl->widget->connsenable[ctl->index] = 0; done = 0; - HDA_BOOTVERBOSE( + HDA_BOOTHVERBOSE( device_printf(devinfo->codec->sc->dev, " Disabling ctl %d nid %d cnid %d due" " to disabled widget.\n", i, @@ -5053,7 +5070,7 @@ hdac_audio_disable_useless(struct hdac_devinfo *devinfo) cw = hdac_widget_get(devinfo, w->conns[j]); if (cw == NULL || cw->enable == 0) { w->connsenable[j] = 0; - HDA_BOOTVERBOSE( + HDA_BOOTHVERBOSE( device_printf(devinfo->codec->sc->dev, " Disabling nid %d connection %d due" " to disabled child widget.\n", @@ -5076,7 +5093,7 @@ hdac_audio_disable_useless(struct hdac_devinfo *devinfo) if (found == 0) { w->enable = 0; done = 0; - HDA_BOOTVERBOSE( + HDA_BOOTHVERBOSE( device_printf(devinfo->codec->sc->dev, " Disabling nid %d due to all it's" " inputs disabled.\n", w->nid); @@ -5101,7 +5118,7 @@ hdac_audio_disable_useless(struct hdac_devinfo *devinfo) if (found == 0) { w->enable = 0; done = 0; - HDA_BOOTVERBOSE( + HDA_BOOTHVERBOSE( device_printf(devinfo->codec->sc->dev, " Disabling nid %d due to all it's" " consumers disabled.\n", w->nid); @@ -5127,7 +5144,7 @@ hdac_audio_disable_unas(struct hdac_devinfo *devinfo) continue; if (w->bindas == -1) { w->enable = 0; - HDA_BOOTVERBOSE( + HDA_BOOTHVERBOSE( device_printf(devinfo->codec->sc->dev, " Disabling unassociated nid %d.\n", w->nid); @@ -5149,7 +5166,7 @@ hdac_audio_disable_unas(struct hdac_devinfo *devinfo) if (w->connsenable[j] == 0) continue; w->connsenable[j] = 0; - HDA_BOOTVERBOSE( + HDA_BOOTHVERBOSE( device_printf(devinfo->codec->sc->dev, " Disabling connection to input pin " "nid %d conn %d.\n", @@ -5182,7 +5199,7 @@ hdac_audio_disable_unas(struct hdac_devinfo *devinfo) for (j = 0; j < cw->nconns; j++) { if (cw->connsenable[j] && cw->conns[j] == i) { cw->connsenable[j] = 0; - HDA_BOOTVERBOSE( + HDA_BOOTHVERBOSE( device_printf(devinfo->codec->sc->dev, " Disabling connection from output pin " "nid %d conn %d cnid %d.\n", @@ -5231,7 +5248,7 @@ hdac_audio_disable_notselected(struct hdac_devinfo *devinfo) if (w->selconn < 0 || w->selconn == j) continue; w->connsenable[j] = 0; - HDA_BOOTVERBOSE( + HDA_BOOTHVERBOSE( device_printf(devinfo->codec->sc->dev, " Disabling unselected connection " "nid %d conn %d.\n", @@ -5269,7 +5286,7 @@ hdac_audio_disable_crossas(struct hdac_devinfo *devinfo) if (w->bindas == cw->bindas || cw->bindas == -2) continue; w->connsenable[j] = 0; - HDA_BOOTVERBOSE( + HDA_BOOTHVERBOSE( device_printf(devinfo->codec->sc->dev, " Disabling crossassociatement connection " "nid %d conn %d cnid %d.\n", @@ -5293,7 +5310,7 @@ hdac_audio_disable_crossas(struct hdac_devinfo *devinfo) ctl->enable = 0; if (ctl->ndir == HDA_CTL_IN) ctl->widget->connsenable[ctl->index] = 0; - HDA_BOOTVERBOSE( + HDA_BOOTHVERBOSE( device_printf(devinfo->codec->sc->dev, " Disabling crossassociatement connection " "ctl %d nid %d cnid %d.\n", i, @@ -5630,12 +5647,6 @@ hdac_audio_build_tree(struct hdac_devinfo *devinfo) struct hdac_audio_as *as = devinfo->function.audio.as; int j, res; - HDA_BOOTVERBOSE( - device_printf(devinfo->codec->sc->dev, - "HWiP: HDA Widget Parser - Revision %d\n", - HDA_WIDGET_PARSER_REV); - ); - /* Trace all associations in order of their numbers, */ for (j = 0; j < devinfo->function.audio.ascnt; j++) { if (as[j].enable == 0) @@ -6161,7 +6172,7 @@ hdac_dump_audio_formats(device_t dev, uint32_t fcap, uint32_t pcmcap) cap = fcap; if (cap != 0) { device_printf(dev, " Stream cap: 0x%08x\n", cap); - device_printf(dev, " Format:"); + device_printf(dev, " "); if (HDA_PARAM_SUPP_STREAM_FORMATS_AC3(cap)) printf(" AC3"); if (HDA_PARAM_SUPP_STREAM_FORMATS_FLOAT32(cap)) @@ -6173,7 +6184,7 @@ hdac_dump_audio_formats(device_t dev, uint32_t fcap, uint32_t pcmcap) cap = pcmcap; if (cap != 0) { device_printf(dev, " PCM cap: 0x%08x\n", cap); - device_printf(dev, " PCM size:"); + device_printf(dev, " "); if (HDA_PARAM_SUPP_PCM_SIZE_RATE_8BIT(cap)) printf(" 8"); if (HDA_PARAM_SUPP_PCM_SIZE_RATE_16BIT(cap)) @@ -6184,8 +6195,7 @@ hdac_dump_audio_formats(device_t dev, uint32_t fcap, uint32_t pcmcap) printf(" 24"); if (HDA_PARAM_SUPP_PCM_SIZE_RATE_32BIT(cap)) printf(" 32"); - printf("\n"); - device_printf(dev, " PCM rate:"); + printf(" bits,"); if (HDA_PARAM_SUPP_PCM_SIZE_RATE_8KHZ(cap)) printf(" 8"); if (HDA_PARAM_SUPP_PCM_SIZE_RATE_11KHZ(cap)) @@ -6207,17 +6217,16 @@ hdac_dump_audio_formats(device_t dev, uint32_t fcap, uint32_t pcmcap) printf(" 176"); if (HDA_PARAM_SUPP_PCM_SIZE_RATE_192KHZ(cap)) printf(" 192"); - printf("\n"); + printf(" KHz\n"); } } static void hdac_dump_pin(struct hdac_softc *sc, struct hdac_widget *w) { - uint32_t pincap, wcap; + uint32_t pincap; pincap = w->wclass.pin.cap; - wcap = w->param.widget_cap; device_printf(sc->dev, " Pin cap: 0x%08x\n", pincap); device_printf(sc->dev, " "); @@ -6251,8 +6260,6 @@ hdac_dump_pin(struct hdac_softc *sc, struct hdac_widget *w) } if (HDA_PARAM_PIN_CAP_EAPD_CAP(pincap)) printf(" EAPD"); - if (HDA_PARAM_AUDIO_WIDGET_CAP_UNSOL_CAP(wcap)) - printf(" : UNSOL"); printf("\n"); device_printf(sc->dev, " Pin config: 0x%08x\n", w->wclass.pin.config); @@ -6273,7 +6280,7 @@ hdac_dump_pin_config(struct hdac_widget *w, uint32_t conf) { struct hdac_softc *sc = w->devinfo->codec->sc; - device_printf(sc->dev, "nid %d 0x%08x as %2d seq %2d %13s %5s " + device_printf(sc->dev, " nid %d 0x%08x as %2d seq %2d %13s %5s " "jack %2d loc %2d color %7s misc %d%s\n", w->nid, conf, HDA_CONFIG_DEFAULTCONF_ASSOCIATION(conf), @@ -6341,22 +6348,40 @@ hdac_dump_nodes(struct hdac_devinfo *devinfo) continue; } device_printf(sc->dev, "\n"); - device_printf(sc->dev, " nid: %d [%s]%s\n", w->nid, - HDA_PARAM_AUDIO_WIDGET_CAP_DIGITAL(w->param.widget_cap) ? - "DIGITAL" : "ANALOG", + device_printf(sc->dev, " nid: %d%s\n", w->nid, (w->enable == 0) ? " [DISABLED]" : ""); - device_printf(sc->dev, " name: %s\n", w->name); - device_printf(sc->dev, " widget_cap: 0x%08x\n", + device_printf(sc->dev, " Name: %s\n", w->name); + device_printf(sc->dev, " Widget cap: 0x%08x\n", w->param.widget_cap); - device_printf(sc->dev, " Parse flags: 0x%x\n", - w->pflags); - device_printf(sc->dev, " Association: %d (0x%08x)\n", - w->bindas, w->bindseqmask); - device_printf(sc->dev, " OSS: %s", - hdac_audio_ctl_ossmixer_mask2allname(w->ossmask, buf, sizeof(buf))); - if (w->ossdev >= 0) - printf(" (%s)", ossname[w->ossdev]); - printf("\n"); + if (w->param.widget_cap & 0x0ee1) { + device_printf(sc->dev, " "); + if (HDA_PARAM_AUDIO_WIDGET_CAP_LR_SWAP(w->param.widget_cap)) + printf(" LRSWAP"); + if (HDA_PARAM_AUDIO_WIDGET_CAP_POWER_CTRL(w->param.widget_cap)) + printf(" PWR"); + if (HDA_PARAM_AUDIO_WIDGET_CAP_DIGITAL(w->param.widget_cap)) + printf(" DIGITAL"); + if (HDA_PARAM_AUDIO_WIDGET_CAP_UNSOL_CAP(w->param.widget_cap)) + printf(" UNSOL"); + if (HDA_PARAM_AUDIO_WIDGET_CAP_PROC_WIDGET(w->param.widget_cap)) + printf(" PROC"); + if (HDA_PARAM_AUDIO_WIDGET_CAP_STRIPE(w->param.widget_cap)) + printf(" STRIPE"); + if (HDA_PARAM_AUDIO_WIDGET_CAP_STEREO(w->param.widget_cap)) + printf(" STEREO"); + printf("\n"); + } + if (w->bindas != -1) { + device_printf(sc->dev, " Association: %d (0x%08x)\n", + w->bindas, w->bindseqmask); + } + if (w->ossmask != 0 || w->ossdev >= 0) { + device_printf(sc->dev, " OSS: %s", + hdac_audio_ctl_ossmixer_mask2allname(w->ossmask, buf, sizeof(buf))); + if (w->ossdev >= 0) + printf(" (%s)", ossname[w->ossdev]); + printf("\n"); + } if (w->type == HDA_PARAM_AUDIO_WIDGET_CAP_TYPE_AUDIO_OUTPUT || w->type == HDA_PARAM_AUDIO_WIDGET_CAP_TYPE_AUDIO_INPUT) { hdac_dump_audio_formats(sc->dev, @@ -6374,9 +6399,10 @@ hdac_dump_nodes(struct hdac_devinfo *devinfo) if (HDA_PARAM_AUDIO_WIDGET_CAP_IN_AMP(w->param.widget_cap) && w->param.inamp_cap != 0) hdac_dump_amp(sc, w->param.inamp_cap, " Input"); - device_printf(sc->dev, " connections: %d\n", w->nconns); - if (w->nconns > 0) + if (w->nconns > 0) { + device_printf(sc->dev, " connections: %d\n", w->nconns); device_printf(sc->dev, " |\n"); + } for (j = 0; j < w->nconns; j++) { cw = hdac_widget_get(devinfo, w->conns[j]); device_printf(sc->dev, " + %s<- nid=%d [%s]", @@ -6929,7 +6955,7 @@ hdac_attach2(void *arg) hdac_config_fetch(sc, &quirks_on, &quirks_off); - HDA_BOOTVERBOSE( + HDA_BOOTHVERBOSE( device_printf(sc->dev, "HDA Config: on=0x%08x off=0x%08x\n", quirks_on, quirks_off); ); @@ -6943,16 +6969,16 @@ hdac_attach2(void *arg) } /* Start the corb and rirb engines */ - HDA_BOOTVERBOSE( + HDA_BOOTHVERBOSE( device_printf(sc->dev, "Starting CORB Engine...\n"); ); hdac_corb_start(sc); - HDA_BOOTVERBOSE( + HDA_BOOTHVERBOSE( device_printf(sc->dev, "Starting RIRB Engine...\n"); ); hdac_rirb_start(sc); - HDA_BOOTVERBOSE( + HDA_BOOTHVERBOSE( device_printf(sc->dev, "Enabling controller interrupt...\n"); ); @@ -6966,7 +6992,7 @@ hdac_attach2(void *arg) } DELAY(1000); - HDA_BOOTVERBOSE( + HDA_BOOTHVERBOSE( device_printf(sc->dev, "Scanning HDA codecs ...\n"); ); @@ -6980,14 +7006,18 @@ hdac_attach2(void *arg) devinfo = &codec->fgs[fg_index]; HDA_BOOTVERBOSE( device_printf(sc->dev, "\n"); + device_printf(sc->dev, + "Processing %s FG cad=%d nid=%d...\n", + (devinfo->node_type == HDA_PARAM_FCT_GRP_TYPE_NODE_TYPE_AUDIO) ? "audio": + (devinfo->node_type == HDA_PARAM_FCT_GRP_TYPE_NODE_TYPE_MODEM) ? "modem": + "unknown", + devinfo->codec->cad, devinfo->nid); ); if (devinfo->node_type != HDA_PARAM_FCT_GRP_TYPE_NODE_TYPE_AUDIO) { - HDA_BOOTVERBOSE( + HDA_BOOTHVERBOSE( device_printf(sc->dev, - "Power down unsupported non-audio FG" - " cad=%d nid=%d to the D3 state...\n", - codec->cad, devinfo->nid); + "Powering down...\n"); ); hdac_command(sc, HDA_CMD_SET_POWER_STATE(codec->cad, @@ -6996,93 +7026,93 @@ hdac_attach2(void *arg) continue; } - HDA_BOOTVERBOSE( - device_printf(sc->dev, - "Power up audio FG cad=%d nid=%d...\n", - devinfo->codec->cad, devinfo->nid); + HDA_BOOTHVERBOSE( + device_printf(sc->dev, "Powering up...\n"); ); hdac_powerup(devinfo); - HDA_BOOTVERBOSE( + HDA_BOOTHVERBOSE( device_printf(sc->dev, "Parsing audio FG...\n"); ); hdac_audio_parse(devinfo); - HDA_BOOTVERBOSE( + HDA_BOOTHVERBOSE( device_printf(sc->dev, "Parsing Ctls...\n"); ); hdac_audio_ctl_parse(devinfo); - HDA_BOOTVERBOSE( + HDA_BOOTHVERBOSE( device_printf(sc->dev, "Parsing vendor patch...\n"); ); hdac_vendor_patch_parse(devinfo); devinfo->function.audio.quirks |= quirks_on; devinfo->function.audio.quirks &= ~quirks_off; - HDA_BOOTVERBOSE( + HDA_BOOTHVERBOSE( device_printf(sc->dev, "Disabling nonaudio...\n"); ); hdac_audio_disable_nonaudio(devinfo); - HDA_BOOTVERBOSE( + HDA_BOOTHVERBOSE( device_printf(sc->dev, "Disabling useless...\n"); ); hdac_audio_disable_useless(devinfo); HDA_BOOTVERBOSE( device_printf(sc->dev, "Patched pins configuration:\n"); hdac_dump_pin_configs(devinfo); + ); + HDA_BOOTHVERBOSE( device_printf(sc->dev, "Parsing pin associations...\n"); ); hdac_audio_as_parse(devinfo); - HDA_BOOTVERBOSE( + HDA_BOOTHVERBOSE( device_printf(sc->dev, "Building AFG tree...\n"); ); hdac_audio_build_tree(devinfo); - HDA_BOOTVERBOSE( + HDA_BOOTHVERBOSE( device_printf(sc->dev, "Disabling unassociated " "widgets...\n"); ); hdac_audio_disable_unas(devinfo); - HDA_BOOTVERBOSE( + HDA_BOOTHVERBOSE( device_printf(sc->dev, "Disabling nonselected " "inputs...\n"); ); hdac_audio_disable_notselected(devinfo); - HDA_BOOTVERBOSE( + HDA_BOOTHVERBOSE( device_printf(sc->dev, "Disabling useless...\n"); ); hdac_audio_disable_useless(devinfo); - HDA_BOOTVERBOSE( + HDA_BOOTHVERBOSE( device_printf(sc->dev, "Disabling " "crossassociatement connections...\n"); ); hdac_audio_disable_crossas(devinfo); - HDA_BOOTVERBOSE( + HDA_BOOTHVERBOSE( device_printf(sc->dev, "Disabling useless...\n"); ); hdac_audio_disable_useless(devinfo); - HDA_BOOTVERBOSE( + HDA_BOOTHVERBOSE( device_printf(sc->dev, "Binding associations to channels...\n"); ); hdac_audio_bind_as(devinfo); - HDA_BOOTVERBOSE( + HDA_BOOTHVERBOSE( device_printf(sc->dev, "Assigning names to signal sources...\n"); ); hdac_audio_assign_names(devinfo); - HDA_BOOTVERBOSE( + HDA_BOOTHVERBOSE( device_printf(sc->dev, "Assigning mixers to the tree...\n"); ); hdac_audio_assign_mixers(devinfo); - HDA_BOOTVERBOSE( + HDA_BOOTHVERBOSE( device_printf(sc->dev, "Preparing pin controls...\n"); ); hdac_audio_prepare_pin_ctrl(devinfo); - HDA_BOOTVERBOSE( + HDA_BOOTHVERBOSE( device_printf(sc->dev, "AFG commit...\n"); ); hdac_audio_commit(devinfo); - HDA_BOOTVERBOSE( + HDA_BOOTHVERBOSE( device_printf(sc->dev, "Ctls commit...\n"); ); hdac_audio_ctl_commit(devinfo); - HDA_BOOTVERBOSE( + HDA_BOOTHVERBOSE( device_printf(sc->dev, "HP switch init...\n"); ); hdac_hp_switch_init(devinfo); @@ -7150,8 +7180,7 @@ hdac_attach2(void *arg) HDA_BOOTVERBOSE( if (devinfo->function.audio.quirks != 0) { - device_printf(sc->dev, "\n"); - device_printf(sc->dev, "HDA config/quirks:"); + device_printf(sc->dev, "FG config/quirks:"); for (i = 0; i < HDAC_QUIRKS_TAB_LEN; i++) { if ((devinfo->function.audio.quirks & hdac_quirks_tab[i].value) == @@ -7166,7 +7195,9 @@ hdac_attach2(void *arg) device_printf(sc->dev, "| DUMPING HDA NODES |\n"); device_printf(sc->dev, "+-------------------+\n"); hdac_dump_nodes(devinfo); + ); + HDA_BOOTHVERBOSE( device_printf(sc->dev, "\n"); device_printf(sc->dev, "+------------------------+\n"); device_printf(sc->dev, "| DUMPING HDA AMPLIFIERS |\n"); @@ -7232,14 +7263,14 @@ hdac_suspend(device_t dev) struct hdac_devinfo *devinfo; int codec_index, fg_index, i; - HDA_BOOTVERBOSE( + HDA_BOOTHVERBOSE( device_printf(dev, "Suspend...\n"); ); sc = device_get_softc(dev); hdac_lock(sc); - HDA_BOOTVERBOSE( + HDA_BOOTHVERBOSE( device_printf(dev, "Stop streams...\n"); ); for (i = 0; i < sc->num_chans; i++) { @@ -7255,7 +7286,7 @@ hdac_suspend(device_t dev) continue; for (fg_index = 0; fg_index < codec->num_fgs; fg_index++) { devinfo = &codec->fgs[fg_index]; - HDA_BOOTVERBOSE( + HDA_BOOTHVERBOSE( device_printf(dev, "Power down FG" " cad=%d nid=%d to the D3 state...\n", @@ -7268,7 +7299,7 @@ hdac_suspend(device_t dev) } } - HDA_BOOTVERBOSE( + HDA_BOOTHVERBOSE( device_printf(dev, "Reset controller...\n"); ); callout_stop(&sc->poll_hda); @@ -7281,7 +7312,7 @@ hdac_suspend(device_t dev) callout_drain(&sc->poll_hdac); callout_drain(&sc->poll_jack); - HDA_BOOTVERBOSE( + HDA_BOOTHVERBOSE( device_printf(dev, "Suspend done\n"); ); @@ -7301,7 +7332,7 @@ hdac_resume(device_t dev) struct hdac_devinfo *devinfo; int codec_index, fg_index, i; - HDA_BOOTVERBOSE( + HDA_BOOTHVERBOSE( device_printf(dev, "Resume...\n"); ); @@ -7309,7 +7340,7 @@ hdac_resume(device_t dev) hdac_lock(sc); /* Quiesce everything */ - HDA_BOOTVERBOSE( + HDA_BOOTHVERBOSE( device_printf(dev, "Reset controller...\n"); ); hdac_reset(sc, 1); @@ -7319,16 +7350,16 @@ hdac_resume(device_t dev) hdac_rirb_init(sc); /* Start the corb and rirb engines */ - HDA_BOOTVERBOSE( + HDA_BOOTHVERBOSE( device_printf(dev, "Starting CORB Engine...\n"); ); hdac_corb_start(sc); - HDA_BOOTVERBOSE( + HDA_BOOTHVERBOSE( device_printf(dev, "Starting RIRB Engine...\n"); ); hdac_rirb_start(sc); - HDA_BOOTVERBOSE( + HDA_BOOTHVERBOSE( device_printf(dev, "Enabling controller interrupt...\n"); ); @@ -7350,7 +7381,7 @@ hdac_resume(device_t dev) devinfo = &codec->fgs[fg_index]; if (devinfo->node_type != HDA_PARAM_FCT_GRP_TYPE_NODE_TYPE_AUDIO) { - HDA_BOOTVERBOSE( + HDA_BOOTHVERBOSE( device_printf(dev, "Power down unsupported non-audio FG" " cad=%d nid=%d to the D3 state...\n", @@ -7363,21 +7394,21 @@ hdac_resume(device_t dev) continue; } - HDA_BOOTVERBOSE( + HDA_BOOTHVERBOSE( device_printf(dev, "Power up audio FG cad=%d nid=%d...\n", devinfo->codec->cad, devinfo->nid); ); hdac_powerup(devinfo); - HDA_BOOTVERBOSE( + HDA_BOOTHVERBOSE( device_printf(dev, "AFG commit...\n"); ); hdac_audio_commit(devinfo); - HDA_BOOTVERBOSE( + HDA_BOOTHVERBOSE( device_printf(dev, "Ctls commit...\n"); ); hdac_audio_ctl_commit(devinfo); - HDA_BOOTVERBOSE( + HDA_BOOTHVERBOSE( device_printf(dev, "HP switch init...\n"); ); hdac_hp_switch_init(devinfo); @@ -7386,7 +7417,7 @@ hdac_resume(device_t dev) for (i = 0; i < devinfo->function.audio.num_devs; i++) { struct hdac_pcm_devinfo *pdevinfo = &devinfo->function.audio.devs[i]; - HDA_BOOTVERBOSE( + HDA_BOOTHVERBOSE( device_printf(pdevinfo->dev, "OSS mixer reinitialization...\n"); ); @@ -7398,7 +7429,7 @@ hdac_resume(device_t dev) } } - HDA_BOOTVERBOSE( + HDA_BOOTHVERBOSE( device_printf(dev, "Start streams...\n"); ); for (i = 0; i < sc->num_chans; i++) { @@ -7410,7 +7441,7 @@ hdac_resume(device_t dev) hdac_unlock(sc); - HDA_BOOTVERBOSE( + HDA_BOOTHVERBOSE( device_printf(dev, "Resume done\n"); ); @@ -7542,13 +7573,13 @@ hdac_pcm_attach(device_t dev) */ pcm_setflags(dev, pcm_getflags(dev) | SD_F_MPSAFE); - HDA_BOOTVERBOSE( + HDA_BOOTHVERBOSE( device_printf(dev, "OSS mixer initialization...\n"); ); if (mixer_init(dev, &hdac_audio_ctl_ossmixer_class, pdevinfo) != 0) device_printf(dev, "Can't register mixer\n"); - HDA_BOOTVERBOSE( + HDA_BOOTHVERBOSE( device_printf(dev, "Registering PCM channels...\n"); ); if (pcm_register(dev, pdevinfo, (pdevinfo->play >= 0)?1:0, |