Lines Matching +full:out +full:- +full:mono
1 /*-
2 * SPDX-License-Identifier: BSD-2-Clause
6 * Copyright (c) 2008-2012 Alexander Motin <mav@FreeBSD.org>
27 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
160 if (vendor_id != p->id) in match_pin_patches()
162 for (struct model_pin_patch_t *pp = p->patches; pp->models; pp++) { in match_pin_patches()
163 for (struct pin_machine_model_t *model = pp->models; model->id != 0; model++) { in match_pin_patches()
164 if (HDA_DEV_MATCH(model->id, vendor_subid)) in match_pin_patches()
165 return (pp->pin_patches); in match_pin_patches()
178 nid_t nid = w->nid; in hdac_pin_patch()
180 config = orig = w->wclass.pin.config; in hdac_pin_patch()
181 id = hdaa_codec_id(w->devinfo); in hdac_pin_patch()
182 subid = hdaa_card_id(w->devinfo); in hdac_pin_patch()
249 case 28: /* 5.1 out => 2.0 out + 1 input */ in hdac_pin_patch()
250 patch_str = "device=Line-in as=8 seq=1"; in hdac_pin_patch()
426 for (struct pin_patch_t *patch = pin_patches; patch->type; patch++) { in hdac_pin_patch()
427 if (nid == patch->nid) { in hdac_pin_patch()
428 switch (patch->type) { in hdac_pin_patch()
430 patch_str = patch->patch.string; in hdac_pin_patch()
433 config &= ~patch->patch.mask[0]; in hdac_pin_patch()
434 config |= patch->patch.mask[1]; in hdac_pin_patch()
437 config = patch->patch.override; in hdac_pin_patch()
453 device_printf(w->devinfo->dev, in hdac_pin_patch()
454 "Patching pin config nid=%u 0x%08x -> 0x%08x\n", in hdac_pin_patch()
457 w->wclass.pin.config = config; in hdac_pin_patch()
463 struct hdaa_devinfo *devinfo = w->devinfo; in hdaa_widget_patch()
465 nid_t beeper = -1; in hdaa_widget_patch()
467 orig = w->param.widget_cap; in hdaa_widget_patch()
487 if (hda_get_vendor_id(devinfo->dev) == REALTEK_VENDORID && in hdaa_widget_patch()
490 if (w->nid == beeper) { in hdaa_widget_patch()
491 w->param.widget_cap &= ~HDA_PARAM_AUDIO_WIDGET_CAP_TYPE_MASK; in hdaa_widget_patch()
492 w->param.widget_cap |= HDA_PARAM_AUDIO_WIDGET_CAP_TYPE_BEEP_WIDGET << in hdaa_widget_patch()
494 w->waspin = 1; in hdaa_widget_patch()
501 w->nid == 23) in hdaa_widget_patch()
502 w->param.widget_cap &= ~HDA_PARAM_AUDIO_WIDGET_CAP_DIGITAL_MASK; in hdaa_widget_patch()
504 if (w->param.widget_cap != orig) { in hdaa_widget_patch()
505 device_printf(w->devinfo->dev, in hdaa_widget_patch()
506 "Patching widget caps nid=%u 0x%08x -> 0x%08x\n", in hdaa_widget_patch()
507 w->nid, orig, w->param.widget_cap); in hdaa_widget_patch()
511 if (w->type == HDA_PARAM_AUDIO_WIDGET_CAP_TYPE_PIN_COMPLEX) in hdaa_widget_patch()
524 subsystemid = hda_get_subsystem_id(devinfo->dev); in hdaa_patch()
534 devinfo->quirks |= hdac_quirks[i].set; in hdaa_patch()
535 devinfo->quirks &= ~(hdac_quirks[i].unset); in hdaa_patch()
536 devinfo->gpio = hdac_quirks[i].gpio; in hdaa_patch()
539 /* Apply per-widget patch. */ in hdaa_patch()
540 for (i = devinfo->startnode; i < devinfo->endnode; i++) { in hdaa_patch()
556 w->connsenable[0] = 0; in hdaa_patch()
559 w->connsenable[0] = 0; in hdaa_patch()
562 w->connsenable[0] = 0; in hdaa_patch()
566 w->connsenable[1] = 0; in hdaa_patch()
569 w->connsenable[1] = 0; in hdaa_patch()
570 /* Disable recording from mono playback mix. */ in hdaa_patch()
573 w->connsenable[3] = 0; in hdaa_patch()
580 /* Disable input mono mixer. Not needed and not supported. */ in hdaa_patch()
583 w->enable = 0; in hdaa_patch()
587 w->enable = 0; in hdaa_patch()
590 w->enable = 0; in hdaa_patch()
593 w->enable = 0; in hdaa_patch()
596 w->enable = 0; in hdaa_patch()
600 w->connsenable[3] = 0; in hdaa_patch()
604 if ((w->wclass.pin.config & in hdaa_patch()
609 w->connsenable[2] = 0; in hdaa_patch()
613 w->connsenable[0] = 0; in hdaa_patch()
618 if ((w->wclass.pin.config & in hdaa_patch()
623 w->connsenable[0] = 0; in hdaa_patch()
627 w->connsenable[1] = 0; in hdaa_patch()
638 if (w != NULL && w->type == in hdaa_patch()
640 (w->wclass.pin.config & in hdaa_patch()
643 devinfo->quirks &= in hdaa_patch()
652 /* Disable recording from mono playback mix. */ in hdaa_patch()
655 w->connsenable[3] = 0; in hdaa_patch()
659 w->enable = 0; in hdaa_patch()
663 w->connsenable[0] = 0; in hdaa_patch()
666 w->connsenable[0] = 0; in hdaa_patch()
669 w->connsenable[0] = 0; in hdaa_patch()
672 w->connsenable[0] = 0; in hdaa_patch()
686 w->param.inamp_cap = 0; in hdaa_patch()
700 w->connsenable[1] = 0; in hdaa_patch()
703 w->connsenable[1] = 0; in hdaa_patch()
706 w->connsenable[0] = 0; in hdaa_patch()
721 w->param.inamp_cap = in hdaa_patch()
727 w->param.inamp_cap = in hdaa_patch()
754 device_t dev = devinfo->dev; in hdaa_patch_direct()
770 hda_command(dev, HDA_CMD_12BIT(0, devinfo->nid, in hdaa_patch_direct()
775 hda_command(dev, HDA_CMD_12BIT(0, devinfo->nid, in hdaa_patch_direct()
790 hda_command(dev, HDA_CMD_12BIT(0, devinfo->nid, in hdaa_patch_direct()
799 * That results in silence if downmixing to mono. in hdaa_patch_direct()
800 * To workaround, make codec handle the signal as mono. in hdaa_patch_direct()