git: ef790cc7407e - main - hdaa: update pin patch configurations
Warner Losh
imp at bsdimp.com
Sun Jul 4 14:51:18 UTC 2021
On Sun, Jul 4, 2021, 8:03 AM Rodney W. Grimes <freebsd at gndrsh.dnsmgr.net>
wrote:
> > The branch main has been updated by imp:
> >
> > URL:
> https://cgit.FreeBSD.org/src/commit/?id=ef790cc7407e827db9563d08a52a71ab36436986
> >
> > commit ef790cc7407e827db9563d08a52a71ab36436986
> > Author: K Staring <qdk at quickdekay.net>
> > AuthorDate: 2021-07-03 06:15:49 +0000
> > Commit: Warner Losh <imp at FreeBSD.org>
> > CommitDate: 2021-07-03 06:15:49 +0000
> >
> > hdaa: update pin patch configurations
> >
> > A number of structural changes:
> > - Use decimal nid numbers instead of hex
> > - updated the branch to incoorporate the suggestions made in the
> > ALC280 pull request github thread
> > - Convert magic pin values into strings.
> > - Also update hdaa_patches to use clearer enums..
> > - made pin patch type enum clearer, add macro for 'string' type
> > patches
> > - Added pin_patch structures to separate data from logic.
> > - Integrated Realtek patches into new structure.
> >
> > These incorporate fixes for ALC255, ALC256, ALC260, ALC262, ALC268,
> > ALC269, ALC280, ALC282, ALC283, ALC286, ALC290, ALC293, ALC296,
> ALC2880
> >
> > And have definitions for a number of Dell and HP laptops.
> >
> > Much of this data has been mined fromt he tables in the Linux driver.
> >
> > imp squashed these into one commit because the changes from the
> github
> > pull requests no longer cleanly apply individually and made light
> style
> > changes after feedback from jhb.
> >
> > Pull Request:
> https://github.com/freebsd/freebsd-src/pull/139
> > Pull Request:
> https://github.com/freebsd/freebsd-src/pull/140
> > Pull Request:
> https://github.com/freebsd/freebsd-src/pull/141
> > Pull Request:
> https://github.com/freebsd/freebsd-src/pull/142
> > Pull Request:
> https://github.com/freebsd/freebsd-src/pull/143
> > Pull Request:
> https://github.com/freebsd/freebsd-src/pull/144
> > Pull Request:
> https://github.com/freebsd/freebsd-src/pull/145
> > Pull Request:
> https://github.com/freebsd/freebsd-src/pull/146
> > Pull Request:
> https://github.com/freebsd/freebsd-src/pull/147
> > Pull Request:
> https://github.com/freebsd/freebsd-src/pull/148
> > Pull Request:
> https://github.com/freebsd/freebsd-src/pull/149
> > Pull Request:
> https://github.com/freebsd/freebsd-src/pull/150
> > Differential Revision: https://reviews.freebsd.org/D30619
>
> Is there any intent to merge this to stable-13/12? The out of box "audio"
> experience on many of the "fixed" devices in this as it stands now is
> poor, and iirc this fixes many of the issues with "no sound" when using
> anything but the builtin speakers.
>
I'd like to. That said, there was an interesting hiccup when I did my last
suspend/resume cycle on my YOGA that might be related.
Warner
Thanks,
> Rod
> > ---
> > sys/dev/sound/pci/hda/hdaa_patches.c | 259 +++-----
> > sys/dev/sound/pci/hda/hdac.h | 145 ++++-
> > sys/dev/sound/pci/hda/pin_patch.h | 121 ++++
> > sys/dev/sound/pci/hda/pin_patch_realtek.h | 992
> ++++++++++++++++++++++++++++++
> > 4 files changed, 1327 insertions(+), 190 deletions(-)
> >
> > diff --git a/sys/dev/sound/pci/hda/hdaa_patches.c
> b/sys/dev/sound/pci/hda/hdaa_patches.c
> > index 590c9e4d46fb..69299ee4344f 100644
> > --- a/sys/dev/sound/pci/hda/hdaa_patches.c
> > +++ b/sys/dev/sound/pci/hda/hdaa_patches.c
> > @@ -44,6 +44,9 @@
> > #include <dev/sound/pci/hda/hdaa.h>
> > #include <dev/sound/pci/hda/hda_reg.h>
> >
> > +#include "pin_patch.h"
> > +#include "pin_patch_realtek.h"
> > +
> > SND_DECLARE_FILE("$FreeBSD$");
> >
> > static const struct {
> > @@ -145,10 +148,28 @@ static const struct {
> > 0 }
> > };
> >
> > +static struct pin_patch_t *
> > +match_pin_patches(int vendor_id, int vendor_subid)
> > +{
> > + for (int ci = 0; ci < nitems(realtek_model_pin_patches); ci++) {
> > + struct hdaa_model_pin_patch_t *p =
> &realtek_model_pin_patches[ci];
> > + if (vendor_id != p->id)
> > + continue;
> > + for (struct model_pin_patch_t *pp = p->patches;
> pp->models; pp++) {
> > + for (struct pin_machine_model_t *model =
> pp->models; model->id != 0; model++) {
> > + if (vendor_subid == model->id)
> > + return (pp->pin_patches);
> > + }
> > + }
> > + }
> > +
> > + return (0);
> > +}
> > +
> > static void
> > hdac_pin_patch(struct hdaa_widget *w)
> > {
> > - const char *patch = NULL;
> > + const char *patch_str = NULL;
> > uint32_t config, orig, id, subid;
> > nid_t nid = w->nid;
> >
> > @@ -156,54 +177,7 @@ hdac_pin_patch(struct hdaa_widget *w)
> > id = hdaa_codec_id(w->devinfo);
> > subid = hdaa_card_id(w->devinfo);
> >
> > - /* XXX: Old patches require complete review.
> > - * Now they may create more problem then solve due to
> > - * incorrect associations.
> > - */
> > - if (id == HDA_CODEC_ALC880 && subid == LG_LW20_SUBVENDOR) {
> > - switch (nid) {
> > - case 26:
> > - config &= ~HDA_CONFIG_DEFAULTCONF_DEVICE_MASK;
> > - config |= HDA_CONFIG_DEFAULTCONF_DEVICE_LINE_IN;
> > - break;
> > - case 27:
> > - config &= ~HDA_CONFIG_DEFAULTCONF_DEVICE_MASK;
> > - config |= HDA_CONFIG_DEFAULTCONF_DEVICE_HP_OUT;
> > - break;
> > - default:
> > - break;
> > - }
> > - } else if (id == HDA_CODEC_ALC880 &&
> > - (subid == CLEVO_D900T_SUBVENDOR ||
> > - subid == ASUS_M5200_SUBVENDOR)) {
> > - /*
> > - * Super broken BIOS
> > - */
> > - switch (nid) {
> > - case 24: /* MIC1 */
> > - config &= ~HDA_CONFIG_DEFAULTCONF_DEVICE_MASK;
> > - config |= HDA_CONFIG_DEFAULTCONF_DEVICE_MIC_IN;
> > - break;
> > - case 25: /* XXX MIC2 */
> > - config &= ~HDA_CONFIG_DEFAULTCONF_DEVICE_MASK;
> > - config |= HDA_CONFIG_DEFAULTCONF_DEVICE_MIC_IN;
> > - break;
> > - case 26: /* LINE1 */
> > - config &= ~HDA_CONFIG_DEFAULTCONF_DEVICE_MASK;
> > - config |= HDA_CONFIG_DEFAULTCONF_DEVICE_LINE_IN;
> > - break;
> > - case 27: /* XXX LINE2 */
> > - config &= ~HDA_CONFIG_DEFAULTCONF_DEVICE_MASK;
> > - config |= HDA_CONFIG_DEFAULTCONF_DEVICE_LINE_IN;
> > - break;
> > - case 28: /* CD */
> > - config &= ~HDA_CONFIG_DEFAULTCONF_DEVICE_MASK;
> > - config |= HDA_CONFIG_DEFAULTCONF_DEVICE_CD;
> > - break;
> > - }
> > - } else if (id == HDA_CODEC_ALC883 &&
> > - (subid == MSI_MS034A_SUBVENDOR ||
> > - HDA_DEV_MATCH(ACER_ALL_SUBVENDOR, subid))) {
> > + if (id == HDA_CODEC_ALC883 && HDA_DEV_MATCH(ACER_ALL_SUBVENDOR,
> subid)) {
> > switch (nid) {
> > case 25:
> > config &= ~(HDA_CONFIG_DEFAULTCONF_DEVICE_MASK |
> > @@ -247,42 +221,6 @@ hdac_pin_patch(struct hdaa_widget *w)
> > config |= HDA_CONFIG_DEFAULTCONF_CONNECTIVITY_NONE;
> > break;
> > }
> > - } else if (id == HDA_CODEC_ALC861 && subid ==
> > - ASUS_W6F_SUBVENDOR) {
> > - switch (nid) {
> > - case 11:
> > - config &= ~(HDA_CONFIG_DEFAULTCONF_DEVICE_MASK |
> > - HDA_CONFIG_DEFAULTCONF_CONNECTIVITY_MASK);
> > - config |= (HDA_CONFIG_DEFAULTCONF_DEVICE_LINE_OUT |
> > - HDA_CONFIG_DEFAULTCONF_CONNECTIVITY_FIXED);
> > - break;
> > - case 12:
> > - case 14:
> > - case 16:
> > - case 31:
> > - case 32:
> > - config &= ~(HDA_CONFIG_DEFAULTCONF_DEVICE_MASK |
> > - HDA_CONFIG_DEFAULTCONF_CONNECTIVITY_MASK);
> > - config |= (HDA_CONFIG_DEFAULTCONF_DEVICE_MIC_IN |
> > - HDA_CONFIG_DEFAULTCONF_CONNECTIVITY_FIXED);
> > - break;
> > - case 15:
> > - config &= ~(HDA_CONFIG_DEFAULTCONF_DEVICE_MASK |
> > - HDA_CONFIG_DEFAULTCONF_CONNECTIVITY_MASK);
> > - config |= (HDA_CONFIG_DEFAULTCONF_DEVICE_HP_OUT |
> > - HDA_CONFIG_DEFAULTCONF_CONNECTIVITY_JACK);
> > - break;
> > - }
> > - } else if (id == HDA_CODEC_ALC861 && subid ==
> > - UNIWILL_9075_SUBVENDOR) {
> > - switch (nid) {
> > - case 15:
> > - config &= ~(HDA_CONFIG_DEFAULTCONF_DEVICE_MASK |
> > - HDA_CONFIG_DEFAULTCONF_CONNECTIVITY_MASK);
> > - config |= (HDA_CONFIG_DEFAULTCONF_DEVICE_HP_OUT |
> > - HDA_CONFIG_DEFAULTCONF_CONNECTIVITY_JACK);
> > - break;
> > - }
> > }
> >
> > /* New patches */
> > @@ -290,10 +228,10 @@ hdac_pin_patch(struct hdaa_widget *w)
> > subid == LENOVO_X300_SUBVENDOR) {
> > switch (nid) {
> > case 17: /* Headphones with redirection */
> > - patch = "as=1 seq=15";
> > + patch_str = "as=1 seq=15";
> > break;
> > case 20: /* Two mics together */
> > - patch = "as=2 seq=15";
> > + patch_str = "as=2 seq=15";
> > break;
> > }
> > } else if (id == HDA_CODEC_AD1986A &&
> > @@ -302,60 +240,45 @@ hdac_pin_patch(struct hdaa_widget *w)
> > subid == ASUS_P5PL2_SUBVENDOR)) {
> > switch (nid) {
> > case 26: /* Headphones with redirection */
> > - patch = "as=1 seq=15";
> > + patch_str = "as=1 seq=15";
> > break;
> > case 28: /* 5.1 out => 2.0 out + 1 input */
> > - patch = "device=Line-in as=8 seq=1";
> > + patch_str = "device=Line-in as=8 seq=1";
> > break;
> > case 29: /* Can't use this as input, as the only available
> mic
> > * preamplifier is busy by front panel mic (nid
> 31).
> > * If you want to use this rear connector as mic
> input,
> > * you have to disable the front panel one. */
> > - patch = "as=0";
> > + patch_str = "as=0";
> > break;
> > case 31: /* Lot of inputs configured with as=15 and
> unusable */
> > - patch = "as=8 seq=3";
> > + patch_str = "as=8 seq=3";
> > break;
> > case 32:
> > - patch = "as=8 seq=4";
> > + patch_str = "as=8 seq=4";
> > break;
> > case 34:
> > - patch = "as=8 seq=5";
> > + patch_str = "as=8 seq=5";
> > break;
> > case 36:
> > - patch = "as=8 seq=6";
> > - break;
> > - }
> > - } else if (id == HDA_CODEC_ALC260 &&
> > - HDA_DEV_MATCH(SONY_S5_SUBVENDOR, subid)) {
> > - switch (nid) {
> > - case 16:
> > - patch = "seq=15 device=Headphones";
> > - break;
> > - }
> > - } else if (id == HDA_CODEC_ALC268) {
> > - if (subid == ACER_T5320_SUBVENDOR) {
> > - switch (nid) {
> > - case 20: /* Headphones Jack */
> > - patch = "as=1 seq=15";
> > + patch_str = "as=8 seq=6";
> > break;
> > }
> > - }
> > } else if (id == HDA_CODEC_CX20561 &&
> > subid == LENOVO_B450_SUBVENDOR) {
> > switch (nid) {
> > case 22:
> > - patch = "as=1 seq=15";
> > + patch_str = "as=1 seq=15";
> > break;
> > }
> > } else if (id == HDA_CODEC_CX20561 &&
> > subid == LENOVO_T400_SUBVENDOR) {
> > switch (nid) {
> > case 22:
> > - patch = "as=1 seq=15";
> > + patch_str = "as=1 seq=15";
> > break;
> > case 26:
> > - patch = "as=1 seq=0";
> > + patch_str = "as=1 seq=0";
> > break;
> > }
> > } else if (id == HDA_CODEC_CX20590 &&
> > @@ -366,102 +289,62 @@ hdac_pin_patch(struct hdaa_widget *w)
> > subid == LENOVO_G580_SUBVENDOR)) {
> > switch (nid) {
> > case 25:
> > - patch = "as=1 seq=15";
> > + patch_str = "as=1 seq=15";
> > break;
> > /*
> > * Group onboard mic and headphone mic
> > * together. Fixes onboard mic.
> > */
> > case 27:
> > - patch = "as=2 seq=15";
> > + patch_str = "as=2 seq=15";
> > break;
> > case 35:
> > - patch = "as=2";
> > - break;
> > - }
> > - } else if (id == HDA_CODEC_ALC269 &&
> > - (subid == LENOVO_X1CRBN_SUBVENDOR ||
> > - subid == LENOVO_T430_SUBVENDOR ||
> > - subid == LENOVO_T430S_SUBVENDOR ||
> > - subid == LENOVO_T530_SUBVENDOR)) {
> > - switch (nid) {
> > - case 21:
> > - patch = "as=1 seq=15";
> > - break;
> > - }
> > - } else if (id == HDA_CODEC_ALC285 &&
> > - (subid == LENOVO_X120KH_SUBVENDOR ||
> > - subid == LENOVO_X120QD_SUBVENDOR)) {
> > - switch (nid) {
> > - case 33:
> > - patch = "as=1 seq=15";
> > - break;
> > - }
> > - } else if (id == HDA_CODEC_ALC269 &&
> > - subid == ASUS_UX31A_SUBVENDOR) {
> > - switch (nid) {
> > - case 33:
> > - patch = "as=1 seq=15";
> > - break;
> > - }
> > - } else if (id == HDA_CODEC_ALC892 &&
> > - subid == INTEL_DH87RL_SUBVENDOR) {
> > - switch (nid) {
> > - case 27:
> > - patch = "as=1 seq=15";
> > - break;
> > - }
> > - } else if (id == HDA_CODEC_ALC292 &&
> > - subid == LENOVO_X120BS_SUBVENDOR) {
> > - switch (nid) {
> > - case 21:
> > - patch = "as=1 seq=15";
> > - break;
> > - }
> > - } else if (id == HDA_CODEC_ALC295 && subid ==
> HP_AF006UR_SUBVENDOR) {
> > - switch (nid) {
> > - case 18:
> > - patch = "as=2";
> > - break;
> > - case 25:
> > - patch = "as=2 seq=15";
> > - break;
> > - case 33:
> > - patch = "as=1 seq=15";
> > - break;
> > - }
> > - } else if (id == HDA_CODEC_ALC298 &&
> HDA_DEV_MATCH(LENOVO_ALL_SUBVENDOR, subid)) {
> > - switch (nid) {
> > - case 23:
> > - config = 0x03a1103f;
> > - break;
> > - case 33:
> > - config = 0x2121101f;
> > - break;
> > - }
> > - } else if (id == HDA_CODEC_ALC298 && subid ==
> DELL_XPS9560_SUBVENDOR) {
> > - switch (nid) {
> > - case 24:
> > - config = 0x01a1913c;
> > - break;
> > - case 26:
> > - config = 0x01a1913d;
> > + patch_str = "as=2";
> > break;
> > }
> > } else if (id == HDA_CODEC_ALC256 && (subid ==
> DELL_I7577_SUBVENDOR ||
> > subid == DELL_L7480_SUBVENDOR)) {
> > switch (nid) {
> > case 20:
> > - patch = "as=1 seq=0";
> > + patch_str = "as=1 seq=0";
> > break;
> > case 33:
> > - patch = "as=1 seq=15";
> > + patch_str = "as=1 seq=15";
> > break;
> > }
> > + } else {
> > + /*
> > + * loop over hdaa_model_pin_patch
> > + */
> > + struct pin_patch_t *pin_patches = NULL;
> > +
> > + pin_patches = match_pin_patches(id, subid);
> > +
> > + if (pin_patches != NULL) {
> > + for (struct pin_patch_t *patch = pin_patches;
> patch->type; patch++) {
> > + if (nid == patch->nid) {
> > + switch (patch->type) {
> > + case PIN_PATCH_TYPE_STRING:
> > + patch_str =
> patch->patch.string;
> > + case PIN_PATCH_TYPE_MASK:
> > + config &=
> ~patch->patch.mask[0];
> > + config |=
> patch->patch.mask[1];
> > + break;
> > + case PIN_PATCH_TYPE_OVERRIDE:
> > + config =
> patch->patch.override;
> > + break;
> > + default:
> > + /* should panic hard */
> > + break;
> > + }
> > + break;
> > + }
> > + }
> > + }
> > }
> >
> > - if (patch != NULL)
> > - config = hdaa_widget_pin_patch(config, patch);
> > + if (patch_str != NULL)
> > + config = hdaa_widget_pin_patch(config, patch_str);
> > HDA_BOOTVERBOSE(
> > if (config != orig)
> > device_printf(w->devinfo->dev,
> > diff --git a/sys/dev/sound/pci/hda/hdac.h b/sys/dev/sound/pci/hda/hdac.h
> > index 8e427d3412da..611cb98badd8 100644
> > --- a/sys/dev/sound/pci/hda/hdac.h
> > +++ b/sys/dev/sound/pci/hda/hdac.h
> > @@ -61,6 +61,7 @@
> > #define HDA_INTEL_82801G HDA_MODEL_CONSTRUCT(INTEL, 0x27d8)
> > #define HDA_INTEL_82801H HDA_MODEL_CONSTRUCT(INTEL, 0x284b)
> > #define HDA_INTEL_82801I HDA_MODEL_CONSTRUCT(INTEL, 0x293e)
> > +#define HDA_INTEL_GMLK HDA_MODEL_CONSTRUCT(INTEL, 0x3198)
> > #define HDA_INTEL_JLK HDA_MODEL_CONSTRUCT(INTEL, 0x38c8)
> > #define HDA_INTEL_82801JI HDA_MODEL_CONSTRUCT(INTEL, 0x3a3e)
> > #define HDA_INTEL_82801JD HDA_MODEL_CONSTRUCT(INTEL, 0x3a6e)
> > @@ -91,7 +92,16 @@
> > #define HDA_INTEL_CMLKLP HDA_MODEL_CONSTRUCT(INTEL, 0x02c8)
> > #define HDA_INTEL_CMLKH HDA_MODEL_CONSTRUCT(INTEL, 0x06c8)
> > #define HDA_INTEL_TGLK HDA_MODEL_CONSTRUCT(INTEL, 0xa0c8)
> > -#define HDA_INTEL_GMLK HDA_MODEL_CONSTRUCT(INTEL, 0x3198)
> > +#define INTEL_A100ID_SUBVENDOR HDA_MODEL_CONSTRUCT(INTEL, 0xa100)
> > +#define INTEL_D400ID_SUBVENDOR HDA_MODEL_CONSTRUCT(INTEL, 0xd400)
> > +#define INTEL_D401ID_SUBVENDOR HDA_MODEL_CONSTRUCT(INTEL, 0xd401)
> > +#define INTEL_D402ID_SUBVENDOR HDA_MODEL_CONSTRUCT(INTEL, 0xd402)
> > +#define INTEL_E305ID_SUBVENDOR HDA_MODEL_CONSTRUCT(INTEL, 0xe305)
> > +#define INTEL_E308ID_SUBVENDOR HDA_MODEL_CONSTRUCT(INTEL, 0xe308)
> > +#define INTEL_E224ID_SUBVENDOR HDA_MODEL_CONSTRUCT(INTEL, 0xe224)
> > +#define INTEL_E400ID_SUBVENDOR HDA_MODEL_CONSTRUCT(INTEL, 0xe400)
> > +#define INTEL_E401ID_SUBVENDOR HDA_MODEL_CONSTRUCT(INTEL, 0xe401)
> > +#define INTEL_E402ID_SUBVENDOR HDA_MODEL_CONSTRUCT(INTEL, 0xe402)
> > #define HDA_INTEL_ALL HDA_MODEL_CONSTRUCT(INTEL, 0xffff)
> >
> > /* Nvidia */
> > @@ -198,6 +208,10 @@
> >
> > /* HP/Compaq */
> > #define HP_VENDORID 0x103c
> > +#define HP_Z200_SUBVENDOR HDA_MODEL_CONSTRUCT(HP, 0x103c)
> > +#define HP_225AID_SUBVENDOR HDA_MODEL_CONSTRUCT(HP, 0x225a)
> > +#define HP_2272ID_SUBVENDOR HDA_MODEL_CONSTRUCT(HP, 0x2272)
> > +#define HP_2273ID_SUBVENDOR HDA_MODEL_CONSTRUCT(HP, 0x2273)
> > #define HP_V3000_SUBVENDOR HDA_MODEL_CONSTRUCT(HP, 0x30b5)
> > #define HP_NX7400_SUBVENDOR HDA_MODEL_CONSTRUCT(HP, 0x30a2)
> > #define HP_NX6310_SUBVENDOR HDA_MODEL_CONSTRUCT(HP, 0x30aa)
> > @@ -207,6 +221,7 @@
> > #define HP_DV5000_SUBVENDOR HDA_MODEL_CONSTRUCT(HP, 0x30a5)
> > #define HP_DC7700S_SUBVENDOR HDA_MODEL_CONSTRUCT(HP, 0x2801)
> > #define HP_DC7700_SUBVENDOR HDA_MODEL_CONSTRUCT(HP, 0x2802)
> > +#define HP_DC5750_SUBVENDOR HDA_MODEL_CONSTRUCT(HP, 0x280a)
> > #define HP_AF006UR_SUBVENDOR HDA_MODEL_CONSTRUCT(HP, 0x83a2)
> > #define HP_ALL_SUBVENDOR HDA_MODEL_CONSTRUCT(HP, 0xffff)
> > /* What is wrong with XN 2563 anyway? (Got the picture ?) */
> > @@ -222,7 +237,28 @@
> > #define DELL_L7480_SUBVENDOR HDA_MODEL_CONSTRUCT(DELL, 0x07a0)
> > #define DELL_XPSM1210_SUBVENDOR HDA_MODEL_CONSTRUCT(DELL, 0x01d7)
> > #define DELL_OPLX745_SUBVENDOR HDA_MODEL_CONSTRUCT(DELL, 0x01da)
> > +#define DELL_05F4ID_SUBVENDOR HDA_MODEL_CONSTRUCT(DELL, 0x05f4)
> > +#define DELL_05F5ID_SUBVENDOR HDA_MODEL_CONSTRUCT(DELL, 0x05f5)
> > +#define DELL_05F6ID_SUBVENDOR HDA_MODEL_CONSTRUCT(DELL, 0x05f6)
> > +#define DELL_V5470_SUBVENDOR HDA_MODEL_CONSTRUCT(DELL, 0x0615)
> > +#define DELL_V5470_1_SUBVENDOR HDA_MODEL_CONSTRUCT(DELL, 0x0616)
> > +#define DELL_064AID_SUBVENDOR HDA_MODEL_CONSTRUCT(DELL, 0x064a)
> > +#define DELL_064BID_SUBVENDOR HDA_MODEL_CONSTRUCT(DELL, 0x064b)
> > +#define DELL_9020M_SUBVENDOR HDA_MODEL_CONSTRUCT(DELL, 0x0669)
> > +#define DELL_V5480_SUBVENDOR HDA_MODEL_CONSTRUCT(DELL, 0x069a)
> > +#define DELL_06D9ID_SUBVENDOR HDA_MODEL_CONSTRUCT(DELL, 0x06d9)
> > +#define DELL_06DAID_SUBVENDOR HDA_MODEL_CONSTRUCT(DELL, 0x06da)
> > +#define DELL_06DBID_SUBVENDOR HDA_MODEL_CONSTRUCT(DELL, 0x06db)
> > +#define DELL_06DDID_SUBVENDOR HDA_MODEL_CONSTRUCT(DELL, 0x06dd)
> > +#define DELL_06DEID_SUBVENDOR HDA_MODEL_CONSTRUCT(DELL, 0x06de)
> > +#define DELL_06DFID_SUBVENDOR HDA_MODEL_CONSTRUCT(DELL, 0x06df)
> > +#define DELL_06E0ID_SUBVENDOR HDA_MODEL_CONSTRUCT(DELL, 0x06e0)
> > +#define DELL_7559_SUBVENDOR HDA_MODEL_CONSTRUCT(DELL, 0x0706)
> > +#define DELL_7000_SUBVENDOR HDA_MODEL_CONSTRUCT(DELL, 0x0798)
> > #define DELL_XPS9560_SUBVENDOR HDA_MODEL_CONSTRUCT(DELL, 0x07be)
> > +#define DELL_E7240_SUBVENDOR HDA_MODEL_CONSTRUCT(DELL, 0x05ca)
> > +#define DELL_164AID_SUBVENDOR HDA_MODEL_CONSTRUCT(DELL, 0x164a)
> > +#define DELL_164BID_SUBVENDOR HDA_MODEL_CONSTRUCT(DELL, 0x164b)
> > #define DELL_I7577_SUBVENDOR HDA_MODEL_CONSTRUCT(DELL, 0x0802)
> > #define DELL_ALL_SUBVENDOR HDA_MODEL_CONSTRUCT(DELL, 0xffff)
> >
> > @@ -233,34 +269,66 @@
> >
> > /* Acer */
> > #define ACER_VENDORID 0x1025
> > +#define ACER_0070ID_SUBVENDOR HDA_MODEL_CONSTRUCT(ACER, 0x0070)
> > +#define ACER_0077ID_SUBVENDOR HDA_MODEL_CONSTRUCT(ACER, 0x0077)
> > +#define ACER_0078ID_SUBVENDOR HDA_MODEL_CONSTRUCT(ACER, 0x0078)
> > +#define ACER_0087ID_SUBVENDOR HDA_MODEL_CONSTRUCT(ACER, 0x0087)
> > #define ACER_A5050_SUBVENDOR HDA_MODEL_CONSTRUCT(ACER, 0x010f)
> > #define ACER_A4520_SUBVENDOR HDA_MODEL_CONSTRUCT(ACER, 0x0127)
> > #define ACER_A4710_SUBVENDOR HDA_MODEL_CONSTRUCT(ACER, 0x012f)
> > #define ACER_A4715_SUBVENDOR HDA_MODEL_CONSTRUCT(ACER, 0x0133)
> > +#define ACER_TM_6293_SUBVENDOR HDA_MODEL_CONSTRUCT(ACER, 0x0139)
> > #define ACER_3681WXM_SUBVENDOR HDA_MODEL_CONSTRUCT(ACER, 0x0110)
> > #define ACER_T6292_SUBVENDOR HDA_MODEL_CONSTRUCT(ACER, 0x011b)
> > #define ACER_T5320_SUBVENDOR HDA_MODEL_CONSTRUCT(ACER, 0x011f)
> > +#define ACER_TM_6293_SUBVENDOR HDA_MODEL_CONSTRUCT(ACER, 0x0139)
> > +#define ACER_AC700_SUBVENDOR HDA_MODEL_CONSTRUCT(ACER, 0x047c)
> > +#define ACER_V5_571G_SUBVENDOR HDA_MODEL_CONSTRUCT(ACER, 0x072d)
> > +#define ACER_AO725_SUBVENDOR HDA_MODEL_CONSTRUCT(ACER, 0x0740)
> > +#define ACER_AO756_SUBVENDOR HDA_MODEL_CONSTRUCT(ACER, 0x0742)
> > +#define ACER_E1_472_SUBVENDOR HDA_MODEL_CONSTRUCT(ACER, 0x0762)
> > +#define ACER_E1_572_SUBVENDOR HDA_MODEL_CONSTRUCT(ACER, 0x0775)
> > +#define ACER_V5_573G_SUBVENDOR HDA_MODEL_CONSTRUCT(ACER, 0x079b)
> > +#define ACER_CB_14_SUBVENDOR HDA_MODEL_CONSTRUCT(ACER, 0x106d)
> > +#define ACER_V5_122P_SUBVENDOR HDA_MODEL_CONSTRUCT(ACER, 0xa80d)
> > +#define ACER_APFV_SUBVENDOR HDA_MODEL_CONSTRUCT(ACER, 0xa884)
> > +#define ACER_E309ID_SUBVENDOR HDA_MODEL_CONSTRUCT(ACER, 0xe309)
> > +#define ACER_E310ID_SUBVENDOR HDA_MODEL_CONSTRUCT(ACER, 0xe310)
> > #define ACER_ALL_SUBVENDOR HDA_MODEL_CONSTRUCT(ACER, 0xffff)
> >
> > /* Asus */
> > #define ASUS_VENDORID 0x1043
> > +#define ASUS_X540A_SUBVENDOR HDA_MODEL_CONSTRUCT(ASUS, 0x103e)
> > +#define ASUS_X540SA_SUBVENDOR HDA_MODEL_CONSTRUCT(ASUS, 0x10c0)
> > +#define ASUS_X556UR_SUBVENDOR HDA_MODEL_CONSTRUCT(ASUS, 0x11c0)
> > +#define ASUS_W5A_SUBVENDOR HDA_MODEL_CONSTRUCT(ASUS, 0x10c3)
> > +#define ASUS_X540LA_SUBVENDOR HDA_MODEL_CONSTRUCT(ASUS, 0x10d0)
> > #define ASUS_A8X_SUBVENDOR HDA_MODEL_CONSTRUCT(ASUS, 0x1153)
> > #define ASUS_U5F_SUBVENDOR HDA_MODEL_CONSTRUCT(ASUS, 0x1263)
> > #define ASUS_W6F_SUBVENDOR HDA_MODEL_CONSTRUCT(ASUS, 0x1263)
> > +#define ASUS_X541SA_SUBVENDOR HDA_MODEL_CONSTRUCT(ASUS, 0x12e0)
> > +#define ASUS_X541UV_SUBVENDOR HDA_MODEL_CONSTRUCT(ASUS, 0x12f0)
> > #define ASUS_A7M_SUBVENDOR HDA_MODEL_CONSTRUCT(ASUS, 0x1323)
> > #define ASUS_F3JC_SUBVENDOR HDA_MODEL_CONSTRUCT(ASUS, 0x1338)
> > #define ASUS_G2K_SUBVENDOR HDA_MODEL_CONSTRUCT(ASUS, 0x1339)
> > +#define ASUS_Z550SA_SUBVENDOR HDA_MODEL_CONSTRUCT(ASUS, 0x13b0)
> > #define ASUS_A7T_SUBVENDOR HDA_MODEL_CONSTRUCT(ASUS, 0x13c2)
> > #define ASUS_UX31A_SUBVENDOR HDA_MODEL_CONSTRUCT(ASUS, 0x1517)
> > +#define ASUS_Z71V_SUBVENDOR HDA_MODEL_CONSTRUCT(ASUS, 0x1964)
> > #define ASUS_W2J_SUBVENDOR HDA_MODEL_CONSTRUCT(ASUS, 0x1971)
> > #define ASUS_M5200_SUBVENDOR HDA_MODEL_CONSTRUCT(ASUS, 0x1993)
> > +#define ASUS_G73JW_SUBVENDOR HDA_MODEL_CONSTRUCT(ASUS, 0x1a13)
> > +#define ASUS_X705UD_SUBVENDOR HDA_MODEL_CONSTRUCT(ASUS, 0x1a30)
> > +#define ASUS_Z550MA_SUBVENDOR HDA_MODEL_CONSTRUCT(ASUS, 0x1bbd)
> > +#define ASUS_X555UB_SUBVENDOR HDA_MODEL_CONSTRUCT(ASUS, 0x1ccd)
> > #define ASUS_P5PL2_SUBVENDOR HDA_MODEL_CONSTRUCT(ASUS, 0x817f)
> > #define ASUS_P1AH2_SUBVENDOR HDA_MODEL_CONSTRUCT(ASUS, 0x81cb)
> > #define ASUS_M2NPVMX_SUBVENDOR HDA_MODEL_CONSTRUCT(ASUS, 0x81cb)
> > #define ASUS_M2V_SUBVENDOR HDA_MODEL_CONSTRUCT(ASUS, 0x81e7)
> > #define ASUS_P5BWD_SUBVENDOR HDA_MODEL_CONSTRUCT(ASUS, 0x81ec)
> > #define ASUS_M2N_SUBVENDOR HDA_MODEL_CONSTRUCT(ASUS, 0x8234)
> > -#define ASUS_A8NVMCSM_SUBVENDOR HDA_MODEL_CONSTRUCT(NVIDIA, 0xcb84)
> > +#define ASUS_A8NVMCSM_SUBVENDOR HDA_MODEL_CONSTRUCT(ASUS, 0xcb84)
> > +#define ASUS_X101CH_SUBVENDOR HDA_MODEL_CONSTRUCT(ASUS, 0x8516)
> > #define ASUS_ALL_SUBVENDOR HDA_MODEL_CONSTRUCT(ASUS, 0xffff)
> >
> > /* IBM / Lenovo */
> > @@ -287,7 +355,11 @@
> > #define LENOVO_T430S_SUBVENDOR HDA_MODEL_CONSTRUCT(LENOVO, 0x21fb)
> > #define LENOVO_T520_SUBVENDOR HDA_MODEL_CONSTRUCT(LENOVO, 0x21cf)
> > #define LENOVO_T530_SUBVENDOR HDA_MODEL_CONSTRUCT(LENOVO, 0x21f6)
> > +#define LENOVO_X230_SUBVENDOR HDA_MODEL_CONSTRUCT(LENOVO, 0x21fa)
> > +#define LENOVO_X230T_SUBVENDOR HDA_MODEL_CONSTRUCT(LENOVO, 0x2203)
> > +#define LENOVO_T431S_SUBVENDOR HDA_MODEL_CONSTRUCT(LENOVO, 0x2208)
> > #define LENOVO_G580_SUBVENDOR HDA_MODEL_CONSTRUCT(LENOVO, 0x3977)
> > +#define LENOVO_3000_SUBVENDOR HDA_MODEL_CONSTRUCT(LENOVO, 0x384e)
> > #define LENOVO_ALL_SUBVENDOR HDA_MODEL_CONSTRUCT(LENOVO, 0xffff)
> >
> > /* Samsung */
> > @@ -307,8 +379,19 @@
> > /* Sony */
> > #define SONY_VENDORID 0x104d
> > #define SONY_S5_SUBVENDOR HDA_MODEL_CONSTRUCT(SONY, 0x81cc)
> > +#define SONY_81A0ID_SUBVENDOR HDA_MODEL_CONSTRUCT(SONY, 0x81a0)
> > +#define SONY_81D6ID_SUBVENDOR HDA_MODEL_CONSTRUCT(SONY, 0x81d6)
> > +#define SONY_81BBID_SUBVENDOR HDA_MODEL_CONSTRUCT(SONY, 0x81bb)
> > +#define SONY_VAIO_TX_SUBVENDOR HDA_MODEL_CONSTRUCT(SONY, 0x81e2)
> > +#define SONY_VAIO_S13_SUBVENDOR HDA_MODEL_CONSTRUCT(SONY, 0x9099)
> > +#define SONY_VAIO_P11_SUBVENDOR HDA_MODEL_CONSTRUCT(SONY, 0x90b5)
> > +#define SONY_VAIO_P13_SUBVENDOR HDA_MODEL_CONSTRUCT(SONY, 0x90b6)
> > #define SONY_ALL_SUBVENDOR HDA_MODEL_CONSTRUCT(SONY, 0xffff)
> >
> > +/* Tyan? */
> > +#define TYAN_VENDORID 0x10f1
> > +#define TYAN_N6650W_SUBVENDOR HDA_MODEL_CONSTRUCT(TYAN, 0x2915)
> > +
> > /*
> > * Apple Intel MacXXXX seems using Sigmatel codec/vendor id
> > * instead of their own, which is beyond my comprehension
> > @@ -322,18 +405,32 @@
> > /* LG Electronics */
> > #define LG_VENDORID 0x1854
> > #define LG_LW20_SUBVENDOR HDA_MODEL_CONSTRUCT(LG, 0x0018)
> > +#define LG_M1_SUBVENDOR HDA_MODEL_CONSTRUCT(LG, 0x003b)
> > +#define LG_P1_SUBVENDOR HDA_MODEL_CONSTRUCT(LG, 0x005f)
> > +#define LG_W1_SUBVENDOR HDA_MODEL_CONSTRUCT(LG, 0x0068)
> > +#define LG_LW25_SUBVENDOR HDA_MODEL_CONSTRUCT(LG, 0x0077)
> > #define LG_ALL_SUBVENDOR HDA_MODEL_CONSTRUCT(LG, 0xffff)
> >
> > /* Fujitsu Siemens */
> > #define FS_VENDORID 0x1734
> > #define FS_PA1510_SUBVENDOR HDA_MODEL_CONSTRUCT(FS, 0x10b8)
> > #define FS_SI1848_SUBVENDOR HDA_MODEL_CONSTRUCT(FS, 0x10cd)
> > +#define FS_AMILO_M1437_SUBVENDOR HDA_MODEL_CONSTRUCT(FS, 0x107c)
> > +#define FS_AMILO_M1451G_SUBVENDOR HDA_MODEL_CONSTRUCT(FS, 0x1094)
> > +#define FS_AMILO_PI1556_SUBVENDOR HDA_MODEL_CONSTRUCT(FS, 0x10b0)
> > +#define FS_AMILO_XI1526_SUBVENDOR HDA_MODEL_CONSTRUCT(FS, 0x10ac)
> > +#define FS_H270_SUBVENDOR HDA_MODEL_CONSTRUCT(FS, 0x1147)
> > #define FS_ALL_SUBVENDOR HDA_MODEL_CONSTRUCT(FS, 0xffff)
> >
> > /* Fujitsu Limited */
> > #define FL_VENDORID 0x10cf
> > #define FL_S7020D_SUBVENDOR HDA_MODEL_CONSTRUCT(FL, 0x1326)
> > +#define FL_LB_S7110_SUBVENDOR HDA_MODEL_CONSTRUCT(FL, 0x1397)
> > #define FL_U1010_SUBVENDOR HDA_MODEL_CONSTRUCT(FL, 0x142d)
> > +#define FL_1475ID_SUBVENDOR HDA_MODEL_CONSTRUCT(FL, 0x1475)
> > +#define FL_LB_U904_SUBVENDOR HDA_MODEL_CONSTRUCT(FL, 0x1845)
> > +#define FL_LB_T731_SUBVENDOR HDA_MODEL_CONSTRUCT(FL, 0x15dc)
> > +#define FL_LB_E725_SUBVENDOR HDA_MODEL_CONSTRUCT(FL, 0x1757)
> > #define FL_ALL_SUBVENDOR HDA_MODEL_CONSTRUCT(FL, 0xffff)
> >
> > /* Toshiba */
> > @@ -346,18 +443,61 @@
> > #define MSI_VENDORID 0x1462
> > #define MSI_MS1034_SUBVENDOR HDA_MODEL_CONSTRUCT(MSI, 0x0349)
> > #define MSI_MS034A_SUBVENDOR HDA_MODEL_CONSTRUCT(MSI, 0x034a)
> > +#define MSI_1150ID_SUBVENDOR HDA_MODEL_CONSTRUCT(MSI, 0x1150)
> > +#define MSI_MS_B120_SUBVENDOR HDA_MODEL_CONSTRUCT(MSI, 0xb120)
> > #define MSI_ALL_SUBVENDOR HDA_MODEL_CONSTRUCT(MSI, 0xffff)
> >
> > /* Giga-Byte Technology */
> > #define GB_VENDORID 0x1458
> > #define GB_G33S2H_SUBVENDOR HDA_MODEL_CONSTRUCT(GB, 0xa022)
> > +#define GB_K8_SUBVENDOR HDA_MODEL_CONSTRUCT(GB, 0xa102)
> > +#define GB_BXBT2807_SUBVENDOR HDA_MODEL_CONSTRUCT(GB, 0xfa53)
> > #define GP_ALL_SUBVENDOR HDA_MODEL_CONSTRUCT(GB, 0xffff)
> >
> > /* Uniwill ? */
> > #define UNIWILL_VENDORID 0x1584
> > #define UNIWILL_9075_SUBVENDOR HDA_MODEL_CONSTRUCT(UNIWILL,
> 0x9075)
> > +#define UNIWILL_9050_SUBVENDOR HDA_MODEL_CONSTRUCT(UNIWILL,
> 0x9050)
> > +#define UNIWILL_9054_SUBVENDOR HDA_MODEL_CONSTRUCT(UNIWILL,
> 0x9054)
> > +#define UNIWILL_9070_SUBVENDOR HDA_MODEL_CONSTRUCT(UNIWILL,
> 0x9070)
> > #define UNIWILL_9080_SUBVENDOR HDA_MODEL_CONSTRUCT(UNIWILL,
> 0x9080)
> >
> > +/* Coeus / Elitegroup */
> > +#define COEUS_VENDORID 0x1019
> > +#define COEUS_G610P_SUBVENDOR HDA_MODEL_CONSTRUCT(COEUS, 0x0f69)
> > +#define COEUS_A880ID_SUBVENDOR HDA_MODEL_CONSTRUCT(COEUS, 0xa880)
> > +
> > +/* Arima */
> > +#define ARIMA_VENDORID 0x161f
> > +#define ARIMA_W810_SUBVENDOR HDA_MODEL_CONSTRUCT(ARIMA, 0x0f69)
> > +
> > +/* Shuttle Computer */
> > +#define SHUTTLE_VENDORID 0x1039
> > +#define SHUTTLE_ST20G5_SUBVENDOR HDA_MODEL_CONSTRUCT(SHUTTLE, 0xc790)
> > +
> > +/* First International Computer */
> > +#define FIC_VENDORID 0x1509
> > +#define FIC_P4M_SUBVENDOR HDA_MODEL_CONSTRUCT(FIC, 0x925d)
> > +
> > +/* Gateway 2000 */
> > +#define GATEWAY_VENDORID 0x107b
> > +#define GATEWAY_3032ID_SUBVENDOR HDA_MODEL_CONSTRUCT(GATEWAY, 0x3032)
> > +#define GATEWAY_3033ID_SUBVENDOR HDA_MODEL_CONSTRUCT(GATEWAY, 0x3033)
> > +#define GATEWAY_4039ID_SUBVENDOR HDA_MODEL_CONSTRUCT(GATEWAY, 0x4039)
> > +
> > +/* Biostar */
> > +#define BIOSTAR_VENDORID 0x1565
> > +#define BIOSTAR_8202ID_SUBVENDOR HDA_MODEL_CONSTRUCT(BIOSTAR, 0x8202)
> > +
> > +/* EPoX Computer Co., Ltd. */
> > +#define EPOX_VENDORID 0x1695
> > +#define EPOX_400DID_SUBVENDOR HDA_MODEL_CONSTRUCT(EPOX, 0x400d)
> > +#define EPOX_EP5LDA_SUBVENDOR HDA_MODEL_CONSTRUCT(EPOX, 0x4012)
> > +
> > +/* AOpen */
> > +#define AOPEN_VENDORID 0xa0a0
> > +#define AOPEN_I915GMMHFS_SUBVENDOR HDA_MODEL_CONSTRUCT(AOPEN, 0x8202)
> > +
> > /* All codecs you can eat... */
> > #define HDA_CODEC_CONSTRUCT(vendor, id) \
> > (((uint32_t)(vendor##_VENDORID) << 16) | ((id) & 0xffff))
> > @@ -390,6 +530,7 @@
> > #define HDA_CODEC_ALC268 HDA_CODEC_CONSTRUCT(REALTEK, 0x0268)
> > #define HDA_CODEC_ALC269 HDA_CODEC_CONSTRUCT(REALTEK, 0x0269)
> > #define HDA_CODEC_ALC270 HDA_CODEC_CONSTRUCT(REALTEK, 0x0270)
> > +#define HDA_CODEC_ALC271 HDA_CODEC_CONSTRUCT(REALTEK, 0x0271)
> > #define HDA_CODEC_ALC272 HDA_CODEC_CONSTRUCT(REALTEK, 0x0272)
> > #define HDA_CODEC_ALC273 HDA_CODEC_CONSTRUCT(REALTEK, 0x0273)
> > #define HDA_CODEC_ALC274 HDA_CODEC_CONSTRUCT(REALTEK, 0x0274)
> > diff --git a/sys/dev/sound/pci/hda/pin_patch.h
> b/sys/dev/sound/pci/hda/pin_patch.h
> > new file mode 100644
> > index 000000000000..8e2c9875906f
> > --- /dev/null
> > +++ b/sys/dev/sound/pci/hda/pin_patch.h
> > @@ -0,0 +1,121 @@
> > +/*-
> > + * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
> > + *
> > + * Copyright (c) 2018 Khamba Staring <k.staring at quickdecay.com>
> > + * All rights reserved.
> > + *
> > + * Redistribution and use in source and binary forms, with or without
> > + * modification, are permitted provided that the following conditions
> > + * are met:
> > + * 1. Redistributions of source code must retain the above copyright
> > + * notice, this list of conditions and the following disclaimer.
> > + * 2. Redistributions in binary form must reproduce the above copyright
> > + * notice, this list of conditions and the following disclaimer in
> the
> > + * documentation and/or other materials provided with the
> distribution.
> > + *
> > + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS''
> AND
> > + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
> > + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
> PURPOSE
> > + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE
> LIABLE
> > + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
> CONSEQUENTIAL
> > + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
> GOODS
> > + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
> > + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
> STRICT
> > + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
> ANY WAY
> > + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
> OF
> > + * SUCH DAMAGE.
> > + *
> > + * $FreeBSD$
> > + */
> > +#ifndef PIN_PATCH_H
> > +#define PIN_PATCH_H
> > +
> > +#include "hdac.h"
> > +
> > +#define PIN_SUBVENDOR(sv) { .id = sv }
> > +
> > +
> > +#define PIN_PATCH_STRING(n, patchstr) { \
> > + .nid = n, \
> > + .type = PIN_PATCH_TYPE_STRING, \
> > + .patch.string = patchstr \
> > +}
> > +#define PIN_OVERRIDE(n, newvalue) { \
> > + .nid = n, \
> > + .type = PIN_PATCH_TYPE_OVERRIDE, \
> > + .patch.override = newvalue \
> > +}
> > +#define PIN_PATCH_NOT_APPLICABLE(n) \
> > + PIN_PATCH_STRING(n, "as=15 misc=1 color=Black ctype=1/8
> device=Speaker loc=Rear conn=None")
> > +#define PIN_PATCH_HP_OUT(n) \
> > + PIN_PATCH_STRING(n, "seq=15 as=1 color=Green ctype=1/8
> device=Headphones loc=Rear")
> > +#define PIN_PATCH_HP(n) \
> > + PIN_PATCH_STRING(n, "seq=15 as=1 misc=1 color=Green ctype=1/8
> device=Headphones loc=Rear")
> > +#define PIN_PATCH_SPEAKER(n) \
> > + PIN_PATCH_STRING(n, "as=2 misc=1 ctype=ATAPI loc=Onboard
> conn=Fixed")
> > +#define PIN_PATCH_BASS_SPEAKER(n) \
> > + PIN_PATCH_STRING(n, "as=3 misc=1 ctype=ATAPI loc=Onboard
> conn=Fixed")
> > +#define PIN_PATCH_MIC_IN(n) \
> > + PIN_PATCH_STRING(n, "as=5 misc=9 color=Pink ctype=1/8 device=Mic
> loc=Rear")
> > +#define PIN_PATCH_MIC_INTERNAL(n) \
> > + PIN_PATCH_STRING(n, "as=6 misc=1 ctype=Digital device=Mic
> loc=Internal conn=Fixed")
> > +#define PIN_PATCH_MIC_FRONT(n) \
> > + PIN_PATCH_STRING(n, "as=4 misc=12 color=Pink ctype=1/8 device=Mic
> loc=Front")
> > +#define PIN_PATCH_LINE_IN(n) \
> > + PIN_PATCH_STRING(n, "seq=1 as=3 color=Blue ctype=1/8
> device=Line-in loc=Rear")
> > +#define PIN_PATCH_LINE_OUT(n) \
> > + PIN_PATCH_STRING(n, "as=1 color=Green ctype=1/8 loc=Rear")
> > +#define PIN_PATCH_SPDIF_OUT(n) \
> > + PIN_PATCH_STRING(n, "as=4 misc=1 color=Green ctype=Optical
> device=SPDIF-out loc=Rear")
> > +#define PIN_PATCH_JACK_WO_DETECT(n) \
> > + PIN_PATCH_STRING(n, "seq=12 as=3 misc=1 color=Pink ctype=1/8
> device=Mic loc=Rear")
> > +#define PIN_PATCH_HPMIC_WO_DETECT(n) \
> > + PIN_PATCH_STRING(n, "seq=13 as=3 misc=1 color=Pink ctype=1/8
> device=Mic loc=Rear")
> > +#define PIN_PATCH_HPMIC_WITH_DETECT(n) \
> > + PIN_PATCH_STRING(n, "seq=12 as=3 color=Pink ctype=1/8 device=Mic
> loc=Rear")
> > +#define PIN_PATCH_CLFE(n) \
> > + PIN_PATCH_STRING(n, "seq=1 as=1 misc=4 color=Black ctype=1/8
> loc=Rear")
> > +#define PIN_PATCH_SURROUND(n) \
> > + PIN_PATCH_STRING(n, "seq=2 as=1 misc=4 color=Orange ctype=1/8
> loc=Rear")
> > +#define PIN_PATCH_SUBWOOFER(n) \
> > + PIN_PATCH_STRING(n, "seq=1 as=1 misc=1 ctype=ATAPI device=Speaker
> loc=Onboard conn=Fixed")
> > +#define PIN_PATCH_DOCK_LINE_OUT(n) \
> > + PIN_PATCH_STRING(n, "seq=15 as=3 color=Black ctype=1/8
> loc=Ext-Rear")
> > +#define PIN_PATCH_DOCK_HP(n) \
> > + PIN_PATCH_STRING(n, "seq=15 as=3 color=Black ctype=1/8
> device=Headphones loc=Ext-Rear")
> > +#define PIN_PATCH_DOCK_MIC_IN(n) \
> > + PIN_PATCH_STRING(n, "as=4 color=Black ctype=1/8 device=Mic
> loc=Ext-Left")
> > +
> > +enum {
> > + PIN_PATCH_TYPE_EOL, /* end-of-list */
> > + PIN_PATCH_TYPE_STRING,
> > + PIN_PATCH_TYPE_MASK,
> > + PIN_PATCH_TYPE_OVERRIDE
> > +};
> > +
> > +struct pin_patch_t {
> > + nid_t nid; /* nid to patch */
> > + int type; /* patch type */
> > + union {
> > + const char *string; /* patch string */
> > + uint32_t mask[2]; /* pin config mask */
> > + uint32_t override; /* pin config override */
> > + } patch;
> > +};
> > +
> > +struct pin_machine_model_t {
> > + uint32_t id; /* vendor machine id */
> > +};
> > +
> > +struct model_pin_patch_t {
> > + struct pin_machine_model_t *models; /* list of machine models
> */
> > + struct pin_patch_t *pin_patches; /* hardcoded overrides */
> > + void (*fixup_func)(struct hdaa_widget *); /* for future use */
> > +};
> > +
> > +struct hdaa_model_pin_patch_t {
> > + uint32_t id; /* the hdaa id */
> > + struct model_pin_patch_t *patches; /* list of machine patches
> */
> > +};
> > +
> > +#endif /* PIN_PATCH_H */
> > diff --git a/sys/dev/sound/pci/hda/pin_patch_realtek.h
> b/sys/dev/sound/pci/hda/pin_patch_realtek.h
> > new file mode 100644
> > index 000000000000..ddaeeaef5345
> > --- /dev/null
> > +++ b/sys/dev/sound/pci/hda/pin_patch_realtek.h
> > @@ -0,0 +1,992 @@
> > +/*-
> > + * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
> > + *
> > + * Copyright (c) 2018 Khamba Staring <k.staring at quickdecay.com>
> > + * All rights reserved.
> > + *
> > + * Redistribution and use in source and binary forms, with or without
> > + * modification, are permitted provided that the following conditions
> > + * are met:
> > + * 1. Redistributions of source code must retain the above copyright
> > + * notice, this list of conditions and the following disclaimer.
> > + * 2. Redistributions in binary form must reproduce the above copyright
> > + * notice, this list of conditions and the following disclaimer in
> the
> > + * documentation and/or other materials provided with the
> distribution.
> > + *
> > + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS''
> AND
> > + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
> > + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
> PURPOSE
> > + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE
> LIABLE
> > + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
> CONSEQUENTIAL
> > + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
> GOODS
> > + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
> > + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
> STRICT
> > + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
> ANY WAY
> > + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
> OF
> > + * SUCH DAMAGE.
> > + *
> > + * $FreeBSD$
> > + */
> > +
> > +#ifndef PIN_PATCH_REALTEK_H
> > +#define PIN_PATCH_REALTEK_H
> > +
> > +#include "hdac.h"
> > +#include "pin_patch.h"
> > +
> > +/*
> > + * Pin patches
> > + */
> > +static struct pin_patch_t pin_patches_lg_lw20[] = {
> > + {
> > + .nid = 26,
> > + .type = PIN_PATCH_TYPE_MASK,
> > + .patch.mask = { HDA_CONFIG_DEFAULTCONF_DEVICE_MASK,
> > +
> HDA_CONFIG_DEFAULTCONF_DEVICE_LINE_IN }
> > + }, {
> > + .nid = 27,
> > + .type = PIN_PATCH_TYPE_MASK,
> > + .patch.mask = { HDA_CONFIG_DEFAULTCONF_DEVICE_MASK,
> > +
> HDA_CONFIG_DEFAULTCONF_DEVICE_HP_OUT }
> > + }, { }
> > +};
> > +
> > +static struct pin_patch_t pin_patches_clevo_d900t_asus_m5200[] = {
> > + {
> > + .nid = 24,
> > + .type = PIN_PATCH_TYPE_MASK,
> > + .patch.mask = { HDA_CONFIG_DEFAULTCONF_DEVICE_MASK,
> > +
> HDA_CONFIG_DEFAULTCONF_DEVICE_LINE_IN }
> > + }, {
> > + .nid = 25,
> > + .type = PIN_PATCH_TYPE_MASK,
> > + .patch.mask = { HDA_CONFIG_DEFAULTCONF_DEVICE_MASK,
> > +
> HDA_CONFIG_DEFAULTCONF_DEVICE_MIC_IN }
> > + }, {
> > + .nid = 26,
> > + .type = PIN_PATCH_TYPE_MASK,
> > + .patch.mask = { HDA_CONFIG_DEFAULTCONF_DEVICE_MASK,
> > +
> HDA_CONFIG_DEFAULTCONF_DEVICE_LINE_IN }
> > + }, {
> > + .nid = 27,
> > + .type = PIN_PATCH_TYPE_MASK,
> > + .patch.mask = { HDA_CONFIG_DEFAULTCONF_DEVICE_MASK,
> > +
> HDA_CONFIG_DEFAULTCONF_DEVICE_LINE_IN }
> > + }, {
> > + .nid = 28,
> > + .type = PIN_PATCH_TYPE_MASK,
> > + .patch.mask = { HDA_CONFIG_DEFAULTCONF_DEVICE_MASK,
> > + HDA_CONFIG_DEFAULTCONF_DEVICE_CD }
> > + }, { }
> > +};
> > +
> > +static struct pin_patch_t pin_patches_msi_ms034a[] = {
> > + {
> > + .nid = 25,
> > + .type = PIN_PATCH_TYPE_MASK,
> > + .patch.mask = {
> > + HDA_CONFIG_DEFAULTCONF_DEVICE_MASK |
> > + HDA_CONFIG_DEFAULTCONF_CONNECTIVITY_MASK,
> > + HDA_CONFIG_DEFAULTCONF_DEVICE_MIC_IN |
> > + HDA_CONFIG_DEFAULTCONF_CONNECTIVITY_FIXED }
> > + }, {
> > + .nid = 28,
> > + .type = PIN_PATCH_TYPE_MASK,
> > + .patch.mask = {
> > + HDA_CONFIG_DEFAULTCONF_DEVICE_MASK |
> > + HDA_CONFIG_DEFAULTCONF_CONNECTIVITY_MASK,
> > + HDA_CONFIG_DEFAULTCONF_DEVICE_CD |
> > + HDA_CONFIG_DEFAULTCONF_CONNECTIVITY_FIXED }
> > + }, { }
> > +};
> > +
> > +static struct pin_patch_t pin_patches_asus_w6f[] = {
> > + {
> > + .nid = 11,
> > + .type = PIN_PATCH_TYPE_MASK,
> > + .patch.mask = {
> > + HDA_CONFIG_DEFAULTCONF_DEVICE_MASK |
> > + HDA_CONFIG_DEFAULTCONF_CONNECTIVITY_MASK,
> > + HDA_CONFIG_DEFAULTCONF_DEVICE_MIC_IN |
> > + HDA_CONFIG_DEFAULTCONF_CONNECTIVITY_FIXED }
> > + }, {
> > + .nid = 12,
> > + .type = PIN_PATCH_TYPE_MASK,
> > + .patch.mask = {
> > + HDA_CONFIG_DEFAULTCONF_DEVICE_MASK |
> > + HDA_CONFIG_DEFAULTCONF_CONNECTIVITY_MASK,
> > + HDA_CONFIG_DEFAULTCONF_DEVICE_MIC_IN |
> > + HDA_CONFIG_DEFAULTCONF_CONNECTIVITY_FIXED }
> > + }, {
> > + .nid = 14,
> > + .type = PIN_PATCH_TYPE_MASK,
> > + .patch.mask = {
> > + HDA_CONFIG_DEFAULTCONF_DEVICE_MASK |
> > + HDA_CONFIG_DEFAULTCONF_CONNECTIVITY_MASK,
> > + HDA_CONFIG_DEFAULTCONF_DEVICE_MIC_IN |
> > + HDA_CONFIG_DEFAULTCONF_CONNECTIVITY_FIXED }
> > + }, {
> > + .nid = 15,
> > + .type = PIN_PATCH_TYPE_MASK,
> > + .patch.mask = {
> > + HDA_CONFIG_DEFAULTCONF_DEVICE_MASK |
> > + HDA_CONFIG_DEFAULTCONF_CONNECTIVITY_MASK,
> > + HDA_CONFIG_DEFAULTCONF_DEVICE_HP_OUT |
> > + HDA_CONFIG_DEFAULTCONF_CONNECTIVITY_JACK }
> > + }, {
> > + .nid = 16,
> > + .type = PIN_PATCH_TYPE_MASK,
> > + .patch.mask = {
> > + HDA_CONFIG_DEFAULTCONF_DEVICE_MASK |
> > + HDA_CONFIG_DEFAULTCONF_CONNECTIVITY_MASK,
> > + HDA_CONFIG_DEFAULTCONF_DEVICE_MIC_IN |
> > + HDA_CONFIG_DEFAULTCONF_CONNECTIVITY_FIXED }
> > + }, {
> > + .nid = 31,
> > + .type = PIN_PATCH_TYPE_MASK,
> > + .patch.mask = {
> > + HDA_CONFIG_DEFAULTCONF_DEVICE_MASK |
> > + HDA_CONFIG_DEFAULTCONF_CONNECTIVITY_MASK,
> > + HDA_CONFIG_DEFAULTCONF_DEVICE_MIC_IN |
> > + HDA_CONFIG_DEFAULTCONF_CONNECTIVITY_FIXED }
> > + }, {
> > + .nid = 32,
> > *** 839 LINES SKIPPED ***
> >
>
> --
> Rod Grimes
> rgrimes at freebsd.org
>
More information about the dev-commits-src-all
mailing list