• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /freebsd-12-stable/sys/dev/sound/pci/hda/

Lines Matching refs:devinfo

52 #define hdaa_lock(devinfo)	snd_mtxlock((devinfo)->lock)
53 #define hdaa_unlock(devinfo) snd_mtxunlock((devinfo)->lock)
54 #define hdaa_lockassert(devinfo) snd_mtxassert((devinfo)->lock)
55 #define hdaa_lockowned(devinfo) mtx_owned((devinfo)->lock)
202 hdaa_audio_ctl_each(struct hdaa_devinfo *devinfo, int *index)
204 if (devinfo == NULL ||
205 index == NULL || devinfo->ctl == NULL ||
206 devinfo->ctlcnt < 1 ||
207 *index < 0 || *index >= devinfo->ctlcnt)
209 return (&devinfo->ctl[(*index)++]);
213 hdaa_audio_ctl_amp_get(struct hdaa_devinfo *devinfo, nid_t nid, int dir,
219 if (devinfo == NULL || devinfo->ctl == NULL)
223 while ((ctl = hdaa_audio_ctl_each(devinfo, &i)) != NULL) {
269 struct hdaa_devinfo *devinfo = pdevinfo->devinfo;
270 struct hdaa_chan *ch = &devinfo->chans[as->chans[0]];
281 w = hdaa_widget_get(devinfo, as->pins[i]);
383 struct hdaa_devinfo *devinfo = w->devinfo;
384 struct hdaa_audio_as *as = &devinfo->as[w->bindas];
392 as->pdevinfo->dev : devinfo->dev,
397 ctl = hdaa_audio_ctl_amp_get(devinfo,
418 hda_command(devinfo->dev,
427 ctl = hdaa_audio_ctl_amp_get(devinfo,
441 w1 = hdaa_widget_get(devinfo, as->pins[j]);
451 hda_command(devinfo->dev,
466 struct hdaa_devinfo *devinfo;
483 devinfo = pdevinfo->devinfo;
489 w1 = hdaa_widget_get(devinfo, as->pins[i]);
525 hdaa_unlock(devinfo);
527 hdaa_lock(devinfo);
536 struct hdaa_devinfo *devinfo = w->devinfo;
549 res = hda_command(devinfo->dev, HDA_CMD_GET_PIN_SENSE(0, w->nid));
551 if (devinfo->quirks & HDAA_QUIRK_SENSEINV)
559 device_printf(devinfo->dev,
565 as = &devinfo->as[w->bindas];
580 struct hdaa_devinfo *devinfo = arg;
584 hdaa_lock(devinfo);
585 if (devinfo->poll_ival == 0) {
586 hdaa_unlock(devinfo);
589 for (i = 0; i < devinfo->ascnt; i++) {
590 if (devinfo->as[i].hpredir < 0)
592 w = hdaa_widget_get(devinfo, devinfo->as[i].pins[15]);
598 callout_reset(&devinfo->poll_jack, devinfo->poll_ival,
599 hdaa_jack_poll_callback, devinfo);
600 hdaa_unlock(devinfo);
606 struct hdaa_devinfo *devinfo = w->devinfo;
607 device_t dev = devinfo->dev;
687 struct hdaa_devinfo *devinfo = w->devinfo;
699 res = hda_command(devinfo->dev, HDA_CMD_GET_PIN_SENSE(0, w->nid));
708 device_printf(devinfo->dev,
718 res = hda_command(devinfo->dev,
731 res = hda_command(devinfo->dev,
739 hdaa_channels_handler(&devinfo->as[w->bindas]);
746 hdaa_sense_init(struct hdaa_devinfo *devinfo)
752 for (i = devinfo->startnode; i < devinfo->endnode; i++) {
753 w = hdaa_widget_get(devinfo, i);
760 device_get_parent(devinfo->dev),
761 devinfo->dev, w->nid);
762 hda_command(devinfo->dev,
766 as = &devinfo->as[w->bindas];
770 device_printf(devinfo->dev,
777 device_printf(devinfo->dev,
793 callout_reset(&devinfo->poll_jack, 1,
794 hdaa_jack_poll_callback, devinfo);
799 hdaa_sense_deinit(struct hdaa_devinfo *devinfo)
804 callout_stop(&devinfo->poll_jack);
805 for (i = devinfo->startnode; i < devinfo->endnode; i++) {
806 w = hdaa_widget_get(devinfo, i);
812 hda_command(devinfo->dev,
815 device_get_parent(devinfo->dev), devinfo->dev,
945 device_t dev = w->devinfo->dev;
974 device_printf(w->devinfo->dev,
1136 struct hdaa_devinfo *devinfo;
1143 devinfo = w->devinfo;
1209 cw = hdaa_widget_get(devinfo, w->conns[j]);
1324 hdaa_local_patch(struct hdaa_devinfo *devinfo)
1331 for (i = devinfo->startnode; i < devinfo->endnode; i++) {
1332 w = hdaa_widget_get(devinfo, i);
1339 if (resource_string_value(device_get_name(devinfo->dev),
1340 device_get_unit(devinfo->dev), "config", &res) == 0) {
1343 devinfo->quirks |= quirks_on;
1344 devinfo->quirks &= ~quirks_off;
1346 if (devinfo->newquirks == -1)
1347 devinfo->newquirks = devinfo->quirks;
1349 devinfo->quirks = devinfo->newquirks;
1351 device_printf(devinfo->dev,
1352 "Config options: 0x%08x\n", devinfo->quirks);
1355 if (resource_string_value(device_get_name(devinfo->dev),
1356 device_get_unit(devinfo->dev), "gpio_config", &res) == 0) {
1358 devinfo->gpio = strtol(res + 2, NULL, 16);
1360 devinfo->gpio = hdaa_gpio_patch(devinfo->gpio, res);
1363 if (devinfo->newgpio == -1)
1364 devinfo->newgpio = devinfo->gpio;
1366 devinfo->gpio = devinfo->newgpio;
1367 if (devinfo->newgpo == -1)
1368 devinfo->newgpo = devinfo->gpo;
1370 devinfo->gpo = devinfo->newgpo;
1372 device_printf(devinfo->dev, "GPIO config options:");
1374 x = (devinfo->gpio & HDAA_GPIO_MASK(i)) >> HDAA_GPIO_SHIFT(i);
1392 res = hda_command(w->devinfo->dev,
1411 res = hda_command(w->devinfo->dev,
1417 device_printf(w->devinfo->dev,
1426 if (cnid < w->devinfo->startnode ||
1427 cnid >= w->devinfo->endnode) {
1429 device_printf(w->devinfo->dev,
1439 device_printf(w->devinfo->dev,
1450 device_printf(w->devinfo->dev,
1470 device_t dev = w->devinfo->dev;
1489 w->devinfo->outamp_cap;
1501 w->devinfo->inamp_cap;
1512 w->devinfo->supp_stream_formats;
1517 w->devinfo->supp_pcm_size_rate;
1520 w->devinfo->supp_stream_formats;
1522 w->devinfo->supp_pcm_size_rate;
1553 hdaa_unlock(w->devinfo);
1573 hdaa_lock(w->devinfo);
1641 hdaa_widget_get(struct hdaa_devinfo *devinfo, nid_t nid)
1643 if (devinfo == NULL || devinfo->widget == NULL ||
1644 nid < devinfo->startnode || nid >= devinfo->endnode)
1646 return (&devinfo->widget[nid - devinfo->startnode]);
1650 hdaa_audio_ctl_amp_set_internal(struct hdaa_devinfo *devinfo, nid_t nid,
1657 device_printf(devinfo->dev,
1664 hda_command(devinfo->dev,
1672 hda_command(devinfo->dev,
1706 hdaa_audio_ctl_amp_set_internal(ctl->widget->devinfo, nid, ctl->index,
1709 hdaa_audio_ctl_amp_set_internal(ctl->widget->devinfo, nid, ctl->index,
1719 device_printf(w->devinfo->dev,
1722 hda_command(w->devinfo->dev,
1737 struct hdaa_devinfo *devinfo = pdevinfo->devinfo;
1739 hdaa_lock(devinfo);
1740 if (devinfo->quirks & HDAA_QUIRK_FIXEDRATE) {
1750 hdaa_unlock(devinfo);
1752 if (sndbuf_alloc(ch->b, bus_get_dma_tag(devinfo->dev),
1753 hda_get_dma_nocache(devinfo->dev) ? BUS_DMA_NOCACHE :
1845 struct hdaa_audio_as *as = &ch->devinfo->as[ch->as];
1891 w = hdaa_widget_get(ch->devinfo, ch->io[i]);
1910 hda_command(ch->devinfo->dev,
1913 hda_command(ch->devinfo->dev,
1916 hda_command(ch->devinfo->dev,
1919 hda_command(ch->devinfo->dev,
1925 hda_command(ch->devinfo->dev,
1940 wp = hdaa_widget_get(ch->devinfo, nid);
1949 hda_command(ch->devinfo->dev,
1965 hda_command(ch->devinfo->dev,
1971 hda_command(ch->devinfo->dev,
1973 hda_command(ch->devinfo->dev,
1977 hda_command(ch->devinfo->dev,
1980 hda_command(ch->devinfo->dev,
1984 hda_command(ch->devinfo->dev,
1988 hda_command(ch->devinfo->dev,
1990 hda_command(ch->devinfo->dev,
1992 hda_command(ch->devinfo->dev,
1995 hda_command(ch->devinfo->dev,
1997 hda_command(ch->devinfo->dev,
1999 hda_command(ch->devinfo->dev,
2004 hda_command(ch->devinfo->dev,
2007 hda_command(ch->devinfo->dev,
2009 hda_command(ch->devinfo->dev,
2011 hda_command(ch->devinfo->dev,
2013 hda_command(ch->devinfo->dev,
2018 hda_command(ch->devinfo->dev,
2020 hda_command(ch->devinfo->dev,
2082 device_printf(ch->devinfo->dev, "%s: failed blksz=%u blkcnt=%u\n",
2104 struct hdaa_devinfo *devinfo = ch->devinfo;
2111 HDAC_STREAM_STOP(device_get_parent(devinfo->dev), devinfo->dev,
2114 w = hdaa_widget_get(ch->devinfo, ch->io[i]);
2118 hda_command(devinfo->dev,
2121 hda_command(devinfo->dev,
2125 HDAC_STREAM_FREE(device_get_parent(devinfo->dev), devinfo->dev,
2132 struct hdaa_devinfo *devinfo = ch->devinfo;
2137 hda_get_stripes_mask(devinfo->dev)) - 1;
2138 ch->sid = HDAC_STREAM_ALLOC(device_get_parent(devinfo->dev), devinfo->dev,
2143 HDAC_STREAM_RESET(device_get_parent(devinfo->dev), devinfo->dev,
2145 HDAC_STREAM_START(device_get_parent(devinfo->dev), devinfo->dev,
2161 hdaa_lock(ch->devinfo);
2173 hdaa_unlock(ch->devinfo);
2182 struct hdaa_devinfo *devinfo = ch->devinfo;
2185 hdaa_lock(devinfo);
2190 device_get_parent(devinfo->dev), devinfo->dev,
2193 hdaa_unlock(devinfo);
2227 struct hdaa_devinfo *devinfo = pdevinfo->devinfo;
2232 hdaa_lock(devinfo);
2245 for (i = devinfo->startnode; i < devinfo->endnode; i++) {
2246 w = hdaa_widget_get(devinfo, i);
2259 (devinfo->quirks & HDAA_QUIRK_SOFTPCMVOL) ||
2288 if (devinfo->as[pdevinfo->recas].dacs[0][i] < 0)
2290 w = hdaa_widget_get(devinfo,
2291 devinfo->as[pdevinfo->recas].dacs[0][i]);
2297 cw = hdaa_widget_get(devinfo, w->conns[j]);
2315 hdaa_unlock(devinfo);
2357 struct hdaa_devinfo *devinfo = pdevinfo->devinfo;
2365 w = hdaa_widget_get(devinfo, nid);
2382 ctl = hdaa_audio_ctl_amp_get(devinfo, w->nid, HDAA_CTL_IN,
2408 ctl = hdaa_audio_ctl_amp_get(devinfo, w->nid, HDAA_CTL_OUT, -1, 1);
2412 for (i = devinfo->startnode; i < devinfo->endnode; i++) {
2413 wc = hdaa_widget_get(devinfo, i);
2433 struct hdaa_devinfo *devinfo = pdevinfo->devinfo;
2434 struct hdaa_audio_as *as = devinfo->as;
2442 w = hdaa_widget_get(devinfo, nid);
2450 for (i = devinfo->startnode; i < devinfo->endnode; i++) {
2451 wc = hdaa_widget_get(devinfo, i);
2470 ctl = hdaa_audio_ctl_amp_get(devinfo, w->nid,
2488 ctl = hdaa_audio_ctl_amp_get(devinfo, w->nid,
2503 struct hdaa_devinfo *devinfo = pdevinfo->devinfo;
2522 for (i = devinfo->startnode; i < devinfo->endnode; i++) {
2523 w = hdaa_widget_get(devinfo, i);
2542 devinfo->as[w->bindas].dir == HDAA_CTL_OUT) {
2552 cw = hdaa_widget_get(devinfo, w->conns[j]);
2558 devinfo->as[cw->bindas].dir != HDAA_CTL_IN)
2583 struct hdaa_devinfo *devinfo = pdevinfo->devinfo;
2587 hdaa_lock(devinfo);
2597 for (i = devinfo->startnode; i < devinfo->endnode; i++) {
2598 w = hdaa_widget_get(devinfo, i);
2606 if (i >= devinfo->endnode) {
2607 hdaa_unlock(devinfo);
2619 if (devinfo->quirks & HDAA_QUIRK_EAPDINV)
2621 hda_command(devinfo->dev,
2624 hdaa_unlock(devinfo);
2631 hdaa_unlock(devinfo);
2684 struct hdaa_devinfo *devinfo = pdevinfo->devinfo;
2694 w = hdaa_widget_get(devinfo, nid);
2701 cw = hdaa_widget_get(devinfo, w->conns[i]);
2715 ctl = hdaa_audio_ctl_amp_get(devinfo,
2759 struct hdaa_devinfo *devinfo = pdevinfo->devinfo;
2767 hdaa_lock(devinfo);
2769 hdaa_unlock(devinfo);
2772 as = &devinfo->as[pdevinfo->recas];
2776 hdaa_unlock(devinfo);
2782 ch = &devinfo->chans[as->chans[j]];
2784 w = hdaa_widget_get(devinfo, ch->io[i]);
2800 while ((ctl = hdaa_audio_ctl_each(devinfo, &i)) != NULL) {
2830 hdaa_unlock(devinfo);
2843 hdaa_dump_gpi(struct hdaa_devinfo *devinfo)
2845 device_t dev = devinfo->dev;
2849 if (HDA_PARAM_GPIO_COUNT_NUM_GPI(devinfo->gpio_cap) > 0) {
2851 HDA_CMD_GET_GPI_DATA(0, devinfo->nid));
2853 HDA_CMD_GET_GPI_WAKE_ENABLE_MASK(0, devinfo->nid));
2855 HDA_CMD_GET_GPI_UNSOLICITED_ENABLE_MASK(0, devinfo->nid));
2857 HDA_CMD_GET_GPI_STICKY_MASK(0, devinfo->nid));
2858 for (i = 0; i < HDA_PARAM_GPIO_COUNT_NUM_GPI(devinfo->gpio_cap); i++) {
2869 hdaa_dump_gpio(struct hdaa_devinfo *devinfo)
2871 device_t dev = devinfo->dev;
2875 if (HDA_PARAM_GPIO_COUNT_NUM_GPIO(devinfo->gpio_cap) > 0) {
2877 HDA_CMD_GET_GPIO_DATA(0, devinfo->nid));
2879 HDA_CMD_GET_GPIO_ENABLE_MASK(0, devinfo->nid));
2881 HDA_CMD_GET_GPIO_DIRECTION(0, devinfo->nid));
2883 HDA_CMD_GET_GPIO_WAKE_ENABLE_MASK(0, devinfo->nid));
2885 HDA_CMD_GET_GPIO_UNSOLICITED_ENABLE_MASK(0, devinfo->nid));
2887 HDA_CMD_GET_GPIO_STICKY_MASK(0, devinfo->nid));
2888 for (i = 0; i < HDA_PARAM_GPIO_COUNT_NUM_GPIO(devinfo->gpio_cap); i++) {
2907 hdaa_dump_gpo(struct hdaa_devinfo *devinfo)
2909 device_t dev = devinfo->dev;
2913 if (HDA_PARAM_GPIO_COUNT_NUM_GPO(devinfo->gpio_cap) > 0) {
2915 HDA_CMD_GET_GPO_DATA(0, devinfo->nid));
2916 for (i = 0; i < HDA_PARAM_GPIO_COUNT_NUM_GPO(devinfo->gpio_cap); i++) {
2924 hdaa_audio_parse(struct hdaa_devinfo *devinfo)
2931 nid = devinfo->nid;
2933 res = hda_command(devinfo->dev,
2935 devinfo->gpio_cap = res;
2938 device_printf(devinfo->dev,
2941 HDA_PARAM_GPIO_COUNT_NUM_GPIO(devinfo->gpio_cap),
2942 HDA_PARAM_GPIO_COUNT_NUM_GPO(devinfo->gpio_cap),
2943 HDA_PARAM_GPIO_COUNT_NUM_GPI(devinfo->gpio_cap),
2944 HDA_PARAM_GPIO_COUNT_GPI_WAKE(devinfo->gpio_cap),
2945 HDA_PARAM_GPIO_COUNT_GPI_UNSOL(devinfo->gpio_cap));
2946 hdaa_dump_gpi(devinfo);
2947 hdaa_dump_gpio(devinfo);
2948 hdaa_dump_gpo(devinfo);
2951 res = hda_command(devinfo->dev,
2953 devinfo->supp_stream_formats = res;
2955 res = hda_command(devinfo->dev,
2957 devinfo->supp_pcm_size_rate = res;
2959 res = hda_command(devinfo->dev,
2961 devinfo->outamp_cap = res;
2963 res = hda_command(devinfo->dev,
2965 devinfo->inamp_cap = res;
2967 for (i = devinfo->startnode; i < devinfo->endnode; i++) {
2968 w = hdaa_widget_get(devinfo, i);
2970 device_printf(devinfo->dev, "Ghost widget! nid=%d!\n", i);
2972 w->devinfo = devinfo;
2986 hdaa_audio_postprocess(struct hdaa_devinfo *devinfo)
2991 for (i = devinfo->startnode; i < devinfo->endnode; i++) {
2992 w = hdaa_widget_get(devinfo, i);
3000 hdaa_audio_ctl_parse(struct hdaa_devinfo *devinfo)
3009 for (i = devinfo->startnode; i < devinfo->endnode; i++) {
3010 w = hdaa_widget_get(devinfo, i);
3020 cw = hdaa_widget_get(devinfo,
3033 devinfo->ctlcnt = max;
3043 device_printf(devinfo->dev, "unable to allocate ctls!\n");
3044 devinfo->ctlcnt = 0;
3049 for (i = devinfo->startnode; cnt < max && i < devinfo->endnode; i++) {
3051 device_printf(devinfo->dev, "%s: Ctl overflow!\n",
3055 w = hdaa_widget_get(devinfo, i);
3067 device_printf(devinfo->dev,
3097 device_printf(devinfo->dev,
3109 device_printf(devinfo->dev,
3114 cw = hdaa_widget_get(devinfo,
3134 device_printf(devinfo->dev,
3158 devinfo->ctl = ctls;
3162 hdaa_audio_as_parse(struct hdaa_devinfo *devinfo)
3171 for (i = devinfo->startnode; i < devinfo->endnode; i++) {
3172 w = hdaa_widget_get(devinfo, i);
3186 devinfo->ascnt = max;
3196 device_printf(devinfo->dev, "unable to allocate assocs!\n");
3197 devinfo->ascnt = 0;
3213 for (i = devinfo->startnode; i < devinfo->endnode; i++) {
3214 w = hdaa_widget_get(devinfo, i);
3248 device_printf(devinfo->dev, "%s: Duplicate pin %d (%d) "
3254 device_printf(devinfo->dev, "%s: Pin %d has wrong "
3296 device_printf(devinfo->dev,
3299 device_printf(devinfo->dev,
3306 device_printf(devinfo->dev,
3313 devinfo->as = as;
3320 hdaa_audio_trace_dac(struct hdaa_devinfo *devinfo, int as, int seq, nid_t nid,
3329 w = hdaa_widget_get(devinfo, nid);
3334 device_printf(devinfo->dev,
3343 device_printf(devinfo->dev,
3354 device_printf(devinfo->dev,
3366 device_printf(devinfo->dev,
3383 devinfo->as[as].dacs[0][dupseq]))
3397 if ((ret = hdaa_audio_trace_dac(devinfo, as, seq,
3419 device_printf(devinfo->dev,
3431 hdaa_audio_trace_adc(struct hdaa_devinfo *devinfo, int as, int seq, nid_t nid,
3440 w = hdaa_widget_get(devinfo, nid);
3444 device_printf(devinfo->dev,
3451 device_printf(devinfo->dev,
3459 device_printf(devinfo->dev,
3479 for (j = devinfo->startnode; j < devinfo->endnode; j++) {
3480 wc = hdaa_widget_get(devinfo, j);
3489 if ((ret = hdaa_audio_trace_adc(devinfo, as, seq,
3515 device_printf(devinfo->dev,
3526 hdaa_audio_undo_trace(struct hdaa_devinfo *devinfo, int as, int seq)
3531 for (i = devinfo->startnode; i < devinfo->endnode; i++) {
3532 w = hdaa_widget_get(devinfo, i);
3555 hdaa_audio_trace_as_out(struct hdaa_devinfo *devinfo, int as, int seq)
3557 struct hdaa_audio_as *ases = devinfo->as;
3572 device_printf(devinfo->dev,
3580 res = hdaa_audio_trace_dac(devinfo, as, i,
3585 device_printf(devinfo->dev,
3596 device_printf(devinfo->dev,
3606 hdaa_audio_trace_dac(devinfo, as, i,
3610 if (hdaa_audio_trace_as_out(devinfo, as, i + 1))
3613 hdaa_audio_undo_trace(devinfo, as, i);
3625 struct hdaa_devinfo *devinfo = w1->devinfo;
3631 for (i = devinfo->startnode; i < devinfo->endnode; i++) {
3632 w3 = hdaa_widget_get(devinfo, i);
3664 struct hdaa_devinfo *devinfo = w1->devinfo;
3674 w3 = hdaa_widget_get(devinfo, w1->conns[0]);
3677 w4 = hdaa_widget_get(devinfo, w2->conns[0]);
3701 hdaa_audio_adddac(struct hdaa_devinfo *devinfo, int asid)
3703 struct hdaa_audio_as *as = &devinfo->as[asid];
3709 device_printf(devinfo->dev,
3727 w1 = hdaa_widget_get(devinfo, nid1);
3729 for (nid2 = devinfo->startnode; nid2 < devinfo->endnode; nid2++) {
3730 w2 = hdaa_widget_get(devinfo, nid2);
3747 if (nid2 >= devinfo->endnode)
3753 device_printf(devinfo->dev,
3756 w1 = hdaa_widget_get(devinfo, w1->conns[0]);
3757 w2 = hdaa_widget_get(devinfo, w2->conns[0]);
3762 device_printf(devinfo->dev,
3778 hdaa_audio_trace_as_in(struct hdaa_devinfo *devinfo, int as)
3780 struct hdaa_audio_as *ases = devinfo->as;
3784 for (j = devinfo->startnode; j < devinfo->endnode; j++) {
3785 w = hdaa_widget_get(devinfo, j);
3799 device_printf(devinfo->dev,
3804 if (hdaa_audio_trace_adc(devinfo, as, i,
3808 device_printf(devinfo->dev,
3812 hdaa_audio_undo_trace(devinfo, as, -1);
3818 device_printf(devinfo->dev,
3834 hdaa_audio_trace_as_in_mch(struct hdaa_devinfo *devinfo, int as, int seq)
3836 struct hdaa_audio_as *ases = devinfo->as;
3850 device_printf(devinfo->dev,
3856 res = hdaa_audio_trace_adc(devinfo, as, i,
3861 device_printf(devinfo->dev,
3870 device_printf(devinfo->dev,
3875 hdaa_audio_trace_adc(devinfo, as, i,
3879 if (hdaa_audio_trace_as_in_mch(devinfo, as, i + 1))
3882 hdaa_audio_undo_trace(devinfo, as, i);
3892 hdaa_audio_trace_to_out(struct hdaa_devinfo *devinfo, nid_t nid, int depth)
3894 struct hdaa_audio_as *ases = devinfo->as;
3901 w = hdaa_widget_get(devinfo, nid);
3905 device_printf(devinfo->dev,
3913 device_printf(devinfo->dev,
3922 device_printf(devinfo->dev,
3941 for (j = devinfo->startnode; j < devinfo->endnode; j++) {
3942 wc = hdaa_widget_get(devinfo, j);
3950 if (hdaa_audio_trace_to_out(devinfo,
3965 device_printf(devinfo->dev,
3976 hdaa_audio_trace_as_extra(struct hdaa_devinfo *devinfo)
3978 struct hdaa_audio_as *as = devinfo->as;
3986 device_printf(devinfo->dev,
3989 for (j = devinfo->startnode; j < devinfo->endnode; j++) {
3990 w = hdaa_widget_get(devinfo, j);
3998 device_printf(devinfo->dev,
4002 if (hdaa_audio_trace_to_out(devinfo, w->nid, 0)) {
4004 device_printf(devinfo->dev,
4016 device_printf(devinfo->dev,
4019 for (j = devinfo->startnode; j < devinfo->endnode; j++) {
4020 w = hdaa_widget_get(devinfo, j);
4028 device_printf(devinfo->dev,
4032 if (hdaa_audio_trace_to_out(devinfo, w->nid, 0)) {
4034 device_printf(devinfo->dev,
4043 device_printf(devinfo->dev,
4046 for (j = devinfo->startnode; j < devinfo->endnode; j++) {
4047 w = hdaa_widget_get(devinfo, j);
4053 device_printf(devinfo->dev,
4057 if (hdaa_audio_trace_to_out(devinfo, w->nid, 0)) {
4059 device_printf(devinfo->dev,
4072 hdaa_audio_bind_as(struct hdaa_devinfo *devinfo)
4074 struct hdaa_audio_as *as = devinfo->as;
4077 for (j = 0; j < devinfo->ascnt; j++) {
4081 if (devinfo->num_chans == 0) {
4082 devinfo->chans = (struct hdaa_chan *)malloc(
4085 if (devinfo->chans == NULL) {
4086 device_printf(devinfo->dev,
4091 devinfo->chans = (struct hdaa_chan *)realloc(devinfo->chans,
4092 sizeof(struct hdaa_chan) * (devinfo->num_chans + cnt),
4094 if (devinfo->chans == NULL) {
4095 devinfo->num_chans = 0;
4096 device_printf(devinfo->dev,
4101 for (j = 0; j < devinfo->num_chans; j++)
4102 devinfo->chans[j].caps.fmtlist = devinfo->chans[j].fmtlist;
4104 free = devinfo->num_chans;
4105 devinfo->num_chans += cnt;
4108 devinfo->chans[j].devinfo = devinfo;
4109 devinfo->chans[j].as = -1;
4113 for (j = 0; j < devinfo->ascnt; j++) {
4117 devinfo->chans[free].as = j;
4118 devinfo->chans[free].asindex = i;
4119 devinfo->chans[free].dir =
4121 hdaa_pcmchannel_setup(&devinfo->chans[free]);
4129 hdaa_audio_disable_nonaudio(struct hdaa_devinfo *devinfo)
4135 for (i = devinfo->startnode; i < devinfo->endnode; i++) {
4136 w = hdaa_widget_get(devinfo, i);
4143 device_printf(devinfo->dev,
4153 hdaa_audio_disable_useless(struct hdaa_devinfo *devinfo)
4160 for (i = devinfo->startnode; i < devinfo->endnode; i++) {
4161 w = hdaa_widget_get(devinfo, i);
4170 device_printf(devinfo->dev,
4179 device_printf(devinfo->dev,
4191 while ((ctl = hdaa_audio_ctl_each(devinfo, &i)) != NULL) {
4206 device_printf(devinfo->dev,
4216 for (i = devinfo->startnode; i < devinfo->endnode; i++) {
4217 w = hdaa_widget_get(devinfo, i);
4223 cw = hdaa_widget_get(devinfo, w->conns[j]);
4227 device_printf(devinfo->dev,
4250 device_printf(devinfo->dev,
4260 for (k = devinfo->startnode; k < devinfo->endnode; k++) {
4261 cw = hdaa_widget_get(devinfo, k);
4275 device_printf(devinfo->dev,
4286 hdaa_audio_disable_unas(struct hdaa_devinfo *devinfo)
4288 struct hdaa_audio_as *as = devinfo->as;
4294 for (i = devinfo->startnode; i < devinfo->endnode; i++) {
4295 w = hdaa_widget_get(devinfo, i);
4301 device_printf(devinfo->dev,
4309 for (i = devinfo->startnode; i < devinfo->endnode; i++) {
4310 w = hdaa_widget_get(devinfo, i);
4323 device_printf(devinfo->dev,
4329 ctl = hdaa_audio_ctl_amp_get(devinfo, w->nid,
4339 ctl = hdaa_audio_ctl_amp_get(devinfo, w->nid,
4348 for (k = devinfo->startnode; k < devinfo->endnode; k++) {
4349 cw = hdaa_widget_get(devinfo, k);
4356 device_printf(devinfo->dev,
4364 ctl = hdaa_audio_ctl_amp_get(devinfo, k,
4381 hdaa_audio_disable_notselected(struct hdaa_devinfo *devinfo)
4383 struct hdaa_audio_as *as = devinfo->as;
4388 for (i = devinfo->startnode; i < devinfo->endnode; i++) {
4389 w = hdaa_widget_get(devinfo, i);
4405 device_printf(devinfo->dev,
4415 hdaa_audio_disable_crossas(struct hdaa_devinfo *devinfo)
4417 struct hdaa_audio_as *ases = devinfo->as;
4424 for (i = devinfo->startnode; i < devinfo->endnode; i++) {
4425 w = hdaa_widget_get(devinfo, i);
4438 cw = hdaa_widget_get(devinfo, w->conns[j]);
4460 device_printf(devinfo->dev,
4469 while ((ctl = hdaa_audio_ctl_each(devinfo, &i)) != NULL) {
4502 device_printf(devinfo->dev,
4517 hdaa_audio_ctl_source_amp(struct hdaa_devinfo *devinfo, nid_t nid, int index,
4527 w = hdaa_widget_get(devinfo, nid);
4544 ctl = hdaa_audio_ctl_amp_get(devinfo, w->nid, HDAA_CTL_IN,
4579 ctl = hdaa_audio_ctl_amp_get(devinfo, w->nid, HDAA_CTL_OUT, -1, 1);
4591 for (i = devinfo->startnode; i < devinfo->endnode; i++) {
4592 wc = hdaa_widget_get(devinfo, i);
4598 found += hdaa_audio_ctl_source_amp(devinfo,
4623 hdaa_audio_ctl_dest_amp(struct hdaa_devinfo *devinfo, nid_t nid, int index,
4626 struct hdaa_audio_as *as = devinfo->as;
4634 w = hdaa_widget_get(devinfo, nid);
4642 for (i = devinfo->startnode; i < devinfo->endnode; i++) {
4643 wc = hdaa_widget_get(devinfo, i);
4662 ctl = hdaa_audio_ctl_amp_get(devinfo, w->nid,
4686 ctl = hdaa_audio_ctl_amp_get(devinfo, w->nid,
4696 found += hdaa_audio_ctl_dest_amp(devinfo, w->conns[i], -1, ossdev,
4717 hdaa_audio_assign_names(struct hdaa_devinfo *devinfo)
4719 struct hdaa_audio_as *as = devinfo->as;
4740 for (i = devinfo->startnode; i < devinfo->endnode; i++) {
4741 w = hdaa_widget_get(devinfo, i);
4798 for (i = devinfo->startnode; i < devinfo->endnode; i++) {
4799 w = hdaa_widget_get(devinfo, i);
4839 for (i = devinfo->startnode; i < devinfo->endnode; i++) {
4840 w = hdaa_widget_get(devinfo, i);
4864 hdaa_audio_build_tree(struct hdaa_devinfo *devinfo)
4866 struct hdaa_audio_as *as = devinfo->as;
4870 for (j = 0; j < devinfo->ascnt; j++) {
4874 device_printf(devinfo->dev,
4879 res = hdaa_audio_trace_as_out(devinfo, j, 0);
4888 res = hdaa_audio_trace_as_in(devinfo, j);
4890 res = hdaa_audio_trace_as_in_mch(devinfo, j, 0);
4893 device_printf(devinfo->dev,
4899 device_printf(devinfo->dev,
4908 for (j = 0; j < devinfo->ascnt; j++) {
4911 hdaa_audio_adddac(devinfo, j);
4915 hdaa_audio_trace_as_extra(devinfo);
4926 struct hdaa_devinfo *devinfo = w->devinfo;
4930 pdevinfo = devinfo->as[w->bindas].pdevinfo;
4932 pdevinfo = &devinfo->devs[0];
4951 hdaa_audio_assign_mixers(struct hdaa_devinfo *devinfo)
4953 struct hdaa_audio_as *as = devinfo->as;
4958 for (i = devinfo->startnode; i < devinfo->endnode; i++) {
4959 w = hdaa_widget_get(devinfo, i);
4969 found = hdaa_audio_ctl_source_amp(devinfo, w->nid, -1,
4973 found = hdaa_audio_ctl_dest_amp(devinfo, w->nid, -1,
4978 found = hdaa_audio_ctl_dest_amp(devinfo, w->nid, -1,
4984 found = hdaa_audio_ctl_source_amp(devinfo, w->nid, -1,
4989 found += hdaa_audio_ctl_dest_amp(devinfo, w->nid, -1,
4999 cw = hdaa_widget_get(devinfo, w->conns[j]);
5008 found = hdaa_audio_ctl_dest_amp(devinfo,
5019 hdaa_audio_prepare_pin_ctrl(struct hdaa_devinfo *devinfo)
5021 struct hdaa_audio_as *as = devinfo->as;
5026 for (i = 0; i < devinfo->nodecnt; i++) {
5027 w = &devinfo->widget[i];
5037 if (devinfo->init_clear) {
5061 if ((devinfo->quirks & HDAA_QUIRK_IVREF100) &&
5066 else if ((devinfo->quirks & HDAA_QUIRK_IVREF80) &&
5071 else if ((devinfo->quirks & HDAA_QUIRK_IVREF50) &&
5089 if ((devinfo->quirks & HDAA_QUIRK_OVREF100) &&
5094 else if ((devinfo->quirks & HDAA_QUIRK_OVREF80) &&
5099 else if ((devinfo->quirks & HDAA_QUIRK_OVREF50) &&
5109 hdaa_audio_ctl_commit(struct hdaa_devinfo *devinfo)
5115 while ((ctl = hdaa_audio_ctl_each(devinfo, &i)) != NULL) {
5132 hdaa_gpio_commit(struct hdaa_devinfo *devinfo)
5137 numgpio = HDA_PARAM_GPIO_COUNT_NUM_GPIO(devinfo->gpio_cap);
5138 if (devinfo->gpio != 0 && numgpio != 0) {
5139 gdata = hda_command(devinfo->dev,
5140 HDA_CMD_GET_GPIO_DATA(0, devinfo->nid));
5141 gmask = hda_command(devinfo->dev,
5142 HDA_CMD_GET_GPIO_ENABLE_MASK(0, devinfo->nid));
5143 gdir = hda_command(devinfo->dev,
5144 HDA_CMD_GET_GPIO_DIRECTION(0, devinfo->nid));
5146 if ((devinfo->gpio & HDAA_GPIO_MASK(i)) ==
5151 } else if ((devinfo->gpio & HDAA_GPIO_MASK(i)) ==
5156 } else if ((devinfo->gpio & HDAA_GPIO_MASK(i)) ==
5159 } else if ((devinfo->gpio & HDAA_GPIO_MASK(i)) ==
5166 device_printf(devinfo->dev, "GPIO commit\n");
5168 hda_command(devinfo->dev,
5169 HDA_CMD_SET_GPIO_ENABLE_MASK(0, devinfo->nid, gmask));
5170 hda_command(devinfo->dev,
5171 HDA_CMD_SET_GPIO_DIRECTION(0, devinfo->nid, gdir));
5172 hda_command(devinfo->dev,
5173 HDA_CMD_SET_GPIO_DATA(0, devinfo->nid, gdata));
5175 hdaa_dump_gpio(devinfo);
5181 hdaa_gpo_commit(struct hdaa_devinfo *devinfo)
5186 numgpo = HDA_PARAM_GPIO_COUNT_NUM_GPO(devinfo->gpio_cap);
5187 if (devinfo->gpo != 0 && numgpo != 0) {
5188 gdata = hda_command(devinfo->dev,
5189 HDA_CMD_GET_GPO_DATA(0, devinfo->nid));
5191 if ((devinfo->gpio & HDAA_GPIO_MASK(i)) ==
5194 } else if ((devinfo->gpio & HDAA_GPIO_MASK(i)) ==
5200 device_printf(devinfo->dev, "GPO commit\n");
5202 hda_command(devinfo->dev,
5203 HDA_CMD_SET_GPO_DATA(0, devinfo->nid, gdata));
5205 hdaa_dump_gpo(devinfo);
5211 hdaa_audio_commit(struct hdaa_devinfo *devinfo)
5217 hdaa_audio_ctl_commit(devinfo);
5220 for (i = 0; i < devinfo->nodecnt; i++) {
5221 w = &devinfo->widget[i];
5230 hda_command(devinfo->dev,
5238 if (devinfo->quirks &
5241 hda_command(devinfo->dev,
5247 hdaa_gpio_commit(devinfo);
5248 hdaa_gpo_commit(devinfo);
5252 hdaa_powerup(struct hdaa_devinfo *devinfo)
5256 hda_command(devinfo->dev,
5258 devinfo->nid, HDA_CMD_POWER_STATE_D0));
5261 for (i = devinfo->startnode; i < devinfo->endnode; i++) {
5262 hda_command(devinfo->dev,
5272 struct hdaa_devinfo *devinfo = ch->devinfo;
5273 struct hdaa_audio_as *as = devinfo->as;
5291 fmtcap = devinfo->supp_stream_formats;
5292 pcmcap = devinfo->supp_pcm_size_rate;
5309 w = hdaa_widget_get(devinfo, as[ch->as].dacs[ch->asindex][i]);
5371 if (!(devinfo->quirks & HDAA_QUIRK_FORCESTEREO)) {
5474 hdaa_prepare_pcms(struct hdaa_devinfo *devinfo)
5476 struct hdaa_audio_as *as = devinfo->as;
5479 for (i = 0; i < devinfo->ascnt; i++) {
5494 devinfo->num_devs =
5496 devinfo->devs =
5498 devinfo->num_devs * sizeof(struct hdaa_pcm_devinfo),
5500 if (devinfo->devs == NULL) {
5501 device_printf(devinfo->dev,
5505 for (i = 0; i < devinfo->num_devs; i++) {
5506 devinfo->devs[i].index = i;
5507 devinfo->devs[i].devinfo = devinfo;
5508 devinfo->devs[i].playas = -1;
5509 devinfo->devs[i].recas = -1;
5510 devinfo->devs[i].digital = 255;
5512 for (i = 0; i < devinfo->ascnt; i++) {
5515 for (j = 0; j < devinfo->num_devs; j++) {
5516 if (devinfo->devs[j].digital != 255 &&
5517 (!devinfo->devs[j].digital) !=
5521 if (devinfo->devs[j].recas >= 0)
5523 devinfo->devs[j].recas = i;
5525 if (devinfo->devs[j].playas >= 0)
5527 devinfo->devs[j].playas = i;
5529 as[i].pdevinfo = &devinfo->devs[j];
5531 devinfo->chans[as[i].chans[k]].pdevinfo =
5532 &devinfo->devs[j];
5534 devinfo->devs[j].digital = as[i].digital;
5541 hdaa_create_pcms(struct hdaa_devinfo *devinfo)
5545 for (i = 0; i < devinfo->num_devs; i++) {
5546 struct hdaa_pcm_devinfo *pdevinfo = &devinfo->devs[i];
5548 pdevinfo->dev = device_add_child(devinfo->dev, "pcm", -1);
5556 struct hdaa_devinfo *devinfo = pdevinfo->devinfo;
5573 while ((ctl = hdaa_audio_ctl_each(devinfo, &i)) != NULL) {
5686 device_printf(w->devinfo->dev, " Pin cap: 0x%08x", pincap);
5724 device_printf(w->devinfo->dev, " Pin config: 0x%08x\n",
5726 device_printf(w->devinfo->dev, " Pin control: 0x%08x", w->wclass.pin.ctrl);
5752 device_printf(w->devinfo->dev, "%2d %08x %-2d %-2d "
5767 hdaa_dump_pin_configs(struct hdaa_devinfo *devinfo)
5772 device_printf(devinfo->dev, "nid 0x as seq "
5774 for (i = devinfo->startnode; i < devinfo->endnode; i++) {
5775 w = hdaa_widget_get(devinfo, i);
5802 hdaa_dump_nodes(struct hdaa_devinfo *devinfo)
5808 device_printf(devinfo->dev, "\n");
5809 device_printf(devinfo->dev, "Default parameters:\n");
5810 hdaa_dump_audio_formats(devinfo->dev,
5811 devinfo->supp_stream_formats,
5812 devinfo->supp_pcm_size_rate);
5813 hdaa_dump_amp(devinfo->dev, devinfo->inamp_cap, " Input");
5814 hdaa_dump_amp(devinfo->dev, devinfo->outamp_cap, "Output");
5815 for (i = devinfo->startnode; i < devinfo->endnode; i++) {
5816 w = hdaa_widget_get(devinfo, i);
5818 device_printf(devinfo->dev, "Ghost widget nid=%d\n", i);
5821 device_printf(devinfo->dev, "\n");
5822 device_printf(devinfo->dev, " nid: %d%s\n", w->nid,
5824 device_printf(devinfo->dev, " Name: %s\n", w->name);
5825 device_printf(devinfo->dev, " Widget cap: 0x%08x",
5849 device_printf(devinfo->dev, " Association: %d (0x%04x)\n",
5853 device_printf(devinfo->dev, " OSS: %s",
5861 hdaa_dump_audio_formats(devinfo->dev,
5868 device_printf(devinfo->dev, " EAPD: 0x%08x\n",
5872 hdaa_dump_amp(devinfo->dev, w->param.outamp_cap, "Output");
5875 hdaa_dump_amp(devinfo->dev, w->param.inamp_cap, " Input");
5877 device_printf(devinfo->dev, " Connections: %d\n", w->nconns);
5879 cw = hdaa_widget_get(devinfo, w->conns[j]);
5880 device_printf(devinfo->dev, " + %s<- nid=%d [%s]",
5899 struct hdaa_devinfo *devinfo = pdevinfo->devinfo;
5907 w = hdaa_widget_get(devinfo, nid);
5935 cw = hdaa_widget_get(devinfo, w->conns[i]);
5946 struct hdaa_devinfo *devinfo = pdevinfo->devinfo;
5957 chid = devinfo->as[pdevinfo->playas].chans[0];
5959 devinfo->chans[chid].supp_stream_formats,
5960 devinfo->chans[chid].supp_pcm_size_rate);
5961 for (i = 0; i < devinfo->as[pdevinfo->playas].num_chans; i++) {
5962 chid = devinfo->as[pdevinfo->playas].chans[i];
5964 for (nids = devinfo->chans[chid].io; *nids != -1; nids++)
5969 as = &devinfo->as[pdevinfo->playas];
5973 w = hdaa_widget_get(devinfo, as->pins[i]);
5985 struct hdaa_devinfo *devinfo = pdevinfo->devinfo;
5995 chid = devinfo->as[pdevinfo->recas].chans[0];
5997 devinfo->chans[chid].supp_stream_formats,
5998 devinfo->chans[chid].supp_pcm_size_rate);
5999 for (i = 0; i < devinfo->as[pdevinfo->recas].num_chans; i++) {
6000 chid = devinfo->as[pdevinfo->recas].chans[i];
6002 for (nids = devinfo->chans[chid].io; *nids != -1; nids++)
6007 for (i = devinfo->startnode; i < devinfo->endnode; i++) {
6008 w = hdaa_widget_get(devinfo, i);
6024 struct hdaa_devinfo *devinfo = pdevinfo->devinfo;
6029 for (i = devinfo->startnode; i < devinfo->endnode; i++) {
6030 w = hdaa_widget_get(devinfo, i);
6051 struct hdaa_devinfo *devinfo = device_get_softc(dev);
6059 for (i = devinfo->startnode; i < devinfo->endnode; i++) {
6060 w = hdaa_widget_get(devinfo, i);
6103 HDA_PARAM_GPIO_COUNT_NUM_GPIO(devinfo->gpio_cap),
6104 HDA_PARAM_GPIO_COUNT_NUM_GPO(devinfo->gpio_cap),
6105 HDA_PARAM_GPIO_COUNT_NUM_GPI(devinfo->gpio_cap),
6106 HDA_PARAM_GPIO_COUNT_GPI_WAKE(devinfo->gpio_cap),
6107 HDA_PARAM_GPIO_COUNT_GPI_UNSOL(devinfo->gpio_cap));
6108 hdaa_dump_gpi(devinfo);
6109 hdaa_dump_gpio(devinfo);
6110 hdaa_dump_gpo(devinfo);
6116 struct hdaa_devinfo *devinfo = device_get_softc(dev);
6123 hdaa_patch(devinfo);
6127 hdaa_local_patch(devinfo);
6128 hdaa_audio_postprocess(devinfo);
6132 hdaa_audio_ctl_parse(devinfo);
6136 hdaa_audio_disable_nonaudio(devinfo);
6140 hdaa_audio_disable_useless(devinfo);
6143 hdaa_dump_pin_configs(devinfo);
6148 hdaa_audio_as_parse(devinfo);
6152 hdaa_audio_build_tree(devinfo);
6157 hdaa_audio_disable_unas(devinfo);
6162 hdaa_audio_disable_notselected(devinfo);
6166 hdaa_audio_disable_useless(devinfo);
6171 hdaa_audio_disable_crossas(devinfo);
6175 hdaa_audio_disable_useless(devinfo);
6179 hdaa_audio_bind_as(devinfo);
6183 hdaa_audio_assign_names(devinfo);
6187 hdaa_prepare_pcms(devinfo);
6191 hdaa_audio_assign_mixers(devinfo);
6195 hdaa_audio_prepare_pin_ctrl(devinfo);
6199 hdaa_audio_commit(devinfo);
6203 hdaa_patch_direct(devinfo);
6207 hdaa_sense_init(devinfo);
6211 hdaa_create_pcms(devinfo);
6214 if (devinfo->quirks != 0) {
6217 if ((devinfo->quirks &
6231 hdaa_dump_nodes(devinfo);
6239 while ((ctl = hdaa_audio_ctl_each(devinfo, &i)) != NULL) {
6264 struct hdaa_devinfo *devinfo = device_get_softc(dev);
6271 hdaa_sense_deinit(devinfo);
6272 free(devinfo->ctl, M_HDAA);
6273 devinfo->ctl = NULL;
6274 devinfo->ctlcnt = 0;
6275 free(devinfo->as, M_HDAA);
6276 devinfo->as = NULL;
6277 devinfo->ascnt = 0;
6278 free(devinfo->devs, M_HDAA);
6279 devinfo->devs = NULL;
6280 devinfo->num_devs = 0;
6281 free(devinfo->chans, M_HDAA);
6282 devinfo->chans = NULL;
6283 devinfo->num_chans = 0;
6284 for (i = devinfo->startnode; i < devinfo->endnode; i++) {
6285 w = hdaa_widget_get(devinfo, i);
6310 struct hdaa_devinfo *devinfo = oidp->oid_arg1;
6311 device_t dev = devinfo->dev;
6317 hdaa_lock(devinfo);
6318 numgpi = HDA_PARAM_GPIO_COUNT_NUM_GPI(devinfo->gpio_cap);
6321 HDA_CMD_GET_GPI_DATA(0, devinfo->nid));
6323 hdaa_unlock(devinfo);
6334 struct hdaa_devinfo *devinfo = oidp->oid_arg1;
6335 device_t dev = devinfo->dev;
6341 hdaa_lock(devinfo);
6342 numgpio = HDA_PARAM_GPIO_COUNT_NUM_GPIO(devinfo->gpio_cap);
6345 HDA_CMD_GET_GPIO_DATA(0, devinfo->nid));
6347 HDA_CMD_GET_GPIO_ENABLE_MASK(0, devinfo->nid));
6349 HDA_CMD_GET_GPIO_DIRECTION(0, devinfo->nid));
6351 hdaa_unlock(devinfo);
6368 struct hdaa_devinfo *devinfo = oidp->oid_arg1;
6373 gpio = devinfo->newgpio;
6374 numgpio = HDA_PARAM_GPIO_COUNT_NUM_GPIO(devinfo->gpio_cap);
6388 hdaa_lock(devinfo);
6389 devinfo->newgpio = devinfo->gpio = gpio;
6390 hdaa_gpio_commit(devinfo);
6391 hdaa_unlock(devinfo);
6398 struct hdaa_devinfo *devinfo = oidp->oid_arg1;
6399 device_t dev = devinfo->dev;
6405 hdaa_lock(devinfo);
6406 numgpo = HDA_PARAM_GPIO_COUNT_NUM_GPO(devinfo->gpio_cap);
6409 HDA_CMD_GET_GPO_DATA(0, devinfo->nid));
6411 hdaa_unlock(devinfo);
6422 struct hdaa_devinfo *devinfo = oidp->oid_arg1;
6427 gpo = devinfo->newgpo;
6428 numgpo = HDA_PARAM_GPIO_COUNT_NUM_GPO(devinfo->gpio_cap);
6442 hdaa_lock(devinfo);
6443 devinfo->newgpo = devinfo->gpo = gpo;
6444 hdaa_gpo_commit(devinfo);
6445 hdaa_unlock(devinfo);
6453 struct hdaa_devinfo *devinfo;
6457 devinfo = device_get_softc(dev);
6458 if (devinfo == NULL)
6470 hdaa_lock(devinfo);
6473 hdaa_unlock(devinfo);
6484 struct hdaa_devinfo *devinfo = device_get_softc(dev);
6490 hdaa_lock(devinfo);
6494 for (i = 0; i < devinfo->num_chans; i++) {
6495 if (devinfo->chans[i].flags & HDAA_CHN_RUNNING) {
6496 devinfo->chans[i].flags |= HDAA_CHN_SUSPEND;
6497 hdaa_channel_stop(&devinfo->chans[i]);
6503 devinfo->nid);
6505 hda_command(devinfo->dev,
6507 devinfo->nid, HDA_CMD_POWER_STATE_D3));
6508 callout_stop(&devinfo->poll_jack);
6509 hdaa_unlock(devinfo);
6510 callout_drain(&devinfo->poll_jack);
6520 struct hdaa_devinfo *devinfo = device_get_softc(dev);
6526 hdaa_lock(devinfo);
6529 devinfo->nid);
6531 hdaa_powerup(devinfo);
6535 hdaa_audio_commit(devinfo);
6539 hdaa_patch_direct(devinfo);
6543 hdaa_sense_init(devinfo);
6545 hdaa_unlock(devinfo);
6546 for (i = 0; i < devinfo->num_devs; i++) {
6547 struct hdaa_pcm_devinfo *pdevinfo = &devinfo->devs[i];
6556 hdaa_lock(devinfo);
6560 for (i = 0; i < devinfo->num_chans; i++) {
6561 if (devinfo->chans[i].flags & HDAA_CHN_SUSPEND) {
6562 devinfo->chans[i].flags &= ~HDAA_CHN_SUSPEND;
6563 hdaa_channel_start(&devinfo->chans[i]);
6566 hdaa_unlock(devinfo);
6591 struct hdaa_devinfo *devinfo = device_get_softc(dev);
6595 devinfo->dev = dev;
6596 devinfo->lock = HDAC_GET_MTX(device_get_parent(dev), dev);
6597 devinfo->nid = nid;
6598 devinfo->newquirks = -1;
6599 devinfo->newgpio = -1;
6600 devinfo->newgpo = -1;
6601 callout_init(&devinfo->poll_jack, 1);
6602 devinfo->poll_ival = hz;
6604 hdaa_lock(devinfo);
6607 hdaa_unlock(devinfo);
6609 devinfo->nodecnt = HDA_PARAM_SUB_NODE_COUNT_TOTAL(res);
6610 devinfo->startnode = HDA_PARAM_SUB_NODE_COUNT_START(res);
6611 devinfo->endnode = devinfo->startnode + devinfo->nodecnt;
6620 nid, devinfo->nodecnt,
6621 devinfo->startnode, devinfo->endnode - 1);
6624 if (devinfo->nodecnt > 0)
6625 devinfo->widget = (struct hdaa_widget *)malloc(
6626 sizeof(*(devinfo->widget)) * devinfo->nodecnt, M_HDAA,
6629 devinfo->widget = NULL;
6631 hdaa_lock(devinfo);
6635 hdaa_powerup(devinfo);
6639 hdaa_audio_parse(devinfo);
6642 hdaa_dump_pin_configs(devinfo);
6645 hdaa_unlock(devinfo);
6650 &devinfo->newquirks, 0, hdaa_sysctl_quirks, "A",
6655 devinfo, 0, hdaa_sysctl_gpi_state, "A", "GPI state");
6659 devinfo, 0, hdaa_sysctl_gpio_state, "A", "GPIO state");
6663 devinfo, 0, hdaa_sysctl_gpio_config, "A", "GPIO configuration");
6667 devinfo, 0, hdaa_sysctl_gpo_state, "A", "GPO state");
6671 devinfo, 0, hdaa_sysctl_gpo_config, "A", "GPO configuration");
6679 &devinfo->init_clear, 1,"Clear initial pin widget configuration");
6687 struct hdaa_devinfo *devinfo = device_get_softc(dev);
6693 hdaa_lock(devinfo);
6695 devinfo->poll_ival = 0;
6696 callout_stop(&devinfo->poll_jack);
6697 hdaa_unlock(devinfo);
6698 callout_drain(&devinfo->poll_jack);
6700 free(devinfo->widget, M_HDAA);
6707 struct hdaa_devinfo *devinfo = device_get_softc(dev);
6716 as = &devinfo->as[pdevinfo->playas];
6729 as = &devinfo->as[pdevinfo->recas];
6746 struct hdaa_devinfo *devinfo = device_get_softc(dev);
6754 as = &devinfo->as[pdevinfo->playas];
6764 as = &devinfo->as[pdevinfo->recas];
6779 struct hdaa_devinfo *devinfo = device_get_softc(dev);
6783 for (i = 0; i < devinfo->num_chans; i++) {
6784 ch = &devinfo->chans[i];
6789 hdaa_unlock(devinfo);
6791 hdaa_lock(devinfo);
6799 struct hdaa_devinfo *devinfo = device_get_softc(dev);
6807 for (i = devinfo->startnode; i < devinfo->endnode; i++) {
6808 w = hdaa_widget_get(devinfo, i);
6853 hdaa_chan_formula(struct hdaa_devinfo *devinfo, int asid,
6859 as = &devinfo->as[asid];
6860 c = devinfo->chans[as->chans[0]].channels;
6883 hdaa_chan_type(struct hdaa_devinfo *devinfo, int asid)
6889 as = &devinfo->as[asid];
6891 w = hdaa_widget_get(devinfo, as->pins[i]);
6911 struct hdaa_devinfo *devinfo = pdevinfo->devinfo;
6916 ch = &devinfo->chans[as->chans[0]];
6932 devinfo->chans[as->chans[i]].bit32 = ch->bit32;
6941 struct hdaa_devinfo *devinfo = pdevinfo->devinfo;
6948 loc1 = devinfo->as[pdevinfo->playas].location;
6950 loc1 = devinfo->as[pdevinfo->recas].location;
6952 loc2 = devinfo->as[pdevinfo->recas].location;
6963 hdaa_chan_formula(devinfo, pdevinfo->playas,
6965 t1 = hdaa_chan_type(devinfo, pdevinfo->playas);
6968 hdaa_chan_formula(devinfo, pdevinfo->recas,
6970 t2 = hdaa_chan_type(devinfo, pdevinfo->recas);
7008 struct hdaa_devinfo *devinfo = pdevinfo->devinfo;
7074 as = &devinfo->as[pdevinfo->playas];
7077 &devinfo->chans[as->chans[i]]);
7085 as = &devinfo->as[pdevinfo->recas];
7088 &devinfo->chans[as->chans[i]]);
7106 hdaa_lock(devinfo);
7108 as = &devinfo->as[pdevinfo->playas];
7112 as = &devinfo->as[pdevinfo->recas];
7116 hdaa_unlock(devinfo);