Lines Matching defs:devinfo
50 #define hdaa_lock(devinfo) snd_mtxlock((devinfo)->lock)
51 #define hdaa_unlock(devinfo) snd_mtxunlock((devinfo)->lock)
52 #define hdaa_lockassert(devinfo) snd_mtxassert((devinfo)->lock)
199 hdaa_audio_ctl_each(struct hdaa_devinfo *devinfo, int *index)
201 if (devinfo == NULL ||
202 index == NULL || devinfo->ctl == NULL ||
203 devinfo->ctlcnt < 1 ||
204 *index < 0 || *index >= devinfo->ctlcnt)
206 return (&devinfo->ctl[(*index)++]);
210 hdaa_audio_ctl_amp_get(struct hdaa_devinfo *devinfo, nid_t nid, int dir,
216 if (devinfo == NULL || devinfo->ctl == NULL)
220 while ((ctl = hdaa_audio_ctl_each(devinfo, &i)) != NULL) {
266 struct hdaa_devinfo *devinfo = pdevinfo->devinfo;
267 struct hdaa_chan *ch = &devinfo->chans[as->chans[0]];
279 w = hdaa_widget_get(devinfo, as->pins[i]);
381 struct hdaa_devinfo *devinfo = w->devinfo;
382 struct hdaa_audio_as *as = &devinfo->as[w->bindas];
390 as->pdevinfo->dev : devinfo->dev,
395 ctl = hdaa_audio_ctl_amp_get(devinfo,
416 hda_command(devinfo->dev,
425 ctl = hdaa_audio_ctl_amp_get(devinfo,
439 w1 = hdaa_widget_get(devinfo, as->pins[j]);
449 hda_command(devinfo->dev,
464 struct hdaa_devinfo *devinfo;
481 devinfo = pdevinfo->devinfo;
487 w1 = hdaa_widget_get(devinfo, as->pins[i]);
523 hdaa_unlock(devinfo);
525 hdaa_lock(devinfo);
534 struct hdaa_devinfo *devinfo = w->devinfo;
547 res = hda_command(devinfo->dev, HDA_CMD_GET_PIN_SENSE(0, w->nid));
549 if (devinfo->quirks & HDAA_QUIRK_SENSEINV)
557 device_printf(devinfo->dev,
563 as = &devinfo->as[w->bindas];
578 struct hdaa_devinfo *devinfo = arg;
582 hdaa_lock(devinfo);
583 if (devinfo->poll_ival == 0) {
584 hdaa_unlock(devinfo);
587 for (i = 0; i < devinfo->ascnt; i++) {
588 if (devinfo->as[i].hpredir < 0)
590 w = hdaa_widget_get(devinfo, devinfo->as[i].pins[15]);
596 callout_reset(&devinfo->poll_jack, devinfo->poll_ival,
597 hdaa_jack_poll_callback, devinfo);
598 hdaa_unlock(devinfo);
604 struct hdaa_devinfo *devinfo = w->devinfo;
605 device_t dev = devinfo->dev;
684 struct hdaa_devinfo *devinfo = w->devinfo;
696 res = hda_command(devinfo->dev, HDA_CMD_GET_PIN_SENSE(0, w->nid));
705 device_printf(devinfo->dev,
715 res = hda_command(devinfo->dev,
728 res = hda_command(devinfo->dev,
736 hdaa_channels_handler(&devinfo->as[w->bindas]);
743 hdaa_sense_init(struct hdaa_devinfo *devinfo)
749 for (i = devinfo->startnode; i < devinfo->endnode; i++) {
750 w = hdaa_widget_get(devinfo, i);
757 device_get_parent(devinfo->dev),
758 devinfo->dev, w->nid);
759 hda_command(devinfo->dev,
763 as = &devinfo->as[w->bindas];
767 device_printf(devinfo->dev,
774 device_printf(devinfo->dev,
790 callout_reset(&devinfo->poll_jack, 1,
791 hdaa_jack_poll_callback, devinfo);
796 hdaa_sense_deinit(struct hdaa_devinfo *devinfo)
801 callout_stop(&devinfo->poll_jack);
802 for (i = devinfo->startnode; i < devinfo->endnode; i++) {
803 w = hdaa_widget_get(devinfo, i);
809 hda_command(devinfo->dev,
812 device_get_parent(devinfo->dev), devinfo->dev,
942 device_t dev = w->devinfo->dev;
971 device_printf(w->devinfo->dev,
1132 struct hdaa_devinfo *devinfo;
1139 devinfo = w->devinfo;
1205 cw = hdaa_widget_get(devinfo, w->conns[j]);
1322 hdaa_local_patch(struct hdaa_devinfo *devinfo)
1329 for (i = devinfo->startnode; i < devinfo->endnode; i++) {
1330 w = hdaa_widget_get(devinfo, i);
1337 if (resource_string_value(device_get_name(devinfo->dev),
1338 device_get_unit(devinfo->dev), "config", &res) == 0) {
1341 devinfo->quirks |= quirks_on;
1342 devinfo->quirks &= ~quirks_off;
1344 if (devinfo->newquirks == -1)
1345 devinfo->newquirks = devinfo->quirks;
1347 devinfo->quirks = devinfo->newquirks;
1349 device_printf(devinfo->dev,
1350 "Config options: 0x%08x\n", devinfo->quirks);
1353 if (resource_string_value(device_get_name(devinfo->dev),
1354 device_get_unit(devinfo->dev), "gpio_config", &res) == 0) {
1356 devinfo->gpio = strtol(res + 2, NULL, 16);
1358 devinfo->gpio = hdaa_gpio_patch(devinfo->gpio, res);
1361 if (devinfo->newgpio == -1)
1362 devinfo->newgpio = devinfo->gpio;
1364 devinfo->gpio = devinfo->newgpio;
1365 if (devinfo->newgpo == -1)
1366 devinfo->newgpo = devinfo->gpo;
1368 devinfo->gpo = devinfo->newgpo;
1370 device_printf(devinfo->dev, "GPIO config options:");
1372 x = (devinfo->gpio & HDAA_GPIO_MASK(i)) >> HDAA_GPIO_SHIFT(i);
1390 res = hda_command(w->devinfo->dev,
1409 res = hda_command(w->devinfo->dev,
1415 device_printf(w->devinfo->dev,
1424 if (cnid < w->devinfo->startnode ||
1425 cnid >= w->devinfo->endnode) {
1427 device_printf(w->devinfo->dev,
1437 device_printf(w->devinfo->dev,
1448 device_printf(w->devinfo->dev,
1468 device_t dev = w->devinfo->dev;
1487 w->devinfo->outamp_cap;
1499 w->devinfo->inamp_cap;
1510 w->devinfo->supp_stream_formats;
1515 w->devinfo->supp_pcm_size_rate;
1518 w->devinfo->supp_stream_formats;
1520 w->devinfo->supp_pcm_size_rate;
1551 hdaa_unlock(w->devinfo);
1571 hdaa_lock(w->devinfo);
1639 hdaa_widget_get(struct hdaa_devinfo *devinfo, nid_t nid)
1641 if (devinfo == NULL || devinfo->widget == NULL ||
1642 nid < devinfo->startnode || nid >= devinfo->endnode)
1644 return (&devinfo->widget[nid - devinfo->startnode]);
1648 hdaa_audio_ctl_amp_set_internal(struct hdaa_devinfo *devinfo, nid_t nid,
1655 device_printf(devinfo->dev,
1662 hda_command(devinfo->dev,
1670 hda_command(devinfo->dev,
1704 hdaa_audio_ctl_amp_set_internal(ctl->widget->devinfo, nid, ctl->index,
1707 hdaa_audio_ctl_amp_set_internal(ctl->widget->devinfo, nid, ctl->index,
1717 device_printf(w->devinfo->dev,
1720 hda_command(w->devinfo->dev,
1735 struct hdaa_devinfo *devinfo = pdevinfo->devinfo;
1737 hdaa_lock(devinfo);
1738 if (devinfo->quirks & HDAA_QUIRK_FIXEDRATE) {
1748 hdaa_unlock(devinfo);
1750 if (sndbuf_alloc(ch->b, bus_get_dma_tag(devinfo->dev),
1751 hda_get_dma_nocache(devinfo->dev) ? BUS_DMA_NOCACHE :
1843 struct hdaa_audio_as *as = &ch->devinfo->as[ch->as];
1889 w = hdaa_widget_get(ch->devinfo, ch->io[i]);
1908 hda_command(ch->devinfo->dev,
1911 hda_command(ch->devinfo->dev,
1914 hda_command(ch->devinfo->dev,
1917 hda_command(ch->devinfo->dev,
1923 hda_command(ch->devinfo->dev,
1938 wp = hdaa_widget_get(ch->devinfo, nid);
1947 hda_command(ch->devinfo->dev,
1963 hda_command(ch->devinfo->dev,
1969 hda_command(ch->devinfo->dev,
1971 hda_command(ch->devinfo->dev,
1975 hda_command(ch->devinfo->dev,
1978 hda_command(ch->devinfo->dev,
1982 hda_command(ch->devinfo->dev,
1986 hda_command(ch->devinfo->dev,
1988 hda_command(ch->devinfo->dev,
1990 hda_command(ch->devinfo->dev,
1993 hda_command(ch->devinfo->dev,
1995 hda_command(ch->devinfo->dev,
1997 hda_command(ch->devinfo->dev,
2002 hda_command(ch->devinfo->dev,
2005 hda_command(ch->devinfo->dev,
2007 hda_command(ch->devinfo->dev,
2009 hda_command(ch->devinfo->dev,
2011 hda_command(ch->devinfo->dev,
2016 hda_command(ch->devinfo->dev,
2018 hda_command(ch->devinfo->dev,
2080 device_printf(ch->devinfo->dev, "%s: failed blksz=%u blkcnt=%u\n",
2102 struct hdaa_devinfo *devinfo = ch->devinfo;
2109 HDAC_STREAM_STOP(device_get_parent(devinfo->dev), devinfo->dev,
2112 w = hdaa_widget_get(ch->devinfo, ch->io[i]);
2116 hda_command(devinfo->dev,
2119 hda_command(devinfo->dev,
2123 HDAC_STREAM_FREE(device_get_parent(devinfo->dev), devinfo->dev,
2130 struct hdaa_devinfo *devinfo = ch->devinfo;
2135 hda_get_stripes_mask(devinfo->dev)) - 1;
2136 ch->sid = HDAC_STREAM_ALLOC(device_get_parent(devinfo->dev), devinfo->dev,
2141 HDAC_STREAM_RESET(device_get_parent(devinfo->dev), devinfo->dev,
2143 HDAC_STREAM_START(device_get_parent(devinfo->dev), devinfo->dev,
2159 hdaa_lock(ch->devinfo);
2171 hdaa_unlock(ch->devinfo);
2180 struct hdaa_devinfo *devinfo = ch->devinfo;
2183 hdaa_lock(devinfo);
2188 device_get_parent(devinfo->dev), devinfo->dev,
2191 hdaa_unlock(devinfo);
2225 struct hdaa_devinfo *devinfo = pdevinfo->devinfo;
2230 hdaa_lock(devinfo);
2243 for (i = devinfo->startnode; i < devinfo->endnode; i++) {
2244 w = hdaa_widget_get(devinfo, i);
2257 (devinfo->quirks & HDAA_QUIRK_SOFTPCMVOL) ||
2286 if (devinfo->as[pdevinfo->recas].dacs[0][i] < 0)
2288 w = hdaa_widget_get(devinfo,
2289 devinfo->as[pdevinfo->recas].dacs[0][i]);
2295 cw = hdaa_widget_get(devinfo, w->conns[j]);
2313 hdaa_unlock(devinfo);
2355 struct hdaa_devinfo *devinfo = pdevinfo->devinfo;
2363 w = hdaa_widget_get(devinfo, nid);
2380 ctl = hdaa_audio_ctl_amp_get(devinfo, w->nid, HDAA_CTL_IN,
2406 ctl = hdaa_audio_ctl_amp_get(devinfo, w->nid, HDAA_CTL_OUT, -1, 1);
2410 for (i = devinfo->startnode; i < devinfo->endnode; i++) {
2411 wc = hdaa_widget_get(devinfo, i);
2431 struct hdaa_devinfo *devinfo = pdevinfo->devinfo;
2432 struct hdaa_audio_as *as = devinfo->as;
2440 w = hdaa_widget_get(devinfo, nid);
2448 for (i = devinfo->startnode; i < devinfo->endnode; i++) {
2449 wc = hdaa_widget_get(devinfo, i);
2468 ctl = hdaa_audio_ctl_amp_get(devinfo, w->nid,
2486 ctl = hdaa_audio_ctl_amp_get(devinfo, w->nid,
2501 struct hdaa_devinfo *devinfo = pdevinfo->devinfo;
2520 for (i = devinfo->startnode; i < devinfo->endnode; i++) {
2521 w = hdaa_widget_get(devinfo, i);
2540 devinfo->as[w->bindas].dir == HDAA_CTL_OUT) {
2550 cw = hdaa_widget_get(devinfo, w->conns[j]);
2556 devinfo->as[cw->bindas].dir != HDAA_CTL_IN)
2581 struct hdaa_devinfo *devinfo = pdevinfo->devinfo;
2585 hdaa_lock(devinfo);
2595 for (i = devinfo->startnode; i < devinfo->endnode; i++) {
2596 w = hdaa_widget_get(devinfo, i);
2604 if (i >= devinfo->endnode) {
2605 hdaa_unlock(devinfo);
2617 if (devinfo->quirks & HDAA_QUIRK_EAPDINV)
2619 hda_command(devinfo->dev,
2622 hdaa_unlock(devinfo);
2629 hdaa_unlock(devinfo);
2682 struct hdaa_devinfo *devinfo = pdevinfo->devinfo;
2692 w = hdaa_widget_get(devinfo, nid);
2699 cw = hdaa_widget_get(devinfo, w->conns[i]);
2713 ctl = hdaa_audio_ctl_amp_get(devinfo,
2757 struct hdaa_devinfo *devinfo = pdevinfo->devinfo;
2765 hdaa_lock(devinfo);
2767 hdaa_unlock(devinfo);
2770 as = &devinfo->as[pdevinfo->recas];
2774 hdaa_unlock(devinfo);
2780 ch = &devinfo->chans[as->chans[j]];
2782 w = hdaa_widget_get(devinfo, ch->io[i]);
2798 while ((ctl = hdaa_audio_ctl_each(devinfo, &i)) != NULL) {
2828 hdaa_unlock(devinfo);
2841 hdaa_dump_gpi(struct hdaa_devinfo *devinfo)
2843 device_t dev = devinfo->dev;
2847 if (HDA_PARAM_GPIO_COUNT_NUM_GPI(devinfo->gpio_cap) > 0) {
2849 HDA_CMD_GET_GPI_DATA(0, devinfo->nid));
2851 HDA_CMD_GET_GPI_WAKE_ENABLE_MASK(0, devinfo->nid));
2853 HDA_CMD_GET_GPI_UNSOLICITED_ENABLE_MASK(0, devinfo->nid));
2855 HDA_CMD_GET_GPI_STICKY_MASK(0, devinfo->nid));
2856 for (i = 0; i < HDA_PARAM_GPIO_COUNT_NUM_GPI(devinfo->gpio_cap); i++) {
2867 hdaa_dump_gpio(struct hdaa_devinfo *devinfo)
2869 device_t dev = devinfo->dev;
2873 if (HDA_PARAM_GPIO_COUNT_NUM_GPIO(devinfo->gpio_cap) > 0) {
2875 HDA_CMD_GET_GPIO_DATA(0, devinfo->nid));
2877 HDA_CMD_GET_GPIO_ENABLE_MASK(0, devinfo->nid));
2879 HDA_CMD_GET_GPIO_DIRECTION(0, devinfo->nid));
2881 HDA_CMD_GET_GPIO_WAKE_ENABLE_MASK(0, devinfo->nid));
2883 HDA_CMD_GET_GPIO_UNSOLICITED_ENABLE_MASK(0, devinfo->nid));
2885 HDA_CMD_GET_GPIO_STICKY_MASK(0, devinfo->nid));
2886 for (i = 0; i < HDA_PARAM_GPIO_COUNT_NUM_GPIO(devinfo->gpio_cap); i++) {
2905 hdaa_dump_gpo(struct hdaa_devinfo *devinfo)
2907 device_t dev = devinfo->dev;
2911 if (HDA_PARAM_GPIO_COUNT_NUM_GPO(devinfo->gpio_cap) > 0) {
2913 HDA_CMD_GET_GPO_DATA(0, devinfo->nid));
2914 for (i = 0; i < HDA_PARAM_GPIO_COUNT_NUM_GPO(devinfo->gpio_cap); i++) {
2922 hdaa_audio_parse(struct hdaa_devinfo *devinfo)
2929 nid = devinfo->nid;
2931 res = hda_command(devinfo->dev,
2933 devinfo->gpio_cap = res;
2936 device_printf(devinfo->dev,
2939 HDA_PARAM_GPIO_COUNT_NUM_GPIO(devinfo->gpio_cap),
2940 HDA_PARAM_GPIO_COUNT_NUM_GPO(devinfo->gpio_cap),
2941 HDA_PARAM_GPIO_COUNT_NUM_GPI(devinfo->gpio_cap),
2942 HDA_PARAM_GPIO_COUNT_GPI_WAKE(devinfo->gpio_cap),
2943 HDA_PARAM_GPIO_COUNT_GPI_UNSOL(devinfo->gpio_cap));
2944 hdaa_dump_gpi(devinfo);
2945 hdaa_dump_gpio(devinfo);
2946 hdaa_dump_gpo(devinfo);
2949 res = hda_command(devinfo->dev,
2951 devinfo->supp_stream_formats = res;
2953 res = hda_command(devinfo->dev,
2955 devinfo->supp_pcm_size_rate = res;
2957 res = hda_command(devinfo->dev,
2959 devinfo->outamp_cap = res;
2961 res = hda_command(devinfo->dev,
2963 devinfo->inamp_cap = res;
2965 for (i = devinfo->startnode; i < devinfo->endnode; i++) {
2966 w = hdaa_widget_get(devinfo, i);
2968 device_printf(devinfo->dev, "Ghost widget! nid=%d!\n", i);
2970 w->devinfo = devinfo;
2984 hdaa_audio_postprocess(struct hdaa_devinfo *devinfo)
2989 for (i = devinfo->startnode; i < devinfo->endnode; i++) {
2990 w = hdaa_widget_get(devinfo, i);
2998 hdaa_audio_ctl_parse(struct hdaa_devinfo *devinfo)
3007 for (i = devinfo->startnode; i < devinfo->endnode; i++) {
3008 w = hdaa_widget_get(devinfo, i);
3018 cw = hdaa_widget_get(devinfo,
3031 devinfo->ctlcnt = max;
3040 device_printf(devinfo->dev, "unable to allocate ctls!\n");
3041 devinfo->ctlcnt = 0;
3046 for (i = devinfo->startnode; cnt < max && i < devinfo->endnode; i++) {
3048 device_printf(devinfo->dev, "%s: Ctl overflow!\n",
3052 w = hdaa_widget_get(devinfo, i);
3064 device_printf(devinfo->dev,
3094 device_printf(devinfo->dev,
3106 device_printf(devinfo->dev,
3111 cw = hdaa_widget_get(devinfo,
3131 device_printf(devinfo->dev,
3155 devinfo->ctl = ctls;
3159 hdaa_audio_as_parse(struct hdaa_devinfo *devinfo)
3168 for (i = devinfo->startnode; i < devinfo->endnode; i++) {
3169 w = hdaa_widget_get(devinfo, i);
3183 devinfo->ascnt = max;
3192 device_printf(devinfo->dev, "unable to allocate assocs!\n");
3193 devinfo->ascnt = 0;
3209 for (i = devinfo->startnode; i < devinfo->endnode; i++) {
3210 w = hdaa_widget_get(devinfo, i);
3244 device_printf(devinfo->dev, "%s: Duplicate pin %d (%d) "
3250 device_printf(devinfo->dev, "%s: Pin %d has wrong "
3292 device_printf(devinfo->dev,
3295 device_printf(devinfo->dev,
3302 device_printf(devinfo->dev,
3309 devinfo->as = as;
3316 hdaa_audio_trace_dac(struct hdaa_devinfo *devinfo, int as, int seq, nid_t nid,
3325 w = hdaa_widget_get(devinfo, nid);
3330 device_printf(devinfo->dev,
3339 device_printf(devinfo->dev,
3350 device_printf(devinfo->dev,
3362 device_printf(devinfo->dev,
3379 devinfo->as[as].dacs[0][dupseq]))
3393 if ((ret = hdaa_audio_trace_dac(devinfo, as, seq,
3415 device_printf(devinfo->dev,
3427 hdaa_audio_trace_adc(struct hdaa_devinfo *devinfo, int as, int seq, nid_t nid,
3436 w = hdaa_widget_get(devinfo, nid);
3440 device_printf(devinfo->dev,
3447 device_printf(devinfo->dev,
3455 device_printf(devinfo->dev,
3475 for (j = devinfo->startnode; j < devinfo->endnode; j++) {
3476 wc = hdaa_widget_get(devinfo, j);
3485 if ((ret = hdaa_audio_trace_adc(devinfo, as, seq,
3511 device_printf(devinfo->dev,
3522 hdaa_audio_undo_trace(struct hdaa_devinfo *devinfo, int as, int seq)
3527 for (i = devinfo->startnode; i < devinfo->endnode; i++) {
3528 w = hdaa_widget_get(devinfo, i);
3551 hdaa_audio_trace_as_out(struct hdaa_devinfo *devinfo, int as, int seq)
3553 struct hdaa_audio_as *ases = devinfo->as;
3568 device_printf(devinfo->dev,
3576 res = hdaa_audio_trace_dac(devinfo, as, i,
3581 device_printf(devinfo->dev,
3592 device_printf(devinfo->dev,
3602 hdaa_audio_trace_dac(devinfo, as, i,
3606 if (hdaa_audio_trace_as_out(devinfo, as, i + 1))
3609 hdaa_audio_undo_trace(devinfo, as, i);
3621 struct hdaa_devinfo *devinfo = w1->devinfo;
3627 for (i = devinfo->startnode; i < devinfo->endnode; i++) {
3628 w3 = hdaa_widget_get(devinfo, i);
3660 struct hdaa_devinfo *devinfo = w1->devinfo;
3670 w3 = hdaa_widget_get(devinfo, w1->conns[0]);
3673 w4 = hdaa_widget_get(devinfo, w2->conns[0]);
3697 hdaa_audio_adddac(struct hdaa_devinfo *devinfo, int asid)
3699 struct hdaa_audio_as *as = &devinfo->as[asid];
3705 device_printf(devinfo->dev,
3723 w1 = hdaa_widget_get(devinfo, nid1);
3725 for (nid2 = devinfo->startnode; nid2 < devinfo->endnode; nid2++) {
3726 w2 = hdaa_widget_get(devinfo, nid2);
3743 if (nid2 >= devinfo->endnode)
3749 device_printf(devinfo->dev,
3752 w1 = hdaa_widget_get(devinfo, w1->conns[0]);
3753 w2 = hdaa_widget_get(devinfo, w2->conns[0]);
3758 device_printf(devinfo->dev,
3774 hdaa_audio_trace_as_in(struct hdaa_devinfo *devinfo, int as)
3776 struct hdaa_audio_as *ases = devinfo->as;
3780 for (j = devinfo->startnode; j < devinfo->endnode; j++) {
3781 w = hdaa_widget_get(devinfo, j);
3795 device_printf(devinfo->dev,
3800 if (hdaa_audio_trace_adc(devinfo, as, i,
3804 device_printf(devinfo->dev,
3808 hdaa_audio_undo_trace(devinfo, as, -1);
3814 device_printf(devinfo->dev,
3830 hdaa_audio_trace_as_in_mch(struct hdaa_devinfo *devinfo, int as, int seq)
3832 struct hdaa_audio_as *ases = devinfo->as;
3846 device_printf(devinfo->dev,
3852 res = hdaa_audio_trace_adc(devinfo, as, i,
3857 device_printf(devinfo->dev,
3866 device_printf(devinfo->dev,
3871 hdaa_audio_trace_adc(devinfo, as, i,
3875 if (hdaa_audio_trace_as_in_mch(devinfo, as, i + 1))
3878 hdaa_audio_undo_trace(devinfo, as, i);
3888 hdaa_audio_trace_to_out(struct hdaa_devinfo *devinfo, nid_t nid, int depth)
3890 struct hdaa_audio_as *ases = devinfo->as;
3897 w = hdaa_widget_get(devinfo, nid);
3901 device_printf(devinfo->dev,
3909 device_printf(devinfo->dev,
3918 device_printf(devinfo->dev,
3937 for (j = devinfo->startnode; j < devinfo->endnode; j++) {
3938 wc = hdaa_widget_get(devinfo, j);
3946 if (hdaa_audio_trace_to_out(devinfo,
3961 device_printf(devinfo->dev,
3972 hdaa_audio_trace_as_extra(struct hdaa_devinfo *devinfo)
3974 struct hdaa_audio_as *as = devinfo->as;
3982 device_printf(devinfo->dev,
3985 for (j = devinfo->startnode; j < devinfo->endnode; j++) {
3986 w = hdaa_widget_get(devinfo, j);
3994 device_printf(devinfo->dev,
3998 if (hdaa_audio_trace_to_out(devinfo, w->nid, 0)) {
4000 device_printf(devinfo->dev,
4012 device_printf(devinfo->dev,
4015 for (j = devinfo->startnode; j < devinfo->endnode; j++) {
4016 w = hdaa_widget_get(devinfo, j);
4024 device_printf(devinfo->dev,
4028 if (hdaa_audio_trace_to_out(devinfo, w->nid, 0)) {
4030 device_printf(devinfo->dev,
4039 device_printf(devinfo->dev,
4042 for (j = devinfo->startnode; j < devinfo->endnode; j++) {
4043 w = hdaa_widget_get(devinfo, j);
4049 device_printf(devinfo->dev,
4053 if (hdaa_audio_trace_to_out(devinfo, w->nid, 0)) {
4055 device_printf(devinfo->dev,
4068 hdaa_audio_bind_as(struct hdaa_devinfo *devinfo)
4070 struct hdaa_audio_as *as = devinfo->as;
4073 for (j = 0; j < devinfo->ascnt; j++) {
4077 if (devinfo->num_chans == 0) {
4078 devinfo->chans = malloc(sizeof(struct hdaa_chan) * cnt,
4080 if (devinfo->chans == NULL) {
4081 device_printf(devinfo->dev,
4086 devinfo->chans = (struct hdaa_chan *)realloc(devinfo->chans,
4087 sizeof(struct hdaa_chan) * (devinfo->num_chans + cnt),
4089 if (devinfo->chans == NULL) {
4090 devinfo->num_chans = 0;
4091 device_printf(devinfo->dev,
4096 for (j = 0; j < devinfo->num_chans; j++)
4097 devinfo->chans[j].caps.fmtlist = devinfo->chans[j].fmtlist;
4099 free = devinfo->num_chans;
4100 devinfo->num_chans += cnt;
4103 devinfo->chans[j].devinfo = devinfo;
4104 devinfo->chans[j].as = -1;
4108 for (j = 0; j < devinfo->ascnt; j++) {
4112 devinfo->chans[free].as = j;
4113 devinfo->chans[free].asindex = i;
4114 devinfo->chans[free].dir =
4116 hdaa_pcmchannel_setup(&devinfo->chans[free]);
4124 hdaa_audio_disable_nonaudio(struct hdaa_devinfo *devinfo)
4130 for (i = devinfo->startnode; i < devinfo->endnode; i++) {
4131 w = hdaa_widget_get(devinfo, i);
4138 device_printf(devinfo->dev,
4148 hdaa_audio_disable_useless(struct hdaa_devinfo *devinfo)
4155 for (i = devinfo->startnode; i < devinfo->endnode; i++) {
4156 w = hdaa_widget_get(devinfo, i);
4165 device_printf(devinfo->dev,
4174 device_printf(devinfo->dev,
4186 while ((ctl = hdaa_audio_ctl_each(devinfo, &i)) != NULL) {
4201 device_printf(devinfo->dev,
4211 for (i = devinfo->startnode; i < devinfo->endnode; i++) {
4212 w = hdaa_widget_get(devinfo, i);
4218 cw = hdaa_widget_get(devinfo, w->conns[j]);
4222 device_printf(devinfo->dev,
4245 device_printf(devinfo->dev,
4255 for (k = devinfo->startnode; k < devinfo->endnode; k++) {
4256 cw = hdaa_widget_get(devinfo, k);
4270 device_printf(devinfo->dev,
4281 hdaa_audio_disable_unas(struct hdaa_devinfo *devinfo)
4283 struct hdaa_audio_as *as = devinfo->as;
4289 for (i = devinfo->startnode; i < devinfo->endnode; i++) {
4290 w = hdaa_widget_get(devinfo, i);
4296 device_printf(devinfo->dev,
4304 for (i = devinfo->startnode; i < devinfo->endnode; i++) {
4305 w = hdaa_widget_get(devinfo, i);
4318 device_printf(devinfo->dev,
4324 ctl = hdaa_audio_ctl_amp_get(devinfo, w->nid,
4334 ctl = hdaa_audio_ctl_amp_get(devinfo, w->nid,
4343 for (k = devinfo->startnode; k < devinfo->endnode; k++) {
4344 cw = hdaa_widget_get(devinfo, k);
4351 device_printf(devinfo->dev,
4359 ctl = hdaa_audio_ctl_amp_get(devinfo, k,
4376 hdaa_audio_disable_notselected(struct hdaa_devinfo *devinfo)
4378 struct hdaa_audio_as *as = devinfo->as;
4383 for (i = devinfo->startnode; i < devinfo->endnode; i++) {
4384 w = hdaa_widget_get(devinfo, i);
4400 device_printf(devinfo->dev,
4410 hdaa_audio_disable_crossas(struct hdaa_devinfo *devinfo)
4412 struct hdaa_audio_as *ases = devinfo->as;
4419 for (i = devinfo->startnode; i < devinfo->endnode; i++) {
4420 w = hdaa_widget_get(devinfo, i);
4433 cw = hdaa_widget_get(devinfo, w->conns[j]);
4455 device_printf(devinfo->dev,
4464 while ((ctl = hdaa_audio_ctl_each(devinfo, &i)) != NULL) {
4497 device_printf(devinfo->dev,
4512 hdaa_audio_ctl_source_amp(struct hdaa_devinfo *devinfo, nid_t nid, int index,
4522 w = hdaa_widget_get(devinfo, nid);
4539 ctl = hdaa_audio_ctl_amp_get(devinfo, w->nid, HDAA_CTL_IN,
4574 ctl = hdaa_audio_ctl_amp_get(devinfo, w->nid, HDAA_CTL_OUT, -1, 1);
4586 for (i = devinfo->startnode; i < devinfo->endnode; i++) {
4587 wc = hdaa_widget_get(devinfo, i);
4593 found += hdaa_audio_ctl_source_amp(devinfo,
4618 hdaa_audio_ctl_dest_amp(struct hdaa_devinfo *devinfo, nid_t nid, int index,
4621 struct hdaa_audio_as *as = devinfo->as;
4629 w = hdaa_widget_get(devinfo, nid);
4637 for (i = devinfo->startnode; i < devinfo->endnode; i++) {
4638 wc = hdaa_widget_get(devinfo, i);
4657 ctl = hdaa_audio_ctl_amp_get(devinfo, w->nid,
4681 ctl = hdaa_audio_ctl_amp_get(devinfo, w->nid,
4691 found += hdaa_audio_ctl_dest_amp(devinfo, w->conns[i], -1, ossdev,
4712 hdaa_audio_assign_names(struct hdaa_devinfo *devinfo)
4714 struct hdaa_audio_as *as = devinfo->as;
4735 for (i = devinfo->startnode; i < devinfo->endnode; i++) {
4736 w = hdaa_widget_get(devinfo, i);
4793 for (i = devinfo->startnode; i < devinfo->endnode; i++) {
4794 w = hdaa_widget_get(devinfo, i);
4834 for (i = devinfo->startnode; i < devinfo->endnode; i++) {
4835 w = hdaa_widget_get(devinfo, i);
4859 hdaa_audio_build_tree(struct hdaa_devinfo *devinfo)
4861 struct hdaa_audio_as *as = devinfo->as;
4865 for (j = 0; j < devinfo->ascnt; j++) {
4869 device_printf(devinfo->dev,
4874 res = hdaa_audio_trace_as_out(devinfo, j, 0);
4883 res = hdaa_audio_trace_as_in(devinfo, j);
4885 res = hdaa_audio_trace_as_in_mch(devinfo, j, 0);
4888 device_printf(devinfo->dev,
4894 device_printf(devinfo->dev,
4903 for (j = 0; j < devinfo->ascnt; j++) {
4906 hdaa_audio_adddac(devinfo, j);
4910 hdaa_audio_trace_as_extra(devinfo);
4921 struct hdaa_devinfo *devinfo = w->devinfo;
4925 pdevinfo = devinfo->as[w->bindas].pdevinfo;
4927 pdevinfo = &devinfo->devs[0];
4946 hdaa_audio_assign_mixers(struct hdaa_devinfo *devinfo)
4948 struct hdaa_audio_as *as = devinfo->as;
4953 for (i = devinfo->startnode; i < devinfo->endnode; i++) {
4954 w = hdaa_widget_get(devinfo, i);
4964 found = hdaa_audio_ctl_source_amp(devinfo, w->nid, -1,
4968 found = hdaa_audio_ctl_dest_amp(devinfo, w->nid, -1,
4973 found = hdaa_audio_ctl_dest_amp(devinfo, w->nid, -1,
4979 found = hdaa_audio_ctl_source_amp(devinfo, w->nid, -1,
4984 found += hdaa_audio_ctl_dest_amp(devinfo, w->nid, -1,
4994 cw = hdaa_widget_get(devinfo, w->conns[j]);
5003 found = hdaa_audio_ctl_dest_amp(devinfo,
5014 hdaa_audio_prepare_pin_ctrl(struct hdaa_devinfo *devinfo)
5016 struct hdaa_audio_as *as = devinfo->as;
5021 for (i = 0; i < devinfo->nodecnt; i++) {
5022 w = &devinfo->widget[i];
5032 if (devinfo->init_clear) {
5056 if ((devinfo->quirks & HDAA_QUIRK_IVREF100) &&
5061 else if ((devinfo->quirks & HDAA_QUIRK_IVREF80) &&
5066 else if ((devinfo->quirks & HDAA_QUIRK_IVREF50) &&
5084 if ((devinfo->quirks & HDAA_QUIRK_OVREF100) &&
5089 else if ((devinfo->quirks & HDAA_QUIRK_OVREF80) &&
5094 else if ((devinfo->quirks & HDAA_QUIRK_OVREF50) &&
5104 hdaa_audio_ctl_commit(struct hdaa_devinfo *devinfo)
5110 while ((ctl = hdaa_audio_ctl_each(devinfo, &i)) != NULL) {
5127 hdaa_gpio_commit(struct hdaa_devinfo *devinfo)
5132 numgpio = HDA_PARAM_GPIO_COUNT_NUM_GPIO(devinfo->gpio_cap);
5133 if (devinfo->gpio != 0 && numgpio != 0) {
5134 gdata = hda_command(devinfo->dev,
5135 HDA_CMD_GET_GPIO_DATA(0, devinfo->nid));
5136 gmask = hda_command(devinfo->dev,
5137 HDA_CMD_GET_GPIO_ENABLE_MASK(0, devinfo->nid));
5138 gdir = hda_command(devinfo->dev,
5139 HDA_CMD_GET_GPIO_DIRECTION(0, devinfo->nid));
5141 if ((devinfo->gpio & HDAA_GPIO_MASK(i)) ==
5146 } else if ((devinfo->gpio & HDAA_GPIO_MASK(i)) ==
5151 } else if ((devinfo->gpio & HDAA_GPIO_MASK(i)) ==
5154 } else if ((devinfo->gpio & HDAA_GPIO_MASK(i)) ==
5161 device_printf(devinfo->dev, "GPIO commit\n");
5163 hda_command(devinfo->dev,
5164 HDA_CMD_SET_GPIO_ENABLE_MASK(0, devinfo->nid, gmask));
5165 hda_command(devinfo->dev,
5166 HDA_CMD_SET_GPIO_DIRECTION(0, devinfo->nid, gdir));
5167 hda_command(devinfo->dev,
5168 HDA_CMD_SET_GPIO_DATA(0, devinfo->nid, gdata));
5170 hdaa_dump_gpio(devinfo);
5176 hdaa_gpo_commit(struct hdaa_devinfo *devinfo)
5181 numgpo = HDA_PARAM_GPIO_COUNT_NUM_GPO(devinfo->gpio_cap);
5182 if (devinfo->gpo != 0 && numgpo != 0) {
5183 gdata = hda_command(devinfo->dev,
5184 HDA_CMD_GET_GPO_DATA(0, devinfo->nid));
5186 if ((devinfo->gpio & HDAA_GPIO_MASK(i)) ==
5189 } else if ((devinfo->gpio & HDAA_GPIO_MASK(i)) ==
5195 device_printf(devinfo->dev, "GPO commit\n");
5197 hda_command(devinfo->dev,
5198 HDA_CMD_SET_GPO_DATA(0, devinfo->nid, gdata));
5200 hdaa_dump_gpo(devinfo);
5206 hdaa_audio_commit(struct hdaa_devinfo *devinfo)
5212 hdaa_audio_ctl_commit(devinfo);
5215 for (i = 0; i < devinfo->nodecnt; i++) {
5216 w = &devinfo->widget[i];
5225 hda_command(devinfo->dev,
5233 if (devinfo->quirks &
5236 hda_command(devinfo->dev,
5242 hdaa_gpio_commit(devinfo);
5243 hdaa_gpo_commit(devinfo);
5247 hdaa_powerup(struct hdaa_devinfo *devinfo)
5251 hda_command(devinfo->dev,
5253 devinfo->nid, HDA_CMD_POWER_STATE_D0));
5256 for (i = devinfo->startnode; i < devinfo->endnode; i++) {
5257 hda_command(devinfo->dev,
5267 struct hdaa_devinfo *devinfo = ch->devinfo;
5268 struct hdaa_audio_as *as = devinfo->as;
5286 fmtcap = devinfo->supp_stream_formats;
5287 pcmcap = devinfo->supp_pcm_size_rate;
5304 w = hdaa_widget_get(devinfo, as[ch->as].dacs[ch->asindex][i]);
5366 if (!(devinfo->quirks & HDAA_QUIRK_FORCESTEREO)) {
5468 hdaa_prepare_pcms(struct hdaa_devinfo *devinfo)
5470 struct hdaa_audio_as *as = devinfo->as;
5473 for (i = 0; i < devinfo->ascnt; i++) {
5488 devinfo->num_devs =
5490 devinfo->devs = malloc(devinfo->num_devs *
5492 if (devinfo->devs == NULL) {
5493 device_printf(devinfo->dev,
5497 for (i = 0; i < devinfo->num_devs; i++) {
5498 devinfo->devs[i].index = i;
5499 devinfo->devs[i].devinfo = devinfo;
5500 devinfo->devs[i].playas = -1;
5501 devinfo->devs[i].recas = -1;
5502 devinfo->devs[i].digital = 255;
5504 for (i = 0; i < devinfo->ascnt; i++) {
5507 for (j = 0; j < devinfo->num_devs; j++) {
5508 if (devinfo->devs[j].digital != 255 &&
5509 (!devinfo->devs[j].digital) !=
5513 if (devinfo->devs[j].recas >= 0)
5515 devinfo->devs[j].recas = i;
5517 if (devinfo->devs[j].playas >= 0)
5519 devinfo->devs[j].playas = i;
5521 as[i].pdevinfo = &devinfo->devs[j];
5523 devinfo->chans[as[i].chans[k]].pdevinfo =
5524 &devinfo->devs[j];
5526 devinfo->devs[j].digital = as[i].digital;
5533 hdaa_create_pcms(struct hdaa_devinfo *devinfo)
5537 for (i = 0; i < devinfo->num_devs; i++) {
5538 struct hdaa_pcm_devinfo *pdevinfo = &devinfo->devs[i];
5540 pdevinfo->dev = device_add_child(devinfo->dev, "pcm", DEVICE_UNIT_ANY);
5548 struct hdaa_devinfo *devinfo = pdevinfo->devinfo;
5565 while ((ctl = hdaa_audio_ctl_each(devinfo, &i)) != NULL) {
5678 device_printf(w->devinfo->dev, " Pin cap: 0x%08x", pincap);
5716 device_printf(w->devinfo->dev, " Pin config: 0x%08x\n",
5718 device_printf(w->devinfo->dev, " Pin control: 0x%08x", w->wclass.pin.ctrl);
5744 device_printf(w->devinfo->dev, "%2d %08x %-2d %-2d "
5759 hdaa_dump_pin_configs(struct hdaa_devinfo *devinfo)
5764 device_printf(devinfo->dev, "nid 0x as seq "
5766 for (i = devinfo->startnode; i < devinfo->endnode; i++) {
5767 w = hdaa_widget_get(devinfo, i);
5794 hdaa_dump_nodes(struct hdaa_devinfo *devinfo)
5800 device_printf(devinfo->dev, "\n");
5801 device_printf(devinfo->dev, "Default parameters:\n");
5802 hdaa_dump_audio_formats(devinfo->dev,
5803 devinfo->supp_stream_formats,
5804 devinfo->supp_pcm_size_rate);
5805 hdaa_dump_amp(devinfo->dev, devinfo->inamp_cap, " Input");
5806 hdaa_dump_amp(devinfo->dev, devinfo->outamp_cap, "Output");
5807 for (i = devinfo->startnode; i < devinfo->endnode; i++) {
5808 w = hdaa_widget_get(devinfo, i);
5810 device_printf(devinfo->dev, "Ghost widget nid=%d\n", i);
5813 device_printf(devinfo->dev, "\n");
5814 device_printf(devinfo->dev, " nid: %d%s\n", w->nid,
5816 device_printf(devinfo->dev, " Name: %s\n", w->name);
5817 device_printf(devinfo->dev, " Widget cap: 0x%08x",
5841 device_printf(devinfo->dev, " Association: %d (0x%04x)\n",
5845 device_printf(devinfo->dev, " OSS: %s",
5853 hdaa_dump_audio_formats(devinfo->dev,
5860 device_printf(devinfo->dev, " EAPD: 0x%08x\n",
5864 hdaa_dump_amp(devinfo->dev, w->param.outamp_cap, "Output");
5867 hdaa_dump_amp(devinfo->dev, w->param.inamp_cap, " Input");
5869 device_printf(devinfo->dev, " Connections: %d\n", w->nconns);
5871 cw = hdaa_widget_get(devinfo, w->conns[j]);
5872 device_printf(devinfo->dev, " + %s<- nid=%d [%s]",
5891 struct hdaa_devinfo *devinfo = pdevinfo->devinfo;
5899 w = hdaa_widget_get(devinfo, nid);
5927 cw = hdaa_widget_get(devinfo, w->conns[i]);
5938 struct hdaa_devinfo *devinfo = pdevinfo->devinfo;
5949 chid = devinfo->as[pdevinfo->playas].chans[0];
5951 devinfo->chans[chid].supp_stream_formats,
5952 devinfo->chans[chid].supp_pcm_size_rate);
5953 for (i = 0; i < devinfo->as[pdevinfo->playas].num_chans; i++) {
5954 chid = devinfo->as[pdevinfo->playas].chans[i];
5956 for (nids = devinfo->chans[chid].io; *nids != -1; nids++)
5961 as = &devinfo->as[pdevinfo->playas];
5965 w = hdaa_widget_get(devinfo, as->pins[i]);
5977 struct hdaa_devinfo *devinfo = pdevinfo->devinfo;
5987 chid = devinfo->as[pdevinfo->recas].chans[0];
5989 devinfo->chans[chid].supp_stream_formats,
5990 devinfo->chans[chid].supp_pcm_size_rate);
5991 for (i = 0; i < devinfo->as[pdevinfo->recas].num_chans; i++) {
5992 chid = devinfo->as[pdevinfo->recas].chans[i];
5994 for (nids = devinfo->chans[chid].io; *nids != -1; nids++)
5999 for (i = devinfo->startnode; i < devinfo->endnode; i++) {
6000 w = hdaa_widget_get(devinfo, i);
6016 struct hdaa_devinfo *devinfo = pdevinfo->devinfo;
6021 for (i = devinfo->startnode; i < devinfo->endnode; i++) {
6022 w = hdaa_widget_get(devinfo, i);
6043 struct hdaa_devinfo *devinfo = device_get_softc(dev);
6051 for (i = devinfo->startnode; i < devinfo->endnode; i++) {
6052 w = hdaa_widget_get(devinfo, i);
6095 HDA_PARAM_GPIO_COUNT_NUM_GPIO(devinfo->gpio_cap),
6096 HDA_PARAM_GPIO_COUNT_NUM_GPO(devinfo->gpio_cap),
6097 HDA_PARAM_GPIO_COUNT_NUM_GPI(devinfo->gpio_cap),
6098 HDA_PARAM_GPIO_COUNT_GPI_WAKE(devinfo->gpio_cap),
6099 HDA_PARAM_GPIO_COUNT_GPI_UNSOL(devinfo->gpio_cap));
6100 hdaa_dump_gpi(devinfo);
6101 hdaa_dump_gpio(devinfo);
6102 hdaa_dump_gpo(devinfo);
6108 struct hdaa_devinfo *devinfo = device_get_softc(dev);
6115 hdaa_patch(devinfo);
6119 hdaa_local_patch(devinfo);
6120 hdaa_audio_postprocess(devinfo);
6124 hdaa_audio_ctl_parse(devinfo);
6128 hdaa_audio_disable_nonaudio(devinfo);
6132 hdaa_audio_disable_useless(devinfo);
6135 hdaa_dump_pin_configs(devinfo);
6140 hdaa_audio_as_parse(devinfo);
6144 hdaa_audio_build_tree(devinfo);
6149 hdaa_audio_disable_unas(devinfo);
6154 hdaa_audio_disable_notselected(devinfo);
6158 hdaa_audio_disable_useless(devinfo);
6163 hdaa_audio_disable_crossas(devinfo);
6167 hdaa_audio_disable_useless(devinfo);
6171 hdaa_audio_bind_as(devinfo);
6175 hdaa_audio_assign_names(devinfo);
6179 hdaa_prepare_pcms(devinfo);
6183 hdaa_audio_assign_mixers(devinfo);
6187 hdaa_audio_prepare_pin_ctrl(devinfo);
6191 hdaa_audio_commit(devinfo);
6195 hdaa_patch_direct(devinfo);
6199 hdaa_sense_init(devinfo);
6203 hdaa_create_pcms(devinfo);
6206 if (devinfo->quirks != 0) {
6209 if ((devinfo->quirks &
6223 hdaa_dump_nodes(devinfo);
6231 while ((ctl = hdaa_audio_ctl_each(devinfo, &i)) != NULL) {
6256 struct hdaa_devinfo *devinfo = device_get_softc(dev);
6263 hdaa_sense_deinit(devinfo);
6264 free(devinfo->ctl, M_HDAA);
6265 devinfo->ctl = NULL;
6266 devinfo->ctlcnt = 0;
6267 free(devinfo->as, M_HDAA);
6268 devinfo->as = NULL;
6269 devinfo->ascnt = 0;
6270 free(devinfo->devs, M_HDAA);
6271 devinfo->devs = NULL;
6272 devinfo->num_devs = 0;
6273 free(devinfo->chans, M_HDAA);
6274 devinfo->chans = NULL;
6275 devinfo->num_chans = 0;
6276 for (i = devinfo->startnode; i < devinfo->endnode; i++) {
6277 w = hdaa_widget_get(devinfo, i);
6302 struct hdaa_devinfo *devinfo = oidp->oid_arg1;
6303 device_t dev = devinfo->dev;
6309 hdaa_lock(devinfo);
6310 numgpi = HDA_PARAM_GPIO_COUNT_NUM_GPI(devinfo->gpio_cap);
6313 HDA_CMD_GET_GPI_DATA(0, devinfo->nid));
6315 hdaa_unlock(devinfo);
6326 struct hdaa_devinfo *devinfo = oidp->oid_arg1;
6327 device_t dev = devinfo->dev;
6333 hdaa_lock(devinfo);
6334 numgpio = HDA_PARAM_GPIO_COUNT_NUM_GPIO(devinfo->gpio_cap);
6337 HDA_CMD_GET_GPIO_DATA(0, devinfo->nid));
6339 HDA_CMD_GET_GPIO_ENABLE_MASK(0, devinfo->nid));
6341 HDA_CMD_GET_GPIO_DIRECTION(0, devinfo->nid));
6343 hdaa_unlock(devinfo);
6360 struct hdaa_devinfo *devinfo = oidp->oid_arg1;
6365 gpio = devinfo->newgpio;
6366 numgpio = HDA_PARAM_GPIO_COUNT_NUM_GPIO(devinfo->gpio_cap);
6380 hdaa_lock(devinfo);
6381 devinfo->newgpio = devinfo->gpio = gpio;
6382 hdaa_gpio_commit(devinfo);
6383 hdaa_unlock(devinfo);
6390 struct hdaa_devinfo *devinfo = oidp->oid_arg1;
6391 device_t dev = devinfo->dev;
6397 hdaa_lock(devinfo);
6398 numgpo = HDA_PARAM_GPIO_COUNT_NUM_GPO(devinfo->gpio_cap);
6401 HDA_CMD_GET_GPO_DATA(0, devinfo->nid));
6403 hdaa_unlock(devinfo);
6414 struct hdaa_devinfo *devinfo = oidp->oid_arg1;
6419 gpo = devinfo->newgpo;
6420 numgpo = HDA_PARAM_GPIO_COUNT_NUM_GPO(devinfo->gpio_cap);
6434 hdaa_lock(devinfo);
6435 devinfo->newgpo = devinfo->gpo = gpo;
6436 hdaa_gpo_commit(devinfo);
6437 hdaa_unlock(devinfo);
6445 struct hdaa_devinfo *devinfo;
6449 devinfo = device_get_softc(dev);
6450 if (devinfo == NULL)
6467 hdaa_lock(devinfo);
6470 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);
6589 struct hdaa_devinfo *devinfo = device_get_softc(dev);
6593 devinfo->dev = dev;
6594 devinfo->lock = HDAC_GET_MTX(device_get_parent(dev), dev);
6595 devinfo->nid = nid;
6596 devinfo->newquirks = -1;
6597 devinfo->newgpio = -1;
6598 devinfo->newgpo = -1;
6599 callout_init(&devinfo->poll_jack, 1);
6600 devinfo->poll_ival = hz;
6602 hdaa_lock(devinfo);
6605 hdaa_unlock(devinfo);
6607 devinfo->nodecnt = HDA_PARAM_SUB_NODE_COUNT_TOTAL(res);
6608 devinfo->startnode = HDA_PARAM_SUB_NODE_COUNT_START(res);
6609 devinfo->endnode = devinfo->startnode + devinfo->nodecnt;
6618 nid, devinfo->nodecnt,
6619 devinfo->startnode, devinfo->endnode - 1);
6622 if (devinfo->nodecnt > 0)
6623 devinfo->widget = malloc(sizeof(*(devinfo->widget)) *
6624 devinfo->nodecnt, M_HDAA, M_WAITOK | M_ZERO);
6626 devinfo->widget = NULL;
6628 hdaa_lock(devinfo);
6632 hdaa_powerup(devinfo);
6636 hdaa_audio_parse(devinfo);
6639 hdaa_dump_pin_configs(devinfo);
6642 hdaa_unlock(devinfo);
6647 &devinfo->newquirks, 0, hdaa_sysctl_quirks, "A",
6652 devinfo, 0, hdaa_sysctl_gpi_state, "A", "GPI state");
6656 devinfo, 0, hdaa_sysctl_gpio_state, "A", "GPIO state");
6660 devinfo, 0, hdaa_sysctl_gpio_config, "A", "GPIO configuration");
6664 devinfo, 0, hdaa_sysctl_gpo_state, "A", "GPO state");
6668 devinfo, 0, hdaa_sysctl_gpo_config, "A", "GPO configuration");
6676 &devinfo->init_clear, 1,"Clear initial pin widget configuration");
6684 struct hdaa_devinfo *devinfo = device_get_softc(dev);
6690 hdaa_lock(devinfo);
6692 devinfo->poll_ival = 0;
6693 callout_stop(&devinfo->poll_jack);
6694 hdaa_unlock(devinfo);
6695 callout_drain(&devinfo->poll_jack);
6697 free(devinfo->widget, M_HDAA);
6704 struct hdaa_devinfo *devinfo = device_get_softc(dev);
6713 as = &devinfo->as[pdevinfo->playas];
6726 as = &devinfo->as[pdevinfo->recas];
6742 struct hdaa_devinfo *devinfo = device_get_softc(dev);
6750 as = &devinfo->as[pdevinfo->playas];
6759 as = &devinfo->as[pdevinfo->recas];
6773 struct hdaa_devinfo *devinfo = device_get_softc(dev);
6777 for (i = 0; i < devinfo->num_chans; i++) {
6778 ch = &devinfo->chans[i];
6783 hdaa_unlock(devinfo);
6785 hdaa_lock(devinfo);
6793 struct hdaa_devinfo *devinfo = device_get_softc(dev);
6801 for (i = devinfo->startnode; i < devinfo->endnode; i++) {
6802 w = hdaa_widget_get(devinfo, i);
6845 hdaa_chan_formula(struct hdaa_devinfo *devinfo, int asid,
6851 as = &devinfo->as[asid];
6852 c = devinfo->chans[as->chans[0]].channels;
6875 hdaa_chan_type(struct hdaa_devinfo *devinfo, int asid)
6881 as = &devinfo->as[asid];
6883 w = hdaa_widget_get(devinfo, as->pins[i]);
6903 struct hdaa_devinfo *devinfo = pdevinfo->devinfo;
6908 ch = &devinfo->chans[as->chans[0]];
6924 devinfo->chans[as->chans[i]].bit32 = ch->bit32;
6933 struct hdaa_devinfo *devinfo = pdevinfo->devinfo;
6939 loc1 = devinfo->as[pdevinfo->playas].location;
6941 loc1 = devinfo->as[pdevinfo->recas].location;
6943 loc2 = devinfo->as[pdevinfo->recas].location;
6954 hdaa_chan_formula(devinfo, pdevinfo->playas,
6956 t1 = hdaa_chan_type(devinfo, pdevinfo->playas);
6959 hdaa_chan_formula(devinfo, pdevinfo->recas,
6961 t2 = hdaa_chan_type(devinfo, pdevinfo->recas);
6998 struct hdaa_devinfo *devinfo = pdevinfo->devinfo;
7062 as = &devinfo->as[pdevinfo->playas];
7065 &devinfo->chans[as->chans[i]]);
7073 as = &devinfo->as[pdevinfo->recas];
7076 &devinfo->chans[as->chans[i]]);
7094 hdaa_lock(devinfo);
7096 as = &devinfo->as[pdevinfo->playas];
7100 as = &devinfo->as[pdevinfo->recas];
7104 hdaa_unlock(devinfo);