Lines Matching +full:playback +full:- +full:codecs

1 /*-
2 * SPDX-License-Identifier: BSD-2-Clause
6 * Copyright (c) 2008-2012 Alexander Motin <mav@FreeBSD.org>
58 * XXX Force stereo quirk. Monoural recording / playback
59 * on few codecs (especially ALC880) seems broken or
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()
250 patch_str = "device=Line-in as=8 seq=1"; in hdac_pin_patch()
429 for (struct pin_patch_t *patch = pin_patches; patch->type; patch++) { in hdac_pin_patch()
430 if (nid == patch->nid) { in hdac_pin_patch()
431 switch (patch->type) { in hdac_pin_patch()
433 patch_str = patch->patch.string; in hdac_pin_patch()
436 config &= ~patch->patch.mask[0]; in hdac_pin_patch()
437 config |= patch->patch.mask[1]; in hdac_pin_patch()
440 config = patch->patch.override; in hdac_pin_patch()
456 device_printf(w->devinfo->dev, in hdac_pin_patch()
457 "Patching pin config nid=%u 0x%08x -> 0x%08x\n", in hdac_pin_patch()
460 w->wclass.pin.config = config; in hdac_pin_patch()
466 struct hdaa_devinfo *devinfo = w->devinfo; in hdaa_widget_patch()
468 nid_t beeper = -1; in hdaa_widget_patch()
470 orig = w->param.widget_cap; in hdaa_widget_patch()
471 /* On some codecs beeper is an input pin, but it is not recordable in hdaa_widget_patch()
490 if (hda_get_vendor_id(devinfo->dev) == REALTEK_VENDORID && in hdaa_widget_patch()
493 if (w->nid == beeper) { in hdaa_widget_patch()
494 w->param.widget_cap &= ~HDA_PARAM_AUDIO_WIDGET_CAP_TYPE_MASK; in hdaa_widget_patch()
495 w->param.widget_cap |= HDA_PARAM_AUDIO_WIDGET_CAP_TYPE_BEEP_WIDGET << in hdaa_widget_patch()
497 w->waspin = 1; in hdaa_widget_patch()
504 w->nid == 23) in hdaa_widget_patch()
505 w->param.widget_cap &= ~HDA_PARAM_AUDIO_WIDGET_CAP_DIGITAL_MASK; in hdaa_widget_patch()
507 if (w->param.widget_cap != orig) { in hdaa_widget_patch()
508 device_printf(w->devinfo->dev, in hdaa_widget_patch()
509 "Patching widget caps nid=%u 0x%08x -> 0x%08x\n", in hdaa_widget_patch()
510 w->nid, orig, w->param.widget_cap); in hdaa_widget_patch()
514 if (w->type == HDA_PARAM_AUDIO_WIDGET_CAP_TYPE_PIN_COMPLEX) in hdaa_widget_patch()
527 subsystemid = hda_get_subsystem_id(devinfo->dev); in hdaa_patch()
537 devinfo->quirks |= hdac_quirks[i].set; in hdaa_patch()
538 devinfo->quirks &= ~(hdac_quirks[i].unset); in hdaa_patch()
539 devinfo->gpio = hdac_quirks[i].gpio; in hdaa_patch()
542 /* Apply per-widget patch. */ in hdaa_patch()
543 for (i = devinfo->startnode; i < devinfo->endnode; i++) { in hdaa_patch()
556 /* Disable direct unmixed playback to get pcm volume. */ in hdaa_patch()
559 w->connsenable[0] = 0; in hdaa_patch()
562 w->connsenable[0] = 0; in hdaa_patch()
565 w->connsenable[0] = 0; in hdaa_patch()
569 w->connsenable[1] = 0; in hdaa_patch()
572 w->connsenable[1] = 0; in hdaa_patch()
573 /* Disable recording from mono playback mix. */ in hdaa_patch()
576 w->connsenable[3] = 0; in hdaa_patch()
586 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()
599 w->enable = 0; in hdaa_patch()
603 w->connsenable[3] = 0; in hdaa_patch()
607 if ((w->wclass.pin.config & in hdaa_patch()
612 w->connsenable[2] = 0; in hdaa_patch()
616 w->connsenable[0] = 0; in hdaa_patch()
621 if ((w->wclass.pin.config & in hdaa_patch()
626 w->connsenable[0] = 0; in hdaa_patch()
630 w->connsenable[1] = 0; in hdaa_patch()
641 if (w != NULL && w->type == in hdaa_patch()
643 (w->wclass.pin.config & in hdaa_patch()
646 devinfo->quirks &= in hdaa_patch()
655 /* Disable recording from mono playback mix. */ in hdaa_patch()
658 w->connsenable[3] = 0; in hdaa_patch()
662 w->enable = 0; in hdaa_patch()
663 /* Disable direct playback, use mixer. */ 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()
675 w->connsenable[0] = 0; in hdaa_patch()
682 * Hide that muter from the driver. There are several CODECs in hdaa_patch()
689 w->param.inamp_cap = 0; in hdaa_patch()
698 * These codecs have extra connectivity on record side in hdaa_patch()
703 w->connsenable[1] = 0; in hdaa_patch()
706 w->connsenable[1] = 0; in hdaa_patch()
709 w->connsenable[0] = 0; in hdaa_patch()
720 * These codecs have hidden mic boost controls. in hdaa_patch()
724 w->param.inamp_cap = in hdaa_patch()
730 w->param.inamp_cap = in hdaa_patch()
757 device_t dev = devinfo->dev; in hdaa_patch_direct()
773 hda_command(dev, HDA_CMD_12BIT(0, devinfo->nid, in hdaa_patch_direct()
778 hda_command(dev, HDA_CMD_12BIT(0, devinfo->nid, in hdaa_patch_direct()
793 hda_command(dev, HDA_CMD_12BIT(0, devinfo->nid, in hdaa_patch_direct()