Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300     1) // SPDX-License-Identifier: GPL-2.0-or-later
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300     2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300     3)  * Universal Interface for Intel High Definition Audio Codec
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300     4)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300     5)  * HD audio interface patch for Realtek ALC codecs
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300     6)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300     7)  * Copyright (c) 2004 Kailang Yang <kailang@realtek.com.tw>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300     8)  *                    PeiSen Hou <pshou@realtek.com.tw>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300     9)  *                    Takashi Iwai <tiwai@suse.de>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    10)  *                    Jonathan Woithe <jwoithe@just42.net>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    11)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    12) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    13) #include <linux/init.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    14) #include <linux/delay.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    15) #include <linux/slab.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    16) #include <linux/pci.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    17) #include <linux/dmi.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    18) #include <linux/module.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    19) #include <linux/input.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    20) #include <linux/leds.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    21) #include <sound/core.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    22) #include <sound/jack.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    23) #include <sound/hda_codec.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    24) #include "hda_local.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    25) #include "hda_auto_parser.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    26) #include "hda_jack.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    27) #include "hda_generic.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    28) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    29) /* keep halting ALC5505 DSP, for power saving */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    30) #define HALT_REALTEK_ALC5505
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    31) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    32) /* extra amp-initialization sequence types */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    33) enum {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    34) 	ALC_INIT_UNDEFINED,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    35) 	ALC_INIT_NONE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    36) 	ALC_INIT_DEFAULT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    37) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    38) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    39) enum {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    40) 	ALC_HEADSET_MODE_UNKNOWN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    41) 	ALC_HEADSET_MODE_UNPLUGGED,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    42) 	ALC_HEADSET_MODE_HEADSET,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    43) 	ALC_HEADSET_MODE_MIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    44) 	ALC_HEADSET_MODE_HEADPHONE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    45) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    46) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    47) enum {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    48) 	ALC_HEADSET_TYPE_UNKNOWN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    49) 	ALC_HEADSET_TYPE_CTIA,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    50) 	ALC_HEADSET_TYPE_OMTP,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    51) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    52) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    53) enum {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    54) 	ALC_KEY_MICMUTE_INDEX,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    55) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    56) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    57) struct alc_customize_define {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    58) 	unsigned int  sku_cfg;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    59) 	unsigned char port_connectivity;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    60) 	unsigned char check_sum;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    61) 	unsigned char customization;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    62) 	unsigned char external_amp;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    63) 	unsigned int  enable_pcbeep:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    64) 	unsigned int  platform_type:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    65) 	unsigned int  swap:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    66) 	unsigned int  override:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    67) 	unsigned int  fixup:1; /* Means that this sku is set by driver, not read from hw */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    68) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    69) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    70) struct alc_coef_led {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    71) 	unsigned int idx;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    72) 	unsigned int mask;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    73) 	unsigned int on;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    74) 	unsigned int off;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    75) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    76) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    77) struct alc_spec {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    78) 	struct hda_gen_spec gen; /* must be at head */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    79) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    80) 	/* codec parameterization */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    81) 	struct alc_customize_define cdefine;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    82) 	unsigned int parse_flags; /* flag for snd_hda_parse_pin_defcfg() */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    83) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    84) 	/* GPIO bits */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    85) 	unsigned int gpio_mask;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    86) 	unsigned int gpio_dir;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    87) 	unsigned int gpio_data;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    88) 	bool gpio_write_delay;	/* add a delay before writing gpio_data */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    89) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    90) 	/* mute LED for HP laptops, see vref_mute_led_set() */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    91) 	int mute_led_polarity;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    92) 	int micmute_led_polarity;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    93) 	hda_nid_t mute_led_nid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    94) 	hda_nid_t cap_mute_led_nid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    95) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    96) 	unsigned int gpio_mute_led_mask;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    97) 	unsigned int gpio_mic_led_mask;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    98) 	struct alc_coef_led mute_led_coef;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300    99) 	struct alc_coef_led mic_led_coef;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   100) 	struct mutex coef_mutex;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   101) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   102) 	hda_nid_t headset_mic_pin;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   103) 	hda_nid_t headphone_mic_pin;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   104) 	int current_headset_mode;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   105) 	int current_headset_type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   106) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   107) 	/* hooks */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   108) 	void (*init_hook)(struct hda_codec *codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   109) #ifdef CONFIG_PM
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   110) 	void (*power_hook)(struct hda_codec *codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   111) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   112) 	void (*shutup)(struct hda_codec *codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   113) 	void (*reboot_notify)(struct hda_codec *codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   114) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   115) 	int init_amp;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   116) 	int codec_variant;	/* flag for other variants */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   117) 	unsigned int has_alc5505_dsp:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   118) 	unsigned int no_depop_delay:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   119) 	unsigned int done_hp_init:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   120) 	unsigned int no_shutup_pins:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   121) 	unsigned int ultra_low_power:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   122) 	unsigned int has_hs_key:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   123) 	unsigned int no_internal_mic_pin:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   124) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   125) 	/* for PLL fix */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   126) 	hda_nid_t pll_nid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   127) 	unsigned int pll_coef_idx, pll_coef_bit;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   128) 	unsigned int coef0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   129) 	struct input_dev *kb_dev;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   130) 	u8 alc_mute_keycode_map[1];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   131) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   132) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   133) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   134)  * COEF access helper functions
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   135)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   136) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   137) static void coef_mutex_lock(struct hda_codec *codec)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   138) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   139) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   140) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   141) 	snd_hda_power_up_pm(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   142) 	mutex_lock(&spec->coef_mutex);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   143) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   144) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   145) static void coef_mutex_unlock(struct hda_codec *codec)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   146) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   147) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   148) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   149) 	mutex_unlock(&spec->coef_mutex);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   150) 	snd_hda_power_down_pm(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   151) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   152) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   153) static int __alc_read_coefex_idx(struct hda_codec *codec, hda_nid_t nid,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   154) 				 unsigned int coef_idx)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   155) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   156) 	unsigned int val;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   157) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   158) 	snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_COEF_INDEX, coef_idx);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   159) 	val = snd_hda_codec_read(codec, nid, 0, AC_VERB_GET_PROC_COEF, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   160) 	return val;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   161) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   162) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   163) static int alc_read_coefex_idx(struct hda_codec *codec, hda_nid_t nid,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   164) 			       unsigned int coef_idx)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   165) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   166) 	unsigned int val;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   167) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   168) 	coef_mutex_lock(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   169) 	val = __alc_read_coefex_idx(codec, nid, coef_idx);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   170) 	coef_mutex_unlock(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   171) 	return val;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   172) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   173) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   174) #define alc_read_coef_idx(codec, coef_idx) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   175) 	alc_read_coefex_idx(codec, 0x20, coef_idx)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   176) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   177) static void __alc_write_coefex_idx(struct hda_codec *codec, hda_nid_t nid,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   178) 				   unsigned int coef_idx, unsigned int coef_val)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   179) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   180) 	snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_COEF_INDEX, coef_idx);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   181) 	snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_PROC_COEF, coef_val);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   182) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   183) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   184) static void alc_write_coefex_idx(struct hda_codec *codec, hda_nid_t nid,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   185) 				 unsigned int coef_idx, unsigned int coef_val)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   186) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   187) 	coef_mutex_lock(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   188) 	__alc_write_coefex_idx(codec, nid, coef_idx, coef_val);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   189) 	coef_mutex_unlock(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   190) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   191) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   192) #define alc_write_coef_idx(codec, coef_idx, coef_val) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   193) 	alc_write_coefex_idx(codec, 0x20, coef_idx, coef_val)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   194) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   195) static void __alc_update_coefex_idx(struct hda_codec *codec, hda_nid_t nid,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   196) 				    unsigned int coef_idx, unsigned int mask,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   197) 				    unsigned int bits_set)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   198) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   199) 	unsigned int val = __alc_read_coefex_idx(codec, nid, coef_idx);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   200) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   201) 	if (val != -1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   202) 		__alc_write_coefex_idx(codec, nid, coef_idx,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   203) 				       (val & ~mask) | bits_set);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   204) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   205) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   206) static void alc_update_coefex_idx(struct hda_codec *codec, hda_nid_t nid,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   207) 				  unsigned int coef_idx, unsigned int mask,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   208) 				  unsigned int bits_set)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   209) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   210) 	coef_mutex_lock(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   211) 	__alc_update_coefex_idx(codec, nid, coef_idx, mask, bits_set);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   212) 	coef_mutex_unlock(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   213) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   214) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   215) #define alc_update_coef_idx(codec, coef_idx, mask, bits_set)	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   216) 	alc_update_coefex_idx(codec, 0x20, coef_idx, mask, bits_set)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   217) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   218) /* a special bypass for COEF 0; read the cached value at the second time */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   219) static unsigned int alc_get_coef0(struct hda_codec *codec)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   220) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   221) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   222) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   223) 	if (!spec->coef0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   224) 		spec->coef0 = alc_read_coef_idx(codec, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   225) 	return spec->coef0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   226) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   227) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   228) /* coef writes/updates batch */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   229) struct coef_fw {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   230) 	unsigned char nid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   231) 	unsigned char idx;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   232) 	unsigned short mask;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   233) 	unsigned short val;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   234) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   235) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   236) #define UPDATE_COEFEX(_nid, _idx, _mask, _val) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   237) 	{ .nid = (_nid), .idx = (_idx), .mask = (_mask), .val = (_val) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   238) #define WRITE_COEFEX(_nid, _idx, _val) UPDATE_COEFEX(_nid, _idx, -1, _val)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   239) #define WRITE_COEF(_idx, _val) WRITE_COEFEX(0x20, _idx, _val)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   240) #define UPDATE_COEF(_idx, _mask, _val) UPDATE_COEFEX(0x20, _idx, _mask, _val)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   241) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   242) static void alc_process_coef_fw(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   243) 				const struct coef_fw *fw)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   244) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   245) 	coef_mutex_lock(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   246) 	for (; fw->nid; fw++) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   247) 		if (fw->mask == (unsigned short)-1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   248) 			__alc_write_coefex_idx(codec, fw->nid, fw->idx, fw->val);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   249) 		else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   250) 			__alc_update_coefex_idx(codec, fw->nid, fw->idx,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   251) 						fw->mask, fw->val);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   252) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   253) 	coef_mutex_unlock(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   254) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   255) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   256) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   257)  * GPIO setup tables, used in initialization
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   258)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   259) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   260) /* Enable GPIO mask and set output */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   261) static void alc_setup_gpio(struct hda_codec *codec, unsigned int mask)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   262) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   263) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   264) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   265) 	spec->gpio_mask |= mask;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   266) 	spec->gpio_dir |= mask;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   267) 	spec->gpio_data |= mask;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   268) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   269) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   270) static void alc_write_gpio_data(struct hda_codec *codec)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   271) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   272) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   273) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   274) 	snd_hda_codec_write(codec, 0x01, 0, AC_VERB_SET_GPIO_DATA,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   275) 			    spec->gpio_data);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   276) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   277) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   278) static void alc_update_gpio_data(struct hda_codec *codec, unsigned int mask,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   279) 				 bool on)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   280) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   281) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   282) 	unsigned int oldval = spec->gpio_data;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   283) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   284) 	if (on)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   285) 		spec->gpio_data |= mask;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   286) 	else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   287) 		spec->gpio_data &= ~mask;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   288) 	if (oldval != spec->gpio_data)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   289) 		alc_write_gpio_data(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   290) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   291) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   292) static void alc_write_gpio(struct hda_codec *codec)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   293) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   294) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   295) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   296) 	if (!spec->gpio_mask)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   297) 		return;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   298) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   299) 	snd_hda_codec_write(codec, codec->core.afg, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   300) 			    AC_VERB_SET_GPIO_MASK, spec->gpio_mask);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   301) 	snd_hda_codec_write(codec, codec->core.afg, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   302) 			    AC_VERB_SET_GPIO_DIRECTION, spec->gpio_dir);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   303) 	if (spec->gpio_write_delay)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   304) 		msleep(1);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   305) 	alc_write_gpio_data(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   306) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   307) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   308) static void alc_fixup_gpio(struct hda_codec *codec, int action,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   309) 			   unsigned int mask)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   310) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   311) 	if (action == HDA_FIXUP_ACT_PRE_PROBE)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   312) 		alc_setup_gpio(codec, mask);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   313) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   314) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   315) static void alc_fixup_gpio1(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   316) 			    const struct hda_fixup *fix, int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   317) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   318) 	alc_fixup_gpio(codec, action, 0x01);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   319) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   320) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   321) static void alc_fixup_gpio2(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   322) 			    const struct hda_fixup *fix, int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   323) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   324) 	alc_fixup_gpio(codec, action, 0x02);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   325) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   326) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   327) static void alc_fixup_gpio3(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   328) 			    const struct hda_fixup *fix, int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   329) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   330) 	alc_fixup_gpio(codec, action, 0x03);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   331) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   332) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   333) static void alc_fixup_gpio4(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   334) 			    const struct hda_fixup *fix, int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   335) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   336) 	alc_fixup_gpio(codec, action, 0x04);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   337) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   338) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   339) static void alc_fixup_micmute_led(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   340) 				  const struct hda_fixup *fix, int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   341) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   342) 	if (action == HDA_FIXUP_ACT_PROBE)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   343) 		snd_hda_gen_add_micmute_led_cdev(codec, NULL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   344) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   345) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   346) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   347)  * Fix hardware PLL issue
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   348)  * On some codecs, the analog PLL gating control must be off while
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   349)  * the default value is 1.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   350)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   351) static void alc_fix_pll(struct hda_codec *codec)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   352) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   353) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   354) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   355) 	if (spec->pll_nid)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   356) 		alc_update_coefex_idx(codec, spec->pll_nid, spec->pll_coef_idx,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   357) 				      1 << spec->pll_coef_bit, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   358) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   359) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   360) static void alc_fix_pll_init(struct hda_codec *codec, hda_nid_t nid,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   361) 			     unsigned int coef_idx, unsigned int coef_bit)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   362) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   363) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   364) 	spec->pll_nid = nid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   365) 	spec->pll_coef_idx = coef_idx;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   366) 	spec->pll_coef_bit = coef_bit;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   367) 	alc_fix_pll(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   368) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   369) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   370) /* update the master volume per volume-knob's unsol event */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   371) static void alc_update_knob_master(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   372) 				   struct hda_jack_callback *jack)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   373) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   374) 	unsigned int val;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   375) 	struct snd_kcontrol *kctl;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   376) 	struct snd_ctl_elem_value *uctl;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   377) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   378) 	kctl = snd_hda_find_mixer_ctl(codec, "Master Playback Volume");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   379) 	if (!kctl)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   380) 		return;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   381) 	uctl = kzalloc(sizeof(*uctl), GFP_KERNEL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   382) 	if (!uctl)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   383) 		return;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   384) 	val = snd_hda_codec_read(codec, jack->nid, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   385) 				 AC_VERB_GET_VOLUME_KNOB_CONTROL, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   386) 	val &= HDA_AMP_VOLMASK;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   387) 	uctl->value.integer.value[0] = val;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   388) 	uctl->value.integer.value[1] = val;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   389) 	kctl->put(kctl, uctl);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   390) 	kfree(uctl);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   391) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   392) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   393) static void alc880_unsol_event(struct hda_codec *codec, unsigned int res)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   394) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   395) 	/* For some reason, the res given from ALC880 is broken.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   396) 	   Here we adjust it properly. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   397) 	snd_hda_jack_unsol_event(codec, res >> 2);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   398) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   399) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   400) /* Change EAPD to verb control */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   401) static void alc_fill_eapd_coef(struct hda_codec *codec)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   402) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   403) 	int coef;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   404) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   405) 	coef = alc_get_coef0(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   406) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   407) 	switch (codec->core.vendor_id) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   408) 	case 0x10ec0262:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   409) 		alc_update_coef_idx(codec, 0x7, 0, 1<<5);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   410) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   411) 	case 0x10ec0267:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   412) 	case 0x10ec0268:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   413) 		alc_update_coef_idx(codec, 0x7, 0, 1<<13);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   414) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   415) 	case 0x10ec0269:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   416) 		if ((coef & 0x00f0) == 0x0010)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   417) 			alc_update_coef_idx(codec, 0xd, 0, 1<<14);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   418) 		if ((coef & 0x00f0) == 0x0020)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   419) 			alc_update_coef_idx(codec, 0x4, 1<<15, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   420) 		if ((coef & 0x00f0) == 0x0030)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   421) 			alc_update_coef_idx(codec, 0x10, 1<<9, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   422) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   423) 	case 0x10ec0280:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   424) 	case 0x10ec0284:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   425) 	case 0x10ec0290:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   426) 	case 0x10ec0292:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   427) 		alc_update_coef_idx(codec, 0x4, 1<<15, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   428) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   429) 	case 0x10ec0225:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   430) 	case 0x10ec0295:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   431) 	case 0x10ec0299:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   432) 		alc_update_coef_idx(codec, 0x67, 0xf000, 0x3000);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   433) 		fallthrough;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   434) 	case 0x10ec0215:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   435) 	case 0x10ec0230:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   436) 	case 0x10ec0233:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   437) 	case 0x10ec0235:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   438) 	case 0x10ec0236:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   439) 	case 0x10ec0245:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   440) 	case 0x10ec0255:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   441) 	case 0x10ec0256:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   442) 	case 0x10ec0257:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   443) 	case 0x10ec0282:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   444) 	case 0x10ec0283:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   445) 	case 0x10ec0286:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   446) 	case 0x10ec0288:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   447) 	case 0x10ec0285:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   448) 	case 0x10ec0298:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   449) 	case 0x10ec0289:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   450) 	case 0x10ec0300:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   451) 		alc_update_coef_idx(codec, 0x10, 1<<9, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   452) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   453) 	case 0x10ec0275:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   454) 		alc_update_coef_idx(codec, 0xe, 0, 1<<0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   455) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   456) 	case 0x10ec0287:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   457) 		alc_update_coef_idx(codec, 0x10, 1<<9, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   458) 		alc_write_coef_idx(codec, 0x8, 0x4ab7);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   459) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   460) 	case 0x10ec0293:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   461) 		alc_update_coef_idx(codec, 0xa, 1<<13, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   462) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   463) 	case 0x10ec0234:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   464) 	case 0x10ec0274:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   465) 	case 0x10ec0294:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   466) 	case 0x10ec0700:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   467) 	case 0x10ec0701:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   468) 	case 0x10ec0703:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   469) 	case 0x10ec0711:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   470) 		alc_update_coef_idx(codec, 0x10, 1<<15, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   471) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   472) 	case 0x10ec0662:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   473) 		if ((coef & 0x00f0) == 0x0030)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   474) 			alc_update_coef_idx(codec, 0x4, 1<<10, 0); /* EAPD Ctrl */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   475) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   476) 	case 0x10ec0272:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   477) 	case 0x10ec0273:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   478) 	case 0x10ec0663:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   479) 	case 0x10ec0665:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   480) 	case 0x10ec0670:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   481) 	case 0x10ec0671:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   482) 	case 0x10ec0672:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   483) 		alc_update_coef_idx(codec, 0xd, 0, 1<<14); /* EAPD Ctrl */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   484) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   485) 	case 0x10ec0222:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   486) 	case 0x10ec0623:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   487) 		alc_update_coef_idx(codec, 0x19, 1<<13, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   488) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   489) 	case 0x10ec0668:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   490) 		alc_update_coef_idx(codec, 0x7, 3<<13, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   491) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   492) 	case 0x10ec0867:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   493) 		alc_update_coef_idx(codec, 0x4, 1<<10, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   494) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   495) 	case 0x10ec0888:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   496) 		if ((coef & 0x00f0) == 0x0020 || (coef & 0x00f0) == 0x0030)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   497) 			alc_update_coef_idx(codec, 0x7, 1<<5, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   498) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   499) 	case 0x10ec0892:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   500) 	case 0x10ec0897:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   501) 		alc_update_coef_idx(codec, 0x7, 1<<5, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   502) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   503) 	case 0x10ec0899:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   504) 	case 0x10ec0900:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   505) 	case 0x10ec0b00:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   506) 	case 0x10ec1168:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   507) 	case 0x10ec1220:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   508) 		alc_update_coef_idx(codec, 0x7, 1<<1, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   509) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   510) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   511) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   512) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   513) /* additional initialization for ALC888 variants */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   514) static void alc888_coef_init(struct hda_codec *codec)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   515) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   516) 	switch (alc_get_coef0(codec) & 0x00f0) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   517) 	/* alc888-VA */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   518) 	case 0x00:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   519) 	/* alc888-VB */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   520) 	case 0x10:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   521) 		alc_update_coef_idx(codec, 7, 0, 0x2030); /* Turn EAPD to High */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   522) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   523) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   524) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   525) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   526) /* turn on/off EAPD control (only if available) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   527) static void set_eapd(struct hda_codec *codec, hda_nid_t nid, int on)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   528) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   529) 	if (get_wcaps_type(get_wcaps(codec, nid)) != AC_WID_PIN)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   530) 		return;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   531) 	if (snd_hda_query_pin_caps(codec, nid) & AC_PINCAP_EAPD)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   532) 		snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_EAPD_BTLENABLE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   533) 				    on ? 2 : 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   534) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   535) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   536) /* turn on/off EAPD controls of the codec */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   537) static void alc_auto_setup_eapd(struct hda_codec *codec, bool on)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   538) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   539) 	/* We currently only handle front, HP */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   540) 	static const hda_nid_t pins[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   541) 		0x0f, 0x10, 0x14, 0x15, 0x17, 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   542) 	};
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   543) 	const hda_nid_t *p;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   544) 	for (p = pins; *p; p++)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   545) 		set_eapd(codec, *p, on);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   546) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   547) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   548) static int find_ext_mic_pin(struct hda_codec *codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   549) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   550) static void alc_headset_mic_no_shutup(struct hda_codec *codec)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   551) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   552) 	const struct hda_pincfg *pin;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   553) 	int mic_pin = find_ext_mic_pin(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   554) 	int i;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   555) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   556) 	/* don't shut up pins when unloading the driver; otherwise it breaks
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   557) 	 * the default pin setup at the next load of the driver
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   558) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   559) 	if (codec->bus->shutdown)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   560) 		return;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   561) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   562) 	snd_array_for_each(&codec->init_pins, i, pin) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   563) 		/* use read here for syncing after issuing each verb */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   564) 		if (pin->nid != mic_pin)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   565) 			snd_hda_codec_read(codec, pin->nid, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   566) 					AC_VERB_SET_PIN_WIDGET_CONTROL, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   567) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   568) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   569) 	codec->pins_shutup = 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   570) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   571) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   572) static void alc_shutup_pins(struct hda_codec *codec)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   573) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   574) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   575) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   576) 	switch (codec->core.vendor_id) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   577) 	case 0x10ec0236:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   578) 	case 0x10ec0256:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   579) 	case 0x10ec0283:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   580) 	case 0x10ec0286:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   581) 	case 0x10ec0288:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   582) 	case 0x10ec0298:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   583) 		alc_headset_mic_no_shutup(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   584) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   585) 	default:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   586) 		if (!spec->no_shutup_pins)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   587) 			snd_hda_shutup_pins(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   588) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   589) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   590) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   591) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   592) /* generic shutup callback;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   593)  * just turning off EAPD and a little pause for avoiding pop-noise
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   594)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   595) static void alc_eapd_shutup(struct hda_codec *codec)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   596) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   597) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   598) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   599) 	alc_auto_setup_eapd(codec, false);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   600) 	if (!spec->no_depop_delay)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   601) 		msleep(200);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   602) 	alc_shutup_pins(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   603) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   604) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   605) /* generic EAPD initialization */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   606) static void alc_auto_init_amp(struct hda_codec *codec, int type)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   607) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   608) 	alc_auto_setup_eapd(codec, true);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   609) 	alc_write_gpio(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   610) 	switch (type) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   611) 	case ALC_INIT_DEFAULT:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   612) 		switch (codec->core.vendor_id) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   613) 		case 0x10ec0260:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   614) 			alc_update_coefex_idx(codec, 0x1a, 7, 0, 0x2010);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   615) 			break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   616) 		case 0x10ec0880:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   617) 		case 0x10ec0882:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   618) 		case 0x10ec0883:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   619) 		case 0x10ec0885:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   620) 			alc_update_coef_idx(codec, 7, 0, 0x2030);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   621) 			break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   622) 		case 0x10ec0888:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   623) 			alc888_coef_init(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   624) 			break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   625) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   626) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   627) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   628) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   629) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   630) /* get a primary headphone pin if available */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   631) static hda_nid_t alc_get_hp_pin(struct alc_spec *spec)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   632) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   633) 	if (spec->gen.autocfg.hp_pins[0])
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   634) 		return spec->gen.autocfg.hp_pins[0];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   635) 	if (spec->gen.autocfg.line_out_type == AC_JACK_HP_OUT)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   636) 		return spec->gen.autocfg.line_out_pins[0];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   637) 	return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   638) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   639) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   640) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   641)  * Realtek SSID verification
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   642)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   643) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   644) /* Could be any non-zero and even value. When used as fixup, tells
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   645)  * the driver to ignore any present sku defines.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   646)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   647) #define ALC_FIXUP_SKU_IGNORE (2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   648) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   649) static void alc_fixup_sku_ignore(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   650) 				 const struct hda_fixup *fix, int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   651) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   652) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   653) 	if (action == HDA_FIXUP_ACT_PRE_PROBE) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   654) 		spec->cdefine.fixup = 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   655) 		spec->cdefine.sku_cfg = ALC_FIXUP_SKU_IGNORE;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   656) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   657) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   658) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   659) static void alc_fixup_no_depop_delay(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   660) 				    const struct hda_fixup *fix, int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   661) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   662) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   663) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   664) 	if (action == HDA_FIXUP_ACT_PROBE) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   665) 		spec->no_depop_delay = 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   666) 		codec->depop_delay = 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   667) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   668) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   669) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   670) static int alc_auto_parse_customize_define(struct hda_codec *codec)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   671) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   672) 	unsigned int ass, tmp, i;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   673) 	unsigned nid = 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   674) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   675) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   676) 	spec->cdefine.enable_pcbeep = 1; /* assume always enabled */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   677) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   678) 	if (spec->cdefine.fixup) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   679) 		ass = spec->cdefine.sku_cfg;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   680) 		if (ass == ALC_FIXUP_SKU_IGNORE)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   681) 			return -1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   682) 		goto do_sku;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   683) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   684) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   685) 	if (!codec->bus->pci)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   686) 		return -1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   687) 	ass = codec->core.subsystem_id & 0xffff;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   688) 	if (ass != codec->bus->pci->subsystem_device && (ass & 1))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   689) 		goto do_sku;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   690) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   691) 	nid = 0x1d;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   692) 	if (codec->core.vendor_id == 0x10ec0260)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   693) 		nid = 0x17;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   694) 	ass = snd_hda_codec_get_pincfg(codec, nid);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   695) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   696) 	if (!(ass & 1)) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   697) 		codec_info(codec, "%s: SKU not ready 0x%08x\n",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   698) 			   codec->core.chip_name, ass);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   699) 		return -1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   700) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   701) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   702) 	/* check sum */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   703) 	tmp = 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   704) 	for (i = 1; i < 16; i++) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   705) 		if ((ass >> i) & 1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   706) 			tmp++;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   707) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   708) 	if (((ass >> 16) & 0xf) != tmp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   709) 		return -1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   710) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   711) 	spec->cdefine.port_connectivity = ass >> 30;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   712) 	spec->cdefine.enable_pcbeep = (ass & 0x100000) >> 20;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   713) 	spec->cdefine.check_sum = (ass >> 16) & 0xf;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   714) 	spec->cdefine.customization = ass >> 8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   715) do_sku:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   716) 	spec->cdefine.sku_cfg = ass;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   717) 	spec->cdefine.external_amp = (ass & 0x38) >> 3;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   718) 	spec->cdefine.platform_type = (ass & 0x4) >> 2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   719) 	spec->cdefine.swap = (ass & 0x2) >> 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   720) 	spec->cdefine.override = ass & 0x1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   721) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   722) 	codec_dbg(codec, "SKU: Nid=0x%x sku_cfg=0x%08x\n",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   723) 		   nid, spec->cdefine.sku_cfg);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   724) 	codec_dbg(codec, "SKU: port_connectivity=0x%x\n",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   725) 		   spec->cdefine.port_connectivity);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   726) 	codec_dbg(codec, "SKU: enable_pcbeep=0x%x\n", spec->cdefine.enable_pcbeep);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   727) 	codec_dbg(codec, "SKU: check_sum=0x%08x\n", spec->cdefine.check_sum);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   728) 	codec_dbg(codec, "SKU: customization=0x%08x\n", spec->cdefine.customization);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   729) 	codec_dbg(codec, "SKU: external_amp=0x%x\n", spec->cdefine.external_amp);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   730) 	codec_dbg(codec, "SKU: platform_type=0x%x\n", spec->cdefine.platform_type);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   731) 	codec_dbg(codec, "SKU: swap=0x%x\n", spec->cdefine.swap);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   732) 	codec_dbg(codec, "SKU: override=0x%x\n", spec->cdefine.override);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   733) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   734) 	return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   735) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   736) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   737) /* return the position of NID in the list, or -1 if not found */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   738) static int find_idx_in_nid_list(hda_nid_t nid, const hda_nid_t *list, int nums)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   739) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   740) 	int i;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   741) 	for (i = 0; i < nums; i++)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   742) 		if (list[i] == nid)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   743) 			return i;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   744) 	return -1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   745) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   746) /* return true if the given NID is found in the list */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   747) static bool found_in_nid_list(hda_nid_t nid, const hda_nid_t *list, int nums)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   748) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   749) 	return find_idx_in_nid_list(nid, list, nums) >= 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   750) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   751) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   752) /* check subsystem ID and set up device-specific initialization;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   753)  * return 1 if initialized, 0 if invalid SSID
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   754)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   755) /* 32-bit subsystem ID for BIOS loading in HD Audio codec.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   756)  *	31 ~ 16 :	Manufacture ID
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   757)  *	15 ~ 8	:	SKU ID
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   758)  *	7  ~ 0	:	Assembly ID
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   759)  *	port-A --> pin 39/41, port-E --> pin 14/15, port-D --> pin 35/36
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   760)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   761) static int alc_subsystem_id(struct hda_codec *codec, const hda_nid_t *ports)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   762) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   763) 	unsigned int ass, tmp, i;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   764) 	unsigned nid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   765) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   766) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   767) 	if (spec->cdefine.fixup) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   768) 		ass = spec->cdefine.sku_cfg;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   769) 		if (ass == ALC_FIXUP_SKU_IGNORE)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   770) 			return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   771) 		goto do_sku;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   772) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   773) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   774) 	ass = codec->core.subsystem_id & 0xffff;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   775) 	if (codec->bus->pci &&
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   776) 	    ass != codec->bus->pci->subsystem_device && (ass & 1))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   777) 		goto do_sku;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   778) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   779) 	/* invalid SSID, check the special NID pin defcfg instead */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   780) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   781) 	 * 31~30	: port connectivity
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   782) 	 * 29~21	: reserve
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   783) 	 * 20		: PCBEEP input
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   784) 	 * 19~16	: Check sum (15:1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   785) 	 * 15~1		: Custom
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   786) 	 * 0		: override
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   787) 	*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   788) 	nid = 0x1d;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   789) 	if (codec->core.vendor_id == 0x10ec0260)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   790) 		nid = 0x17;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   791) 	ass = snd_hda_codec_get_pincfg(codec, nid);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   792) 	codec_dbg(codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   793) 		  "realtek: No valid SSID, checking pincfg 0x%08x for NID 0x%x\n",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   794) 		   ass, nid);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   795) 	if (!(ass & 1))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   796) 		return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   797) 	if ((ass >> 30) != 1)	/* no physical connection */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   798) 		return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   799) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   800) 	/* check sum */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   801) 	tmp = 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   802) 	for (i = 1; i < 16; i++) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   803) 		if ((ass >> i) & 1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   804) 			tmp++;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   805) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   806) 	if (((ass >> 16) & 0xf) != tmp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   807) 		return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   808) do_sku:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   809) 	codec_dbg(codec, "realtek: Enabling init ASM_ID=0x%04x CODEC_ID=%08x\n",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   810) 		   ass & 0xffff, codec->core.vendor_id);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   811) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   812) 	 * 0 : override
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   813) 	 * 1 :	Swap Jack
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   814) 	 * 2 : 0 --> Desktop, 1 --> Laptop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   815) 	 * 3~5 : External Amplifier control
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   816) 	 * 7~6 : Reserved
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   817) 	*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   818) 	tmp = (ass & 0x38) >> 3;	/* external Amp control */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   819) 	if (spec->init_amp == ALC_INIT_UNDEFINED) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   820) 		switch (tmp) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   821) 		case 1:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   822) 			alc_setup_gpio(codec, 0x01);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   823) 			break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   824) 		case 3:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   825) 			alc_setup_gpio(codec, 0x02);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   826) 			break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   827) 		case 7:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   828) 			alc_setup_gpio(codec, 0x03);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   829) 			break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   830) 		case 5:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   831) 		default:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   832) 			spec->init_amp = ALC_INIT_DEFAULT;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   833) 			break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   834) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   835) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   836) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   837) 	/* is laptop or Desktop and enable the function "Mute internal speaker
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   838) 	 * when the external headphone out jack is plugged"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   839) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   840) 	if (!(ass & 0x8000))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   841) 		return 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   842) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   843) 	 * 10~8 : Jack location
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   844) 	 * 12~11: Headphone out -> 00: PortA, 01: PortE, 02: PortD, 03: Resvered
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   845) 	 * 14~13: Resvered
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   846) 	 * 15   : 1 --> enable the function "Mute internal speaker
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   847) 	 *	        when the external headphone out jack is plugged"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   848) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   849) 	if (!alc_get_hp_pin(spec)) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   850) 		hda_nid_t nid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   851) 		tmp = (ass >> 11) & 0x3;	/* HP to chassis */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   852) 		nid = ports[tmp];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   853) 		if (found_in_nid_list(nid, spec->gen.autocfg.line_out_pins,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   854) 				      spec->gen.autocfg.line_outs))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   855) 			return 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   856) 		spec->gen.autocfg.hp_pins[0] = nid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   857) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   858) 	return 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   859) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   860) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   861) /* Check the validity of ALC subsystem-id
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   862)  * ports contains an array of 4 pin NIDs for port-A, E, D and I */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   863) static void alc_ssid_check(struct hda_codec *codec, const hda_nid_t *ports)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   864) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   865) 	if (!alc_subsystem_id(codec, ports)) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   866) 		struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   867) 		if (spec->init_amp == ALC_INIT_UNDEFINED) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   868) 			codec_dbg(codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   869) 				  "realtek: Enable default setup for auto mode as fallback\n");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   870) 			spec->init_amp = ALC_INIT_DEFAULT;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   871) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   872) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   873) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   874) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   875) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   876)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   877) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   878) static void alc_fixup_inv_dmic(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   879) 			       const struct hda_fixup *fix, int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   880) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   881) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   882) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   883) 	spec->gen.inv_dmic_split = 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   884) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   885) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   886) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   887) static int alc_build_controls(struct hda_codec *codec)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   888) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   889) 	int err;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   890) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   891) 	err = snd_hda_gen_build_controls(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   892) 	if (err < 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   893) 		return err;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   894) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   895) 	snd_hda_apply_fixup(codec, HDA_FIXUP_ACT_BUILD);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   896) 	return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   897) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   898) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   899) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   900) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   901)  * Common callbacks
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   902)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   903) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   904) static void alc_pre_init(struct hda_codec *codec)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   905) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   906) 	alc_fill_eapd_coef(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   907) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   908) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   909) #define is_s3_resume(codec) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   910) 	((codec)->core.dev.power.power_state.event == PM_EVENT_RESUME)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   911) #define is_s4_resume(codec) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   912) 	((codec)->core.dev.power.power_state.event == PM_EVENT_RESTORE)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   913) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   914) static int alc_init(struct hda_codec *codec)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   915) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   916) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   917) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   918) 	/* hibernation resume needs the full chip initialization */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   919) 	if (is_s4_resume(codec))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   920) 		alc_pre_init(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   921) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   922) 	if (spec->init_hook)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   923) 		spec->init_hook(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   924) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   925) 	spec->gen.skip_verbs = 1; /* applied in below */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   926) 	snd_hda_gen_init(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   927) 	alc_fix_pll(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   928) 	alc_auto_init_amp(codec, spec->init_amp);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   929) 	snd_hda_apply_verbs(codec); /* apply verbs here after own init */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   930) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   931) 	snd_hda_apply_fixup(codec, HDA_FIXUP_ACT_INIT);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   932) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   933) 	return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   934) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   935) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   936) static inline void alc_shutup(struct hda_codec *codec)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   937) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   938) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   939) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   940) 	if (!snd_hda_get_bool_hint(codec, "shutup"))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   941) 		return; /* disabled explicitly by hints */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   942) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   943) 	if (spec && spec->shutup)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   944) 		spec->shutup(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   945) 	else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   946) 		alc_shutup_pins(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   947) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   948) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   949) static void alc_reboot_notify(struct hda_codec *codec)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   950) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   951) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   952) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   953) 	if (spec && spec->reboot_notify)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   954) 		spec->reboot_notify(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   955) 	else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   956) 		alc_shutup(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   957) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   958) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   959) #define alc_free	snd_hda_gen_free
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   960) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   961) #ifdef CONFIG_PM
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   962) static void alc_power_eapd(struct hda_codec *codec)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   963) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   964) 	alc_auto_setup_eapd(codec, false);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   965) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   966) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   967) static int alc_suspend(struct hda_codec *codec)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   968) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   969) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   970) 	alc_shutup(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   971) 	if (spec && spec->power_hook)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   972) 		spec->power_hook(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   973) 	return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   974) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   975) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   976) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   977) #ifdef CONFIG_PM
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   978) static int alc_resume(struct hda_codec *codec)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   979) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   980) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   981) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   982) 	if (!spec->no_depop_delay)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   983) 		msleep(150); /* to avoid pop noise */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   984) 	codec->patch_ops.init(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   985) 	snd_hda_regmap_sync(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   986) 	hda_call_check_power_status(codec, 0x01);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   987) 	return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   988) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   989) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   990) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   991) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   992)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   993) static const struct hda_codec_ops alc_patch_ops = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   994) 	.build_controls = alc_build_controls,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   995) 	.build_pcms = snd_hda_gen_build_pcms,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   996) 	.init = alc_init,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   997) 	.free = alc_free,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   998) 	.unsol_event = snd_hda_jack_unsol_event,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   999) #ifdef CONFIG_PM
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1000) 	.resume = alc_resume,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1001) 	.suspend = alc_suspend,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1002) 	.check_power_status = snd_hda_gen_check_power_status,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1003) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1004) 	.reboot_notify = alc_reboot_notify,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1005) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1006) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1007) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1008) #define alc_codec_rename(codec, name) snd_hda_codec_set_name(codec, name)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1009) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1010) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1011)  * Rename codecs appropriately from COEF value or subvendor id
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1012)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1013) struct alc_codec_rename_table {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1014) 	unsigned int vendor_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1015) 	unsigned short coef_mask;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1016) 	unsigned short coef_bits;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1017) 	const char *name;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1018) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1019) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1020) struct alc_codec_rename_pci_table {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1021) 	unsigned int codec_vendor_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1022) 	unsigned short pci_subvendor;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1023) 	unsigned short pci_subdevice;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1024) 	const char *name;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1025) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1026) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1027) static const struct alc_codec_rename_table rename_tbl[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1028) 	{ 0x10ec0221, 0xf00f, 0x1003, "ALC231" },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1029) 	{ 0x10ec0269, 0xfff0, 0x3010, "ALC277" },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1030) 	{ 0x10ec0269, 0xf0f0, 0x2010, "ALC259" },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1031) 	{ 0x10ec0269, 0xf0f0, 0x3010, "ALC258" },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1032) 	{ 0x10ec0269, 0x00f0, 0x0010, "ALC269VB" },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1033) 	{ 0x10ec0269, 0xffff, 0xa023, "ALC259" },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1034) 	{ 0x10ec0269, 0xffff, 0x6023, "ALC281X" },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1035) 	{ 0x10ec0269, 0x00f0, 0x0020, "ALC269VC" },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1036) 	{ 0x10ec0269, 0x00f0, 0x0030, "ALC269VD" },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1037) 	{ 0x10ec0662, 0xffff, 0x4020, "ALC656" },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1038) 	{ 0x10ec0887, 0x00f0, 0x0030, "ALC887-VD" },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1039) 	{ 0x10ec0888, 0x00f0, 0x0030, "ALC888-VD" },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1040) 	{ 0x10ec0888, 0xf0f0, 0x3020, "ALC886" },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1041) 	{ 0x10ec0899, 0x2000, 0x2000, "ALC899" },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1042) 	{ 0x10ec0892, 0xffff, 0x8020, "ALC661" },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1043) 	{ 0x10ec0892, 0xffff, 0x8011, "ALC661" },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1044) 	{ 0x10ec0892, 0xffff, 0x4011, "ALC656" },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1045) 	{ } /* terminator */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1046) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1047) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1048) static const struct alc_codec_rename_pci_table rename_pci_tbl[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1049) 	{ 0x10ec0280, 0x1028, 0, "ALC3220" },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1050) 	{ 0x10ec0282, 0x1028, 0, "ALC3221" },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1051) 	{ 0x10ec0283, 0x1028, 0, "ALC3223" },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1052) 	{ 0x10ec0288, 0x1028, 0, "ALC3263" },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1053) 	{ 0x10ec0292, 0x1028, 0, "ALC3226" },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1054) 	{ 0x10ec0293, 0x1028, 0, "ALC3235" },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1055) 	{ 0x10ec0255, 0x1028, 0, "ALC3234" },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1056) 	{ 0x10ec0668, 0x1028, 0, "ALC3661" },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1057) 	{ 0x10ec0275, 0x1028, 0, "ALC3260" },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1058) 	{ 0x10ec0899, 0x1028, 0, "ALC3861" },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1059) 	{ 0x10ec0298, 0x1028, 0, "ALC3266" },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1060) 	{ 0x10ec0236, 0x1028, 0, "ALC3204" },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1061) 	{ 0x10ec0256, 0x1028, 0, "ALC3246" },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1062) 	{ 0x10ec0225, 0x1028, 0, "ALC3253" },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1063) 	{ 0x10ec0295, 0x1028, 0, "ALC3254" },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1064) 	{ 0x10ec0299, 0x1028, 0, "ALC3271" },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1065) 	{ 0x10ec0670, 0x1025, 0, "ALC669X" },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1066) 	{ 0x10ec0676, 0x1025, 0, "ALC679X" },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1067) 	{ 0x10ec0282, 0x1043, 0, "ALC3229" },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1068) 	{ 0x10ec0233, 0x1043, 0, "ALC3236" },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1069) 	{ 0x10ec0280, 0x103c, 0, "ALC3228" },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1070) 	{ 0x10ec0282, 0x103c, 0, "ALC3227" },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1071) 	{ 0x10ec0286, 0x103c, 0, "ALC3242" },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1072) 	{ 0x10ec0290, 0x103c, 0, "ALC3241" },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1073) 	{ 0x10ec0668, 0x103c, 0, "ALC3662" },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1074) 	{ 0x10ec0283, 0x17aa, 0, "ALC3239" },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1075) 	{ 0x10ec0292, 0x17aa, 0, "ALC3232" },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1076) 	{ } /* terminator */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1077) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1078) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1079) static int alc_codec_rename_from_preset(struct hda_codec *codec)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1080) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1081) 	const struct alc_codec_rename_table *p;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1082) 	const struct alc_codec_rename_pci_table *q;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1083) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1084) 	for (p = rename_tbl; p->vendor_id; p++) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1085) 		if (p->vendor_id != codec->core.vendor_id)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1086) 			continue;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1087) 		if ((alc_get_coef0(codec) & p->coef_mask) == p->coef_bits)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1088) 			return alc_codec_rename(codec, p->name);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1089) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1090) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1091) 	if (!codec->bus->pci)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1092) 		return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1093) 	for (q = rename_pci_tbl; q->codec_vendor_id; q++) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1094) 		if (q->codec_vendor_id != codec->core.vendor_id)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1095) 			continue;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1096) 		if (q->pci_subvendor != codec->bus->pci->subsystem_vendor)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1097) 			continue;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1098) 		if (!q->pci_subdevice ||
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1099) 		    q->pci_subdevice == codec->bus->pci->subsystem_device)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1100) 			return alc_codec_rename(codec, q->name);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1101) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1102) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1103) 	return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1104) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1105) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1106) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1107) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1108)  * Digital-beep handlers
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1109)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1110) #ifdef CONFIG_SND_HDA_INPUT_BEEP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1111) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1112) /* additional beep mixers; private_value will be overwritten */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1113) static const struct snd_kcontrol_new alc_beep_mixer[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1114) 	HDA_CODEC_VOLUME("Beep Playback Volume", 0, 0, HDA_INPUT),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1115) 	HDA_CODEC_MUTE_BEEP("Beep Playback Switch", 0, 0, HDA_INPUT),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1116) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1117) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1118) /* set up and create beep controls */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1119) static int set_beep_amp(struct alc_spec *spec, hda_nid_t nid,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1120) 			int idx, int dir)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1121) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1122) 	struct snd_kcontrol_new *knew;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1123) 	unsigned int beep_amp = HDA_COMPOSE_AMP_VAL(nid, 3, idx, dir);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1124) 	int i;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1125) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1126) 	for (i = 0; i < ARRAY_SIZE(alc_beep_mixer); i++) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1127) 		knew = snd_hda_gen_add_kctl(&spec->gen, NULL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1128) 					    &alc_beep_mixer[i]);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1129) 		if (!knew)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1130) 			return -ENOMEM;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1131) 		knew->private_value = beep_amp;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1132) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1133) 	return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1134) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1135) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1136) static const struct snd_pci_quirk beep_allow_list[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1137) 	SND_PCI_QUIRK(0x1043, 0x103c, "ASUS", 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1138) 	SND_PCI_QUIRK(0x1043, 0x115d, "ASUS", 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1139) 	SND_PCI_QUIRK(0x1043, 0x829f, "ASUS", 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1140) 	SND_PCI_QUIRK(0x1043, 0x8376, "EeePC", 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1141) 	SND_PCI_QUIRK(0x1043, 0x83ce, "EeePC", 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1142) 	SND_PCI_QUIRK(0x1043, 0x831a, "EeePC", 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1143) 	SND_PCI_QUIRK(0x1043, 0x834a, "EeePC", 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1144) 	SND_PCI_QUIRK(0x1458, 0xa002, "GA-MA790X", 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1145) 	SND_PCI_QUIRK(0x8086, 0xd613, "Intel", 1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1146) 	/* denylist -- no beep available */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1147) 	SND_PCI_QUIRK(0x17aa, 0x309e, "Lenovo ThinkCentre M73", 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1148) 	SND_PCI_QUIRK(0x17aa, 0x30a3, "Lenovo ThinkCentre M93", 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1149) 	{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1150) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1151) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1152) static inline int has_cdefine_beep(struct hda_codec *codec)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1153) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1154) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1155) 	const struct snd_pci_quirk *q;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1156) 	q = snd_pci_quirk_lookup(codec->bus->pci, beep_allow_list);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1157) 	if (q)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1158) 		return q->value;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1159) 	return spec->cdefine.enable_pcbeep;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1160) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1161) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1162) #define set_beep_amp(spec, nid, idx, dir)	0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1163) #define has_cdefine_beep(codec)		0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1164) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1165) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1166) /* parse the BIOS configuration and set up the alc_spec */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1167) /* return 1 if successful, 0 if the proper config is not found,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1168)  * or a negative error code
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1169)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1170) static int alc_parse_auto_config(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1171) 				 const hda_nid_t *ignore_nids,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1172) 				 const hda_nid_t *ssid_nids)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1173) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1174) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1175) 	struct auto_pin_cfg *cfg = &spec->gen.autocfg;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1176) 	int err;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1177) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1178) 	err = snd_hda_parse_pin_defcfg(codec, cfg, ignore_nids,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1179) 				       spec->parse_flags);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1180) 	if (err < 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1181) 		return err;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1182) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1183) 	if (ssid_nids)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1184) 		alc_ssid_check(codec, ssid_nids);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1185) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1186) 	err = snd_hda_gen_parse_auto_config(codec, cfg);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1187) 	if (err < 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1188) 		return err;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1189) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1190) 	return 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1191) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1192) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1193) /* common preparation job for alc_spec */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1194) static int alc_alloc_spec(struct hda_codec *codec, hda_nid_t mixer_nid)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1195) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1196) 	struct alc_spec *spec = kzalloc(sizeof(*spec), GFP_KERNEL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1197) 	int err;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1198) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1199) 	if (!spec)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1200) 		return -ENOMEM;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1201) 	codec->spec = spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1202) 	snd_hda_gen_spec_init(&spec->gen);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1203) 	spec->gen.mixer_nid = mixer_nid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1204) 	spec->gen.own_eapd_ctl = 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1205) 	codec->single_adc_amp = 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1206) 	/* FIXME: do we need this for all Realtek codec models? */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1207) 	codec->spdif_status_reset = 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1208) 	codec->forced_resume = 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1209) 	codec->patch_ops = alc_patch_ops;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1210) 	mutex_init(&spec->coef_mutex);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1211) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1212) 	err = alc_codec_rename_from_preset(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1213) 	if (err < 0) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1214) 		kfree(spec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1215) 		return err;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1216) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1217) 	return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1218) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1219) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1220) static int alc880_parse_auto_config(struct hda_codec *codec)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1221) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1222) 	static const hda_nid_t alc880_ignore[] = { 0x1d, 0 };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1223) 	static const hda_nid_t alc880_ssids[] = { 0x15, 0x1b, 0x14, 0 };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1224) 	return alc_parse_auto_config(codec, alc880_ignore, alc880_ssids);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1225) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1226) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1227) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1228)  * ALC880 fix-ups
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1229)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1230) enum {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1231) 	ALC880_FIXUP_GPIO1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1232) 	ALC880_FIXUP_GPIO2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1233) 	ALC880_FIXUP_MEDION_RIM,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1234) 	ALC880_FIXUP_LG,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1235) 	ALC880_FIXUP_LG_LW25,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1236) 	ALC880_FIXUP_W810,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1237) 	ALC880_FIXUP_EAPD_COEF,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1238) 	ALC880_FIXUP_TCL_S700,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1239) 	ALC880_FIXUP_VOL_KNOB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1240) 	ALC880_FIXUP_FUJITSU,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1241) 	ALC880_FIXUP_F1734,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1242) 	ALC880_FIXUP_UNIWILL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1243) 	ALC880_FIXUP_UNIWILL_DIG,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1244) 	ALC880_FIXUP_Z71V,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1245) 	ALC880_FIXUP_ASUS_W5A,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1246) 	ALC880_FIXUP_3ST_BASE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1247) 	ALC880_FIXUP_3ST,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1248) 	ALC880_FIXUP_3ST_DIG,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1249) 	ALC880_FIXUP_5ST_BASE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1250) 	ALC880_FIXUP_5ST,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1251) 	ALC880_FIXUP_5ST_DIG,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1252) 	ALC880_FIXUP_6ST_BASE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1253) 	ALC880_FIXUP_6ST,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1254) 	ALC880_FIXUP_6ST_DIG,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1255) 	ALC880_FIXUP_6ST_AUTOMUTE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1256) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1257) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1258) /* enable the volume-knob widget support on NID 0x21 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1259) static void alc880_fixup_vol_knob(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1260) 				  const struct hda_fixup *fix, int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1261) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1262) 	if (action == HDA_FIXUP_ACT_PROBE)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1263) 		snd_hda_jack_detect_enable_callback(codec, 0x21,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1264) 						    alc_update_knob_master);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1265) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1266) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1267) static const struct hda_fixup alc880_fixups[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1268) 	[ALC880_FIXUP_GPIO1] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1269) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1270) 		.v.func = alc_fixup_gpio1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1271) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1272) 	[ALC880_FIXUP_GPIO2] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1273) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1274) 		.v.func = alc_fixup_gpio2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1275) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1276) 	[ALC880_FIXUP_MEDION_RIM] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1277) 		.type = HDA_FIXUP_VERBS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1278) 		.v.verbs = (const struct hda_verb[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1279) 			{ 0x20, AC_VERB_SET_COEF_INDEX, 0x07 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1280) 			{ 0x20, AC_VERB_SET_PROC_COEF,  0x3060 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1281) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1282) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1283) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1284) 		.chain_id = ALC880_FIXUP_GPIO2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1285) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1286) 	[ALC880_FIXUP_LG] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1287) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1288) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1289) 			/* disable bogus unused pins */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1290) 			{ 0x16, 0x411111f0 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1291) 			{ 0x18, 0x411111f0 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1292) 			{ 0x1a, 0x411111f0 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1293) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1294) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1295) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1296) 	[ALC880_FIXUP_LG_LW25] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1297) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1298) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1299) 			{ 0x1a, 0x0181344f }, /* line-in */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1300) 			{ 0x1b, 0x0321403f }, /* headphone */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1301) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1302) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1303) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1304) 	[ALC880_FIXUP_W810] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1305) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1306) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1307) 			/* disable bogus unused pins */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1308) 			{ 0x17, 0x411111f0 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1309) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1310) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1311) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1312) 		.chain_id = ALC880_FIXUP_GPIO2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1313) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1314) 	[ALC880_FIXUP_EAPD_COEF] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1315) 		.type = HDA_FIXUP_VERBS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1316) 		.v.verbs = (const struct hda_verb[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1317) 			/* change to EAPD mode */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1318) 			{ 0x20, AC_VERB_SET_COEF_INDEX, 0x07 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1319) 			{ 0x20, AC_VERB_SET_PROC_COEF,  0x3060 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1320) 			{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1321) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1322) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1323) 	[ALC880_FIXUP_TCL_S700] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1324) 		.type = HDA_FIXUP_VERBS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1325) 		.v.verbs = (const struct hda_verb[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1326) 			/* change to EAPD mode */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1327) 			{ 0x20, AC_VERB_SET_COEF_INDEX, 0x07 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1328) 			{ 0x20, AC_VERB_SET_PROC_COEF,  0x3070 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1329) 			{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1330) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1331) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1332) 		.chain_id = ALC880_FIXUP_GPIO2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1333) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1334) 	[ALC880_FIXUP_VOL_KNOB] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1335) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1336) 		.v.func = alc880_fixup_vol_knob,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1337) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1338) 	[ALC880_FIXUP_FUJITSU] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1339) 		/* override all pins as BIOS on old Amilo is broken */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1340) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1341) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1342) 			{ 0x14, 0x0121401f }, /* HP */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1343) 			{ 0x15, 0x99030120 }, /* speaker */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1344) 			{ 0x16, 0x99030130 }, /* bass speaker */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1345) 			{ 0x17, 0x411111f0 }, /* N/A */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1346) 			{ 0x18, 0x411111f0 }, /* N/A */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1347) 			{ 0x19, 0x01a19950 }, /* mic-in */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1348) 			{ 0x1a, 0x411111f0 }, /* N/A */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1349) 			{ 0x1b, 0x411111f0 }, /* N/A */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1350) 			{ 0x1c, 0x411111f0 }, /* N/A */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1351) 			{ 0x1d, 0x411111f0 }, /* N/A */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1352) 			{ 0x1e, 0x01454140 }, /* SPDIF out */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1353) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1354) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1355) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1356) 		.chain_id = ALC880_FIXUP_VOL_KNOB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1357) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1358) 	[ALC880_FIXUP_F1734] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1359) 		/* almost compatible with FUJITSU, but no bass and SPDIF */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1360) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1361) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1362) 			{ 0x14, 0x0121401f }, /* HP */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1363) 			{ 0x15, 0x99030120 }, /* speaker */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1364) 			{ 0x16, 0x411111f0 }, /* N/A */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1365) 			{ 0x17, 0x411111f0 }, /* N/A */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1366) 			{ 0x18, 0x411111f0 }, /* N/A */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1367) 			{ 0x19, 0x01a19950 }, /* mic-in */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1368) 			{ 0x1a, 0x411111f0 }, /* N/A */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1369) 			{ 0x1b, 0x411111f0 }, /* N/A */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1370) 			{ 0x1c, 0x411111f0 }, /* N/A */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1371) 			{ 0x1d, 0x411111f0 }, /* N/A */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1372) 			{ 0x1e, 0x411111f0 }, /* N/A */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1373) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1374) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1375) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1376) 		.chain_id = ALC880_FIXUP_VOL_KNOB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1377) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1378) 	[ALC880_FIXUP_UNIWILL] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1379) 		/* need to fix HP and speaker pins to be parsed correctly */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1380) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1381) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1382) 			{ 0x14, 0x0121411f }, /* HP */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1383) 			{ 0x15, 0x99030120 }, /* speaker */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1384) 			{ 0x16, 0x99030130 }, /* bass speaker */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1385) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1386) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1387) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1388) 	[ALC880_FIXUP_UNIWILL_DIG] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1389) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1390) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1391) 			/* disable bogus unused pins */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1392) 			{ 0x17, 0x411111f0 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1393) 			{ 0x19, 0x411111f0 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1394) 			{ 0x1b, 0x411111f0 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1395) 			{ 0x1f, 0x411111f0 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1396) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1397) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1398) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1399) 	[ALC880_FIXUP_Z71V] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1400) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1401) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1402) 			/* set up the whole pins as BIOS is utterly broken */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1403) 			{ 0x14, 0x99030120 }, /* speaker */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1404) 			{ 0x15, 0x0121411f }, /* HP */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1405) 			{ 0x16, 0x411111f0 }, /* N/A */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1406) 			{ 0x17, 0x411111f0 }, /* N/A */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1407) 			{ 0x18, 0x01a19950 }, /* mic-in */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1408) 			{ 0x19, 0x411111f0 }, /* N/A */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1409) 			{ 0x1a, 0x01813031 }, /* line-in */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1410) 			{ 0x1b, 0x411111f0 }, /* N/A */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1411) 			{ 0x1c, 0x411111f0 }, /* N/A */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1412) 			{ 0x1d, 0x411111f0 }, /* N/A */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1413) 			{ 0x1e, 0x0144111e }, /* SPDIF */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1414) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1415) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1416) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1417) 	[ALC880_FIXUP_ASUS_W5A] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1418) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1419) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1420) 			/* set up the whole pins as BIOS is utterly broken */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1421) 			{ 0x14, 0x0121411f }, /* HP */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1422) 			{ 0x15, 0x411111f0 }, /* N/A */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1423) 			{ 0x16, 0x411111f0 }, /* N/A */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1424) 			{ 0x17, 0x411111f0 }, /* N/A */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1425) 			{ 0x18, 0x90a60160 }, /* mic */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1426) 			{ 0x19, 0x411111f0 }, /* N/A */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1427) 			{ 0x1a, 0x411111f0 }, /* N/A */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1428) 			{ 0x1b, 0x411111f0 }, /* N/A */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1429) 			{ 0x1c, 0x411111f0 }, /* N/A */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1430) 			{ 0x1d, 0x411111f0 }, /* N/A */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1431) 			{ 0x1e, 0xb743111e }, /* SPDIF out */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1432) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1433) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1434) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1435) 		.chain_id = ALC880_FIXUP_GPIO1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1436) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1437) 	[ALC880_FIXUP_3ST_BASE] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1438) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1439) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1440) 			{ 0x14, 0x01014010 }, /* line-out */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1441) 			{ 0x15, 0x411111f0 }, /* N/A */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1442) 			{ 0x16, 0x411111f0 }, /* N/A */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1443) 			{ 0x17, 0x411111f0 }, /* N/A */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1444) 			{ 0x18, 0x01a19c30 }, /* mic-in */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1445) 			{ 0x19, 0x0121411f }, /* HP */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1446) 			{ 0x1a, 0x01813031 }, /* line-in */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1447) 			{ 0x1b, 0x02a19c40 }, /* front-mic */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1448) 			{ 0x1c, 0x411111f0 }, /* N/A */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1449) 			{ 0x1d, 0x411111f0 }, /* N/A */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1450) 			/* 0x1e is filled in below */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1451) 			{ 0x1f, 0x411111f0 }, /* N/A */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1452) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1453) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1454) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1455) 	[ALC880_FIXUP_3ST] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1456) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1457) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1458) 			{ 0x1e, 0x411111f0 }, /* N/A */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1459) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1460) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1461) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1462) 		.chain_id = ALC880_FIXUP_3ST_BASE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1463) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1464) 	[ALC880_FIXUP_3ST_DIG] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1465) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1466) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1467) 			{ 0x1e, 0x0144111e }, /* SPDIF */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1468) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1469) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1470) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1471) 		.chain_id = ALC880_FIXUP_3ST_BASE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1472) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1473) 	[ALC880_FIXUP_5ST_BASE] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1474) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1475) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1476) 			{ 0x14, 0x01014010 }, /* front */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1477) 			{ 0x15, 0x411111f0 }, /* N/A */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1478) 			{ 0x16, 0x01011411 }, /* CLFE */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1479) 			{ 0x17, 0x01016412 }, /* surr */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1480) 			{ 0x18, 0x01a19c30 }, /* mic-in */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1481) 			{ 0x19, 0x0121411f }, /* HP */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1482) 			{ 0x1a, 0x01813031 }, /* line-in */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1483) 			{ 0x1b, 0x02a19c40 }, /* front-mic */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1484) 			{ 0x1c, 0x411111f0 }, /* N/A */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1485) 			{ 0x1d, 0x411111f0 }, /* N/A */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1486) 			/* 0x1e is filled in below */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1487) 			{ 0x1f, 0x411111f0 }, /* N/A */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1488) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1489) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1490) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1491) 	[ALC880_FIXUP_5ST] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1492) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1493) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1494) 			{ 0x1e, 0x411111f0 }, /* N/A */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1495) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1496) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1497) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1498) 		.chain_id = ALC880_FIXUP_5ST_BASE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1499) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1500) 	[ALC880_FIXUP_5ST_DIG] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1501) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1502) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1503) 			{ 0x1e, 0x0144111e }, /* SPDIF */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1504) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1505) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1506) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1507) 		.chain_id = ALC880_FIXUP_5ST_BASE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1508) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1509) 	[ALC880_FIXUP_6ST_BASE] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1510) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1511) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1512) 			{ 0x14, 0x01014010 }, /* front */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1513) 			{ 0x15, 0x01016412 }, /* surr */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1514) 			{ 0x16, 0x01011411 }, /* CLFE */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1515) 			{ 0x17, 0x01012414 }, /* side */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1516) 			{ 0x18, 0x01a19c30 }, /* mic-in */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1517) 			{ 0x19, 0x02a19c40 }, /* front-mic */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1518) 			{ 0x1a, 0x01813031 }, /* line-in */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1519) 			{ 0x1b, 0x0121411f }, /* HP */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1520) 			{ 0x1c, 0x411111f0 }, /* N/A */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1521) 			{ 0x1d, 0x411111f0 }, /* N/A */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1522) 			/* 0x1e is filled in below */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1523) 			{ 0x1f, 0x411111f0 }, /* N/A */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1524) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1525) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1526) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1527) 	[ALC880_FIXUP_6ST] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1528) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1529) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1530) 			{ 0x1e, 0x411111f0 }, /* N/A */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1531) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1532) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1533) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1534) 		.chain_id = ALC880_FIXUP_6ST_BASE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1535) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1536) 	[ALC880_FIXUP_6ST_DIG] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1537) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1538) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1539) 			{ 0x1e, 0x0144111e }, /* SPDIF */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1540) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1541) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1542) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1543) 		.chain_id = ALC880_FIXUP_6ST_BASE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1544) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1545) 	[ALC880_FIXUP_6ST_AUTOMUTE] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1546) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1547) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1548) 			{ 0x1b, 0x0121401f }, /* HP with jack detect */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1549) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1550) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1551) 		.chained_before = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1552) 		.chain_id = ALC880_FIXUP_6ST_BASE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1553) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1554) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1555) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1556) static const struct snd_pci_quirk alc880_fixup_tbl[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1557) 	SND_PCI_QUIRK(0x1019, 0x0f69, "Coeus G610P", ALC880_FIXUP_W810),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1558) 	SND_PCI_QUIRK(0x1043, 0x10c3, "ASUS W5A", ALC880_FIXUP_ASUS_W5A),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1559) 	SND_PCI_QUIRK(0x1043, 0x1964, "ASUS Z71V", ALC880_FIXUP_Z71V),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1560) 	SND_PCI_QUIRK_VENDOR(0x1043, "ASUS", ALC880_FIXUP_GPIO1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1561) 	SND_PCI_QUIRK(0x147b, 0x1045, "ABit AA8XE", ALC880_FIXUP_6ST_AUTOMUTE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1562) 	SND_PCI_QUIRK(0x1558, 0x5401, "Clevo GPIO2", ALC880_FIXUP_GPIO2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1563) 	SND_PCI_QUIRK_VENDOR(0x1558, "Clevo", ALC880_FIXUP_EAPD_COEF),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1564) 	SND_PCI_QUIRK(0x1584, 0x9050, "Uniwill", ALC880_FIXUP_UNIWILL_DIG),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1565) 	SND_PCI_QUIRK(0x1584, 0x9054, "Uniwill", ALC880_FIXUP_F1734),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1566) 	SND_PCI_QUIRK(0x1584, 0x9070, "Uniwill", ALC880_FIXUP_UNIWILL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1567) 	SND_PCI_QUIRK(0x1584, 0x9077, "Uniwill P53", ALC880_FIXUP_VOL_KNOB),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1568) 	SND_PCI_QUIRK(0x161f, 0x203d, "W810", ALC880_FIXUP_W810),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1569) 	SND_PCI_QUIRK(0x161f, 0x205d, "Medion Rim 2150", ALC880_FIXUP_MEDION_RIM),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1570) 	SND_PCI_QUIRK(0x1631, 0xe011, "PB 13201056", ALC880_FIXUP_6ST_AUTOMUTE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1571) 	SND_PCI_QUIRK(0x1734, 0x107c, "FSC Amilo M1437", ALC880_FIXUP_FUJITSU),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1572) 	SND_PCI_QUIRK(0x1734, 0x1094, "FSC Amilo M1451G", ALC880_FIXUP_FUJITSU),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1573) 	SND_PCI_QUIRK(0x1734, 0x10ac, "FSC AMILO Xi 1526", ALC880_FIXUP_F1734),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1574) 	SND_PCI_QUIRK(0x1734, 0x10b0, "FSC Amilo Pi1556", ALC880_FIXUP_FUJITSU),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1575) 	SND_PCI_QUIRK(0x1854, 0x003b, "LG", ALC880_FIXUP_LG),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1576) 	SND_PCI_QUIRK(0x1854, 0x005f, "LG P1 Express", ALC880_FIXUP_LG),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1577) 	SND_PCI_QUIRK(0x1854, 0x0068, "LG w1", ALC880_FIXUP_LG),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1578) 	SND_PCI_QUIRK(0x1854, 0x0077, "LG LW25", ALC880_FIXUP_LG_LW25),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1579) 	SND_PCI_QUIRK(0x19db, 0x4188, "TCL S700", ALC880_FIXUP_TCL_S700),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1580) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1581) 	/* Below is the copied entries from alc880_quirks.c.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1582) 	 * It's not quite sure whether BIOS sets the correct pin-config table
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1583) 	 * on these machines, thus they are kept to be compatible with
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1584) 	 * the old static quirks.  Once when it's confirmed to work without
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1585) 	 * these overrides, it'd be better to remove.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1586) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1587) 	SND_PCI_QUIRK(0x1019, 0xa880, "ECS", ALC880_FIXUP_5ST_DIG),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1588) 	SND_PCI_QUIRK(0x1019, 0xa884, "Acer APFV", ALC880_FIXUP_6ST),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1589) 	SND_PCI_QUIRK(0x1025, 0x0070, "ULI", ALC880_FIXUP_3ST_DIG),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1590) 	SND_PCI_QUIRK(0x1025, 0x0077, "ULI", ALC880_FIXUP_6ST_DIG),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1591) 	SND_PCI_QUIRK(0x1025, 0x0078, "ULI", ALC880_FIXUP_6ST_DIG),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1592) 	SND_PCI_QUIRK(0x1025, 0x0087, "ULI", ALC880_FIXUP_6ST_DIG),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1593) 	SND_PCI_QUIRK(0x1025, 0xe309, "ULI", ALC880_FIXUP_3ST_DIG),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1594) 	SND_PCI_QUIRK(0x1025, 0xe310, "ULI", ALC880_FIXUP_3ST),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1595) 	SND_PCI_QUIRK(0x1039, 0x1234, NULL, ALC880_FIXUP_6ST_DIG),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1596) 	SND_PCI_QUIRK(0x104d, 0x81a0, "Sony", ALC880_FIXUP_3ST),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1597) 	SND_PCI_QUIRK(0x104d, 0x81d6, "Sony", ALC880_FIXUP_3ST),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1598) 	SND_PCI_QUIRK(0x107b, 0x3032, "Gateway", ALC880_FIXUP_5ST),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1599) 	SND_PCI_QUIRK(0x107b, 0x3033, "Gateway", ALC880_FIXUP_5ST),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1600) 	SND_PCI_QUIRK(0x107b, 0x4039, "Gateway", ALC880_FIXUP_5ST),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1601) 	SND_PCI_QUIRK(0x1297, 0xc790, "Shuttle ST20G5", ALC880_FIXUP_6ST_DIG),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1602) 	SND_PCI_QUIRK(0x1458, 0xa102, "Gigabyte K8", ALC880_FIXUP_6ST_DIG),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1603) 	SND_PCI_QUIRK(0x1462, 0x1150, "MSI", ALC880_FIXUP_6ST_DIG),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1604) 	SND_PCI_QUIRK(0x1509, 0x925d, "FIC P4M", ALC880_FIXUP_6ST_DIG),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1605) 	SND_PCI_QUIRK(0x1565, 0x8202, "Biostar", ALC880_FIXUP_5ST_DIG),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1606) 	SND_PCI_QUIRK(0x1695, 0x400d, "EPoX", ALC880_FIXUP_5ST_DIG),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1607) 	SND_PCI_QUIRK(0x1695, 0x4012, "EPox EP-5LDA", ALC880_FIXUP_5ST_DIG),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1608) 	SND_PCI_QUIRK(0x2668, 0x8086, NULL, ALC880_FIXUP_6ST_DIG), /* broken BIOS */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1609) 	SND_PCI_QUIRK(0x8086, 0x2668, NULL, ALC880_FIXUP_6ST_DIG),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1610) 	SND_PCI_QUIRK(0x8086, 0xa100, "Intel mobo", ALC880_FIXUP_5ST_DIG),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1611) 	SND_PCI_QUIRK(0x8086, 0xd400, "Intel mobo", ALC880_FIXUP_5ST_DIG),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1612) 	SND_PCI_QUIRK(0x8086, 0xd401, "Intel mobo", ALC880_FIXUP_5ST_DIG),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1613) 	SND_PCI_QUIRK(0x8086, 0xd402, "Intel mobo", ALC880_FIXUP_3ST_DIG),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1614) 	SND_PCI_QUIRK(0x8086, 0xe224, "Intel mobo", ALC880_FIXUP_5ST_DIG),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1615) 	SND_PCI_QUIRK(0x8086, 0xe305, "Intel mobo", ALC880_FIXUP_3ST_DIG),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1616) 	SND_PCI_QUIRK(0x8086, 0xe308, "Intel mobo", ALC880_FIXUP_3ST_DIG),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1617) 	SND_PCI_QUIRK(0x8086, 0xe400, "Intel mobo", ALC880_FIXUP_5ST_DIG),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1618) 	SND_PCI_QUIRK(0x8086, 0xe401, "Intel mobo", ALC880_FIXUP_5ST_DIG),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1619) 	SND_PCI_QUIRK(0x8086, 0xe402, "Intel mobo", ALC880_FIXUP_5ST_DIG),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1620) 	/* default Intel */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1621) 	SND_PCI_QUIRK_VENDOR(0x8086, "Intel mobo", ALC880_FIXUP_3ST),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1622) 	SND_PCI_QUIRK(0xa0a0, 0x0560, "AOpen i915GMm-HFS", ALC880_FIXUP_5ST_DIG),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1623) 	SND_PCI_QUIRK(0xe803, 0x1019, NULL, ALC880_FIXUP_6ST_DIG),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1624) 	{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1625) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1626) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1627) static const struct hda_model_fixup alc880_fixup_models[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1628) 	{.id = ALC880_FIXUP_3ST, .name = "3stack"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1629) 	{.id = ALC880_FIXUP_3ST_DIG, .name = "3stack-digout"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1630) 	{.id = ALC880_FIXUP_5ST, .name = "5stack"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1631) 	{.id = ALC880_FIXUP_5ST_DIG, .name = "5stack-digout"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1632) 	{.id = ALC880_FIXUP_6ST, .name = "6stack"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1633) 	{.id = ALC880_FIXUP_6ST_DIG, .name = "6stack-digout"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1634) 	{.id = ALC880_FIXUP_6ST_AUTOMUTE, .name = "6stack-automute"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1635) 	{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1636) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1637) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1638) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1639) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1640)  * OK, here we have finally the patch for ALC880
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1641)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1642) static int patch_alc880(struct hda_codec *codec)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1643) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1644) 	struct alc_spec *spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1645) 	int err;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1646) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1647) 	err = alc_alloc_spec(codec, 0x0b);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1648) 	if (err < 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1649) 		return err;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1650) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1651) 	spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1652) 	spec->gen.need_dac_fix = 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1653) 	spec->gen.beep_nid = 0x01;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1654) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1655) 	codec->patch_ops.unsol_event = alc880_unsol_event;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1656) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1657) 	alc_pre_init(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1658) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1659) 	snd_hda_pick_fixup(codec, alc880_fixup_models, alc880_fixup_tbl,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1660) 		       alc880_fixups);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1661) 	snd_hda_apply_fixup(codec, HDA_FIXUP_ACT_PRE_PROBE);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1662) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1663) 	/* automatic parse from the BIOS config */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1664) 	err = alc880_parse_auto_config(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1665) 	if (err < 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1666) 		goto error;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1667) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1668) 	if (!spec->gen.no_analog) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1669) 		err = set_beep_amp(spec, 0x0b, 0x05, HDA_INPUT);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1670) 		if (err < 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1671) 			goto error;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1672) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1673) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1674) 	snd_hda_apply_fixup(codec, HDA_FIXUP_ACT_PROBE);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1675) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1676) 	return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1677) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1678)  error:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1679) 	alc_free(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1680) 	return err;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1681) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1682) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1683) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1684) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1685)  * ALC260 support
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1686)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1687) static int alc260_parse_auto_config(struct hda_codec *codec)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1688) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1689) 	static const hda_nid_t alc260_ignore[] = { 0x17, 0 };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1690) 	static const hda_nid_t alc260_ssids[] = { 0x10, 0x15, 0x0f, 0 };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1691) 	return alc_parse_auto_config(codec, alc260_ignore, alc260_ssids);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1692) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1693) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1694) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1695)  * Pin config fixes
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1696)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1697) enum {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1698) 	ALC260_FIXUP_HP_DC5750,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1699) 	ALC260_FIXUP_HP_PIN_0F,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1700) 	ALC260_FIXUP_COEF,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1701) 	ALC260_FIXUP_GPIO1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1702) 	ALC260_FIXUP_GPIO1_TOGGLE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1703) 	ALC260_FIXUP_REPLACER,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1704) 	ALC260_FIXUP_HP_B1900,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1705) 	ALC260_FIXUP_KN1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1706) 	ALC260_FIXUP_FSC_S7020,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1707) 	ALC260_FIXUP_FSC_S7020_JWSE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1708) 	ALC260_FIXUP_VAIO_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1709) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1710) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1711) static void alc260_gpio1_automute(struct hda_codec *codec)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1712) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1713) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1714) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1715) 	alc_update_gpio_data(codec, 0x01, spec->gen.hp_jack_present);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1716) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1717) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1718) static void alc260_fixup_gpio1_toggle(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1719) 				      const struct hda_fixup *fix, int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1720) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1721) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1722) 	if (action == HDA_FIXUP_ACT_PROBE) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1723) 		/* although the machine has only one output pin, we need to
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1724) 		 * toggle GPIO1 according to the jack state
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1725) 		 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1726) 		spec->gen.automute_hook = alc260_gpio1_automute;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1727) 		spec->gen.detect_hp = 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1728) 		spec->gen.automute_speaker = 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1729) 		spec->gen.autocfg.hp_pins[0] = 0x0f; /* copy it for automute */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1730) 		snd_hda_jack_detect_enable_callback(codec, 0x0f,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1731) 						    snd_hda_gen_hp_automute);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1732) 		alc_setup_gpio(codec, 0x01);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1733) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1734) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1735) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1736) static void alc260_fixup_kn1(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1737) 			     const struct hda_fixup *fix, int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1738) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1739) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1740) 	static const struct hda_pintbl pincfgs[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1741) 		{ 0x0f, 0x02214000 }, /* HP/speaker */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1742) 		{ 0x12, 0x90a60160 }, /* int mic */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1743) 		{ 0x13, 0x02a19000 }, /* ext mic */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1744) 		{ 0x18, 0x01446000 }, /* SPDIF out */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1745) 		/* disable bogus I/O pins */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1746) 		{ 0x10, 0x411111f0 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1747) 		{ 0x11, 0x411111f0 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1748) 		{ 0x14, 0x411111f0 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1749) 		{ 0x15, 0x411111f0 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1750) 		{ 0x16, 0x411111f0 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1751) 		{ 0x17, 0x411111f0 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1752) 		{ 0x19, 0x411111f0 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1753) 		{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1754) 	};
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1755) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1756) 	switch (action) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1757) 	case HDA_FIXUP_ACT_PRE_PROBE:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1758) 		snd_hda_apply_pincfgs(codec, pincfgs);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1759) 		spec->init_amp = ALC_INIT_NONE;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1760) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1761) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1762) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1763) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1764) static void alc260_fixup_fsc_s7020(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1765) 				   const struct hda_fixup *fix, int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1766) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1767) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1768) 	if (action == HDA_FIXUP_ACT_PRE_PROBE)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1769) 		spec->init_amp = ALC_INIT_NONE;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1770) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1771) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1772) static void alc260_fixup_fsc_s7020_jwse(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1773) 				   const struct hda_fixup *fix, int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1774) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1775) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1776) 	if (action == HDA_FIXUP_ACT_PRE_PROBE) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1777) 		spec->gen.add_jack_modes = 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1778) 		spec->gen.hp_mic = 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1779) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1780) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1781) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1782) static const struct hda_fixup alc260_fixups[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1783) 	[ALC260_FIXUP_HP_DC5750] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1784) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1785) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1786) 			{ 0x11, 0x90130110 }, /* speaker */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1787) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1788) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1789) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1790) 	[ALC260_FIXUP_HP_PIN_0F] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1791) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1792) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1793) 			{ 0x0f, 0x01214000 }, /* HP */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1794) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1795) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1796) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1797) 	[ALC260_FIXUP_COEF] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1798) 		.type = HDA_FIXUP_VERBS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1799) 		.v.verbs = (const struct hda_verb[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1800) 			{ 0x1a, AC_VERB_SET_COEF_INDEX, 0x07 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1801) 			{ 0x1a, AC_VERB_SET_PROC_COEF,  0x3040 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1802) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1803) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1804) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1805) 	[ALC260_FIXUP_GPIO1] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1806) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1807) 		.v.func = alc_fixup_gpio1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1808) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1809) 	[ALC260_FIXUP_GPIO1_TOGGLE] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1810) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1811) 		.v.func = alc260_fixup_gpio1_toggle,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1812) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1813) 		.chain_id = ALC260_FIXUP_HP_PIN_0F,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1814) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1815) 	[ALC260_FIXUP_REPLACER] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1816) 		.type = HDA_FIXUP_VERBS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1817) 		.v.verbs = (const struct hda_verb[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1818) 			{ 0x1a, AC_VERB_SET_COEF_INDEX, 0x07 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1819) 			{ 0x1a, AC_VERB_SET_PROC_COEF,  0x3050 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1820) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1821) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1822) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1823) 		.chain_id = ALC260_FIXUP_GPIO1_TOGGLE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1824) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1825) 	[ALC260_FIXUP_HP_B1900] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1826) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1827) 		.v.func = alc260_fixup_gpio1_toggle,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1828) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1829) 		.chain_id = ALC260_FIXUP_COEF,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1830) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1831) 	[ALC260_FIXUP_KN1] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1832) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1833) 		.v.func = alc260_fixup_kn1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1834) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1835) 	[ALC260_FIXUP_FSC_S7020] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1836) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1837) 		.v.func = alc260_fixup_fsc_s7020,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1838) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1839) 	[ALC260_FIXUP_FSC_S7020_JWSE] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1840) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1841) 		.v.func = alc260_fixup_fsc_s7020_jwse,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1842) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1843) 		.chain_id = ALC260_FIXUP_FSC_S7020,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1844) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1845) 	[ALC260_FIXUP_VAIO_PINS] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1846) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1847) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1848) 			/* Pin configs are missing completely on some VAIOs */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1849) 			{ 0x0f, 0x01211020 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1850) 			{ 0x10, 0x0001003f },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1851) 			{ 0x11, 0x411111f0 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1852) 			{ 0x12, 0x01a15930 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1853) 			{ 0x13, 0x411111f0 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1854) 			{ 0x14, 0x411111f0 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1855) 			{ 0x15, 0x411111f0 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1856) 			{ 0x16, 0x411111f0 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1857) 			{ 0x17, 0x411111f0 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1858) 			{ 0x18, 0x411111f0 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1859) 			{ 0x19, 0x411111f0 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1860) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1861) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1862) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1863) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1864) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1865) static const struct snd_pci_quirk alc260_fixup_tbl[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1866) 	SND_PCI_QUIRK(0x1025, 0x007b, "Acer C20x", ALC260_FIXUP_GPIO1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1867) 	SND_PCI_QUIRK(0x1025, 0x007f, "Acer Aspire 9500", ALC260_FIXUP_COEF),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1868) 	SND_PCI_QUIRK(0x1025, 0x008f, "Acer", ALC260_FIXUP_GPIO1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1869) 	SND_PCI_QUIRK(0x103c, 0x280a, "HP dc5750", ALC260_FIXUP_HP_DC5750),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1870) 	SND_PCI_QUIRK(0x103c, 0x30ba, "HP Presario B1900", ALC260_FIXUP_HP_B1900),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1871) 	SND_PCI_QUIRK(0x104d, 0x81bb, "Sony VAIO", ALC260_FIXUP_VAIO_PINS),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1872) 	SND_PCI_QUIRK(0x104d, 0x81e2, "Sony VAIO TX", ALC260_FIXUP_HP_PIN_0F),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1873) 	SND_PCI_QUIRK(0x10cf, 0x1326, "FSC LifeBook S7020", ALC260_FIXUP_FSC_S7020),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1874) 	SND_PCI_QUIRK(0x1509, 0x4540, "Favorit 100XS", ALC260_FIXUP_GPIO1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1875) 	SND_PCI_QUIRK(0x152d, 0x0729, "Quanta KN1", ALC260_FIXUP_KN1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1876) 	SND_PCI_QUIRK(0x161f, 0x2057, "Replacer 672V", ALC260_FIXUP_REPLACER),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1877) 	SND_PCI_QUIRK(0x1631, 0xc017, "PB V7900", ALC260_FIXUP_COEF),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1878) 	{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1879) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1880) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1881) static const struct hda_model_fixup alc260_fixup_models[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1882) 	{.id = ALC260_FIXUP_GPIO1, .name = "gpio1"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1883) 	{.id = ALC260_FIXUP_COEF, .name = "coef"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1884) 	{.id = ALC260_FIXUP_FSC_S7020, .name = "fujitsu"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1885) 	{.id = ALC260_FIXUP_FSC_S7020_JWSE, .name = "fujitsu-jwse"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1886) 	{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1887) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1888) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1889) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1890)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1891) static int patch_alc260(struct hda_codec *codec)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1892) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1893) 	struct alc_spec *spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1894) 	int err;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1895) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1896) 	err = alc_alloc_spec(codec, 0x07);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1897) 	if (err < 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1898) 		return err;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1899) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1900) 	spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1901) 	/* as quite a few machines require HP amp for speaker outputs,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1902) 	 * it's easier to enable it unconditionally; even if it's unneeded,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1903) 	 * it's almost harmless.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1904) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1905) 	spec->gen.prefer_hp_amp = 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1906) 	spec->gen.beep_nid = 0x01;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1907) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1908) 	spec->shutup = alc_eapd_shutup;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1909) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1910) 	alc_pre_init(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1911) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1912) 	snd_hda_pick_fixup(codec, alc260_fixup_models, alc260_fixup_tbl,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1913) 			   alc260_fixups);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1914) 	snd_hda_apply_fixup(codec, HDA_FIXUP_ACT_PRE_PROBE);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1915) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1916) 	/* automatic parse from the BIOS config */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1917) 	err = alc260_parse_auto_config(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1918) 	if (err < 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1919) 		goto error;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1920) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1921) 	if (!spec->gen.no_analog) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1922) 		err = set_beep_amp(spec, 0x07, 0x05, HDA_INPUT);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1923) 		if (err < 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1924) 			goto error;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1925) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1926) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1927) 	snd_hda_apply_fixup(codec, HDA_FIXUP_ACT_PROBE);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1928) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1929) 	return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1930) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1931)  error:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1932) 	alc_free(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1933) 	return err;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1934) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1935) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1936) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1937) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1938)  * ALC882/883/885/888/889 support
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1939)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1940)  * ALC882 is almost identical with ALC880 but has cleaner and more flexible
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1941)  * configuration.  Each pin widget can choose any input DACs and a mixer.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1942)  * Each ADC is connected from a mixer of all inputs.  This makes possible
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1943)  * 6-channel independent captures.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1944)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1945)  * In addition, an independent DAC for the multi-playback (not used in this
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1946)  * driver yet).
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1947)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1948) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1949) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1950)  * Pin config fixes
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1951)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1952) enum {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1953) 	ALC882_FIXUP_ABIT_AW9D_MAX,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1954) 	ALC882_FIXUP_LENOVO_Y530,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1955) 	ALC882_FIXUP_PB_M5210,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1956) 	ALC882_FIXUP_ACER_ASPIRE_7736,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1957) 	ALC882_FIXUP_ASUS_W90V,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1958) 	ALC889_FIXUP_CD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1959) 	ALC889_FIXUP_FRONT_HP_NO_PRESENCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1960) 	ALC889_FIXUP_VAIO_TT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1961) 	ALC888_FIXUP_EEE1601,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1962) 	ALC886_FIXUP_EAPD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1963) 	ALC882_FIXUP_EAPD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1964) 	ALC883_FIXUP_EAPD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1965) 	ALC883_FIXUP_ACER_EAPD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1966) 	ALC882_FIXUP_GPIO1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1967) 	ALC882_FIXUP_GPIO2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1968) 	ALC882_FIXUP_GPIO3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1969) 	ALC889_FIXUP_COEF,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1970) 	ALC882_FIXUP_ASUS_W2JC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1971) 	ALC882_FIXUP_ACER_ASPIRE_4930G,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1972) 	ALC882_FIXUP_ACER_ASPIRE_8930G,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1973) 	ALC882_FIXUP_ASPIRE_8930G_VERBS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1974) 	ALC885_FIXUP_MACPRO_GPIO,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1975) 	ALC889_FIXUP_DAC_ROUTE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1976) 	ALC889_FIXUP_MBP_VREF,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1977) 	ALC889_FIXUP_IMAC91_VREF,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1978) 	ALC889_FIXUP_MBA11_VREF,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1979) 	ALC889_FIXUP_MBA21_VREF,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1980) 	ALC889_FIXUP_MP11_VREF,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1981) 	ALC889_FIXUP_MP41_VREF,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1982) 	ALC882_FIXUP_INV_DMIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1983) 	ALC882_FIXUP_NO_PRIMARY_HP,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1984) 	ALC887_FIXUP_ASUS_BASS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1985) 	ALC887_FIXUP_BASS_CHMAP,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1986) 	ALC1220_FIXUP_GB_DUAL_CODECS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1987) 	ALC1220_FIXUP_GB_X570,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1988) 	ALC1220_FIXUP_CLEVO_P950,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1989) 	ALC1220_FIXUP_CLEVO_PB51ED,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1990) 	ALC1220_FIXUP_CLEVO_PB51ED_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1991) 	ALC887_FIXUP_ASUS_AUDIO,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1992) 	ALC887_FIXUP_ASUS_HMIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1993) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1994) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1995) static void alc889_fixup_coef(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1996) 			      const struct hda_fixup *fix, int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1997) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1998) 	if (action != HDA_FIXUP_ACT_INIT)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1999) 		return;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2000) 	alc_update_coef_idx(codec, 7, 0, 0x2030);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2001) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2002) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2003) /* set up GPIO at initialization */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2004) static void alc885_fixup_macpro_gpio(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2005) 				     const struct hda_fixup *fix, int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2006) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2007) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2008) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2009) 	spec->gpio_write_delay = true;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2010) 	alc_fixup_gpio3(codec, fix, action);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2011) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2012) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2013) /* Fix the connection of some pins for ALC889:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2014)  * At least, Acer Aspire 5935 shows the connections to DAC3/4 don't
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2015)  * work correctly (bko#42740)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2016)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2017) static void alc889_fixup_dac_route(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2018) 				   const struct hda_fixup *fix, int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2019) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2020) 	if (action == HDA_FIXUP_ACT_PRE_PROBE) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2021) 		/* fake the connections during parsing the tree */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2022) 		static const hda_nid_t conn1[] = { 0x0c, 0x0d };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2023) 		static const hda_nid_t conn2[] = { 0x0e, 0x0f };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2024) 		snd_hda_override_conn_list(codec, 0x14, ARRAY_SIZE(conn1), conn1);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2025) 		snd_hda_override_conn_list(codec, 0x15, ARRAY_SIZE(conn1), conn1);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2026) 		snd_hda_override_conn_list(codec, 0x18, ARRAY_SIZE(conn2), conn2);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2027) 		snd_hda_override_conn_list(codec, 0x1a, ARRAY_SIZE(conn2), conn2);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2028) 	} else if (action == HDA_FIXUP_ACT_PROBE) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2029) 		/* restore the connections */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2030) 		static const hda_nid_t conn[] = { 0x0c, 0x0d, 0x0e, 0x0f, 0x26 };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2031) 		snd_hda_override_conn_list(codec, 0x14, ARRAY_SIZE(conn), conn);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2032) 		snd_hda_override_conn_list(codec, 0x15, ARRAY_SIZE(conn), conn);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2033) 		snd_hda_override_conn_list(codec, 0x18, ARRAY_SIZE(conn), conn);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2034) 		snd_hda_override_conn_list(codec, 0x1a, ARRAY_SIZE(conn), conn);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2035) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2036) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2037) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2038) /* Set VREF on HP pin */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2039) static void alc889_fixup_mbp_vref(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2040) 				  const struct hda_fixup *fix, int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2041) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2042) 	static const hda_nid_t nids[] = { 0x14, 0x15, 0x19 };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2043) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2044) 	int i;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2045) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2046) 	if (action != HDA_FIXUP_ACT_INIT)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2047) 		return;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2048) 	for (i = 0; i < ARRAY_SIZE(nids); i++) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2049) 		unsigned int val = snd_hda_codec_get_pincfg(codec, nids[i]);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2050) 		if (get_defcfg_device(val) != AC_JACK_HP_OUT)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2051) 			continue;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2052) 		val = snd_hda_codec_get_pin_target(codec, nids[i]);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2053) 		val |= AC_PINCTL_VREF_80;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2054) 		snd_hda_set_pin_ctl(codec, nids[i], val);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2055) 		spec->gen.keep_vref_in_automute = 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2056) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2057) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2058) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2059) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2060) static void alc889_fixup_mac_pins(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2061) 				  const hda_nid_t *nids, int num_nids)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2062) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2063) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2064) 	int i;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2065) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2066) 	for (i = 0; i < num_nids; i++) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2067) 		unsigned int val;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2068) 		val = snd_hda_codec_get_pin_target(codec, nids[i]);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2069) 		val |= AC_PINCTL_VREF_50;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2070) 		snd_hda_set_pin_ctl(codec, nids[i], val);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2071) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2072) 	spec->gen.keep_vref_in_automute = 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2073) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2074) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2075) /* Set VREF on speaker pins on imac91 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2076) static void alc889_fixup_imac91_vref(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2077) 				     const struct hda_fixup *fix, int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2078) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2079) 	static const hda_nid_t nids[] = { 0x18, 0x1a };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2080) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2081) 	if (action == HDA_FIXUP_ACT_INIT)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2082) 		alc889_fixup_mac_pins(codec, nids, ARRAY_SIZE(nids));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2083) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2084) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2085) /* Set VREF on speaker pins on mba11 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2086) static void alc889_fixup_mba11_vref(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2087) 				    const struct hda_fixup *fix, int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2088) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2089) 	static const hda_nid_t nids[] = { 0x18 };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2090) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2091) 	if (action == HDA_FIXUP_ACT_INIT)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2092) 		alc889_fixup_mac_pins(codec, nids, ARRAY_SIZE(nids));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2093) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2094) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2095) /* Set VREF on speaker pins on mba21 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2096) static void alc889_fixup_mba21_vref(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2097) 				    const struct hda_fixup *fix, int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2098) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2099) 	static const hda_nid_t nids[] = { 0x18, 0x19 };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2100) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2101) 	if (action == HDA_FIXUP_ACT_INIT)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2102) 		alc889_fixup_mac_pins(codec, nids, ARRAY_SIZE(nids));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2103) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2104) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2105) /* Don't take HP output as primary
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2106)  * Strangely, the speaker output doesn't work on Vaio Z and some Vaio
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2107)  * all-in-one desktop PCs (for example VGC-LN51JGB) through DAC 0x05
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2108)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2109) static void alc882_fixup_no_primary_hp(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2110) 				       const struct hda_fixup *fix, int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2111) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2112) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2113) 	if (action == HDA_FIXUP_ACT_PRE_PROBE) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2114) 		spec->gen.no_primary_hp = 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2115) 		spec->gen.no_multi_io = 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2116) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2117) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2118) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2119) static void alc_fixup_bass_chmap(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2120) 				 const struct hda_fixup *fix, int action);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2121) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2122) /* For dual-codec configuration, we need to disable some features to avoid
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2123)  * conflicts of kctls and PCM streams
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2124)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2125) static void alc_fixup_dual_codecs(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2126) 				  const struct hda_fixup *fix, int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2127) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2128) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2129) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2130) 	if (action != HDA_FIXUP_ACT_PRE_PROBE)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2131) 		return;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2132) 	/* disable vmaster */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2133) 	spec->gen.suppress_vmaster = 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2134) 	/* auto-mute and auto-mic switch don't work with multiple codecs */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2135) 	spec->gen.suppress_auto_mute = 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2136) 	spec->gen.suppress_auto_mic = 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2137) 	/* disable aamix as well */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2138) 	spec->gen.mixer_nid = 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2139) 	/* add location prefix to avoid conflicts */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2140) 	codec->force_pin_prefix = 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2141) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2142) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2143) static void rename_ctl(struct hda_codec *codec, const char *oldname,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2144) 		       const char *newname)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2145) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2146) 	struct snd_kcontrol *kctl;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2147) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2148) 	kctl = snd_hda_find_mixer_ctl(codec, oldname);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2149) 	if (kctl)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2150) 		strcpy(kctl->id.name, newname);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2151) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2152) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2153) static void alc1220_fixup_gb_dual_codecs(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2154) 					 const struct hda_fixup *fix,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2155) 					 int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2156) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2157) 	alc_fixup_dual_codecs(codec, fix, action);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2158) 	switch (action) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2159) 	case HDA_FIXUP_ACT_PRE_PROBE:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2160) 		/* override card longname to provide a unique UCM profile */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2161) 		strcpy(codec->card->longname, "HDAudio-Gigabyte-ALC1220DualCodecs");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2162) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2163) 	case HDA_FIXUP_ACT_BUILD:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2164) 		/* rename Capture controls depending on the codec */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2165) 		rename_ctl(codec, "Capture Volume",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2166) 			   codec->addr == 0 ?
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2167) 			   "Rear-Panel Capture Volume" :
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2168) 			   "Front-Panel Capture Volume");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2169) 		rename_ctl(codec, "Capture Switch",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2170) 			   codec->addr == 0 ?
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2171) 			   "Rear-Panel Capture Switch" :
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2172) 			   "Front-Panel Capture Switch");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2173) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2174) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2175) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2176) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2177) static void alc1220_fixup_gb_x570(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2178) 				     const struct hda_fixup *fix,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2179) 				     int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2180) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2181) 	static const hda_nid_t conn1[] = { 0x0c };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2182) 	static const struct coef_fw gb_x570_coefs[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2183) 		WRITE_COEF(0x07, 0x03c0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2184) 		WRITE_COEF(0x1a, 0x01c1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2185) 		WRITE_COEF(0x1b, 0x0202),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2186) 		WRITE_COEF(0x43, 0x3005),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2187) 		{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2188) 	};
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2189) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2190) 	switch (action) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2191) 	case HDA_FIXUP_ACT_PRE_PROBE:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2192) 		snd_hda_override_conn_list(codec, 0x14, ARRAY_SIZE(conn1), conn1);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2193) 		snd_hda_override_conn_list(codec, 0x1b, ARRAY_SIZE(conn1), conn1);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2194) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2195) 	case HDA_FIXUP_ACT_INIT:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2196) 		alc_process_coef_fw(codec, gb_x570_coefs);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2197) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2198) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2199) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2200) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2201) static void alc1220_fixup_clevo_p950(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2202) 				     const struct hda_fixup *fix,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2203) 				     int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2204) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2205) 	static const hda_nid_t conn1[] = { 0x0c };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2206) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2207) 	if (action != HDA_FIXUP_ACT_PRE_PROBE)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2208) 		return;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2209) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2210) 	alc_update_coef_idx(codec, 0x7, 0, 0x3c3);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2211) 	/* We therefore want to make sure 0x14 (front headphone) and
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2212) 	 * 0x1b (speakers) use the stereo DAC 0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2213) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2214) 	snd_hda_override_conn_list(codec, 0x14, ARRAY_SIZE(conn1), conn1);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2215) 	snd_hda_override_conn_list(codec, 0x1b, ARRAY_SIZE(conn1), conn1);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2216) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2217) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2218) static void alc_fixup_headset_mode_no_hp_mic(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2219) 				const struct hda_fixup *fix, int action);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2220) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2221) static void alc1220_fixup_clevo_pb51ed(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2222) 				     const struct hda_fixup *fix,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2223) 				     int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2224) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2225) 	alc1220_fixup_clevo_p950(codec, fix, action);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2226) 	alc_fixup_headset_mode_no_hp_mic(codec, fix, action);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2227) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2228) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2229) static void alc887_asus_hp_automute_hook(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2230) 					 struct hda_jack_callback *jack)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2231) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2232) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2233) 	unsigned int vref;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2234) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2235) 	snd_hda_gen_hp_automute(codec, jack);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2236) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2237) 	if (spec->gen.hp_jack_present)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2238) 		vref = AC_PINCTL_VREF_80;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2239) 	else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2240) 		vref = AC_PINCTL_VREF_HIZ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2241) 	snd_hda_set_pin_ctl(codec, 0x19, PIN_HP | vref);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2242) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2243) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2244) static void alc887_fixup_asus_jack(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2245) 				     const struct hda_fixup *fix, int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2246) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2247) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2248) 	if (action != HDA_FIXUP_ACT_PROBE)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2249) 		return;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2250) 	snd_hda_set_pin_ctl_cache(codec, 0x1b, PIN_HP);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2251) 	spec->gen.hp_automute_hook = alc887_asus_hp_automute_hook;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2252) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2253) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2254) static const struct hda_fixup alc882_fixups[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2255) 	[ALC882_FIXUP_ABIT_AW9D_MAX] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2256) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2257) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2258) 			{ 0x15, 0x01080104 }, /* side */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2259) 			{ 0x16, 0x01011012 }, /* rear */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2260) 			{ 0x17, 0x01016011 }, /* clfe */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2261) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2262) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2263) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2264) 	[ALC882_FIXUP_LENOVO_Y530] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2265) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2266) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2267) 			{ 0x15, 0x99130112 }, /* rear int speakers */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2268) 			{ 0x16, 0x99130111 }, /* subwoofer */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2269) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2270) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2271) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2272) 	[ALC882_FIXUP_PB_M5210] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2273) 		.type = HDA_FIXUP_PINCTLS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2274) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2275) 			{ 0x19, PIN_VREF50 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2276) 			{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2277) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2278) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2279) 	[ALC882_FIXUP_ACER_ASPIRE_7736] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2280) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2281) 		.v.func = alc_fixup_sku_ignore,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2282) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2283) 	[ALC882_FIXUP_ASUS_W90V] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2284) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2285) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2286) 			{ 0x16, 0x99130110 }, /* fix sequence for CLFE */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2287) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2288) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2289) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2290) 	[ALC889_FIXUP_CD] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2291) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2292) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2293) 			{ 0x1c, 0x993301f0 }, /* CD */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2294) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2295) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2296) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2297) 	[ALC889_FIXUP_FRONT_HP_NO_PRESENCE] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2298) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2299) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2300) 			{ 0x1b, 0x02214120 }, /* Front HP jack is flaky, disable jack detect */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2301) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2302) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2303) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2304) 		.chain_id = ALC889_FIXUP_CD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2305) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2306) 	[ALC889_FIXUP_VAIO_TT] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2307) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2308) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2309) 			{ 0x17, 0x90170111 }, /* hidden surround speaker */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2310) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2311) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2312) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2313) 	[ALC888_FIXUP_EEE1601] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2314) 		.type = HDA_FIXUP_VERBS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2315) 		.v.verbs = (const struct hda_verb[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2316) 			{ 0x20, AC_VERB_SET_COEF_INDEX, 0x0b },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2317) 			{ 0x20, AC_VERB_SET_PROC_COEF,  0x0838 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2318) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2319) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2320) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2321) 	[ALC886_FIXUP_EAPD] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2322) 		.type = HDA_FIXUP_VERBS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2323) 		.v.verbs = (const struct hda_verb[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2324) 			/* change to EAPD mode */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2325) 			{ 0x20, AC_VERB_SET_COEF_INDEX, 0x07 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2326) 			{ 0x20, AC_VERB_SET_PROC_COEF, 0x0068 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2327) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2328) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2329) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2330) 	[ALC882_FIXUP_EAPD] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2331) 		.type = HDA_FIXUP_VERBS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2332) 		.v.verbs = (const struct hda_verb[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2333) 			/* change to EAPD mode */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2334) 			{ 0x20, AC_VERB_SET_COEF_INDEX, 0x07 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2335) 			{ 0x20, AC_VERB_SET_PROC_COEF, 0x3060 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2336) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2337) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2338) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2339) 	[ALC883_FIXUP_EAPD] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2340) 		.type = HDA_FIXUP_VERBS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2341) 		.v.verbs = (const struct hda_verb[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2342) 			/* change to EAPD mode */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2343) 			{ 0x20, AC_VERB_SET_COEF_INDEX, 0x07 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2344) 			{ 0x20, AC_VERB_SET_PROC_COEF, 0x3070 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2345) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2346) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2347) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2348) 	[ALC883_FIXUP_ACER_EAPD] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2349) 		.type = HDA_FIXUP_VERBS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2350) 		.v.verbs = (const struct hda_verb[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2351) 			/* eanable EAPD on Acer laptops */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2352) 			{ 0x20, AC_VERB_SET_COEF_INDEX, 0x07 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2353) 			{ 0x20, AC_VERB_SET_PROC_COEF, 0x3050 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2354) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2355) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2356) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2357) 	[ALC882_FIXUP_GPIO1] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2358) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2359) 		.v.func = alc_fixup_gpio1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2360) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2361) 	[ALC882_FIXUP_GPIO2] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2362) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2363) 		.v.func = alc_fixup_gpio2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2364) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2365) 	[ALC882_FIXUP_GPIO3] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2366) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2367) 		.v.func = alc_fixup_gpio3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2368) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2369) 	[ALC882_FIXUP_ASUS_W2JC] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2370) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2371) 		.v.func = alc_fixup_gpio1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2372) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2373) 		.chain_id = ALC882_FIXUP_EAPD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2374) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2375) 	[ALC889_FIXUP_COEF] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2376) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2377) 		.v.func = alc889_fixup_coef,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2378) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2379) 	[ALC882_FIXUP_ACER_ASPIRE_4930G] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2380) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2381) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2382) 			{ 0x16, 0x99130111 }, /* CLFE speaker */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2383) 			{ 0x17, 0x99130112 }, /* surround speaker */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2384) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2385) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2386) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2387) 		.chain_id = ALC882_FIXUP_GPIO1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2388) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2389) 	[ALC882_FIXUP_ACER_ASPIRE_8930G] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2390) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2391) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2392) 			{ 0x16, 0x99130111 }, /* CLFE speaker */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2393) 			{ 0x1b, 0x99130112 }, /* surround speaker */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2394) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2395) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2396) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2397) 		.chain_id = ALC882_FIXUP_ASPIRE_8930G_VERBS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2398) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2399) 	[ALC882_FIXUP_ASPIRE_8930G_VERBS] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2400) 		/* additional init verbs for Acer Aspire 8930G */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2401) 		.type = HDA_FIXUP_VERBS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2402) 		.v.verbs = (const struct hda_verb[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2403) 			/* Enable all DACs */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2404) 			/* DAC DISABLE/MUTE 1? */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2405) 			/*  setting bits 1-5 disables DAC nids 0x02-0x06
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2406) 			 *  apparently. Init=0x38 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2407) 			{ 0x20, AC_VERB_SET_COEF_INDEX, 0x03 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2408) 			{ 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2409) 			/* DAC DISABLE/MUTE 2? */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2410) 			/*  some bit here disables the other DACs.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2411) 			 *  Init=0x4900 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2412) 			{ 0x20, AC_VERB_SET_COEF_INDEX, 0x08 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2413) 			{ 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2414) 			/* DMIC fix
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2415) 			 * This laptop has a stereo digital microphone.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2416) 			 * The mics are only 1cm apart which makes the stereo
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2417) 			 * useless. However, either the mic or the ALC889
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2418) 			 * makes the signal become a difference/sum signal
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2419) 			 * instead of standard stereo, which is annoying.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2420) 			 * So instead we flip this bit which makes the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2421) 			 * codec replicate the sum signal to both channels,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2422) 			 * turning it into a normal mono mic.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2423) 			 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2424) 			/* DMIC_CONTROL? Init value = 0x0001 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2425) 			{ 0x20, AC_VERB_SET_COEF_INDEX, 0x0b },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2426) 			{ 0x20, AC_VERB_SET_PROC_COEF, 0x0003 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2427) 			{ 0x20, AC_VERB_SET_COEF_INDEX, 0x07 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2428) 			{ 0x20, AC_VERB_SET_PROC_COEF, 0x3050 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2429) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2430) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2431) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2432) 		.chain_id = ALC882_FIXUP_GPIO1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2433) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2434) 	[ALC885_FIXUP_MACPRO_GPIO] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2435) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2436) 		.v.func = alc885_fixup_macpro_gpio,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2437) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2438) 	[ALC889_FIXUP_DAC_ROUTE] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2439) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2440) 		.v.func = alc889_fixup_dac_route,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2441) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2442) 	[ALC889_FIXUP_MBP_VREF] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2443) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2444) 		.v.func = alc889_fixup_mbp_vref,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2445) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2446) 		.chain_id = ALC882_FIXUP_GPIO1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2447) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2448) 	[ALC889_FIXUP_IMAC91_VREF] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2449) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2450) 		.v.func = alc889_fixup_imac91_vref,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2451) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2452) 		.chain_id = ALC882_FIXUP_GPIO1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2453) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2454) 	[ALC889_FIXUP_MBA11_VREF] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2455) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2456) 		.v.func = alc889_fixup_mba11_vref,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2457) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2458) 		.chain_id = ALC889_FIXUP_MBP_VREF,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2459) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2460) 	[ALC889_FIXUP_MBA21_VREF] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2461) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2462) 		.v.func = alc889_fixup_mba21_vref,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2463) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2464) 		.chain_id = ALC889_FIXUP_MBP_VREF,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2465) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2466) 	[ALC889_FIXUP_MP11_VREF] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2467) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2468) 		.v.func = alc889_fixup_mba11_vref,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2469) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2470) 		.chain_id = ALC885_FIXUP_MACPRO_GPIO,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2471) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2472) 	[ALC889_FIXUP_MP41_VREF] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2473) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2474) 		.v.func = alc889_fixup_mbp_vref,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2475) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2476) 		.chain_id = ALC885_FIXUP_MACPRO_GPIO,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2477) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2478) 	[ALC882_FIXUP_INV_DMIC] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2479) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2480) 		.v.func = alc_fixup_inv_dmic,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2481) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2482) 	[ALC882_FIXUP_NO_PRIMARY_HP] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2483) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2484) 		.v.func = alc882_fixup_no_primary_hp,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2485) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2486) 	[ALC887_FIXUP_ASUS_BASS] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2487) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2488) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2489) 			{0x16, 0x99130130}, /* bass speaker */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2490) 			{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2491) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2492) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2493) 		.chain_id = ALC887_FIXUP_BASS_CHMAP,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2494) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2495) 	[ALC887_FIXUP_BASS_CHMAP] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2496) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2497) 		.v.func = alc_fixup_bass_chmap,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2498) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2499) 	[ALC1220_FIXUP_GB_DUAL_CODECS] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2500) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2501) 		.v.func = alc1220_fixup_gb_dual_codecs,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2502) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2503) 	[ALC1220_FIXUP_GB_X570] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2504) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2505) 		.v.func = alc1220_fixup_gb_x570,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2506) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2507) 	[ALC1220_FIXUP_CLEVO_P950] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2508) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2509) 		.v.func = alc1220_fixup_clevo_p950,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2510) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2511) 	[ALC1220_FIXUP_CLEVO_PB51ED] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2512) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2513) 		.v.func = alc1220_fixup_clevo_pb51ed,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2514) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2515) 	[ALC1220_FIXUP_CLEVO_PB51ED_PINS] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2516) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2517) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2518) 			{ 0x19, 0x01a1913c }, /* use as headset mic, without its own jack detect */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2519) 			{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2520) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2521) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2522) 		.chain_id = ALC1220_FIXUP_CLEVO_PB51ED,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2523) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2524) 	[ALC887_FIXUP_ASUS_AUDIO] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2525) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2526) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2527) 			{ 0x15, 0x02a14150 }, /* use as headset mic, without its own jack detect */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2528) 			{ 0x19, 0x22219420 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2529) 			{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2530) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2531) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2532) 	[ALC887_FIXUP_ASUS_HMIC] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2533) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2534) 		.v.func = alc887_fixup_asus_jack,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2535) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2536) 		.chain_id = ALC887_FIXUP_ASUS_AUDIO,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2537) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2538) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2539) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2540) static const struct snd_pci_quirk alc882_fixup_tbl[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2541) 	SND_PCI_QUIRK(0x1025, 0x006c, "Acer Aspire 9810", ALC883_FIXUP_ACER_EAPD),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2542) 	SND_PCI_QUIRK(0x1025, 0x0090, "Acer Aspire", ALC883_FIXUP_ACER_EAPD),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2543) 	SND_PCI_QUIRK(0x1025, 0x0107, "Acer Aspire", ALC883_FIXUP_ACER_EAPD),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2544) 	SND_PCI_QUIRK(0x1025, 0x010a, "Acer Ferrari 5000", ALC883_FIXUP_ACER_EAPD),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2545) 	SND_PCI_QUIRK(0x1025, 0x0110, "Acer Aspire", ALC883_FIXUP_ACER_EAPD),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2546) 	SND_PCI_QUIRK(0x1025, 0x0112, "Acer Aspire 9303", ALC883_FIXUP_ACER_EAPD),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2547) 	SND_PCI_QUIRK(0x1025, 0x0121, "Acer Aspire 5920G", ALC883_FIXUP_ACER_EAPD),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2548) 	SND_PCI_QUIRK(0x1025, 0x013e, "Acer Aspire 4930G",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2549) 		      ALC882_FIXUP_ACER_ASPIRE_4930G),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2550) 	SND_PCI_QUIRK(0x1025, 0x013f, "Acer Aspire 5930G",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2551) 		      ALC882_FIXUP_ACER_ASPIRE_4930G),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2552) 	SND_PCI_QUIRK(0x1025, 0x0145, "Acer Aspire 8930G",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2553) 		      ALC882_FIXUP_ACER_ASPIRE_8930G),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2554) 	SND_PCI_QUIRK(0x1025, 0x0146, "Acer Aspire 6935G",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2555) 		      ALC882_FIXUP_ACER_ASPIRE_8930G),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2556) 	SND_PCI_QUIRK(0x1025, 0x0142, "Acer Aspire 7730G",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2557) 		      ALC882_FIXUP_ACER_ASPIRE_4930G),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2558) 	SND_PCI_QUIRK(0x1025, 0x0155, "Packard-Bell M5120", ALC882_FIXUP_PB_M5210),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2559) 	SND_PCI_QUIRK(0x1025, 0x015e, "Acer Aspire 6930G",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2560) 		      ALC882_FIXUP_ACER_ASPIRE_4930G),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2561) 	SND_PCI_QUIRK(0x1025, 0x0166, "Acer Aspire 6530G",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2562) 		      ALC882_FIXUP_ACER_ASPIRE_4930G),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2563) 	SND_PCI_QUIRK(0x1025, 0x021e, "Acer Aspire 5739G",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2564) 		      ALC882_FIXUP_ACER_ASPIRE_4930G),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2565) 	SND_PCI_QUIRK(0x1025, 0x0259, "Acer Aspire 5935", ALC889_FIXUP_DAC_ROUTE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2566) 	SND_PCI_QUIRK(0x1025, 0x026b, "Acer Aspire 8940G", ALC882_FIXUP_ACER_ASPIRE_8930G),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2567) 	SND_PCI_QUIRK(0x1025, 0x0296, "Acer Aspire 7736z", ALC882_FIXUP_ACER_ASPIRE_7736),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2568) 	SND_PCI_QUIRK(0x1043, 0x13c2, "Asus A7M", ALC882_FIXUP_EAPD),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2569) 	SND_PCI_QUIRK(0x1043, 0x1873, "ASUS W90V", ALC882_FIXUP_ASUS_W90V),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2570) 	SND_PCI_QUIRK(0x1043, 0x1971, "Asus W2JC", ALC882_FIXUP_ASUS_W2JC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2571) 	SND_PCI_QUIRK(0x1043, 0x2390, "Asus D700SA", ALC887_FIXUP_ASUS_HMIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2572) 	SND_PCI_QUIRK(0x1043, 0x835f, "Asus Eee 1601", ALC888_FIXUP_EEE1601),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2573) 	SND_PCI_QUIRK(0x1043, 0x84bc, "ASUS ET2700", ALC887_FIXUP_ASUS_BASS),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2574) 	SND_PCI_QUIRK(0x1043, 0x8691, "ASUS ROG Ranger VIII", ALC882_FIXUP_GPIO3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2575) 	SND_PCI_QUIRK(0x104d, 0x9043, "Sony Vaio VGC-LN51JGB", ALC882_FIXUP_NO_PRIMARY_HP),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2576) 	SND_PCI_QUIRK(0x104d, 0x9044, "Sony VAIO AiO", ALC882_FIXUP_NO_PRIMARY_HP),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2577) 	SND_PCI_QUIRK(0x104d, 0x9047, "Sony Vaio TT", ALC889_FIXUP_VAIO_TT),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2578) 	SND_PCI_QUIRK(0x104d, 0x905a, "Sony Vaio Z", ALC882_FIXUP_NO_PRIMARY_HP),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2579) 	SND_PCI_QUIRK(0x104d, 0x9060, "Sony Vaio VPCL14M1R", ALC882_FIXUP_NO_PRIMARY_HP),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2580) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2581) 	/* All Apple entries are in codec SSIDs */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2582) 	SND_PCI_QUIRK(0x106b, 0x00a0, "MacBookPro 3,1", ALC889_FIXUP_MBP_VREF),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2583) 	SND_PCI_QUIRK(0x106b, 0x00a1, "Macbook", ALC889_FIXUP_MBP_VREF),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2584) 	SND_PCI_QUIRK(0x106b, 0x00a4, "MacbookPro 4,1", ALC889_FIXUP_MBP_VREF),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2585) 	SND_PCI_QUIRK(0x106b, 0x0c00, "Mac Pro", ALC889_FIXUP_MP11_VREF),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2586) 	SND_PCI_QUIRK(0x106b, 0x1000, "iMac 24", ALC885_FIXUP_MACPRO_GPIO),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2587) 	SND_PCI_QUIRK(0x106b, 0x2800, "AppleTV", ALC885_FIXUP_MACPRO_GPIO),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2588) 	SND_PCI_QUIRK(0x106b, 0x2c00, "MacbookPro rev3", ALC889_FIXUP_MBP_VREF),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2589) 	SND_PCI_QUIRK(0x106b, 0x3000, "iMac", ALC889_FIXUP_MBP_VREF),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2590) 	SND_PCI_QUIRK(0x106b, 0x3200, "iMac 7,1 Aluminum", ALC882_FIXUP_EAPD),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2591) 	SND_PCI_QUIRK(0x106b, 0x3400, "MacBookAir 1,1", ALC889_FIXUP_MBA11_VREF),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2592) 	SND_PCI_QUIRK(0x106b, 0x3500, "MacBookAir 2,1", ALC889_FIXUP_MBA21_VREF),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2593) 	SND_PCI_QUIRK(0x106b, 0x3600, "Macbook 3,1", ALC889_FIXUP_MBP_VREF),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2594) 	SND_PCI_QUIRK(0x106b, 0x3800, "MacbookPro 4,1", ALC889_FIXUP_MBP_VREF),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2595) 	SND_PCI_QUIRK(0x106b, 0x3e00, "iMac 24 Aluminum", ALC885_FIXUP_MACPRO_GPIO),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2596) 	SND_PCI_QUIRK(0x106b, 0x3f00, "Macbook 5,1", ALC889_FIXUP_IMAC91_VREF),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2597) 	SND_PCI_QUIRK(0x106b, 0x4000, "MacbookPro 5,1", ALC889_FIXUP_IMAC91_VREF),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2598) 	SND_PCI_QUIRK(0x106b, 0x4100, "Macmini 3,1", ALC889_FIXUP_IMAC91_VREF),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2599) 	SND_PCI_QUIRK(0x106b, 0x4200, "Mac Pro 4,1/5,1", ALC889_FIXUP_MP41_VREF),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2600) 	SND_PCI_QUIRK(0x106b, 0x4300, "iMac 9,1", ALC889_FIXUP_IMAC91_VREF),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2601) 	SND_PCI_QUIRK(0x106b, 0x4600, "MacbookPro 5,2", ALC889_FIXUP_IMAC91_VREF),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2602) 	SND_PCI_QUIRK(0x106b, 0x4900, "iMac 9,1 Aluminum", ALC889_FIXUP_IMAC91_VREF),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2603) 	SND_PCI_QUIRK(0x106b, 0x4a00, "Macbook 5,2", ALC889_FIXUP_MBA11_VREF),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2604) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2605) 	SND_PCI_QUIRK(0x1071, 0x8258, "Evesham Voyaeger", ALC882_FIXUP_EAPD),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2606) 	SND_PCI_QUIRK(0x13fe, 0x1009, "Advantech MIT-W101", ALC886_FIXUP_EAPD),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2607) 	SND_PCI_QUIRK(0x1458, 0xa002, "Gigabyte EP45-DS3/Z87X-UD3H", ALC889_FIXUP_FRONT_HP_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2608) 	SND_PCI_QUIRK(0x1458, 0xa0b8, "Gigabyte AZ370-Gaming", ALC1220_FIXUP_GB_DUAL_CODECS),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2609) 	SND_PCI_QUIRK(0x1458, 0xa0cd, "Gigabyte X570 Aorus Master", ALC1220_FIXUP_GB_X570),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2610) 	SND_PCI_QUIRK(0x1458, 0xa0ce, "Gigabyte X570 Aorus Xtreme", ALC1220_FIXUP_GB_X570),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2611) 	SND_PCI_QUIRK(0x1458, 0xa0d5, "Gigabyte X570S Aorus Master", ALC1220_FIXUP_GB_X570),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2612) 	SND_PCI_QUIRK(0x1462, 0x11f7, "MSI-GE63", ALC1220_FIXUP_CLEVO_P950),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2613) 	SND_PCI_QUIRK(0x1462, 0x1228, "MSI-GP63", ALC1220_FIXUP_CLEVO_P950),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2614) 	SND_PCI_QUIRK(0x1462, 0x1229, "MSI-GP73", ALC1220_FIXUP_CLEVO_P950),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2615) 	SND_PCI_QUIRK(0x1462, 0x1275, "MSI-GL63", ALC1220_FIXUP_CLEVO_P950),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2616) 	SND_PCI_QUIRK(0x1462, 0x1276, "MSI-GL73", ALC1220_FIXUP_CLEVO_P950),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2617) 	SND_PCI_QUIRK(0x1462, 0x1293, "MSI-GP65", ALC1220_FIXUP_CLEVO_P950),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2618) 	SND_PCI_QUIRK(0x1462, 0x7350, "MSI-7350", ALC889_FIXUP_CD),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2619) 	SND_PCI_QUIRK(0x1462, 0xcc34, "MSI Godlike X570", ALC1220_FIXUP_GB_DUAL_CODECS),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2620) 	SND_PCI_QUIRK(0x1462, 0xda57, "MSI Z270-Gaming", ALC1220_FIXUP_GB_DUAL_CODECS),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2621) 	SND_PCI_QUIRK_VENDOR(0x1462, "MSI", ALC882_FIXUP_GPIO3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2622) 	SND_PCI_QUIRK(0x147b, 0x107a, "Abit AW9D-MAX", ALC882_FIXUP_ABIT_AW9D_MAX),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2623) 	SND_PCI_QUIRK(0x1558, 0x50d3, "Clevo PC50[ER][CDF]", ALC1220_FIXUP_CLEVO_PB51ED_PINS),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2624) 	SND_PCI_QUIRK(0x1558, 0x65d1, "Clevo PB51[ER][CDF]", ALC1220_FIXUP_CLEVO_PB51ED_PINS),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2625) 	SND_PCI_QUIRK(0x1558, 0x65d2, "Clevo PB51R[CDF]", ALC1220_FIXUP_CLEVO_PB51ED_PINS),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2626) 	SND_PCI_QUIRK(0x1558, 0x65e1, "Clevo PB51[ED][DF]", ALC1220_FIXUP_CLEVO_PB51ED_PINS),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2627) 	SND_PCI_QUIRK(0x1558, 0x65e5, "Clevo PC50D[PRS](?:-D|-G)?", ALC1220_FIXUP_CLEVO_PB51ED_PINS),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2628) 	SND_PCI_QUIRK(0x1558, 0x65f1, "Clevo PC50HS", ALC1220_FIXUP_CLEVO_PB51ED_PINS),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2629) 	SND_PCI_QUIRK(0x1558, 0x67d1, "Clevo PB71[ER][CDF]", ALC1220_FIXUP_CLEVO_PB51ED_PINS),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2630) 	SND_PCI_QUIRK(0x1558, 0x67e1, "Clevo PB71[DE][CDF]", ALC1220_FIXUP_CLEVO_PB51ED_PINS),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2631) 	SND_PCI_QUIRK(0x1558, 0x67e5, "Clevo PC70D[PRS](?:-D|-G)?", ALC1220_FIXUP_CLEVO_PB51ED_PINS),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2632) 	SND_PCI_QUIRK(0x1558, 0x67f1, "Clevo PC70H[PRS]", ALC1220_FIXUP_CLEVO_PB51ED_PINS),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2633) 	SND_PCI_QUIRK(0x1558, 0x70d1, "Clevo PC70[ER][CDF]", ALC1220_FIXUP_CLEVO_PB51ED_PINS),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2634) 	SND_PCI_QUIRK(0x1558, 0x7714, "Clevo X170SM", ALC1220_FIXUP_CLEVO_PB51ED_PINS),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2635) 	SND_PCI_QUIRK(0x1558, 0x7715, "Clevo X170KM-G", ALC1220_FIXUP_CLEVO_PB51ED),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2636) 	SND_PCI_QUIRK(0x1558, 0x9501, "Clevo P950HR", ALC1220_FIXUP_CLEVO_P950),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2637) 	SND_PCI_QUIRK(0x1558, 0x9506, "Clevo P955HQ", ALC1220_FIXUP_CLEVO_P950),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2638) 	SND_PCI_QUIRK(0x1558, 0x950a, "Clevo P955H[PR]", ALC1220_FIXUP_CLEVO_P950),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2639) 	SND_PCI_QUIRK(0x1558, 0x95e1, "Clevo P95xER", ALC1220_FIXUP_CLEVO_P950),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2640) 	SND_PCI_QUIRK(0x1558, 0x95e2, "Clevo P950ER", ALC1220_FIXUP_CLEVO_P950),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2641) 	SND_PCI_QUIRK(0x1558, 0x95e3, "Clevo P955[ER]T", ALC1220_FIXUP_CLEVO_P950),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2642) 	SND_PCI_QUIRK(0x1558, 0x95e4, "Clevo P955ER", ALC1220_FIXUP_CLEVO_P950),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2643) 	SND_PCI_QUIRK(0x1558, 0x95e5, "Clevo P955EE6", ALC1220_FIXUP_CLEVO_P950),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2644) 	SND_PCI_QUIRK(0x1558, 0x95e6, "Clevo P950R[CDF]", ALC1220_FIXUP_CLEVO_P950),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2645) 	SND_PCI_QUIRK(0x1558, 0x96e1, "Clevo P960[ER][CDFN]-K", ALC1220_FIXUP_CLEVO_P950),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2646) 	SND_PCI_QUIRK(0x1558, 0x97e1, "Clevo P970[ER][CDFN]", ALC1220_FIXUP_CLEVO_P950),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2647) 	SND_PCI_QUIRK(0x1558, 0x97e2, "Clevo P970RC-M", ALC1220_FIXUP_CLEVO_P950),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2648) 	SND_PCI_QUIRK_VENDOR(0x1558, "Clevo laptop", ALC882_FIXUP_EAPD),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2649) 	SND_PCI_QUIRK(0x161f, 0x2054, "Medion laptop", ALC883_FIXUP_EAPD),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2650) 	SND_PCI_QUIRK(0x17aa, 0x3a0d, "Lenovo Y530", ALC882_FIXUP_LENOVO_Y530),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2651) 	SND_PCI_QUIRK(0x8086, 0x0022, "DX58SO", ALC889_FIXUP_COEF),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2652) 	{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2653) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2654) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2655) static const struct hda_model_fixup alc882_fixup_models[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2656) 	{.id = ALC882_FIXUP_ABIT_AW9D_MAX, .name = "abit-aw9d"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2657) 	{.id = ALC882_FIXUP_LENOVO_Y530, .name = "lenovo-y530"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2658) 	{.id = ALC882_FIXUP_ACER_ASPIRE_7736, .name = "acer-aspire-7736"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2659) 	{.id = ALC882_FIXUP_ASUS_W90V, .name = "asus-w90v"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2660) 	{.id = ALC889_FIXUP_CD, .name = "cd"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2661) 	{.id = ALC889_FIXUP_FRONT_HP_NO_PRESENCE, .name = "no-front-hp"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2662) 	{.id = ALC889_FIXUP_VAIO_TT, .name = "vaio-tt"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2663) 	{.id = ALC888_FIXUP_EEE1601, .name = "eee1601"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2664) 	{.id = ALC882_FIXUP_EAPD, .name = "alc882-eapd"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2665) 	{.id = ALC883_FIXUP_EAPD, .name = "alc883-eapd"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2666) 	{.id = ALC882_FIXUP_GPIO1, .name = "gpio1"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2667) 	{.id = ALC882_FIXUP_GPIO2, .name = "gpio2"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2668) 	{.id = ALC882_FIXUP_GPIO3, .name = "gpio3"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2669) 	{.id = ALC889_FIXUP_COEF, .name = "alc889-coef"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2670) 	{.id = ALC882_FIXUP_ASUS_W2JC, .name = "asus-w2jc"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2671) 	{.id = ALC882_FIXUP_ACER_ASPIRE_4930G, .name = "acer-aspire-4930g"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2672) 	{.id = ALC882_FIXUP_ACER_ASPIRE_8930G, .name = "acer-aspire-8930g"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2673) 	{.id = ALC883_FIXUP_ACER_EAPD, .name = "acer-aspire"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2674) 	{.id = ALC885_FIXUP_MACPRO_GPIO, .name = "macpro-gpio"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2675) 	{.id = ALC889_FIXUP_DAC_ROUTE, .name = "dac-route"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2676) 	{.id = ALC889_FIXUP_MBP_VREF, .name = "mbp-vref"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2677) 	{.id = ALC889_FIXUP_IMAC91_VREF, .name = "imac91-vref"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2678) 	{.id = ALC889_FIXUP_MBA11_VREF, .name = "mba11-vref"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2679) 	{.id = ALC889_FIXUP_MBA21_VREF, .name = "mba21-vref"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2680) 	{.id = ALC889_FIXUP_MP11_VREF, .name = "mp11-vref"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2681) 	{.id = ALC889_FIXUP_MP41_VREF, .name = "mp41-vref"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2682) 	{.id = ALC882_FIXUP_INV_DMIC, .name = "inv-dmic"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2683) 	{.id = ALC882_FIXUP_NO_PRIMARY_HP, .name = "no-primary-hp"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2684) 	{.id = ALC887_FIXUP_ASUS_BASS, .name = "asus-bass"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2685) 	{.id = ALC1220_FIXUP_GB_DUAL_CODECS, .name = "dual-codecs"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2686) 	{.id = ALC1220_FIXUP_GB_X570, .name = "gb-x570"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2687) 	{.id = ALC1220_FIXUP_CLEVO_P950, .name = "clevo-p950"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2688) 	{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2689) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2690) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2691) static const struct snd_hda_pin_quirk alc882_pin_fixup_tbl[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2692) 	SND_HDA_PIN_QUIRK(0x10ec1220, 0x1043, "ASUS", ALC1220_FIXUP_CLEVO_P950,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2693) 		{0x14, 0x01014010},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2694) 		{0x15, 0x01011012},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2695) 		{0x16, 0x01016011},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2696) 		{0x18, 0x01a19040},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2697) 		{0x19, 0x02a19050},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2698) 		{0x1a, 0x0181304f},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2699) 		{0x1b, 0x0221401f},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2700) 		{0x1e, 0x01456130}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2701) 	SND_HDA_PIN_QUIRK(0x10ec1220, 0x1462, "MS-7C35", ALC1220_FIXUP_CLEVO_P950,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2702) 		{0x14, 0x01015010},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2703) 		{0x15, 0x01011012},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2704) 		{0x16, 0x01011011},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2705) 		{0x18, 0x01a11040},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2706) 		{0x19, 0x02a19050},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2707) 		{0x1a, 0x0181104f},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2708) 		{0x1b, 0x0221401f},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2709) 		{0x1e, 0x01451130}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2710) 	{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2711) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2712) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2713) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2714)  * BIOS auto configuration
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2715)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2716) /* almost identical with ALC880 parser... */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2717) static int alc882_parse_auto_config(struct hda_codec *codec)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2718) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2719) 	static const hda_nid_t alc882_ignore[] = { 0x1d, 0 };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2720) 	static const hda_nid_t alc882_ssids[] = { 0x15, 0x1b, 0x14, 0 };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2721) 	return alc_parse_auto_config(codec, alc882_ignore, alc882_ssids);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2722) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2723) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2724) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2725)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2726) static int patch_alc882(struct hda_codec *codec)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2727) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2728) 	struct alc_spec *spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2729) 	int err;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2730) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2731) 	err = alc_alloc_spec(codec, 0x0b);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2732) 	if (err < 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2733) 		return err;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2734) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2735) 	spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2736) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2737) 	switch (codec->core.vendor_id) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2738) 	case 0x10ec0882:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2739) 	case 0x10ec0885:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2740) 	case 0x10ec0900:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2741) 	case 0x10ec0b00:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2742) 	case 0x10ec1220:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2743) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2744) 	default:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2745) 		/* ALC883 and variants */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2746) 		alc_fix_pll_init(codec, 0x20, 0x0a, 10);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2747) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2748) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2749) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2750) 	alc_pre_init(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2751) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2752) 	snd_hda_pick_fixup(codec, alc882_fixup_models, alc882_fixup_tbl,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2753) 		       alc882_fixups);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2754) 	snd_hda_pick_pin_fixup(codec, alc882_pin_fixup_tbl, alc882_fixups, true);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2755) 	snd_hda_apply_fixup(codec, HDA_FIXUP_ACT_PRE_PROBE);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2756) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2757) 	alc_auto_parse_customize_define(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2758) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2759) 	if (has_cdefine_beep(codec))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2760) 		spec->gen.beep_nid = 0x01;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2761) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2762) 	/* automatic parse from the BIOS config */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2763) 	err = alc882_parse_auto_config(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2764) 	if (err < 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2765) 		goto error;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2766) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2767) 	if (!spec->gen.no_analog && spec->gen.beep_nid) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2768) 		err = set_beep_amp(spec, 0x0b, 0x05, HDA_INPUT);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2769) 		if (err < 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2770) 			goto error;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2771) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2772) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2773) 	snd_hda_apply_fixup(codec, HDA_FIXUP_ACT_PROBE);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2774) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2775) 	return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2776) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2777)  error:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2778) 	alc_free(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2779) 	return err;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2780) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2781) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2782) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2783) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2784)  * ALC262 support
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2785)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2786) static int alc262_parse_auto_config(struct hda_codec *codec)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2787) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2788) 	static const hda_nid_t alc262_ignore[] = { 0x1d, 0 };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2789) 	static const hda_nid_t alc262_ssids[] = { 0x15, 0x1b, 0x14, 0 };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2790) 	return alc_parse_auto_config(codec, alc262_ignore, alc262_ssids);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2791) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2792) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2793) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2794)  * Pin config fixes
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2795)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2796) enum {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2797) 	ALC262_FIXUP_FSC_H270,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2798) 	ALC262_FIXUP_FSC_S7110,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2799) 	ALC262_FIXUP_HP_Z200,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2800) 	ALC262_FIXUP_TYAN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2801) 	ALC262_FIXUP_LENOVO_3000,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2802) 	ALC262_FIXUP_BENQ,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2803) 	ALC262_FIXUP_BENQ_T31,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2804) 	ALC262_FIXUP_INV_DMIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2805) 	ALC262_FIXUP_INTEL_BAYLEYBAY,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2806) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2807) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2808) static const struct hda_fixup alc262_fixups[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2809) 	[ALC262_FIXUP_FSC_H270] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2810) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2811) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2812) 			{ 0x14, 0x99130110 }, /* speaker */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2813) 			{ 0x15, 0x0221142f }, /* front HP */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2814) 			{ 0x1b, 0x0121141f }, /* rear HP */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2815) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2816) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2817) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2818) 	[ALC262_FIXUP_FSC_S7110] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2819) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2820) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2821) 			{ 0x15, 0x90170110 }, /* speaker */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2822) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2823) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2824) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2825) 		.chain_id = ALC262_FIXUP_BENQ,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2826) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2827) 	[ALC262_FIXUP_HP_Z200] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2828) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2829) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2830) 			{ 0x16, 0x99130120 }, /* internal speaker */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2831) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2832) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2833) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2834) 	[ALC262_FIXUP_TYAN] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2835) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2836) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2837) 			{ 0x14, 0x1993e1f0 }, /* int AUX */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2838) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2839) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2840) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2841) 	[ALC262_FIXUP_LENOVO_3000] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2842) 		.type = HDA_FIXUP_PINCTLS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2843) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2844) 			{ 0x19, PIN_VREF50 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2845) 			{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2846) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2847) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2848) 		.chain_id = ALC262_FIXUP_BENQ,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2849) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2850) 	[ALC262_FIXUP_BENQ] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2851) 		.type = HDA_FIXUP_VERBS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2852) 		.v.verbs = (const struct hda_verb[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2853) 			{ 0x20, AC_VERB_SET_COEF_INDEX, 0x07 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2854) 			{ 0x20, AC_VERB_SET_PROC_COEF, 0x3070 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2855) 			{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2856) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2857) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2858) 	[ALC262_FIXUP_BENQ_T31] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2859) 		.type = HDA_FIXUP_VERBS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2860) 		.v.verbs = (const struct hda_verb[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2861) 			{ 0x20, AC_VERB_SET_COEF_INDEX, 0x07 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2862) 			{ 0x20, AC_VERB_SET_PROC_COEF, 0x3050 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2863) 			{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2864) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2865) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2866) 	[ALC262_FIXUP_INV_DMIC] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2867) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2868) 		.v.func = alc_fixup_inv_dmic,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2869) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2870) 	[ALC262_FIXUP_INTEL_BAYLEYBAY] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2871) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2872) 		.v.func = alc_fixup_no_depop_delay,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2873) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2874) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2875) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2876) static const struct snd_pci_quirk alc262_fixup_tbl[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2877) 	SND_PCI_QUIRK(0x103c, 0x170b, "HP Z200", ALC262_FIXUP_HP_Z200),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2878) 	SND_PCI_QUIRK(0x10cf, 0x1397, "Fujitsu Lifebook S7110", ALC262_FIXUP_FSC_S7110),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2879) 	SND_PCI_QUIRK(0x10cf, 0x142d, "Fujitsu Lifebook E8410", ALC262_FIXUP_BENQ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2880) 	SND_PCI_QUIRK(0x10f1, 0x2915, "Tyan Thunder n6650W", ALC262_FIXUP_TYAN),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2881) 	SND_PCI_QUIRK(0x1734, 0x1141, "FSC ESPRIMO U9210", ALC262_FIXUP_FSC_H270),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2882) 	SND_PCI_QUIRK(0x1734, 0x1147, "FSC Celsius H270", ALC262_FIXUP_FSC_H270),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2883) 	SND_PCI_QUIRK(0x17aa, 0x384e, "Lenovo 3000", ALC262_FIXUP_LENOVO_3000),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2884) 	SND_PCI_QUIRK(0x17ff, 0x0560, "Benq ED8", ALC262_FIXUP_BENQ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2885) 	SND_PCI_QUIRK(0x17ff, 0x058d, "Benq T31-16", ALC262_FIXUP_BENQ_T31),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2886) 	SND_PCI_QUIRK(0x8086, 0x7270, "BayleyBay", ALC262_FIXUP_INTEL_BAYLEYBAY),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2887) 	{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2888) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2889) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2890) static const struct hda_model_fixup alc262_fixup_models[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2891) 	{.id = ALC262_FIXUP_INV_DMIC, .name = "inv-dmic"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2892) 	{.id = ALC262_FIXUP_FSC_H270, .name = "fsc-h270"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2893) 	{.id = ALC262_FIXUP_FSC_S7110, .name = "fsc-s7110"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2894) 	{.id = ALC262_FIXUP_HP_Z200, .name = "hp-z200"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2895) 	{.id = ALC262_FIXUP_TYAN, .name = "tyan"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2896) 	{.id = ALC262_FIXUP_LENOVO_3000, .name = "lenovo-3000"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2897) 	{.id = ALC262_FIXUP_BENQ, .name = "benq"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2898) 	{.id = ALC262_FIXUP_BENQ_T31, .name = "benq-t31"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2899) 	{.id = ALC262_FIXUP_INTEL_BAYLEYBAY, .name = "bayleybay"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2900) 	{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2901) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2902) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2903) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2904)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2905) static int patch_alc262(struct hda_codec *codec)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2906) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2907) 	struct alc_spec *spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2908) 	int err;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2909) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2910) 	err = alc_alloc_spec(codec, 0x0b);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2911) 	if (err < 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2912) 		return err;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2913) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2914) 	spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2915) 	spec->gen.shared_mic_vref_pin = 0x18;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2916) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2917) 	spec->shutup = alc_eapd_shutup;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2918) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2919) #if 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2920) 	/* pshou 07/11/05  set a zero PCM sample to DAC when FIFO is
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2921) 	 * under-run
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2922) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2923) 	alc_update_coefex_idx(codec, 0x1a, 7, 0, 0x80);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2924) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2925) 	alc_fix_pll_init(codec, 0x20, 0x0a, 10);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2926) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2927) 	alc_pre_init(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2928) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2929) 	snd_hda_pick_fixup(codec, alc262_fixup_models, alc262_fixup_tbl,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2930) 		       alc262_fixups);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2931) 	snd_hda_apply_fixup(codec, HDA_FIXUP_ACT_PRE_PROBE);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2932) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2933) 	alc_auto_parse_customize_define(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2934) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2935) 	if (has_cdefine_beep(codec))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2936) 		spec->gen.beep_nid = 0x01;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2937) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2938) 	/* automatic parse from the BIOS config */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2939) 	err = alc262_parse_auto_config(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2940) 	if (err < 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2941) 		goto error;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2942) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2943) 	if (!spec->gen.no_analog && spec->gen.beep_nid) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2944) 		err = set_beep_amp(spec, 0x0b, 0x05, HDA_INPUT);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2945) 		if (err < 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2946) 			goto error;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2947) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2948) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2949) 	snd_hda_apply_fixup(codec, HDA_FIXUP_ACT_PROBE);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2950) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2951) 	return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2952) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2953)  error:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2954) 	alc_free(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2955) 	return err;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2956) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2957) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2958) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2959)  *  ALC268
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2960)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2961) /* bind Beep switches of both NID 0x0f and 0x10 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2962) static int alc268_beep_switch_put(struct snd_kcontrol *kcontrol,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2963) 				  struct snd_ctl_elem_value *ucontrol)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2964) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2965) 	struct hda_codec *codec = snd_kcontrol_chip(kcontrol);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2966) 	unsigned long pval;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2967) 	int err;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2968) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2969) 	mutex_lock(&codec->control_mutex);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2970) 	pval = kcontrol->private_value;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2971) 	kcontrol->private_value = (pval & ~0xff) | 0x0f;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2972) 	err = snd_hda_mixer_amp_switch_put(kcontrol, ucontrol);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2973) 	if (err >= 0) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2974) 		kcontrol->private_value = (pval & ~0xff) | 0x10;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2975) 		err = snd_hda_mixer_amp_switch_put(kcontrol, ucontrol);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2976) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2977) 	kcontrol->private_value = pval;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2978) 	mutex_unlock(&codec->control_mutex);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2979) 	return err;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2980) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2981) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2982) static const struct snd_kcontrol_new alc268_beep_mixer[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2983) 	HDA_CODEC_VOLUME("Beep Playback Volume", 0x1d, 0x0, HDA_INPUT),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2984) 	{
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2985) 		.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2986) 		.name = "Beep Playback Switch",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2987) 		.subdevice = HDA_SUBDEV_AMP_FLAG,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2988) 		.info = snd_hda_mixer_amp_switch_info,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2989) 		.get = snd_hda_mixer_amp_switch_get,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2990) 		.put = alc268_beep_switch_put,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2991) 		.private_value = HDA_COMPOSE_AMP_VAL(0x0f, 3, 1, HDA_INPUT)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2992) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2993) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2994) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2995) /* set PCBEEP vol = 0, mute connections */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2996) static const struct hda_verb alc268_beep_init_verbs[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2997) 	{0x1d, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2998) 	{0x0f, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(1)},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2999) 	{0x10, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(1)},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3000) 	{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3001) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3002) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3003) enum {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3004) 	ALC268_FIXUP_INV_DMIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3005) 	ALC268_FIXUP_HP_EAPD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3006) 	ALC268_FIXUP_SPDIF,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3007) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3008) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3009) static const struct hda_fixup alc268_fixups[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3010) 	[ALC268_FIXUP_INV_DMIC] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3011) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3012) 		.v.func = alc_fixup_inv_dmic,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3013) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3014) 	[ALC268_FIXUP_HP_EAPD] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3015) 		.type = HDA_FIXUP_VERBS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3016) 		.v.verbs = (const struct hda_verb[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3017) 			{0x15, AC_VERB_SET_EAPD_BTLENABLE, 0},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3018) 			{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3019) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3020) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3021) 	[ALC268_FIXUP_SPDIF] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3022) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3023) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3024) 			{ 0x1e, 0x014b1180 }, /* enable SPDIF out */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3025) 			{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3026) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3027) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3028) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3029) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3030) static const struct hda_model_fixup alc268_fixup_models[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3031) 	{.id = ALC268_FIXUP_INV_DMIC, .name = "inv-dmic"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3032) 	{.id = ALC268_FIXUP_HP_EAPD, .name = "hp-eapd"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3033) 	{.id = ALC268_FIXUP_SPDIF, .name = "spdif"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3034) 	{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3035) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3036) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3037) static const struct snd_pci_quirk alc268_fixup_tbl[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3038) 	SND_PCI_QUIRK(0x1025, 0x0139, "Acer TravelMate 6293", ALC268_FIXUP_SPDIF),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3039) 	SND_PCI_QUIRK(0x1025, 0x015b, "Acer AOA 150 (ZG5)", ALC268_FIXUP_INV_DMIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3040) 	/* below is codec SSID since multiple Toshiba laptops have the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3041) 	 * same PCI SSID 1179:ff00
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3042) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3043) 	SND_PCI_QUIRK(0x1179, 0xff06, "Toshiba P200", ALC268_FIXUP_HP_EAPD),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3044) 	{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3045) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3046) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3047) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3048)  * BIOS auto configuration
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3049)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3050) static int alc268_parse_auto_config(struct hda_codec *codec)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3051) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3052) 	static const hda_nid_t alc268_ssids[] = { 0x15, 0x1b, 0x14, 0 };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3053) 	return alc_parse_auto_config(codec, NULL, alc268_ssids);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3054) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3055) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3056) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3057)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3058) static int patch_alc268(struct hda_codec *codec)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3059) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3060) 	struct alc_spec *spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3061) 	int i, err;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3062) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3063) 	/* ALC268 has no aa-loopback mixer */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3064) 	err = alc_alloc_spec(codec, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3065) 	if (err < 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3066) 		return err;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3067) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3068) 	spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3069) 	if (has_cdefine_beep(codec))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3070) 		spec->gen.beep_nid = 0x01;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3071) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3072) 	spec->shutup = alc_eapd_shutup;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3073) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3074) 	alc_pre_init(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3075) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3076) 	snd_hda_pick_fixup(codec, alc268_fixup_models, alc268_fixup_tbl, alc268_fixups);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3077) 	snd_hda_apply_fixup(codec, HDA_FIXUP_ACT_PRE_PROBE);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3078) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3079) 	/* automatic parse from the BIOS config */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3080) 	err = alc268_parse_auto_config(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3081) 	if (err < 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3082) 		goto error;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3083) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3084) 	if (err > 0 && !spec->gen.no_analog &&
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3085) 	    spec->gen.autocfg.speaker_pins[0] != 0x1d) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3086) 		for (i = 0; i < ARRAY_SIZE(alc268_beep_mixer); i++) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3087) 			if (!snd_hda_gen_add_kctl(&spec->gen, NULL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3088) 						  &alc268_beep_mixer[i])) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3089) 				err = -ENOMEM;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3090) 				goto error;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3091) 			}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3092) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3093) 		snd_hda_add_verbs(codec, alc268_beep_init_verbs);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3094) 		if (!query_amp_caps(codec, 0x1d, HDA_INPUT))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3095) 			/* override the amp caps for beep generator */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3096) 			snd_hda_override_amp_caps(codec, 0x1d, HDA_INPUT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3097) 					  (0x0c << AC_AMPCAP_OFFSET_SHIFT) |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3098) 					  (0x0c << AC_AMPCAP_NUM_STEPS_SHIFT) |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3099) 					  (0x07 << AC_AMPCAP_STEP_SIZE_SHIFT) |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3100) 					  (0 << AC_AMPCAP_MUTE_SHIFT));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3101) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3102) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3103) 	snd_hda_apply_fixup(codec, HDA_FIXUP_ACT_PROBE);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3104) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3105) 	return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3106) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3107)  error:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3108) 	alc_free(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3109) 	return err;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3110) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3111) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3112) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3113)  * ALC269
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3114)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3115) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3116) static const struct hda_pcm_stream alc269_44k_pcm_analog_playback = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3117) 	.rates = SNDRV_PCM_RATE_44100, /* fixed rate */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3118) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3119) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3120) static const struct hda_pcm_stream alc269_44k_pcm_analog_capture = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3121) 	.rates = SNDRV_PCM_RATE_44100, /* fixed rate */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3122) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3123) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3124) /* different alc269-variants */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3125) enum {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3126) 	ALC269_TYPE_ALC269VA,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3127) 	ALC269_TYPE_ALC269VB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3128) 	ALC269_TYPE_ALC269VC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3129) 	ALC269_TYPE_ALC269VD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3130) 	ALC269_TYPE_ALC280,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3131) 	ALC269_TYPE_ALC282,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3132) 	ALC269_TYPE_ALC283,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3133) 	ALC269_TYPE_ALC284,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3134) 	ALC269_TYPE_ALC293,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3135) 	ALC269_TYPE_ALC286,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3136) 	ALC269_TYPE_ALC298,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3137) 	ALC269_TYPE_ALC255,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3138) 	ALC269_TYPE_ALC256,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3139) 	ALC269_TYPE_ALC257,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3140) 	ALC269_TYPE_ALC215,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3141) 	ALC269_TYPE_ALC225,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3142) 	ALC269_TYPE_ALC294,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3143) 	ALC269_TYPE_ALC300,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3144) 	ALC269_TYPE_ALC623,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3145) 	ALC269_TYPE_ALC700,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3146) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3147) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3148) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3149)  * BIOS auto configuration
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3150)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3151) static int alc269_parse_auto_config(struct hda_codec *codec)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3152) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3153) 	static const hda_nid_t alc269_ignore[] = { 0x1d, 0 };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3154) 	static const hda_nid_t alc269_ssids[] = { 0, 0x1b, 0x14, 0x21 };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3155) 	static const hda_nid_t alc269va_ssids[] = { 0x15, 0x1b, 0x14, 0 };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3156) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3157) 	const hda_nid_t *ssids;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3158) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3159) 	switch (spec->codec_variant) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3160) 	case ALC269_TYPE_ALC269VA:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3161) 	case ALC269_TYPE_ALC269VC:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3162) 	case ALC269_TYPE_ALC280:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3163) 	case ALC269_TYPE_ALC284:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3164) 	case ALC269_TYPE_ALC293:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3165) 		ssids = alc269va_ssids;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3166) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3167) 	case ALC269_TYPE_ALC269VB:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3168) 	case ALC269_TYPE_ALC269VD:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3169) 	case ALC269_TYPE_ALC282:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3170) 	case ALC269_TYPE_ALC283:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3171) 	case ALC269_TYPE_ALC286:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3172) 	case ALC269_TYPE_ALC298:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3173) 	case ALC269_TYPE_ALC255:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3174) 	case ALC269_TYPE_ALC256:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3175) 	case ALC269_TYPE_ALC257:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3176) 	case ALC269_TYPE_ALC215:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3177) 	case ALC269_TYPE_ALC225:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3178) 	case ALC269_TYPE_ALC294:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3179) 	case ALC269_TYPE_ALC300:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3180) 	case ALC269_TYPE_ALC623:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3181) 	case ALC269_TYPE_ALC700:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3182) 		ssids = alc269_ssids;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3183) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3184) 	default:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3185) 		ssids = alc269_ssids;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3186) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3187) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3188) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3189) 	return alc_parse_auto_config(codec, alc269_ignore, ssids);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3190) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3191) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3192) static const struct hda_jack_keymap alc_headset_btn_keymap[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3193) 	{ SND_JACK_BTN_0, KEY_PLAYPAUSE },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3194) 	{ SND_JACK_BTN_1, KEY_VOICECOMMAND },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3195) 	{ SND_JACK_BTN_2, KEY_VOLUMEUP },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3196) 	{ SND_JACK_BTN_3, KEY_VOLUMEDOWN },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3197) 	{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3198) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3199) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3200) static void alc_headset_btn_callback(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3201) 				     struct hda_jack_callback *jack)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3202) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3203) 	int report = 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3204) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3205) 	if (jack->unsol_res & (7 << 13))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3206) 		report |= SND_JACK_BTN_0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3207) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3208) 	if (jack->unsol_res  & (1 << 16 | 3 << 8))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3209) 		report |= SND_JACK_BTN_1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3210) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3211) 	/* Volume up key */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3212) 	if (jack->unsol_res & (7 << 23))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3213) 		report |= SND_JACK_BTN_2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3214) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3215) 	/* Volume down key */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3216) 	if (jack->unsol_res & (7 << 10))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3217) 		report |= SND_JACK_BTN_3;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3218) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3219) 	jack->jack->button_state = report;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3220) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3221) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3222) static void alc_disable_headset_jack_key(struct hda_codec *codec)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3223) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3224) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3225) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3226) 	if (!spec->has_hs_key)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3227) 		return;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3228) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3229) 	switch (codec->core.vendor_id) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3230) 	case 0x10ec0215:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3231) 	case 0x10ec0225:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3232) 	case 0x10ec0285:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3233) 	case 0x10ec0287:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3234) 	case 0x10ec0295:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3235) 	case 0x10ec0289:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3236) 	case 0x10ec0299:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3237) 		alc_write_coef_idx(codec, 0x48, 0x0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3238) 		alc_update_coef_idx(codec, 0x49, 0x0045, 0x0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3239) 		alc_update_coef_idx(codec, 0x44, 0x0045 << 8, 0x0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3240) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3241) 	case 0x10ec0230:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3242) 	case 0x10ec0236:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3243) 	case 0x10ec0256:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3244) 		alc_write_coef_idx(codec, 0x48, 0x0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3245) 		alc_update_coef_idx(codec, 0x49, 0x0045, 0x0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3246) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3247) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3248) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3249) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3250) static void alc_enable_headset_jack_key(struct hda_codec *codec)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3251) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3252) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3253) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3254) 	if (!spec->has_hs_key)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3255) 		return;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3256) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3257) 	switch (codec->core.vendor_id) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3258) 	case 0x10ec0215:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3259) 	case 0x10ec0225:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3260) 	case 0x10ec0285:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3261) 	case 0x10ec0287:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3262) 	case 0x10ec0295:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3263) 	case 0x10ec0289:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3264) 	case 0x10ec0299:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3265) 		alc_write_coef_idx(codec, 0x48, 0xd011);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3266) 		alc_update_coef_idx(codec, 0x49, 0x007f, 0x0045);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3267) 		alc_update_coef_idx(codec, 0x44, 0x007f << 8, 0x0045 << 8);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3268) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3269) 	case 0x10ec0230:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3270) 	case 0x10ec0236:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3271) 	case 0x10ec0256:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3272) 		alc_write_coef_idx(codec, 0x48, 0xd011);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3273) 		alc_update_coef_idx(codec, 0x49, 0x007f, 0x0045);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3274) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3275) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3276) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3277) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3278) static void alc_fixup_headset_jack(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3279) 				    const struct hda_fixup *fix, int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3280) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3281) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3282) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3283) 	switch (action) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3284) 	case HDA_FIXUP_ACT_PRE_PROBE:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3285) 		spec->has_hs_key = 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3286) 		snd_hda_jack_detect_enable_callback(codec, 0x55,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3287) 						    alc_headset_btn_callback);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3288) 		snd_hda_jack_add_kctl(codec, 0x55, "Headset Jack", false,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3289) 				      SND_JACK_HEADSET, alc_headset_btn_keymap);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3290) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3291) 	case HDA_FIXUP_ACT_INIT:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3292) 		alc_enable_headset_jack_key(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3293) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3294) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3295) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3296) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3297) static void alc269vb_toggle_power_output(struct hda_codec *codec, int power_up)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3298) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3299) 	alc_update_coef_idx(codec, 0x04, 1 << 11, power_up ? (1 << 11) : 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3300) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3301) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3302) static void alc269_shutup(struct hda_codec *codec)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3303) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3304) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3305) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3306) 	if (spec->codec_variant == ALC269_TYPE_ALC269VB)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3307) 		alc269vb_toggle_power_output(codec, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3308) 	if (spec->codec_variant == ALC269_TYPE_ALC269VB &&
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3309) 			(alc_get_coef0(codec) & 0x00ff) == 0x018) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3310) 		msleep(150);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3311) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3312) 	alc_shutup_pins(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3313) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3314) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3315) static const struct coef_fw alc282_coefs[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3316) 	WRITE_COEF(0x03, 0x0002), /* Power Down Control */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3317) 	UPDATE_COEF(0x05, 0xff3f, 0x0700), /* FIFO and filter clock */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3318) 	WRITE_COEF(0x07, 0x0200), /* DMIC control */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3319) 	UPDATE_COEF(0x06, 0x00f0, 0), /* Analog clock */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3320) 	UPDATE_COEF(0x08, 0xfffc, 0x0c2c), /* JD */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3321) 	WRITE_COEF(0x0a, 0xcccc), /* JD offset1 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3322) 	WRITE_COEF(0x0b, 0xcccc), /* JD offset2 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3323) 	WRITE_COEF(0x0e, 0x6e00), /* LDO1/2/3, DAC/ADC */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3324) 	UPDATE_COEF(0x0f, 0xf800, 0x1000), /* JD */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3325) 	UPDATE_COEF(0x10, 0xfc00, 0x0c00), /* Capless */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3326) 	WRITE_COEF(0x6f, 0x0), /* Class D test 4 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3327) 	UPDATE_COEF(0x0c, 0xfe00, 0), /* IO power down directly */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3328) 	WRITE_COEF(0x34, 0xa0c0), /* ANC */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3329) 	UPDATE_COEF(0x16, 0x0008, 0), /* AGC MUX */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3330) 	UPDATE_COEF(0x1d, 0x00e0, 0), /* DAC simple content protection */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3331) 	UPDATE_COEF(0x1f, 0x00e0, 0), /* ADC simple content protection */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3332) 	WRITE_COEF(0x21, 0x8804), /* DAC ADC Zero Detection */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3333) 	WRITE_COEF(0x63, 0x2902), /* PLL */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3334) 	WRITE_COEF(0x68, 0xa080), /* capless control 2 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3335) 	WRITE_COEF(0x69, 0x3400), /* capless control 3 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3336) 	WRITE_COEF(0x6a, 0x2f3e), /* capless control 4 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3337) 	WRITE_COEF(0x6b, 0x0), /* capless control 5 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3338) 	UPDATE_COEF(0x6d, 0x0fff, 0x0900), /* class D test 2 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3339) 	WRITE_COEF(0x6e, 0x110a), /* class D test 3 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3340) 	UPDATE_COEF(0x70, 0x00f8, 0x00d8), /* class D test 5 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3341) 	WRITE_COEF(0x71, 0x0014), /* class D test 6 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3342) 	WRITE_COEF(0x72, 0xc2ba), /* classD OCP */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3343) 	UPDATE_COEF(0x77, 0x0f80, 0), /* classD pure DC test */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3344) 	WRITE_COEF(0x6c, 0xfc06), /* Class D amp control */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3345) 	{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3346) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3347) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3348) static void alc282_restore_default_value(struct hda_codec *codec)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3349) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3350) 	alc_process_coef_fw(codec, alc282_coefs);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3351) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3352) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3353) static void alc282_init(struct hda_codec *codec)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3354) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3355) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3356) 	hda_nid_t hp_pin = alc_get_hp_pin(spec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3357) 	bool hp_pin_sense;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3358) 	int coef78;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3359) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3360) 	alc282_restore_default_value(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3361) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3362) 	if (!hp_pin)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3363) 		return;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3364) 	hp_pin_sense = snd_hda_jack_detect(codec, hp_pin);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3365) 	coef78 = alc_read_coef_idx(codec, 0x78);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3366) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3367) 	/* Index 0x78 Direct Drive HP AMP LPM Control 1 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3368) 	/* Headphone capless set to high power mode */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3369) 	alc_write_coef_idx(codec, 0x78, 0x9004);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3370) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3371) 	if (hp_pin_sense)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3372) 		msleep(2);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3373) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3374) 	snd_hda_codec_write(codec, hp_pin, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3375) 			    AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3376) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3377) 	if (hp_pin_sense)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3378) 		msleep(85);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3379) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3380) 	snd_hda_codec_write(codec, hp_pin, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3381) 			    AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3382) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3383) 	if (hp_pin_sense)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3384) 		msleep(100);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3385) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3386) 	/* Headphone capless set to normal mode */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3387) 	alc_write_coef_idx(codec, 0x78, coef78);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3388) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3389) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3390) static void alc282_shutup(struct hda_codec *codec)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3391) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3392) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3393) 	hda_nid_t hp_pin = alc_get_hp_pin(spec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3394) 	bool hp_pin_sense;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3395) 	int coef78;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3396) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3397) 	if (!hp_pin) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3398) 		alc269_shutup(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3399) 		return;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3400) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3401) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3402) 	hp_pin_sense = snd_hda_jack_detect(codec, hp_pin);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3403) 	coef78 = alc_read_coef_idx(codec, 0x78);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3404) 	alc_write_coef_idx(codec, 0x78, 0x9004);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3405) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3406) 	if (hp_pin_sense)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3407) 		msleep(2);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3408) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3409) 	snd_hda_codec_write(codec, hp_pin, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3410) 			    AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3411) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3412) 	if (hp_pin_sense)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3413) 		msleep(85);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3414) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3415) 	if (!spec->no_shutup_pins)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3416) 		snd_hda_codec_write(codec, hp_pin, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3417) 				    AC_VERB_SET_PIN_WIDGET_CONTROL, 0x0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3418) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3419) 	if (hp_pin_sense)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3420) 		msleep(100);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3421) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3422) 	alc_auto_setup_eapd(codec, false);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3423) 	alc_shutup_pins(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3424) 	alc_write_coef_idx(codec, 0x78, coef78);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3425) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3426) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3427) static const struct coef_fw alc283_coefs[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3428) 	WRITE_COEF(0x03, 0x0002), /* Power Down Control */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3429) 	UPDATE_COEF(0x05, 0xff3f, 0x0700), /* FIFO and filter clock */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3430) 	WRITE_COEF(0x07, 0x0200), /* DMIC control */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3431) 	UPDATE_COEF(0x06, 0x00f0, 0), /* Analog clock */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3432) 	UPDATE_COEF(0x08, 0xfffc, 0x0c2c), /* JD */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3433) 	WRITE_COEF(0x0a, 0xcccc), /* JD offset1 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3434) 	WRITE_COEF(0x0b, 0xcccc), /* JD offset2 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3435) 	WRITE_COEF(0x0e, 0x6fc0), /* LDO1/2/3, DAC/ADC */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3436) 	UPDATE_COEF(0x0f, 0xf800, 0x1000), /* JD */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3437) 	UPDATE_COEF(0x10, 0xfc00, 0x0c00), /* Capless */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3438) 	WRITE_COEF(0x3a, 0x0), /* Class D test 4 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3439) 	UPDATE_COEF(0x0c, 0xfe00, 0x0), /* IO power down directly */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3440) 	WRITE_COEF(0x22, 0xa0c0), /* ANC */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3441) 	UPDATE_COEFEX(0x53, 0x01, 0x000f, 0x0008), /* AGC MUX */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3442) 	UPDATE_COEF(0x1d, 0x00e0, 0), /* DAC simple content protection */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3443) 	UPDATE_COEF(0x1f, 0x00e0, 0), /* ADC simple content protection */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3444) 	WRITE_COEF(0x21, 0x8804), /* DAC ADC Zero Detection */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3445) 	WRITE_COEF(0x2e, 0x2902), /* PLL */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3446) 	WRITE_COEF(0x33, 0xa080), /* capless control 2 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3447) 	WRITE_COEF(0x34, 0x3400), /* capless control 3 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3448) 	WRITE_COEF(0x35, 0x2f3e), /* capless control 4 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3449) 	WRITE_COEF(0x36, 0x0), /* capless control 5 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3450) 	UPDATE_COEF(0x38, 0x0fff, 0x0900), /* class D test 2 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3451) 	WRITE_COEF(0x39, 0x110a), /* class D test 3 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3452) 	UPDATE_COEF(0x3b, 0x00f8, 0x00d8), /* class D test 5 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3453) 	WRITE_COEF(0x3c, 0x0014), /* class D test 6 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3454) 	WRITE_COEF(0x3d, 0xc2ba), /* classD OCP */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3455) 	UPDATE_COEF(0x42, 0x0f80, 0x0), /* classD pure DC test */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3456) 	WRITE_COEF(0x49, 0x0), /* test mode */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3457) 	UPDATE_COEF(0x40, 0xf800, 0x9800), /* Class D DC enable */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3458) 	UPDATE_COEF(0x42, 0xf000, 0x2000), /* DC offset */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3459) 	WRITE_COEF(0x37, 0xfc06), /* Class D amp control */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3460) 	UPDATE_COEF(0x1b, 0x8000, 0), /* HP JD control */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3461) 	{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3462) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3463) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3464) static void alc283_restore_default_value(struct hda_codec *codec)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3465) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3466) 	alc_process_coef_fw(codec, alc283_coefs);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3467) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3468) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3469) static void alc283_init(struct hda_codec *codec)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3470) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3471) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3472) 	hda_nid_t hp_pin = alc_get_hp_pin(spec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3473) 	bool hp_pin_sense;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3474) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3475) 	alc283_restore_default_value(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3476) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3477) 	if (!hp_pin)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3478) 		return;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3479) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3480) 	msleep(30);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3481) 	hp_pin_sense = snd_hda_jack_detect(codec, hp_pin);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3482) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3483) 	/* Index 0x43 Direct Drive HP AMP LPM Control 1 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3484) 	/* Headphone capless set to high power mode */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3485) 	alc_write_coef_idx(codec, 0x43, 0x9004);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3486) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3487) 	snd_hda_codec_write(codec, hp_pin, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3488) 			    AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3489) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3490) 	if (hp_pin_sense)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3491) 		msleep(85);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3492) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3493) 	snd_hda_codec_write(codec, hp_pin, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3494) 			    AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3495) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3496) 	if (hp_pin_sense)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3497) 		msleep(85);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3498) 	/* Index 0x46 Combo jack auto switch control 2 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3499) 	/* 3k pull low control for Headset jack. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3500) 	alc_update_coef_idx(codec, 0x46, 3 << 12, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3501) 	/* Headphone capless set to normal mode */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3502) 	alc_write_coef_idx(codec, 0x43, 0x9614);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3503) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3504) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3505) static void alc283_shutup(struct hda_codec *codec)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3506) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3507) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3508) 	hda_nid_t hp_pin = alc_get_hp_pin(spec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3509) 	bool hp_pin_sense;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3510) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3511) 	if (!hp_pin) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3512) 		alc269_shutup(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3513) 		return;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3514) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3515) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3516) 	hp_pin_sense = snd_hda_jack_detect(codec, hp_pin);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3517) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3518) 	alc_write_coef_idx(codec, 0x43, 0x9004);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3519) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3520) 	/*depop hp during suspend*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3521) 	alc_write_coef_idx(codec, 0x06, 0x2100);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3522) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3523) 	snd_hda_codec_write(codec, hp_pin, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3524) 			    AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3525) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3526) 	if (hp_pin_sense)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3527) 		msleep(100);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3528) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3529) 	if (!spec->no_shutup_pins)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3530) 		snd_hda_codec_write(codec, hp_pin, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3531) 				    AC_VERB_SET_PIN_WIDGET_CONTROL, 0x0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3532) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3533) 	alc_update_coef_idx(codec, 0x46, 0, 3 << 12);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3534) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3535) 	if (hp_pin_sense)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3536) 		msleep(100);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3537) 	alc_auto_setup_eapd(codec, false);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3538) 	alc_shutup_pins(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3539) 	alc_write_coef_idx(codec, 0x43, 0x9614);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3540) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3541) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3542) static void alc256_init(struct hda_codec *codec)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3543) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3544) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3545) 	hda_nid_t hp_pin = alc_get_hp_pin(spec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3546) 	bool hp_pin_sense;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3547) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3548) 	if (!hp_pin)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3549) 		hp_pin = 0x21;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3550) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3551) 	msleep(30);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3552) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3553) 	hp_pin_sense = snd_hda_jack_detect(codec, hp_pin);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3554) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3555) 	if (hp_pin_sense)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3556) 		msleep(2);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3557) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3558) 	alc_update_coefex_idx(codec, 0x57, 0x04, 0x0007, 0x1); /* Low power */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3559) 	if (spec->ultra_low_power) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3560) 		alc_update_coef_idx(codec, 0x03, 1<<1, 1<<1);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3561) 		alc_update_coef_idx(codec, 0x08, 3<<2, 3<<2);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3562) 		alc_update_coef_idx(codec, 0x08, 7<<4, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3563) 		alc_update_coef_idx(codec, 0x3b, 1<<15, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3564) 		alc_update_coef_idx(codec, 0x0e, 7<<6, 7<<6);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3565) 		msleep(30);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3566) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3567) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3568) 	snd_hda_codec_write(codec, hp_pin, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3569) 			    AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3570) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3571) 	if (hp_pin_sense || spec->ultra_low_power)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3572) 		msleep(85);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3573) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3574) 	snd_hda_codec_write(codec, hp_pin, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3575) 			    AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3576) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3577) 	if (hp_pin_sense || spec->ultra_low_power)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3578) 		msleep(100);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3579) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3580) 	alc_update_coef_idx(codec, 0x46, 3 << 12, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3581) 	alc_update_coefex_idx(codec, 0x57, 0x04, 0x0007, 0x4); /* Hight power */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3582) 	alc_update_coefex_idx(codec, 0x53, 0x02, 0x8000, 1 << 15); /* Clear bit */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3583) 	alc_update_coefex_idx(codec, 0x53, 0x02, 0x8000, 0 << 15);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3584) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3585) 	 * Expose headphone mic (or possibly Line In on some machines) instead
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3586) 	 * of PC Beep on 1Ah, and disable 1Ah loopback for all outputs. See
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3587) 	 * Documentation/sound/hd-audio/realtek-pc-beep.rst for details of
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3588) 	 * this register.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3589) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3590) 	alc_write_coef_idx(codec, 0x36, 0x5757);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3591) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3592) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3593) static void alc256_shutup(struct hda_codec *codec)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3594) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3595) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3596) 	hda_nid_t hp_pin = alc_get_hp_pin(spec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3597) 	bool hp_pin_sense;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3598) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3599) 	if (!hp_pin)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3600) 		hp_pin = 0x21;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3601) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3602) 	hp_pin_sense = snd_hda_jack_detect(codec, hp_pin);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3603) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3604) 	if (hp_pin_sense)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3605) 		msleep(2);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3606) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3607) 	snd_hda_codec_write(codec, hp_pin, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3608) 			    AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3609) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3610) 	if (hp_pin_sense || spec->ultra_low_power)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3611) 		msleep(85);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3612) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3613) 	/* 3k pull low control for Headset jack. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3614) 	/* NOTE: call this before clearing the pin, otherwise codec stalls */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3615) 	/* If disable 3k pulldown control for alc257, the Mic detection will not work correctly
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3616) 	 * when booting with headset plugged. So skip setting it for the codec alc257
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3617) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3618) 	if (codec->core.vendor_id != 0x10ec0236 &&
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3619) 	    codec->core.vendor_id != 0x10ec0257)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3620) 		alc_update_coef_idx(codec, 0x46, 0, 3 << 12);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3621) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3622) 	if (!spec->no_shutup_pins)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3623) 		snd_hda_codec_write(codec, hp_pin, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3624) 				    AC_VERB_SET_PIN_WIDGET_CONTROL, 0x0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3625) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3626) 	if (hp_pin_sense || spec->ultra_low_power)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3627) 		msleep(100);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3628) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3629) 	alc_auto_setup_eapd(codec, false);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3630) 	alc_shutup_pins(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3631) 	if (spec->ultra_low_power) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3632) 		msleep(50);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3633) 		alc_update_coef_idx(codec, 0x03, 1<<1, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3634) 		alc_update_coef_idx(codec, 0x08, 7<<4, 7<<4);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3635) 		alc_update_coef_idx(codec, 0x08, 3<<2, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3636) 		alc_update_coef_idx(codec, 0x3b, 1<<15, 1<<15);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3637) 		alc_update_coef_idx(codec, 0x0e, 7<<6, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3638) 		msleep(30);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3639) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3640) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3641) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3642) static void alc225_init(struct hda_codec *codec)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3643) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3644) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3645) 	hda_nid_t hp_pin = alc_get_hp_pin(spec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3646) 	bool hp1_pin_sense, hp2_pin_sense;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3647) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3648) 	if (!hp_pin)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3649) 		hp_pin = 0x21;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3650) 	msleep(30);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3651) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3652) 	hp1_pin_sense = snd_hda_jack_detect(codec, hp_pin);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3653) 	hp2_pin_sense = snd_hda_jack_detect(codec, 0x16);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3654) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3655) 	if (hp1_pin_sense || hp2_pin_sense)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3656) 		msleep(2);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3657) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3658) 	alc_update_coefex_idx(codec, 0x57, 0x04, 0x0007, 0x1); /* Low power */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3659) 	if (spec->ultra_low_power) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3660) 		alc_update_coef_idx(codec, 0x08, 0x0f << 2, 3<<2);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3661) 		alc_update_coef_idx(codec, 0x0e, 7<<6, 7<<6);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3662) 		alc_update_coef_idx(codec, 0x33, 1<<11, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3663) 		msleep(30);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3664) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3665) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3666) 	if (hp1_pin_sense || spec->ultra_low_power)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3667) 		snd_hda_codec_write(codec, hp_pin, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3668) 			    AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3669) 	if (hp2_pin_sense)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3670) 		snd_hda_codec_write(codec, 0x16, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3671) 			    AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3672) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3673) 	if (hp1_pin_sense || hp2_pin_sense || spec->ultra_low_power)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3674) 		msleep(85);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3675) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3676) 	if (hp1_pin_sense || spec->ultra_low_power)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3677) 		snd_hda_codec_write(codec, hp_pin, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3678) 			    AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3679) 	if (hp2_pin_sense)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3680) 		snd_hda_codec_write(codec, 0x16, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3681) 			    AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3682) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3683) 	if (hp1_pin_sense || hp2_pin_sense || spec->ultra_low_power)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3684) 		msleep(100);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3685) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3686) 	alc_update_coef_idx(codec, 0x4a, 3 << 10, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3687) 	alc_update_coefex_idx(codec, 0x57, 0x04, 0x0007, 0x4); /* Hight power */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3688) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3689) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3690) static void alc225_shutup(struct hda_codec *codec)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3691) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3692) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3693) 	hda_nid_t hp_pin = alc_get_hp_pin(spec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3694) 	bool hp1_pin_sense, hp2_pin_sense;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3695) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3696) 	if (!hp_pin)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3697) 		hp_pin = 0x21;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3698) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3699) 	alc_disable_headset_jack_key(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3700) 	/* 3k pull low control for Headset jack. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3701) 	alc_update_coef_idx(codec, 0x4a, 0, 3 << 10);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3702) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3703) 	hp1_pin_sense = snd_hda_jack_detect(codec, hp_pin);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3704) 	hp2_pin_sense = snd_hda_jack_detect(codec, 0x16);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3705) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3706) 	if (hp1_pin_sense || hp2_pin_sense)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3707) 		msleep(2);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3708) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3709) 	if (hp1_pin_sense || spec->ultra_low_power)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3710) 		snd_hda_codec_write(codec, hp_pin, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3711) 			    AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3712) 	if (hp2_pin_sense)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3713) 		snd_hda_codec_write(codec, 0x16, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3714) 			    AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3715) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3716) 	if (hp1_pin_sense || hp2_pin_sense || spec->ultra_low_power)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3717) 		msleep(85);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3718) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3719) 	if (hp1_pin_sense || spec->ultra_low_power)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3720) 		snd_hda_codec_write(codec, hp_pin, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3721) 			    AC_VERB_SET_PIN_WIDGET_CONTROL, 0x0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3722) 	if (hp2_pin_sense)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3723) 		snd_hda_codec_write(codec, 0x16, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3724) 			    AC_VERB_SET_PIN_WIDGET_CONTROL, 0x0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3725) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3726) 	if (hp1_pin_sense || hp2_pin_sense || spec->ultra_low_power)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3727) 		msleep(100);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3728) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3729) 	alc_auto_setup_eapd(codec, false);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3730) 	alc_shutup_pins(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3731) 	if (spec->ultra_low_power) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3732) 		msleep(50);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3733) 		alc_update_coef_idx(codec, 0x08, 0x0f << 2, 0x0c << 2);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3734) 		alc_update_coef_idx(codec, 0x0e, 7<<6, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3735) 		alc_update_coef_idx(codec, 0x33, 1<<11, 1<<11);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3736) 		alc_update_coef_idx(codec, 0x4a, 3<<4, 2<<4);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3737) 		msleep(30);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3738) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3739) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3740) 	alc_update_coef_idx(codec, 0x4a, 3 << 10, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3741) 	alc_enable_headset_jack_key(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3742) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3743) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3744) static void alc_default_init(struct hda_codec *codec)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3745) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3746) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3747) 	hda_nid_t hp_pin = alc_get_hp_pin(spec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3748) 	bool hp_pin_sense;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3749) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3750) 	if (!hp_pin)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3751) 		return;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3752) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3753) 	msleep(30);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3754) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3755) 	hp_pin_sense = snd_hda_jack_detect(codec, hp_pin);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3756) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3757) 	if (hp_pin_sense)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3758) 		msleep(2);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3759) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3760) 	snd_hda_codec_write(codec, hp_pin, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3761) 			    AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3762) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3763) 	if (hp_pin_sense)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3764) 		msleep(85);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3765) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3766) 	snd_hda_codec_write(codec, hp_pin, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3767) 			    AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3768) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3769) 	if (hp_pin_sense)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3770) 		msleep(100);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3771) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3772) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3773) static void alc_default_shutup(struct hda_codec *codec)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3774) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3775) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3776) 	hda_nid_t hp_pin = alc_get_hp_pin(spec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3777) 	bool hp_pin_sense;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3778) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3779) 	if (!hp_pin) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3780) 		alc269_shutup(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3781) 		return;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3782) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3783) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3784) 	hp_pin_sense = snd_hda_jack_detect(codec, hp_pin);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3785) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3786) 	if (hp_pin_sense)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3787) 		msleep(2);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3788) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3789) 	snd_hda_codec_write(codec, hp_pin, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3790) 			    AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3791) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3792) 	if (hp_pin_sense)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3793) 		msleep(85);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3794) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3795) 	if (!spec->no_shutup_pins)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3796) 		snd_hda_codec_write(codec, hp_pin, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3797) 				    AC_VERB_SET_PIN_WIDGET_CONTROL, 0x0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3798) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3799) 	if (hp_pin_sense)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3800) 		msleep(100);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3801) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3802) 	alc_auto_setup_eapd(codec, false);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3803) 	alc_shutup_pins(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3804) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3805) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3806) static void alc294_hp_init(struct hda_codec *codec)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3807) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3808) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3809) 	hda_nid_t hp_pin = alc_get_hp_pin(spec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3810) 	int i, val;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3811) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3812) 	if (!hp_pin)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3813) 		return;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3814) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3815) 	snd_hda_codec_write(codec, hp_pin, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3816) 			    AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3817) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3818) 	msleep(100);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3819) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3820) 	if (!spec->no_shutup_pins)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3821) 		snd_hda_codec_write(codec, hp_pin, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3822) 				    AC_VERB_SET_PIN_WIDGET_CONTROL, 0x0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3823) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3824) 	alc_update_coef_idx(codec, 0x6f, 0x000f, 0);/* Set HP depop to manual mode */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3825) 	alc_update_coefex_idx(codec, 0x58, 0x00, 0x8000, 0x8000); /* HP depop procedure start */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3826) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3827) 	/* Wait for depop procedure finish  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3828) 	val = alc_read_coefex_idx(codec, 0x58, 0x01);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3829) 	for (i = 0; i < 20 && val & 0x0080; i++) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3830) 		msleep(50);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3831) 		val = alc_read_coefex_idx(codec, 0x58, 0x01);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3832) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3833) 	/* Set HP depop to auto mode */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3834) 	alc_update_coef_idx(codec, 0x6f, 0x000f, 0x000b);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3835) 	msleep(50);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3836) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3837) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3838) static void alc294_init(struct hda_codec *codec)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3839) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3840) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3841) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3842) 	/* required only at boot or S4 resume time */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3843) 	if (!spec->done_hp_init ||
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3844) 	    codec->core.dev.power.power_state.event == PM_EVENT_RESTORE) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3845) 		alc294_hp_init(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3846) 		spec->done_hp_init = true;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3847) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3848) 	alc_default_init(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3849) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3850) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3851) static void alc5505_coef_set(struct hda_codec *codec, unsigned int index_reg,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3852) 			     unsigned int val)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3853) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3854) 	snd_hda_codec_write(codec, 0x51, 0, AC_VERB_SET_COEF_INDEX, index_reg >> 1);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3855) 	snd_hda_codec_write(codec, 0x51, 0, AC_VERB_SET_PROC_COEF, val & 0xffff); /* LSB */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3856) 	snd_hda_codec_write(codec, 0x51, 0, AC_VERB_SET_PROC_COEF, val >> 16); /* MSB */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3857) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3858) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3859) static int alc5505_coef_get(struct hda_codec *codec, unsigned int index_reg)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3860) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3861) 	unsigned int val;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3862) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3863) 	snd_hda_codec_write(codec, 0x51, 0, AC_VERB_SET_COEF_INDEX, index_reg >> 1);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3864) 	val = snd_hda_codec_read(codec, 0x51, 0, AC_VERB_GET_PROC_COEF, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3865) 		& 0xffff;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3866) 	val |= snd_hda_codec_read(codec, 0x51, 0, AC_VERB_GET_PROC_COEF, 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3867) 		<< 16;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3868) 	return val;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3869) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3870) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3871) static void alc5505_dsp_halt(struct hda_codec *codec)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3872) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3873) 	unsigned int val;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3874) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3875) 	alc5505_coef_set(codec, 0x3000, 0x000c); /* DSP CPU stop */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3876) 	alc5505_coef_set(codec, 0x880c, 0x0008); /* DDR enter self refresh */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3877) 	alc5505_coef_set(codec, 0x61c0, 0x11110080); /* Clock control for PLL and CPU */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3878) 	alc5505_coef_set(codec, 0x6230, 0xfc0d4011); /* Disable Input OP */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3879) 	alc5505_coef_set(codec, 0x61b4, 0x040a2b03); /* Stop PLL2 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3880) 	alc5505_coef_set(codec, 0x61b0, 0x00005b17); /* Stop PLL1 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3881) 	alc5505_coef_set(codec, 0x61b8, 0x04133303); /* Stop PLL3 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3882) 	val = alc5505_coef_get(codec, 0x6220);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3883) 	alc5505_coef_set(codec, 0x6220, (val | 0x3000)); /* switch Ringbuffer clock to DBUS clock */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3884) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3885) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3886) static void alc5505_dsp_back_from_halt(struct hda_codec *codec)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3887) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3888) 	alc5505_coef_set(codec, 0x61b8, 0x04133302);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3889) 	alc5505_coef_set(codec, 0x61b0, 0x00005b16);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3890) 	alc5505_coef_set(codec, 0x61b4, 0x040a2b02);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3891) 	alc5505_coef_set(codec, 0x6230, 0xf80d4011);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3892) 	alc5505_coef_set(codec, 0x6220, 0x2002010f);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3893) 	alc5505_coef_set(codec, 0x880c, 0x00000004);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3894) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3895) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3896) static void alc5505_dsp_init(struct hda_codec *codec)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3897) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3898) 	unsigned int val;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3899) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3900) 	alc5505_dsp_halt(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3901) 	alc5505_dsp_back_from_halt(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3902) 	alc5505_coef_set(codec, 0x61b0, 0x5b14); /* PLL1 control */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3903) 	alc5505_coef_set(codec, 0x61b0, 0x5b16);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3904) 	alc5505_coef_set(codec, 0x61b4, 0x04132b00); /* PLL2 control */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3905) 	alc5505_coef_set(codec, 0x61b4, 0x04132b02);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3906) 	alc5505_coef_set(codec, 0x61b8, 0x041f3300); /* PLL3 control*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3907) 	alc5505_coef_set(codec, 0x61b8, 0x041f3302);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3908) 	snd_hda_codec_write(codec, 0x51, 0, AC_VERB_SET_CODEC_RESET, 0); /* Function reset */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3909) 	alc5505_coef_set(codec, 0x61b8, 0x041b3302);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3910) 	alc5505_coef_set(codec, 0x61b8, 0x04173302);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3911) 	alc5505_coef_set(codec, 0x61b8, 0x04163302);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3912) 	alc5505_coef_set(codec, 0x8800, 0x348b328b); /* DRAM control */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3913) 	alc5505_coef_set(codec, 0x8808, 0x00020022); /* DRAM control */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3914) 	alc5505_coef_set(codec, 0x8818, 0x00000400); /* DRAM control */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3915) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3916) 	val = alc5505_coef_get(codec, 0x6200) >> 16; /* Read revision ID */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3917) 	if (val <= 3)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3918) 		alc5505_coef_set(codec, 0x6220, 0x2002010f); /* I/O PAD Configuration */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3919) 	else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3920) 		alc5505_coef_set(codec, 0x6220, 0x6002018f);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3921) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3922) 	alc5505_coef_set(codec, 0x61ac, 0x055525f0); /**/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3923) 	alc5505_coef_set(codec, 0x61c0, 0x12230080); /* Clock control */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3924) 	alc5505_coef_set(codec, 0x61b4, 0x040e2b02); /* PLL2 control */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3925) 	alc5505_coef_set(codec, 0x61bc, 0x010234f8); /* OSC Control */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3926) 	alc5505_coef_set(codec, 0x880c, 0x00000004); /* DRAM Function control */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3927) 	alc5505_coef_set(codec, 0x880c, 0x00000003);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3928) 	alc5505_coef_set(codec, 0x880c, 0x00000010);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3929) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3930) #ifdef HALT_REALTEK_ALC5505
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3931) 	alc5505_dsp_halt(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3932) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3933) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3934) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3935) #ifdef HALT_REALTEK_ALC5505
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3936) #define alc5505_dsp_suspend(codec)	do { } while (0) /* NOP */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3937) #define alc5505_dsp_resume(codec)	do { } while (0) /* NOP */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3938) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3939) #define alc5505_dsp_suspend(codec)	alc5505_dsp_halt(codec)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3940) #define alc5505_dsp_resume(codec)	alc5505_dsp_back_from_halt(codec)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3941) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3942) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3943) #ifdef CONFIG_PM
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3944) static int alc269_suspend(struct hda_codec *codec)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3945) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3946) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3947) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3948) 	if (spec->has_alc5505_dsp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3949) 		alc5505_dsp_suspend(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3950) 	return alc_suspend(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3951) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3952) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3953) static int alc269_resume(struct hda_codec *codec)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3954) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3955) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3956) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3957) 	if (spec->codec_variant == ALC269_TYPE_ALC269VB)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3958) 		alc269vb_toggle_power_output(codec, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3959) 	if (spec->codec_variant == ALC269_TYPE_ALC269VB &&
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3960) 			(alc_get_coef0(codec) & 0x00ff) == 0x018) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3961) 		msleep(150);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3962) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3963) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3964) 	codec->patch_ops.init(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3965) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3966) 	if (spec->codec_variant == ALC269_TYPE_ALC269VB)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3967) 		alc269vb_toggle_power_output(codec, 1);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3968) 	if (spec->codec_variant == ALC269_TYPE_ALC269VB &&
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3969) 			(alc_get_coef0(codec) & 0x00ff) == 0x017) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3970) 		msleep(200);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3971) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3972) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3973) 	snd_hda_regmap_sync(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3974) 	hda_call_check_power_status(codec, 0x01);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3975) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3976) 	/* on some machine, the BIOS will clear the codec gpio data when enter
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3977) 	 * suspend, and won't restore the data after resume, so we restore it
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3978) 	 * in the driver.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3979) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3980) 	if (spec->gpio_data)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3981) 		alc_write_gpio_data(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3982) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3983) 	if (spec->has_alc5505_dsp)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3984) 		alc5505_dsp_resume(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3985) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3986) 	return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3987) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3988) #endif /* CONFIG_PM */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3989) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3990) static void alc269_fixup_pincfg_no_hp_to_lineout(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3991) 						 const struct hda_fixup *fix, int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3992) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3993) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3994) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3995) 	if (action == HDA_FIXUP_ACT_PRE_PROBE)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3996) 		spec->parse_flags = HDA_PINCFG_NO_HP_FIXUP;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3997) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3998) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3999) static void alc269_fixup_pincfg_U7x7_headset_mic(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4000) 						 const struct hda_fixup *fix,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4001) 						 int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4002) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4003) 	unsigned int cfg_headphone = snd_hda_codec_get_pincfg(codec, 0x21);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4004) 	unsigned int cfg_headset_mic = snd_hda_codec_get_pincfg(codec, 0x19);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4005) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4006) 	if (cfg_headphone && cfg_headset_mic == 0x411111f0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4007) 		snd_hda_codec_set_pincfg(codec, 0x19,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4008) 			(cfg_headphone & ~AC_DEFCFG_DEVICE) |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4009) 			(AC_JACK_MIC_IN << AC_DEFCFG_DEVICE_SHIFT));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4010) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4011) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4012) static void alc269_fixup_hweq(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4013) 			       const struct hda_fixup *fix, int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4014) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4015) 	if (action == HDA_FIXUP_ACT_INIT)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4016) 		alc_update_coef_idx(codec, 0x1e, 0, 0x80);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4017) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4018) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4019) static void alc269_fixup_headset_mic(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4020) 				       const struct hda_fixup *fix, int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4021) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4022) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4023) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4024) 	if (action == HDA_FIXUP_ACT_PRE_PROBE)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4025) 		spec->parse_flags |= HDA_PINCFG_HEADSET_MIC;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4026) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4027) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4028) static void alc271_fixup_dmic(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4029) 			      const struct hda_fixup *fix, int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4030) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4031) 	static const struct hda_verb verbs[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4032) 		{0x20, AC_VERB_SET_COEF_INDEX, 0x0d},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4033) 		{0x20, AC_VERB_SET_PROC_COEF, 0x4000},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4034) 		{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4035) 	};
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4036) 	unsigned int cfg;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4037) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4038) 	if (strcmp(codec->core.chip_name, "ALC271X") &&
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4039) 	    strcmp(codec->core.chip_name, "ALC269VB"))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4040) 		return;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4041) 	cfg = snd_hda_codec_get_pincfg(codec, 0x12);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4042) 	if (get_defcfg_connect(cfg) == AC_JACK_PORT_FIXED)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4043) 		snd_hda_sequence_write(codec, verbs);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4044) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4045) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4046) /* Fix the speaker amp after resume, etc */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4047) static void alc269vb_fixup_aspire_e1_coef(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4048) 					  const struct hda_fixup *fix,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4049) 					  int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4050) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4051) 	if (action == HDA_FIXUP_ACT_INIT)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4052) 		alc_update_coef_idx(codec, 0x0d, 0x6000, 0x6000);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4053) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4054) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4055) static void alc269_fixup_pcm_44k(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4056) 				 const struct hda_fixup *fix, int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4057) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4058) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4059) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4060) 	if (action != HDA_FIXUP_ACT_PROBE)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4061) 		return;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4062) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4063) 	/* Due to a hardware problem on Lenovo Ideadpad, we need to
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4064) 	 * fix the sample rate of analog I/O to 44.1kHz
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4065) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4066) 	spec->gen.stream_analog_playback = &alc269_44k_pcm_analog_playback;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4067) 	spec->gen.stream_analog_capture = &alc269_44k_pcm_analog_capture;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4068) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4069) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4070) static void alc269_fixup_stereo_dmic(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4071) 				     const struct hda_fixup *fix, int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4072) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4073) 	/* The digital-mic unit sends PDM (differential signal) instead of
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4074) 	 * the standard PCM, thus you can't record a valid mono stream as is.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4075) 	 * Below is a workaround specific to ALC269 to control the dmic
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4076) 	 * signal source as mono.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4077) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4078) 	if (action == HDA_FIXUP_ACT_INIT)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4079) 		alc_update_coef_idx(codec, 0x07, 0, 0x80);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4080) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4081) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4082) static void alc269_quanta_automute(struct hda_codec *codec)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4083) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4084) 	snd_hda_gen_update_outputs(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4085) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4086) 	alc_write_coef_idx(codec, 0x0c, 0x680);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4087) 	alc_write_coef_idx(codec, 0x0c, 0x480);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4088) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4089) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4090) static void alc269_fixup_quanta_mute(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4091) 				     const struct hda_fixup *fix, int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4092) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4093) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4094) 	if (action != HDA_FIXUP_ACT_PROBE)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4095) 		return;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4096) 	spec->gen.automute_hook = alc269_quanta_automute;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4097) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4098) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4099) static void alc269_x101_hp_automute_hook(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4100) 					 struct hda_jack_callback *jack)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4101) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4102) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4103) 	int vref;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4104) 	msleep(200);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4105) 	snd_hda_gen_hp_automute(codec, jack);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4106) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4107) 	vref = spec->gen.hp_jack_present ? PIN_VREF80 : 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4108) 	msleep(100);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4109) 	snd_hda_codec_write(codec, 0x18, 0, AC_VERB_SET_PIN_WIDGET_CONTROL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4110) 			    vref);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4111) 	msleep(500);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4112) 	snd_hda_codec_write(codec, 0x18, 0, AC_VERB_SET_PIN_WIDGET_CONTROL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4113) 			    vref);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4114) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4115) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4116) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4117)  * Magic sequence to make Huawei Matebook X right speaker working (bko#197801)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4118)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4119) struct hda_alc298_mbxinit {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4120) 	unsigned char value_0x23;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4121) 	unsigned char value_0x25;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4122) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4123) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4124) static void alc298_huawei_mbx_stereo_seq(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4125) 					 const struct hda_alc298_mbxinit *initval,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4126) 					 bool first)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4127) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4128) 	snd_hda_codec_write(codec, 0x06, 0, AC_VERB_SET_DIGI_CONVERT_3, 0x0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4129) 	alc_write_coef_idx(codec, 0x26, 0xb000);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4130) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4131) 	if (first)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4132) 		snd_hda_codec_write(codec, 0x21, 0, AC_VERB_GET_PIN_SENSE, 0x0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4133) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4134) 	snd_hda_codec_write(codec, 0x6, 0, AC_VERB_SET_DIGI_CONVERT_3, 0x80);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4135) 	alc_write_coef_idx(codec, 0x26, 0xf000);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4136) 	alc_write_coef_idx(codec, 0x23, initval->value_0x23);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4137) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4138) 	if (initval->value_0x23 != 0x1e)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4139) 		alc_write_coef_idx(codec, 0x25, initval->value_0x25);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4140) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4141) 	snd_hda_codec_write(codec, 0x20, 0, AC_VERB_SET_COEF_INDEX, 0x26);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4142) 	snd_hda_codec_write(codec, 0x20, 0, AC_VERB_SET_PROC_COEF, 0xb010);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4143) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4144) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4145) static void alc298_fixup_huawei_mbx_stereo(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4146) 					   const struct hda_fixup *fix,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4147) 					   int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4148) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4149) 	/* Initialization magic */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4150) 	static const struct hda_alc298_mbxinit dac_init[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4151) 		{0x0c, 0x00}, {0x0d, 0x00}, {0x0e, 0x00}, {0x0f, 0x00},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4152) 		{0x10, 0x00}, {0x1a, 0x40}, {0x1b, 0x82}, {0x1c, 0x00},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4153) 		{0x1d, 0x00}, {0x1e, 0x00}, {0x1f, 0x00},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4154) 		{0x20, 0xc2}, {0x21, 0xc8}, {0x22, 0x26}, {0x23, 0x24},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4155) 		{0x27, 0xff}, {0x28, 0xff}, {0x29, 0xff}, {0x2a, 0x8f},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4156) 		{0x2b, 0x02}, {0x2c, 0x48}, {0x2d, 0x34}, {0x2e, 0x00},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4157) 		{0x2f, 0x00},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4158) 		{0x30, 0x00}, {0x31, 0x00}, {0x32, 0x00}, {0x33, 0x00},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4159) 		{0x34, 0x00}, {0x35, 0x01}, {0x36, 0x93}, {0x37, 0x0c},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4160) 		{0x38, 0x00}, {0x39, 0x00}, {0x3a, 0xf8}, {0x38, 0x80},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4161) 		{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4162) 	};
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4163) 	const struct hda_alc298_mbxinit *seq;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4164) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4165) 	if (action != HDA_FIXUP_ACT_INIT)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4166) 		return;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4167) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4168) 	/* Start */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4169) 	snd_hda_codec_write(codec, 0x06, 0, AC_VERB_SET_DIGI_CONVERT_3, 0x00);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4170) 	snd_hda_codec_write(codec, 0x06, 0, AC_VERB_SET_DIGI_CONVERT_3, 0x80);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4171) 	alc_write_coef_idx(codec, 0x26, 0xf000);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4172) 	alc_write_coef_idx(codec, 0x22, 0x31);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4173) 	alc_write_coef_idx(codec, 0x23, 0x0b);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4174) 	alc_write_coef_idx(codec, 0x25, 0x00);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4175) 	snd_hda_codec_write(codec, 0x20, 0, AC_VERB_SET_COEF_INDEX, 0x26);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4176) 	snd_hda_codec_write(codec, 0x20, 0, AC_VERB_SET_PROC_COEF, 0xb010);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4177) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4178) 	for (seq = dac_init; seq->value_0x23; seq++)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4179) 		alc298_huawei_mbx_stereo_seq(codec, seq, seq == dac_init);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4180) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4181) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4182) static void alc269_fixup_x101_headset_mic(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4183) 				     const struct hda_fixup *fix, int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4184) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4185) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4186) 	if (action == HDA_FIXUP_ACT_PRE_PROBE) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4187) 		spec->parse_flags |= HDA_PINCFG_HEADSET_MIC;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4188) 		spec->gen.hp_automute_hook = alc269_x101_hp_automute_hook;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4189) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4190) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4191) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4192) static void alc_update_vref_led(struct hda_codec *codec, hda_nid_t pin,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4193) 				bool polarity, bool on)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4194) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4195) 	unsigned int pinval;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4196) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4197) 	if (!pin)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4198) 		return;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4199) 	if (polarity)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4200) 		on = !on;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4201) 	pinval = snd_hda_codec_get_pin_target(codec, pin);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4202) 	pinval &= ~AC_PINCTL_VREFEN;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4203) 	pinval |= on ? AC_PINCTL_VREF_80 : AC_PINCTL_VREF_HIZ;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4204) 	/* temporarily power up/down for setting VREF */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4205) 	snd_hda_power_up_pm(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4206) 	snd_hda_set_pin_ctl_cache(codec, pin, pinval);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4207) 	snd_hda_power_down_pm(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4208) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4209) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4210) /* update mute-LED according to the speaker mute state via mic VREF pin */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4211) static int vref_mute_led_set(struct led_classdev *led_cdev,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4212) 			     enum led_brightness brightness)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4213) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4214) 	struct hda_codec *codec = dev_to_hda_codec(led_cdev->dev->parent);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4215) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4216) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4217) 	alc_update_vref_led(codec, spec->mute_led_nid,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4218) 			    spec->mute_led_polarity, brightness);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4219) 	return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4220) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4221) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4222) /* Make sure the led works even in runtime suspend */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4223) static unsigned int led_power_filter(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4224) 						  hda_nid_t nid,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4225) 						  unsigned int power_state)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4226) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4227) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4228) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4229) 	if (power_state != AC_PWRST_D3 || nid == 0 ||
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4230) 	    (nid != spec->mute_led_nid && nid != spec->cap_mute_led_nid))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4231) 		return power_state;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4232) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4233) 	/* Set pin ctl again, it might have just been set to 0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4234) 	snd_hda_set_pin_ctl(codec, nid,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4235) 			    snd_hda_codec_get_pin_target(codec, nid));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4236) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4237) 	return snd_hda_gen_path_power_filter(codec, nid, power_state);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4238) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4239) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4240) static void alc269_fixup_hp_mute_led(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4241) 				     const struct hda_fixup *fix, int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4242) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4243) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4244) 	const struct dmi_device *dev = NULL;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4245) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4246) 	if (action != HDA_FIXUP_ACT_PRE_PROBE)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4247) 		return;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4248) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4249) 	while ((dev = dmi_find_device(DMI_DEV_TYPE_OEM_STRING, NULL, dev))) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4250) 		int pol, pin;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4251) 		if (sscanf(dev->name, "HP_Mute_LED_%d_%x", &pol, &pin) != 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4252) 			continue;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4253) 		if (pin < 0x0a || pin >= 0x10)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4254) 			break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4255) 		spec->mute_led_polarity = pol;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4256) 		spec->mute_led_nid = pin - 0x0a + 0x18;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4257) 		snd_hda_gen_add_mute_led_cdev(codec, vref_mute_led_set);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4258) 		codec->power_filter = led_power_filter;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4259) 		codec_dbg(codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4260) 			  "Detected mute LED for %x:%d\n", spec->mute_led_nid,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4261) 			   spec->mute_led_polarity);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4262) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4263) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4264) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4265) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4266) static void alc269_fixup_hp_mute_led_micx(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4267) 					  const struct hda_fixup *fix,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4268) 					  int action, hda_nid_t pin)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4269) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4270) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4271) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4272) 	if (action == HDA_FIXUP_ACT_PRE_PROBE) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4273) 		spec->mute_led_polarity = 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4274) 		spec->mute_led_nid = pin;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4275) 		snd_hda_gen_add_mute_led_cdev(codec, vref_mute_led_set);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4276) 		codec->power_filter = led_power_filter;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4277) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4278) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4279) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4280) static void alc269_fixup_hp_mute_led_mic1(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4281) 				const struct hda_fixup *fix, int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4282) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4283) 	alc269_fixup_hp_mute_led_micx(codec, fix, action, 0x18);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4284) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4285) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4286) static void alc269_fixup_hp_mute_led_mic2(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4287) 				const struct hda_fixup *fix, int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4288) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4289) 	alc269_fixup_hp_mute_led_micx(codec, fix, action, 0x19);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4290) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4291) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4292) static void alc269_fixup_hp_mute_led_mic3(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4293) 				const struct hda_fixup *fix, int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4294) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4295) 	alc269_fixup_hp_mute_led_micx(codec, fix, action, 0x1b);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4296) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4297) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4298) /* update LED status via GPIO */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4299) static void alc_update_gpio_led(struct hda_codec *codec, unsigned int mask,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4300) 				int polarity, bool enabled)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4301) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4302) 	if (polarity)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4303) 		enabled = !enabled;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4304) 	alc_update_gpio_data(codec, mask, !enabled); /* muted -> LED on */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4305) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4306) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4307) /* turn on/off mute LED via GPIO per vmaster hook */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4308) static int gpio_mute_led_set(struct led_classdev *led_cdev,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4309) 			     enum led_brightness brightness)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4310) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4311) 	struct hda_codec *codec = dev_to_hda_codec(led_cdev->dev->parent);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4312) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4313) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4314) 	alc_update_gpio_led(codec, spec->gpio_mute_led_mask,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4315) 			    spec->mute_led_polarity, !brightness);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4316) 	return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4317) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4318) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4319) /* turn on/off mic-mute LED via GPIO per capture hook */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4320) static int micmute_led_set(struct led_classdev *led_cdev,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4321) 			   enum led_brightness brightness)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4322) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4323) 	struct hda_codec *codec = dev_to_hda_codec(led_cdev->dev->parent);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4324) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4325) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4326) 	alc_update_gpio_led(codec, spec->gpio_mic_led_mask,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4327) 			    spec->micmute_led_polarity, !brightness);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4328) 	return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4329) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4330) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4331) /* setup mute and mic-mute GPIO bits, add hooks appropriately */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4332) static void alc_fixup_hp_gpio_led(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4333) 				  int action,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4334) 				  unsigned int mute_mask,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4335) 				  unsigned int micmute_mask)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4336) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4337) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4338) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4339) 	alc_fixup_gpio(codec, action, mute_mask | micmute_mask);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4340) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4341) 	if (action != HDA_FIXUP_ACT_PRE_PROBE)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4342) 		return;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4343) 	if (mute_mask) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4344) 		spec->gpio_mute_led_mask = mute_mask;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4345) 		snd_hda_gen_add_mute_led_cdev(codec, gpio_mute_led_set);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4346) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4347) 	if (micmute_mask) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4348) 		spec->gpio_mic_led_mask = micmute_mask;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4349) 		snd_hda_gen_add_micmute_led_cdev(codec, micmute_led_set);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4350) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4351) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4352) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4353) static void alc236_fixup_hp_gpio_led(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4354) 				const struct hda_fixup *fix, int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4355) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4356) 	alc_fixup_hp_gpio_led(codec, action, 0x02, 0x01);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4357) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4358) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4359) static void alc269_fixup_hp_gpio_led(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4360) 				const struct hda_fixup *fix, int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4361) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4362) 	alc_fixup_hp_gpio_led(codec, action, 0x08, 0x10);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4363) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4364) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4365) static void alc285_fixup_hp_gpio_led(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4366) 				const struct hda_fixup *fix, int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4367) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4368) 	alc_fixup_hp_gpio_led(codec, action, 0x04, 0x01);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4369) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4370) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4371) static void alc286_fixup_hp_gpio_led(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4372) 				const struct hda_fixup *fix, int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4373) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4374) 	alc_fixup_hp_gpio_led(codec, action, 0x02, 0x20);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4375) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4376) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4377) static void alc287_fixup_hp_gpio_led(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4378) 				const struct hda_fixup *fix, int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4379) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4380) 	alc_fixup_hp_gpio_led(codec, action, 0x10, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4381) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4382) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4383) static void alc245_fixup_hp_gpio_led(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4384) 				const struct hda_fixup *fix, int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4385) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4386) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4387) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4388) 	if (action == HDA_FIXUP_ACT_PRE_PROBE)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4389) 		spec->micmute_led_polarity = 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4390) 	alc_fixup_hp_gpio_led(codec, action, 0, 0x04);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4391) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4392) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4393) /* turn on/off mic-mute LED per capture hook via VREF change */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4394) static int vref_micmute_led_set(struct led_classdev *led_cdev,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4395) 				enum led_brightness brightness)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4396) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4397) 	struct hda_codec *codec = dev_to_hda_codec(led_cdev->dev->parent);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4398) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4399) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4400) 	alc_update_vref_led(codec, spec->cap_mute_led_nid,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4401) 			    spec->micmute_led_polarity, brightness);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4402) 	return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4403) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4404) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4405) static void alc269_fixup_hp_gpio_mic1_led(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4406) 				const struct hda_fixup *fix, int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4407) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4408) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4409) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4410) 	alc_fixup_hp_gpio_led(codec, action, 0x08, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4411) 	if (action == HDA_FIXUP_ACT_PRE_PROBE) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4412) 		/* Like hp_gpio_mic1_led, but also needs GPIO4 low to
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4413) 		 * enable headphone amp
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4414) 		 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4415) 		spec->gpio_mask |= 0x10;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4416) 		spec->gpio_dir |= 0x10;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4417) 		spec->cap_mute_led_nid = 0x18;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4418) 		snd_hda_gen_add_micmute_led_cdev(codec, vref_micmute_led_set);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4419) 		codec->power_filter = led_power_filter;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4420) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4421) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4422) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4423) static void alc280_fixup_hp_gpio4(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4424) 				   const struct hda_fixup *fix, int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4425) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4426) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4427) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4428) 	alc_fixup_hp_gpio_led(codec, action, 0x08, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4429) 	if (action == HDA_FIXUP_ACT_PRE_PROBE) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4430) 		spec->cap_mute_led_nid = 0x18;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4431) 		snd_hda_gen_add_micmute_led_cdev(codec, vref_micmute_led_set);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4432) 		codec->power_filter = led_power_filter;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4433) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4434) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4435) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4436) /* HP Spectre x360 14 model needs a unique workaround for enabling the amp;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4437)  * it needs to toggle the GPIO0 once on and off at each time (bko#210633)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4438)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4439) static void alc245_fixup_hp_x360_amp(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4440) 				     const struct hda_fixup *fix, int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4441) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4442) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4443) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4444) 	switch (action) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4445) 	case HDA_FIXUP_ACT_PRE_PROBE:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4446) 		spec->gpio_mask |= 0x01;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4447) 		spec->gpio_dir |= 0x01;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4448) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4449) 	case HDA_FIXUP_ACT_INIT:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4450) 		/* need to toggle GPIO to enable the amp */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4451) 		alc_update_gpio_data(codec, 0x01, true);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4452) 		msleep(100);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4453) 		alc_update_gpio_data(codec, 0x01, false);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4454) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4455) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4456) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4457) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4458) /* toggle GPIO2 at each time stream is started; we use PREPARE state instead */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4459) static void alc274_hp_envy_pcm_hook(struct hda_pcm_stream *hinfo,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4460) 				    struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4461) 				    struct snd_pcm_substream *substream,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4462) 				    int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4463) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4464) 	switch (action) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4465) 	case HDA_GEN_PCM_ACT_PREPARE:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4466) 		alc_update_gpio_data(codec, 0x04, true);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4467) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4468) 	case HDA_GEN_PCM_ACT_CLEANUP:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4469) 		alc_update_gpio_data(codec, 0x04, false);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4470) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4471) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4472) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4473) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4474) static void alc274_fixup_hp_envy_gpio(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4475) 				      const struct hda_fixup *fix,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4476) 				      int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4477) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4478) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4479) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4480) 	if (action == HDA_FIXUP_ACT_PROBE) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4481) 		spec->gpio_mask |= 0x04;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4482) 		spec->gpio_dir |= 0x04;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4483) 		spec->gen.pcm_playback_hook = alc274_hp_envy_pcm_hook;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4484) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4485) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4486) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4487) static void alc_update_coef_led(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4488) 				struct alc_coef_led *led,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4489) 				bool polarity, bool on)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4490) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4491) 	if (polarity)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4492) 		on = !on;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4493) 	/* temporarily power up/down for setting COEF bit */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4494) 	alc_update_coef_idx(codec, led->idx, led->mask,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4495) 			    on ? led->on : led->off);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4496) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4497) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4498) /* update mute-LED according to the speaker mute state via COEF bit */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4499) static int coef_mute_led_set(struct led_classdev *led_cdev,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4500) 			     enum led_brightness brightness)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4501) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4502) 	struct hda_codec *codec = dev_to_hda_codec(led_cdev->dev->parent);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4503) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4504) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4505) 	alc_update_coef_led(codec, &spec->mute_led_coef,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4506) 			    spec->mute_led_polarity, brightness);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4507) 	return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4508) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4509) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4510) static void alc285_fixup_hp_mute_led_coefbit(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4511) 					  const struct hda_fixup *fix,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4512) 					  int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4513) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4514) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4515) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4516) 	if (action == HDA_FIXUP_ACT_PRE_PROBE) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4517) 		spec->mute_led_polarity = 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4518) 		spec->mute_led_coef.idx = 0x0b;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4519) 		spec->mute_led_coef.mask = 1 << 3;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4520) 		spec->mute_led_coef.on = 1 << 3;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4521) 		spec->mute_led_coef.off = 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4522) 		snd_hda_gen_add_mute_led_cdev(codec, coef_mute_led_set);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4523) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4524) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4525) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4526) static void alc236_fixup_hp_mute_led_coefbit(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4527) 					  const struct hda_fixup *fix,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4528) 					  int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4529) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4530) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4531) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4532) 	if (action == HDA_FIXUP_ACT_PRE_PROBE) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4533) 		spec->mute_led_polarity = 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4534) 		spec->mute_led_coef.idx = 0x34;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4535) 		spec->mute_led_coef.mask = 1 << 5;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4536) 		spec->mute_led_coef.on = 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4537) 		spec->mute_led_coef.off = 1 << 5;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4538) 		snd_hda_gen_add_mute_led_cdev(codec, coef_mute_led_set);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4539) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4540) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4541) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4542) /* turn on/off mic-mute LED per capture hook by coef bit */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4543) static int coef_micmute_led_set(struct led_classdev *led_cdev,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4544) 				enum led_brightness brightness)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4545) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4546) 	struct hda_codec *codec = dev_to_hda_codec(led_cdev->dev->parent);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4547) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4548) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4549) 	alc_update_coef_led(codec, &spec->mic_led_coef,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4550) 			    spec->micmute_led_polarity, brightness);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4551) 	return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4552) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4553) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4554) static void alc285_fixup_hp_coef_micmute_led(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4555) 				const struct hda_fixup *fix, int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4556) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4557) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4558) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4559) 	if (action == HDA_FIXUP_ACT_PRE_PROBE) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4560) 		spec->mic_led_coef.idx = 0x19;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4561) 		spec->mic_led_coef.mask = 1 << 13;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4562) 		spec->mic_led_coef.on = 1 << 13;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4563) 		spec->mic_led_coef.off = 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4564) 		snd_hda_gen_add_micmute_led_cdev(codec, coef_micmute_led_set);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4565) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4566) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4567) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4568) static void alc236_fixup_hp_coef_micmute_led(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4569) 				const struct hda_fixup *fix, int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4570) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4571) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4572) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4573) 	if (action == HDA_FIXUP_ACT_PRE_PROBE) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4574) 		spec->mic_led_coef.idx = 0x35;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4575) 		spec->mic_led_coef.mask = 3 << 2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4576) 		spec->mic_led_coef.on = 2 << 2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4577) 		spec->mic_led_coef.off = 1 << 2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4578) 		snd_hda_gen_add_micmute_led_cdev(codec, coef_micmute_led_set);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4579) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4580) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4581) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4582) static void alc285_fixup_hp_mute_led(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4583) 				const struct hda_fixup *fix, int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4584) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4585) 	alc285_fixup_hp_mute_led_coefbit(codec, fix, action);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4586) 	alc285_fixup_hp_coef_micmute_led(codec, fix, action);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4587) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4588) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4589) static void alc236_fixup_hp_mute_led(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4590) 				const struct hda_fixup *fix, int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4591) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4592) 	alc236_fixup_hp_mute_led_coefbit(codec, fix, action);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4593) 	alc236_fixup_hp_coef_micmute_led(codec, fix, action);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4594) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4595) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4596) static void alc236_fixup_hp_micmute_led_vref(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4597) 				const struct hda_fixup *fix, int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4598) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4599) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4600) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4601) 	if (action == HDA_FIXUP_ACT_PRE_PROBE) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4602) 		spec->cap_mute_led_nid = 0x1a;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4603) 		snd_hda_gen_add_micmute_led_cdev(codec, vref_micmute_led_set);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4604) 		codec->power_filter = led_power_filter;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4605) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4606) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4607) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4608) static void alc236_fixup_hp_mute_led_micmute_vref(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4609) 				const struct hda_fixup *fix, int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4610) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4611) 	alc236_fixup_hp_mute_led_coefbit(codec, fix, action);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4612) 	alc236_fixup_hp_micmute_led_vref(codec, fix, action);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4613) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4614) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4615) #if IS_REACHABLE(CONFIG_INPUT)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4616) static void gpio2_mic_hotkey_event(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4617) 				   struct hda_jack_callback *event)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4618) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4619) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4620) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4621) 	/* GPIO2 just toggles on a keypress/keyrelease cycle. Therefore
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4622) 	   send both key on and key off event for every interrupt. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4623) 	input_report_key(spec->kb_dev, spec->alc_mute_keycode_map[ALC_KEY_MICMUTE_INDEX], 1);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4624) 	input_sync(spec->kb_dev);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4625) 	input_report_key(spec->kb_dev, spec->alc_mute_keycode_map[ALC_KEY_MICMUTE_INDEX], 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4626) 	input_sync(spec->kb_dev);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4627) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4628) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4629) static int alc_register_micmute_input_device(struct hda_codec *codec)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4630) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4631) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4632) 	int i;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4633) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4634) 	spec->kb_dev = input_allocate_device();
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4635) 	if (!spec->kb_dev) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4636) 		codec_err(codec, "Out of memory (input_allocate_device)\n");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4637) 		return -ENOMEM;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4638) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4639) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4640) 	spec->alc_mute_keycode_map[ALC_KEY_MICMUTE_INDEX] = KEY_MICMUTE;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4641) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4642) 	spec->kb_dev->name = "Microphone Mute Button";
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4643) 	spec->kb_dev->evbit[0] = BIT_MASK(EV_KEY);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4644) 	spec->kb_dev->keycodesize = sizeof(spec->alc_mute_keycode_map[0]);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4645) 	spec->kb_dev->keycodemax = ARRAY_SIZE(spec->alc_mute_keycode_map);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4646) 	spec->kb_dev->keycode = spec->alc_mute_keycode_map;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4647) 	for (i = 0; i < ARRAY_SIZE(spec->alc_mute_keycode_map); i++)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4648) 		set_bit(spec->alc_mute_keycode_map[i], spec->kb_dev->keybit);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4649) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4650) 	if (input_register_device(spec->kb_dev)) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4651) 		codec_err(codec, "input_register_device failed\n");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4652) 		input_free_device(spec->kb_dev);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4653) 		spec->kb_dev = NULL;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4654) 		return -ENOMEM;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4655) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4656) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4657) 	return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4658) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4659) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4660) /* GPIO1 = set according to SKU external amp
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4661)  * GPIO2 = mic mute hotkey
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4662)  * GPIO3 = mute LED
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4663)  * GPIO4 = mic mute LED
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4664)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4665) static void alc280_fixup_hp_gpio2_mic_hotkey(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4666) 					     const struct hda_fixup *fix, int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4667) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4668) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4669) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4670) 	alc_fixup_hp_gpio_led(codec, action, 0x08, 0x10);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4671) 	if (action == HDA_FIXUP_ACT_PRE_PROBE) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4672) 		spec->init_amp = ALC_INIT_DEFAULT;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4673) 		if (alc_register_micmute_input_device(codec) != 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4674) 			return;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4675) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4676) 		spec->gpio_mask |= 0x06;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4677) 		spec->gpio_dir |= 0x02;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4678) 		spec->gpio_data |= 0x02;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4679) 		snd_hda_codec_write_cache(codec, codec->core.afg, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4680) 					  AC_VERB_SET_GPIO_UNSOLICITED_RSP_MASK, 0x04);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4681) 		snd_hda_jack_detect_enable_callback(codec, codec->core.afg,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4682) 						    gpio2_mic_hotkey_event);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4683) 		return;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4684) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4685) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4686) 	if (!spec->kb_dev)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4687) 		return;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4688) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4689) 	switch (action) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4690) 	case HDA_FIXUP_ACT_FREE:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4691) 		input_unregister_device(spec->kb_dev);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4692) 		spec->kb_dev = NULL;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4693) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4694) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4695) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4696) /* Line2 = mic mute hotkey
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4697)  * GPIO2 = mic mute LED
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4698)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4699) static void alc233_fixup_lenovo_line2_mic_hotkey(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4700) 					     const struct hda_fixup *fix, int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4701) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4702) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4703) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4704) 	alc_fixup_hp_gpio_led(codec, action, 0, 0x04);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4705) 	if (action == HDA_FIXUP_ACT_PRE_PROBE) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4706) 		spec->init_amp = ALC_INIT_DEFAULT;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4707) 		if (alc_register_micmute_input_device(codec) != 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4708) 			return;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4709) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4710) 		snd_hda_jack_detect_enable_callback(codec, 0x1b,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4711) 						    gpio2_mic_hotkey_event);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4712) 		return;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4713) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4714) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4715) 	if (!spec->kb_dev)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4716) 		return;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4717) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4718) 	switch (action) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4719) 	case HDA_FIXUP_ACT_FREE:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4720) 		input_unregister_device(spec->kb_dev);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4721) 		spec->kb_dev = NULL;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4722) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4723) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4724) #else /* INPUT */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4725) #define alc280_fixup_hp_gpio2_mic_hotkey	NULL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4726) #define alc233_fixup_lenovo_line2_mic_hotkey	NULL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4727) #endif /* INPUT */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4728) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4729) static void alc269_fixup_hp_line1_mic1_led(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4730) 				const struct hda_fixup *fix, int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4731) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4732) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4733) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4734) 	alc269_fixup_hp_mute_led_micx(codec, fix, action, 0x1a);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4735) 	if (action == HDA_FIXUP_ACT_PRE_PROBE) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4736) 		spec->cap_mute_led_nid = 0x18;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4737) 		snd_hda_gen_add_micmute_led_cdev(codec, vref_micmute_led_set);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4738) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4739) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4740) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4741) static const struct coef_fw alc225_pre_hsmode[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4742) 	UPDATE_COEF(0x4a, 1<<8, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4743) 	UPDATE_COEFEX(0x57, 0x05, 1<<14, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4744) 	UPDATE_COEF(0x63, 3<<14, 3<<14),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4745) 	UPDATE_COEF(0x4a, 3<<4, 2<<4),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4746) 	UPDATE_COEF(0x4a, 3<<10, 3<<10),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4747) 	UPDATE_COEF(0x45, 0x3f<<10, 0x34<<10),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4748) 	UPDATE_COEF(0x4a, 3<<10, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4749) 	{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4750) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4751) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4752) static void alc_headset_mode_unplugged(struct hda_codec *codec)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4753) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4754) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4755) 	static const struct coef_fw coef0255[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4756) 		WRITE_COEF(0x1b, 0x0c0b), /* LDO and MISC control */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4757) 		WRITE_COEF(0x45, 0xd089), /* UAJ function set to menual mode */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4758) 		UPDATE_COEFEX(0x57, 0x05, 1<<14, 0), /* Direct Drive HP Amp control(Set to verb control)*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4759) 		WRITE_COEF(0x06, 0x6104), /* Set MIC2 Vref gate with HP */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4760) 		WRITE_COEFEX(0x57, 0x03, 0x8aa6), /* Direct Drive HP Amp control */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4761) 		{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4762) 	};
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4763) 	static const struct coef_fw coef0256[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4764) 		WRITE_COEF(0x1b, 0x0c4b), /* LDO and MISC control */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4765) 		WRITE_COEF(0x45, 0xd089), /* UAJ function set to menual mode */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4766) 		WRITE_COEF(0x06, 0x6104), /* Set MIC2 Vref gate with HP */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4767) 		WRITE_COEFEX(0x57, 0x03, 0x09a3), /* Direct Drive HP Amp control */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4768) 		UPDATE_COEFEX(0x57, 0x05, 1<<14, 0), /* Direct Drive HP Amp control(Set to verb control)*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4769) 		{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4770) 	};
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4771) 	static const struct coef_fw coef0233[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4772) 		WRITE_COEF(0x1b, 0x0c0b),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4773) 		WRITE_COEF(0x45, 0xc429),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4774) 		UPDATE_COEF(0x35, 0x4000, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4775) 		WRITE_COEF(0x06, 0x2104),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4776) 		WRITE_COEF(0x1a, 0x0001),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4777) 		WRITE_COEF(0x26, 0x0004),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4778) 		WRITE_COEF(0x32, 0x42a3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4779) 		{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4780) 	};
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4781) 	static const struct coef_fw coef0288[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4782) 		UPDATE_COEF(0x4f, 0xfcc0, 0xc400),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4783) 		UPDATE_COEF(0x50, 0x2000, 0x2000),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4784) 		UPDATE_COEF(0x56, 0x0006, 0x0006),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4785) 		UPDATE_COEF(0x66, 0x0008, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4786) 		UPDATE_COEF(0x67, 0x2000, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4787) 		{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4788) 	};
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4789) 	static const struct coef_fw coef0298[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4790) 		UPDATE_COEF(0x19, 0x1300, 0x0300),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4791) 		{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4792) 	};
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4793) 	static const struct coef_fw coef0292[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4794) 		WRITE_COEF(0x76, 0x000e),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4795) 		WRITE_COEF(0x6c, 0x2400),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4796) 		WRITE_COEF(0x18, 0x7308),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4797) 		WRITE_COEF(0x6b, 0xc429),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4798) 		{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4799) 	};
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4800) 	static const struct coef_fw coef0293[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4801) 		UPDATE_COEF(0x10, 7<<8, 6<<8), /* SET Line1 JD to 0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4802) 		UPDATE_COEFEX(0x57, 0x05, 1<<15|1<<13, 0x0), /* SET charge pump by verb */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4803) 		UPDATE_COEFEX(0x57, 0x03, 1<<10, 1<<10), /* SET EN_OSW to 1 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4804) 		UPDATE_COEF(0x1a, 1<<3, 1<<3), /* Combo JD gating with LINE1-VREFO */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4805) 		WRITE_COEF(0x45, 0xc429), /* Set to TRS type */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4806) 		UPDATE_COEF(0x4a, 0x000f, 0x000e), /* Combo Jack auto detect */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4807) 		{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4808) 	};
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4809) 	static const struct coef_fw coef0668[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4810) 		WRITE_COEF(0x15, 0x0d40),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4811) 		WRITE_COEF(0xb7, 0x802b),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4812) 		{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4813) 	};
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4814) 	static const struct coef_fw coef0225[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4815) 		UPDATE_COEF(0x63, 3<<14, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4816) 		{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4817) 	};
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4818) 	static const struct coef_fw coef0274[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4819) 		UPDATE_COEF(0x4a, 0x0100, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4820) 		UPDATE_COEFEX(0x57, 0x05, 0x4000, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4821) 		UPDATE_COEF(0x6b, 0xf000, 0x5000),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4822) 		UPDATE_COEF(0x4a, 0x0010, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4823) 		UPDATE_COEF(0x4a, 0x0c00, 0x0c00),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4824) 		WRITE_COEF(0x45, 0x5289),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4825) 		UPDATE_COEF(0x4a, 0x0c00, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4826) 		{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4827) 	};
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4828) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4829) 	if (spec->no_internal_mic_pin) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4830) 		alc_update_coef_idx(codec, 0x45, 0xf<<12 | 1<<10, 5<<12);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4831) 		return;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4832) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4833) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4834) 	switch (codec->core.vendor_id) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4835) 	case 0x10ec0255:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4836) 		alc_process_coef_fw(codec, coef0255);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4837) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4838) 	case 0x10ec0230:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4839) 	case 0x10ec0236:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4840) 	case 0x10ec0256:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4841) 		alc_process_coef_fw(codec, coef0256);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4842) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4843) 	case 0x10ec0234:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4844) 	case 0x10ec0274:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4845) 	case 0x10ec0294:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4846) 		alc_process_coef_fw(codec, coef0274);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4847) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4848) 	case 0x10ec0233:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4849) 	case 0x10ec0283:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4850) 		alc_process_coef_fw(codec, coef0233);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4851) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4852) 	case 0x10ec0286:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4853) 	case 0x10ec0288:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4854) 		alc_process_coef_fw(codec, coef0288);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4855) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4856) 	case 0x10ec0298:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4857) 		alc_process_coef_fw(codec, coef0298);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4858) 		alc_process_coef_fw(codec, coef0288);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4859) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4860) 	case 0x10ec0292:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4861) 		alc_process_coef_fw(codec, coef0292);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4862) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4863) 	case 0x10ec0293:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4864) 		alc_process_coef_fw(codec, coef0293);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4865) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4866) 	case 0x10ec0668:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4867) 		alc_process_coef_fw(codec, coef0668);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4868) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4869) 	case 0x10ec0215:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4870) 	case 0x10ec0225:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4871) 	case 0x10ec0285:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4872) 	case 0x10ec0295:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4873) 	case 0x10ec0289:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4874) 	case 0x10ec0299:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4875) 		alc_process_coef_fw(codec, alc225_pre_hsmode);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4876) 		alc_process_coef_fw(codec, coef0225);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4877) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4878) 	case 0x10ec0867:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4879) 		alc_update_coefex_idx(codec, 0x57, 0x5, 1<<14, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4880) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4881) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4882) 	codec_dbg(codec, "Headset jack set to unplugged mode.\n");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4883) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4884) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4885) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4886) static void alc_headset_mode_mic_in(struct hda_codec *codec, hda_nid_t hp_pin,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4887) 				    hda_nid_t mic_pin)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4888) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4889) 	static const struct coef_fw coef0255[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4890) 		WRITE_COEFEX(0x57, 0x03, 0x8aa6),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4891) 		WRITE_COEF(0x06, 0x6100), /* Set MIC2 Vref gate to normal */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4892) 		{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4893) 	};
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4894) 	static const struct coef_fw coef0256[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4895) 		UPDATE_COEFEX(0x57, 0x05, 1<<14, 1<<14), /* Direct Drive HP Amp control(Set to verb control)*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4896) 		WRITE_COEFEX(0x57, 0x03, 0x09a3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4897) 		WRITE_COEF(0x06, 0x6100), /* Set MIC2 Vref gate to normal */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4898) 		{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4899) 	};
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4900) 	static const struct coef_fw coef0233[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4901) 		UPDATE_COEF(0x35, 0, 1<<14),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4902) 		WRITE_COEF(0x06, 0x2100),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4903) 		WRITE_COEF(0x1a, 0x0021),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4904) 		WRITE_COEF(0x26, 0x008c),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4905) 		{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4906) 	};
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4907) 	static const struct coef_fw coef0288[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4908) 		UPDATE_COEF(0x4f, 0x00c0, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4909) 		UPDATE_COEF(0x50, 0x2000, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4910) 		UPDATE_COEF(0x56, 0x0006, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4911) 		UPDATE_COEF(0x4f, 0xfcc0, 0xc400),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4912) 		UPDATE_COEF(0x66, 0x0008, 0x0008),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4913) 		UPDATE_COEF(0x67, 0x2000, 0x2000),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4914) 		{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4915) 	};
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4916) 	static const struct coef_fw coef0292[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4917) 		WRITE_COEF(0x19, 0xa208),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4918) 		WRITE_COEF(0x2e, 0xacf0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4919) 		{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4920) 	};
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4921) 	static const struct coef_fw coef0293[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4922) 		UPDATE_COEFEX(0x57, 0x05, 0, 1<<15|1<<13), /* SET charge pump by verb */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4923) 		UPDATE_COEFEX(0x57, 0x03, 1<<10, 0), /* SET EN_OSW to 0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4924) 		UPDATE_COEF(0x1a, 1<<3, 0), /* Combo JD gating without LINE1-VREFO */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4925) 		{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4926) 	};
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4927) 	static const struct coef_fw coef0688[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4928) 		WRITE_COEF(0xb7, 0x802b),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4929) 		WRITE_COEF(0xb5, 0x1040),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4930) 		UPDATE_COEF(0xc3, 0, 1<<12),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4931) 		{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4932) 	};
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4933) 	static const struct coef_fw coef0225[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4934) 		UPDATE_COEFEX(0x57, 0x05, 1<<14, 1<<14),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4935) 		UPDATE_COEF(0x4a, 3<<4, 2<<4),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4936) 		UPDATE_COEF(0x63, 3<<14, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4937) 		{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4938) 	};
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4939) 	static const struct coef_fw coef0274[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4940) 		UPDATE_COEFEX(0x57, 0x05, 0x4000, 0x4000),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4941) 		UPDATE_COEF(0x4a, 0x0010, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4942) 		UPDATE_COEF(0x6b, 0xf000, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4943) 		{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4944) 	};
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4945) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4946) 	switch (codec->core.vendor_id) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4947) 	case 0x10ec0255:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4948) 		alc_write_coef_idx(codec, 0x45, 0xc489);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4949) 		snd_hda_set_pin_ctl_cache(codec, hp_pin, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4950) 		alc_process_coef_fw(codec, coef0255);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4951) 		snd_hda_set_pin_ctl_cache(codec, mic_pin, PIN_VREF50);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4952) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4953) 	case 0x10ec0230:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4954) 	case 0x10ec0236:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4955) 	case 0x10ec0256:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4956) 		alc_write_coef_idx(codec, 0x45, 0xc489);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4957) 		snd_hda_set_pin_ctl_cache(codec, hp_pin, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4958) 		alc_process_coef_fw(codec, coef0256);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4959) 		snd_hda_set_pin_ctl_cache(codec, mic_pin, PIN_VREF50);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4960) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4961) 	case 0x10ec0234:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4962) 	case 0x10ec0274:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4963) 	case 0x10ec0294:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4964) 		alc_write_coef_idx(codec, 0x45, 0x4689);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4965) 		snd_hda_set_pin_ctl_cache(codec, hp_pin, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4966) 		alc_process_coef_fw(codec, coef0274);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4967) 		snd_hda_set_pin_ctl_cache(codec, mic_pin, PIN_VREF50);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4968) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4969) 	case 0x10ec0233:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4970) 	case 0x10ec0283:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4971) 		alc_write_coef_idx(codec, 0x45, 0xc429);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4972) 		snd_hda_set_pin_ctl_cache(codec, hp_pin, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4973) 		alc_process_coef_fw(codec, coef0233);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4974) 		snd_hda_set_pin_ctl_cache(codec, mic_pin, PIN_VREF50);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4975) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4976) 	case 0x10ec0286:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4977) 	case 0x10ec0288:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4978) 	case 0x10ec0298:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4979) 		snd_hda_set_pin_ctl_cache(codec, hp_pin, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4980) 		alc_process_coef_fw(codec, coef0288);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4981) 		snd_hda_set_pin_ctl_cache(codec, mic_pin, PIN_VREF50);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4982) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4983) 	case 0x10ec0292:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4984) 		snd_hda_set_pin_ctl_cache(codec, hp_pin, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4985) 		alc_process_coef_fw(codec, coef0292);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4986) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4987) 	case 0x10ec0293:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4988) 		/* Set to TRS mode */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4989) 		alc_write_coef_idx(codec, 0x45, 0xc429);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4990) 		snd_hda_set_pin_ctl_cache(codec, hp_pin, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4991) 		alc_process_coef_fw(codec, coef0293);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4992) 		snd_hda_set_pin_ctl_cache(codec, mic_pin, PIN_VREF50);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4993) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4994) 	case 0x10ec0867:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4995) 		alc_update_coefex_idx(codec, 0x57, 0x5, 0, 1<<14);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4996) 		fallthrough;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4997) 	case 0x10ec0221:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4998) 	case 0x10ec0662:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4999) 		snd_hda_set_pin_ctl_cache(codec, hp_pin, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5000) 		snd_hda_set_pin_ctl_cache(codec, mic_pin, PIN_VREF50);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5001) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5002) 	case 0x10ec0668:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5003) 		alc_write_coef_idx(codec, 0x11, 0x0001);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5004) 		snd_hda_set_pin_ctl_cache(codec, hp_pin, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5005) 		alc_process_coef_fw(codec, coef0688);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5006) 		snd_hda_set_pin_ctl_cache(codec, mic_pin, PIN_VREF50);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5007) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5008) 	case 0x10ec0215:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5009) 	case 0x10ec0225:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5010) 	case 0x10ec0285:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5011) 	case 0x10ec0295:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5012) 	case 0x10ec0289:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5013) 	case 0x10ec0299:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5014) 		alc_process_coef_fw(codec, alc225_pre_hsmode);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5015) 		alc_update_coef_idx(codec, 0x45, 0x3f<<10, 0x31<<10);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5016) 		snd_hda_set_pin_ctl_cache(codec, hp_pin, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5017) 		alc_process_coef_fw(codec, coef0225);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5018) 		snd_hda_set_pin_ctl_cache(codec, mic_pin, PIN_VREF50);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5019) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5020) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5021) 	codec_dbg(codec, "Headset jack set to mic-in mode.\n");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5022) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5023) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5024) static void alc_headset_mode_default(struct hda_codec *codec)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5025) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5026) 	static const struct coef_fw coef0225[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5027) 		UPDATE_COEF(0x45, 0x3f<<10, 0x30<<10),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5028) 		UPDATE_COEF(0x45, 0x3f<<10, 0x31<<10),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5029) 		UPDATE_COEF(0x49, 3<<8, 0<<8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5030) 		UPDATE_COEF(0x4a, 3<<4, 3<<4),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5031) 		UPDATE_COEF(0x63, 3<<14, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5032) 		UPDATE_COEF(0x67, 0xf000, 0x3000),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5033) 		{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5034) 	};
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5035) 	static const struct coef_fw coef0255[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5036) 		WRITE_COEF(0x45, 0xc089),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5037) 		WRITE_COEF(0x45, 0xc489),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5038) 		WRITE_COEFEX(0x57, 0x03, 0x8ea6),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5039) 		WRITE_COEF(0x49, 0x0049),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5040) 		{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5041) 	};
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5042) 	static const struct coef_fw coef0256[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5043) 		WRITE_COEF(0x45, 0xc489),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5044) 		WRITE_COEFEX(0x57, 0x03, 0x0da3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5045) 		WRITE_COEF(0x49, 0x0049),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5046) 		UPDATE_COEFEX(0x57, 0x05, 1<<14, 0), /* Direct Drive HP Amp control(Set to verb control)*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5047) 		WRITE_COEF(0x06, 0x6100),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5048) 		{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5049) 	};
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5050) 	static const struct coef_fw coef0233[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5051) 		WRITE_COEF(0x06, 0x2100),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5052) 		WRITE_COEF(0x32, 0x4ea3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5053) 		{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5054) 	};
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5055) 	static const struct coef_fw coef0288[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5056) 		UPDATE_COEF(0x4f, 0xfcc0, 0xc400), /* Set to TRS type */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5057) 		UPDATE_COEF(0x50, 0x2000, 0x2000),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5058) 		UPDATE_COEF(0x56, 0x0006, 0x0006),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5059) 		UPDATE_COEF(0x66, 0x0008, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5060) 		UPDATE_COEF(0x67, 0x2000, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5061) 		{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5062) 	};
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5063) 	static const struct coef_fw coef0292[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5064) 		WRITE_COEF(0x76, 0x000e),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5065) 		WRITE_COEF(0x6c, 0x2400),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5066) 		WRITE_COEF(0x6b, 0xc429),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5067) 		WRITE_COEF(0x18, 0x7308),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5068) 		{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5069) 	};
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5070) 	static const struct coef_fw coef0293[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5071) 		UPDATE_COEF(0x4a, 0x000f, 0x000e), /* Combo Jack auto detect */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5072) 		WRITE_COEF(0x45, 0xC429), /* Set to TRS type */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5073) 		UPDATE_COEF(0x1a, 1<<3, 0), /* Combo JD gating without LINE1-VREFO */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5074) 		{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5075) 	};
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5076) 	static const struct coef_fw coef0688[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5077) 		WRITE_COEF(0x11, 0x0041),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5078) 		WRITE_COEF(0x15, 0x0d40),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5079) 		WRITE_COEF(0xb7, 0x802b),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5080) 		{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5081) 	};
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5082) 	static const struct coef_fw coef0274[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5083) 		WRITE_COEF(0x45, 0x4289),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5084) 		UPDATE_COEF(0x4a, 0x0010, 0x0010),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5085) 		UPDATE_COEF(0x6b, 0x0f00, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5086) 		UPDATE_COEF(0x49, 0x0300, 0x0300),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5087) 		{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5088) 	};
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5089) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5090) 	switch (codec->core.vendor_id) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5091) 	case 0x10ec0215:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5092) 	case 0x10ec0225:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5093) 	case 0x10ec0285:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5094) 	case 0x10ec0295:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5095) 	case 0x10ec0289:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5096) 	case 0x10ec0299:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5097) 		alc_process_coef_fw(codec, alc225_pre_hsmode);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5098) 		alc_process_coef_fw(codec, coef0225);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5099) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5100) 	case 0x10ec0255:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5101) 		alc_process_coef_fw(codec, coef0255);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5102) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5103) 	case 0x10ec0230:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5104) 	case 0x10ec0236:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5105) 	case 0x10ec0256:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5106) 		alc_write_coef_idx(codec, 0x1b, 0x0e4b);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5107) 		alc_write_coef_idx(codec, 0x45, 0xc089);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5108) 		msleep(50);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5109) 		alc_process_coef_fw(codec, coef0256);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5110) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5111) 	case 0x10ec0234:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5112) 	case 0x10ec0274:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5113) 	case 0x10ec0294:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5114) 		alc_process_coef_fw(codec, coef0274);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5115) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5116) 	case 0x10ec0233:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5117) 	case 0x10ec0283:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5118) 		alc_process_coef_fw(codec, coef0233);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5119) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5120) 	case 0x10ec0286:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5121) 	case 0x10ec0288:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5122) 	case 0x10ec0298:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5123) 		alc_process_coef_fw(codec, coef0288);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5124) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5125) 	case 0x10ec0292:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5126) 		alc_process_coef_fw(codec, coef0292);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5127) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5128) 	case 0x10ec0293:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5129) 		alc_process_coef_fw(codec, coef0293);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5130) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5131) 	case 0x10ec0668:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5132) 		alc_process_coef_fw(codec, coef0688);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5133) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5134) 	case 0x10ec0867:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5135) 		alc_update_coefex_idx(codec, 0x57, 0x5, 1<<14, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5136) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5137) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5138) 	codec_dbg(codec, "Headset jack set to headphone (default) mode.\n");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5139) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5140) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5141) /* Iphone type */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5142) static void alc_headset_mode_ctia(struct hda_codec *codec)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5143) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5144) 	int val;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5145) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5146) 	static const struct coef_fw coef0255[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5147) 		WRITE_COEF(0x45, 0xd489), /* Set to CTIA type */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5148) 		WRITE_COEF(0x1b, 0x0c2b),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5149) 		WRITE_COEFEX(0x57, 0x03, 0x8ea6),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5150) 		{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5151) 	};
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5152) 	static const struct coef_fw coef0256[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5153) 		WRITE_COEF(0x45, 0xd489), /* Set to CTIA type */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5154) 		WRITE_COEF(0x1b, 0x0e6b),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5155) 		{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5156) 	};
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5157) 	static const struct coef_fw coef0233[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5158) 		WRITE_COEF(0x45, 0xd429),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5159) 		WRITE_COEF(0x1b, 0x0c2b),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5160) 		WRITE_COEF(0x32, 0x4ea3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5161) 		{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5162) 	};
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5163) 	static const struct coef_fw coef0288[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5164) 		UPDATE_COEF(0x50, 0x2000, 0x2000),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5165) 		UPDATE_COEF(0x56, 0x0006, 0x0006),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5166) 		UPDATE_COEF(0x66, 0x0008, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5167) 		UPDATE_COEF(0x67, 0x2000, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5168) 		{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5169) 	};
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5170) 	static const struct coef_fw coef0292[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5171) 		WRITE_COEF(0x6b, 0xd429),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5172) 		WRITE_COEF(0x76, 0x0008),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5173) 		WRITE_COEF(0x18, 0x7388),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5174) 		{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5175) 	};
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5176) 	static const struct coef_fw coef0293[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5177) 		WRITE_COEF(0x45, 0xd429), /* Set to ctia type */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5178) 		UPDATE_COEF(0x10, 7<<8, 7<<8), /* SET Line1 JD to 1 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5179) 		{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5180) 	};
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5181) 	static const struct coef_fw coef0688[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5182) 		WRITE_COEF(0x11, 0x0001),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5183) 		WRITE_COEF(0x15, 0x0d60),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5184) 		WRITE_COEF(0xc3, 0x0000),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5185) 		{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5186) 	};
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5187) 	static const struct coef_fw coef0225_1[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5188) 		UPDATE_COEF(0x45, 0x3f<<10, 0x35<<10),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5189) 		UPDATE_COEF(0x63, 3<<14, 2<<14),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5190) 		{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5191) 	};
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5192) 	static const struct coef_fw coef0225_2[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5193) 		UPDATE_COEF(0x45, 0x3f<<10, 0x35<<10),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5194) 		UPDATE_COEF(0x63, 3<<14, 1<<14),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5195) 		{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5196) 	};
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5197) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5198) 	switch (codec->core.vendor_id) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5199) 	case 0x10ec0255:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5200) 		alc_process_coef_fw(codec, coef0255);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5201) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5202) 	case 0x10ec0230:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5203) 	case 0x10ec0236:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5204) 	case 0x10ec0256:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5205) 		alc_process_coef_fw(codec, coef0256);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5206) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5207) 	case 0x10ec0234:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5208) 	case 0x10ec0274:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5209) 	case 0x10ec0294:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5210) 		alc_write_coef_idx(codec, 0x45, 0xd689);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5211) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5212) 	case 0x10ec0233:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5213) 	case 0x10ec0283:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5214) 		alc_process_coef_fw(codec, coef0233);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5215) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5216) 	case 0x10ec0298:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5217) 		val = alc_read_coef_idx(codec, 0x50);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5218) 		if (val & (1 << 12)) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5219) 			alc_update_coef_idx(codec, 0x8e, 0x0070, 0x0020);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5220) 			alc_update_coef_idx(codec, 0x4f, 0xfcc0, 0xd400);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5221) 			msleep(300);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5222) 		} else {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5223) 			alc_update_coef_idx(codec, 0x8e, 0x0070, 0x0010);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5224) 			alc_update_coef_idx(codec, 0x4f, 0xfcc0, 0xd400);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5225) 			msleep(300);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5226) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5227) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5228) 	case 0x10ec0286:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5229) 	case 0x10ec0288:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5230) 		alc_update_coef_idx(codec, 0x4f, 0xfcc0, 0xd400);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5231) 		msleep(300);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5232) 		alc_process_coef_fw(codec, coef0288);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5233) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5234) 	case 0x10ec0292:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5235) 		alc_process_coef_fw(codec, coef0292);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5236) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5237) 	case 0x10ec0293:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5238) 		alc_process_coef_fw(codec, coef0293);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5239) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5240) 	case 0x10ec0668:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5241) 		alc_process_coef_fw(codec, coef0688);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5242) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5243) 	case 0x10ec0215:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5244) 	case 0x10ec0225:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5245) 	case 0x10ec0285:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5246) 	case 0x10ec0295:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5247) 	case 0x10ec0289:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5248) 	case 0x10ec0299:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5249) 		val = alc_read_coef_idx(codec, 0x45);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5250) 		if (val & (1 << 9))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5251) 			alc_process_coef_fw(codec, coef0225_2);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5252) 		else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5253) 			alc_process_coef_fw(codec, coef0225_1);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5254) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5255) 	case 0x10ec0867:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5256) 		alc_update_coefex_idx(codec, 0x57, 0x5, 1<<14, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5257) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5258) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5259) 	codec_dbg(codec, "Headset jack set to iPhone-style headset mode.\n");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5260) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5261) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5262) /* Nokia type */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5263) static void alc_headset_mode_omtp(struct hda_codec *codec)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5264) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5265) 	static const struct coef_fw coef0255[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5266) 		WRITE_COEF(0x45, 0xe489), /* Set to OMTP Type */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5267) 		WRITE_COEF(0x1b, 0x0c2b),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5268) 		WRITE_COEFEX(0x57, 0x03, 0x8ea6),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5269) 		{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5270) 	};
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5271) 	static const struct coef_fw coef0256[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5272) 		WRITE_COEF(0x45, 0xe489), /* Set to OMTP Type */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5273) 		WRITE_COEF(0x1b, 0x0e6b),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5274) 		{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5275) 	};
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5276) 	static const struct coef_fw coef0233[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5277) 		WRITE_COEF(0x45, 0xe429),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5278) 		WRITE_COEF(0x1b, 0x0c2b),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5279) 		WRITE_COEF(0x32, 0x4ea3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5280) 		{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5281) 	};
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5282) 	static const struct coef_fw coef0288[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5283) 		UPDATE_COEF(0x50, 0x2000, 0x2000),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5284) 		UPDATE_COEF(0x56, 0x0006, 0x0006),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5285) 		UPDATE_COEF(0x66, 0x0008, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5286) 		UPDATE_COEF(0x67, 0x2000, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5287) 		{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5288) 	};
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5289) 	static const struct coef_fw coef0292[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5290) 		WRITE_COEF(0x6b, 0xe429),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5291) 		WRITE_COEF(0x76, 0x0008),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5292) 		WRITE_COEF(0x18, 0x7388),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5293) 		{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5294) 	};
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5295) 	static const struct coef_fw coef0293[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5296) 		WRITE_COEF(0x45, 0xe429), /* Set to omtp type */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5297) 		UPDATE_COEF(0x10, 7<<8, 7<<8), /* SET Line1 JD to 1 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5298) 		{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5299) 	};
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5300) 	static const struct coef_fw coef0688[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5301) 		WRITE_COEF(0x11, 0x0001),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5302) 		WRITE_COEF(0x15, 0x0d50),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5303) 		WRITE_COEF(0xc3, 0x0000),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5304) 		{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5305) 	};
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5306) 	static const struct coef_fw coef0225[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5307) 		UPDATE_COEF(0x45, 0x3f<<10, 0x39<<10),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5308) 		UPDATE_COEF(0x63, 3<<14, 2<<14),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5309) 		{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5310) 	};
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5311) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5312) 	switch (codec->core.vendor_id) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5313) 	case 0x10ec0255:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5314) 		alc_process_coef_fw(codec, coef0255);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5315) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5316) 	case 0x10ec0230:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5317) 	case 0x10ec0236:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5318) 	case 0x10ec0256:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5319) 		alc_process_coef_fw(codec, coef0256);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5320) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5321) 	case 0x10ec0234:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5322) 	case 0x10ec0274:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5323) 	case 0x10ec0294:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5324) 		alc_write_coef_idx(codec, 0x45, 0xe689);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5325) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5326) 	case 0x10ec0233:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5327) 	case 0x10ec0283:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5328) 		alc_process_coef_fw(codec, coef0233);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5329) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5330) 	case 0x10ec0298:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5331) 		alc_update_coef_idx(codec, 0x8e, 0x0070, 0x0010);/* Headset output enable */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5332) 		alc_update_coef_idx(codec, 0x4f, 0xfcc0, 0xe400);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5333) 		msleep(300);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5334) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5335) 	case 0x10ec0286:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5336) 	case 0x10ec0288:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5337) 		alc_update_coef_idx(codec, 0x4f, 0xfcc0, 0xe400);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5338) 		msleep(300);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5339) 		alc_process_coef_fw(codec, coef0288);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5340) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5341) 	case 0x10ec0292:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5342) 		alc_process_coef_fw(codec, coef0292);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5343) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5344) 	case 0x10ec0293:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5345) 		alc_process_coef_fw(codec, coef0293);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5346) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5347) 	case 0x10ec0668:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5348) 		alc_process_coef_fw(codec, coef0688);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5349) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5350) 	case 0x10ec0215:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5351) 	case 0x10ec0225:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5352) 	case 0x10ec0285:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5353) 	case 0x10ec0295:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5354) 	case 0x10ec0289:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5355) 	case 0x10ec0299:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5356) 		alc_process_coef_fw(codec, coef0225);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5357) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5358) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5359) 	codec_dbg(codec, "Headset jack set to Nokia-style headset mode.\n");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5360) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5361) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5362) static void alc_determine_headset_type(struct hda_codec *codec)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5363) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5364) 	int val;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5365) 	bool is_ctia = false;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5366) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5367) 	static const struct coef_fw coef0255[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5368) 		WRITE_COEF(0x45, 0xd089), /* combo jack auto switch control(Check type)*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5369) 		WRITE_COEF(0x49, 0x0149), /* combo jack auto switch control(Vref
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5370)  conteol) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5371) 		{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5372) 	};
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5373) 	static const struct coef_fw coef0288[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5374) 		UPDATE_COEF(0x4f, 0xfcc0, 0xd400), /* Check Type */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5375) 		{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5376) 	};
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5377) 	static const struct coef_fw coef0298[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5378) 		UPDATE_COEF(0x50, 0x2000, 0x2000),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5379) 		UPDATE_COEF(0x56, 0x0006, 0x0006),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5380) 		UPDATE_COEF(0x66, 0x0008, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5381) 		UPDATE_COEF(0x67, 0x2000, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5382) 		UPDATE_COEF(0x19, 0x1300, 0x1300),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5383) 		{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5384) 	};
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5385) 	static const struct coef_fw coef0293[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5386) 		UPDATE_COEF(0x4a, 0x000f, 0x0008), /* Combo Jack auto detect */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5387) 		WRITE_COEF(0x45, 0xD429), /* Set to ctia type */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5388) 		{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5389) 	};
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5390) 	static const struct coef_fw coef0688[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5391) 		WRITE_COEF(0x11, 0x0001),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5392) 		WRITE_COEF(0xb7, 0x802b),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5393) 		WRITE_COEF(0x15, 0x0d60),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5394) 		WRITE_COEF(0xc3, 0x0c00),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5395) 		{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5396) 	};
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5397) 	static const struct coef_fw coef0274[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5398) 		UPDATE_COEF(0x4a, 0x0010, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5399) 		UPDATE_COEF(0x4a, 0x8000, 0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5400) 		WRITE_COEF(0x45, 0xd289),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5401) 		UPDATE_COEF(0x49, 0x0300, 0x0300),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5402) 		{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5403) 	};
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5404) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5405) 	if (spec->no_internal_mic_pin) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5406) 		alc_update_coef_idx(codec, 0x45, 0xf<<12 | 1<<10, 5<<12);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5407) 		return;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5408) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5409) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5410) 	switch (codec->core.vendor_id) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5411) 	case 0x10ec0255:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5412) 		alc_process_coef_fw(codec, coef0255);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5413) 		msleep(300);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5414) 		val = alc_read_coef_idx(codec, 0x46);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5415) 		is_ctia = (val & 0x0070) == 0x0070;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5416) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5417) 	case 0x10ec0230:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5418) 	case 0x10ec0236:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5419) 	case 0x10ec0256:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5420) 		alc_write_coef_idx(codec, 0x1b, 0x0e4b);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5421) 		alc_write_coef_idx(codec, 0x06, 0x6104);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5422) 		alc_write_coefex_idx(codec, 0x57, 0x3, 0x09a3);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5423) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5424) 		snd_hda_codec_write(codec, 0x21, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5425) 			    AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5426) 		msleep(80);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5427) 		snd_hda_codec_write(codec, 0x21, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5428) 			    AC_VERB_SET_PIN_WIDGET_CONTROL, 0x0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5429) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5430) 		alc_process_coef_fw(codec, coef0255);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5431) 		msleep(300);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5432) 		val = alc_read_coef_idx(codec, 0x46);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5433) 		is_ctia = (val & 0x0070) == 0x0070;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5434) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5435) 		alc_write_coefex_idx(codec, 0x57, 0x3, 0x0da3);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5436) 		alc_update_coefex_idx(codec, 0x57, 0x5, 1<<14, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5437) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5438) 		snd_hda_codec_write(codec, 0x21, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5439) 			    AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5440) 		msleep(80);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5441) 		snd_hda_codec_write(codec, 0x21, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5442) 			    AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5443) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5444) 	case 0x10ec0234:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5445) 	case 0x10ec0274:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5446) 	case 0x10ec0294:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5447) 		alc_process_coef_fw(codec, coef0274);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5448) 		msleep(850);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5449) 		val = alc_read_coef_idx(codec, 0x46);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5450) 		is_ctia = (val & 0x00f0) == 0x00f0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5451) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5452) 	case 0x10ec0233:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5453) 	case 0x10ec0283:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5454) 		alc_write_coef_idx(codec, 0x45, 0xd029);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5455) 		msleep(300);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5456) 		val = alc_read_coef_idx(codec, 0x46);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5457) 		is_ctia = (val & 0x0070) == 0x0070;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5458) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5459) 	case 0x10ec0298:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5460) 		snd_hda_codec_write(codec, 0x21, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5461) 			    AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5462) 		msleep(100);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5463) 		snd_hda_codec_write(codec, 0x21, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5464) 			    AC_VERB_SET_PIN_WIDGET_CONTROL, 0x0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5465) 		msleep(200);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5466) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5467) 		val = alc_read_coef_idx(codec, 0x50);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5468) 		if (val & (1 << 12)) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5469) 			alc_update_coef_idx(codec, 0x8e, 0x0070, 0x0020);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5470) 			alc_process_coef_fw(codec, coef0288);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5471) 			msleep(350);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5472) 			val = alc_read_coef_idx(codec, 0x50);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5473) 			is_ctia = (val & 0x0070) == 0x0070;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5474) 		} else {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5475) 			alc_update_coef_idx(codec, 0x8e, 0x0070, 0x0010);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5476) 			alc_process_coef_fw(codec, coef0288);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5477) 			msleep(350);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5478) 			val = alc_read_coef_idx(codec, 0x50);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5479) 			is_ctia = (val & 0x0070) == 0x0070;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5480) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5481) 		alc_process_coef_fw(codec, coef0298);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5482) 		snd_hda_codec_write(codec, 0x21, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5483) 			    AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_HP);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5484) 		msleep(75);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5485) 		snd_hda_codec_write(codec, 0x21, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5486) 			    AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5487) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5488) 	case 0x10ec0286:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5489) 	case 0x10ec0288:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5490) 		alc_process_coef_fw(codec, coef0288);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5491) 		msleep(350);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5492) 		val = alc_read_coef_idx(codec, 0x50);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5493) 		is_ctia = (val & 0x0070) == 0x0070;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5494) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5495) 	case 0x10ec0292:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5496) 		alc_write_coef_idx(codec, 0x6b, 0xd429);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5497) 		msleep(300);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5498) 		val = alc_read_coef_idx(codec, 0x6c);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5499) 		is_ctia = (val & 0x001c) == 0x001c;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5500) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5501) 	case 0x10ec0293:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5502) 		alc_process_coef_fw(codec, coef0293);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5503) 		msleep(300);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5504) 		val = alc_read_coef_idx(codec, 0x46);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5505) 		is_ctia = (val & 0x0070) == 0x0070;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5506) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5507) 	case 0x10ec0668:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5508) 		alc_process_coef_fw(codec, coef0688);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5509) 		msleep(300);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5510) 		val = alc_read_coef_idx(codec, 0xbe);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5511) 		is_ctia = (val & 0x1c02) == 0x1c02;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5512) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5513) 	case 0x10ec0215:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5514) 	case 0x10ec0225:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5515) 	case 0x10ec0285:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5516) 	case 0x10ec0295:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5517) 	case 0x10ec0289:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5518) 	case 0x10ec0299:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5519) 		snd_hda_codec_write(codec, 0x21, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5520) 			    AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5521) 		msleep(80);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5522) 		snd_hda_codec_write(codec, 0x21, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5523) 			    AC_VERB_SET_PIN_WIDGET_CONTROL, 0x0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5524) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5525) 		alc_process_coef_fw(codec, alc225_pre_hsmode);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5526) 		alc_update_coef_idx(codec, 0x67, 0xf000, 0x1000);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5527) 		val = alc_read_coef_idx(codec, 0x45);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5528) 		if (val & (1 << 9)) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5529) 			alc_update_coef_idx(codec, 0x45, 0x3f<<10, 0x34<<10);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5530) 			alc_update_coef_idx(codec, 0x49, 3<<8, 2<<8);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5531) 			msleep(800);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5532) 			val = alc_read_coef_idx(codec, 0x46);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5533) 			is_ctia = (val & 0x00f0) == 0x00f0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5534) 		} else {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5535) 			alc_update_coef_idx(codec, 0x45, 0x3f<<10, 0x34<<10);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5536) 			alc_update_coef_idx(codec, 0x49, 3<<8, 1<<8);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5537) 			msleep(800);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5538) 			val = alc_read_coef_idx(codec, 0x46);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5539) 			is_ctia = (val & 0x00f0) == 0x00f0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5540) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5541) 		alc_update_coef_idx(codec, 0x4a, 7<<6, 7<<6);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5542) 		alc_update_coef_idx(codec, 0x4a, 3<<4, 3<<4);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5543) 		alc_update_coef_idx(codec, 0x67, 0xf000, 0x3000);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5544) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5545) 		snd_hda_codec_write(codec, 0x21, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5546) 			    AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5547) 		msleep(80);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5548) 		snd_hda_codec_write(codec, 0x21, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5549) 			    AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5550) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5551) 	case 0x10ec0867:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5552) 		is_ctia = true;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5553) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5554) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5555) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5556) 	codec_dbg(codec, "Headset jack detected iPhone-style headset: %s\n",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5557) 		    is_ctia ? "yes" : "no");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5558) 	spec->current_headset_type = is_ctia ? ALC_HEADSET_TYPE_CTIA : ALC_HEADSET_TYPE_OMTP;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5559) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5560) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5561) static void alc_update_headset_mode(struct hda_codec *codec)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5562) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5563) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5564) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5565) 	hda_nid_t mux_pin = spec->gen.imux_pins[spec->gen.cur_mux[0]];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5566) 	hda_nid_t hp_pin = alc_get_hp_pin(spec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5567) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5568) 	int new_headset_mode;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5569) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5570) 	if (!snd_hda_jack_detect(codec, hp_pin))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5571) 		new_headset_mode = ALC_HEADSET_MODE_UNPLUGGED;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5572) 	else if (mux_pin == spec->headset_mic_pin)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5573) 		new_headset_mode = ALC_HEADSET_MODE_HEADSET;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5574) 	else if (mux_pin == spec->headphone_mic_pin)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5575) 		new_headset_mode = ALC_HEADSET_MODE_MIC;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5576) 	else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5577) 		new_headset_mode = ALC_HEADSET_MODE_HEADPHONE;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5578) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5579) 	if (new_headset_mode == spec->current_headset_mode) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5580) 		snd_hda_gen_update_outputs(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5581) 		return;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5582) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5583) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5584) 	switch (new_headset_mode) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5585) 	case ALC_HEADSET_MODE_UNPLUGGED:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5586) 		alc_headset_mode_unplugged(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5587) 		spec->current_headset_mode = ALC_HEADSET_MODE_UNKNOWN;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5588) 		spec->current_headset_type = ALC_HEADSET_TYPE_UNKNOWN;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5589) 		spec->gen.hp_jack_present = false;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5590) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5591) 	case ALC_HEADSET_MODE_HEADSET:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5592) 		if (spec->current_headset_type == ALC_HEADSET_TYPE_UNKNOWN)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5593) 			alc_determine_headset_type(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5594) 		if (spec->current_headset_type == ALC_HEADSET_TYPE_CTIA)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5595) 			alc_headset_mode_ctia(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5596) 		else if (spec->current_headset_type == ALC_HEADSET_TYPE_OMTP)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5597) 			alc_headset_mode_omtp(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5598) 		spec->gen.hp_jack_present = true;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5599) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5600) 	case ALC_HEADSET_MODE_MIC:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5601) 		alc_headset_mode_mic_in(codec, hp_pin, spec->headphone_mic_pin);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5602) 		spec->gen.hp_jack_present = false;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5603) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5604) 	case ALC_HEADSET_MODE_HEADPHONE:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5605) 		alc_headset_mode_default(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5606) 		spec->gen.hp_jack_present = true;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5607) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5608) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5609) 	if (new_headset_mode != ALC_HEADSET_MODE_MIC) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5610) 		snd_hda_set_pin_ctl_cache(codec, hp_pin,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5611) 					  AC_PINCTL_OUT_EN | AC_PINCTL_HP_EN);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5612) 		if (spec->headphone_mic_pin && spec->headphone_mic_pin != hp_pin)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5613) 			snd_hda_set_pin_ctl_cache(codec, spec->headphone_mic_pin,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5614) 						  PIN_VREFHIZ);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5615) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5616) 	spec->current_headset_mode = new_headset_mode;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5617) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5618) 	snd_hda_gen_update_outputs(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5619) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5620) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5621) static void alc_update_headset_mode_hook(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5622) 					 struct snd_kcontrol *kcontrol,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5623) 					 struct snd_ctl_elem_value *ucontrol)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5624) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5625) 	alc_update_headset_mode(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5626) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5627) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5628) static void alc_update_headset_jack_cb(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5629) 				       struct hda_jack_callback *jack)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5630) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5631) 	snd_hda_gen_hp_automute(codec, jack);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5632) 	alc_update_headset_mode(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5633) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5634) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5635) static void alc_probe_headset_mode(struct hda_codec *codec)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5636) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5637) 	int i;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5638) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5639) 	struct auto_pin_cfg *cfg = &spec->gen.autocfg;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5640) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5641) 	/* Find mic pins */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5642) 	for (i = 0; i < cfg->num_inputs; i++) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5643) 		if (cfg->inputs[i].is_headset_mic && !spec->headset_mic_pin)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5644) 			spec->headset_mic_pin = cfg->inputs[i].pin;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5645) 		if (cfg->inputs[i].is_headphone_mic && !spec->headphone_mic_pin)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5646) 			spec->headphone_mic_pin = cfg->inputs[i].pin;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5647) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5648) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5649) 	WARN_ON(spec->gen.cap_sync_hook);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5650) 	spec->gen.cap_sync_hook = alc_update_headset_mode_hook;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5651) 	spec->gen.automute_hook = alc_update_headset_mode;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5652) 	spec->gen.hp_automute_hook = alc_update_headset_jack_cb;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5653) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5654) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5655) static void alc_fixup_headset_mode(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5656) 				const struct hda_fixup *fix, int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5657) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5658) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5659) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5660) 	switch (action) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5661) 	case HDA_FIXUP_ACT_PRE_PROBE:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5662) 		spec->parse_flags |= HDA_PINCFG_HEADSET_MIC | HDA_PINCFG_HEADPHONE_MIC;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5663) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5664) 	case HDA_FIXUP_ACT_PROBE:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5665) 		alc_probe_headset_mode(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5666) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5667) 	case HDA_FIXUP_ACT_INIT:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5668) 		if (is_s3_resume(codec) || is_s4_resume(codec)) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5669) 			spec->current_headset_mode = ALC_HEADSET_MODE_UNKNOWN;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5670) 			spec->current_headset_type = ALC_HEADSET_TYPE_UNKNOWN;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5671) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5672) 		alc_update_headset_mode(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5673) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5674) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5675) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5676) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5677) static void alc_fixup_headset_mode_no_hp_mic(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5678) 				const struct hda_fixup *fix, int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5679) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5680) 	if (action == HDA_FIXUP_ACT_PRE_PROBE) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5681) 		struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5682) 		spec->parse_flags |= HDA_PINCFG_HEADSET_MIC;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5683) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5684) 	else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5685) 		alc_fixup_headset_mode(codec, fix, action);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5686) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5687) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5688) static void alc255_set_default_jack_type(struct hda_codec *codec)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5689) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5690) 	/* Set to iphone type */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5691) 	static const struct coef_fw alc255fw[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5692) 		WRITE_COEF(0x1b, 0x880b),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5693) 		WRITE_COEF(0x45, 0xd089),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5694) 		WRITE_COEF(0x1b, 0x080b),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5695) 		WRITE_COEF(0x46, 0x0004),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5696) 		WRITE_COEF(0x1b, 0x0c0b),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5697) 		{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5698) 	};
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5699) 	static const struct coef_fw alc256fw[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5700) 		WRITE_COEF(0x1b, 0x884b),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5701) 		WRITE_COEF(0x45, 0xd089),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5702) 		WRITE_COEF(0x1b, 0x084b),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5703) 		WRITE_COEF(0x46, 0x0004),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5704) 		WRITE_COEF(0x1b, 0x0c4b),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5705) 		{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5706) 	};
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5707) 	switch (codec->core.vendor_id) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5708) 	case 0x10ec0255:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5709) 		alc_process_coef_fw(codec, alc255fw);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5710) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5711) 	case 0x10ec0230:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5712) 	case 0x10ec0236:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5713) 	case 0x10ec0256:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5714) 		alc_process_coef_fw(codec, alc256fw);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5715) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5716) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5717) 	msleep(30);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5718) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5719) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5720) static void alc_fixup_headset_mode_alc255(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5721) 				const struct hda_fixup *fix, int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5722) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5723) 	if (action == HDA_FIXUP_ACT_PRE_PROBE) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5724) 		alc255_set_default_jack_type(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5725) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5726) 	alc_fixup_headset_mode(codec, fix, action);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5727) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5728) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5729) static void alc_fixup_headset_mode_alc255_no_hp_mic(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5730) 				const struct hda_fixup *fix, int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5731) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5732) 	if (action == HDA_FIXUP_ACT_PRE_PROBE) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5733) 		struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5734) 		spec->parse_flags |= HDA_PINCFG_HEADSET_MIC;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5735) 		alc255_set_default_jack_type(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5736) 	} 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5737) 	else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5738) 		alc_fixup_headset_mode(codec, fix, action);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5739) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5740) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5741) static void alc288_update_headset_jack_cb(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5742) 				       struct hda_jack_callback *jack)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5743) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5744) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5745) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5746) 	alc_update_headset_jack_cb(codec, jack);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5747) 	/* Headset Mic enable or disable, only for Dell Dino */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5748) 	alc_update_gpio_data(codec, 0x40, spec->gen.hp_jack_present);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5749) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5750) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5751) static void alc_fixup_headset_mode_dell_alc288(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5752) 				const struct hda_fixup *fix, int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5753) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5754) 	alc_fixup_headset_mode(codec, fix, action);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5755) 	if (action == HDA_FIXUP_ACT_PROBE) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5756) 		struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5757) 		/* toggled via hp_automute_hook */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5758) 		spec->gpio_mask |= 0x40;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5759) 		spec->gpio_dir |= 0x40;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5760) 		spec->gen.hp_automute_hook = alc288_update_headset_jack_cb;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5761) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5762) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5763) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5764) static void alc_fixup_auto_mute_via_amp(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5765) 					const struct hda_fixup *fix, int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5766) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5767) 	if (action == HDA_FIXUP_ACT_PRE_PROBE) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5768) 		struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5769) 		spec->gen.auto_mute_via_amp = 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5770) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5771) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5772) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5773) static void alc_fixup_no_shutup(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5774) 				const struct hda_fixup *fix, int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5775) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5776) 	if (action == HDA_FIXUP_ACT_PRE_PROBE) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5777) 		struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5778) 		spec->no_shutup_pins = 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5779) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5780) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5781) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5782) static void alc_fixup_disable_aamix(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5783) 				    const struct hda_fixup *fix, int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5784) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5785) 	if (action == HDA_FIXUP_ACT_PRE_PROBE) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5786) 		struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5787) 		/* Disable AA-loopback as it causes white noise */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5788) 		spec->gen.mixer_nid = 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5789) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5790) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5791) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5792) /* fixup for Thinkpad docks: add dock pins, avoid HP parser fixup */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5793) static void alc_fixup_tpt440_dock(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5794) 				  const struct hda_fixup *fix, int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5795) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5796) 	static const struct hda_pintbl pincfgs[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5797) 		{ 0x16, 0x21211010 }, /* dock headphone */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5798) 		{ 0x19, 0x21a11010 }, /* dock mic */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5799) 		{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5800) 	};
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5801) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5802) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5803) 	if (action == HDA_FIXUP_ACT_PRE_PROBE) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5804) 		spec->reboot_notify = snd_hda_gen_reboot_notify; /* reduce noise */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5805) 		spec->parse_flags = HDA_PINCFG_NO_HP_FIXUP;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5806) 		codec->power_save_node = 0; /* avoid click noises */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5807) 		snd_hda_apply_pincfgs(codec, pincfgs);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5808) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5809) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5810) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5811) static void alc_fixup_tpt470_dock(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5812) 				  const struct hda_fixup *fix, int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5813) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5814) 	static const struct hda_pintbl pincfgs[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5815) 		{ 0x17, 0x21211010 }, /* dock headphone */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5816) 		{ 0x19, 0x21a11010 }, /* dock mic */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5817) 		{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5818) 	};
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5819) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5820) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5821) 	if (action == HDA_FIXUP_ACT_PRE_PROBE) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5822) 		spec->parse_flags = HDA_PINCFG_NO_HP_FIXUP;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5823) 		snd_hda_apply_pincfgs(codec, pincfgs);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5824) 	} else if (action == HDA_FIXUP_ACT_INIT) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5825) 		/* Enable DOCK device */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5826) 		snd_hda_codec_write(codec, 0x17, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5827) 			    AC_VERB_SET_CONFIG_DEFAULT_BYTES_3, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5828) 		/* Enable DOCK device */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5829) 		snd_hda_codec_write(codec, 0x19, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5830) 			    AC_VERB_SET_CONFIG_DEFAULT_BYTES_3, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5831) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5832) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5833) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5834) static void alc_fixup_tpt470_dacs(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5835) 				  const struct hda_fixup *fix, int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5836) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5837) 	/* Assure the speaker pin to be coupled with DAC NID 0x03; otherwise
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5838) 	 * the speaker output becomes too low by some reason on Thinkpads with
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5839) 	 * ALC298 codec
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5840) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5841) 	static const hda_nid_t preferred_pairs[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5842) 		0x14, 0x03, 0x17, 0x02, 0x21, 0x02,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5843) 		0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5844) 	};
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5845) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5846) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5847) 	if (action == HDA_FIXUP_ACT_PRE_PROBE)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5848) 		spec->gen.preferred_dacs = preferred_pairs;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5849) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5850) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5851) static void alc295_fixup_asus_dacs(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5852) 				   const struct hda_fixup *fix, int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5853) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5854) 	static const hda_nid_t preferred_pairs[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5855) 		0x17, 0x02, 0x21, 0x03, 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5856) 	};
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5857) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5858) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5859) 	if (action == HDA_FIXUP_ACT_PRE_PROBE)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5860) 		spec->gen.preferred_dacs = preferred_pairs;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5861) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5862) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5863) static void alc_shutup_dell_xps13(struct hda_codec *codec)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5864) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5865) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5866) 	int hp_pin = alc_get_hp_pin(spec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5867) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5868) 	/* Prevent pop noises when headphones are plugged in */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5869) 	snd_hda_codec_write(codec, hp_pin, 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5870) 			    AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5871) 	msleep(20);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5872) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5873) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5874) static void alc_fixup_dell_xps13(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5875) 				const struct hda_fixup *fix, int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5876) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5877) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5878) 	struct hda_input_mux *imux = &spec->gen.input_mux;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5879) 	int i;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5880) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5881) 	switch (action) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5882) 	case HDA_FIXUP_ACT_PRE_PROBE:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5883) 		/* mic pin 0x19 must be initialized with Vref Hi-Z, otherwise
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5884) 		 * it causes a click noise at start up
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5885) 		 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5886) 		snd_hda_codec_set_pin_target(codec, 0x19, PIN_VREFHIZ);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5887) 		spec->shutup = alc_shutup_dell_xps13;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5888) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5889) 	case HDA_FIXUP_ACT_PROBE:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5890) 		/* Make the internal mic the default input source. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5891) 		for (i = 0; i < imux->num_items; i++) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5892) 			if (spec->gen.imux_pins[i] == 0x12) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5893) 				spec->gen.cur_mux[0] = i;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5894) 				break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5895) 			}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5896) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5897) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5898) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5899) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5900) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5901) static void alc_fixup_headset_mode_alc662(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5902) 				const struct hda_fixup *fix, int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5903) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5904) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5905) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5906) 	if (action == HDA_FIXUP_ACT_PRE_PROBE) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5907) 		spec->parse_flags |= HDA_PINCFG_HEADSET_MIC;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5908) 		spec->gen.hp_mic = 1; /* Mic-in is same pin as headphone */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5909) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5910) 		/* Disable boost for mic-in permanently. (This code is only called
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5911) 		   from quirks that guarantee that the headphone is at NID 0x1b.) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5912) 		snd_hda_codec_write(codec, 0x1b, 0, AC_VERB_SET_AMP_GAIN_MUTE, 0x7000);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5913) 		snd_hda_override_wcaps(codec, 0x1b, get_wcaps(codec, 0x1b) & ~AC_WCAP_IN_AMP);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5914) 	} else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5915) 		alc_fixup_headset_mode(codec, fix, action);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5916) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5917) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5918) static void alc_fixup_headset_mode_alc668(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5919) 				const struct hda_fixup *fix, int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5920) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5921) 	if (action == HDA_FIXUP_ACT_PRE_PROBE) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5922) 		alc_write_coef_idx(codec, 0xc4, 0x8000);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5923) 		alc_update_coef_idx(codec, 0xc2, ~0xfe, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5924) 		snd_hda_set_pin_ctl_cache(codec, 0x18, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5925) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5926) 	alc_fixup_headset_mode(codec, fix, action);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5927) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5928) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5929) /* Returns the nid of the external mic input pin, or 0 if it cannot be found. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5930) static int find_ext_mic_pin(struct hda_codec *codec)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5931) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5932) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5933) 	struct auto_pin_cfg *cfg = &spec->gen.autocfg;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5934) 	hda_nid_t nid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5935) 	unsigned int defcfg;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5936) 	int i;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5937) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5938) 	for (i = 0; i < cfg->num_inputs; i++) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5939) 		if (cfg->inputs[i].type != AUTO_PIN_MIC)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5940) 			continue;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5941) 		nid = cfg->inputs[i].pin;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5942) 		defcfg = snd_hda_codec_get_pincfg(codec, nid);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5943) 		if (snd_hda_get_input_pin_attr(defcfg) == INPUT_PIN_ATTR_INT)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5944) 			continue;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5945) 		return nid;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5946) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5947) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5948) 	return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5949) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5950) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5951) static void alc271_hp_gate_mic_jack(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5952) 				    const struct hda_fixup *fix,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5953) 				    int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5954) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5955) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5956) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5957) 	if (action == HDA_FIXUP_ACT_PROBE) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5958) 		int mic_pin = find_ext_mic_pin(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5959) 		int hp_pin = alc_get_hp_pin(spec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5960) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5961) 		if (snd_BUG_ON(!mic_pin || !hp_pin))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5962) 			return;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5963) 		snd_hda_jack_set_gating_jack(codec, mic_pin, hp_pin);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5964) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5965) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5966) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5967) static void alc269_fixup_limit_int_mic_boost(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5968) 					     const struct hda_fixup *fix,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5969) 					     int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5970) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5971) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5972) 	struct auto_pin_cfg *cfg = &spec->gen.autocfg;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5973) 	int i;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5974) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5975) 	/* The mic boosts on level 2 and 3 are too noisy
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5976) 	   on the internal mic input.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5977) 	   Therefore limit the boost to 0 or 1. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5978) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5979) 	if (action != HDA_FIXUP_ACT_PROBE)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5980) 		return;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5981) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5982) 	for (i = 0; i < cfg->num_inputs; i++) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5983) 		hda_nid_t nid = cfg->inputs[i].pin;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5984) 		unsigned int defcfg;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5985) 		if (cfg->inputs[i].type != AUTO_PIN_MIC)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5986) 			continue;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5987) 		defcfg = snd_hda_codec_get_pincfg(codec, nid);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5988) 		if (snd_hda_get_input_pin_attr(defcfg) != INPUT_PIN_ATTR_INT)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5989) 			continue;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5990) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5991) 		snd_hda_override_amp_caps(codec, nid, HDA_INPUT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5992) 					  (0x00 << AC_AMPCAP_OFFSET_SHIFT) |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5993) 					  (0x01 << AC_AMPCAP_NUM_STEPS_SHIFT) |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5994) 					  (0x2f << AC_AMPCAP_STEP_SIZE_SHIFT) |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5995) 					  (0 << AC_AMPCAP_MUTE_SHIFT));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5996) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5997) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5998) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5999) static void alc283_hp_automute_hook(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6000) 				    struct hda_jack_callback *jack)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6001) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6002) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6003) 	int vref;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6004) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6005) 	msleep(200);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6006) 	snd_hda_gen_hp_automute(codec, jack);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6007) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6008) 	vref = spec->gen.hp_jack_present ? PIN_VREF80 : 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6009) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6010) 	msleep(600);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6011) 	snd_hda_codec_write(codec, 0x19, 0, AC_VERB_SET_PIN_WIDGET_CONTROL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6012) 			    vref);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6013) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6014) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6015) static void alc283_fixup_chromebook(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6016) 				    const struct hda_fixup *fix, int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6017) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6018) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6019) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6020) 	switch (action) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6021) 	case HDA_FIXUP_ACT_PRE_PROBE:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6022) 		snd_hda_override_wcaps(codec, 0x03, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6023) 		/* Disable AA-loopback as it causes white noise */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6024) 		spec->gen.mixer_nid = 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6025) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6026) 	case HDA_FIXUP_ACT_INIT:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6027) 		/* MIC2-VREF control */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6028) 		/* Set to manual mode */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6029) 		alc_update_coef_idx(codec, 0x06, 0x000c, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6030) 		/* Enable Line1 input control by verb */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6031) 		alc_update_coef_idx(codec, 0x1a, 0, 1 << 4);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6032) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6033) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6034) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6035) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6036) static void alc283_fixup_sense_combo_jack(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6037) 				    const struct hda_fixup *fix, int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6038) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6039) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6040) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6041) 	switch (action) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6042) 	case HDA_FIXUP_ACT_PRE_PROBE:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6043) 		spec->gen.hp_automute_hook = alc283_hp_automute_hook;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6044) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6045) 	case HDA_FIXUP_ACT_INIT:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6046) 		/* MIC2-VREF control */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6047) 		/* Set to manual mode */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6048) 		alc_update_coef_idx(codec, 0x06, 0x000c, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6049) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6050) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6051) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6052) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6053) /* mute tablet speaker pin (0x14) via dock plugging in addition */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6054) static void asus_tx300_automute(struct hda_codec *codec)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6055) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6056) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6057) 	snd_hda_gen_update_outputs(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6058) 	if (snd_hda_jack_detect(codec, 0x1b))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6059) 		spec->gen.mute_bits |= (1ULL << 0x14);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6060) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6061) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6062) static void alc282_fixup_asus_tx300(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6063) 				    const struct hda_fixup *fix, int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6064) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6065) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6066) 	static const struct hda_pintbl dock_pins[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6067) 		{ 0x1b, 0x21114000 }, /* dock speaker pin */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6068) 		{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6069) 	};
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6070) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6071) 	switch (action) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6072) 	case HDA_FIXUP_ACT_PRE_PROBE:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6073) 		spec->init_amp = ALC_INIT_DEFAULT;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6074) 		/* TX300 needs to set up GPIO2 for the speaker amp */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6075) 		alc_setup_gpio(codec, 0x04);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6076) 		snd_hda_apply_pincfgs(codec, dock_pins);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6077) 		spec->gen.auto_mute_via_amp = 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6078) 		spec->gen.automute_hook = asus_tx300_automute;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6079) 		snd_hda_jack_detect_enable_callback(codec, 0x1b,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6080) 						    snd_hda_gen_hp_automute);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6081) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6082) 	case HDA_FIXUP_ACT_PROBE:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6083) 		spec->init_amp = ALC_INIT_DEFAULT;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6084) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6085) 	case HDA_FIXUP_ACT_BUILD:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6086) 		/* this is a bit tricky; give more sane names for the main
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6087) 		 * (tablet) speaker and the dock speaker, respectively
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6088) 		 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6089) 		rename_ctl(codec, "Speaker Playback Switch",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6090) 			   "Dock Speaker Playback Switch");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6091) 		rename_ctl(codec, "Bass Speaker Playback Switch",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6092) 			   "Speaker Playback Switch");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6093) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6094) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6095) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6096) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6097) static void alc290_fixup_mono_speakers(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6098) 				       const struct hda_fixup *fix, int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6099) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6100) 	if (action == HDA_FIXUP_ACT_PRE_PROBE) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6101) 		/* DAC node 0x03 is giving mono output. We therefore want to
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6102) 		   make sure 0x14 (front speaker) and 0x15 (headphones) use the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6103) 		   stereo DAC, while leaving 0x17 (bass speaker) for node 0x03. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6104) 		static const hda_nid_t conn1[] = { 0x0c };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6105) 		snd_hda_override_conn_list(codec, 0x14, ARRAY_SIZE(conn1), conn1);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6106) 		snd_hda_override_conn_list(codec, 0x15, ARRAY_SIZE(conn1), conn1);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6107) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6108) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6109) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6110) static void alc298_fixup_speaker_volume(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6111) 					const struct hda_fixup *fix, int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6112) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6113) 	if (action == HDA_FIXUP_ACT_PRE_PROBE) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6114) 		/* The speaker is routed to the Node 0x06 by a mistake, as a result
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6115) 		   we can't adjust the speaker's volume since this node does not has
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6116) 		   Amp-out capability. we change the speaker's route to:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6117) 		   Node 0x02 (Audio Output) -> Node 0x0c (Audio Mixer) -> Node 0x17 (
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6118) 		   Pin Complex), since Node 0x02 has Amp-out caps, we can adjust
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6119) 		   speaker's volume now. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6120) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6121) 		static const hda_nid_t conn1[] = { 0x0c };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6122) 		snd_hda_override_conn_list(codec, 0x17, ARRAY_SIZE(conn1), conn1);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6123) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6124) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6125) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6126) /* disable DAC3 (0x06) selection on NID 0x17 as it has no volume amp control */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6127) static void alc295_fixup_disable_dac3(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6128) 				      const struct hda_fixup *fix, int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6129) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6130) 	if (action == HDA_FIXUP_ACT_PRE_PROBE) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6131) 		static const hda_nid_t conn[] = { 0x02, 0x03 };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6132) 		snd_hda_override_conn_list(codec, 0x17, ARRAY_SIZE(conn), conn);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6133) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6134) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6135) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6136) /* force NID 0x17 (Bass Speaker) to DAC1 to share it with the main speaker */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6137) static void alc285_fixup_speaker2_to_dac1(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6138) 					  const struct hda_fixup *fix, int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6139) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6140) 	if (action == HDA_FIXUP_ACT_PRE_PROBE) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6141) 		static const hda_nid_t conn[] = { 0x02 };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6142) 		snd_hda_override_conn_list(codec, 0x17, ARRAY_SIZE(conn), conn);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6143) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6144) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6145) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6146) /* Hook to update amp GPIO4 for automute */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6147) static void alc280_hp_gpio4_automute_hook(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6148) 					  struct hda_jack_callback *jack)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6149) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6150) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6151) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6152) 	snd_hda_gen_hp_automute(codec, jack);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6153) 	/* mute_led_polarity is set to 0, so we pass inverted value here */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6154) 	alc_update_gpio_led(codec, 0x10, spec->mute_led_polarity,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6155) 			    !spec->gen.hp_jack_present);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6156) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6157) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6158) /* Manage GPIOs for HP EliteBook Folio 9480m.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6159)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6160)  * GPIO4 is the headphone amplifier power control
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6161)  * GPIO3 is the audio output mute indicator LED
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6162)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6163) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6164) static void alc280_fixup_hp_9480m(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6165) 				  const struct hda_fixup *fix,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6166) 				  int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6167) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6168) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6169) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6170) 	alc_fixup_hp_gpio_led(codec, action, 0x08, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6171) 	if (action == HDA_FIXUP_ACT_PRE_PROBE) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6172) 		/* amp at GPIO4; toggled via alc280_hp_gpio4_automute_hook() */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6173) 		spec->gpio_mask |= 0x10;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6174) 		spec->gpio_dir |= 0x10;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6175) 		spec->gen.hp_automute_hook = alc280_hp_gpio4_automute_hook;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6176) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6177) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6178) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6179) static void alc275_fixup_gpio4_off(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6180) 				   const struct hda_fixup *fix,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6181) 				   int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6182) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6183) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6184) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6185) 	if (action == HDA_FIXUP_ACT_PRE_PROBE) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6186) 		spec->gpio_mask |= 0x04;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6187) 		spec->gpio_dir |= 0x04;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6188) 		/* set data bit low */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6189) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6190) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6191) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6192) /* Quirk for Thinkpad X1 7th and 8th Gen
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6193)  * The following fixed routing needed
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6194)  * DAC1 (NID 0x02) -> Speaker (NID 0x14); some eq applied secretly
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6195)  * DAC2 (NID 0x03) -> Bass (NID 0x17) & Headphone (NID 0x21); sharing a DAC
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6196)  * DAC3 (NID 0x06) -> Unused, due to the lack of volume amp
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6197)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6198) static void alc285_fixup_thinkpad_x1_gen7(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6199) 					  const struct hda_fixup *fix, int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6200) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6201) 	static const hda_nid_t conn[] = { 0x02, 0x03 }; /* exclude 0x06 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6202) 	static const hda_nid_t preferred_pairs[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6203) 		0x14, 0x02, 0x17, 0x03, 0x21, 0x03, 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6204) 	};
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6205) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6206) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6207) 	switch (action) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6208) 	case HDA_FIXUP_ACT_PRE_PROBE:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6209) 		snd_hda_override_conn_list(codec, 0x17, ARRAY_SIZE(conn), conn);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6210) 		spec->gen.preferred_dacs = preferred_pairs;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6211) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6212) 	case HDA_FIXUP_ACT_BUILD:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6213) 		/* The generic parser creates somewhat unintuitive volume ctls
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6214) 		 * with the fixed routing above, and the shared DAC2 may be
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6215) 		 * confusing for PA.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6216) 		 * Rename those to unique names so that PA doesn't touch them
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6217) 		 * and use only Master volume.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6218) 		 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6219) 		rename_ctl(codec, "Front Playback Volume", "DAC1 Playback Volume");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6220) 		rename_ctl(codec, "Bass Speaker Playback Volume", "DAC2 Playback Volume");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6221) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6222) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6223) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6224) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6225) static void alc233_alc662_fixup_lenovo_dual_codecs(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6226) 					 const struct hda_fixup *fix,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6227) 					 int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6228) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6229) 	alc_fixup_dual_codecs(codec, fix, action);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6230) 	switch (action) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6231) 	case HDA_FIXUP_ACT_PRE_PROBE:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6232) 		/* override card longname to provide a unique UCM profile */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6233) 		strcpy(codec->card->longname, "HDAudio-Lenovo-DualCodecs");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6234) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6235) 	case HDA_FIXUP_ACT_BUILD:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6236) 		/* rename Capture controls depending on the codec */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6237) 		rename_ctl(codec, "Capture Volume",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6238) 			   codec->addr == 0 ?
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6239) 			   "Rear-Panel Capture Volume" :
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6240) 			   "Front-Panel Capture Volume");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6241) 		rename_ctl(codec, "Capture Switch",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6242) 			   codec->addr == 0 ?
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6243) 			   "Rear-Panel Capture Switch" :
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6244) 			   "Front-Panel Capture Switch");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6245) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6246) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6247) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6248) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6249) static void alc225_fixup_s3_pop_noise(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6250) 				      const struct hda_fixup *fix, int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6251) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6252) 	if (action != HDA_FIXUP_ACT_PRE_PROBE)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6253) 		return;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6254) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6255) 	codec->power_save_node = 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6256) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6257) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6258) /* Forcibly assign NID 0x03 to HP/LO while NID 0x02 to SPK for EQ */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6259) static void alc274_fixup_bind_dacs(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6260) 				    const struct hda_fixup *fix, int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6261) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6262) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6263) 	static const hda_nid_t preferred_pairs[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6264) 		0x21, 0x03, 0x1b, 0x03, 0x16, 0x02,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6265) 		0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6266) 	};
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6267) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6268) 	if (action != HDA_FIXUP_ACT_PRE_PROBE)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6269) 		return;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6270) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6271) 	spec->gen.preferred_dacs = preferred_pairs;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6272) 	spec->gen.auto_mute_via_amp = 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6273) 	codec->power_save_node = 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6274) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6275) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6276) /* avoid DAC 0x06 for bass speaker 0x17; it has no volume control */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6277) static void alc289_fixup_asus_ga401(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6278) 				    const struct hda_fixup *fix, int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6279) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6280) 	static const hda_nid_t preferred_pairs[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6281) 		0x14, 0x02, 0x17, 0x02, 0x21, 0x03, 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6282) 	};
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6283) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6284) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6285) 	if (action == HDA_FIXUP_ACT_PRE_PROBE) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6286) 		spec->gen.preferred_dacs = preferred_pairs;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6287) 		spec->gen.obey_preferred_dacs = 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6288) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6289) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6290) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6291) /* The DAC of NID 0x3 will introduce click/pop noise on headphones, so invalidate it */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6292) static void alc285_fixup_invalidate_dacs(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6293) 			      const struct hda_fixup *fix, int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6294) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6295) 	if (action != HDA_FIXUP_ACT_PRE_PROBE)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6296) 		return;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6297) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6298) 	snd_hda_override_wcaps(codec, 0x03, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6299) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6300) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6301) static void alc_combo_jack_hp_jd_restart(struct hda_codec *codec)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6302) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6303) 	switch (codec->core.vendor_id) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6304) 	case 0x10ec0274:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6305) 	case 0x10ec0294:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6306) 	case 0x10ec0225:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6307) 	case 0x10ec0295:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6308) 	case 0x10ec0299:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6309) 		alc_update_coef_idx(codec, 0x4a, 0x8000, 1 << 15); /* Reset HP JD */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6310) 		alc_update_coef_idx(codec, 0x4a, 0x8000, 0 << 15);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6311) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6312) 	case 0x10ec0230:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6313) 	case 0x10ec0235:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6314) 	case 0x10ec0236:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6315) 	case 0x10ec0255:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6316) 	case 0x10ec0256:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6317) 		alc_update_coef_idx(codec, 0x1b, 0x8000, 1 << 15); /* Reset HP JD */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6318) 		alc_update_coef_idx(codec, 0x1b, 0x8000, 0 << 15);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6319) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6320) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6321) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6322) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6323) static void alc295_fixup_chromebook(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6324) 				    const struct hda_fixup *fix, int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6325) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6326) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6327) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6328) 	switch (action) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6329) 	case HDA_FIXUP_ACT_PRE_PROBE:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6330) 		spec->ultra_low_power = true;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6331) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6332) 	case HDA_FIXUP_ACT_INIT:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6333) 		alc_combo_jack_hp_jd_restart(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6334) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6335) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6336) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6337) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6338) static void alc_fixup_disable_mic_vref(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6339) 				  const struct hda_fixup *fix, int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6340) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6341) 	if (action == HDA_FIXUP_ACT_PRE_PROBE)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6342) 		snd_hda_codec_set_pin_target(codec, 0x19, PIN_VREFHIZ);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6343) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6344) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6345) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6346) static void alc294_gx502_toggle_output(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6347) 					struct hda_jack_callback *cb)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6348) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6349) 	/* The Windows driver sets the codec up in a very different way where
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6350) 	 * it appears to leave 0x10 = 0x8a20 set. For Linux we need to toggle it
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6351) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6352) 	if (snd_hda_jack_detect_state(codec, 0x21) == HDA_JACK_PRESENT)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6353) 		alc_write_coef_idx(codec, 0x10, 0x8a20);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6354) 	else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6355) 		alc_write_coef_idx(codec, 0x10, 0x0a20);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6356) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6357) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6358) static void alc294_fixup_gx502_hp(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6359) 					const struct hda_fixup *fix, int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6360) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6361) 	/* Pin 0x21: headphones/headset mic */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6362) 	if (!is_jack_detectable(codec, 0x21))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6363) 		return;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6364) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6365) 	switch (action) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6366) 	case HDA_FIXUP_ACT_PRE_PROBE:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6367) 		snd_hda_jack_detect_enable_callback(codec, 0x21,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6368) 				alc294_gx502_toggle_output);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6369) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6370) 	case HDA_FIXUP_ACT_INIT:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6371) 		/* Make sure to start in a correct state, i.e. if
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6372) 		 * headphones have been plugged in before powering up the system
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6373) 		 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6374) 		alc294_gx502_toggle_output(codec, NULL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6375) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6376) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6377) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6378) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6379) static void alc294_gu502_toggle_output(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6380) 				       struct hda_jack_callback *cb)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6381) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6382) 	/* Windows sets 0x10 to 0x8420 for Node 0x20 which is
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6383) 	 * responsible from changes between speakers and headphones
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6384) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6385) 	if (snd_hda_jack_detect_state(codec, 0x21) == HDA_JACK_PRESENT)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6386) 		alc_write_coef_idx(codec, 0x10, 0x8420);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6387) 	else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6388) 		alc_write_coef_idx(codec, 0x10, 0x0a20);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6389) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6390) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6391) static void alc294_fixup_gu502_hp(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6392) 				  const struct hda_fixup *fix, int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6393) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6394) 	if (!is_jack_detectable(codec, 0x21))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6395) 		return;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6396) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6397) 	switch (action) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6398) 	case HDA_FIXUP_ACT_PRE_PROBE:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6399) 		snd_hda_jack_detect_enable_callback(codec, 0x21,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6400) 				alc294_gu502_toggle_output);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6401) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6402) 	case HDA_FIXUP_ACT_INIT:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6403) 		alc294_gu502_toggle_output(codec, NULL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6404) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6405) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6406) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6407) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6408) static void  alc285_fixup_hp_gpio_amp_init(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6409) 			      const struct hda_fixup *fix, int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6410) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6411) 	if (action != HDA_FIXUP_ACT_INIT)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6412) 		return;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6413) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6414) 	msleep(100);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6415) 	alc_write_coef_idx(codec, 0x65, 0x0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6416) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6417) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6418) static void alc274_fixup_hp_headset_mic(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6419) 				    const struct hda_fixup *fix, int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6420) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6421) 	switch (action) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6422) 	case HDA_FIXUP_ACT_INIT:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6423) 		alc_combo_jack_hp_jd_restart(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6424) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6425) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6426) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6427) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6428) static void alc_fixup_no_int_mic(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6429) 				    const struct hda_fixup *fix, int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6430) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6431) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6432) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6433) 	switch (action) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6434) 	case HDA_FIXUP_ACT_PRE_PROBE:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6435) 		/* Mic RING SLEEVE swap for combo jack */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6436) 		alc_update_coef_idx(codec, 0x45, 0xf<<12 | 1<<10, 5<<12);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6437) 		spec->no_internal_mic_pin = true;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6438) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6439) 	case HDA_FIXUP_ACT_INIT:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6440) 		alc_combo_jack_hp_jd_restart(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6441) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6442) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6443) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6444) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6445) /* GPIO1 = amplifier on/off
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6446)  * GPIO3 = mic mute LED
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6447)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6448) static void alc285_fixup_hp_spectre_x360_eb1(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6449) 					  const struct hda_fixup *fix, int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6450) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6451) 	static const hda_nid_t conn[] = { 0x02 };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6452) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6453) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6454) 	static const struct hda_pintbl pincfgs[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6455) 		{ 0x14, 0x90170110 },  /* front/high speakers */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6456) 		{ 0x17, 0x90170130 },  /* back/bass speakers */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6457) 		{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6458) 	};
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6459) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6460) 	//enable micmute led
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6461) 	alc_fixup_hp_gpio_led(codec, action, 0x00, 0x04);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6462) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6463) 	switch (action) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6464) 	case HDA_FIXUP_ACT_PRE_PROBE:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6465) 		spec->micmute_led_polarity = 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6466) 		/* needed for amp of back speakers */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6467) 		spec->gpio_mask |= 0x01;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6468) 		spec->gpio_dir |= 0x01;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6469) 		snd_hda_apply_pincfgs(codec, pincfgs);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6470) 		/* share DAC to have unified volume control */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6471) 		snd_hda_override_conn_list(codec, 0x14, ARRAY_SIZE(conn), conn);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6472) 		snd_hda_override_conn_list(codec, 0x17, ARRAY_SIZE(conn), conn);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6473) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6474) 	case HDA_FIXUP_ACT_INIT:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6475) 		/* need to toggle GPIO to enable the amp of back speakers */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6476) 		alc_update_gpio_data(codec, 0x01, true);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6477) 		msleep(100);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6478) 		alc_update_gpio_data(codec, 0x01, false);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6479) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6480) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6481) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6482) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6483) static void alc285_fixup_hp_spectre_x360(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6484) 					  const struct hda_fixup *fix, int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6485) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6486) 	static const hda_nid_t conn[] = { 0x02 };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6487) 	static const struct hda_pintbl pincfgs[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6488) 		{ 0x14, 0x90170110 },  /* rear speaker */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6489) 		{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6490) 	};
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6491) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6492) 	switch (action) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6493) 	case HDA_FIXUP_ACT_PRE_PROBE:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6494) 		snd_hda_apply_pincfgs(codec, pincfgs);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6495) 		/* force front speaker to DAC1 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6496) 		snd_hda_override_conn_list(codec, 0x17, ARRAY_SIZE(conn), conn);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6497) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6498) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6499) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6500) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6501) /* for hda_fixup_thinkpad_acpi() */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6502) #include "thinkpad_helper.c"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6503) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6504) static void alc_fixup_thinkpad_acpi(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6505) 				    const struct hda_fixup *fix, int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6506) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6507) 	alc_fixup_no_shutup(codec, fix, action); /* reduce click noise */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6508) 	hda_fixup_thinkpad_acpi(codec, fix, action);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6509) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6510) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6511) /* Fixup for Lenovo Legion 15IMHg05 speaker output on headset removal. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6512) static void alc287_fixup_legion_15imhg05_speakers(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6513) 						  const struct hda_fixup *fix,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6514) 						  int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6515) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6516) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6517) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6518) 	switch (action) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6519) 	case HDA_FIXUP_ACT_PRE_PROBE:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6520) 		spec->gen.suppress_auto_mute = 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6521) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6522) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6523) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6524) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6525) /* for alc295_fixup_hp_top_speakers */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6526) #include "hp_x360_helper.c"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6527) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6528) /* for alc285_fixup_ideapad_s740_coef() */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6529) #include "ideapad_s740_helper.c"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6530) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6531) static const struct coef_fw alc256_fixup_set_coef_defaults_coefs[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6532) 	WRITE_COEF(0x10, 0x0020), WRITE_COEF(0x24, 0x0000),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6533) 	WRITE_COEF(0x26, 0x0000), WRITE_COEF(0x29, 0x3000),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6534) 	WRITE_COEF(0x37, 0xfe05), WRITE_COEF(0x45, 0x5089),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6535) 	{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6536) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6537) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6538) static void alc256_fixup_set_coef_defaults(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6539) 					   const struct hda_fixup *fix,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6540) 					   int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6541) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6542) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6543) 	 * A certain other OS sets these coeffs to different values. On at least
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6544) 	 * one TongFang barebone these settings might survive even a cold
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6545) 	 * reboot. So to restore a clean slate the values are explicitly reset
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6546) 	 * to default here. Without this, the external microphone is always in a
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6547) 	 * plugged-in state, while the internal microphone is always in an
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6548) 	 * unplugged state, breaking the ability to use the internal microphone.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6549) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6550) 	alc_process_coef_fw(codec, alc256_fixup_set_coef_defaults_coefs);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6551) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6552) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6553) static const struct coef_fw alc233_fixup_no_audio_jack_coefs[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6554) 	WRITE_COEF(0x1a, 0x9003), WRITE_COEF(0x1b, 0x0e2b), WRITE_COEF(0x37, 0xfe06),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6555) 	WRITE_COEF(0x38, 0x4981), WRITE_COEF(0x45, 0xd489), WRITE_COEF(0x46, 0x0074),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6556) 	WRITE_COEF(0x49, 0x0149),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6557) 	{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6558) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6559) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6560) static void alc233_fixup_no_audio_jack(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6561) 				       const struct hda_fixup *fix,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6562) 				       int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6563) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6564) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6565) 	 * The audio jack input and output is not detected on the ASRock NUC Box
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6566) 	 * 1100 series when cold booting without this fix. Warm rebooting from a
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6567) 	 * certain other OS makes the audio functional, as COEF settings are
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6568) 	 * preserved in this case. This fix sets these altered COEF values as
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6569) 	 * the default.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6570) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6571) 	alc_process_coef_fw(codec, alc233_fixup_no_audio_jack_coefs);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6572) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6573) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6574) static void alc256_fixup_mic_no_presence_and_resume(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6575) 						    const struct hda_fixup *fix,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6576) 						    int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6577) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6578) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6579) 	 * The Clevo NJ51CU comes either with the ALC293 or the ALC256 codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6580) 	 * but uses the 0x8686 subproduct id in both cases. The ALC256 codec
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6581) 	 * needs an additional quirk for sound working after suspend and resume.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6582) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6583) 	if (codec->core.vendor_id == 0x10ec0256) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6584) 		alc_update_coef_idx(codec, 0x10, 1<<9, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6585) 		snd_hda_codec_set_pincfg(codec, 0x19, 0x04a11120);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6586) 	} else {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6587) 		snd_hda_codec_set_pincfg(codec, 0x1a, 0x04a1113c);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6588) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6589) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6590) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6591) enum {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6592) 	ALC269_FIXUP_GPIO2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6593) 	ALC269_FIXUP_SONY_VAIO,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6594) 	ALC275_FIXUP_SONY_VAIO_GPIO2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6595) 	ALC269_FIXUP_DELL_M101Z,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6596) 	ALC269_FIXUP_SKU_IGNORE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6597) 	ALC269_FIXUP_ASUS_G73JW,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6598) 	ALC269_FIXUP_LENOVO_EAPD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6599) 	ALC275_FIXUP_SONY_HWEQ,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6600) 	ALC275_FIXUP_SONY_DISABLE_AAMIX,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6601) 	ALC271_FIXUP_DMIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6602) 	ALC269_FIXUP_PCM_44K,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6603) 	ALC269_FIXUP_STEREO_DMIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6604) 	ALC269_FIXUP_HEADSET_MIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6605) 	ALC269_FIXUP_QUANTA_MUTE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6606) 	ALC269_FIXUP_LIFEBOOK,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6607) 	ALC269_FIXUP_LIFEBOOK_EXTMIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6608) 	ALC269_FIXUP_LIFEBOOK_HP_PIN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6609) 	ALC269_FIXUP_LIFEBOOK_NO_HP_TO_LINEOUT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6610) 	ALC255_FIXUP_LIFEBOOK_U7x7_HEADSET_MIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6611) 	ALC269_FIXUP_AMIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6612) 	ALC269_FIXUP_DMIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6613) 	ALC269VB_FIXUP_AMIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6614) 	ALC269VB_FIXUP_DMIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6615) 	ALC269_FIXUP_HP_MUTE_LED,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6616) 	ALC269_FIXUP_HP_MUTE_LED_MIC1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6617) 	ALC269_FIXUP_HP_MUTE_LED_MIC2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6618) 	ALC269_FIXUP_HP_MUTE_LED_MIC3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6619) 	ALC269_FIXUP_HP_GPIO_LED,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6620) 	ALC269_FIXUP_HP_GPIO_MIC1_LED,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6621) 	ALC269_FIXUP_HP_LINE1_MIC1_LED,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6622) 	ALC269_FIXUP_INV_DMIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6623) 	ALC269_FIXUP_LENOVO_DOCK,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6624) 	ALC269_FIXUP_LENOVO_DOCK_LIMIT_BOOST,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6625) 	ALC269_FIXUP_NO_SHUTUP,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6626) 	ALC286_FIXUP_SONY_MIC_NO_PRESENCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6627) 	ALC269_FIXUP_PINCFG_NO_HP_TO_LINEOUT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6628) 	ALC269_FIXUP_DELL1_MIC_NO_PRESENCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6629) 	ALC269_FIXUP_DELL2_MIC_NO_PRESENCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6630) 	ALC269_FIXUP_DELL3_MIC_NO_PRESENCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6631) 	ALC269_FIXUP_DELL4_MIC_NO_PRESENCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6632) 	ALC269_FIXUP_HEADSET_MODE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6633) 	ALC269_FIXUP_HEADSET_MODE_NO_HP_MIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6634) 	ALC269_FIXUP_ASPIRE_HEADSET_MIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6635) 	ALC269_FIXUP_ASUS_X101_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6636) 	ALC269_FIXUP_ASUS_X101_VERB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6637) 	ALC269_FIXUP_ASUS_X101,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6638) 	ALC271_FIXUP_AMIC_MIC2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6639) 	ALC271_FIXUP_HP_GATE_MIC_JACK,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6640) 	ALC271_FIXUP_HP_GATE_MIC_JACK_E1_572,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6641) 	ALC269_FIXUP_ACER_AC700,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6642) 	ALC269_FIXUP_LIMIT_INT_MIC_BOOST,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6643) 	ALC269VB_FIXUP_ASUS_ZENBOOK,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6644) 	ALC269VB_FIXUP_ASUS_ZENBOOK_UX31A,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6645) 	ALC269_FIXUP_LIMIT_INT_MIC_BOOST_MUTE_LED,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6646) 	ALC269VB_FIXUP_ORDISSIMO_EVE2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6647) 	ALC283_FIXUP_CHROME_BOOK,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6648) 	ALC283_FIXUP_SENSE_COMBO_JACK,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6649) 	ALC282_FIXUP_ASUS_TX300,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6650) 	ALC283_FIXUP_INT_MIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6651) 	ALC290_FIXUP_MONO_SPEAKERS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6652) 	ALC290_FIXUP_MONO_SPEAKERS_HSJACK,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6653) 	ALC290_FIXUP_SUBWOOFER,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6654) 	ALC290_FIXUP_SUBWOOFER_HSJACK,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6655) 	ALC269_FIXUP_THINKPAD_ACPI,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6656) 	ALC269_FIXUP_DMIC_THINKPAD_ACPI,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6657) 	ALC255_FIXUP_ACER_MIC_NO_PRESENCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6658) 	ALC255_FIXUP_ASUS_MIC_NO_PRESENCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6659) 	ALC255_FIXUP_DELL1_MIC_NO_PRESENCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6660) 	ALC255_FIXUP_DELL2_MIC_NO_PRESENCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6661) 	ALC255_FIXUP_HEADSET_MODE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6662) 	ALC255_FIXUP_HEADSET_MODE_NO_HP_MIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6663) 	ALC293_FIXUP_DELL1_MIC_NO_PRESENCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6664) 	ALC292_FIXUP_TPT440_DOCK,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6665) 	ALC292_FIXUP_TPT440,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6666) 	ALC283_FIXUP_HEADSET_MIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6667) 	ALC255_FIXUP_MIC_MUTE_LED,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6668) 	ALC282_FIXUP_ASPIRE_V5_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6669) 	ALC269VB_FIXUP_ASPIRE_E1_COEF,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6670) 	ALC280_FIXUP_HP_GPIO4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6671) 	ALC286_FIXUP_HP_GPIO_LED,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6672) 	ALC280_FIXUP_HP_GPIO2_MIC_HOTKEY,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6673) 	ALC280_FIXUP_HP_DOCK_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6674) 	ALC269_FIXUP_HP_DOCK_GPIO_MIC1_LED,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6675) 	ALC280_FIXUP_HP_9480M,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6676) 	ALC245_FIXUP_HP_X360_AMP,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6677) 	ALC285_FIXUP_HP_SPECTRE_X360_EB1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6678) 	ALC288_FIXUP_DELL_HEADSET_MODE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6679) 	ALC288_FIXUP_DELL1_MIC_NO_PRESENCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6680) 	ALC288_FIXUP_DELL_XPS_13,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6681) 	ALC288_FIXUP_DISABLE_AAMIX,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6682) 	ALC292_FIXUP_DELL_E7X_AAMIX,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6683) 	ALC292_FIXUP_DELL_E7X,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6684) 	ALC292_FIXUP_DISABLE_AAMIX,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6685) 	ALC293_FIXUP_DISABLE_AAMIX_MULTIJACK,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6686) 	ALC298_FIXUP_ALIENWARE_MIC_NO_PRESENCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6687) 	ALC298_FIXUP_DELL1_MIC_NO_PRESENCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6688) 	ALC298_FIXUP_DELL_AIO_MIC_NO_PRESENCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6689) 	ALC275_FIXUP_DELL_XPS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6690) 	ALC293_FIXUP_LENOVO_SPK_NOISE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6691) 	ALC233_FIXUP_LENOVO_LINE2_MIC_HOTKEY,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6692) 	ALC255_FIXUP_DELL_SPK_NOISE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6693) 	ALC225_FIXUP_DISABLE_MIC_VREF,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6694) 	ALC225_FIXUP_DELL1_MIC_NO_PRESENCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6695) 	ALC295_FIXUP_DISABLE_DAC3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6696) 	ALC285_FIXUP_SPEAKER2_TO_DAC1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6697) 	ALC280_FIXUP_HP_HEADSET_MIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6698) 	ALC221_FIXUP_HP_FRONT_MIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6699) 	ALC292_FIXUP_TPT460,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6700) 	ALC298_FIXUP_SPK_VOLUME,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6701) 	ALC298_FIXUP_LENOVO_SPK_VOLUME,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6702) 	ALC256_FIXUP_DELL_INSPIRON_7559_SUBWOOFER,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6703) 	ALC269_FIXUP_ATIV_BOOK_8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6704) 	ALC221_FIXUP_HP_MIC_NO_PRESENCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6705) 	ALC256_FIXUP_ASUS_HEADSET_MODE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6706) 	ALC256_FIXUP_ASUS_MIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6707) 	ALC256_FIXUP_ASUS_AIO_GPIO2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6708) 	ALC233_FIXUP_ASUS_MIC_NO_PRESENCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6709) 	ALC233_FIXUP_EAPD_COEF_AND_MIC_NO_PRESENCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6710) 	ALC233_FIXUP_LENOVO_MULTI_CODECS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6711) 	ALC233_FIXUP_ACER_HEADSET_MIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6712) 	ALC294_FIXUP_LENOVO_MIC_LOCATION,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6713) 	ALC225_FIXUP_DELL_WYSE_MIC_NO_PRESENCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6714) 	ALC225_FIXUP_S3_POP_NOISE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6715) 	ALC700_FIXUP_INTEL_REFERENCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6716) 	ALC274_FIXUP_DELL_BIND_DACS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6717) 	ALC274_FIXUP_DELL_AIO_LINEOUT_VERB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6718) 	ALC298_FIXUP_TPT470_DOCK_FIX,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6719) 	ALC298_FIXUP_TPT470_DOCK,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6720) 	ALC255_FIXUP_DUMMY_LINEOUT_VERB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6721) 	ALC255_FIXUP_DELL_HEADSET_MIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6722) 	ALC256_FIXUP_HUAWEI_MACH_WX9_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6723) 	ALC298_FIXUP_HUAWEI_MBX_STEREO,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6724) 	ALC295_FIXUP_HP_X360,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6725) 	ALC221_FIXUP_HP_HEADSET_MIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6726) 	ALC285_FIXUP_LENOVO_HEADPHONE_NOISE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6727) 	ALC295_FIXUP_HP_AUTO_MUTE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6728) 	ALC286_FIXUP_ACER_AIO_MIC_NO_PRESENCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6729) 	ALC294_FIXUP_ASUS_MIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6730) 	ALC294_FIXUP_ASUS_HEADSET_MIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6731) 	ALC294_FIXUP_ASUS_SPK,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6732) 	ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6733) 	ALC285_FIXUP_LENOVO_PC_BEEP_IN_NOISE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6734) 	ALC255_FIXUP_ACER_HEADSET_MIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6735) 	ALC295_FIXUP_CHROME_BOOK,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6736) 	ALC225_FIXUP_HEADSET_JACK,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6737) 	ALC225_FIXUP_DELL_WYSE_AIO_MIC_NO_PRESENCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6738) 	ALC225_FIXUP_WYSE_AUTO_MUTE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6739) 	ALC225_FIXUP_WYSE_DISABLE_MIC_VREF,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6740) 	ALC286_FIXUP_ACER_AIO_HEADSET_MIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6741) 	ALC256_FIXUP_ASUS_HEADSET_MIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6742) 	ALC256_FIXUP_ASUS_MIC_NO_PRESENCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6743) 	ALC299_FIXUP_PREDATOR_SPK,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6744) 	ALC256_FIXUP_MEDION_HEADSET_NO_PRESENCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6745) 	ALC289_FIXUP_DELL_SPK2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6746) 	ALC289_FIXUP_DUAL_SPK,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6747) 	ALC294_FIXUP_SPK2_TO_DAC1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6748) 	ALC294_FIXUP_ASUS_DUAL_SPK,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6749) 	ALC285_FIXUP_THINKPAD_X1_GEN7,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6750) 	ALC285_FIXUP_THINKPAD_HEADSET_JACK,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6751) 	ALC294_FIXUP_ASUS_HPE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6752) 	ALC294_FIXUP_ASUS_COEF_1B,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6753) 	ALC294_FIXUP_ASUS_GX502_HP,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6754) 	ALC294_FIXUP_ASUS_GX502_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6755) 	ALC294_FIXUP_ASUS_GX502_VERBS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6756) 	ALC294_FIXUP_ASUS_GU502_HP,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6757) 	ALC294_FIXUP_ASUS_GU502_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6758) 	ALC294_FIXUP_ASUS_GU502_VERBS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6759) 	ALC285_FIXUP_HP_GPIO_LED,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6760) 	ALC285_FIXUP_HP_MUTE_LED,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6761) 	ALC236_FIXUP_HP_GPIO_LED,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6762) 	ALC236_FIXUP_HP_MUTE_LED,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6763) 	ALC236_FIXUP_HP_MUTE_LED_MICMUTE_VREF,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6764) 	ALC298_FIXUP_SAMSUNG_HEADPHONE_VERY_QUIET,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6765) 	ALC256_FIXUP_SAMSUNG_HEADPHONE_VERY_QUIET,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6766) 	ALC295_FIXUP_ASUS_MIC_NO_PRESENCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6767) 	ALC269VC_FIXUP_ACER_VCOPPERBOX_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6768) 	ALC269VC_FIXUP_ACER_HEADSET_MIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6769) 	ALC269VC_FIXUP_ACER_MIC_NO_PRESENCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6770) 	ALC289_FIXUP_ASUS_GA401,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6771) 	ALC289_FIXUP_ASUS_GA502,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6772) 	ALC256_FIXUP_ACER_MIC_NO_PRESENCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6773) 	ALC285_FIXUP_HP_GPIO_AMP_INIT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6774) 	ALC269_FIXUP_CZC_B20,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6775) 	ALC269_FIXUP_CZC_TMI,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6776) 	ALC269_FIXUP_CZC_L101,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6777) 	ALC269_FIXUP_LEMOTE_A1802,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6778) 	ALC269_FIXUP_LEMOTE_A190X,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6779) 	ALC256_FIXUP_INTEL_NUC8_RUGGED,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6780) 	ALC233_FIXUP_INTEL_NUC8_DMIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6781) 	ALC233_FIXUP_INTEL_NUC8_BOOST,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6782) 	ALC256_FIXUP_INTEL_NUC10,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6783) 	ALC255_FIXUP_XIAOMI_HEADSET_MIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6784) 	ALC274_FIXUP_HP_MIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6785) 	ALC274_FIXUP_HP_HEADSET_MIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6786) 	ALC274_FIXUP_HP_ENVY_GPIO,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6787) 	ALC256_FIXUP_ASUS_HPE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6788) 	ALC285_FIXUP_THINKPAD_NO_BASS_SPK_HEADSET_JACK,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6789) 	ALC287_FIXUP_HP_GPIO_LED,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6790) 	ALC256_FIXUP_HP_HEADSET_MIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6791) 	ALC245_FIXUP_HP_GPIO_LED,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6792) 	ALC236_FIXUP_DELL_AIO_HEADSET_MIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6793) 	ALC282_FIXUP_ACER_DISABLE_LINEOUT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6794) 	ALC255_FIXUP_ACER_LIMIT_INT_MIC_BOOST,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6795) 	ALC256_FIXUP_ACER_HEADSET_MIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6796) 	ALC285_FIXUP_IDEAPAD_S740_COEF,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6797) 	ALC295_FIXUP_ASUS_DACS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6798) 	ALC295_FIXUP_HP_OMEN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6799) 	ALC285_FIXUP_HP_SPECTRE_X360,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6800) 	ALC287_FIXUP_IDEAPAD_BASS_SPK_AMP,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6801) 	ALC623_FIXUP_LENOVO_THINKSTATION_P340,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6802) 	ALC255_FIXUP_ACER_HEADPHONE_AND_MIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6803) 	ALC236_FIXUP_HP_LIMIT_INT_MIC_BOOST,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6804) 	ALC287_FIXUP_LEGION_15IMHG05_SPEAKERS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6805) 	ALC287_FIXUP_LEGION_15IMHG05_AUTOMUTE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6806) 	ALC287_FIXUP_YOGA7_14ITL_SPEAKERS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6807) 	ALC287_FIXUP_13S_GEN2_SPEAKERS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6808) 	ALC256_FIXUP_SET_COEF_DEFAULTS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6809) 	ALC256_FIXUP_SYSTEM76_MIC_NO_PRESENCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6810) 	ALC233_FIXUP_NO_AUDIO_JACK,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6811) 	ALC256_FIXUP_MIC_NO_PRESENCE_AND_RESUME,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6812) 	ALC285_FIXUP_LEGION_Y9000X_SPEAKERS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6813) 	ALC285_FIXUP_LEGION_Y9000X_AUTOMUTE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6814) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6815) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6816) static const struct hda_fixup alc269_fixups[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6817) 	[ALC269_FIXUP_GPIO2] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6818) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6819) 		.v.func = alc_fixup_gpio2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6820) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6821) 	[ALC269_FIXUP_SONY_VAIO] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6822) 		.type = HDA_FIXUP_PINCTLS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6823) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6824) 			{0x19, PIN_VREFGRD},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6825) 			{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6826) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6827) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6828) 	[ALC275_FIXUP_SONY_VAIO_GPIO2] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6829) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6830) 		.v.func = alc275_fixup_gpio4_off,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6831) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6832) 		.chain_id = ALC269_FIXUP_SONY_VAIO
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6833) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6834) 	[ALC269_FIXUP_DELL_M101Z] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6835) 		.type = HDA_FIXUP_VERBS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6836) 		.v.verbs = (const struct hda_verb[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6837) 			/* Enables internal speaker */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6838) 			{0x20, AC_VERB_SET_COEF_INDEX, 13},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6839) 			{0x20, AC_VERB_SET_PROC_COEF, 0x4040},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6840) 			{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6841) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6842) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6843) 	[ALC269_FIXUP_SKU_IGNORE] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6844) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6845) 		.v.func = alc_fixup_sku_ignore,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6846) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6847) 	[ALC269_FIXUP_ASUS_G73JW] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6848) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6849) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6850) 			{ 0x17, 0x99130111 }, /* subwoofer */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6851) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6852) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6853) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6854) 	[ALC269_FIXUP_LENOVO_EAPD] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6855) 		.type = HDA_FIXUP_VERBS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6856) 		.v.verbs = (const struct hda_verb[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6857) 			{0x14, AC_VERB_SET_EAPD_BTLENABLE, 0},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6858) 			{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6859) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6860) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6861) 	[ALC275_FIXUP_SONY_HWEQ] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6862) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6863) 		.v.func = alc269_fixup_hweq,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6864) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6865) 		.chain_id = ALC275_FIXUP_SONY_VAIO_GPIO2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6866) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6867) 	[ALC275_FIXUP_SONY_DISABLE_AAMIX] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6868) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6869) 		.v.func = alc_fixup_disable_aamix,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6870) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6871) 		.chain_id = ALC269_FIXUP_SONY_VAIO
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6872) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6873) 	[ALC271_FIXUP_DMIC] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6874) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6875) 		.v.func = alc271_fixup_dmic,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6876) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6877) 	[ALC269_FIXUP_PCM_44K] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6878) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6879) 		.v.func = alc269_fixup_pcm_44k,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6880) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6881) 		.chain_id = ALC269_FIXUP_QUANTA_MUTE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6882) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6883) 	[ALC269_FIXUP_STEREO_DMIC] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6884) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6885) 		.v.func = alc269_fixup_stereo_dmic,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6886) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6887) 	[ALC269_FIXUP_HEADSET_MIC] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6888) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6889) 		.v.func = alc269_fixup_headset_mic,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6890) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6891) 	[ALC269_FIXUP_QUANTA_MUTE] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6892) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6893) 		.v.func = alc269_fixup_quanta_mute,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6894) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6895) 	[ALC269_FIXUP_LIFEBOOK] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6896) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6897) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6898) 			{ 0x1a, 0x2101103f }, /* dock line-out */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6899) 			{ 0x1b, 0x23a11040 }, /* dock mic-in */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6900) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6901) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6902) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6903) 		.chain_id = ALC269_FIXUP_QUANTA_MUTE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6904) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6905) 	[ALC269_FIXUP_LIFEBOOK_EXTMIC] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6906) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6907) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6908) 			{ 0x19, 0x01a1903c }, /* headset mic, with jack detect */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6909) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6910) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6911) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6912) 	[ALC269_FIXUP_LIFEBOOK_HP_PIN] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6913) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6914) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6915) 			{ 0x21, 0x0221102f }, /* HP out */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6916) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6917) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6918) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6919) 	[ALC269_FIXUP_LIFEBOOK_NO_HP_TO_LINEOUT] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6920) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6921) 		.v.func = alc269_fixup_pincfg_no_hp_to_lineout,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6922) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6923) 	[ALC255_FIXUP_LIFEBOOK_U7x7_HEADSET_MIC] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6924) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6925) 		.v.func = alc269_fixup_pincfg_U7x7_headset_mic,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6926) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6927) 	[ALC269_FIXUP_AMIC] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6928) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6929) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6930) 			{ 0x14, 0x99130110 }, /* speaker */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6931) 			{ 0x15, 0x0121401f }, /* HP out */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6932) 			{ 0x18, 0x01a19c20 }, /* mic */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6933) 			{ 0x19, 0x99a3092f }, /* int-mic */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6934) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6935) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6936) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6937) 	[ALC269_FIXUP_DMIC] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6938) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6939) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6940) 			{ 0x12, 0x99a3092f }, /* int-mic */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6941) 			{ 0x14, 0x99130110 }, /* speaker */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6942) 			{ 0x15, 0x0121401f }, /* HP out */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6943) 			{ 0x18, 0x01a19c20 }, /* mic */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6944) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6945) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6946) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6947) 	[ALC269VB_FIXUP_AMIC] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6948) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6949) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6950) 			{ 0x14, 0x99130110 }, /* speaker */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6951) 			{ 0x18, 0x01a19c20 }, /* mic */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6952) 			{ 0x19, 0x99a3092f }, /* int-mic */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6953) 			{ 0x21, 0x0121401f }, /* HP out */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6954) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6955) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6956) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6957) 	[ALC269VB_FIXUP_DMIC] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6958) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6959) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6960) 			{ 0x12, 0x99a3092f }, /* int-mic */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6961) 			{ 0x14, 0x99130110 }, /* speaker */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6962) 			{ 0x18, 0x01a19c20 }, /* mic */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6963) 			{ 0x21, 0x0121401f }, /* HP out */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6964) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6965) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6966) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6967) 	[ALC269_FIXUP_HP_MUTE_LED] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6968) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6969) 		.v.func = alc269_fixup_hp_mute_led,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6970) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6971) 	[ALC269_FIXUP_HP_MUTE_LED_MIC1] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6972) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6973) 		.v.func = alc269_fixup_hp_mute_led_mic1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6974) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6975) 	[ALC269_FIXUP_HP_MUTE_LED_MIC2] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6976) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6977) 		.v.func = alc269_fixup_hp_mute_led_mic2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6978) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6979) 	[ALC269_FIXUP_HP_MUTE_LED_MIC3] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6980) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6981) 		.v.func = alc269_fixup_hp_mute_led_mic3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6982) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6983) 		.chain_id = ALC295_FIXUP_HP_AUTO_MUTE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6984) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6985) 	[ALC269_FIXUP_HP_GPIO_LED] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6986) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6987) 		.v.func = alc269_fixup_hp_gpio_led,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6988) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6989) 	[ALC269_FIXUP_HP_GPIO_MIC1_LED] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6990) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6991) 		.v.func = alc269_fixup_hp_gpio_mic1_led,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6992) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6993) 	[ALC269_FIXUP_HP_LINE1_MIC1_LED] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6994) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6995) 		.v.func = alc269_fixup_hp_line1_mic1_led,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6996) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6997) 	[ALC269_FIXUP_INV_DMIC] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6998) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6999) 		.v.func = alc_fixup_inv_dmic,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7000) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7001) 	[ALC269_FIXUP_NO_SHUTUP] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7002) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7003) 		.v.func = alc_fixup_no_shutup,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7004) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7005) 	[ALC269_FIXUP_LENOVO_DOCK] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7006) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7007) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7008) 			{ 0x19, 0x23a11040 }, /* dock mic */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7009) 			{ 0x1b, 0x2121103f }, /* dock headphone */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7010) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7011) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7012) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7013) 		.chain_id = ALC269_FIXUP_PINCFG_NO_HP_TO_LINEOUT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7014) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7015) 	[ALC269_FIXUP_LENOVO_DOCK_LIMIT_BOOST] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7016) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7017) 		.v.func = alc269_fixup_limit_int_mic_boost,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7018) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7019) 		.chain_id = ALC269_FIXUP_LENOVO_DOCK,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7020) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7021) 	[ALC269_FIXUP_PINCFG_NO_HP_TO_LINEOUT] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7022) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7023) 		.v.func = alc269_fixup_pincfg_no_hp_to_lineout,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7024) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7025) 		.chain_id = ALC269_FIXUP_THINKPAD_ACPI,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7026) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7027) 	[ALC269_FIXUP_DELL1_MIC_NO_PRESENCE] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7028) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7029) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7030) 			{ 0x19, 0x01a1913c }, /* use as headset mic, without its own jack detect */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7031) 			{ 0x1a, 0x01a1913d }, /* use as headphone mic, without its own jack detect */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7032) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7033) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7034) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7035) 		.chain_id = ALC269_FIXUP_HEADSET_MODE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7036) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7037) 	[ALC269_FIXUP_DELL2_MIC_NO_PRESENCE] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7038) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7039) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7040) 			{ 0x16, 0x21014020 }, /* dock line out */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7041) 			{ 0x19, 0x21a19030 }, /* dock mic */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7042) 			{ 0x1a, 0x01a1913c }, /* use as headset mic, without its own jack detect */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7043) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7044) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7045) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7046) 		.chain_id = ALC269_FIXUP_HEADSET_MODE_NO_HP_MIC
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7047) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7048) 	[ALC269_FIXUP_DELL3_MIC_NO_PRESENCE] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7049) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7050) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7051) 			{ 0x1a, 0x01a1913c }, /* use as headset mic, without its own jack detect */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7052) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7053) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7054) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7055) 		.chain_id = ALC269_FIXUP_HEADSET_MODE_NO_HP_MIC
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7056) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7057) 	[ALC269_FIXUP_DELL4_MIC_NO_PRESENCE] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7058) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7059) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7060) 			{ 0x19, 0x01a1913c }, /* use as headset mic, without its own jack detect */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7061) 			{ 0x1b, 0x01a1913d }, /* use as headphone mic, without its own jack detect */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7062) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7063) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7064) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7065) 		.chain_id = ALC269_FIXUP_HEADSET_MODE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7066) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7067) 	[ALC269_FIXUP_HEADSET_MODE] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7068) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7069) 		.v.func = alc_fixup_headset_mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7070) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7071) 		.chain_id = ALC255_FIXUP_MIC_MUTE_LED
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7072) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7073) 	[ALC269_FIXUP_HEADSET_MODE_NO_HP_MIC] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7074) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7075) 		.v.func = alc_fixup_headset_mode_no_hp_mic,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7076) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7077) 	[ALC269_FIXUP_ASPIRE_HEADSET_MIC] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7078) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7079) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7080) 			{ 0x19, 0x01a1913c }, /* headset mic w/o jack detect */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7081) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7082) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7083) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7084) 		.chain_id = ALC269_FIXUP_HEADSET_MODE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7085) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7086) 	[ALC286_FIXUP_SONY_MIC_NO_PRESENCE] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7087) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7088) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7089) 			{ 0x18, 0x01a1913c }, /* use as headset mic, without its own jack detect */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7090) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7091) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7092) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7093) 		.chain_id = ALC269_FIXUP_HEADSET_MIC
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7094) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7095) 	[ALC256_FIXUP_HUAWEI_MACH_WX9_PINS] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7096) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7097) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7098) 			{0x12, 0x90a60130},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7099) 			{0x13, 0x40000000},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7100) 			{0x14, 0x90170110},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7101) 			{0x18, 0x411111f0},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7102) 			{0x19, 0x04a11040},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7103) 			{0x1a, 0x411111f0},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7104) 			{0x1b, 0x90170112},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7105) 			{0x1d, 0x40759a05},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7106) 			{0x1e, 0x411111f0},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7107) 			{0x21, 0x04211020},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7108) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7109) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7110) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7111) 		.chain_id = ALC255_FIXUP_MIC_MUTE_LED
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7112) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7113) 	[ALC298_FIXUP_HUAWEI_MBX_STEREO] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7114) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7115) 		.v.func = alc298_fixup_huawei_mbx_stereo,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7116) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7117) 		.chain_id = ALC255_FIXUP_MIC_MUTE_LED
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7118) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7119) 	[ALC269_FIXUP_ASUS_X101_FUNC] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7120) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7121) 		.v.func = alc269_fixup_x101_headset_mic,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7122) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7123) 	[ALC269_FIXUP_ASUS_X101_VERB] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7124) 		.type = HDA_FIXUP_VERBS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7125) 		.v.verbs = (const struct hda_verb[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7126) 			{0x18, AC_VERB_SET_PIN_WIDGET_CONTROL, 0},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7127) 			{0x20, AC_VERB_SET_COEF_INDEX, 0x08},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7128) 			{0x20, AC_VERB_SET_PROC_COEF,  0x0310},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7129) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7130) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7131) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7132) 		.chain_id = ALC269_FIXUP_ASUS_X101_FUNC
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7133) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7134) 	[ALC269_FIXUP_ASUS_X101] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7135) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7136) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7137) 			{ 0x18, 0x04a1182c }, /* Headset mic */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7138) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7139) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7140) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7141) 		.chain_id = ALC269_FIXUP_ASUS_X101_VERB
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7142) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7143) 	[ALC271_FIXUP_AMIC_MIC2] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7144) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7145) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7146) 			{ 0x14, 0x99130110 }, /* speaker */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7147) 			{ 0x19, 0x01a19c20 }, /* mic */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7148) 			{ 0x1b, 0x99a7012f }, /* int-mic */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7149) 			{ 0x21, 0x0121401f }, /* HP out */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7150) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7151) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7152) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7153) 	[ALC271_FIXUP_HP_GATE_MIC_JACK] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7154) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7155) 		.v.func = alc271_hp_gate_mic_jack,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7156) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7157) 		.chain_id = ALC271_FIXUP_AMIC_MIC2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7158) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7159) 	[ALC271_FIXUP_HP_GATE_MIC_JACK_E1_572] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7160) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7161) 		.v.func = alc269_fixup_limit_int_mic_boost,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7162) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7163) 		.chain_id = ALC271_FIXUP_HP_GATE_MIC_JACK,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7164) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7165) 	[ALC269_FIXUP_ACER_AC700] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7166) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7167) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7168) 			{ 0x12, 0x99a3092f }, /* int-mic */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7169) 			{ 0x14, 0x99130110 }, /* speaker */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7170) 			{ 0x18, 0x03a11c20 }, /* mic */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7171) 			{ 0x1e, 0x0346101e }, /* SPDIF1 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7172) 			{ 0x21, 0x0321101f }, /* HP out */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7173) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7174) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7175) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7176) 		.chain_id = ALC271_FIXUP_DMIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7177) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7178) 	[ALC269_FIXUP_LIMIT_INT_MIC_BOOST] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7179) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7180) 		.v.func = alc269_fixup_limit_int_mic_boost,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7181) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7182) 		.chain_id = ALC269_FIXUP_THINKPAD_ACPI,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7183) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7184) 	[ALC269VB_FIXUP_ASUS_ZENBOOK] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7185) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7186) 		.v.func = alc269_fixup_limit_int_mic_boost,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7187) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7188) 		.chain_id = ALC269VB_FIXUP_DMIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7189) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7190) 	[ALC269VB_FIXUP_ASUS_ZENBOOK_UX31A] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7191) 		.type = HDA_FIXUP_VERBS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7192) 		.v.verbs = (const struct hda_verb[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7193) 			/* class-D output amp +5dB */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7194) 			{ 0x20, AC_VERB_SET_COEF_INDEX, 0x12 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7195) 			{ 0x20, AC_VERB_SET_PROC_COEF, 0x2800 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7196) 			{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7197) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7198) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7199) 		.chain_id = ALC269VB_FIXUP_ASUS_ZENBOOK,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7200) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7201) 	[ALC269_FIXUP_LIMIT_INT_MIC_BOOST_MUTE_LED] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7202) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7203) 		.v.func = alc269_fixup_limit_int_mic_boost,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7204) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7205) 		.chain_id = ALC269_FIXUP_HP_MUTE_LED_MIC1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7206) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7207) 	[ALC269VB_FIXUP_ORDISSIMO_EVE2] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7208) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7209) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7210) 			{ 0x12, 0x99a3092f }, /* int-mic */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7211) 			{ 0x18, 0x03a11d20 }, /* mic */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7212) 			{ 0x19, 0x411111f0 }, /* Unused bogus pin */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7213) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7214) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7215) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7216) 	[ALC283_FIXUP_CHROME_BOOK] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7217) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7218) 		.v.func = alc283_fixup_chromebook,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7219) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7220) 	[ALC283_FIXUP_SENSE_COMBO_JACK] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7221) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7222) 		.v.func = alc283_fixup_sense_combo_jack,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7223) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7224) 		.chain_id = ALC283_FIXUP_CHROME_BOOK,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7225) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7226) 	[ALC282_FIXUP_ASUS_TX300] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7227) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7228) 		.v.func = alc282_fixup_asus_tx300,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7229) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7230) 	[ALC283_FIXUP_INT_MIC] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7231) 		.type = HDA_FIXUP_VERBS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7232) 		.v.verbs = (const struct hda_verb[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7233) 			{0x20, AC_VERB_SET_COEF_INDEX, 0x1a},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7234) 			{0x20, AC_VERB_SET_PROC_COEF, 0x0011},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7235) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7236) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7237) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7238) 		.chain_id = ALC269_FIXUP_LIMIT_INT_MIC_BOOST
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7239) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7240) 	[ALC290_FIXUP_SUBWOOFER_HSJACK] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7241) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7242) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7243) 			{ 0x17, 0x90170112 }, /* subwoofer */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7244) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7245) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7246) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7247) 		.chain_id = ALC290_FIXUP_MONO_SPEAKERS_HSJACK,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7248) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7249) 	[ALC290_FIXUP_SUBWOOFER] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7250) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7251) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7252) 			{ 0x17, 0x90170112 }, /* subwoofer */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7253) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7254) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7255) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7256) 		.chain_id = ALC290_FIXUP_MONO_SPEAKERS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7257) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7258) 	[ALC290_FIXUP_MONO_SPEAKERS] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7259) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7260) 		.v.func = alc290_fixup_mono_speakers,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7261) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7262) 	[ALC290_FIXUP_MONO_SPEAKERS_HSJACK] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7263) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7264) 		.v.func = alc290_fixup_mono_speakers,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7265) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7266) 		.chain_id = ALC269_FIXUP_DELL3_MIC_NO_PRESENCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7267) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7268) 	[ALC269_FIXUP_THINKPAD_ACPI] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7269) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7270) 		.v.func = alc_fixup_thinkpad_acpi,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7271) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7272) 		.chain_id = ALC269_FIXUP_SKU_IGNORE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7273) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7274) 	[ALC269_FIXUP_DMIC_THINKPAD_ACPI] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7275) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7276) 		.v.func = alc_fixup_inv_dmic,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7277) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7278) 		.chain_id = ALC269_FIXUP_THINKPAD_ACPI,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7279) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7280) 	[ALC255_FIXUP_ACER_MIC_NO_PRESENCE] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7281) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7282) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7283) 			{ 0x19, 0x01a1913c }, /* use as headset mic, without its own jack detect */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7284) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7285) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7286) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7287) 		.chain_id = ALC255_FIXUP_HEADSET_MODE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7288) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7289) 	[ALC255_FIXUP_ASUS_MIC_NO_PRESENCE] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7290) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7291) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7292) 			{ 0x19, 0x01a1913c }, /* use as headset mic, without its own jack detect */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7293) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7294) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7295) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7296) 		.chain_id = ALC255_FIXUP_HEADSET_MODE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7297) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7298) 	[ALC255_FIXUP_DELL1_MIC_NO_PRESENCE] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7299) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7300) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7301) 			{ 0x19, 0x01a1913c }, /* use as headset mic, without its own jack detect */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7302) 			{ 0x1a, 0x01a1913d }, /* use as headphone mic, without its own jack detect */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7303) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7304) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7305) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7306) 		.chain_id = ALC255_FIXUP_HEADSET_MODE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7307) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7308) 	[ALC255_FIXUP_DELL2_MIC_NO_PRESENCE] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7309) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7310) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7311) 			{ 0x19, 0x01a1913c }, /* use as headset mic, without its own jack detect */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7312) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7313) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7314) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7315) 		.chain_id = ALC255_FIXUP_HEADSET_MODE_NO_HP_MIC
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7316) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7317) 	[ALC255_FIXUP_HEADSET_MODE] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7318) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7319) 		.v.func = alc_fixup_headset_mode_alc255,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7320) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7321) 		.chain_id = ALC255_FIXUP_MIC_MUTE_LED
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7322) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7323) 	[ALC255_FIXUP_HEADSET_MODE_NO_HP_MIC] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7324) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7325) 		.v.func = alc_fixup_headset_mode_alc255_no_hp_mic,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7326) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7327) 	[ALC293_FIXUP_DELL1_MIC_NO_PRESENCE] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7328) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7329) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7330) 			{ 0x18, 0x01a1913d }, /* use as headphone mic, without its own jack detect */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7331) 			{ 0x1a, 0x01a1913c }, /* use as headset mic, without its own jack detect */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7332) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7333) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7334) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7335) 		.chain_id = ALC269_FIXUP_HEADSET_MODE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7336) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7337) 	[ALC292_FIXUP_TPT440_DOCK] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7338) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7339) 		.v.func = alc_fixup_tpt440_dock,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7340) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7341) 		.chain_id = ALC269_FIXUP_LIMIT_INT_MIC_BOOST
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7342) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7343) 	[ALC292_FIXUP_TPT440] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7344) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7345) 		.v.func = alc_fixup_disable_aamix,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7346) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7347) 		.chain_id = ALC292_FIXUP_TPT440_DOCK,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7348) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7349) 	[ALC283_FIXUP_HEADSET_MIC] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7350) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7351) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7352) 			{ 0x19, 0x04a110f0 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7353) 			{ },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7354) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7355) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7356) 	[ALC255_FIXUP_MIC_MUTE_LED] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7357) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7358) 		.v.func = alc_fixup_micmute_led,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7359) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7360) 	[ALC282_FIXUP_ASPIRE_V5_PINS] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7361) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7362) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7363) 			{ 0x12, 0x90a60130 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7364) 			{ 0x14, 0x90170110 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7365) 			{ 0x17, 0x40000008 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7366) 			{ 0x18, 0x411111f0 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7367) 			{ 0x19, 0x01a1913c },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7368) 			{ 0x1a, 0x411111f0 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7369) 			{ 0x1b, 0x411111f0 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7370) 			{ 0x1d, 0x40f89b2d },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7371) 			{ 0x1e, 0x411111f0 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7372) 			{ 0x21, 0x0321101f },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7373) 			{ },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7374) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7375) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7376) 	[ALC269VB_FIXUP_ASPIRE_E1_COEF] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7377) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7378) 		.v.func = alc269vb_fixup_aspire_e1_coef,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7379) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7380) 	[ALC280_FIXUP_HP_GPIO4] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7381) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7382) 		.v.func = alc280_fixup_hp_gpio4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7383) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7384) 	[ALC286_FIXUP_HP_GPIO_LED] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7385) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7386) 		.v.func = alc286_fixup_hp_gpio_led,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7387) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7388) 	[ALC280_FIXUP_HP_GPIO2_MIC_HOTKEY] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7389) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7390) 		.v.func = alc280_fixup_hp_gpio2_mic_hotkey,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7391) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7392) 	[ALC280_FIXUP_HP_DOCK_PINS] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7393) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7394) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7395) 			{ 0x1b, 0x21011020 }, /* line-out */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7396) 			{ 0x1a, 0x01a1903c }, /* headset mic */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7397) 			{ 0x18, 0x2181103f }, /* line-in */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7398) 			{ },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7399) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7400) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7401) 		.chain_id = ALC280_FIXUP_HP_GPIO4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7402) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7403) 	[ALC269_FIXUP_HP_DOCK_GPIO_MIC1_LED] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7404) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7405) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7406) 			{ 0x1b, 0x21011020 }, /* line-out */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7407) 			{ 0x18, 0x2181103f }, /* line-in */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7408) 			{ },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7409) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7410) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7411) 		.chain_id = ALC269_FIXUP_HP_GPIO_MIC1_LED
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7412) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7413) 	[ALC280_FIXUP_HP_9480M] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7414) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7415) 		.v.func = alc280_fixup_hp_9480m,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7416) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7417) 	[ALC245_FIXUP_HP_X360_AMP] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7418) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7419) 		.v.func = alc245_fixup_hp_x360_amp,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7420) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7421) 		.chain_id = ALC245_FIXUP_HP_GPIO_LED
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7422) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7423) 	[ALC288_FIXUP_DELL_HEADSET_MODE] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7424) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7425) 		.v.func = alc_fixup_headset_mode_dell_alc288,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7426) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7427) 		.chain_id = ALC255_FIXUP_MIC_MUTE_LED
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7428) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7429) 	[ALC288_FIXUP_DELL1_MIC_NO_PRESENCE] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7430) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7431) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7432) 			{ 0x18, 0x01a1913c }, /* use as headset mic, without its own jack detect */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7433) 			{ 0x1a, 0x01a1913d }, /* use as headphone mic, without its own jack detect */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7434) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7435) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7436) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7437) 		.chain_id = ALC288_FIXUP_DELL_HEADSET_MODE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7438) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7439) 	[ALC288_FIXUP_DISABLE_AAMIX] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7440) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7441) 		.v.func = alc_fixup_disable_aamix,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7442) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7443) 		.chain_id = ALC288_FIXUP_DELL1_MIC_NO_PRESENCE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7444) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7445) 	[ALC288_FIXUP_DELL_XPS_13] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7446) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7447) 		.v.func = alc_fixup_dell_xps13,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7448) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7449) 		.chain_id = ALC288_FIXUP_DISABLE_AAMIX
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7450) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7451) 	[ALC292_FIXUP_DISABLE_AAMIX] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7452) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7453) 		.v.func = alc_fixup_disable_aamix,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7454) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7455) 		.chain_id = ALC269_FIXUP_DELL2_MIC_NO_PRESENCE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7456) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7457) 	[ALC293_FIXUP_DISABLE_AAMIX_MULTIJACK] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7458) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7459) 		.v.func = alc_fixup_disable_aamix,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7460) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7461) 		.chain_id = ALC293_FIXUP_DELL1_MIC_NO_PRESENCE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7462) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7463) 	[ALC292_FIXUP_DELL_E7X_AAMIX] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7464) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7465) 		.v.func = alc_fixup_dell_xps13,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7466) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7467) 		.chain_id = ALC292_FIXUP_DISABLE_AAMIX
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7468) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7469) 	[ALC292_FIXUP_DELL_E7X] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7470) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7471) 		.v.func = alc_fixup_micmute_led,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7472) 		/* micmute fixup must be applied at last */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7473) 		.chained_before = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7474) 		.chain_id = ALC292_FIXUP_DELL_E7X_AAMIX,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7475) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7476) 	[ALC298_FIXUP_ALIENWARE_MIC_NO_PRESENCE] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7477) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7478) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7479) 			{ 0x18, 0x01a1913c }, /* headset mic w/o jack detect */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7480) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7481) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7482) 		.chained_before = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7483) 		.chain_id = ALC269_FIXUP_HEADSET_MODE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7484) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7485) 	[ALC298_FIXUP_DELL1_MIC_NO_PRESENCE] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7486) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7487) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7488) 			{ 0x18, 0x01a1913c }, /* use as headset mic, without its own jack detect */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7489) 			{ 0x1a, 0x01a1913d }, /* use as headphone mic, without its own jack detect */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7490) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7491) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7492) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7493) 		.chain_id = ALC269_FIXUP_HEADSET_MODE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7494) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7495) 	[ALC298_FIXUP_DELL_AIO_MIC_NO_PRESENCE] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7496) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7497) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7498) 			{ 0x18, 0x01a1913c }, /* use as headset mic, without its own jack detect */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7499) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7500) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7501) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7502) 		.chain_id = ALC269_FIXUP_HEADSET_MODE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7503) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7504) 	[ALC275_FIXUP_DELL_XPS] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7505) 		.type = HDA_FIXUP_VERBS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7506) 		.v.verbs = (const struct hda_verb[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7507) 			/* Enables internal speaker */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7508) 			{0x20, AC_VERB_SET_COEF_INDEX, 0x1f},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7509) 			{0x20, AC_VERB_SET_PROC_COEF, 0x00c0},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7510) 			{0x20, AC_VERB_SET_COEF_INDEX, 0x30},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7511) 			{0x20, AC_VERB_SET_PROC_COEF, 0x00b1},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7512) 			{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7513) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7514) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7515) 	[ALC293_FIXUP_LENOVO_SPK_NOISE] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7516) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7517) 		.v.func = alc_fixup_disable_aamix,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7518) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7519) 		.chain_id = ALC269_FIXUP_THINKPAD_ACPI
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7520) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7521) 	[ALC233_FIXUP_LENOVO_LINE2_MIC_HOTKEY] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7522) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7523) 		.v.func = alc233_fixup_lenovo_line2_mic_hotkey,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7524) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7525) 	[ALC233_FIXUP_INTEL_NUC8_DMIC] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7526) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7527) 		.v.func = alc_fixup_inv_dmic,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7528) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7529) 		.chain_id = ALC233_FIXUP_INTEL_NUC8_BOOST,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7530) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7531) 	[ALC233_FIXUP_INTEL_NUC8_BOOST] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7532) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7533) 		.v.func = alc269_fixup_limit_int_mic_boost
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7534) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7535) 	[ALC255_FIXUP_DELL_SPK_NOISE] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7536) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7537) 		.v.func = alc_fixup_disable_aamix,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7538) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7539) 		.chain_id = ALC255_FIXUP_DELL1_MIC_NO_PRESENCE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7540) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7541) 	[ALC225_FIXUP_DISABLE_MIC_VREF] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7542) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7543) 		.v.func = alc_fixup_disable_mic_vref,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7544) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7545) 		.chain_id = ALC269_FIXUP_DELL1_MIC_NO_PRESENCE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7546) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7547) 	[ALC225_FIXUP_DELL1_MIC_NO_PRESENCE] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7548) 		.type = HDA_FIXUP_VERBS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7549) 		.v.verbs = (const struct hda_verb[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7550) 			/* Disable pass-through path for FRONT 14h */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7551) 			{ 0x20, AC_VERB_SET_COEF_INDEX, 0x36 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7552) 			{ 0x20, AC_VERB_SET_PROC_COEF, 0x57d7 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7553) 			{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7554) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7555) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7556) 		.chain_id = ALC225_FIXUP_DISABLE_MIC_VREF
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7557) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7558) 	[ALC280_FIXUP_HP_HEADSET_MIC] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7559) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7560) 		.v.func = alc_fixup_disable_aamix,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7561) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7562) 		.chain_id = ALC269_FIXUP_HEADSET_MIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7563) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7564) 	[ALC221_FIXUP_HP_FRONT_MIC] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7565) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7566) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7567) 			{ 0x19, 0x02a19020 }, /* Front Mic */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7568) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7569) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7570) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7571) 	[ALC292_FIXUP_TPT460] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7572) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7573) 		.v.func = alc_fixup_tpt440_dock,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7574) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7575) 		.chain_id = ALC293_FIXUP_LENOVO_SPK_NOISE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7576) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7577) 	[ALC298_FIXUP_SPK_VOLUME] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7578) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7579) 		.v.func = alc298_fixup_speaker_volume,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7580) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7581) 		.chain_id = ALC298_FIXUP_DELL_AIO_MIC_NO_PRESENCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7582) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7583) 	[ALC298_FIXUP_LENOVO_SPK_VOLUME] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7584) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7585) 		.v.func = alc298_fixup_speaker_volume,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7586) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7587) 	[ALC295_FIXUP_DISABLE_DAC3] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7588) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7589) 		.v.func = alc295_fixup_disable_dac3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7590) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7591) 	[ALC285_FIXUP_SPEAKER2_TO_DAC1] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7592) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7593) 		.v.func = alc285_fixup_speaker2_to_dac1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7594) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7595) 		.chain_id = ALC269_FIXUP_THINKPAD_ACPI
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7596) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7597) 	[ALC256_FIXUP_DELL_INSPIRON_7559_SUBWOOFER] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7598) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7599) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7600) 			{ 0x1b, 0x90170151 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7601) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7602) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7603) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7604) 		.chain_id = ALC255_FIXUP_DELL1_MIC_NO_PRESENCE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7605) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7606) 	[ALC269_FIXUP_ATIV_BOOK_8] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7607) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7608) 		.v.func = alc_fixup_auto_mute_via_amp,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7609) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7610) 		.chain_id = ALC269_FIXUP_NO_SHUTUP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7611) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7612) 	[ALC221_FIXUP_HP_MIC_NO_PRESENCE] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7613) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7614) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7615) 			{ 0x18, 0x01a1913c }, /* use as headset mic, without its own jack detect */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7616) 			{ 0x1a, 0x01a1913d }, /* use as headphone mic, without its own jack detect */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7617) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7618) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7619) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7620) 		.chain_id = ALC269_FIXUP_HEADSET_MODE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7621) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7622) 	[ALC256_FIXUP_ASUS_HEADSET_MODE] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7623) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7624) 		.v.func = alc_fixup_headset_mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7625) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7626) 	[ALC256_FIXUP_ASUS_MIC] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7627) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7628) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7629) 			{ 0x13, 0x90a60160 }, /* use as internal mic */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7630) 			{ 0x19, 0x04a11120 }, /* use as headset mic, without its own jack detect */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7631) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7632) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7633) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7634) 		.chain_id = ALC256_FIXUP_ASUS_HEADSET_MODE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7635) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7636) 	[ALC256_FIXUP_ASUS_AIO_GPIO2] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7637) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7638) 		/* Set up GPIO2 for the speaker amp */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7639) 		.v.func = alc_fixup_gpio4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7640) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7641) 	[ALC233_FIXUP_ASUS_MIC_NO_PRESENCE] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7642) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7643) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7644) 			{ 0x19, 0x01a1913c }, /* use as headset mic, without its own jack detect */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7645) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7646) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7647) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7648) 		.chain_id = ALC269_FIXUP_HEADSET_MIC
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7649) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7650) 	[ALC233_FIXUP_EAPD_COEF_AND_MIC_NO_PRESENCE] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7651) 		.type = HDA_FIXUP_VERBS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7652) 		.v.verbs = (const struct hda_verb[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7653) 			/* Enables internal speaker */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7654) 			{0x20, AC_VERB_SET_COEF_INDEX, 0x40},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7655) 			{0x20, AC_VERB_SET_PROC_COEF, 0x8800},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7656) 			{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7657) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7658) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7659) 		.chain_id = ALC233_FIXUP_ASUS_MIC_NO_PRESENCE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7660) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7661) 	[ALC233_FIXUP_LENOVO_MULTI_CODECS] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7662) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7663) 		.v.func = alc233_alc662_fixup_lenovo_dual_codecs,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7664) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7665) 		.chain_id = ALC269_FIXUP_GPIO2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7666) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7667) 	[ALC233_FIXUP_ACER_HEADSET_MIC] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7668) 		.type = HDA_FIXUP_VERBS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7669) 		.v.verbs = (const struct hda_verb[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7670) 			{ 0x20, AC_VERB_SET_COEF_INDEX, 0x45 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7671) 			{ 0x20, AC_VERB_SET_PROC_COEF, 0x5089 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7672) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7673) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7674) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7675) 		.chain_id = ALC233_FIXUP_ASUS_MIC_NO_PRESENCE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7676) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7677) 	[ALC294_FIXUP_LENOVO_MIC_LOCATION] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7678) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7679) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7680) 			/* Change the mic location from front to right, otherwise there are
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7681) 			   two front mics with the same name, pulseaudio can't handle them.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7682) 			   This is just a temporary workaround, after applying this fixup,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7683) 			   there will be one "Front Mic" and one "Mic" in this machine.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7684) 			 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7685) 			{ 0x1a, 0x04a19040 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7686) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7687) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7688) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7689) 	[ALC225_FIXUP_DELL_WYSE_MIC_NO_PRESENCE] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7690) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7691) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7692) 			{ 0x16, 0x0101102f }, /* Rear Headset HP */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7693) 			{ 0x19, 0x02a1913c }, /* use as Front headset mic, without its own jack detect */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7694) 			{ 0x1a, 0x01a19030 }, /* Rear Headset MIC */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7695) 			{ 0x1b, 0x02011020 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7696) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7697) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7698) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7699) 		.chain_id = ALC225_FIXUP_S3_POP_NOISE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7700) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7701) 	[ALC225_FIXUP_S3_POP_NOISE] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7702) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7703) 		.v.func = alc225_fixup_s3_pop_noise,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7704) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7705) 		.chain_id = ALC269_FIXUP_HEADSET_MODE_NO_HP_MIC
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7706) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7707) 	[ALC700_FIXUP_INTEL_REFERENCE] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7708) 		.type = HDA_FIXUP_VERBS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7709) 		.v.verbs = (const struct hda_verb[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7710) 			/* Enables internal speaker */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7711) 			{0x20, AC_VERB_SET_COEF_INDEX, 0x45},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7712) 			{0x20, AC_VERB_SET_PROC_COEF, 0x5289},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7713) 			{0x20, AC_VERB_SET_COEF_INDEX, 0x4A},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7714) 			{0x20, AC_VERB_SET_PROC_COEF, 0x001b},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7715) 			{0x58, AC_VERB_SET_COEF_INDEX, 0x00},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7716) 			{0x58, AC_VERB_SET_PROC_COEF, 0x3888},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7717) 			{0x20, AC_VERB_SET_COEF_INDEX, 0x6f},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7718) 			{0x20, AC_VERB_SET_PROC_COEF, 0x2c0b},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7719) 			{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7720) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7721) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7722) 	[ALC274_FIXUP_DELL_BIND_DACS] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7723) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7724) 		.v.func = alc274_fixup_bind_dacs,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7725) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7726) 		.chain_id = ALC269_FIXUP_DELL1_MIC_NO_PRESENCE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7727) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7728) 	[ALC274_FIXUP_DELL_AIO_LINEOUT_VERB] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7729) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7730) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7731) 			{ 0x1b, 0x0401102f },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7732) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7733) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7734) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7735) 		.chain_id = ALC274_FIXUP_DELL_BIND_DACS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7736) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7737) 	[ALC298_FIXUP_TPT470_DOCK_FIX] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7738) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7739) 		.v.func = alc_fixup_tpt470_dock,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7740) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7741) 		.chain_id = ALC293_FIXUP_LENOVO_SPK_NOISE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7742) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7743) 	[ALC298_FIXUP_TPT470_DOCK] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7744) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7745) 		.v.func = alc_fixup_tpt470_dacs,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7746) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7747) 		.chain_id = ALC298_FIXUP_TPT470_DOCK_FIX
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7748) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7749) 	[ALC255_FIXUP_DUMMY_LINEOUT_VERB] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7750) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7751) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7752) 			{ 0x14, 0x0201101f },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7753) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7754) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7755) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7756) 		.chain_id = ALC255_FIXUP_DELL1_MIC_NO_PRESENCE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7757) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7758) 	[ALC255_FIXUP_DELL_HEADSET_MIC] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7759) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7760) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7761) 			{ 0x19, 0x01a1913c }, /* use as headset mic, without its own jack detect */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7762) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7763) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7764) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7765) 		.chain_id = ALC269_FIXUP_HEADSET_MIC
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7766) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7767) 	[ALC295_FIXUP_HP_X360] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7768) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7769) 		.v.func = alc295_fixup_hp_top_speakers,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7770) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7771) 		.chain_id = ALC269_FIXUP_HP_MUTE_LED_MIC3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7772) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7773) 	[ALC221_FIXUP_HP_HEADSET_MIC] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7774) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7775) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7776) 			{ 0x19, 0x0181313f},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7777) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7778) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7779) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7780) 		.chain_id = ALC269_FIXUP_HEADSET_MIC
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7781) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7782) 	[ALC285_FIXUP_LENOVO_HEADPHONE_NOISE] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7783) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7784) 		.v.func = alc285_fixup_invalidate_dacs,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7785) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7786) 		.chain_id = ALC269_FIXUP_THINKPAD_ACPI
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7787) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7788) 	[ALC295_FIXUP_HP_AUTO_MUTE] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7789) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7790) 		.v.func = alc_fixup_auto_mute_via_amp,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7791) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7792) 	[ALC286_FIXUP_ACER_AIO_MIC_NO_PRESENCE] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7793) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7794) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7795) 			{ 0x18, 0x01a1913c }, /* use as headset mic, without its own jack detect */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7796) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7797) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7798) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7799) 		.chain_id = ALC269_FIXUP_HEADSET_MIC
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7800) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7801) 	[ALC294_FIXUP_ASUS_MIC] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7802) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7803) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7804) 			{ 0x13, 0x90a60160 }, /* use as internal mic */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7805) 			{ 0x19, 0x04a11120 }, /* use as headset mic, without its own jack detect */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7806) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7807) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7808) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7809) 		.chain_id = ALC269_FIXUP_HEADSET_MIC
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7810) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7811) 	[ALC294_FIXUP_ASUS_HEADSET_MIC] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7812) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7813) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7814) 			{ 0x19, 0x01a1103c }, /* use as headset mic */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7815) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7816) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7817) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7818) 		.chain_id = ALC269_FIXUP_HEADSET_MIC
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7819) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7820) 	[ALC294_FIXUP_ASUS_SPK] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7821) 		.type = HDA_FIXUP_VERBS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7822) 		.v.verbs = (const struct hda_verb[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7823) 			/* Set EAPD high */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7824) 			{ 0x20, AC_VERB_SET_COEF_INDEX, 0x40 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7825) 			{ 0x20, AC_VERB_SET_PROC_COEF, 0x8800 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7826) 			{ 0x20, AC_VERB_SET_COEF_INDEX, 0x0f },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7827) 			{ 0x20, AC_VERB_SET_PROC_COEF, 0x7774 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7828) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7829) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7830) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7831) 		.chain_id = ALC294_FIXUP_ASUS_HEADSET_MIC
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7832) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7833) 	[ALC295_FIXUP_CHROME_BOOK] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7834) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7835) 		.v.func = alc295_fixup_chromebook,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7836) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7837) 		.chain_id = ALC225_FIXUP_HEADSET_JACK
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7838) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7839) 	[ALC225_FIXUP_HEADSET_JACK] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7840) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7841) 		.v.func = alc_fixup_headset_jack,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7842) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7843) 	[ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7844) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7845) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7846) 			{ 0x1a, 0x01a1913c }, /* use as headset mic, without its own jack detect */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7847) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7848) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7849) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7850) 		.chain_id = ALC269_FIXUP_HEADSET_MODE_NO_HP_MIC
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7851) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7852) 	[ALC285_FIXUP_LENOVO_PC_BEEP_IN_NOISE] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7853) 		.type = HDA_FIXUP_VERBS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7854) 		.v.verbs = (const struct hda_verb[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7855) 			/* Disable PCBEEP-IN passthrough */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7856) 			{ 0x20, AC_VERB_SET_COEF_INDEX, 0x36 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7857) 			{ 0x20, AC_VERB_SET_PROC_COEF, 0x57d7 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7858) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7859) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7860) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7861) 		.chain_id = ALC285_FIXUP_LENOVO_HEADPHONE_NOISE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7862) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7863) 	[ALC255_FIXUP_ACER_HEADSET_MIC] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7864) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7865) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7866) 			{ 0x19, 0x03a11130 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7867) 			{ 0x1a, 0x90a60140 }, /* use as internal mic */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7868) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7869) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7870) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7871) 		.chain_id = ALC255_FIXUP_HEADSET_MODE_NO_HP_MIC
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7872) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7873) 	[ALC225_FIXUP_DELL_WYSE_AIO_MIC_NO_PRESENCE] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7874) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7875) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7876) 			{ 0x16, 0x01011020 }, /* Rear Line out */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7877) 			{ 0x19, 0x01a1913c }, /* use as Front headset mic, without its own jack detect */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7878) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7879) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7880) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7881) 		.chain_id = ALC225_FIXUP_WYSE_AUTO_MUTE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7882) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7883) 	[ALC225_FIXUP_WYSE_AUTO_MUTE] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7884) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7885) 		.v.func = alc_fixup_auto_mute_via_amp,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7886) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7887) 		.chain_id = ALC225_FIXUP_WYSE_DISABLE_MIC_VREF
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7888) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7889) 	[ALC225_FIXUP_WYSE_DISABLE_MIC_VREF] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7890) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7891) 		.v.func = alc_fixup_disable_mic_vref,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7892) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7893) 		.chain_id = ALC269_FIXUP_HEADSET_MODE_NO_HP_MIC
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7894) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7895) 	[ALC286_FIXUP_ACER_AIO_HEADSET_MIC] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7896) 		.type = HDA_FIXUP_VERBS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7897) 		.v.verbs = (const struct hda_verb[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7898) 			{ 0x20, AC_VERB_SET_COEF_INDEX, 0x4f },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7899) 			{ 0x20, AC_VERB_SET_PROC_COEF, 0x5029 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7900) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7901) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7902) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7903) 		.chain_id = ALC286_FIXUP_ACER_AIO_MIC_NO_PRESENCE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7904) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7905) 	[ALC256_FIXUP_ASUS_HEADSET_MIC] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7906) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7907) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7908) 			{ 0x19, 0x03a11020 }, /* headset mic with jack detect */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7909) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7910) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7911) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7912) 		.chain_id = ALC256_FIXUP_ASUS_HEADSET_MODE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7913) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7914) 	[ALC256_FIXUP_ASUS_MIC_NO_PRESENCE] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7915) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7916) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7917) 			{ 0x19, 0x04a11120 }, /* use as headset mic, without its own jack detect */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7918) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7919) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7920) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7921) 		.chain_id = ALC256_FIXUP_ASUS_HEADSET_MODE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7922) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7923) 	[ALC299_FIXUP_PREDATOR_SPK] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7924) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7925) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7926) 			{ 0x21, 0x90170150 }, /* use as headset mic, without its own jack detect */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7927) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7928) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7929) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7930) 	[ALC256_FIXUP_MEDION_HEADSET_NO_PRESENCE] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7931) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7932) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7933) 			{ 0x19, 0x04a11040 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7934) 			{ 0x21, 0x04211020 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7935) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7936) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7937) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7938) 		.chain_id = ALC256_FIXUP_ASUS_HEADSET_MODE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7939) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7940) 	[ALC289_FIXUP_DELL_SPK2] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7941) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7942) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7943) 			{ 0x17, 0x90170130 }, /* bass spk */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7944) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7945) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7946) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7947) 		.chain_id = ALC269_FIXUP_DELL4_MIC_NO_PRESENCE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7948) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7949) 	[ALC289_FIXUP_DUAL_SPK] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7950) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7951) 		.v.func = alc285_fixup_speaker2_to_dac1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7952) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7953) 		.chain_id = ALC289_FIXUP_DELL_SPK2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7954) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7955) 	[ALC294_FIXUP_SPK2_TO_DAC1] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7956) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7957) 		.v.func = alc285_fixup_speaker2_to_dac1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7958) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7959) 		.chain_id = ALC294_FIXUP_ASUS_HEADSET_MIC
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7960) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7961) 	[ALC294_FIXUP_ASUS_DUAL_SPK] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7962) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7963) 		/* The GPIO must be pulled to initialize the AMP */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7964) 		.v.func = alc_fixup_gpio4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7965) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7966) 		.chain_id = ALC294_FIXUP_SPK2_TO_DAC1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7967) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7968) 	[ALC285_FIXUP_THINKPAD_X1_GEN7] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7969) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7970) 		.v.func = alc285_fixup_thinkpad_x1_gen7,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7971) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7972) 		.chain_id = ALC269_FIXUP_THINKPAD_ACPI
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7973) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7974) 	[ALC285_FIXUP_THINKPAD_HEADSET_JACK] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7975) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7976) 		.v.func = alc_fixup_headset_jack,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7977) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7978) 		.chain_id = ALC285_FIXUP_THINKPAD_X1_GEN7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7979) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7980) 	[ALC294_FIXUP_ASUS_HPE] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7981) 		.type = HDA_FIXUP_VERBS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7982) 		.v.verbs = (const struct hda_verb[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7983) 			/* Set EAPD high */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7984) 			{ 0x20, AC_VERB_SET_COEF_INDEX, 0x0f },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7985) 			{ 0x20, AC_VERB_SET_PROC_COEF, 0x7774 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7986) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7987) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7988) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7989) 		.chain_id = ALC294_FIXUP_ASUS_HEADSET_MIC
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7990) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7991) 	[ALC294_FIXUP_ASUS_GX502_PINS] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7992) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7993) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7994) 			{ 0x19, 0x03a11050 }, /* front HP mic */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7995) 			{ 0x1a, 0x01a11830 }, /* rear external mic */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7996) 			{ 0x21, 0x03211020 }, /* front HP out */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7997) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7998) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7999) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8000) 		.chain_id = ALC294_FIXUP_ASUS_GX502_VERBS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8001) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8002) 	[ALC294_FIXUP_ASUS_GX502_VERBS] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8003) 		.type = HDA_FIXUP_VERBS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8004) 		.v.verbs = (const struct hda_verb[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8005) 			/* set 0x15 to HP-OUT ctrl */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8006) 			{ 0x15, AC_VERB_SET_PIN_WIDGET_CONTROL, 0xc0 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8007) 			/* unmute the 0x15 amp */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8008) 			{ 0x15, AC_VERB_SET_AMP_GAIN_MUTE, 0xb000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8009) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8010) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8011) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8012) 		.chain_id = ALC294_FIXUP_ASUS_GX502_HP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8013) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8014) 	[ALC294_FIXUP_ASUS_GX502_HP] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8015) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8016) 		.v.func = alc294_fixup_gx502_hp,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8017) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8018) 	[ALC294_FIXUP_ASUS_GU502_PINS] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8019) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8020) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8021) 			{ 0x19, 0x01a11050 }, /* rear HP mic */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8022) 			{ 0x1a, 0x01a11830 }, /* rear external mic */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8023) 			{ 0x21, 0x012110f0 }, /* rear HP out */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8024) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8025) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8026) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8027) 		.chain_id = ALC294_FIXUP_ASUS_GU502_VERBS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8028) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8029) 	[ALC294_FIXUP_ASUS_GU502_VERBS] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8030) 		.type = HDA_FIXUP_VERBS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8031) 		.v.verbs = (const struct hda_verb[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8032) 			/* set 0x15 to HP-OUT ctrl */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8033) 			{ 0x15, AC_VERB_SET_PIN_WIDGET_CONTROL, 0xc0 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8034) 			/* unmute the 0x15 amp */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8035) 			{ 0x15, AC_VERB_SET_AMP_GAIN_MUTE, 0xb000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8036) 			/* set 0x1b to HP-OUT */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8037) 			{ 0x1b, AC_VERB_SET_PIN_WIDGET_CONTROL, 0x24 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8038) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8039) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8040) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8041) 		.chain_id = ALC294_FIXUP_ASUS_GU502_HP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8042) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8043) 	[ALC294_FIXUP_ASUS_GU502_HP] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8044) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8045) 		.v.func = alc294_fixup_gu502_hp,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8046) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8047) 	[ALC294_FIXUP_ASUS_COEF_1B] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8048) 		.type = HDA_FIXUP_VERBS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8049) 		.v.verbs = (const struct hda_verb[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8050) 			/* Set bit 10 to correct noisy output after reboot from
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8051) 			 * Windows 10 (due to pop noise reduction?)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8052) 			 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8053) 			{ 0x20, AC_VERB_SET_COEF_INDEX, 0x1b },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8054) 			{ 0x20, AC_VERB_SET_PROC_COEF, 0x4e4b },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8055) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8056) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8057) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8058) 		.chain_id = ALC289_FIXUP_ASUS_GA401,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8059) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8060) 	[ALC285_FIXUP_HP_GPIO_LED] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8061) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8062) 		.v.func = alc285_fixup_hp_gpio_led,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8063) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8064) 	[ALC285_FIXUP_HP_MUTE_LED] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8065) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8066) 		.v.func = alc285_fixup_hp_mute_led,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8067) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8068) 	[ALC236_FIXUP_HP_GPIO_LED] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8069) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8070) 		.v.func = alc236_fixup_hp_gpio_led,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8071) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8072) 	[ALC236_FIXUP_HP_MUTE_LED] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8073) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8074) 		.v.func = alc236_fixup_hp_mute_led,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8075) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8076) 	[ALC236_FIXUP_HP_MUTE_LED_MICMUTE_VREF] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8077) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8078) 		.v.func = alc236_fixup_hp_mute_led_micmute_vref,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8079) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8080) 	[ALC298_FIXUP_SAMSUNG_HEADPHONE_VERY_QUIET] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8081) 		.type = HDA_FIXUP_VERBS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8082) 		.v.verbs = (const struct hda_verb[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8083) 			{ 0x1a, AC_VERB_SET_PIN_WIDGET_CONTROL, 0xc5 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8084) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8085) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8086) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8087) 	[ALC256_FIXUP_SAMSUNG_HEADPHONE_VERY_QUIET] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8088) 		.type = HDA_FIXUP_VERBS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8089) 		.v.verbs = (const struct hda_verb[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8090) 			{ 0x20, AC_VERB_SET_COEF_INDEX, 0x08},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8091) 			{ 0x20, AC_VERB_SET_PROC_COEF, 0x2fcf},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8092) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8093) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8094) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8095) 	[ALC295_FIXUP_ASUS_MIC_NO_PRESENCE] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8096) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8097) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8098) 			{ 0x19, 0x01a1913c }, /* use as headset mic, without its own jack detect */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8099) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8100) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8101) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8102) 		.chain_id = ALC269_FIXUP_HEADSET_MODE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8103) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8104) 	[ALC269VC_FIXUP_ACER_VCOPPERBOX_PINS] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8105) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8106) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8107) 			{ 0x14, 0x90100120 }, /* use as internal speaker */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8108) 			{ 0x18, 0x02a111f0 }, /* use as headset mic, without its own jack detect */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8109) 			{ 0x1a, 0x01011020 }, /* use as line out */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8110) 			{ },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8111) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8112) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8113) 		.chain_id = ALC269_FIXUP_HEADSET_MIC
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8114) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8115) 	[ALC269VC_FIXUP_ACER_HEADSET_MIC] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8116) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8117) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8118) 			{ 0x18, 0x02a11030 }, /* use as headset mic */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8119) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8120) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8121) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8122) 		.chain_id = ALC269_FIXUP_HEADSET_MIC
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8123) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8124) 	[ALC269VC_FIXUP_ACER_MIC_NO_PRESENCE] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8125) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8126) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8127) 			{ 0x18, 0x01a11130 }, /* use as headset mic, without its own jack detect */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8128) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8129) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8130) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8131) 		.chain_id = ALC269_FIXUP_HEADSET_MIC
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8132) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8133) 	[ALC289_FIXUP_ASUS_GA401] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8134) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8135) 		.v.func = alc289_fixup_asus_ga401,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8136) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8137) 		.chain_id = ALC289_FIXUP_ASUS_GA502,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8138) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8139) 	[ALC289_FIXUP_ASUS_GA502] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8140) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8141) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8142) 			{ 0x19, 0x03a11020 }, /* headset mic with jack detect */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8143) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8144) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8145) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8146) 	[ALC256_FIXUP_ACER_MIC_NO_PRESENCE] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8147) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8148) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8149) 			{ 0x19, 0x02a11120 }, /* use as headset mic, without its own jack detect */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8150) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8151) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8152) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8153) 		.chain_id = ALC256_FIXUP_ASUS_HEADSET_MODE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8154) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8155) 	[ALC285_FIXUP_HP_GPIO_AMP_INIT] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8156) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8157) 		.v.func = alc285_fixup_hp_gpio_amp_init,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8158) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8159) 		.chain_id = ALC285_FIXUP_HP_GPIO_LED
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8160) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8161) 	[ALC269_FIXUP_CZC_B20] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8162) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8163) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8164) 			{ 0x12, 0x411111f0 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8165) 			{ 0x14, 0x90170110 }, /* speaker */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8166) 			{ 0x15, 0x032f1020 }, /* HP out */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8167) 			{ 0x17, 0x411111f0 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8168) 			{ 0x18, 0x03ab1040 }, /* mic */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8169) 			{ 0x19, 0xb7a7013f },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8170) 			{ 0x1a, 0x0181305f },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8171) 			{ 0x1b, 0x411111f0 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8172) 			{ 0x1d, 0x411111f0 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8173) 			{ 0x1e, 0x411111f0 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8174) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8175) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8176) 		.chain_id = ALC269_FIXUP_DMIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8177) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8178) 	[ALC269_FIXUP_CZC_TMI] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8179) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8180) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8181) 			{ 0x12, 0x4000c000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8182) 			{ 0x14, 0x90170110 }, /* speaker */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8183) 			{ 0x15, 0x0421401f }, /* HP out */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8184) 			{ 0x17, 0x411111f0 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8185) 			{ 0x18, 0x04a19020 }, /* mic */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8186) 			{ 0x19, 0x411111f0 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8187) 			{ 0x1a, 0x411111f0 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8188) 			{ 0x1b, 0x411111f0 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8189) 			{ 0x1d, 0x40448505 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8190) 			{ 0x1e, 0x411111f0 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8191) 			{ 0x20, 0x8000ffff },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8192) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8193) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8194) 		.chain_id = ALC269_FIXUP_DMIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8195) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8196) 	[ALC269_FIXUP_CZC_L101] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8197) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8198) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8199) 			{ 0x12, 0x40000000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8200) 			{ 0x14, 0x01014010 }, /* speaker */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8201) 			{ 0x15, 0x411111f0 }, /* HP out */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8202) 			{ 0x16, 0x411111f0 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8203) 			{ 0x18, 0x01a19020 }, /* mic */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8204) 			{ 0x19, 0x02a19021 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8205) 			{ 0x1a, 0x0181302f },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8206) 			{ 0x1b, 0x0221401f },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8207) 			{ 0x1c, 0x411111f0 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8208) 			{ 0x1d, 0x4044c601 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8209) 			{ 0x1e, 0x411111f0 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8210) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8211) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8212) 		.chain_id = ALC269_FIXUP_DMIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8213) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8214) 	[ALC269_FIXUP_LEMOTE_A1802] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8215) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8216) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8217) 			{ 0x12, 0x40000000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8218) 			{ 0x14, 0x90170110 }, /* speaker */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8219) 			{ 0x17, 0x411111f0 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8220) 			{ 0x18, 0x03a19040 }, /* mic1 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8221) 			{ 0x19, 0x90a70130 }, /* mic2 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8222) 			{ 0x1a, 0x411111f0 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8223) 			{ 0x1b, 0x411111f0 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8224) 			{ 0x1d, 0x40489d2d },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8225) 			{ 0x1e, 0x411111f0 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8226) 			{ 0x20, 0x0003ffff },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8227) 			{ 0x21, 0x03214020 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8228) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8229) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8230) 		.chain_id = ALC269_FIXUP_DMIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8231) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8232) 	[ALC269_FIXUP_LEMOTE_A190X] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8233) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8234) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8235) 			{ 0x14, 0x99130110 }, /* speaker */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8236) 			{ 0x15, 0x0121401f }, /* HP out */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8237) 			{ 0x18, 0x01a19c20 }, /* rear  mic */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8238) 			{ 0x19, 0x99a3092f }, /* front mic */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8239) 			{ 0x1b, 0x0201401f }, /* front lineout */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8240) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8241) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8242) 		.chain_id = ALC269_FIXUP_DMIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8243) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8244) 	[ALC256_FIXUP_INTEL_NUC8_RUGGED] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8245) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8246) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8247) 			{ 0x1b, 0x01a1913c }, /* use as headset mic, without its own jack detect */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8248) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8249) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8250) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8251) 		.chain_id = ALC269_FIXUP_HEADSET_MODE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8252) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8253) 	[ALC256_FIXUP_INTEL_NUC10] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8254) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8255) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8256) 			{ 0x19, 0x01a1913c }, /* use as headset mic, without its own jack detect */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8257) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8258) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8259) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8260) 		.chain_id = ALC269_FIXUP_HEADSET_MODE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8261) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8262) 	[ALC255_FIXUP_XIAOMI_HEADSET_MIC] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8263) 		.type = HDA_FIXUP_VERBS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8264) 		.v.verbs = (const struct hda_verb[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8265) 			{ 0x20, AC_VERB_SET_COEF_INDEX, 0x45 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8266) 			{ 0x20, AC_VERB_SET_PROC_COEF, 0x5089 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8267) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8268) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8269) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8270) 		.chain_id = ALC289_FIXUP_ASUS_GA502
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8271) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8272) 	[ALC274_FIXUP_HP_MIC] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8273) 		.type = HDA_FIXUP_VERBS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8274) 		.v.verbs = (const struct hda_verb[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8275) 			{ 0x20, AC_VERB_SET_COEF_INDEX, 0x45 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8276) 			{ 0x20, AC_VERB_SET_PROC_COEF, 0x5089 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8277) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8278) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8279) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8280) 	[ALC274_FIXUP_HP_HEADSET_MIC] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8281) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8282) 		.v.func = alc274_fixup_hp_headset_mic,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8283) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8284) 		.chain_id = ALC274_FIXUP_HP_MIC
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8285) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8286) 	[ALC274_FIXUP_HP_ENVY_GPIO] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8287) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8288) 		.v.func = alc274_fixup_hp_envy_gpio,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8289) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8290) 	[ALC256_FIXUP_ASUS_HPE] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8291) 		.type = HDA_FIXUP_VERBS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8292) 		.v.verbs = (const struct hda_verb[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8293) 			/* Set EAPD high */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8294) 			{ 0x20, AC_VERB_SET_COEF_INDEX, 0x0f },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8295) 			{ 0x20, AC_VERB_SET_PROC_COEF, 0x7778 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8296) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8297) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8298) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8299) 		.chain_id = ALC294_FIXUP_ASUS_HEADSET_MIC
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8300) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8301) 	[ALC285_FIXUP_THINKPAD_NO_BASS_SPK_HEADSET_JACK] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8302) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8303) 		.v.func = alc_fixup_headset_jack,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8304) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8305) 		.chain_id = ALC269_FIXUP_THINKPAD_ACPI
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8306) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8307) 	[ALC287_FIXUP_HP_GPIO_LED] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8308) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8309) 		.v.func = alc287_fixup_hp_gpio_led,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8310) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8311) 	[ALC256_FIXUP_HP_HEADSET_MIC] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8312) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8313) 		.v.func = alc274_fixup_hp_headset_mic,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8314) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8315) 	[ALC236_FIXUP_DELL_AIO_HEADSET_MIC] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8316) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8317) 		.v.func = alc_fixup_no_int_mic,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8318) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8319) 		.chain_id = ALC255_FIXUP_DELL1_MIC_NO_PRESENCE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8320) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8321) 	[ALC282_FIXUP_ACER_DISABLE_LINEOUT] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8322) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8323) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8324) 			{ 0x1b, 0x411111f0 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8325) 			{ 0x18, 0x01a1913c }, /* use as headset mic, without its own jack detect */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8326) 			{ },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8327) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8328) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8329) 		.chain_id = ALC269_FIXUP_HEADSET_MODE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8330) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8331) 	[ALC255_FIXUP_ACER_LIMIT_INT_MIC_BOOST] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8332) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8333) 		.v.func = alc269_fixup_limit_int_mic_boost,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8334) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8335) 		.chain_id = ALC255_FIXUP_ACER_MIC_NO_PRESENCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8336) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8337) 	[ALC256_FIXUP_ACER_HEADSET_MIC] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8338) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8339) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8340) 			{ 0x19, 0x02a1113c }, /* use as headset mic, without its own jack detect */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8341) 			{ 0x1a, 0x90a1092f }, /* use as internal mic */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8342) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8343) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8344) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8345) 		.chain_id = ALC269_FIXUP_HEADSET_MODE_NO_HP_MIC
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8346) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8347) 	[ALC285_FIXUP_IDEAPAD_S740_COEF] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8348) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8349) 		.v.func = alc285_fixup_ideapad_s740_coef,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8350) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8351) 		.chain_id = ALC269_FIXUP_THINKPAD_ACPI,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8352) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8353) 	[ALC295_FIXUP_ASUS_DACS] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8354) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8355) 		.v.func = alc295_fixup_asus_dacs,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8356) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8357) 	[ALC295_FIXUP_HP_OMEN] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8358) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8359) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8360) 			{ 0x12, 0xb7a60130 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8361) 			{ 0x13, 0x40000000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8362) 			{ 0x14, 0x411111f0 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8363) 			{ 0x16, 0x411111f0 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8364) 			{ 0x17, 0x90170110 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8365) 			{ 0x18, 0x411111f0 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8366) 			{ 0x19, 0x02a11030 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8367) 			{ 0x1a, 0x411111f0 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8368) 			{ 0x1b, 0x04a19030 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8369) 			{ 0x1d, 0x40600001 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8370) 			{ 0x1e, 0x411111f0 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8371) 			{ 0x21, 0x03211020 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8372) 			{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8373) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8374) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8375) 		.chain_id = ALC269_FIXUP_HP_LINE1_MIC1_LED,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8376) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8377) 	[ALC285_FIXUP_HP_SPECTRE_X360] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8378) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8379) 		.v.func = alc285_fixup_hp_spectre_x360,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8380) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8381) 	[ALC285_FIXUP_HP_SPECTRE_X360_EB1] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8382) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8383) 		.v.func = alc285_fixup_hp_spectre_x360_eb1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8384) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8385) 	[ALC287_FIXUP_IDEAPAD_BASS_SPK_AMP] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8386) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8387) 		.v.func = alc285_fixup_ideapad_s740_coef,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8388) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8389) 		.chain_id = ALC285_FIXUP_THINKPAD_HEADSET_JACK,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8390) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8391) 	[ALC623_FIXUP_LENOVO_THINKSTATION_P340] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8392) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8393) 		.v.func = alc_fixup_no_shutup,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8394) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8395) 		.chain_id = ALC283_FIXUP_HEADSET_MIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8396) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8397) 	[ALC255_FIXUP_ACER_HEADPHONE_AND_MIC] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8398) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8399) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8400) 			{ 0x21, 0x03211030 }, /* Change the Headphone location to Left */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8401) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8402) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8403) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8404) 		.chain_id = ALC255_FIXUP_XIAOMI_HEADSET_MIC
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8405) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8406) 	[ALC236_FIXUP_HP_LIMIT_INT_MIC_BOOST] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8407) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8408) 		.v.func = alc269_fixup_limit_int_mic_boost,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8409) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8410) 		.chain_id = ALC236_FIXUP_HP_MUTE_LED_MICMUTE_VREF,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8411) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8412) 	[ALC285_FIXUP_LEGION_Y9000X_SPEAKERS] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8413) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8414) 		.v.func = alc285_fixup_ideapad_s740_coef,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8415) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8416) 		.chain_id = ALC285_FIXUP_LEGION_Y9000X_AUTOMUTE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8417) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8418) 	[ALC285_FIXUP_LEGION_Y9000X_AUTOMUTE] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8419) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8420) 		.v.func = alc287_fixup_legion_15imhg05_speakers,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8421) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8422) 		.chain_id = ALC269_FIXUP_THINKPAD_ACPI,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8423) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8424) 	[ALC287_FIXUP_LEGION_15IMHG05_SPEAKERS] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8425) 		.type = HDA_FIXUP_VERBS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8426) 		//.v.verbs = legion_15imhg05_coefs,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8427) 		.v.verbs = (const struct hda_verb[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8428) 			 // set left speaker Legion 7i.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8429) 			 { 0x20, AC_VERB_SET_COEF_INDEX, 0x24 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8430) 			 { 0x20, AC_VERB_SET_PROC_COEF, 0x41 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8431) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8432) 			 { 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8433) 			 { 0x20, AC_VERB_SET_PROC_COEF, 0xc },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8434) 			 { 0x20, AC_VERB_SET_PROC_COEF, 0x0 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8435) 			 { 0x20, AC_VERB_SET_PROC_COEF, 0x1a },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8436) 			 { 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8437) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8438) 			 { 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8439) 			 { 0x20, AC_VERB_SET_PROC_COEF, 0x2 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8440) 			 { 0x20, AC_VERB_SET_PROC_COEF, 0x0 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8441) 			 { 0x20, AC_VERB_SET_PROC_COEF, 0x0 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8442) 			 { 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8443) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8444) 			 // set right speaker Legion 7i.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8445) 			 { 0x20, AC_VERB_SET_COEF_INDEX, 0x24 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8446) 			 { 0x20, AC_VERB_SET_PROC_COEF, 0x42 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8447) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8448) 			 { 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8449) 			 { 0x20, AC_VERB_SET_PROC_COEF, 0xc },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8450) 			 { 0x20, AC_VERB_SET_PROC_COEF, 0x0 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8451) 			 { 0x20, AC_VERB_SET_PROC_COEF, 0x2a },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8452) 			 { 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8453) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8454) 			 { 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8455) 			 { 0x20, AC_VERB_SET_PROC_COEF, 0x2 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8456) 			 { 0x20, AC_VERB_SET_PROC_COEF, 0x0 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8457) 			 { 0x20, AC_VERB_SET_PROC_COEF, 0x0 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8458) 			 { 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8459) 			 {}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8460) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8461) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8462) 		.chain_id = ALC287_FIXUP_LEGION_15IMHG05_AUTOMUTE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8463) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8464) 	[ALC287_FIXUP_LEGION_15IMHG05_AUTOMUTE] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8465) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8466) 		.v.func = alc287_fixup_legion_15imhg05_speakers,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8467) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8468) 		.chain_id = ALC269_FIXUP_HEADSET_MODE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8469) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8470) 	[ALC287_FIXUP_YOGA7_14ITL_SPEAKERS] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8471) 		.type = HDA_FIXUP_VERBS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8472) 		.v.verbs = (const struct hda_verb[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8473) 			 // set left speaker Yoga 7i.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8474) 			 { 0x20, AC_VERB_SET_COEF_INDEX, 0x24 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8475) 			 { 0x20, AC_VERB_SET_PROC_COEF, 0x41 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8476) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8477) 			 { 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8478) 			 { 0x20, AC_VERB_SET_PROC_COEF, 0xc },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8479) 			 { 0x20, AC_VERB_SET_PROC_COEF, 0x0 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8480) 			 { 0x20, AC_VERB_SET_PROC_COEF, 0x1a },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8481) 			 { 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8482) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8483) 			 { 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8484) 			 { 0x20, AC_VERB_SET_PROC_COEF, 0x2 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8485) 			 { 0x20, AC_VERB_SET_PROC_COEF, 0x0 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8486) 			 { 0x20, AC_VERB_SET_PROC_COEF, 0x0 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8487) 			 { 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8488) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8489) 			 // set right speaker Yoga 7i.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8490) 			 { 0x20, AC_VERB_SET_COEF_INDEX, 0x24 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8491) 			 { 0x20, AC_VERB_SET_PROC_COEF, 0x46 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8492) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8493) 			 { 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8494) 			 { 0x20, AC_VERB_SET_PROC_COEF, 0xc },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8495) 			 { 0x20, AC_VERB_SET_PROC_COEF, 0x0 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8496) 			 { 0x20, AC_VERB_SET_PROC_COEF, 0x2a },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8497) 			 { 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8498) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8499) 			 { 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8500) 			 { 0x20, AC_VERB_SET_PROC_COEF, 0x2 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8501) 			 { 0x20, AC_VERB_SET_PROC_COEF, 0x0 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8502) 			 { 0x20, AC_VERB_SET_PROC_COEF, 0x0 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8503) 			 { 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8504) 			 {}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8505) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8506) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8507) 		.chain_id = ALC269_FIXUP_HEADSET_MODE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8508) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8509) 	[ALC287_FIXUP_13S_GEN2_SPEAKERS] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8510) 		.type = HDA_FIXUP_VERBS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8511) 		.v.verbs = (const struct hda_verb[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8512) 			{ 0x20, AC_VERB_SET_COEF_INDEX, 0x24 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8513) 			{ 0x20, AC_VERB_SET_PROC_COEF, 0x41 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8514) 			{ 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8515) 			{ 0x20, AC_VERB_SET_PROC_COEF, 0x2 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8516) 			{ 0x20, AC_VERB_SET_PROC_COEF, 0x0 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8517) 			{ 0x20, AC_VERB_SET_PROC_COEF, 0x0 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8518) 			{ 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8519) 			{ 0x20, AC_VERB_SET_COEF_INDEX, 0x24 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8520) 			{ 0x20, AC_VERB_SET_PROC_COEF, 0x42 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8521) 			{ 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8522) 			{ 0x20, AC_VERB_SET_PROC_COEF, 0x2 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8523) 			{ 0x20, AC_VERB_SET_PROC_COEF, 0x0 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8524) 			{ 0x20, AC_VERB_SET_PROC_COEF, 0x0 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8525) 			{ 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8526) 			{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8527) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8528) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8529) 		.chain_id = ALC269_FIXUP_HEADSET_MODE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8530) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8531) 	[ALC256_FIXUP_SET_COEF_DEFAULTS] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8532) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8533) 		.v.func = alc256_fixup_set_coef_defaults,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8534) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8535) 	[ALC245_FIXUP_HP_GPIO_LED] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8536) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8537) 		.v.func = alc245_fixup_hp_gpio_led,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8538) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8539) 	[ALC256_FIXUP_SYSTEM76_MIC_NO_PRESENCE] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8540) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8541) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8542) 			{ 0x19, 0x03a11120 }, /* use as headset mic, without its own jack detect */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8543) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8544) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8545) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8546) 		.chain_id = ALC269_FIXUP_HEADSET_MODE_NO_HP_MIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8547) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8548) 	[ALC233_FIXUP_NO_AUDIO_JACK] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8549) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8550) 		.v.func = alc233_fixup_no_audio_jack,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8551) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8552) 	[ALC256_FIXUP_MIC_NO_PRESENCE_AND_RESUME] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8553) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8554) 		.v.func = alc256_fixup_mic_no_presence_and_resume,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8555) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8556) 		.chain_id = ALC269_FIXUP_HEADSET_MODE_NO_HP_MIC
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8557) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8558) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8559) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8560) static const struct snd_pci_quirk alc269_fixup_tbl[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8561) 	SND_PCI_QUIRK(0x1025, 0x0283, "Acer TravelMate 8371", ALC269_FIXUP_INV_DMIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8562) 	SND_PCI_QUIRK(0x1025, 0x029b, "Acer 1810TZ", ALC269_FIXUP_INV_DMIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8563) 	SND_PCI_QUIRK(0x1025, 0x0349, "Acer AOD260", ALC269_FIXUP_INV_DMIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8564) 	SND_PCI_QUIRK(0x1025, 0x047c, "Acer AC700", ALC269_FIXUP_ACER_AC700),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8565) 	SND_PCI_QUIRK(0x1025, 0x072d, "Acer Aspire V5-571G", ALC269_FIXUP_ASPIRE_HEADSET_MIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8566) 	SND_PCI_QUIRK(0x1025, 0x0740, "Acer AO725", ALC271_FIXUP_HP_GATE_MIC_JACK),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8567) 	SND_PCI_QUIRK(0x1025, 0x0742, "Acer AO756", ALC271_FIXUP_HP_GATE_MIC_JACK),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8568) 	SND_PCI_QUIRK(0x1025, 0x0762, "Acer Aspire E1-472", ALC271_FIXUP_HP_GATE_MIC_JACK_E1_572),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8569) 	SND_PCI_QUIRK(0x1025, 0x0775, "Acer Aspire E1-572", ALC271_FIXUP_HP_GATE_MIC_JACK_E1_572),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8570) 	SND_PCI_QUIRK(0x1025, 0x079b, "Acer Aspire V5-573G", ALC282_FIXUP_ASPIRE_V5_PINS),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8571) 	SND_PCI_QUIRK(0x1025, 0x080d, "Acer Aspire V5-122P", ALC269_FIXUP_ASPIRE_HEADSET_MIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8572) 	SND_PCI_QUIRK(0x1025, 0x0840, "Acer Aspire E1", ALC269VB_FIXUP_ASPIRE_E1_COEF),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8573) 	SND_PCI_QUIRK(0x1025, 0x101c, "Acer Veriton N2510G", ALC269_FIXUP_LIFEBOOK),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8574) 	SND_PCI_QUIRK(0x1025, 0x102b, "Acer Aspire C24-860", ALC286_FIXUP_ACER_AIO_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8575) 	SND_PCI_QUIRK(0x1025, 0x1065, "Acer Aspire C20-820", ALC269VC_FIXUP_ACER_HEADSET_MIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8576) 	SND_PCI_QUIRK(0x1025, 0x106d, "Acer Cloudbook 14", ALC283_FIXUP_CHROME_BOOK),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8577) 	SND_PCI_QUIRK(0x1025, 0x1094, "Acer Aspire E5-575T", ALC255_FIXUP_ACER_LIMIT_INT_MIC_BOOST),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8578) 	SND_PCI_QUIRK(0x1025, 0x1099, "Acer Aspire E5-523G", ALC255_FIXUP_ACER_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8579) 	SND_PCI_QUIRK(0x1025, 0x110e, "Acer Aspire ES1-432", ALC255_FIXUP_ACER_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8580) 	SND_PCI_QUIRK(0x1025, 0x1166, "Acer Veriton N4640G", ALC269_FIXUP_LIFEBOOK),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8581) 	SND_PCI_QUIRK(0x1025, 0x1167, "Acer Veriton N6640G", ALC269_FIXUP_LIFEBOOK),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8582) 	SND_PCI_QUIRK(0x1025, 0x1246, "Acer Predator Helios 500", ALC299_FIXUP_PREDATOR_SPK),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8583) 	SND_PCI_QUIRK(0x1025, 0x1247, "Acer vCopperbox", ALC269VC_FIXUP_ACER_VCOPPERBOX_PINS),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8584) 	SND_PCI_QUIRK(0x1025, 0x1248, "Acer Veriton N4660G", ALC269VC_FIXUP_ACER_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8585) 	SND_PCI_QUIRK(0x1025, 0x1269, "Acer SWIFT SF314-54", ALC256_FIXUP_ACER_HEADSET_MIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8586) 	SND_PCI_QUIRK(0x1025, 0x128f, "Acer Veriton Z6860G", ALC286_FIXUP_ACER_AIO_HEADSET_MIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8587) 	SND_PCI_QUIRK(0x1025, 0x1290, "Acer Veriton Z4860G", ALC286_FIXUP_ACER_AIO_HEADSET_MIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8588) 	SND_PCI_QUIRK(0x1025, 0x1291, "Acer Veriton Z4660G", ALC286_FIXUP_ACER_AIO_HEADSET_MIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8589) 	SND_PCI_QUIRK(0x1025, 0x129c, "Acer SWIFT SF314-55", ALC256_FIXUP_ACER_HEADSET_MIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8590) 	SND_PCI_QUIRK(0x1025, 0x1300, "Acer SWIFT SF314-56", ALC256_FIXUP_ACER_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8591) 	SND_PCI_QUIRK(0x1025, 0x1308, "Acer Aspire Z24-890", ALC286_FIXUP_ACER_AIO_HEADSET_MIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8592) 	SND_PCI_QUIRK(0x1025, 0x132a, "Acer TravelMate B114-21", ALC233_FIXUP_ACER_HEADSET_MIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8593) 	SND_PCI_QUIRK(0x1025, 0x1330, "Acer TravelMate X514-51T", ALC255_FIXUP_ACER_HEADSET_MIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8594) 	SND_PCI_QUIRK(0x1025, 0x141f, "Acer Spin SP513-54N", ALC255_FIXUP_ACER_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8595) 	SND_PCI_QUIRK(0x1025, 0x142b, "Acer Swift SF314-42", ALC255_FIXUP_ACER_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8596) 	SND_PCI_QUIRK(0x1025, 0x1430, "Acer TravelMate B311R-31", ALC256_FIXUP_ACER_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8597) 	SND_PCI_QUIRK(0x1025, 0x1466, "Acer Aspire A515-56", ALC255_FIXUP_ACER_HEADPHONE_AND_MIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8598) 	SND_PCI_QUIRK(0x1028, 0x0470, "Dell M101z", ALC269_FIXUP_DELL_M101Z),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8599) 	SND_PCI_QUIRK(0x1028, 0x054b, "Dell XPS one 2710", ALC275_FIXUP_DELL_XPS),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8600) 	SND_PCI_QUIRK(0x1028, 0x05bd, "Dell Latitude E6440", ALC292_FIXUP_DELL_E7X),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8601) 	SND_PCI_QUIRK(0x1028, 0x05be, "Dell Latitude E6540", ALC292_FIXUP_DELL_E7X),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8602) 	SND_PCI_QUIRK(0x1028, 0x05ca, "Dell Latitude E7240", ALC292_FIXUP_DELL_E7X),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8603) 	SND_PCI_QUIRK(0x1028, 0x05cb, "Dell Latitude E7440", ALC292_FIXUP_DELL_E7X),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8604) 	SND_PCI_QUIRK(0x1028, 0x05da, "Dell Vostro 5460", ALC290_FIXUP_SUBWOOFER),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8605) 	SND_PCI_QUIRK(0x1028, 0x05f4, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8606) 	SND_PCI_QUIRK(0x1028, 0x05f5, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8607) 	SND_PCI_QUIRK(0x1028, 0x05f6, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8608) 	SND_PCI_QUIRK(0x1028, 0x0615, "Dell Vostro 5470", ALC290_FIXUP_SUBWOOFER_HSJACK),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8609) 	SND_PCI_QUIRK(0x1028, 0x0616, "Dell Vostro 5470", ALC290_FIXUP_SUBWOOFER_HSJACK),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8610) 	SND_PCI_QUIRK(0x1028, 0x062c, "Dell Latitude E5550", ALC292_FIXUP_DELL_E7X),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8611) 	SND_PCI_QUIRK(0x1028, 0x062e, "Dell Latitude E7450", ALC292_FIXUP_DELL_E7X),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8612) 	SND_PCI_QUIRK(0x1028, 0x0638, "Dell Inspiron 5439", ALC290_FIXUP_MONO_SPEAKERS_HSJACK),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8613) 	SND_PCI_QUIRK(0x1028, 0x064a, "Dell", ALC293_FIXUP_DELL1_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8614) 	SND_PCI_QUIRK(0x1028, 0x064b, "Dell", ALC293_FIXUP_DELL1_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8615) 	SND_PCI_QUIRK(0x1028, 0x0665, "Dell XPS 13", ALC288_FIXUP_DELL_XPS_13),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8616) 	SND_PCI_QUIRK(0x1028, 0x0669, "Dell Optiplex 9020m", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8617) 	SND_PCI_QUIRK(0x1028, 0x069a, "Dell Vostro 5480", ALC290_FIXUP_SUBWOOFER_HSJACK),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8618) 	SND_PCI_QUIRK(0x1028, 0x06c7, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8619) 	SND_PCI_QUIRK(0x1028, 0x06d9, "Dell", ALC293_FIXUP_DELL1_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8620) 	SND_PCI_QUIRK(0x1028, 0x06da, "Dell", ALC293_FIXUP_DELL1_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8621) 	SND_PCI_QUIRK(0x1028, 0x06db, "Dell", ALC293_FIXUP_DISABLE_AAMIX_MULTIJACK),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8622) 	SND_PCI_QUIRK(0x1028, 0x06dd, "Dell", ALC293_FIXUP_DISABLE_AAMIX_MULTIJACK),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8623) 	SND_PCI_QUIRK(0x1028, 0x06de, "Dell", ALC293_FIXUP_DISABLE_AAMIX_MULTIJACK),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8624) 	SND_PCI_QUIRK(0x1028, 0x06df, "Dell", ALC293_FIXUP_DISABLE_AAMIX_MULTIJACK),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8625) 	SND_PCI_QUIRK(0x1028, 0x06e0, "Dell", ALC293_FIXUP_DISABLE_AAMIX_MULTIJACK),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8626) 	SND_PCI_QUIRK(0x1028, 0x0706, "Dell Inspiron 7559", ALC256_FIXUP_DELL_INSPIRON_7559_SUBWOOFER),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8627) 	SND_PCI_QUIRK(0x1028, 0x0725, "Dell Inspiron 3162", ALC255_FIXUP_DELL_SPK_NOISE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8628) 	SND_PCI_QUIRK(0x1028, 0x0738, "Dell Precision 5820", ALC269_FIXUP_NO_SHUTUP),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8629) 	SND_PCI_QUIRK(0x1028, 0x075c, "Dell XPS 27 7760", ALC298_FIXUP_SPK_VOLUME),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8630) 	SND_PCI_QUIRK(0x1028, 0x075d, "Dell AIO", ALC298_FIXUP_SPK_VOLUME),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8631) 	SND_PCI_QUIRK(0x1028, 0x0798, "Dell Inspiron 17 7000 Gaming", ALC256_FIXUP_DELL_INSPIRON_7559_SUBWOOFER),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8632) 	SND_PCI_QUIRK(0x1028, 0x07b0, "Dell Precision 7520", ALC295_FIXUP_DISABLE_DAC3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8633) 	SND_PCI_QUIRK(0x1028, 0x080c, "Dell WYSE", ALC225_FIXUP_DELL_WYSE_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8634) 	SND_PCI_QUIRK(0x1028, 0x084b, "Dell", ALC274_FIXUP_DELL_AIO_LINEOUT_VERB),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8635) 	SND_PCI_QUIRK(0x1028, 0x084e, "Dell", ALC274_FIXUP_DELL_AIO_LINEOUT_VERB),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8636) 	SND_PCI_QUIRK(0x1028, 0x0871, "Dell Precision 3630", ALC255_FIXUP_DELL_HEADSET_MIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8637) 	SND_PCI_QUIRK(0x1028, 0x0872, "Dell Precision 3630", ALC255_FIXUP_DELL_HEADSET_MIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8638) 	SND_PCI_QUIRK(0x1028, 0x0873, "Dell Precision 3930", ALC255_FIXUP_DUMMY_LINEOUT_VERB),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8639) 	SND_PCI_QUIRK(0x1028, 0x08ad, "Dell WYSE AIO", ALC225_FIXUP_DELL_WYSE_AIO_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8640) 	SND_PCI_QUIRK(0x1028, 0x08ae, "Dell WYSE NB", ALC225_FIXUP_DELL1_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8641) 	SND_PCI_QUIRK(0x1028, 0x0935, "Dell", ALC274_FIXUP_DELL_AIO_LINEOUT_VERB),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8642) 	SND_PCI_QUIRK(0x1028, 0x097d, "Dell Precision", ALC289_FIXUP_DUAL_SPK),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8643) 	SND_PCI_QUIRK(0x1028, 0x097e, "Dell Precision", ALC289_FIXUP_DUAL_SPK),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8644) 	SND_PCI_QUIRK(0x1028, 0x098d, "Dell Precision", ALC233_FIXUP_ASUS_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8645) 	SND_PCI_QUIRK(0x1028, 0x09bf, "Dell Precision", ALC233_FIXUP_ASUS_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8646) 	SND_PCI_QUIRK(0x1028, 0x0a2e, "Dell", ALC236_FIXUP_DELL_AIO_HEADSET_MIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8647) 	SND_PCI_QUIRK(0x1028, 0x0a30, "Dell", ALC236_FIXUP_DELL_AIO_HEADSET_MIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8648) 	SND_PCI_QUIRK(0x1028, 0x0a58, "Dell", ALC255_FIXUP_DELL_HEADSET_MIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8649) 	SND_PCI_QUIRK(0x1028, 0x0a61, "Dell XPS 15 9510", ALC289_FIXUP_DUAL_SPK),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8650) 	SND_PCI_QUIRK(0x1028, 0x0a62, "Dell Precision 5560", ALC289_FIXUP_DUAL_SPK),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8651) 	SND_PCI_QUIRK(0x1028, 0x0a9d, "Dell Latitude 5430", ALC269_FIXUP_DELL4_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8652) 	SND_PCI_QUIRK(0x1028, 0x0a9e, "Dell Latitude 5430", ALC269_FIXUP_DELL4_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8653) 	SND_PCI_QUIRK(0x1028, 0x164a, "Dell", ALC293_FIXUP_DELL1_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8654) 	SND_PCI_QUIRK(0x1028, 0x164b, "Dell", ALC293_FIXUP_DELL1_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8655) 	SND_PCI_QUIRK(0x103c, 0x1586, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8656) 	SND_PCI_QUIRK(0x103c, 0x18e6, "HP", ALC269_FIXUP_HP_GPIO_LED),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8657) 	SND_PCI_QUIRK(0x103c, 0x218b, "HP", ALC269_FIXUP_LIMIT_INT_MIC_BOOST_MUTE_LED),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8658) 	SND_PCI_QUIRK(0x103c, 0x21f9, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8659) 	SND_PCI_QUIRK(0x103c, 0x2210, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8660) 	SND_PCI_QUIRK(0x103c, 0x2214, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8661) 	SND_PCI_QUIRK(0x103c, 0x221b, "HP", ALC269_FIXUP_HP_GPIO_MIC1_LED),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8662) 	SND_PCI_QUIRK(0x103c, 0x221c, "HP EliteBook 755 G2", ALC280_FIXUP_HP_HEADSET_MIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8663) 	SND_PCI_QUIRK(0x103c, 0x2221, "HP", ALC269_FIXUP_HP_GPIO_MIC1_LED),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8664) 	SND_PCI_QUIRK(0x103c, 0x2225, "HP", ALC269_FIXUP_HP_GPIO_MIC1_LED),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8665) 	SND_PCI_QUIRK(0x103c, 0x2236, "HP", ALC269_FIXUP_HP_LINE1_MIC1_LED),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8666) 	SND_PCI_QUIRK(0x103c, 0x2237, "HP", ALC269_FIXUP_HP_LINE1_MIC1_LED),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8667) 	SND_PCI_QUIRK(0x103c, 0x2238, "HP", ALC269_FIXUP_HP_LINE1_MIC1_LED),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8668) 	SND_PCI_QUIRK(0x103c, 0x2239, "HP", ALC269_FIXUP_HP_LINE1_MIC1_LED),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8669) 	SND_PCI_QUIRK(0x103c, 0x224b, "HP", ALC269_FIXUP_HP_LINE1_MIC1_LED),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8670) 	SND_PCI_QUIRK(0x103c, 0x2253, "HP", ALC269_FIXUP_HP_GPIO_MIC1_LED),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8671) 	SND_PCI_QUIRK(0x103c, 0x2254, "HP", ALC269_FIXUP_HP_GPIO_MIC1_LED),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8672) 	SND_PCI_QUIRK(0x103c, 0x2255, "HP", ALC269_FIXUP_HP_GPIO_MIC1_LED),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8673) 	SND_PCI_QUIRK(0x103c, 0x2256, "HP", ALC269_FIXUP_HP_GPIO_MIC1_LED),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8674) 	SND_PCI_QUIRK(0x103c, 0x2257, "HP", ALC269_FIXUP_HP_GPIO_MIC1_LED),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8675) 	SND_PCI_QUIRK(0x103c, 0x2259, "HP", ALC269_FIXUP_HP_GPIO_MIC1_LED),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8676) 	SND_PCI_QUIRK(0x103c, 0x225a, "HP", ALC269_FIXUP_HP_DOCK_GPIO_MIC1_LED),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8677) 	SND_PCI_QUIRK(0x103c, 0x225f, "HP", ALC280_FIXUP_HP_GPIO2_MIC_HOTKEY),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8678) 	SND_PCI_QUIRK(0x103c, 0x2260, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8679) 	SND_PCI_QUIRK(0x103c, 0x2263, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8680) 	SND_PCI_QUIRK(0x103c, 0x2264, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8681) 	SND_PCI_QUIRK(0x103c, 0x2265, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8682) 	SND_PCI_QUIRK(0x103c, 0x2268, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8683) 	SND_PCI_QUIRK(0x103c, 0x226a, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8684) 	SND_PCI_QUIRK(0x103c, 0x226b, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8685) 	SND_PCI_QUIRK(0x103c, 0x226e, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8686) 	SND_PCI_QUIRK(0x103c, 0x2271, "HP", ALC286_FIXUP_HP_GPIO_LED),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8687) 	SND_PCI_QUIRK(0x103c, 0x2272, "HP", ALC269_FIXUP_HP_GPIO_MIC1_LED),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8688) 	SND_PCI_QUIRK(0x103c, 0x2272, "HP", ALC280_FIXUP_HP_DOCK_PINS),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8689) 	SND_PCI_QUIRK(0x103c, 0x2273, "HP", ALC269_FIXUP_HP_GPIO_MIC1_LED),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8690) 	SND_PCI_QUIRK(0x103c, 0x2273, "HP", ALC280_FIXUP_HP_DOCK_PINS),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8691) 	SND_PCI_QUIRK(0x103c, 0x2278, "HP", ALC269_FIXUP_HP_GPIO_MIC1_LED),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8692) 	SND_PCI_QUIRK(0x103c, 0x227f, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8693) 	SND_PCI_QUIRK(0x103c, 0x2282, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8694) 	SND_PCI_QUIRK(0x103c, 0x228b, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8695) 	SND_PCI_QUIRK(0x103c, 0x228e, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8696) 	SND_PCI_QUIRK(0x103c, 0x229e, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8697) 	SND_PCI_QUIRK(0x103c, 0x22b2, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8698) 	SND_PCI_QUIRK(0x103c, 0x22b7, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8699) 	SND_PCI_QUIRK(0x103c, 0x22bf, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8700) 	SND_PCI_QUIRK(0x103c, 0x22c4, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8701) 	SND_PCI_QUIRK(0x103c, 0x22c5, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8702) 	SND_PCI_QUIRK(0x103c, 0x22c7, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8703) 	SND_PCI_QUIRK(0x103c, 0x22c8, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8704) 	SND_PCI_QUIRK(0x103c, 0x22cf, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8705) 	SND_PCI_QUIRK(0x103c, 0x22db, "HP", ALC280_FIXUP_HP_9480M),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8706) 	SND_PCI_QUIRK(0x103c, 0x22dc, "HP", ALC269_FIXUP_HP_GPIO_MIC1_LED),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8707) 	SND_PCI_QUIRK(0x103c, 0x22fb, "HP", ALC269_FIXUP_HP_GPIO_MIC1_LED),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8708) 	SND_PCI_QUIRK(0x103c, 0x2334, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8709) 	SND_PCI_QUIRK(0x103c, 0x2335, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8710) 	SND_PCI_QUIRK(0x103c, 0x2336, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8711) 	SND_PCI_QUIRK(0x103c, 0x2337, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8712) 	SND_PCI_QUIRK(0x103c, 0x802e, "HP Z240 SFF", ALC221_FIXUP_HP_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8713) 	SND_PCI_QUIRK(0x103c, 0x802f, "HP Z240", ALC221_FIXUP_HP_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8714) 	SND_PCI_QUIRK(0x103c, 0x8077, "HP", ALC256_FIXUP_HP_HEADSET_MIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8715) 	SND_PCI_QUIRK(0x103c, 0x8158, "HP", ALC256_FIXUP_HP_HEADSET_MIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8716) 	SND_PCI_QUIRK(0x103c, 0x820d, "HP Pavilion 15", ALC269_FIXUP_HP_MUTE_LED_MIC3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8717) 	SND_PCI_QUIRK(0x103c, 0x8256, "HP", ALC221_FIXUP_HP_FRONT_MIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8718) 	SND_PCI_QUIRK(0x103c, 0x827e, "HP x360", ALC295_FIXUP_HP_X360),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8719) 	SND_PCI_QUIRK(0x103c, 0x827f, "HP x360", ALC269_FIXUP_HP_MUTE_LED_MIC3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8720) 	SND_PCI_QUIRK(0x103c, 0x82bf, "HP G3 mini", ALC221_FIXUP_HP_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8721) 	SND_PCI_QUIRK(0x103c, 0x82c0, "HP G3 mini premium", ALC221_FIXUP_HP_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8722) 	SND_PCI_QUIRK(0x103c, 0x83b9, "HP Spectre x360", ALC269_FIXUP_HP_MUTE_LED_MIC3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8723) 	SND_PCI_QUIRK(0x103c, 0x841c, "HP Pavilion 15-CK0xx", ALC269_FIXUP_HP_MUTE_LED_MIC3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8724) 	SND_PCI_QUIRK(0x103c, 0x8497, "HP Envy x360", ALC269_FIXUP_HP_MUTE_LED_MIC3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8725) 	SND_PCI_QUIRK(0x103c, 0x84da, "HP OMEN dc0019-ur", ALC295_FIXUP_HP_OMEN),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8726) 	SND_PCI_QUIRK(0x103c, 0x84e7, "HP Pavilion 15", ALC269_FIXUP_HP_MUTE_LED_MIC3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8727) 	SND_PCI_QUIRK(0x103c, 0x8519, "HP Spectre x360 15-df0xxx", ALC285_FIXUP_HP_SPECTRE_X360),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8728) 	SND_PCI_QUIRK(0x103c, 0x860f, "HP ZBook 15 G6", ALC285_FIXUP_HP_GPIO_AMP_INIT),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8729) 	SND_PCI_QUIRK(0x103c, 0x861f, "HP Elite Dragonfly G1", ALC285_FIXUP_HP_GPIO_AMP_INIT),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8730) 	SND_PCI_QUIRK(0x103c, 0x869d, "HP", ALC236_FIXUP_HP_MUTE_LED),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8731) 	SND_PCI_QUIRK(0x103c, 0x86c7, "HP Envy AiO 32", ALC274_FIXUP_HP_ENVY_GPIO),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8732) 	SND_PCI_QUIRK(0x103c, 0x8716, "HP Elite Dragonfly G2 Notebook PC", ALC285_FIXUP_HP_GPIO_AMP_INIT),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8733) 	SND_PCI_QUIRK(0x103c, 0x8720, "HP EliteBook x360 1040 G8 Notebook PC", ALC285_FIXUP_HP_GPIO_AMP_INIT),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8734) 	SND_PCI_QUIRK(0x103c, 0x8724, "HP EliteBook 850 G7", ALC285_FIXUP_HP_GPIO_LED),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8735) 	SND_PCI_QUIRK(0x103c, 0x8728, "HP EliteBook 840 G7", ALC285_FIXUP_HP_GPIO_LED),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8736) 	SND_PCI_QUIRK(0x103c, 0x8729, "HP", ALC285_FIXUP_HP_GPIO_LED),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8737) 	SND_PCI_QUIRK(0x103c, 0x8730, "HP ProBook 445 G7", ALC236_FIXUP_HP_MUTE_LED_MICMUTE_VREF),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8738) 	SND_PCI_QUIRK(0x103c, 0x8735, "HP ProBook 435 G7", ALC236_FIXUP_HP_MUTE_LED_MICMUTE_VREF),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8739) 	SND_PCI_QUIRK(0x103c, 0x8736, "HP", ALC285_FIXUP_HP_GPIO_AMP_INIT),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8740) 	SND_PCI_QUIRK(0x103c, 0x8760, "HP", ALC285_FIXUP_HP_MUTE_LED),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8741) 	SND_PCI_QUIRK(0x103c, 0x877a, "HP", ALC285_FIXUP_HP_MUTE_LED),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8742) 	SND_PCI_QUIRK(0x103c, 0x877d, "HP", ALC236_FIXUP_HP_MUTE_LED),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8743) 	SND_PCI_QUIRK(0x103c, 0x8780, "HP ZBook Fury 17 G7 Mobile Workstation",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8744) 		      ALC285_FIXUP_HP_GPIO_AMP_INIT),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8745) 	SND_PCI_QUIRK(0x103c, 0x8783, "HP ZBook Fury 15 G7 Mobile Workstation",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8746) 		      ALC285_FIXUP_HP_GPIO_AMP_INIT),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8747) 	SND_PCI_QUIRK(0x103c, 0x8788, "HP OMEN 15", ALC285_FIXUP_HP_MUTE_LED),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8748) 	SND_PCI_QUIRK(0x103c, 0x87c8, "HP", ALC287_FIXUP_HP_GPIO_LED),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8749) 	SND_PCI_QUIRK(0x103c, 0x87e5, "HP ProBook 440 G8 Notebook PC", ALC236_FIXUP_HP_GPIO_LED),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8750) 	SND_PCI_QUIRK(0x103c, 0x87e7, "HP ProBook 450 G8 Notebook PC", ALC236_FIXUP_HP_GPIO_LED),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8751) 	SND_PCI_QUIRK(0x103c, 0x87f1, "HP ProBook 630 G8 Notebook PC", ALC236_FIXUP_HP_GPIO_LED),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8752) 	SND_PCI_QUIRK(0x103c, 0x87f2, "HP ProBook 640 G8 Notebook PC", ALC236_FIXUP_HP_GPIO_LED),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8753) 	SND_PCI_QUIRK(0x103c, 0x87f4, "HP", ALC287_FIXUP_HP_GPIO_LED),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8754) 	SND_PCI_QUIRK(0x103c, 0x87f5, "HP", ALC287_FIXUP_HP_GPIO_LED),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8755) 	SND_PCI_QUIRK(0x103c, 0x87f6, "HP Spectre x360 14", ALC245_FIXUP_HP_X360_AMP),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8756) 	SND_PCI_QUIRK(0x103c, 0x87f7, "HP Spectre x360 14", ALC245_FIXUP_HP_X360_AMP),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8757) 	SND_PCI_QUIRK(0x103c, 0x8805, "HP ProBook 650 G8 Notebook PC", ALC236_FIXUP_HP_GPIO_LED),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8758) 	SND_PCI_QUIRK(0x103c, 0x880d, "HP EliteBook 830 G8 Notebook PC", ALC285_FIXUP_HP_GPIO_LED),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8759) 	SND_PCI_QUIRK(0x103c, 0x8811, "HP Spectre x360 15-eb1xxx", ALC285_FIXUP_HP_SPECTRE_X360_EB1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8760) 	SND_PCI_QUIRK(0x103c, 0x8812, "HP Spectre x360 15-eb1xxx", ALC285_FIXUP_HP_SPECTRE_X360_EB1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8761) 	SND_PCI_QUIRK(0x103c, 0x8846, "HP EliteBook 850 G8 Notebook PC", ALC285_FIXUP_HP_GPIO_LED),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8762) 	SND_PCI_QUIRK(0x103c, 0x8847, "HP EliteBook x360 830 G8 Notebook PC", ALC285_FIXUP_HP_GPIO_LED),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8763) 	SND_PCI_QUIRK(0x103c, 0x884b, "HP EliteBook 840 Aero G8 Notebook PC", ALC285_FIXUP_HP_GPIO_LED),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8764) 	SND_PCI_QUIRK(0x103c, 0x884c, "HP EliteBook 840 G8 Notebook PC", ALC285_FIXUP_HP_GPIO_LED),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8765) 	SND_PCI_QUIRK(0x103c, 0x8862, "HP ProBook 445 G8 Notebook PC", ALC236_FIXUP_HP_LIMIT_INT_MIC_BOOST),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8766) 	SND_PCI_QUIRK(0x103c, 0x8863, "HP ProBook 445 G8 Notebook PC", ALC236_FIXUP_HP_LIMIT_INT_MIC_BOOST),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8767) 	SND_PCI_QUIRK(0x103c, 0x886d, "HP ZBook Fury 17.3 Inch G8 Mobile Workstation PC", ALC285_FIXUP_HP_GPIO_AMP_INIT),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8768) 	SND_PCI_QUIRK(0x103c, 0x8870, "HP ZBook Fury 15.6 Inch G8 Mobile Workstation PC", ALC285_FIXUP_HP_GPIO_AMP_INIT),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8769) 	SND_PCI_QUIRK(0x103c, 0x8873, "HP ZBook Studio 15.6 Inch G8 Mobile Workstation PC", ALC285_FIXUP_HP_GPIO_AMP_INIT),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8770) 	SND_PCI_QUIRK(0x103c, 0x888d, "HP ZBook Power 15.6 inch G8 Mobile Workstation PC", ALC236_FIXUP_HP_GPIO_LED),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8771) 	SND_PCI_QUIRK(0x103c, 0x8896, "HP EliteBook 855 G8 Notebook PC", ALC285_FIXUP_HP_MUTE_LED),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8772) 	SND_PCI_QUIRK(0x1043, 0x103e, "ASUS X540SA", ALC256_FIXUP_ASUS_MIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8773) 	SND_PCI_QUIRK(0x1043, 0x103f, "ASUS TX300", ALC282_FIXUP_ASUS_TX300),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8774) 	SND_PCI_QUIRK(0x1043, 0x106d, "Asus K53BE", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8775) 	SND_PCI_QUIRK(0x1043, 0x10a1, "ASUS UX391UA", ALC294_FIXUP_ASUS_SPK),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8776) 	SND_PCI_QUIRK(0x1043, 0x10c0, "ASUS X540SA", ALC256_FIXUP_ASUS_MIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8777) 	SND_PCI_QUIRK(0x1043, 0x10d0, "ASUS X540LA/X540LJ", ALC255_FIXUP_ASUS_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8778) 	SND_PCI_QUIRK(0x1043, 0x115d, "Asus 1015E", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8779) 	SND_PCI_QUIRK(0x1043, 0x11c0, "ASUS X556UR", ALC255_FIXUP_ASUS_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8780) 	SND_PCI_QUIRK(0x1043, 0x125e, "ASUS Q524UQK", ALC255_FIXUP_ASUS_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8781) 	SND_PCI_QUIRK(0x1043, 0x1271, "ASUS X430UN", ALC256_FIXUP_ASUS_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8782) 	SND_PCI_QUIRK(0x1043, 0x1290, "ASUS X441SA", ALC233_FIXUP_EAPD_COEF_AND_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8783) 	SND_PCI_QUIRK(0x1043, 0x12a0, "ASUS X441UV", ALC233_FIXUP_EAPD_COEF_AND_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8784) 	SND_PCI_QUIRK(0x1043, 0x12e0, "ASUS X541SA", ALC256_FIXUP_ASUS_MIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8785) 	SND_PCI_QUIRK(0x1043, 0x12f0, "ASUS X541UV", ALC256_FIXUP_ASUS_MIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8786) 	SND_PCI_QUIRK(0x1043, 0x13b0, "ASUS Z550SA", ALC256_FIXUP_ASUS_MIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8787) 	SND_PCI_QUIRK(0x1043, 0x1427, "Asus Zenbook UX31E", ALC269VB_FIXUP_ASUS_ZENBOOK),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8788) 	SND_PCI_QUIRK(0x1043, 0x1517, "Asus Zenbook UX31A", ALC269VB_FIXUP_ASUS_ZENBOOK_UX31A),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8789) 	SND_PCI_QUIRK(0x1043, 0x16e3, "ASUS UX50", ALC269_FIXUP_STEREO_DMIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8790) 	SND_PCI_QUIRK(0x1043, 0x1740, "ASUS UX430UA", ALC295_FIXUP_ASUS_DACS),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8791) 	SND_PCI_QUIRK(0x1043, 0x17d1, "ASUS UX431FL", ALC294_FIXUP_ASUS_DUAL_SPK),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8792) 	SND_PCI_QUIRK(0x1043, 0x1662, "ASUS GV301QH", ALC294_FIXUP_ASUS_DUAL_SPK),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8793) 	SND_PCI_QUIRK(0x1043, 0x1881, "ASUS Zephyrus S/M", ALC294_FIXUP_ASUS_GX502_PINS),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8794) 	SND_PCI_QUIRK(0x1043, 0x18b1, "Asus MJ401TA", ALC256_FIXUP_ASUS_HEADSET_MIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8795) 	SND_PCI_QUIRK(0x1043, 0x18f1, "Asus FX505DT", ALC256_FIXUP_ASUS_HEADSET_MIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8796) 	SND_PCI_QUIRK(0x1043, 0x194e, "ASUS UX563FD", ALC294_FIXUP_ASUS_HPE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8797) 	SND_PCI_QUIRK(0x1043, 0x1970, "ASUS UX550VE", ALC289_FIXUP_ASUS_GA401),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8798) 	SND_PCI_QUIRK(0x1043, 0x1982, "ASUS B1400CEPE", ALC256_FIXUP_ASUS_HPE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8799) 	SND_PCI_QUIRK(0x1043, 0x19ce, "ASUS B9450FA", ALC294_FIXUP_ASUS_HPE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8800) 	SND_PCI_QUIRK(0x1043, 0x19e1, "ASUS UX581LV", ALC295_FIXUP_ASUS_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8801) 	SND_PCI_QUIRK(0x1043, 0x1a13, "Asus G73Jw", ALC269_FIXUP_ASUS_G73JW),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8802) 	SND_PCI_QUIRK(0x1043, 0x1a30, "ASUS X705UD", ALC256_FIXUP_ASUS_MIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8803) 	SND_PCI_QUIRK(0x1043, 0x1b11, "ASUS UX431DA", ALC294_FIXUP_ASUS_COEF_1B),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8804) 	SND_PCI_QUIRK(0x1043, 0x1b13, "Asus U41SV", ALC269_FIXUP_INV_DMIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8805) 	SND_PCI_QUIRK(0x1043, 0x1bbd, "ASUS Z550MA", ALC255_FIXUP_ASUS_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8806) 	SND_PCI_QUIRK(0x1043, 0x1c23, "Asus X55U", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8807) 	SND_PCI_QUIRK(0x1043, 0x1ccd, "ASUS X555UB", ALC256_FIXUP_ASUS_MIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8808) 	SND_PCI_QUIRK(0x1043, 0x1d4e, "ASUS TM420", ALC256_FIXUP_ASUS_HPE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8809) 	SND_PCI_QUIRK(0x1043, 0x1e11, "ASUS Zephyrus G15", ALC289_FIXUP_ASUS_GA502),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8810) 	SND_PCI_QUIRK(0x1043, 0x1e51, "ASUS Zephyrus M15", ALC294_FIXUP_ASUS_GU502_PINS),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8811) 	SND_PCI_QUIRK(0x1043, 0x1e8e, "ASUS Zephyrus G15", ALC289_FIXUP_ASUS_GA401),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8812) 	SND_PCI_QUIRK(0x1043, 0x1f11, "ASUS Zephyrus G14", ALC289_FIXUP_ASUS_GA401),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8813) 	SND_PCI_QUIRK(0x1043, 0x1d42, "ASUS Zephyrus G14 2022", ALC289_FIXUP_ASUS_GA401),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8814) 	SND_PCI_QUIRK(0x1043, 0x16b2, "ASUS GU603", ALC289_FIXUP_ASUS_GA401),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8815) 	SND_PCI_QUIRK(0x1043, 0x3030, "ASUS ZN270IE", ALC256_FIXUP_ASUS_AIO_GPIO2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8816) 	SND_PCI_QUIRK(0x1043, 0x831a, "ASUS P901", ALC269_FIXUP_STEREO_DMIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8817) 	SND_PCI_QUIRK(0x1043, 0x834a, "ASUS S101", ALC269_FIXUP_STEREO_DMIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8818) 	SND_PCI_QUIRK(0x1043, 0x8398, "ASUS P1005", ALC269_FIXUP_STEREO_DMIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8819) 	SND_PCI_QUIRK(0x1043, 0x83ce, "ASUS P1005", ALC269_FIXUP_STEREO_DMIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8820) 	SND_PCI_QUIRK(0x1043, 0x8516, "ASUS X101CH", ALC269_FIXUP_ASUS_X101),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8821) 	SND_PCI_QUIRK(0x104d, 0x9073, "Sony VAIO", ALC275_FIXUP_SONY_VAIO_GPIO2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8822) 	SND_PCI_QUIRK(0x104d, 0x907b, "Sony VAIO", ALC275_FIXUP_SONY_HWEQ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8823) 	SND_PCI_QUIRK(0x104d, 0x9084, "Sony VAIO", ALC275_FIXUP_SONY_HWEQ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8824) 	SND_PCI_QUIRK(0x104d, 0x9099, "Sony VAIO S13", ALC275_FIXUP_SONY_DISABLE_AAMIX),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8825) 	SND_PCI_QUIRK(0x104d, 0x90b5, "Sony VAIO Pro 11", ALC286_FIXUP_SONY_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8826) 	SND_PCI_QUIRK(0x104d, 0x90b6, "Sony VAIO Pro 13", ALC286_FIXUP_SONY_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8827) 	SND_PCI_QUIRK(0x10cf, 0x1475, "Lifebook", ALC269_FIXUP_LIFEBOOK),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8828) 	SND_PCI_QUIRK(0x10cf, 0x159f, "Lifebook E780", ALC269_FIXUP_LIFEBOOK_NO_HP_TO_LINEOUT),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8829) 	SND_PCI_QUIRK(0x10cf, 0x15dc, "Lifebook T731", ALC269_FIXUP_LIFEBOOK_HP_PIN),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8830) 	SND_PCI_QUIRK(0x10cf, 0x1629, "Lifebook U7x7", ALC255_FIXUP_LIFEBOOK_U7x7_HEADSET_MIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8831) 	SND_PCI_QUIRK(0x10cf, 0x1757, "Lifebook E752", ALC269_FIXUP_LIFEBOOK_HP_PIN),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8832) 	SND_PCI_QUIRK(0x10cf, 0x1845, "Lifebook U904", ALC269_FIXUP_LIFEBOOK_EXTMIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8833) 	SND_PCI_QUIRK(0x10ec, 0x10f2, "Intel Reference board", ALC700_FIXUP_INTEL_REFERENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8834) 	SND_PCI_QUIRK(0x10ec, 0x118c, "Medion EE4254 MD62100", ALC256_FIXUP_MEDION_HEADSET_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8835) 	SND_PCI_QUIRK(0x10ec, 0x1230, "Intel Reference board", ALC295_FIXUP_CHROME_BOOK),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8836) 	SND_PCI_QUIRK(0x10ec, 0x1252, "Intel Reference board", ALC295_FIXUP_CHROME_BOOK),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8837) 	SND_PCI_QUIRK(0x10ec, 0x1254, "Intel Reference board", ALC295_FIXUP_CHROME_BOOK),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8838) 	SND_PCI_QUIRK(0x10f7, 0x8338, "Panasonic CF-SZ6", ALC269_FIXUP_HEADSET_MODE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8839) 	SND_PCI_QUIRK(0x144d, 0xc109, "Samsung Ativ book 9 (NP900X3G)", ALC269_FIXUP_INV_DMIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8840) 	SND_PCI_QUIRK(0x144d, 0xc169, "Samsung Notebook 9 Pen (NP930SBE-K01US)", ALC298_FIXUP_SAMSUNG_HEADPHONE_VERY_QUIET),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8841) 	SND_PCI_QUIRK(0x144d, 0xc176, "Samsung Notebook 9 Pro (NP930MBE-K04US)", ALC298_FIXUP_SAMSUNG_HEADPHONE_VERY_QUIET),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8842) 	SND_PCI_QUIRK(0x144d, 0xc189, "Samsung Galaxy Flex Book (NT950QCG-X716)", ALC298_FIXUP_SAMSUNG_HEADPHONE_VERY_QUIET),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8843) 	SND_PCI_QUIRK(0x144d, 0xc18a, "Samsung Galaxy Book Ion (NP930XCJ-K01US)", ALC298_FIXUP_SAMSUNG_HEADPHONE_VERY_QUIET),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8844) 	SND_PCI_QUIRK(0x144d, 0xc740, "Samsung Ativ book 8 (NP870Z5G)", ALC269_FIXUP_ATIV_BOOK_8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8845) 	SND_PCI_QUIRK(0x144d, 0xc812, "Samsung Notebook Pen S (NT950SBE-X58)", ALC298_FIXUP_SAMSUNG_HEADPHONE_VERY_QUIET),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8846) 	SND_PCI_QUIRK(0x144d, 0xc830, "Samsung Galaxy Book Ion (NT950XCJ-X716A)", ALC298_FIXUP_SAMSUNG_HEADPHONE_VERY_QUIET),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8847) 	SND_PCI_QUIRK(0x144d, 0xc832, "Samsung Galaxy Book Flex Alpha (NP730QCJ)", ALC256_FIXUP_SAMSUNG_HEADPHONE_VERY_QUIET),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8848) 	SND_PCI_QUIRK(0x1458, 0xfa53, "Gigabyte BXBT-2807", ALC283_FIXUP_HEADSET_MIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8849) 	SND_PCI_QUIRK(0x1462, 0xb120, "MSI Cubi MS-B120", ALC283_FIXUP_HEADSET_MIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8850) 	SND_PCI_QUIRK(0x1462, 0xb171, "Cubi N 8GL (MS-B171)", ALC283_FIXUP_HEADSET_MIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8851) 	SND_PCI_QUIRK(0x152d, 0x1082, "Quanta NL3", ALC269_FIXUP_LIFEBOOK),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8852) 	SND_PCI_QUIRK(0x1558, 0x1323, "Clevo N130ZU", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8853) 	SND_PCI_QUIRK(0x1558, 0x1325, "System76 Darter Pro (darp5)", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8854) 	SND_PCI_QUIRK(0x1558, 0x1401, "Clevo L140[CZ]U", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8855) 	SND_PCI_QUIRK(0x1558, 0x1403, "Clevo N140CU", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8856) 	SND_PCI_QUIRK(0x1558, 0x1404, "Clevo N150CU", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8857) 	SND_PCI_QUIRK(0x1558, 0x14a1, "Clevo L141MU", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8858) 	SND_PCI_QUIRK(0x1558, 0x4018, "Clevo NV40M[BE]", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8859) 	SND_PCI_QUIRK(0x1558, 0x4019, "Clevo NV40MZ", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8860) 	SND_PCI_QUIRK(0x1558, 0x4020, "Clevo NV40MB", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8861) 	SND_PCI_QUIRK(0x1558, 0x40a1, "Clevo NL40GU", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8862) 	SND_PCI_QUIRK(0x1558, 0x40c1, "Clevo NL40[CZ]U", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8863) 	SND_PCI_QUIRK(0x1558, 0x40d1, "Clevo NL41DU", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8864) 	SND_PCI_QUIRK(0x1558, 0x5015, "Clevo NH5[58]H[HJK]Q", ALC256_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8865) 	SND_PCI_QUIRK(0x1558, 0x5017, "Clevo NH7[79]H[HJK]Q", ALC256_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8866) 	SND_PCI_QUIRK(0x1558, 0x50a3, "Clevo NJ51GU", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8867) 	SND_PCI_QUIRK(0x1558, 0x50b3, "Clevo NK50S[BEZ]", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8868) 	SND_PCI_QUIRK(0x1558, 0x50b6, "Clevo NK50S5", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8869) 	SND_PCI_QUIRK(0x1558, 0x50b8, "Clevo NK50SZ", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8870) 	SND_PCI_QUIRK(0x1558, 0x50d5, "Clevo NP50D5", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8871) 	SND_PCI_QUIRK(0x1558, 0x50e1, "Clevo NH5[58]HPQ", ALC256_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8872) 	SND_PCI_QUIRK(0x1558, 0x50e2, "Clevo NH7[79]HPQ", ALC256_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8873) 	SND_PCI_QUIRK(0x1558, 0x50f0, "Clevo NH50A[CDF]", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8874) 	SND_PCI_QUIRK(0x1558, 0x50f2, "Clevo NH50E[PR]", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8875) 	SND_PCI_QUIRK(0x1558, 0x50f3, "Clevo NH58DPQ", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8876) 	SND_PCI_QUIRK(0x1558, 0x50f5, "Clevo NH55EPY", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8877) 	SND_PCI_QUIRK(0x1558, 0x50f6, "Clevo NH55DPQ", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8878) 	SND_PCI_QUIRK(0x1558, 0x5101, "Clevo S510WU", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8879) 	SND_PCI_QUIRK(0x1558, 0x5157, "Clevo W517GU1", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8880) 	SND_PCI_QUIRK(0x1558, 0x51a1, "Clevo NS50MU", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8881) 	SND_PCI_QUIRK(0x1558, 0x70a1, "Clevo NB70T[HJK]", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8882) 	SND_PCI_QUIRK(0x1558, 0x70b3, "Clevo NK70SB", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8883) 	SND_PCI_QUIRK(0x1558, 0x70f2, "Clevo NH79EPY", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8884) 	SND_PCI_QUIRK(0x1558, 0x70f3, "Clevo NH77DPQ", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8885) 	SND_PCI_QUIRK(0x1558, 0x70f4, "Clevo NH77EPY", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8886) 	SND_PCI_QUIRK(0x1558, 0x70f6, "Clevo NH77DPQ-Y", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8887) 	SND_PCI_QUIRK(0x1558, 0x8228, "Clevo NR40BU", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8888) 	SND_PCI_QUIRK(0x1558, 0x8520, "Clevo NH50D[CD]", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8889) 	SND_PCI_QUIRK(0x1558, 0x8521, "Clevo NH77D[CD]", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8890) 	SND_PCI_QUIRK(0x1558, 0x8535, "Clevo NH50D[BE]", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8891) 	SND_PCI_QUIRK(0x1558, 0x8536, "Clevo NH79D[BE]", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8892) 	SND_PCI_QUIRK(0x1558, 0x8550, "System76 Gazelle (gaze14)", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8893) 	SND_PCI_QUIRK(0x1558, 0x8551, "System76 Gazelle (gaze14)", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8894) 	SND_PCI_QUIRK(0x1558, 0x8560, "System76 Gazelle (gaze14)", ALC269_FIXUP_HEADSET_MIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8895) 	SND_PCI_QUIRK(0x1558, 0x8561, "System76 Gazelle (gaze14)", ALC269_FIXUP_HEADSET_MIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8896) 	SND_PCI_QUIRK(0x1558, 0x8562, "Clevo NH[5|7][0-9]RZ[Q]", ALC269_FIXUP_DMIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8897) 	SND_PCI_QUIRK(0x1558, 0x8668, "Clevo NP50B[BE]", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8898) 	SND_PCI_QUIRK(0x1558, 0x866d, "Clevo NP5[05]PN[HJK]", ALC256_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8899) 	SND_PCI_QUIRK(0x1558, 0x867d, "Clevo NP7[01]PN[HJK]", ALC256_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8900) 	SND_PCI_QUIRK(0x1558, 0x8680, "Clevo NJ50LU", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8901) 	SND_PCI_QUIRK(0x1558, 0x8686, "Clevo NH50[CZ]U", ALC256_FIXUP_MIC_NO_PRESENCE_AND_RESUME),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8902) 	SND_PCI_QUIRK(0x1558, 0x8a20, "Clevo NH55DCQ-Y", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8903) 	SND_PCI_QUIRK(0x1558, 0x8a51, "Clevo NH70RCQ-Y", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8904) 	SND_PCI_QUIRK(0x1558, 0x8d50, "Clevo NH55RCQ-M", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8905) 	SND_PCI_QUIRK(0x1558, 0x951d, "Clevo N950T[CDF]", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8906) 	SND_PCI_QUIRK(0x1558, 0x9600, "Clevo N960K[PR]", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8907) 	SND_PCI_QUIRK(0x1558, 0x961d, "Clevo N960S[CDF]", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8908) 	SND_PCI_QUIRK(0x1558, 0x971d, "Clevo N970T[CDF]", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8909) 	SND_PCI_QUIRK(0x1558, 0xa500, "Clevo NL53RU", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8910) 	SND_PCI_QUIRK(0x1558, 0xa600, "Clevo NL5XNU", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8911) 	SND_PCI_QUIRK(0x1558, 0xb018, "Clevo NP50D[BE]", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8912) 	SND_PCI_QUIRK(0x1558, 0xb019, "Clevo NH77D[BE]Q", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8913) 	SND_PCI_QUIRK(0x1558, 0xb022, "Clevo NH77D[DC][QW]", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8914) 	SND_PCI_QUIRK(0x1558, 0xc018, "Clevo NP50D[BE]", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8915) 	SND_PCI_QUIRK(0x1558, 0xc019, "Clevo NH77D[BE]Q", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8916) 	SND_PCI_QUIRK(0x1558, 0xc022, "Clevo NH77[DC][QW]", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8917) 	SND_PCI_QUIRK(0x17aa, 0x1036, "Lenovo P520", ALC233_FIXUP_LENOVO_MULTI_CODECS),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8918) 	SND_PCI_QUIRK(0x17aa, 0x1048, "ThinkCentre Station", ALC623_FIXUP_LENOVO_THINKSTATION_P340),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8919) 	SND_PCI_QUIRK(0x17aa, 0x20f2, "Thinkpad SL410/510", ALC269_FIXUP_SKU_IGNORE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8920) 	SND_PCI_QUIRK(0x17aa, 0x215e, "Thinkpad L512", ALC269_FIXUP_SKU_IGNORE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8921) 	SND_PCI_QUIRK(0x17aa, 0x21b8, "Thinkpad Edge 14", ALC269_FIXUP_SKU_IGNORE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8922) 	SND_PCI_QUIRK(0x17aa, 0x21ca, "Thinkpad L412", ALC269_FIXUP_SKU_IGNORE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8923) 	SND_PCI_QUIRK(0x17aa, 0x21e9, "Thinkpad Edge 15", ALC269_FIXUP_SKU_IGNORE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8924) 	SND_PCI_QUIRK(0x17aa, 0x21f3, "Thinkpad T430", ALC269_FIXUP_LENOVO_DOCK),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8925) 	SND_PCI_QUIRK(0x17aa, 0x21f6, "Thinkpad T530", ALC269_FIXUP_LENOVO_DOCK_LIMIT_BOOST),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8926) 	SND_PCI_QUIRK(0x17aa, 0x21fa, "Thinkpad X230", ALC269_FIXUP_LENOVO_DOCK),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8927) 	SND_PCI_QUIRK(0x17aa, 0x21fb, "Thinkpad T430s", ALC269_FIXUP_LENOVO_DOCK),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8928) 	SND_PCI_QUIRK(0x17aa, 0x2203, "Thinkpad X230 Tablet", ALC269_FIXUP_LENOVO_DOCK),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8929) 	SND_PCI_QUIRK(0x17aa, 0x2208, "Thinkpad T431s", ALC269_FIXUP_LENOVO_DOCK),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8930) 	SND_PCI_QUIRK(0x17aa, 0x220c, "Thinkpad T440s", ALC292_FIXUP_TPT440),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8931) 	SND_PCI_QUIRK(0x17aa, 0x220e, "Thinkpad T440p", ALC292_FIXUP_TPT440_DOCK),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8932) 	SND_PCI_QUIRK(0x17aa, 0x2210, "Thinkpad T540p", ALC292_FIXUP_TPT440_DOCK),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8933) 	SND_PCI_QUIRK(0x17aa, 0x2211, "Thinkpad W541", ALC292_FIXUP_TPT440_DOCK),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8934) 	SND_PCI_QUIRK(0x17aa, 0x2212, "Thinkpad T440", ALC292_FIXUP_TPT440_DOCK),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8935) 	SND_PCI_QUIRK(0x17aa, 0x2214, "Thinkpad X240", ALC292_FIXUP_TPT440_DOCK),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8936) 	SND_PCI_QUIRK(0x17aa, 0x2215, "Thinkpad", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8937) 	SND_PCI_QUIRK(0x17aa, 0x2218, "Thinkpad X1 Carbon 2nd", ALC292_FIXUP_TPT440_DOCK),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8938) 	SND_PCI_QUIRK(0x17aa, 0x2223, "ThinkPad T550", ALC292_FIXUP_TPT440_DOCK),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8939) 	SND_PCI_QUIRK(0x17aa, 0x2226, "ThinkPad X250", ALC292_FIXUP_TPT440_DOCK),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8940) 	SND_PCI_QUIRK(0x17aa, 0x222d, "Thinkpad", ALC298_FIXUP_TPT470_DOCK),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8941) 	SND_PCI_QUIRK(0x17aa, 0x222e, "Thinkpad", ALC298_FIXUP_TPT470_DOCK),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8942) 	SND_PCI_QUIRK(0x17aa, 0x2231, "Thinkpad T560", ALC292_FIXUP_TPT460),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8943) 	SND_PCI_QUIRK(0x17aa, 0x2233, "Thinkpad", ALC292_FIXUP_TPT460),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8944) 	SND_PCI_QUIRK(0x17aa, 0x2245, "Thinkpad T470", ALC298_FIXUP_TPT470_DOCK),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8945) 	SND_PCI_QUIRK(0x17aa, 0x2246, "Thinkpad", ALC298_FIXUP_TPT470_DOCK),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8946) 	SND_PCI_QUIRK(0x17aa, 0x2247, "Thinkpad", ALC298_FIXUP_TPT470_DOCK),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8947) 	SND_PCI_QUIRK(0x17aa, 0x2249, "Thinkpad", ALC292_FIXUP_TPT460),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8948) 	SND_PCI_QUIRK(0x17aa, 0x224b, "Thinkpad", ALC298_FIXUP_TPT470_DOCK),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8949) 	SND_PCI_QUIRK(0x17aa, 0x224c, "Thinkpad", ALC298_FIXUP_TPT470_DOCK),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8950) 	SND_PCI_QUIRK(0x17aa, 0x224d, "Thinkpad", ALC298_FIXUP_TPT470_DOCK),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8951) 	SND_PCI_QUIRK(0x17aa, 0x225d, "Thinkpad T480", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8952) 	SND_PCI_QUIRK(0x17aa, 0x2292, "Thinkpad X1 Carbon 7th", ALC285_FIXUP_THINKPAD_HEADSET_JACK),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8953) 	SND_PCI_QUIRK(0x17aa, 0x22be, "Thinkpad X1 Carbon 8th", ALC285_FIXUP_THINKPAD_HEADSET_JACK),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8954) 	SND_PCI_QUIRK(0x17aa, 0x22c1, "Thinkpad P1 Gen 3", ALC285_FIXUP_THINKPAD_NO_BASS_SPK_HEADSET_JACK),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8955) 	SND_PCI_QUIRK(0x17aa, 0x22c2, "Thinkpad X1 Extreme Gen 3", ALC285_FIXUP_THINKPAD_NO_BASS_SPK_HEADSET_JACK),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8956) 	SND_PCI_QUIRK(0x17aa, 0x30bb, "ThinkCentre AIO", ALC233_FIXUP_LENOVO_LINE2_MIC_HOTKEY),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8957) 	SND_PCI_QUIRK(0x17aa, 0x30e2, "ThinkCentre AIO", ALC233_FIXUP_LENOVO_LINE2_MIC_HOTKEY),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8958) 	SND_PCI_QUIRK(0x17aa, 0x310c, "ThinkCentre Station", ALC294_FIXUP_LENOVO_MIC_LOCATION),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8959) 	SND_PCI_QUIRK(0x17aa, 0x3111, "ThinkCentre Station", ALC294_FIXUP_LENOVO_MIC_LOCATION),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8960) 	SND_PCI_QUIRK(0x17aa, 0x312a, "ThinkCentre Station", ALC294_FIXUP_LENOVO_MIC_LOCATION),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8961) 	SND_PCI_QUIRK(0x17aa, 0x312f, "ThinkCentre Station", ALC294_FIXUP_LENOVO_MIC_LOCATION),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8962) 	SND_PCI_QUIRK(0x17aa, 0x313c, "ThinkCentre Station", ALC294_FIXUP_LENOVO_MIC_LOCATION),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8963) 	SND_PCI_QUIRK(0x17aa, 0x3151, "ThinkCentre Station", ALC283_FIXUP_HEADSET_MIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8964) 	SND_PCI_QUIRK(0x17aa, 0x3176, "ThinkCentre Station", ALC283_FIXUP_HEADSET_MIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8965) 	SND_PCI_QUIRK(0x17aa, 0x3178, "ThinkCentre Station", ALC283_FIXUP_HEADSET_MIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8966) 	SND_PCI_QUIRK(0x17aa, 0x31af, "ThinkCentre Station", ALC623_FIXUP_LENOVO_THINKSTATION_P340),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8967) 	SND_PCI_QUIRK(0x17aa, 0x3813, "Legion 7i 15IMHG05", ALC287_FIXUP_LEGION_15IMHG05_SPEAKERS),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8968) 	SND_PCI_QUIRK(0x17aa, 0x3818, "Lenovo C940", ALC298_FIXUP_LENOVO_SPK_VOLUME),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8969) 	SND_PCI_QUIRK(0x17aa, 0x3819, "Lenovo 13s Gen2 ITL", ALC287_FIXUP_13S_GEN2_SPEAKERS),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8970) 	SND_PCI_QUIRK(0x17aa, 0x3824, "Legion Y9000X 2020", ALC285_FIXUP_LEGION_Y9000X_SPEAKERS),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8971) 	SND_PCI_QUIRK(0x17aa, 0x3827, "Ideapad S740", ALC285_FIXUP_IDEAPAD_S740_COEF),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8972) 	SND_PCI_QUIRK(0x17aa, 0x3834, "Lenovo IdeaPad Slim 9i 14ITL5", ALC287_FIXUP_YOGA7_14ITL_SPEAKERS),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8973) 	SND_PCI_QUIRK(0x17aa, 0x383d, "Legion Y9000X 2019", ALC285_FIXUP_LEGION_Y9000X_SPEAKERS),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8974) 	SND_PCI_QUIRK(0x17aa, 0x3843, "Yoga 9i", ALC287_FIXUP_IDEAPAD_BASS_SPK_AMP),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8975) 	SND_PCI_QUIRK(0x17aa, 0x384a, "Lenovo Yoga 7 15ITL5", ALC287_FIXUP_YOGA7_14ITL_SPEAKERS),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8976) 	SND_PCI_QUIRK(0x17aa, 0x3852, "Lenovo Yoga 7 14ITL5", ALC287_FIXUP_YOGA7_14ITL_SPEAKERS),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8977) 	SND_PCI_QUIRK(0x17aa, 0x3853, "Lenovo Yoga 7 15ITL5", ALC287_FIXUP_YOGA7_14ITL_SPEAKERS),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8978) 	SND_PCI_QUIRK(0x17aa, 0x3902, "Lenovo E50-80", ALC269_FIXUP_DMIC_THINKPAD_ACPI),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8979) 	SND_PCI_QUIRK(0x17aa, 0x3977, "IdeaPad S210", ALC283_FIXUP_INT_MIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8980) 	SND_PCI_QUIRK(0x17aa, 0x3978, "Lenovo B50-70", ALC269_FIXUP_DMIC_THINKPAD_ACPI),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8981) 	SND_PCI_QUIRK(0x17aa, 0x3bf8, "Quanta FL1", ALC269_FIXUP_PCM_44K),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8982) 	SND_PCI_QUIRK(0x17aa, 0x5013, "Thinkpad", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8983) 	SND_PCI_QUIRK(0x17aa, 0x501a, "Thinkpad", ALC283_FIXUP_INT_MIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8984) 	SND_PCI_QUIRK(0x17aa, 0x501e, "Thinkpad L440", ALC292_FIXUP_TPT440_DOCK),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8985) 	SND_PCI_QUIRK(0x17aa, 0x5026, "Thinkpad", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8986) 	SND_PCI_QUIRK(0x17aa, 0x5034, "Thinkpad T450", ALC292_FIXUP_TPT440_DOCK),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8987) 	SND_PCI_QUIRK(0x17aa, 0x5036, "Thinkpad T450s", ALC292_FIXUP_TPT440_DOCK),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8988) 	SND_PCI_QUIRK(0x17aa, 0x503c, "Thinkpad L450", ALC292_FIXUP_TPT440_DOCK),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8989) 	SND_PCI_QUIRK(0x17aa, 0x504a, "ThinkPad X260", ALC292_FIXUP_TPT440_DOCK),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8990) 	SND_PCI_QUIRK(0x17aa, 0x504b, "Thinkpad", ALC293_FIXUP_LENOVO_SPK_NOISE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8991) 	SND_PCI_QUIRK(0x17aa, 0x5050, "Thinkpad T560p", ALC292_FIXUP_TPT460),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8992) 	SND_PCI_QUIRK(0x17aa, 0x5051, "Thinkpad L460", ALC292_FIXUP_TPT460),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8993) 	SND_PCI_QUIRK(0x17aa, 0x5053, "Thinkpad T460", ALC292_FIXUP_TPT460),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8994) 	SND_PCI_QUIRK(0x17aa, 0x505d, "Thinkpad", ALC298_FIXUP_TPT470_DOCK),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8995) 	SND_PCI_QUIRK(0x17aa, 0x505f, "Thinkpad", ALC298_FIXUP_TPT470_DOCK),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8996) 	SND_PCI_QUIRK(0x17aa, 0x5062, "Thinkpad", ALC298_FIXUP_TPT470_DOCK),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8997) 	SND_PCI_QUIRK(0x17aa, 0x5109, "Thinkpad", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8998) 	SND_PCI_QUIRK(0x17aa, 0x511e, "Thinkpad", ALC298_FIXUP_TPT470_DOCK),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8999) 	SND_PCI_QUIRK(0x17aa, 0x511f, "Thinkpad", ALC298_FIXUP_TPT470_DOCK),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9000) 	SND_PCI_QUIRK(0x17aa, 0x9e54, "LENOVO NB", ALC269_FIXUP_LENOVO_EAPD),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9001) 	SND_PCI_QUIRK(0x1849, 0x1233, "ASRock NUC Box 1100", ALC233_FIXUP_NO_AUDIO_JACK),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9002) 	SND_PCI_QUIRK(0x19e5, 0x3204, "Huawei MACH-WX9", ALC256_FIXUP_HUAWEI_MACH_WX9_PINS),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9003) 	SND_PCI_QUIRK(0x1b35, 0x1235, "CZC B20", ALC269_FIXUP_CZC_B20),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9004) 	SND_PCI_QUIRK(0x1b35, 0x1236, "CZC TMI", ALC269_FIXUP_CZC_TMI),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9005) 	SND_PCI_QUIRK(0x1b35, 0x1237, "CZC L101", ALC269_FIXUP_CZC_L101),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9006) 	SND_PCI_QUIRK(0x1b7d, 0xa831, "Ordissimo EVE2 ", ALC269VB_FIXUP_ORDISSIMO_EVE2), /* Also known as Malata PC-B1303 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9007) 	SND_PCI_QUIRK(0x1c06, 0x2013, "Lemote A1802", ALC269_FIXUP_LEMOTE_A1802),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9008) 	SND_PCI_QUIRK(0x1c06, 0x2015, "Lemote A190X", ALC269_FIXUP_LEMOTE_A190X),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9009) 	SND_PCI_QUIRK(0x1d05, 0x1132, "TongFang PHxTxX1", ALC256_FIXUP_SET_COEF_DEFAULTS),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9010) 	SND_PCI_QUIRK(0x1d72, 0x1602, "RedmiBook", ALC255_FIXUP_XIAOMI_HEADSET_MIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9011) 	SND_PCI_QUIRK(0x1d72, 0x1701, "XiaomiNotebook Pro", ALC298_FIXUP_DELL1_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9012) 	SND_PCI_QUIRK(0x1d72, 0x1901, "RedmiBook 14", ALC256_FIXUP_ASUS_HEADSET_MIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9013) 	SND_PCI_QUIRK(0x1d72, 0x1947, "RedmiBook Air", ALC255_FIXUP_XIAOMI_HEADSET_MIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9014) 	SND_PCI_QUIRK(0x8086, 0x2074, "Intel NUC 8", ALC233_FIXUP_INTEL_NUC8_DMIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9015) 	SND_PCI_QUIRK(0x8086, 0x2080, "Intel NUC 8 Rugged", ALC256_FIXUP_INTEL_NUC8_RUGGED),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9016) 	SND_PCI_QUIRK(0x8086, 0x2081, "Intel NUC 10", ALC256_FIXUP_INTEL_NUC10),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9017) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9018) #if 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9019) 	/* Below is a quirk table taken from the old code.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9020) 	 * Basically the device should work as is without the fixup table.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9021) 	 * If BIOS doesn't give a proper info, enable the corresponding
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9022) 	 * fixup entry.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9023) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9024) 	SND_PCI_QUIRK(0x1043, 0x8330, "ASUS Eeepc P703 P900A",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9025) 		      ALC269_FIXUP_AMIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9026) 	SND_PCI_QUIRK(0x1043, 0x1013, "ASUS N61Da", ALC269_FIXUP_AMIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9027) 	SND_PCI_QUIRK(0x1043, 0x1143, "ASUS B53f", ALC269_FIXUP_AMIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9028) 	SND_PCI_QUIRK(0x1043, 0x1133, "ASUS UJ20ft", ALC269_FIXUP_AMIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9029) 	SND_PCI_QUIRK(0x1043, 0x1183, "ASUS K72DR", ALC269_FIXUP_AMIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9030) 	SND_PCI_QUIRK(0x1043, 0x11b3, "ASUS K52DR", ALC269_FIXUP_AMIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9031) 	SND_PCI_QUIRK(0x1043, 0x11e3, "ASUS U33Jc", ALC269_FIXUP_AMIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9032) 	SND_PCI_QUIRK(0x1043, 0x1273, "ASUS UL80Jt", ALC269_FIXUP_AMIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9033) 	SND_PCI_QUIRK(0x1043, 0x1283, "ASUS U53Jc", ALC269_FIXUP_AMIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9034) 	SND_PCI_QUIRK(0x1043, 0x12b3, "ASUS N82JV", ALC269_FIXUP_AMIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9035) 	SND_PCI_QUIRK(0x1043, 0x12d3, "ASUS N61Jv", ALC269_FIXUP_AMIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9036) 	SND_PCI_QUIRK(0x1043, 0x13a3, "ASUS UL30Vt", ALC269_FIXUP_AMIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9037) 	SND_PCI_QUIRK(0x1043, 0x1373, "ASUS G73JX", ALC269_FIXUP_AMIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9038) 	SND_PCI_QUIRK(0x1043, 0x1383, "ASUS UJ30Jc", ALC269_FIXUP_AMIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9039) 	SND_PCI_QUIRK(0x1043, 0x13d3, "ASUS N61JA", ALC269_FIXUP_AMIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9040) 	SND_PCI_QUIRK(0x1043, 0x1413, "ASUS UL50", ALC269_FIXUP_AMIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9041) 	SND_PCI_QUIRK(0x1043, 0x1443, "ASUS UL30", ALC269_FIXUP_AMIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9042) 	SND_PCI_QUIRK(0x1043, 0x1453, "ASUS M60Jv", ALC269_FIXUP_AMIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9043) 	SND_PCI_QUIRK(0x1043, 0x1483, "ASUS UL80", ALC269_FIXUP_AMIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9044) 	SND_PCI_QUIRK(0x1043, 0x14f3, "ASUS F83Vf", ALC269_FIXUP_AMIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9045) 	SND_PCI_QUIRK(0x1043, 0x14e3, "ASUS UL20", ALC269_FIXUP_AMIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9046) 	SND_PCI_QUIRK(0x1043, 0x1513, "ASUS UX30", ALC269_FIXUP_AMIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9047) 	SND_PCI_QUIRK(0x1043, 0x1593, "ASUS N51Vn", ALC269_FIXUP_AMIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9048) 	SND_PCI_QUIRK(0x1043, 0x15a3, "ASUS N60Jv", ALC269_FIXUP_AMIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9049) 	SND_PCI_QUIRK(0x1043, 0x15b3, "ASUS N60Dp", ALC269_FIXUP_AMIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9050) 	SND_PCI_QUIRK(0x1043, 0x15c3, "ASUS N70De", ALC269_FIXUP_AMIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9051) 	SND_PCI_QUIRK(0x1043, 0x15e3, "ASUS F83T", ALC269_FIXUP_AMIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9052) 	SND_PCI_QUIRK(0x1043, 0x1643, "ASUS M60J", ALC269_FIXUP_AMIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9053) 	SND_PCI_QUIRK(0x1043, 0x1653, "ASUS U50", ALC269_FIXUP_AMIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9054) 	SND_PCI_QUIRK(0x1043, 0x1693, "ASUS F50N", ALC269_FIXUP_AMIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9055) 	SND_PCI_QUIRK(0x1043, 0x16a3, "ASUS F5Q", ALC269_FIXUP_AMIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9056) 	SND_PCI_QUIRK(0x1043, 0x1723, "ASUS P80", ALC269_FIXUP_AMIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9057) 	SND_PCI_QUIRK(0x1043, 0x1743, "ASUS U80", ALC269_FIXUP_AMIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9058) 	SND_PCI_QUIRK(0x1043, 0x1773, "ASUS U20A", ALC269_FIXUP_AMIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9059) 	SND_PCI_QUIRK(0x1043, 0x1883, "ASUS F81Se", ALC269_FIXUP_AMIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9060) 	SND_PCI_QUIRK(0x152d, 0x1778, "Quanta ON1", ALC269_FIXUP_DMIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9061) 	SND_PCI_QUIRK(0x17aa, 0x3be9, "Quanta Wistron", ALC269_FIXUP_AMIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9062) 	SND_PCI_QUIRK(0x17aa, 0x3bf8, "Quanta FL1", ALC269_FIXUP_AMIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9063) 	SND_PCI_QUIRK(0x17ff, 0x059a, "Quanta EL3", ALC269_FIXUP_DMIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9064) 	SND_PCI_QUIRK(0x17ff, 0x059b, "Quanta JR1", ALC269_FIXUP_DMIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9065) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9066) 	{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9067) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9068) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9069) static const struct snd_pci_quirk alc269_fixup_vendor_tbl[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9070) 	SND_PCI_QUIRK_VENDOR(0x1025, "Acer Aspire", ALC271_FIXUP_DMIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9071) 	SND_PCI_QUIRK_VENDOR(0x103c, "HP", ALC269_FIXUP_HP_MUTE_LED),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9072) 	SND_PCI_QUIRK_VENDOR(0x104d, "Sony VAIO", ALC269_FIXUP_SONY_VAIO),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9073) 	SND_PCI_QUIRK_VENDOR(0x17aa, "Thinkpad", ALC269_FIXUP_THINKPAD_ACPI),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9074) 	SND_PCI_QUIRK_VENDOR(0x19e5, "Huawei Matebook", ALC255_FIXUP_MIC_MUTE_LED),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9075) 	{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9076) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9077) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9078) static const struct hda_model_fixup alc269_fixup_models[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9079) 	{.id = ALC269_FIXUP_AMIC, .name = "laptop-amic"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9080) 	{.id = ALC269_FIXUP_DMIC, .name = "laptop-dmic"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9081) 	{.id = ALC269_FIXUP_STEREO_DMIC, .name = "alc269-dmic"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9082) 	{.id = ALC271_FIXUP_DMIC, .name = "alc271-dmic"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9083) 	{.id = ALC269_FIXUP_INV_DMIC, .name = "inv-dmic"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9084) 	{.id = ALC269_FIXUP_HEADSET_MIC, .name = "headset-mic"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9085) 	{.id = ALC269_FIXUP_HEADSET_MODE, .name = "headset-mode"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9086) 	{.id = ALC269_FIXUP_HEADSET_MODE_NO_HP_MIC, .name = "headset-mode-no-hp-mic"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9087) 	{.id = ALC269_FIXUP_LENOVO_DOCK, .name = "lenovo-dock"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9088) 	{.id = ALC269_FIXUP_LENOVO_DOCK_LIMIT_BOOST, .name = "lenovo-dock-limit-boost"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9089) 	{.id = ALC269_FIXUP_HP_GPIO_LED, .name = "hp-gpio-led"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9090) 	{.id = ALC269_FIXUP_HP_DOCK_GPIO_MIC1_LED, .name = "hp-dock-gpio-mic1-led"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9091) 	{.id = ALC269_FIXUP_DELL1_MIC_NO_PRESENCE, .name = "dell-headset-multi"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9092) 	{.id = ALC269_FIXUP_DELL2_MIC_NO_PRESENCE, .name = "dell-headset-dock"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9093) 	{.id = ALC269_FIXUP_DELL3_MIC_NO_PRESENCE, .name = "dell-headset3"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9094) 	{.id = ALC269_FIXUP_DELL4_MIC_NO_PRESENCE, .name = "dell-headset4"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9095) 	{.id = ALC283_FIXUP_CHROME_BOOK, .name = "alc283-dac-wcaps"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9096) 	{.id = ALC283_FIXUP_SENSE_COMBO_JACK, .name = "alc283-sense-combo"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9097) 	{.id = ALC292_FIXUP_TPT440_DOCK, .name = "tpt440-dock"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9098) 	{.id = ALC292_FIXUP_TPT440, .name = "tpt440"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9099) 	{.id = ALC292_FIXUP_TPT460, .name = "tpt460"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9100) 	{.id = ALC298_FIXUP_TPT470_DOCK_FIX, .name = "tpt470-dock-fix"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9101) 	{.id = ALC298_FIXUP_TPT470_DOCK, .name = "tpt470-dock"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9102) 	{.id = ALC233_FIXUP_LENOVO_MULTI_CODECS, .name = "dual-codecs"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9103) 	{.id = ALC700_FIXUP_INTEL_REFERENCE, .name = "alc700-ref"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9104) 	{.id = ALC269_FIXUP_SONY_VAIO, .name = "vaio"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9105) 	{.id = ALC269_FIXUP_DELL_M101Z, .name = "dell-m101z"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9106) 	{.id = ALC269_FIXUP_ASUS_G73JW, .name = "asus-g73jw"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9107) 	{.id = ALC269_FIXUP_LENOVO_EAPD, .name = "lenovo-eapd"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9108) 	{.id = ALC275_FIXUP_SONY_HWEQ, .name = "sony-hweq"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9109) 	{.id = ALC269_FIXUP_PCM_44K, .name = "pcm44k"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9110) 	{.id = ALC269_FIXUP_LIFEBOOK, .name = "lifebook"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9111) 	{.id = ALC269_FIXUP_LIFEBOOK_EXTMIC, .name = "lifebook-extmic"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9112) 	{.id = ALC269_FIXUP_LIFEBOOK_HP_PIN, .name = "lifebook-hp-pin"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9113) 	{.id = ALC255_FIXUP_LIFEBOOK_U7x7_HEADSET_MIC, .name = "lifebook-u7x7"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9114) 	{.id = ALC269VB_FIXUP_AMIC, .name = "alc269vb-amic"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9115) 	{.id = ALC269VB_FIXUP_DMIC, .name = "alc269vb-dmic"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9116) 	{.id = ALC269_FIXUP_HP_MUTE_LED_MIC1, .name = "hp-mute-led-mic1"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9117) 	{.id = ALC269_FIXUP_HP_MUTE_LED_MIC2, .name = "hp-mute-led-mic2"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9118) 	{.id = ALC269_FIXUP_HP_MUTE_LED_MIC3, .name = "hp-mute-led-mic3"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9119) 	{.id = ALC269_FIXUP_HP_GPIO_MIC1_LED, .name = "hp-gpio-mic1"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9120) 	{.id = ALC269_FIXUP_HP_LINE1_MIC1_LED, .name = "hp-line1-mic1"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9121) 	{.id = ALC269_FIXUP_NO_SHUTUP, .name = "noshutup"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9122) 	{.id = ALC286_FIXUP_SONY_MIC_NO_PRESENCE, .name = "sony-nomic"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9123) 	{.id = ALC269_FIXUP_ASPIRE_HEADSET_MIC, .name = "aspire-headset-mic"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9124) 	{.id = ALC269_FIXUP_ASUS_X101, .name = "asus-x101"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9125) 	{.id = ALC271_FIXUP_HP_GATE_MIC_JACK, .name = "acer-ao7xx"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9126) 	{.id = ALC271_FIXUP_HP_GATE_MIC_JACK_E1_572, .name = "acer-aspire-e1"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9127) 	{.id = ALC269_FIXUP_ACER_AC700, .name = "acer-ac700"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9128) 	{.id = ALC269_FIXUP_LIMIT_INT_MIC_BOOST, .name = "limit-mic-boost"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9129) 	{.id = ALC269VB_FIXUP_ASUS_ZENBOOK, .name = "asus-zenbook"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9130) 	{.id = ALC269VB_FIXUP_ASUS_ZENBOOK_UX31A, .name = "asus-zenbook-ux31a"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9131) 	{.id = ALC269VB_FIXUP_ORDISSIMO_EVE2, .name = "ordissimo"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9132) 	{.id = ALC282_FIXUP_ASUS_TX300, .name = "asus-tx300"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9133) 	{.id = ALC283_FIXUP_INT_MIC, .name = "alc283-int-mic"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9134) 	{.id = ALC290_FIXUP_MONO_SPEAKERS_HSJACK, .name = "mono-speakers"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9135) 	{.id = ALC290_FIXUP_SUBWOOFER_HSJACK, .name = "alc290-subwoofer"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9136) 	{.id = ALC269_FIXUP_THINKPAD_ACPI, .name = "thinkpad"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9137) 	{.id = ALC269_FIXUP_DMIC_THINKPAD_ACPI, .name = "dmic-thinkpad"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9138) 	{.id = ALC255_FIXUP_ACER_MIC_NO_PRESENCE, .name = "alc255-acer"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9139) 	{.id = ALC255_FIXUP_ASUS_MIC_NO_PRESENCE, .name = "alc255-asus"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9140) 	{.id = ALC255_FIXUP_DELL1_MIC_NO_PRESENCE, .name = "alc255-dell1"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9141) 	{.id = ALC255_FIXUP_DELL2_MIC_NO_PRESENCE, .name = "alc255-dell2"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9142) 	{.id = ALC293_FIXUP_DELL1_MIC_NO_PRESENCE, .name = "alc293-dell1"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9143) 	{.id = ALC283_FIXUP_HEADSET_MIC, .name = "alc283-headset"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9144) 	{.id = ALC255_FIXUP_MIC_MUTE_LED, .name = "alc255-dell-mute"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9145) 	{.id = ALC282_FIXUP_ASPIRE_V5_PINS, .name = "aspire-v5"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9146) 	{.id = ALC269VB_FIXUP_ASPIRE_E1_COEF, .name = "aspire-e1-coef"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9147) 	{.id = ALC280_FIXUP_HP_GPIO4, .name = "hp-gpio4"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9148) 	{.id = ALC286_FIXUP_HP_GPIO_LED, .name = "hp-gpio-led"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9149) 	{.id = ALC280_FIXUP_HP_GPIO2_MIC_HOTKEY, .name = "hp-gpio2-hotkey"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9150) 	{.id = ALC280_FIXUP_HP_DOCK_PINS, .name = "hp-dock-pins"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9151) 	{.id = ALC269_FIXUP_HP_DOCK_GPIO_MIC1_LED, .name = "hp-dock-gpio-mic"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9152) 	{.id = ALC280_FIXUP_HP_9480M, .name = "hp-9480m"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9153) 	{.id = ALC288_FIXUP_DELL_HEADSET_MODE, .name = "alc288-dell-headset"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9154) 	{.id = ALC288_FIXUP_DELL1_MIC_NO_PRESENCE, .name = "alc288-dell1"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9155) 	{.id = ALC288_FIXUP_DELL_XPS_13, .name = "alc288-dell-xps13"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9156) 	{.id = ALC292_FIXUP_DELL_E7X, .name = "dell-e7x"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9157) 	{.id = ALC293_FIXUP_DISABLE_AAMIX_MULTIJACK, .name = "alc293-dell"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9158) 	{.id = ALC298_FIXUP_DELL1_MIC_NO_PRESENCE, .name = "alc298-dell1"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9159) 	{.id = ALC298_FIXUP_DELL_AIO_MIC_NO_PRESENCE, .name = "alc298-dell-aio"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9160) 	{.id = ALC275_FIXUP_DELL_XPS, .name = "alc275-dell-xps"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9161) 	{.id = ALC293_FIXUP_LENOVO_SPK_NOISE, .name = "lenovo-spk-noise"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9162) 	{.id = ALC233_FIXUP_LENOVO_LINE2_MIC_HOTKEY, .name = "lenovo-hotkey"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9163) 	{.id = ALC255_FIXUP_DELL_SPK_NOISE, .name = "dell-spk-noise"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9164) 	{.id = ALC225_FIXUP_DELL1_MIC_NO_PRESENCE, .name = "alc225-dell1"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9165) 	{.id = ALC295_FIXUP_DISABLE_DAC3, .name = "alc295-disable-dac3"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9166) 	{.id = ALC285_FIXUP_SPEAKER2_TO_DAC1, .name = "alc285-speaker2-to-dac1"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9167) 	{.id = ALC280_FIXUP_HP_HEADSET_MIC, .name = "alc280-hp-headset"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9168) 	{.id = ALC221_FIXUP_HP_FRONT_MIC, .name = "alc221-hp-mic"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9169) 	{.id = ALC298_FIXUP_SPK_VOLUME, .name = "alc298-spk-volume"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9170) 	{.id = ALC256_FIXUP_DELL_INSPIRON_7559_SUBWOOFER, .name = "dell-inspiron-7559"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9171) 	{.id = ALC269_FIXUP_ATIV_BOOK_8, .name = "ativ-book"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9172) 	{.id = ALC221_FIXUP_HP_MIC_NO_PRESENCE, .name = "alc221-hp-mic"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9173) 	{.id = ALC256_FIXUP_ASUS_HEADSET_MODE, .name = "alc256-asus-headset"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9174) 	{.id = ALC256_FIXUP_ASUS_MIC, .name = "alc256-asus-mic"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9175) 	{.id = ALC256_FIXUP_ASUS_AIO_GPIO2, .name = "alc256-asus-aio"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9176) 	{.id = ALC233_FIXUP_ASUS_MIC_NO_PRESENCE, .name = "alc233-asus"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9177) 	{.id = ALC233_FIXUP_EAPD_COEF_AND_MIC_NO_PRESENCE, .name = "alc233-eapd"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9178) 	{.id = ALC294_FIXUP_LENOVO_MIC_LOCATION, .name = "alc294-lenovo-mic"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9179) 	{.id = ALC225_FIXUP_DELL_WYSE_MIC_NO_PRESENCE, .name = "alc225-wyse"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9180) 	{.id = ALC274_FIXUP_DELL_AIO_LINEOUT_VERB, .name = "alc274-dell-aio"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9181) 	{.id = ALC255_FIXUP_DUMMY_LINEOUT_VERB, .name = "alc255-dummy-lineout"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9182) 	{.id = ALC255_FIXUP_DELL_HEADSET_MIC, .name = "alc255-dell-headset"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9183) 	{.id = ALC295_FIXUP_HP_X360, .name = "alc295-hp-x360"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9184) 	{.id = ALC225_FIXUP_HEADSET_JACK, .name = "alc-headset-jack"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9185) 	{.id = ALC295_FIXUP_CHROME_BOOK, .name = "alc-chrome-book"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9186) 	{.id = ALC299_FIXUP_PREDATOR_SPK, .name = "predator-spk"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9187) 	{.id = ALC298_FIXUP_HUAWEI_MBX_STEREO, .name = "huawei-mbx-stereo"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9188) 	{.id = ALC256_FIXUP_MEDION_HEADSET_NO_PRESENCE, .name = "alc256-medion-headset"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9189) 	{.id = ALC298_FIXUP_SAMSUNG_HEADPHONE_VERY_QUIET, .name = "alc298-samsung-headphone"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9190) 	{.id = ALC256_FIXUP_SAMSUNG_HEADPHONE_VERY_QUIET, .name = "alc256-samsung-headphone"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9191) 	{.id = ALC255_FIXUP_XIAOMI_HEADSET_MIC, .name = "alc255-xiaomi-headset"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9192) 	{.id = ALC274_FIXUP_HP_MIC, .name = "alc274-hp-mic-detect"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9193) 	{.id = ALC245_FIXUP_HP_X360_AMP, .name = "alc245-hp-x360-amp"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9194) 	{.id = ALC295_FIXUP_HP_OMEN, .name = "alc295-hp-omen"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9195) 	{.id = ALC285_FIXUP_HP_SPECTRE_X360, .name = "alc285-hp-spectre-x360"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9196) 	{.id = ALC285_FIXUP_HP_SPECTRE_X360_EB1, .name = "alc285-hp-spectre-x360-eb1"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9197) 	{.id = ALC287_FIXUP_IDEAPAD_BASS_SPK_AMP, .name = "alc287-ideapad-bass-spk-amp"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9198) 	{.id = ALC623_FIXUP_LENOVO_THINKSTATION_P340, .name = "alc623-lenovo-thinkstation-p340"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9199) 	{.id = ALC255_FIXUP_ACER_HEADPHONE_AND_MIC, .name = "alc255-acer-headphone-and-mic"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9200) 	{.id = ALC285_FIXUP_HP_GPIO_AMP_INIT, .name = "alc285-hp-amp-init"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9201) 	{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9202) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9203) #define ALC225_STANDARD_PINS \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9204) 	{0x21, 0x04211020}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9205) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9206) #define ALC256_STANDARD_PINS \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9207) 	{0x12, 0x90a60140}, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9208) 	{0x14, 0x90170110}, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9209) 	{0x21, 0x02211020}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9210) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9211) #define ALC282_STANDARD_PINS \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9212) 	{0x14, 0x90170110}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9213) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9214) #define ALC290_STANDARD_PINS \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9215) 	{0x12, 0x99a30130}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9216) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9217) #define ALC292_STANDARD_PINS \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9218) 	{0x14, 0x90170110}, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9219) 	{0x15, 0x0221401f}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9220) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9221) #define ALC295_STANDARD_PINS \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9222) 	{0x12, 0xb7a60130}, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9223) 	{0x14, 0x90170110}, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9224) 	{0x21, 0x04211020}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9225) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9226) #define ALC298_STANDARD_PINS \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9227) 	{0x12, 0x90a60130}, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9228) 	{0x21, 0x03211020}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9229) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9230) static const struct snd_hda_pin_quirk alc269_pin_fixup_tbl[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9231) 	SND_HDA_PIN_QUIRK(0x10ec0221, 0x103c, "HP Workstation", ALC221_FIXUP_HP_HEADSET_MIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9232) 		{0x14, 0x01014020},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9233) 		{0x17, 0x90170110},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9234) 		{0x18, 0x02a11030},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9235) 		{0x19, 0x0181303F},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9236) 		{0x21, 0x0221102f}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9237) 	SND_HDA_PIN_QUIRK(0x10ec0255, 0x1025, "Acer", ALC255_FIXUP_ACER_MIC_NO_PRESENCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9238) 		{0x12, 0x90a601c0},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9239) 		{0x14, 0x90171120},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9240) 		{0x21, 0x02211030}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9241) 	SND_HDA_PIN_QUIRK(0x10ec0255, 0x1043, "ASUS", ALC255_FIXUP_ASUS_MIC_NO_PRESENCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9242) 		{0x14, 0x90170110},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9243) 		{0x1b, 0x90a70130},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9244) 		{0x21, 0x03211020}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9245) 	SND_HDA_PIN_QUIRK(0x10ec0255, 0x1043, "ASUS", ALC255_FIXUP_ASUS_MIC_NO_PRESENCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9246) 		{0x1a, 0x90a70130},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9247) 		{0x1b, 0x90170110},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9248) 		{0x21, 0x03211020}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9249) 	SND_HDA_PIN_QUIRK(0x10ec0225, 0x1028, "Dell", ALC225_FIXUP_DELL1_MIC_NO_PRESENCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9250) 		ALC225_STANDARD_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9251) 		{0x12, 0xb7a60130},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9252) 		{0x14, 0x901701a0}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9253) 	SND_HDA_PIN_QUIRK(0x10ec0225, 0x1028, "Dell", ALC225_FIXUP_DELL1_MIC_NO_PRESENCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9254) 		ALC225_STANDARD_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9255) 		{0x12, 0xb7a60130},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9256) 		{0x14, 0x901701b0}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9257) 	SND_HDA_PIN_QUIRK(0x10ec0225, 0x1028, "Dell", ALC225_FIXUP_DELL1_MIC_NO_PRESENCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9258) 		ALC225_STANDARD_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9259) 		{0x12, 0xb7a60150},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9260) 		{0x14, 0x901701a0}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9261) 	SND_HDA_PIN_QUIRK(0x10ec0225, 0x1028, "Dell", ALC225_FIXUP_DELL1_MIC_NO_PRESENCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9262) 		ALC225_STANDARD_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9263) 		{0x12, 0xb7a60150},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9264) 		{0x14, 0x901701b0}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9265) 	SND_HDA_PIN_QUIRK(0x10ec0225, 0x1028, "Dell", ALC225_FIXUP_DELL1_MIC_NO_PRESENCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9266) 		ALC225_STANDARD_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9267) 		{0x12, 0xb7a60130},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9268) 		{0x1b, 0x90170110}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9269) 	SND_HDA_PIN_QUIRK(0x10ec0233, 0x8086, "Intel NUC Skull Canyon", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9270) 		{0x1b, 0x01111010},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9271) 		{0x1e, 0x01451130},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9272) 		{0x21, 0x02211020}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9273) 	SND_HDA_PIN_QUIRK(0x10ec0235, 0x17aa, "Lenovo", ALC233_FIXUP_LENOVO_LINE2_MIC_HOTKEY,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9274) 		{0x12, 0x90a60140},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9275) 		{0x14, 0x90170110},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9276) 		{0x19, 0x02a11030},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9277) 		{0x21, 0x02211020}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9278) 	SND_HDA_PIN_QUIRK(0x10ec0235, 0x17aa, "Lenovo", ALC294_FIXUP_LENOVO_MIC_LOCATION,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9279) 		{0x14, 0x90170110},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9280) 		{0x19, 0x02a11030},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9281) 		{0x1a, 0x02a11040},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9282) 		{0x1b, 0x01014020},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9283) 		{0x21, 0x0221101f}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9284) 	SND_HDA_PIN_QUIRK(0x10ec0235, 0x17aa, "Lenovo", ALC294_FIXUP_LENOVO_MIC_LOCATION,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9285) 		{0x14, 0x90170110},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9286) 		{0x19, 0x02a11030},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9287) 		{0x1a, 0x02a11040},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9288) 		{0x1b, 0x01011020},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9289) 		{0x21, 0x0221101f}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9290) 	SND_HDA_PIN_QUIRK(0x10ec0235, 0x17aa, "Lenovo", ALC294_FIXUP_LENOVO_MIC_LOCATION,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9291) 		{0x14, 0x90170110},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9292) 		{0x19, 0x02a11020},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9293) 		{0x1a, 0x02a11030},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9294) 		{0x21, 0x0221101f}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9295) 	SND_HDA_PIN_QUIRK(0x10ec0236, 0x1028, "Dell", ALC236_FIXUP_DELL_AIO_HEADSET_MIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9296) 		{0x21, 0x02211010}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9297) 	SND_HDA_PIN_QUIRK(0x10ec0236, 0x103c, "HP", ALC256_FIXUP_HP_HEADSET_MIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9298) 		{0x14, 0x90170110},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9299) 		{0x19, 0x02a11020},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9300) 		{0x21, 0x02211030}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9301) 	SND_HDA_PIN_QUIRK(0x10ec0255, 0x1028, "Dell", ALC255_FIXUP_DELL2_MIC_NO_PRESENCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9302) 		{0x14, 0x90170110},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9303) 		{0x21, 0x02211020}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9304) 	SND_HDA_PIN_QUIRK(0x10ec0255, 0x1028, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9305) 		{0x14, 0x90170130},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9306) 		{0x21, 0x02211040}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9307) 	SND_HDA_PIN_QUIRK(0x10ec0255, 0x1028, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9308) 		{0x12, 0x90a60140},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9309) 		{0x14, 0x90170110},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9310) 		{0x21, 0x02211020}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9311) 	SND_HDA_PIN_QUIRK(0x10ec0255, 0x1028, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9312) 		{0x12, 0x90a60160},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9313) 		{0x14, 0x90170120},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9314) 		{0x21, 0x02211030}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9315) 	SND_HDA_PIN_QUIRK(0x10ec0255, 0x1028, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9316) 		{0x14, 0x90170110},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9317) 		{0x1b, 0x02011020},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9318) 		{0x21, 0x0221101f}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9319) 	SND_HDA_PIN_QUIRK(0x10ec0255, 0x1028, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9320) 		{0x14, 0x90170110},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9321) 		{0x1b, 0x01011020},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9322) 		{0x21, 0x0221101f}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9323) 	SND_HDA_PIN_QUIRK(0x10ec0255, 0x1028, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9324) 		{0x14, 0x90170130},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9325) 		{0x1b, 0x01014020},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9326) 		{0x21, 0x0221103f}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9327) 	SND_HDA_PIN_QUIRK(0x10ec0255, 0x1028, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9328) 		{0x14, 0x90170130},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9329) 		{0x1b, 0x01011020},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9330) 		{0x21, 0x0221103f}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9331) 	SND_HDA_PIN_QUIRK(0x10ec0255, 0x1028, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9332) 		{0x14, 0x90170130},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9333) 		{0x1b, 0x02011020},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9334) 		{0x21, 0x0221103f}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9335) 	SND_HDA_PIN_QUIRK(0x10ec0255, 0x1028, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9336) 		{0x14, 0x90170150},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9337) 		{0x1b, 0x02011020},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9338) 		{0x21, 0x0221105f}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9339) 	SND_HDA_PIN_QUIRK(0x10ec0255, 0x1028, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9340) 		{0x14, 0x90170110},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9341) 		{0x1b, 0x01014020},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9342) 		{0x21, 0x0221101f}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9343) 	SND_HDA_PIN_QUIRK(0x10ec0255, 0x1028, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9344) 		{0x12, 0x90a60160},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9345) 		{0x14, 0x90170120},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9346) 		{0x17, 0x90170140},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9347) 		{0x21, 0x0321102f}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9348) 	SND_HDA_PIN_QUIRK(0x10ec0255, 0x1028, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9349) 		{0x12, 0x90a60160},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9350) 		{0x14, 0x90170130},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9351) 		{0x21, 0x02211040}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9352) 	SND_HDA_PIN_QUIRK(0x10ec0255, 0x1028, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9353) 		{0x12, 0x90a60160},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9354) 		{0x14, 0x90170140},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9355) 		{0x21, 0x02211050}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9356) 	SND_HDA_PIN_QUIRK(0x10ec0255, 0x1028, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9357) 		{0x12, 0x90a60170},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9358) 		{0x14, 0x90170120},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9359) 		{0x21, 0x02211030}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9360) 	SND_HDA_PIN_QUIRK(0x10ec0255, 0x1028, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9361) 		{0x12, 0x90a60170},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9362) 		{0x14, 0x90170130},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9363) 		{0x21, 0x02211040}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9364) 	SND_HDA_PIN_QUIRK(0x10ec0255, 0x1028, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9365) 		{0x12, 0x90a60170},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9366) 		{0x14, 0x90171130},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9367) 		{0x21, 0x02211040}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9368) 	SND_HDA_PIN_QUIRK(0x10ec0255, 0x1028, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9369) 		{0x12, 0x90a60170},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9370) 		{0x14, 0x90170140},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9371) 		{0x21, 0x02211050}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9372) 	SND_HDA_PIN_QUIRK(0x10ec0255, 0x1028, "Dell Inspiron 5548", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9373) 		{0x12, 0x90a60180},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9374) 		{0x14, 0x90170130},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9375) 		{0x21, 0x02211040}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9376) 	SND_HDA_PIN_QUIRK(0x10ec0255, 0x1028, "Dell Inspiron 5565", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9377) 		{0x12, 0x90a60180},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9378) 		{0x14, 0x90170120},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9379) 		{0x21, 0x02211030}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9380) 	SND_HDA_PIN_QUIRK(0x10ec0255, 0x1028, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9381) 		{0x1b, 0x01011020},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9382) 		{0x21, 0x02211010}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9383) 	SND_HDA_PIN_QUIRK(0x10ec0256, 0x1043, "ASUS", ALC256_FIXUP_ASUS_MIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9384) 		{0x14, 0x90170110},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9385) 		{0x1b, 0x90a70130},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9386) 		{0x21, 0x04211020}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9387) 	SND_HDA_PIN_QUIRK(0x10ec0256, 0x1043, "ASUS", ALC256_FIXUP_ASUS_MIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9388) 		{0x14, 0x90170110},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9389) 		{0x1b, 0x90a70130},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9390) 		{0x21, 0x03211020}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9391) 	SND_HDA_PIN_QUIRK(0x10ec0256, 0x1043, "ASUS", ALC256_FIXUP_ASUS_MIC_NO_PRESENCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9392) 		{0x12, 0x90a60130},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9393) 		{0x14, 0x90170110},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9394) 		{0x21, 0x03211020}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9395) 	SND_HDA_PIN_QUIRK(0x10ec0256, 0x1043, "ASUS", ALC256_FIXUP_ASUS_MIC_NO_PRESENCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9396) 		{0x12, 0x90a60130},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9397) 		{0x14, 0x90170110},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9398) 		{0x21, 0x04211020}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9399) 	SND_HDA_PIN_QUIRK(0x10ec0256, 0x1043, "ASUS", ALC256_FIXUP_ASUS_MIC_NO_PRESENCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9400) 		{0x1a, 0x90a70130},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9401) 		{0x1b, 0x90170110},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9402) 		{0x21, 0x03211020}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9403)        SND_HDA_PIN_QUIRK(0x10ec0256, 0x103c, "HP", ALC256_FIXUP_HP_HEADSET_MIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9404) 		{0x14, 0x90170110},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9405) 		{0x19, 0x02a11020},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9406) 		{0x21, 0x0221101f}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9407)        SND_HDA_PIN_QUIRK(0x10ec0274, 0x103c, "HP", ALC274_FIXUP_HP_HEADSET_MIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9408) 		{0x17, 0x90170110},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9409) 		{0x19, 0x03a11030},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9410) 		{0x21, 0x03211020}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9411) 	SND_HDA_PIN_QUIRK(0x10ec0280, 0x103c, "HP", ALC280_FIXUP_HP_GPIO4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9412) 		{0x12, 0x90a60130},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9413) 		{0x14, 0x90170110},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9414) 		{0x15, 0x0421101f},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9415) 		{0x1a, 0x04a11020}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9416) 	SND_HDA_PIN_QUIRK(0x10ec0280, 0x103c, "HP", ALC269_FIXUP_HP_GPIO_MIC1_LED,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9417) 		{0x12, 0x90a60140},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9418) 		{0x14, 0x90170110},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9419) 		{0x15, 0x0421101f},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9420) 		{0x18, 0x02811030},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9421) 		{0x1a, 0x04a1103f},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9422) 		{0x1b, 0x02011020}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9423) 	SND_HDA_PIN_QUIRK(0x10ec0282, 0x103c, "HP 15 Touchsmart", ALC269_FIXUP_HP_MUTE_LED_MIC1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9424) 		ALC282_STANDARD_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9425) 		{0x12, 0x99a30130},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9426) 		{0x19, 0x03a11020},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9427) 		{0x21, 0x0321101f}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9428) 	SND_HDA_PIN_QUIRK(0x10ec0282, 0x103c, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9429) 		ALC282_STANDARD_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9430) 		{0x12, 0x99a30130},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9431) 		{0x19, 0x03a11020},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9432) 		{0x21, 0x03211040}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9433) 	SND_HDA_PIN_QUIRK(0x10ec0282, 0x103c, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9434) 		ALC282_STANDARD_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9435) 		{0x12, 0x99a30130},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9436) 		{0x19, 0x03a11030},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9437) 		{0x21, 0x03211020}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9438) 	SND_HDA_PIN_QUIRK(0x10ec0282, 0x103c, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9439) 		ALC282_STANDARD_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9440) 		{0x12, 0x99a30130},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9441) 		{0x19, 0x04a11020},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9442) 		{0x21, 0x0421101f}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9443) 	SND_HDA_PIN_QUIRK(0x10ec0282, 0x103c, "HP", ALC269_FIXUP_HP_LINE1_MIC1_LED,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9444) 		ALC282_STANDARD_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9445) 		{0x12, 0x90a60140},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9446) 		{0x19, 0x04a11030},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9447) 		{0x21, 0x04211020}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9448) 	SND_HDA_PIN_QUIRK(0x10ec0282, 0x1025, "Acer", ALC282_FIXUP_ACER_DISABLE_LINEOUT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9449) 		ALC282_STANDARD_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9450) 		{0x12, 0x90a609c0},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9451) 		{0x18, 0x03a11830},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9452) 		{0x19, 0x04a19831},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9453) 		{0x1a, 0x0481303f},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9454) 		{0x1b, 0x04211020},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9455) 		{0x21, 0x0321101f}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9456) 	SND_HDA_PIN_QUIRK(0x10ec0282, 0x1025, "Acer", ALC282_FIXUP_ACER_DISABLE_LINEOUT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9457) 		ALC282_STANDARD_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9458) 		{0x12, 0x90a60940},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9459) 		{0x18, 0x03a11830},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9460) 		{0x19, 0x04a19831},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9461) 		{0x1a, 0x0481303f},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9462) 		{0x1b, 0x04211020},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9463) 		{0x21, 0x0321101f}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9464) 	SND_HDA_PIN_QUIRK(0x10ec0283, 0x1028, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9465) 		ALC282_STANDARD_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9466) 		{0x12, 0x90a60130},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9467) 		{0x21, 0x0321101f}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9468) 	SND_HDA_PIN_QUIRK(0x10ec0283, 0x1028, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9469) 		{0x12, 0x90a60160},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9470) 		{0x14, 0x90170120},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9471) 		{0x21, 0x02211030}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9472) 	SND_HDA_PIN_QUIRK(0x10ec0283, 0x1028, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9473) 		ALC282_STANDARD_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9474) 		{0x12, 0x90a60130},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9475) 		{0x19, 0x03a11020},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9476) 		{0x21, 0x0321101f}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9477) 	SND_HDA_PIN_QUIRK(0x10ec0285, 0x17aa, "Lenovo", ALC285_FIXUP_LENOVO_PC_BEEP_IN_NOISE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9478) 		{0x12, 0x90a60130},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9479) 		{0x14, 0x90170110},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9480) 		{0x19, 0x04a11040},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9481) 		{0x21, 0x04211020}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9482) 	SND_HDA_PIN_QUIRK(0x10ec0285, 0x17aa, "Lenovo", ALC285_FIXUP_LENOVO_PC_BEEP_IN_NOISE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9483) 		{0x14, 0x90170110},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9484) 		{0x19, 0x04a11040},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9485) 		{0x1d, 0x40600001},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9486) 		{0x21, 0x04211020}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9487) 	SND_HDA_PIN_QUIRK(0x10ec0285, 0x17aa, "Lenovo", ALC285_FIXUP_THINKPAD_NO_BASS_SPK_HEADSET_JACK,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9488) 		{0x14, 0x90170110},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9489) 		{0x19, 0x04a11040},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9490) 		{0x21, 0x04211020}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9491) 	SND_HDA_PIN_QUIRK(0x10ec0287, 0x17aa, "Lenovo", ALC285_FIXUP_THINKPAD_HEADSET_JACK,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9492) 		{0x14, 0x90170110},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9493) 		{0x17, 0x90170111},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9494) 		{0x19, 0x03a11030},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9495) 		{0x21, 0x03211020}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9496) 	SND_HDA_PIN_QUIRK(0x10ec0286, 0x1025, "Acer", ALC286_FIXUP_ACER_AIO_MIC_NO_PRESENCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9497) 		{0x12, 0x90a60130},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9498) 		{0x17, 0x90170110},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9499) 		{0x21, 0x02211020}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9500) 	SND_HDA_PIN_QUIRK(0x10ec0288, 0x1028, "Dell", ALC288_FIXUP_DELL1_MIC_NO_PRESENCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9501) 		{0x12, 0x90a60120},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9502) 		{0x14, 0x90170110},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9503) 		{0x21, 0x0321101f}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9504) 	SND_HDA_PIN_QUIRK(0x10ec0290, 0x103c, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9505) 		ALC290_STANDARD_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9506) 		{0x15, 0x04211040},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9507) 		{0x18, 0x90170112},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9508) 		{0x1a, 0x04a11020}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9509) 	SND_HDA_PIN_QUIRK(0x10ec0290, 0x103c, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9510) 		ALC290_STANDARD_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9511) 		{0x15, 0x04211040},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9512) 		{0x18, 0x90170110},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9513) 		{0x1a, 0x04a11020}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9514) 	SND_HDA_PIN_QUIRK(0x10ec0290, 0x103c, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9515) 		ALC290_STANDARD_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9516) 		{0x15, 0x0421101f},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9517) 		{0x1a, 0x04a11020}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9518) 	SND_HDA_PIN_QUIRK(0x10ec0290, 0x103c, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9519) 		ALC290_STANDARD_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9520) 		{0x15, 0x04211020},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9521) 		{0x1a, 0x04a11040}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9522) 	SND_HDA_PIN_QUIRK(0x10ec0290, 0x103c, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9523) 		ALC290_STANDARD_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9524) 		{0x14, 0x90170110},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9525) 		{0x15, 0x04211020},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9526) 		{0x1a, 0x04a11040}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9527) 	SND_HDA_PIN_QUIRK(0x10ec0290, 0x103c, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9528) 		ALC290_STANDARD_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9529) 		{0x14, 0x90170110},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9530) 		{0x15, 0x04211020},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9531) 		{0x1a, 0x04a11020}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9532) 	SND_HDA_PIN_QUIRK(0x10ec0290, 0x103c, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9533) 		ALC290_STANDARD_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9534) 		{0x14, 0x90170110},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9535) 		{0x15, 0x0421101f},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9536) 		{0x1a, 0x04a11020}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9537) 	SND_HDA_PIN_QUIRK(0x10ec0292, 0x1028, "Dell", ALC269_FIXUP_DELL2_MIC_NO_PRESENCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9538) 		ALC292_STANDARD_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9539) 		{0x12, 0x90a60140},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9540) 		{0x16, 0x01014020},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9541) 		{0x19, 0x01a19030}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9542) 	SND_HDA_PIN_QUIRK(0x10ec0292, 0x1028, "Dell", ALC269_FIXUP_DELL2_MIC_NO_PRESENCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9543) 		ALC292_STANDARD_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9544) 		{0x12, 0x90a60140},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9545) 		{0x16, 0x01014020},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9546) 		{0x18, 0x02a19031},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9547) 		{0x19, 0x01a1903e}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9548) 	SND_HDA_PIN_QUIRK(0x10ec0292, 0x1028, "Dell", ALC269_FIXUP_DELL3_MIC_NO_PRESENCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9549) 		ALC292_STANDARD_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9550) 		{0x12, 0x90a60140}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9551) 	SND_HDA_PIN_QUIRK(0x10ec0293, 0x1028, "Dell", ALC293_FIXUP_DELL1_MIC_NO_PRESENCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9552) 		ALC292_STANDARD_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9553) 		{0x13, 0x90a60140},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9554) 		{0x16, 0x21014020},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9555) 		{0x19, 0x21a19030}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9556) 	SND_HDA_PIN_QUIRK(0x10ec0293, 0x1028, "Dell", ALC293_FIXUP_DELL1_MIC_NO_PRESENCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9557) 		ALC292_STANDARD_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9558) 		{0x13, 0x90a60140}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9559) 	SND_HDA_PIN_QUIRK(0x10ec0294, 0x1043, "ASUS", ALC294_FIXUP_ASUS_HPE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9560) 		{0x17, 0x90170110},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9561) 		{0x21, 0x04211020}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9562) 	SND_HDA_PIN_QUIRK(0x10ec0294, 0x1043, "ASUS", ALC294_FIXUP_ASUS_MIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9563) 		{0x14, 0x90170110},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9564) 		{0x1b, 0x90a70130},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9565) 		{0x21, 0x04211020}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9566) 	SND_HDA_PIN_QUIRK(0x10ec0294, 0x1043, "ASUS", ALC294_FIXUP_ASUS_SPK,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9567) 		{0x12, 0x90a60130},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9568) 		{0x17, 0x90170110},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9569) 		{0x21, 0x03211020}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9570) 	SND_HDA_PIN_QUIRK(0x10ec0294, 0x1043, "ASUS", ALC294_FIXUP_ASUS_SPK,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9571) 		{0x12, 0x90a60130},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9572) 		{0x17, 0x90170110},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9573) 		{0x21, 0x04211020}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9574) 	SND_HDA_PIN_QUIRK(0x10ec0295, 0x1043, "ASUS", ALC294_FIXUP_ASUS_SPK,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9575) 		{0x12, 0x90a60130},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9576) 		{0x17, 0x90170110},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9577) 		{0x21, 0x03211020}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9578) 	SND_HDA_PIN_QUIRK(0x10ec0295, 0x1043, "ASUS", ALC295_FIXUP_ASUS_MIC_NO_PRESENCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9579) 		{0x12, 0x90a60120},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9580) 		{0x17, 0x90170110},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9581) 		{0x21, 0x04211030}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9582) 	SND_HDA_PIN_QUIRK(0x10ec0295, 0x1043, "ASUS", ALC295_FIXUP_ASUS_MIC_NO_PRESENCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9583) 		{0x12, 0x90a60130},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9584) 		{0x17, 0x90170110},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9585) 		{0x21, 0x03211020}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9586) 	SND_HDA_PIN_QUIRK(0x10ec0295, 0x1043, "ASUS", ALC295_FIXUP_ASUS_MIC_NO_PRESENCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9587) 		{0x12, 0x90a60130},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9588) 		{0x17, 0x90170110},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9589) 		{0x21, 0x03211020}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9590) 	SND_HDA_PIN_QUIRK(0x10ec0295, 0x1028, "Dell", ALC269_FIXUP_DELL4_MIC_NO_PRESENCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9591) 		{0x14, 0x90170110},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9592) 		{0x21, 0x04211020}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9593) 	SND_HDA_PIN_QUIRK(0x10ec0295, 0x1028, "Dell", ALC269_FIXUP_DELL4_MIC_NO_PRESENCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9594) 		{0x14, 0x90170110},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9595) 		{0x21, 0x04211030}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9596) 	SND_HDA_PIN_QUIRK(0x10ec0295, 0x1028, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9597) 		ALC295_STANDARD_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9598) 		{0x17, 0x21014020},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9599) 		{0x18, 0x21a19030}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9600) 	SND_HDA_PIN_QUIRK(0x10ec0295, 0x1028, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9601) 		ALC295_STANDARD_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9602) 		{0x17, 0x21014040},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9603) 		{0x18, 0x21a19050}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9604) 	SND_HDA_PIN_QUIRK(0x10ec0295, 0x1028, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9605) 		ALC295_STANDARD_PINS),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9606) 	SND_HDA_PIN_QUIRK(0x10ec0298, 0x1028, "Dell", ALC298_FIXUP_DELL1_MIC_NO_PRESENCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9607) 		ALC298_STANDARD_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9608) 		{0x17, 0x90170110}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9609) 	SND_HDA_PIN_QUIRK(0x10ec0298, 0x1028, "Dell", ALC298_FIXUP_DELL1_MIC_NO_PRESENCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9610) 		ALC298_STANDARD_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9611) 		{0x17, 0x90170140}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9612) 	SND_HDA_PIN_QUIRK(0x10ec0298, 0x1028, "Dell", ALC298_FIXUP_DELL1_MIC_NO_PRESENCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9613) 		ALC298_STANDARD_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9614) 		{0x17, 0x90170150}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9615) 	SND_HDA_PIN_QUIRK(0x10ec0298, 0x1028, "Dell", ALC298_FIXUP_SPK_VOLUME,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9616) 		{0x12, 0xb7a60140},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9617) 		{0x13, 0xb7a60150},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9618) 		{0x17, 0x90170110},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9619) 		{0x1a, 0x03011020},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9620) 		{0x21, 0x03211030}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9621) 	SND_HDA_PIN_QUIRK(0x10ec0298, 0x1028, "Dell", ALC298_FIXUP_ALIENWARE_MIC_NO_PRESENCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9622) 		{0x12, 0xb7a60140},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9623) 		{0x17, 0x90170110},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9624) 		{0x1a, 0x03a11030},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9625) 		{0x21, 0x03211020}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9626) 	SND_HDA_PIN_QUIRK(0x10ec0299, 0x1028, "Dell", ALC269_FIXUP_DELL4_MIC_NO_PRESENCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9627) 		ALC225_STANDARD_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9628) 		{0x12, 0xb7a60130},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9629) 		{0x17, 0x90170110}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9630) 	SND_HDA_PIN_QUIRK(0x10ec0623, 0x17aa, "Lenovo", ALC283_FIXUP_HEADSET_MIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9631) 		{0x14, 0x01014010},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9632) 		{0x17, 0x90170120},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9633) 		{0x18, 0x02a11030},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9634) 		{0x19, 0x02a1103f},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9635) 		{0x21, 0x0221101f}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9636) 	{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9637) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9638) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9639) /* This is the fallback pin_fixup_tbl for alc269 family, to make the tbl match
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9640)  * more machines, don't need to match all valid pins, just need to match
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9641)  * all the pins defined in the tbl. Just because of this reason, it is possible
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9642)  * that a single machine matches multiple tbls, so there is one limitation:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9643)  *   at most one tbl is allowed to define for the same vendor and same codec
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9644)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9645) static const struct snd_hda_pin_quirk alc269_fallback_pin_fixup_tbl[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9646) 	SND_HDA_PIN_QUIRK(0x10ec0289, 0x1028, "Dell", ALC269_FIXUP_DELL4_MIC_NO_PRESENCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9647) 		{0x19, 0x40000000},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9648) 		{0x1b, 0x40000000}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9649) 	SND_HDA_PIN_QUIRK(0x10ec0256, 0x1028, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9650) 		{0x19, 0x40000000},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9651) 		{0x1a, 0x40000000}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9652) 	SND_HDA_PIN_QUIRK(0x10ec0236, 0x1028, "Dell", ALC255_FIXUP_DELL1_MIC_NO_PRESENCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9653) 		{0x19, 0x40000000},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9654) 		{0x1a, 0x40000000}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9655) 	SND_HDA_PIN_QUIRK(0x10ec0274, 0x1028, "Dell", ALC274_FIXUP_DELL_AIO_LINEOUT_VERB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9656) 		{0x19, 0x40000000},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9657) 		{0x1a, 0x40000000}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9658) 	{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9659) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9660) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9661) static void alc269_fill_coef(struct hda_codec *codec)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9662) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9663) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9664) 	int val;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9665) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9666) 	if (spec->codec_variant != ALC269_TYPE_ALC269VB)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9667) 		return;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9668) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9669) 	if ((alc_get_coef0(codec) & 0x00ff) < 0x015) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9670) 		alc_write_coef_idx(codec, 0xf, 0x960b);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9671) 		alc_write_coef_idx(codec, 0xe, 0x8817);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9672) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9673) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9674) 	if ((alc_get_coef0(codec) & 0x00ff) == 0x016) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9675) 		alc_write_coef_idx(codec, 0xf, 0x960b);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9676) 		alc_write_coef_idx(codec, 0xe, 0x8814);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9677) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9678) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9679) 	if ((alc_get_coef0(codec) & 0x00ff) == 0x017) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9680) 		/* Power up output pin */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9681) 		alc_update_coef_idx(codec, 0x04, 0, 1<<11);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9682) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9683) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9684) 	if ((alc_get_coef0(codec) & 0x00ff) == 0x018) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9685) 		val = alc_read_coef_idx(codec, 0xd);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9686) 		if (val != -1 && (val & 0x0c00) >> 10 != 0x1) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9687) 			/* Capless ramp up clock control */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9688) 			alc_write_coef_idx(codec, 0xd, val | (1<<10));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9689) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9690) 		val = alc_read_coef_idx(codec, 0x17);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9691) 		if (val != -1 && (val & 0x01c0) >> 6 != 0x4) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9692) 			/* Class D power on reset */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9693) 			alc_write_coef_idx(codec, 0x17, val | (1<<7));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9694) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9695) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9696) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9697) 	/* HP */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9698) 	alc_update_coef_idx(codec, 0x4, 0, 1<<11);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9699) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9700) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9701) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9702)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9703) static int patch_alc269(struct hda_codec *codec)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9704) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9705) 	struct alc_spec *spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9706) 	int err;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9707) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9708) 	err = alc_alloc_spec(codec, 0x0b);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9709) 	if (err < 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9710) 		return err;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9711) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9712) 	spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9713) 	spec->gen.shared_mic_vref_pin = 0x18;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9714) 	codec->power_save_node = 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9715) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9716) #ifdef CONFIG_PM
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9717) 	codec->patch_ops.suspend = alc269_suspend;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9718) 	codec->patch_ops.resume = alc269_resume;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9719) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9720) 	spec->shutup = alc_default_shutup;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9721) 	spec->init_hook = alc_default_init;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9722) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9723) 	switch (codec->core.vendor_id) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9724) 	case 0x10ec0269:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9725) 		spec->codec_variant = ALC269_TYPE_ALC269VA;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9726) 		switch (alc_get_coef0(codec) & 0x00f0) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9727) 		case 0x0010:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9728) 			if (codec->bus->pci &&
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9729) 			    codec->bus->pci->subsystem_vendor == 0x1025 &&
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9730) 			    spec->cdefine.platform_type == 1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9731) 				err = alc_codec_rename(codec, "ALC271X");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9732) 			spec->codec_variant = ALC269_TYPE_ALC269VB;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9733) 			break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9734) 		case 0x0020:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9735) 			if (codec->bus->pci &&
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9736) 			    codec->bus->pci->subsystem_vendor == 0x17aa &&
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9737) 			    codec->bus->pci->subsystem_device == 0x21f3)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9738) 				err = alc_codec_rename(codec, "ALC3202");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9739) 			spec->codec_variant = ALC269_TYPE_ALC269VC;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9740) 			break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9741) 		case 0x0030:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9742) 			spec->codec_variant = ALC269_TYPE_ALC269VD;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9743) 			break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9744) 		default:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9745) 			alc_fix_pll_init(codec, 0x20, 0x04, 15);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9746) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9747) 		if (err < 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9748) 			goto error;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9749) 		spec->shutup = alc269_shutup;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9750) 		spec->init_hook = alc269_fill_coef;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9751) 		alc269_fill_coef(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9752) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9753) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9754) 	case 0x10ec0280:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9755) 	case 0x10ec0290:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9756) 		spec->codec_variant = ALC269_TYPE_ALC280;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9757) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9758) 	case 0x10ec0282:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9759) 		spec->codec_variant = ALC269_TYPE_ALC282;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9760) 		spec->shutup = alc282_shutup;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9761) 		spec->init_hook = alc282_init;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9762) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9763) 	case 0x10ec0233:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9764) 	case 0x10ec0283:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9765) 		spec->codec_variant = ALC269_TYPE_ALC283;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9766) 		spec->shutup = alc283_shutup;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9767) 		spec->init_hook = alc283_init;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9768) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9769) 	case 0x10ec0284:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9770) 	case 0x10ec0292:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9771) 		spec->codec_variant = ALC269_TYPE_ALC284;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9772) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9773) 	case 0x10ec0293:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9774) 		spec->codec_variant = ALC269_TYPE_ALC293;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9775) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9776) 	case 0x10ec0286:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9777) 	case 0x10ec0288:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9778) 		spec->codec_variant = ALC269_TYPE_ALC286;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9779) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9780) 	case 0x10ec0298:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9781) 		spec->codec_variant = ALC269_TYPE_ALC298;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9782) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9783) 	case 0x10ec0235:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9784) 	case 0x10ec0255:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9785) 		spec->codec_variant = ALC269_TYPE_ALC255;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9786) 		spec->shutup = alc256_shutup;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9787) 		spec->init_hook = alc256_init;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9788) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9789) 	case 0x10ec0230:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9790) 	case 0x10ec0236:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9791) 	case 0x10ec0256:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9792) 		spec->codec_variant = ALC269_TYPE_ALC256;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9793) 		spec->shutup = alc256_shutup;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9794) 		spec->init_hook = alc256_init;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9795) 		spec->gen.mixer_nid = 0; /* ALC256 does not have any loopback mixer path */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9796) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9797) 	case 0x10ec0257:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9798) 		spec->codec_variant = ALC269_TYPE_ALC257;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9799) 		spec->shutup = alc256_shutup;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9800) 		spec->init_hook = alc256_init;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9801) 		spec->gen.mixer_nid = 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9802) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9803) 	case 0x10ec0215:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9804) 	case 0x10ec0245:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9805) 	case 0x10ec0285:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9806) 	case 0x10ec0287:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9807) 	case 0x10ec0289:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9808) 		spec->codec_variant = ALC269_TYPE_ALC215;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9809) 		spec->shutup = alc225_shutup;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9810) 		spec->init_hook = alc225_init;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9811) 		spec->gen.mixer_nid = 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9812) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9813) 	case 0x10ec0225:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9814) 	case 0x10ec0295:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9815) 	case 0x10ec0299:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9816) 		spec->codec_variant = ALC269_TYPE_ALC225;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9817) 		spec->shutup = alc225_shutup;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9818) 		spec->init_hook = alc225_init;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9819) 		spec->gen.mixer_nid = 0; /* no loopback on ALC225, ALC295 and ALC299 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9820) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9821) 	case 0x10ec0234:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9822) 	case 0x10ec0274:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9823) 	case 0x10ec0294:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9824) 		spec->codec_variant = ALC269_TYPE_ALC294;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9825) 		spec->gen.mixer_nid = 0; /* ALC2x4 does not have any loopback mixer path */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9826) 		alc_update_coef_idx(codec, 0x6b, 0x0018, (1<<4) | (1<<3)); /* UAJ MIC Vref control by verb */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9827) 		spec->init_hook = alc294_init;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9828) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9829) 	case 0x10ec0300:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9830) 		spec->codec_variant = ALC269_TYPE_ALC300;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9831) 		spec->gen.mixer_nid = 0; /* no loopback on ALC300 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9832) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9833) 	case 0x10ec0623:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9834) 		spec->codec_variant = ALC269_TYPE_ALC623;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9835) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9836) 	case 0x10ec0700:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9837) 	case 0x10ec0701:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9838) 	case 0x10ec0703:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9839) 	case 0x10ec0711:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9840) 		spec->codec_variant = ALC269_TYPE_ALC700;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9841) 		spec->gen.mixer_nid = 0; /* ALC700 does not have any loopback mixer path */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9842) 		alc_update_coef_idx(codec, 0x4a, 1 << 15, 0); /* Combo jack auto trigger control */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9843) 		spec->init_hook = alc294_init;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9844) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9845) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9846) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9847) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9848) 	if (snd_hda_codec_read(codec, 0x51, 0, AC_VERB_PARAMETERS, 0) == 0x10ec5505) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9849) 		spec->has_alc5505_dsp = 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9850) 		spec->init_hook = alc5505_dsp_init;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9851) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9852) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9853) 	alc_pre_init(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9854) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9855) 	snd_hda_pick_fixup(codec, alc269_fixup_models,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9856) 		       alc269_fixup_tbl, alc269_fixups);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9857) 	/* FIXME: both TX300 and ROG Strix G17 have the same SSID, and
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9858) 	 * the quirk breaks the latter (bko#214101).
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9859) 	 * Clear the wrong entry.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9860) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9861) 	if (codec->fixup_id == ALC282_FIXUP_ASUS_TX300 &&
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9862) 	    codec->core.vendor_id == 0x10ec0294) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9863) 		codec_dbg(codec, "Clear wrong fixup for ASUS ROG Strix G17\n");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9864) 		codec->fixup_id = HDA_FIXUP_ID_NOT_SET;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9865) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9866) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9867) 	snd_hda_pick_pin_fixup(codec, alc269_pin_fixup_tbl, alc269_fixups, true);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9868) 	snd_hda_pick_pin_fixup(codec, alc269_fallback_pin_fixup_tbl, alc269_fixups, false);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9869) 	snd_hda_pick_fixup(codec, NULL,	alc269_fixup_vendor_tbl,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9870) 			   alc269_fixups);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9871) 	snd_hda_apply_fixup(codec, HDA_FIXUP_ACT_PRE_PROBE);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9872) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9873) 	alc_auto_parse_customize_define(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9874) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9875) 	if (has_cdefine_beep(codec))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9876) 		spec->gen.beep_nid = 0x01;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9877) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9878) 	/* automatic parse from the BIOS config */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9879) 	err = alc269_parse_auto_config(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9880) 	if (err < 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9881) 		goto error;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9882) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9883) 	if (!spec->gen.no_analog && spec->gen.beep_nid && spec->gen.mixer_nid) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9884) 		err = set_beep_amp(spec, spec->gen.mixer_nid, 0x04, HDA_INPUT);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9885) 		if (err < 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9886) 			goto error;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9887) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9888) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9889) 	snd_hda_apply_fixup(codec, HDA_FIXUP_ACT_PROBE);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9890) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9891) 	return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9892) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9893)  error:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9894) 	alc_free(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9895) 	return err;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9896) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9897) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9898) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9899)  * ALC861
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9900)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9901) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9902) static int alc861_parse_auto_config(struct hda_codec *codec)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9903) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9904) 	static const hda_nid_t alc861_ignore[] = { 0x1d, 0 };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9905) 	static const hda_nid_t alc861_ssids[] = { 0x0e, 0x0f, 0x0b, 0 };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9906) 	return alc_parse_auto_config(codec, alc861_ignore, alc861_ssids);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9907) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9908) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9909) /* Pin config fixes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9910) enum {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9911) 	ALC861_FIXUP_FSC_AMILO_PI1505,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9912) 	ALC861_FIXUP_AMP_VREF_0F,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9913) 	ALC861_FIXUP_NO_JACK_DETECT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9914) 	ALC861_FIXUP_ASUS_A6RP,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9915) 	ALC660_FIXUP_ASUS_W7J,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9916) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9917) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9918) /* On some laptops, VREF of pin 0x0f is abused for controlling the main amp */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9919) static void alc861_fixup_asus_amp_vref_0f(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9920) 			const struct hda_fixup *fix, int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9921) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9922) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9923) 	unsigned int val;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9924) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9925) 	if (action != HDA_FIXUP_ACT_INIT)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9926) 		return;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9927) 	val = snd_hda_codec_get_pin_target(codec, 0x0f);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9928) 	if (!(val & (AC_PINCTL_IN_EN | AC_PINCTL_OUT_EN)))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9929) 		val |= AC_PINCTL_IN_EN;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9930) 	val |= AC_PINCTL_VREF_50;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9931) 	snd_hda_set_pin_ctl(codec, 0x0f, val);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9932) 	spec->gen.keep_vref_in_automute = 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9933) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9934) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9935) /* suppress the jack-detection */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9936) static void alc_fixup_no_jack_detect(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9937) 				     const struct hda_fixup *fix, int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9938) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9939) 	if (action == HDA_FIXUP_ACT_PRE_PROBE)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9940) 		codec->no_jack_detect = 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9941) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9942) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9943) static const struct hda_fixup alc861_fixups[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9944) 	[ALC861_FIXUP_FSC_AMILO_PI1505] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9945) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9946) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9947) 			{ 0x0b, 0x0221101f }, /* HP */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9948) 			{ 0x0f, 0x90170310 }, /* speaker */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9949) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9950) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9951) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9952) 	[ALC861_FIXUP_AMP_VREF_0F] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9953) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9954) 		.v.func = alc861_fixup_asus_amp_vref_0f,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9955) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9956) 	[ALC861_FIXUP_NO_JACK_DETECT] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9957) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9958) 		.v.func = alc_fixup_no_jack_detect,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9959) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9960) 	[ALC861_FIXUP_ASUS_A6RP] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9961) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9962) 		.v.func = alc861_fixup_asus_amp_vref_0f,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9963) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9964) 		.chain_id = ALC861_FIXUP_NO_JACK_DETECT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9965) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9966) 	[ALC660_FIXUP_ASUS_W7J] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9967) 		.type = HDA_FIXUP_VERBS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9968) 		.v.verbs = (const struct hda_verb[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9969) 			/* ASUS W7J needs a magic pin setup on unused NID 0x10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9970) 			 * for enabling outputs
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9971) 			 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9972) 			{0x10, AC_VERB_SET_PIN_WIDGET_CONTROL, 0x24},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9973) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9974) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9975) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9976) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9977) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9978) static const struct snd_pci_quirk alc861_fixup_tbl[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9979) 	SND_PCI_QUIRK(0x1043, 0x1253, "ASUS W7J", ALC660_FIXUP_ASUS_W7J),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9980) 	SND_PCI_QUIRK(0x1043, 0x1263, "ASUS Z35HL", ALC660_FIXUP_ASUS_W7J),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9981) 	SND_PCI_QUIRK(0x1043, 0x1393, "ASUS A6Rp", ALC861_FIXUP_ASUS_A6RP),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9982) 	SND_PCI_QUIRK_VENDOR(0x1043, "ASUS laptop", ALC861_FIXUP_AMP_VREF_0F),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9983) 	SND_PCI_QUIRK(0x1462, 0x7254, "HP DX2200", ALC861_FIXUP_NO_JACK_DETECT),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9984) 	SND_PCI_QUIRK_VENDOR(0x1584, "Haier/Uniwill", ALC861_FIXUP_AMP_VREF_0F),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9985) 	SND_PCI_QUIRK(0x1734, 0x10c7, "FSC Amilo Pi1505", ALC861_FIXUP_FSC_AMILO_PI1505),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9986) 	{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9987) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9988) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9989) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9990)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9991) static int patch_alc861(struct hda_codec *codec)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9992) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9993) 	struct alc_spec *spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9994) 	int err;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9995) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9996) 	err = alc_alloc_spec(codec, 0x15);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9997) 	if (err < 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9998) 		return err;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9999) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10000) 	spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10001) 	if (has_cdefine_beep(codec))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10002) 		spec->gen.beep_nid = 0x23;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10003) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10004) #ifdef CONFIG_PM
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10005) 	spec->power_hook = alc_power_eapd;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10006) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10007) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10008) 	alc_pre_init(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10009) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10010) 	snd_hda_pick_fixup(codec, NULL, alc861_fixup_tbl, alc861_fixups);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10011) 	snd_hda_apply_fixup(codec, HDA_FIXUP_ACT_PRE_PROBE);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10012) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10013) 	/* automatic parse from the BIOS config */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10014) 	err = alc861_parse_auto_config(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10015) 	if (err < 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10016) 		goto error;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10017) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10018) 	if (!spec->gen.no_analog) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10019) 		err = set_beep_amp(spec, 0x23, 0, HDA_OUTPUT);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10020) 		if (err < 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10021) 			goto error;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10022) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10023) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10024) 	snd_hda_apply_fixup(codec, HDA_FIXUP_ACT_PROBE);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10025) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10026) 	return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10027) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10028)  error:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10029) 	alc_free(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10030) 	return err;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10031) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10032) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10033) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10034)  * ALC861-VD support
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10035)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10036)  * Based on ALC882
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10037)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10038)  * In addition, an independent DAC
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10039)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10040) static int alc861vd_parse_auto_config(struct hda_codec *codec)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10041) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10042) 	static const hda_nid_t alc861vd_ignore[] = { 0x1d, 0 };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10043) 	static const hda_nid_t alc861vd_ssids[] = { 0x15, 0x1b, 0x14, 0 };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10044) 	return alc_parse_auto_config(codec, alc861vd_ignore, alc861vd_ssids);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10045) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10046) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10047) enum {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10048) 	ALC660VD_FIX_ASUS_GPIO1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10049) 	ALC861VD_FIX_DALLAS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10050) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10051) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10052) /* exclude VREF80 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10053) static void alc861vd_fixup_dallas(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10054) 				  const struct hda_fixup *fix, int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10055) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10056) 	if (action == HDA_FIXUP_ACT_PRE_PROBE) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10057) 		snd_hda_override_pin_caps(codec, 0x18, 0x00000734);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10058) 		snd_hda_override_pin_caps(codec, 0x19, 0x0000073c);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10059) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10060) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10061) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10062) /* reset GPIO1 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10063) static void alc660vd_fixup_asus_gpio1(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10064) 				      const struct hda_fixup *fix, int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10065) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10066) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10067) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10068) 	if (action == HDA_FIXUP_ACT_PRE_PROBE)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10069) 		spec->gpio_mask |= 0x02;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10070) 	alc_fixup_gpio(codec, action, 0x01);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10071) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10072) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10073) static const struct hda_fixup alc861vd_fixups[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10074) 	[ALC660VD_FIX_ASUS_GPIO1] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10075) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10076) 		.v.func = alc660vd_fixup_asus_gpio1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10077) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10078) 	[ALC861VD_FIX_DALLAS] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10079) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10080) 		.v.func = alc861vd_fixup_dallas,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10081) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10082) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10083) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10084) static const struct snd_pci_quirk alc861vd_fixup_tbl[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10085) 	SND_PCI_QUIRK(0x103c, 0x30bf, "HP TX1000", ALC861VD_FIX_DALLAS),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10086) 	SND_PCI_QUIRK(0x1043, 0x1339, "ASUS A7-K", ALC660VD_FIX_ASUS_GPIO1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10087) 	SND_PCI_QUIRK(0x1179, 0xff31, "Toshiba L30-149", ALC861VD_FIX_DALLAS),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10088) 	{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10089) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10090) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10091) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10092)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10093) static int patch_alc861vd(struct hda_codec *codec)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10094) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10095) 	struct alc_spec *spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10096) 	int err;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10097) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10098) 	err = alc_alloc_spec(codec, 0x0b);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10099) 	if (err < 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10100) 		return err;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10101) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10102) 	spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10103) 	if (has_cdefine_beep(codec))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10104) 		spec->gen.beep_nid = 0x23;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10105) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10106) 	spec->shutup = alc_eapd_shutup;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10107) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10108) 	alc_pre_init(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10109) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10110) 	snd_hda_pick_fixup(codec, NULL, alc861vd_fixup_tbl, alc861vd_fixups);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10111) 	snd_hda_apply_fixup(codec, HDA_FIXUP_ACT_PRE_PROBE);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10112) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10113) 	/* automatic parse from the BIOS config */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10114) 	err = alc861vd_parse_auto_config(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10115) 	if (err < 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10116) 		goto error;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10117) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10118) 	if (!spec->gen.no_analog) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10119) 		err = set_beep_amp(spec, 0x0b, 0x05, HDA_INPUT);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10120) 		if (err < 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10121) 			goto error;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10122) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10123) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10124) 	snd_hda_apply_fixup(codec, HDA_FIXUP_ACT_PROBE);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10125) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10126) 	return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10127) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10128)  error:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10129) 	alc_free(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10130) 	return err;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10131) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10132) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10133) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10134)  * ALC662 support
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10135)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10136)  * ALC662 is almost identical with ALC880 but has cleaner and more flexible
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10137)  * configuration.  Each pin widget can choose any input DACs and a mixer.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10138)  * Each ADC is connected from a mixer of all inputs.  This makes possible
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10139)  * 6-channel independent captures.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10140)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10141)  * In addition, an independent DAC for the multi-playback (not used in this
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10142)  * driver yet).
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10143)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10144) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10145) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10146)  * BIOS auto configuration
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10147)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10148) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10149) static int alc662_parse_auto_config(struct hda_codec *codec)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10150) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10151) 	static const hda_nid_t alc662_ignore[] = { 0x1d, 0 };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10152) 	static const hda_nid_t alc663_ssids[] = { 0x15, 0x1b, 0x14, 0x21 };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10153) 	static const hda_nid_t alc662_ssids[] = { 0x15, 0x1b, 0x14, 0 };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10154) 	const hda_nid_t *ssids;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10155) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10156) 	if (codec->core.vendor_id == 0x10ec0272 || codec->core.vendor_id == 0x10ec0663 ||
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10157) 	    codec->core.vendor_id == 0x10ec0665 || codec->core.vendor_id == 0x10ec0670 ||
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10158) 	    codec->core.vendor_id == 0x10ec0671)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10159) 		ssids = alc663_ssids;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10160) 	else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10161) 		ssids = alc662_ssids;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10162) 	return alc_parse_auto_config(codec, alc662_ignore, ssids);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10163) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10164) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10165) static void alc272_fixup_mario(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10166) 			       const struct hda_fixup *fix, int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10167) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10168) 	if (action != HDA_FIXUP_ACT_PRE_PROBE)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10169) 		return;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10170) 	if (snd_hda_override_amp_caps(codec, 0x2, HDA_OUTPUT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10171) 				      (0x3b << AC_AMPCAP_OFFSET_SHIFT) |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10172) 				      (0x3b << AC_AMPCAP_NUM_STEPS_SHIFT) |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10173) 				      (0x03 << AC_AMPCAP_STEP_SIZE_SHIFT) |
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10174) 				      (0 << AC_AMPCAP_MUTE_SHIFT)))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10175) 		codec_warn(codec, "failed to override amp caps for NID 0x2\n");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10176) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10177) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10178) static const struct snd_pcm_chmap_elem asus_pcm_2_1_chmaps[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10179) 	{ .channels = 2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10180) 	  .map = { SNDRV_CHMAP_FL, SNDRV_CHMAP_FR } },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10181) 	{ .channels = 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10182) 	  .map = { SNDRV_CHMAP_FL, SNDRV_CHMAP_FR,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10183) 		   SNDRV_CHMAP_NA, SNDRV_CHMAP_LFE } }, /* LFE only on right */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10184) 	{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10185) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10186) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10187) /* override the 2.1 chmap */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10188) static void alc_fixup_bass_chmap(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10189) 				    const struct hda_fixup *fix, int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10190) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10191) 	if (action == HDA_FIXUP_ACT_BUILD) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10192) 		struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10193) 		spec->gen.pcm_rec[0]->stream[0].chmap = asus_pcm_2_1_chmaps;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10194) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10195) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10196) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10197) /* avoid D3 for keeping GPIO up */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10198) static unsigned int gpio_led_power_filter(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10199) 					  hda_nid_t nid,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10200) 					  unsigned int power_state)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10201) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10202) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10203) 	if (nid == codec->core.afg && power_state == AC_PWRST_D3 && spec->gpio_data)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10204) 		return AC_PWRST_D0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10205) 	return power_state;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10206) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10207) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10208) static void alc662_fixup_led_gpio1(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10209) 				   const struct hda_fixup *fix, int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10210) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10211) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10212) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10213) 	alc_fixup_hp_gpio_led(codec, action, 0x01, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10214) 	if (action == HDA_FIXUP_ACT_PRE_PROBE) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10215) 		spec->mute_led_polarity = 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10216) 		codec->power_filter = gpio_led_power_filter;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10217) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10218) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10219) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10220) static void alc662_usi_automute_hook(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10221) 					 struct hda_jack_callback *jack)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10222) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10223) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10224) 	int vref;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10225) 	msleep(200);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10226) 	snd_hda_gen_hp_automute(codec, jack);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10227) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10228) 	vref = spec->gen.hp_jack_present ? PIN_VREF80 : 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10229) 	msleep(100);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10230) 	snd_hda_codec_write(codec, 0x19, 0, AC_VERB_SET_PIN_WIDGET_CONTROL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10231) 			    vref);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10232) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10233) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10234) static void alc662_fixup_usi_headset_mic(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10235) 				     const struct hda_fixup *fix, int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10236) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10237) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10238) 	if (action == HDA_FIXUP_ACT_PRE_PROBE) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10239) 		spec->parse_flags |= HDA_PINCFG_HEADSET_MIC;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10240) 		spec->gen.hp_automute_hook = alc662_usi_automute_hook;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10241) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10242) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10243) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10244) static void alc662_aspire_ethos_mute_speakers(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10245) 					struct hda_jack_callback *cb)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10246) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10247) 	/* surround speakers at 0x1b already get muted automatically when
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10248) 	 * headphones are plugged in, but we have to mute/unmute the remaining
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10249) 	 * channels manually:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10250) 	 * 0x15 - front left/front right
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10251) 	 * 0x18 - front center/ LFE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10252) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10253) 	if (snd_hda_jack_detect_state(codec, 0x1b) == HDA_JACK_PRESENT) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10254) 		snd_hda_set_pin_ctl_cache(codec, 0x15, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10255) 		snd_hda_set_pin_ctl_cache(codec, 0x18, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10256) 	} else {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10257) 		snd_hda_set_pin_ctl_cache(codec, 0x15, PIN_OUT);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10258) 		snd_hda_set_pin_ctl_cache(codec, 0x18, PIN_OUT);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10259) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10260) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10261) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10262) static void alc662_fixup_aspire_ethos_hp(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10263) 					const struct hda_fixup *fix, int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10264) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10265)     /* Pin 0x1b: shared headphones jack and surround speakers */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10266) 	if (!is_jack_detectable(codec, 0x1b))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10267) 		return;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10268) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10269) 	switch (action) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10270) 	case HDA_FIXUP_ACT_PRE_PROBE:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10271) 		snd_hda_jack_detect_enable_callback(codec, 0x1b,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10272) 				alc662_aspire_ethos_mute_speakers);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10273) 		/* subwoofer needs an extra GPIO setting to become audible */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10274) 		alc_setup_gpio(codec, 0x02);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10275) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10276) 	case HDA_FIXUP_ACT_INIT:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10277) 		/* Make sure to start in a correct state, i.e. if
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10278) 		 * headphones have been plugged in before powering up the system
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10279) 		 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10280) 		alc662_aspire_ethos_mute_speakers(codec, NULL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10281) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10282) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10283) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10284) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10285) static void alc671_fixup_hp_headset_mic2(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10286) 					     const struct hda_fixup *fix, int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10287) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10288) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10289) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10290) 	static const struct hda_pintbl pincfgs[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10291) 		{ 0x19, 0x02a11040 }, /* use as headset mic, with its own jack detect */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10292) 		{ 0x1b, 0x0181304f },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10293) 		{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10294) 	};
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10295) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10296) 	switch (action) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10297) 	case HDA_FIXUP_ACT_PRE_PROBE:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10298) 		spec->gen.mixer_nid = 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10299) 		spec->parse_flags |= HDA_PINCFG_HEADSET_MIC;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10300) 		snd_hda_apply_pincfgs(codec, pincfgs);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10301) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10302) 	case HDA_FIXUP_ACT_INIT:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10303) 		alc_write_coef_idx(codec, 0x19, 0xa054);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10304) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10305) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10306) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10307) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10308) static void alc897_hp_automute_hook(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10309) 					 struct hda_jack_callback *jack)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10310) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10311) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10312) 	int vref;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10313) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10314) 	snd_hda_gen_hp_automute(codec, jack);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10315) 	vref = spec->gen.hp_jack_present ? (PIN_HP | AC_PINCTL_VREF_100) : PIN_HP;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10316) 	snd_hda_codec_write(codec, 0x1b, 0, AC_VERB_SET_PIN_WIDGET_CONTROL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10317) 			    vref);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10318) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10319) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10320) static void alc897_fixup_lenovo_headset_mic(struct hda_codec *codec,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10321) 				     const struct hda_fixup *fix, int action)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10322) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10323) 	struct alc_spec *spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10324) 	if (action == HDA_FIXUP_ACT_PRE_PROBE) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10325) 		spec->gen.hp_automute_hook = alc897_hp_automute_hook;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10326) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10327) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10328) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10329) static const struct coef_fw alc668_coefs[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10330) 	WRITE_COEF(0x01, 0xbebe), WRITE_COEF(0x02, 0xaaaa), WRITE_COEF(0x03,    0x0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10331) 	WRITE_COEF(0x04, 0x0180), WRITE_COEF(0x06,    0x0), WRITE_COEF(0x07, 0x0f80),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10332) 	WRITE_COEF(0x08, 0x0031), WRITE_COEF(0x0a, 0x0060), WRITE_COEF(0x0b,    0x0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10333) 	WRITE_COEF(0x0c, 0x7cf7), WRITE_COEF(0x0d, 0x1080), WRITE_COEF(0x0e, 0x7f7f),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10334) 	WRITE_COEF(0x0f, 0xcccc), WRITE_COEF(0x10, 0xddcc), WRITE_COEF(0x11, 0x0001),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10335) 	WRITE_COEF(0x13,    0x0), WRITE_COEF(0x14, 0x2aa0), WRITE_COEF(0x17, 0xa940),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10336) 	WRITE_COEF(0x19,    0x0), WRITE_COEF(0x1a,    0x0), WRITE_COEF(0x1b,    0x0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10337) 	WRITE_COEF(0x1c,    0x0), WRITE_COEF(0x1d,    0x0), WRITE_COEF(0x1e, 0x7418),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10338) 	WRITE_COEF(0x1f, 0x0804), WRITE_COEF(0x20, 0x4200), WRITE_COEF(0x21, 0x0468),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10339) 	WRITE_COEF(0x22, 0x8ccc), WRITE_COEF(0x23, 0x0250), WRITE_COEF(0x24, 0x7418),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10340) 	WRITE_COEF(0x27,    0x0), WRITE_COEF(0x28, 0x8ccc), WRITE_COEF(0x2a, 0xff00),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10341) 	WRITE_COEF(0x2b, 0x8000), WRITE_COEF(0xa7, 0xff00), WRITE_COEF(0xa8, 0x8000),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10342) 	WRITE_COEF(0xaa, 0x2e17), WRITE_COEF(0xab, 0xa0c0), WRITE_COEF(0xac,    0x0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10343) 	WRITE_COEF(0xad,    0x0), WRITE_COEF(0xae, 0x2ac6), WRITE_COEF(0xaf, 0xa480),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10344) 	WRITE_COEF(0xb0,    0x0), WRITE_COEF(0xb1,    0x0), WRITE_COEF(0xb2,    0x0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10345) 	WRITE_COEF(0xb3,    0x0), WRITE_COEF(0xb4,    0x0), WRITE_COEF(0xb5, 0x1040),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10346) 	WRITE_COEF(0xb6, 0xd697), WRITE_COEF(0xb7, 0x902b), WRITE_COEF(0xb8, 0xd697),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10347) 	WRITE_COEF(0xb9, 0x902b), WRITE_COEF(0xba, 0xb8ba), WRITE_COEF(0xbb, 0xaaab),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10348) 	WRITE_COEF(0xbc, 0xaaaf), WRITE_COEF(0xbd, 0x6aaa), WRITE_COEF(0xbe, 0x1c02),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10349) 	WRITE_COEF(0xc0, 0x00ff), WRITE_COEF(0xc1, 0x0fa6),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10350) 	{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10351) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10352) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10353) static void alc668_restore_default_value(struct hda_codec *codec)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10354) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10355) 	alc_process_coef_fw(codec, alc668_coefs);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10356) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10357) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10358) enum {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10359) 	ALC662_FIXUP_ASPIRE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10360) 	ALC662_FIXUP_LED_GPIO1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10361) 	ALC662_FIXUP_IDEAPAD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10362) 	ALC272_FIXUP_MARIO,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10363) 	ALC662_FIXUP_CZC_ET26,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10364) 	ALC662_FIXUP_CZC_P10T,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10365) 	ALC662_FIXUP_SKU_IGNORE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10366) 	ALC662_FIXUP_HP_RP5800,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10367) 	ALC662_FIXUP_ASUS_MODE1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10368) 	ALC662_FIXUP_ASUS_MODE2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10369) 	ALC662_FIXUP_ASUS_MODE3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10370) 	ALC662_FIXUP_ASUS_MODE4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10371) 	ALC662_FIXUP_ASUS_MODE5,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10372) 	ALC662_FIXUP_ASUS_MODE6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10373) 	ALC662_FIXUP_ASUS_MODE7,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10374) 	ALC662_FIXUP_ASUS_MODE8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10375) 	ALC662_FIXUP_NO_JACK_DETECT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10376) 	ALC662_FIXUP_ZOTAC_Z68,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10377) 	ALC662_FIXUP_INV_DMIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10378) 	ALC662_FIXUP_DELL_MIC_NO_PRESENCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10379) 	ALC668_FIXUP_DELL_MIC_NO_PRESENCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10380) 	ALC662_FIXUP_HEADSET_MODE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10381) 	ALC668_FIXUP_HEADSET_MODE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10382) 	ALC662_FIXUP_BASS_MODE4_CHMAP,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10383) 	ALC662_FIXUP_BASS_16,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10384) 	ALC662_FIXUP_BASS_1A,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10385) 	ALC662_FIXUP_BASS_CHMAP,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10386) 	ALC668_FIXUP_AUTO_MUTE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10387) 	ALC668_FIXUP_DELL_DISABLE_AAMIX,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10388) 	ALC668_FIXUP_DELL_XPS13,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10389) 	ALC662_FIXUP_ASUS_Nx50,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10390) 	ALC668_FIXUP_ASUS_Nx51_HEADSET_MODE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10391) 	ALC668_FIXUP_ASUS_Nx51,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10392) 	ALC668_FIXUP_MIC_COEF,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10393) 	ALC668_FIXUP_ASUS_G751,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10394) 	ALC891_FIXUP_HEADSET_MODE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10395) 	ALC891_FIXUP_DELL_MIC_NO_PRESENCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10396) 	ALC662_FIXUP_ACER_VERITON,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10397) 	ALC892_FIXUP_ASROCK_MOBO,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10398) 	ALC662_FIXUP_USI_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10399) 	ALC662_FIXUP_USI_HEADSET_MODE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10400) 	ALC662_FIXUP_LENOVO_MULTI_CODECS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10401) 	ALC669_FIXUP_ACER_ASPIRE_ETHOS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10402) 	ALC669_FIXUP_ACER_ASPIRE_ETHOS_HEADSET,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10403) 	ALC671_FIXUP_HP_HEADSET_MIC2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10404) 	ALC662_FIXUP_ACER_X2660G_HEADSET_MODE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10405) 	ALC662_FIXUP_ACER_NITRO_HEADSET_MODE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10406) 	ALC668_FIXUP_ASUS_NO_HEADSET_MIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10407) 	ALC668_FIXUP_HEADSET_MIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10408) 	ALC668_FIXUP_MIC_DET_COEF,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10409) 	ALC897_FIXUP_LENOVO_HEADSET_MIC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10410) 	ALC897_FIXUP_HEADSET_MIC_PIN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10411) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10412) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10413) static const struct hda_fixup alc662_fixups[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10414) 	[ALC662_FIXUP_ASPIRE] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10415) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10416) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10417) 			{ 0x15, 0x99130112 }, /* subwoofer */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10418) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10419) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10420) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10421) 	[ALC662_FIXUP_LED_GPIO1] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10422) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10423) 		.v.func = alc662_fixup_led_gpio1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10424) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10425) 	[ALC662_FIXUP_IDEAPAD] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10426) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10427) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10428) 			{ 0x17, 0x99130112 }, /* subwoofer */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10429) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10430) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10431) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10432) 		.chain_id = ALC662_FIXUP_LED_GPIO1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10433) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10434) 	[ALC272_FIXUP_MARIO] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10435) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10436) 		.v.func = alc272_fixup_mario,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10437) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10438) 	[ALC662_FIXUP_CZC_ET26] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10439) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10440) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10441) 			{0x12, 0x403cc000},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10442) 			{0x14, 0x90170110}, /* speaker */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10443) 			{0x15, 0x411111f0},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10444) 			{0x16, 0x411111f0},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10445) 			{0x18, 0x01a19030}, /* mic */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10446) 			{0x19, 0x90a7013f}, /* int-mic */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10447) 			{0x1a, 0x01014020},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10448) 			{0x1b, 0x0121401f},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10449) 			{0x1c, 0x411111f0},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10450) 			{0x1d, 0x411111f0},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10451) 			{0x1e, 0x40478e35},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10452) 			{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10453) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10454) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10455) 		.chain_id = ALC662_FIXUP_SKU_IGNORE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10456) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10457) 	[ALC662_FIXUP_CZC_P10T] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10458) 		.type = HDA_FIXUP_VERBS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10459) 		.v.verbs = (const struct hda_verb[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10460) 			{0x14, AC_VERB_SET_EAPD_BTLENABLE, 0},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10461) 			{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10462) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10463) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10464) 	[ALC662_FIXUP_SKU_IGNORE] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10465) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10466) 		.v.func = alc_fixup_sku_ignore,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10467) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10468) 	[ALC662_FIXUP_HP_RP5800] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10469) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10470) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10471) 			{ 0x14, 0x0221201f }, /* HP out */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10472) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10473) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10474) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10475) 		.chain_id = ALC662_FIXUP_SKU_IGNORE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10476) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10477) 	[ALC662_FIXUP_ASUS_MODE1] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10478) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10479) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10480) 			{ 0x14, 0x99130110 }, /* speaker */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10481) 			{ 0x18, 0x01a19c20 }, /* mic */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10482) 			{ 0x19, 0x99a3092f }, /* int-mic */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10483) 			{ 0x21, 0x0121401f }, /* HP out */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10484) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10485) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10486) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10487) 		.chain_id = ALC662_FIXUP_SKU_IGNORE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10488) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10489) 	[ALC662_FIXUP_ASUS_MODE2] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10490) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10491) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10492) 			{ 0x14, 0x99130110 }, /* speaker */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10493) 			{ 0x18, 0x01a19820 }, /* mic */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10494) 			{ 0x19, 0x99a3092f }, /* int-mic */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10495) 			{ 0x1b, 0x0121401f }, /* HP out */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10496) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10497) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10498) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10499) 		.chain_id = ALC662_FIXUP_SKU_IGNORE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10500) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10501) 	[ALC662_FIXUP_ASUS_MODE3] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10502) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10503) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10504) 			{ 0x14, 0x99130110 }, /* speaker */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10505) 			{ 0x15, 0x0121441f }, /* HP */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10506) 			{ 0x18, 0x01a19840 }, /* mic */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10507) 			{ 0x19, 0x99a3094f }, /* int-mic */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10508) 			{ 0x21, 0x01211420 }, /* HP2 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10509) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10510) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10511) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10512) 		.chain_id = ALC662_FIXUP_SKU_IGNORE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10513) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10514) 	[ALC662_FIXUP_ASUS_MODE4] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10515) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10516) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10517) 			{ 0x14, 0x99130110 }, /* speaker */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10518) 			{ 0x16, 0x99130111 }, /* speaker */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10519) 			{ 0x18, 0x01a19840 }, /* mic */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10520) 			{ 0x19, 0x99a3094f }, /* int-mic */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10521) 			{ 0x21, 0x0121441f }, /* HP */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10522) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10523) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10524) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10525) 		.chain_id = ALC662_FIXUP_SKU_IGNORE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10526) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10527) 	[ALC662_FIXUP_ASUS_MODE5] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10528) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10529) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10530) 			{ 0x14, 0x99130110 }, /* speaker */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10531) 			{ 0x15, 0x0121441f }, /* HP */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10532) 			{ 0x16, 0x99130111 }, /* speaker */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10533) 			{ 0x18, 0x01a19840 }, /* mic */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10534) 			{ 0x19, 0x99a3094f }, /* int-mic */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10535) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10536) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10537) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10538) 		.chain_id = ALC662_FIXUP_SKU_IGNORE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10539) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10540) 	[ALC662_FIXUP_ASUS_MODE6] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10541) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10542) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10543) 			{ 0x14, 0x99130110 }, /* speaker */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10544) 			{ 0x15, 0x01211420 }, /* HP2 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10545) 			{ 0x18, 0x01a19840 }, /* mic */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10546) 			{ 0x19, 0x99a3094f }, /* int-mic */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10547) 			{ 0x1b, 0x0121441f }, /* HP */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10548) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10549) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10550) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10551) 		.chain_id = ALC662_FIXUP_SKU_IGNORE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10552) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10553) 	[ALC662_FIXUP_ASUS_MODE7] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10554) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10555) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10556) 			{ 0x14, 0x99130110 }, /* speaker */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10557) 			{ 0x17, 0x99130111 }, /* speaker */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10558) 			{ 0x18, 0x01a19840 }, /* mic */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10559) 			{ 0x19, 0x99a3094f }, /* int-mic */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10560) 			{ 0x1b, 0x01214020 }, /* HP */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10561) 			{ 0x21, 0x0121401f }, /* HP */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10562) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10563) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10564) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10565) 		.chain_id = ALC662_FIXUP_SKU_IGNORE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10566) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10567) 	[ALC662_FIXUP_ASUS_MODE8] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10568) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10569) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10570) 			{ 0x14, 0x99130110 }, /* speaker */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10571) 			{ 0x12, 0x99a30970 }, /* int-mic */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10572) 			{ 0x15, 0x01214020 }, /* HP */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10573) 			{ 0x17, 0x99130111 }, /* speaker */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10574) 			{ 0x18, 0x01a19840 }, /* mic */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10575) 			{ 0x21, 0x0121401f }, /* HP */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10576) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10577) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10578) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10579) 		.chain_id = ALC662_FIXUP_SKU_IGNORE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10580) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10581) 	[ALC662_FIXUP_NO_JACK_DETECT] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10582) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10583) 		.v.func = alc_fixup_no_jack_detect,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10584) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10585) 	[ALC662_FIXUP_ZOTAC_Z68] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10586) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10587) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10588) 			{ 0x1b, 0x02214020 }, /* Front HP */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10589) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10590) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10591) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10592) 	[ALC662_FIXUP_INV_DMIC] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10593) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10594) 		.v.func = alc_fixup_inv_dmic,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10595) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10596) 	[ALC668_FIXUP_DELL_XPS13] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10597) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10598) 		.v.func = alc_fixup_dell_xps13,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10599) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10600) 		.chain_id = ALC668_FIXUP_DELL_DISABLE_AAMIX
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10601) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10602) 	[ALC668_FIXUP_DELL_DISABLE_AAMIX] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10603) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10604) 		.v.func = alc_fixup_disable_aamix,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10605) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10606) 		.chain_id = ALC668_FIXUP_DELL_MIC_NO_PRESENCE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10607) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10608) 	[ALC668_FIXUP_AUTO_MUTE] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10609) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10610) 		.v.func = alc_fixup_auto_mute_via_amp,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10611) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10612) 		.chain_id = ALC668_FIXUP_DELL_MIC_NO_PRESENCE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10613) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10614) 	[ALC662_FIXUP_DELL_MIC_NO_PRESENCE] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10615) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10616) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10617) 			{ 0x19, 0x03a1113c }, /* use as headset mic, without its own jack detect */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10618) 			/* headphone mic by setting pin control of 0x1b (headphone out) to in + vref_50 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10619) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10620) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10621) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10622) 		.chain_id = ALC662_FIXUP_HEADSET_MODE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10623) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10624) 	[ALC662_FIXUP_HEADSET_MODE] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10625) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10626) 		.v.func = alc_fixup_headset_mode_alc662,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10627) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10628) 	[ALC668_FIXUP_DELL_MIC_NO_PRESENCE] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10629) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10630) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10631) 			{ 0x19, 0x03a1913d }, /* use as headphone mic, without its own jack detect */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10632) 			{ 0x1b, 0x03a1113c }, /* use as headset mic, without its own jack detect */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10633) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10634) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10635) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10636) 		.chain_id = ALC668_FIXUP_HEADSET_MODE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10637) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10638) 	[ALC668_FIXUP_HEADSET_MODE] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10639) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10640) 		.v.func = alc_fixup_headset_mode_alc668,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10641) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10642) 	[ALC662_FIXUP_BASS_MODE4_CHMAP] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10643) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10644) 		.v.func = alc_fixup_bass_chmap,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10645) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10646) 		.chain_id = ALC662_FIXUP_ASUS_MODE4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10647) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10648) 	[ALC662_FIXUP_BASS_16] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10649) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10650) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10651) 			{0x16, 0x80106111}, /* bass speaker */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10652) 			{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10653) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10654) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10655) 		.chain_id = ALC662_FIXUP_BASS_CHMAP,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10656) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10657) 	[ALC662_FIXUP_BASS_1A] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10658) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10659) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10660) 			{0x1a, 0x80106111}, /* bass speaker */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10661) 			{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10662) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10663) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10664) 		.chain_id = ALC662_FIXUP_BASS_CHMAP,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10665) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10666) 	[ALC662_FIXUP_BASS_CHMAP] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10667) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10668) 		.v.func = alc_fixup_bass_chmap,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10669) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10670) 	[ALC662_FIXUP_ASUS_Nx50] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10671) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10672) 		.v.func = alc_fixup_auto_mute_via_amp,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10673) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10674) 		.chain_id = ALC662_FIXUP_BASS_1A
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10675) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10676) 	[ALC668_FIXUP_ASUS_Nx51_HEADSET_MODE] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10677) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10678) 		.v.func = alc_fixup_headset_mode_alc668,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10679) 		.chain_id = ALC662_FIXUP_BASS_CHMAP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10680) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10681) 	[ALC668_FIXUP_ASUS_Nx51] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10682) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10683) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10684) 			{ 0x19, 0x03a1913d }, /* use as headphone mic, without its own jack detect */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10685) 			{ 0x1a, 0x90170151 }, /* bass speaker */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10686) 			{ 0x1b, 0x03a1113c }, /* use as headset mic, without its own jack detect */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10687) 			{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10688) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10689) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10690) 		.chain_id = ALC668_FIXUP_ASUS_Nx51_HEADSET_MODE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10691) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10692) 	[ALC668_FIXUP_MIC_COEF] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10693) 		.type = HDA_FIXUP_VERBS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10694) 		.v.verbs = (const struct hda_verb[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10695) 			{ 0x20, AC_VERB_SET_COEF_INDEX, 0xc3 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10696) 			{ 0x20, AC_VERB_SET_PROC_COEF, 0x4000 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10697) 			{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10698) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10699) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10700) 	[ALC668_FIXUP_ASUS_G751] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10701) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10702) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10703) 			{ 0x16, 0x0421101f }, /* HP */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10704) 			{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10705) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10706) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10707) 		.chain_id = ALC668_FIXUP_MIC_COEF
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10708) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10709) 	[ALC891_FIXUP_HEADSET_MODE] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10710) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10711) 		.v.func = alc_fixup_headset_mode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10712) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10713) 	[ALC891_FIXUP_DELL_MIC_NO_PRESENCE] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10714) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10715) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10716) 			{ 0x19, 0x03a1913d }, /* use as headphone mic, without its own jack detect */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10717) 			{ 0x1b, 0x03a1113c }, /* use as headset mic, without its own jack detect */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10718) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10719) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10720) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10721) 		.chain_id = ALC891_FIXUP_HEADSET_MODE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10722) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10723) 	[ALC662_FIXUP_ACER_VERITON] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10724) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10725) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10726) 			{ 0x15, 0x50170120 }, /* no internal speaker */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10727) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10728) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10729) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10730) 	[ALC892_FIXUP_ASROCK_MOBO] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10731) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10732) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10733) 			{ 0x15, 0x40f000f0 }, /* disabled */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10734) 			{ 0x16, 0x40f000f0 }, /* disabled */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10735) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10736) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10737) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10738) 	[ALC662_FIXUP_USI_FUNC] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10739) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10740) 		.v.func = alc662_fixup_usi_headset_mic,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10741) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10742) 	[ALC662_FIXUP_USI_HEADSET_MODE] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10743) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10744) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10745) 			{ 0x19, 0x02a1913c }, /* use as headset mic, without its own jack detect */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10746) 			{ 0x18, 0x01a1903d },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10747) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10748) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10749) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10750) 		.chain_id = ALC662_FIXUP_USI_FUNC
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10751) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10752) 	[ALC662_FIXUP_LENOVO_MULTI_CODECS] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10753) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10754) 		.v.func = alc233_alc662_fixup_lenovo_dual_codecs,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10755) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10756) 	[ALC669_FIXUP_ACER_ASPIRE_ETHOS_HEADSET] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10757) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10758) 		.v.func = alc662_fixup_aspire_ethos_hp,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10759) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10760) 	[ALC669_FIXUP_ACER_ASPIRE_ETHOS] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10761) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10762) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10763) 			{ 0x15, 0x92130110 }, /* front speakers */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10764) 			{ 0x18, 0x99130111 }, /* center/subwoofer */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10765) 			{ 0x1b, 0x11130012 }, /* surround plus jack for HP */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10766) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10767) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10768) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10769) 		.chain_id = ALC669_FIXUP_ACER_ASPIRE_ETHOS_HEADSET
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10770) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10771) 	[ALC671_FIXUP_HP_HEADSET_MIC2] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10772) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10773) 		.v.func = alc671_fixup_hp_headset_mic2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10774) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10775) 	[ALC662_FIXUP_ACER_X2660G_HEADSET_MODE] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10776) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10777) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10778) 			{ 0x1a, 0x02a1113c }, /* use as headset mic, without its own jack detect */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10779) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10780) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10781) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10782) 		.chain_id = ALC662_FIXUP_USI_FUNC
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10783) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10784) 	[ALC662_FIXUP_ACER_NITRO_HEADSET_MODE] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10785) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10786) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10787) 			{ 0x1a, 0x01a11140 }, /* use as headset mic, without its own jack detect */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10788) 			{ 0x1b, 0x0221144f },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10789) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10790) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10791) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10792) 		.chain_id = ALC662_FIXUP_USI_FUNC
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10793) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10794) 	[ALC668_FIXUP_ASUS_NO_HEADSET_MIC] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10795) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10796) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10797) 			{ 0x1b, 0x04a1112c },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10798) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10799) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10800) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10801) 		.chain_id = ALC668_FIXUP_HEADSET_MIC
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10802) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10803) 	[ALC668_FIXUP_HEADSET_MIC] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10804) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10805) 		.v.func = alc269_fixup_headset_mic,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10806) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10807) 		.chain_id = ALC668_FIXUP_MIC_DET_COEF
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10808) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10809) 	[ALC668_FIXUP_MIC_DET_COEF] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10810) 		.type = HDA_FIXUP_VERBS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10811) 		.v.verbs = (const struct hda_verb[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10812) 			{ 0x20, AC_VERB_SET_COEF_INDEX, 0x15 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10813) 			{ 0x20, AC_VERB_SET_PROC_COEF, 0x0d60 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10814) 			{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10815) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10816) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10817) 	[ALC897_FIXUP_LENOVO_HEADSET_MIC] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10818) 		.type = HDA_FIXUP_FUNC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10819) 		.v.func = alc897_fixup_lenovo_headset_mic,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10820) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10821) 	[ALC897_FIXUP_HEADSET_MIC_PIN] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10822) 		.type = HDA_FIXUP_PINS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10823) 		.v.pins = (const struct hda_pintbl[]) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10824) 			{ 0x1a, 0x03a11050 },
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10825) 			{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10826) 		},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10827) 		.chained = true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10828) 		.chain_id = ALC897_FIXUP_LENOVO_HEADSET_MIC
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10829) 	},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10830) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10831) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10832) static const struct snd_pci_quirk alc662_fixup_tbl[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10833) 	SND_PCI_QUIRK(0x1019, 0x9087, "ECS", ALC662_FIXUP_ASUS_MODE2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10834) 	SND_PCI_QUIRK(0x1025, 0x022f, "Acer Aspire One", ALC662_FIXUP_INV_DMIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10835) 	SND_PCI_QUIRK(0x1025, 0x0241, "Packard Bell DOTS", ALC662_FIXUP_INV_DMIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10836) 	SND_PCI_QUIRK(0x1025, 0x0308, "Acer Aspire 8942G", ALC662_FIXUP_ASPIRE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10837) 	SND_PCI_QUIRK(0x1025, 0x031c, "Gateway NV79", ALC662_FIXUP_SKU_IGNORE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10838) 	SND_PCI_QUIRK(0x1025, 0x0349, "eMachines eM250", ALC662_FIXUP_INV_DMIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10839) 	SND_PCI_QUIRK(0x1025, 0x034a, "Gateway LT27", ALC662_FIXUP_INV_DMIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10840) 	SND_PCI_QUIRK(0x1025, 0x038b, "Acer Aspire 8943G", ALC662_FIXUP_ASPIRE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10841) 	SND_PCI_QUIRK(0x1025, 0x0566, "Acer Aspire Ethos 8951G", ALC669_FIXUP_ACER_ASPIRE_ETHOS),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10842) 	SND_PCI_QUIRK(0x1025, 0x123c, "Acer Nitro N50-600", ALC662_FIXUP_ACER_NITRO_HEADSET_MODE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10843) 	SND_PCI_QUIRK(0x1025, 0x124e, "Acer 2660G", ALC662_FIXUP_ACER_X2660G_HEADSET_MODE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10844) 	SND_PCI_QUIRK(0x1028, 0x05d8, "Dell", ALC668_FIXUP_DELL_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10845) 	SND_PCI_QUIRK(0x1028, 0x05db, "Dell", ALC668_FIXUP_DELL_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10846) 	SND_PCI_QUIRK(0x1028, 0x05fe, "Dell XPS 15", ALC668_FIXUP_DELL_XPS13),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10847) 	SND_PCI_QUIRK(0x1028, 0x060a, "Dell XPS 13", ALC668_FIXUP_DELL_XPS13),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10848) 	SND_PCI_QUIRK(0x1028, 0x060d, "Dell M3800", ALC668_FIXUP_DELL_XPS13),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10849) 	SND_PCI_QUIRK(0x1028, 0x0625, "Dell", ALC668_FIXUP_DELL_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10850) 	SND_PCI_QUIRK(0x1028, 0x0626, "Dell", ALC668_FIXUP_DELL_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10851) 	SND_PCI_QUIRK(0x1028, 0x0696, "Dell", ALC668_FIXUP_DELL_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10852) 	SND_PCI_QUIRK(0x1028, 0x0698, "Dell", ALC668_FIXUP_DELL_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10853) 	SND_PCI_QUIRK(0x1028, 0x069f, "Dell", ALC668_FIXUP_DELL_MIC_NO_PRESENCE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10854) 	SND_PCI_QUIRK(0x103c, 0x1632, "HP RP5800", ALC662_FIXUP_HP_RP5800),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10855) 	SND_PCI_QUIRK(0x103c, 0x873e, "HP", ALC671_FIXUP_HP_HEADSET_MIC2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10856) 	SND_PCI_QUIRK(0x103c, 0x885f, "HP 288 Pro G8", ALC671_FIXUP_HP_HEADSET_MIC2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10857) 	SND_PCI_QUIRK(0x1043, 0x1080, "Asus UX501VW", ALC668_FIXUP_HEADSET_MODE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10858) 	SND_PCI_QUIRK(0x1043, 0x11cd, "Asus N550", ALC662_FIXUP_ASUS_Nx50),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10859) 	SND_PCI_QUIRK(0x1043, 0x129d, "Asus N750", ALC662_FIXUP_ASUS_Nx50),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10860) 	SND_PCI_QUIRK(0x1043, 0x12ff, "ASUS G751", ALC668_FIXUP_ASUS_G751),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10861) 	SND_PCI_QUIRK(0x1043, 0x13df, "Asus N550JX", ALC662_FIXUP_BASS_1A),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10862) 	SND_PCI_QUIRK(0x1043, 0x1477, "ASUS N56VZ", ALC662_FIXUP_BASS_MODE4_CHMAP),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10863) 	SND_PCI_QUIRK(0x1043, 0x15a7, "ASUS UX51VZH", ALC662_FIXUP_BASS_16),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10864) 	SND_PCI_QUIRK(0x1043, 0x177d, "ASUS N551", ALC668_FIXUP_ASUS_Nx51),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10865) 	SND_PCI_QUIRK(0x1043, 0x17bd, "ASUS N751", ALC668_FIXUP_ASUS_Nx51),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10866) 	SND_PCI_QUIRK(0x1043, 0x185d, "ASUS G551JW", ALC668_FIXUP_ASUS_NO_HEADSET_MIC),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10867) 	SND_PCI_QUIRK(0x1043, 0x1963, "ASUS X71SL", ALC662_FIXUP_ASUS_MODE8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10868) 	SND_PCI_QUIRK(0x1043, 0x1b73, "ASUS N55SF", ALC662_FIXUP_BASS_16),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10869) 	SND_PCI_QUIRK(0x1043, 0x1bf3, "ASUS N76VZ", ALC662_FIXUP_BASS_MODE4_CHMAP),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10870) 	SND_PCI_QUIRK(0x1043, 0x8469, "ASUS mobo", ALC662_FIXUP_NO_JACK_DETECT),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10871) 	SND_PCI_QUIRK(0x105b, 0x0cd6, "Foxconn", ALC662_FIXUP_ASUS_MODE2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10872) 	SND_PCI_QUIRK(0x144d, 0xc051, "Samsung R720", ALC662_FIXUP_IDEAPAD),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10873) 	SND_PCI_QUIRK(0x14cd, 0x5003, "USI", ALC662_FIXUP_USI_HEADSET_MODE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10874) 	SND_PCI_QUIRK(0x17aa, 0x1036, "Lenovo P520", ALC662_FIXUP_LENOVO_MULTI_CODECS),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10875) 	SND_PCI_QUIRK(0x17aa, 0x32ca, "Lenovo ThinkCentre M80", ALC897_FIXUP_HEADSET_MIC_PIN),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10876) 	SND_PCI_QUIRK(0x17aa, 0x32cb, "Lenovo ThinkCentre M70", ALC897_FIXUP_HEADSET_MIC_PIN),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10877) 	SND_PCI_QUIRK(0x17aa, 0x32cf, "Lenovo ThinkCentre M950", ALC897_FIXUP_HEADSET_MIC_PIN),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10878) 	SND_PCI_QUIRK(0x17aa, 0x32f7, "Lenovo ThinkCentre M90", ALC897_FIXUP_HEADSET_MIC_PIN),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10879) 	SND_PCI_QUIRK(0x17aa, 0x38af, "Lenovo Ideapad Y550P", ALC662_FIXUP_IDEAPAD),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10880) 	SND_PCI_QUIRK(0x17aa, 0x3a0d, "Lenovo Ideapad Y550", ALC662_FIXUP_IDEAPAD),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10881) 	SND_PCI_QUIRK(0x1849, 0x5892, "ASRock B150M", ALC892_FIXUP_ASROCK_MOBO),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10882) 	SND_PCI_QUIRK(0x19da, 0xa130, "Zotac Z68", ALC662_FIXUP_ZOTAC_Z68),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10883) 	SND_PCI_QUIRK(0x1b0a, 0x01b8, "ACER Veriton", ALC662_FIXUP_ACER_VERITON),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10884) 	SND_PCI_QUIRK(0x1b35, 0x1234, "CZC ET26", ALC662_FIXUP_CZC_ET26),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10885) 	SND_PCI_QUIRK(0x1b35, 0x2206, "CZC P10T", ALC662_FIXUP_CZC_P10T),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10886) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10887) #if 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10888) 	/* Below is a quirk table taken from the old code.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10889) 	 * Basically the device should work as is without the fixup table.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10890) 	 * If BIOS doesn't give a proper info, enable the corresponding
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10891) 	 * fixup entry.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10892) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10893) 	SND_PCI_QUIRK(0x1043, 0x1000, "ASUS N50Vm", ALC662_FIXUP_ASUS_MODE1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10894) 	SND_PCI_QUIRK(0x1043, 0x1092, "ASUS NB", ALC662_FIXUP_ASUS_MODE3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10895) 	SND_PCI_QUIRK(0x1043, 0x1173, "ASUS K73Jn", ALC662_FIXUP_ASUS_MODE1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10896) 	SND_PCI_QUIRK(0x1043, 0x11c3, "ASUS M70V", ALC662_FIXUP_ASUS_MODE3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10897) 	SND_PCI_QUIRK(0x1043, 0x11d3, "ASUS NB", ALC662_FIXUP_ASUS_MODE1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10898) 	SND_PCI_QUIRK(0x1043, 0x11f3, "ASUS NB", ALC662_FIXUP_ASUS_MODE2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10899) 	SND_PCI_QUIRK(0x1043, 0x1203, "ASUS NB", ALC662_FIXUP_ASUS_MODE1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10900) 	SND_PCI_QUIRK(0x1043, 0x1303, "ASUS G60J", ALC662_FIXUP_ASUS_MODE1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10901) 	SND_PCI_QUIRK(0x1043, 0x1333, "ASUS G60Jx", ALC662_FIXUP_ASUS_MODE1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10902) 	SND_PCI_QUIRK(0x1043, 0x1339, "ASUS NB", ALC662_FIXUP_ASUS_MODE2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10903) 	SND_PCI_QUIRK(0x1043, 0x13e3, "ASUS N71JA", ALC662_FIXUP_ASUS_MODE7),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10904) 	SND_PCI_QUIRK(0x1043, 0x1463, "ASUS N71", ALC662_FIXUP_ASUS_MODE7),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10905) 	SND_PCI_QUIRK(0x1043, 0x14d3, "ASUS G72", ALC662_FIXUP_ASUS_MODE8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10906) 	SND_PCI_QUIRK(0x1043, 0x1563, "ASUS N90", ALC662_FIXUP_ASUS_MODE3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10907) 	SND_PCI_QUIRK(0x1043, 0x15d3, "ASUS N50SF F50SF", ALC662_FIXUP_ASUS_MODE1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10908) 	SND_PCI_QUIRK(0x1043, 0x16c3, "ASUS NB", ALC662_FIXUP_ASUS_MODE2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10909) 	SND_PCI_QUIRK(0x1043, 0x16f3, "ASUS K40C K50C", ALC662_FIXUP_ASUS_MODE2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10910) 	SND_PCI_QUIRK(0x1043, 0x1733, "ASUS N81De", ALC662_FIXUP_ASUS_MODE1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10911) 	SND_PCI_QUIRK(0x1043, 0x1753, "ASUS NB", ALC662_FIXUP_ASUS_MODE2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10912) 	SND_PCI_QUIRK(0x1043, 0x1763, "ASUS NB", ALC662_FIXUP_ASUS_MODE6),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10913) 	SND_PCI_QUIRK(0x1043, 0x1765, "ASUS NB", ALC662_FIXUP_ASUS_MODE6),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10914) 	SND_PCI_QUIRK(0x1043, 0x1783, "ASUS NB", ALC662_FIXUP_ASUS_MODE2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10915) 	SND_PCI_QUIRK(0x1043, 0x1793, "ASUS F50GX", ALC662_FIXUP_ASUS_MODE1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10916) 	SND_PCI_QUIRK(0x1043, 0x17b3, "ASUS F70SL", ALC662_FIXUP_ASUS_MODE3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10917) 	SND_PCI_QUIRK(0x1043, 0x17f3, "ASUS X58LE", ALC662_FIXUP_ASUS_MODE2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10918) 	SND_PCI_QUIRK(0x1043, 0x1813, "ASUS NB", ALC662_FIXUP_ASUS_MODE2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10919) 	SND_PCI_QUIRK(0x1043, 0x1823, "ASUS NB", ALC662_FIXUP_ASUS_MODE5),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10920) 	SND_PCI_QUIRK(0x1043, 0x1833, "ASUS NB", ALC662_FIXUP_ASUS_MODE6),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10921) 	SND_PCI_QUIRK(0x1043, 0x1843, "ASUS NB", ALC662_FIXUP_ASUS_MODE2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10922) 	SND_PCI_QUIRK(0x1043, 0x1853, "ASUS F50Z", ALC662_FIXUP_ASUS_MODE1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10923) 	SND_PCI_QUIRK(0x1043, 0x1864, "ASUS NB", ALC662_FIXUP_ASUS_MODE2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10924) 	SND_PCI_QUIRK(0x1043, 0x1876, "ASUS NB", ALC662_FIXUP_ASUS_MODE2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10925) 	SND_PCI_QUIRK(0x1043, 0x1893, "ASUS M50Vm", ALC662_FIXUP_ASUS_MODE3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10926) 	SND_PCI_QUIRK(0x1043, 0x1894, "ASUS X55", ALC662_FIXUP_ASUS_MODE3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10927) 	SND_PCI_QUIRK(0x1043, 0x18b3, "ASUS N80Vc", ALC662_FIXUP_ASUS_MODE1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10928) 	SND_PCI_QUIRK(0x1043, 0x18c3, "ASUS VX5", ALC662_FIXUP_ASUS_MODE1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10929) 	SND_PCI_QUIRK(0x1043, 0x18d3, "ASUS N81Te", ALC662_FIXUP_ASUS_MODE1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10930) 	SND_PCI_QUIRK(0x1043, 0x18f3, "ASUS N505Tp", ALC662_FIXUP_ASUS_MODE1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10931) 	SND_PCI_QUIRK(0x1043, 0x1903, "ASUS F5GL", ALC662_FIXUP_ASUS_MODE1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10932) 	SND_PCI_QUIRK(0x1043, 0x1913, "ASUS NB", ALC662_FIXUP_ASUS_MODE2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10933) 	SND_PCI_QUIRK(0x1043, 0x1933, "ASUS F80Q", ALC662_FIXUP_ASUS_MODE2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10934) 	SND_PCI_QUIRK(0x1043, 0x1943, "ASUS Vx3V", ALC662_FIXUP_ASUS_MODE1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10935) 	SND_PCI_QUIRK(0x1043, 0x1953, "ASUS NB", ALC662_FIXUP_ASUS_MODE1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10936) 	SND_PCI_QUIRK(0x1043, 0x1963, "ASUS X71C", ALC662_FIXUP_ASUS_MODE3),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10937) 	SND_PCI_QUIRK(0x1043, 0x1983, "ASUS N5051A", ALC662_FIXUP_ASUS_MODE1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10938) 	SND_PCI_QUIRK(0x1043, 0x1993, "ASUS N20", ALC662_FIXUP_ASUS_MODE1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10939) 	SND_PCI_QUIRK(0x1043, 0x19b3, "ASUS F7Z", ALC662_FIXUP_ASUS_MODE1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10940) 	SND_PCI_QUIRK(0x1043, 0x19c3, "ASUS F5Z/F6x", ALC662_FIXUP_ASUS_MODE2),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10941) 	SND_PCI_QUIRK(0x1043, 0x19e3, "ASUS NB", ALC662_FIXUP_ASUS_MODE1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10942) 	SND_PCI_QUIRK(0x1043, 0x19f3, "ASUS NB", ALC662_FIXUP_ASUS_MODE4),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10943) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10944) 	{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10945) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10946) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10947) static const struct hda_model_fixup alc662_fixup_models[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10948) 	{.id = ALC662_FIXUP_ASPIRE, .name = "aspire"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10949) 	{.id = ALC662_FIXUP_IDEAPAD, .name = "ideapad"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10950) 	{.id = ALC272_FIXUP_MARIO, .name = "mario"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10951) 	{.id = ALC662_FIXUP_HP_RP5800, .name = "hp-rp5800"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10952) 	{.id = ALC662_FIXUP_ASUS_MODE1, .name = "asus-mode1"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10953) 	{.id = ALC662_FIXUP_ASUS_MODE2, .name = "asus-mode2"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10954) 	{.id = ALC662_FIXUP_ASUS_MODE3, .name = "asus-mode3"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10955) 	{.id = ALC662_FIXUP_ASUS_MODE4, .name = "asus-mode4"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10956) 	{.id = ALC662_FIXUP_ASUS_MODE5, .name = "asus-mode5"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10957) 	{.id = ALC662_FIXUP_ASUS_MODE6, .name = "asus-mode6"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10958) 	{.id = ALC662_FIXUP_ASUS_MODE7, .name = "asus-mode7"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10959) 	{.id = ALC662_FIXUP_ASUS_MODE8, .name = "asus-mode8"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10960) 	{.id = ALC662_FIXUP_ZOTAC_Z68, .name = "zotac-z68"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10961) 	{.id = ALC662_FIXUP_INV_DMIC, .name = "inv-dmic"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10962) 	{.id = ALC662_FIXUP_DELL_MIC_NO_PRESENCE, .name = "alc662-headset-multi"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10963) 	{.id = ALC668_FIXUP_DELL_MIC_NO_PRESENCE, .name = "dell-headset-multi"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10964) 	{.id = ALC662_FIXUP_HEADSET_MODE, .name = "alc662-headset"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10965) 	{.id = ALC668_FIXUP_HEADSET_MODE, .name = "alc668-headset"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10966) 	{.id = ALC662_FIXUP_BASS_16, .name = "bass16"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10967) 	{.id = ALC662_FIXUP_BASS_1A, .name = "bass1a"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10968) 	{.id = ALC668_FIXUP_AUTO_MUTE, .name = "automute"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10969) 	{.id = ALC668_FIXUP_DELL_XPS13, .name = "dell-xps13"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10970) 	{.id = ALC662_FIXUP_ASUS_Nx50, .name = "asus-nx50"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10971) 	{.id = ALC668_FIXUP_ASUS_Nx51, .name = "asus-nx51"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10972) 	{.id = ALC668_FIXUP_ASUS_G751, .name = "asus-g751"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10973) 	{.id = ALC891_FIXUP_HEADSET_MODE, .name = "alc891-headset"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10974) 	{.id = ALC891_FIXUP_DELL_MIC_NO_PRESENCE, .name = "alc891-headset-multi"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10975) 	{.id = ALC662_FIXUP_ACER_VERITON, .name = "acer-veriton"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10976) 	{.id = ALC892_FIXUP_ASROCK_MOBO, .name = "asrock-mobo"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10977) 	{.id = ALC662_FIXUP_USI_HEADSET_MODE, .name = "usi-headset"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10978) 	{.id = ALC662_FIXUP_LENOVO_MULTI_CODECS, .name = "dual-codecs"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10979) 	{.id = ALC669_FIXUP_ACER_ASPIRE_ETHOS, .name = "aspire-ethos"},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10980) 	{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10981) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10982) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10983) static const struct snd_hda_pin_quirk alc662_pin_fixup_tbl[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10984) 	SND_HDA_PIN_QUIRK(0x10ec0867, 0x1028, "Dell", ALC891_FIXUP_DELL_MIC_NO_PRESENCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10985) 		{0x17, 0x02211010},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10986) 		{0x18, 0x01a19030},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10987) 		{0x1a, 0x01813040},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10988) 		{0x21, 0x01014020}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10989) 	SND_HDA_PIN_QUIRK(0x10ec0867, 0x1028, "Dell", ALC891_FIXUP_DELL_MIC_NO_PRESENCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10990) 		{0x16, 0x01813030},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10991) 		{0x17, 0x02211010},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10992) 		{0x18, 0x01a19040},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10993) 		{0x21, 0x01014020}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10994) 	SND_HDA_PIN_QUIRK(0x10ec0662, 0x1028, "Dell", ALC662_FIXUP_DELL_MIC_NO_PRESENCE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10995) 		{0x14, 0x01014010},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10996) 		{0x18, 0x01a19020},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10997) 		{0x1a, 0x0181302f},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10998) 		{0x1b, 0x0221401f}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10999) 	SND_HDA_PIN_QUIRK(0x10ec0668, 0x1028, "Dell", ALC668_FIXUP_AUTO_MUTE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11000) 		{0x12, 0x99a30130},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11001) 		{0x14, 0x90170110},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11002) 		{0x15, 0x0321101f},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11003) 		{0x16, 0x03011020}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11004) 	SND_HDA_PIN_QUIRK(0x10ec0668, 0x1028, "Dell", ALC668_FIXUP_AUTO_MUTE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11005) 		{0x12, 0x99a30140},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11006) 		{0x14, 0x90170110},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11007) 		{0x15, 0x0321101f},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11008) 		{0x16, 0x03011020}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11009) 	SND_HDA_PIN_QUIRK(0x10ec0668, 0x1028, "Dell", ALC668_FIXUP_AUTO_MUTE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11010) 		{0x12, 0x99a30150},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11011) 		{0x14, 0x90170110},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11012) 		{0x15, 0x0321101f},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11013) 		{0x16, 0x03011020}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11014) 	SND_HDA_PIN_QUIRK(0x10ec0668, 0x1028, "Dell", ALC668_FIXUP_AUTO_MUTE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11015) 		{0x14, 0x90170110},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11016) 		{0x15, 0x0321101f},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11017) 		{0x16, 0x03011020}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11018) 	SND_HDA_PIN_QUIRK(0x10ec0668, 0x1028, "Dell XPS 15", ALC668_FIXUP_AUTO_MUTE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11019) 		{0x12, 0x90a60130},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11020) 		{0x14, 0x90170110},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11021) 		{0x15, 0x0321101f}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11022) 	SND_HDA_PIN_QUIRK(0x10ec0671, 0x103c, "HP cPC", ALC671_FIXUP_HP_HEADSET_MIC2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11023) 		{0x14, 0x01014010},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11024) 		{0x17, 0x90170150},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11025) 		{0x19, 0x02a11060},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11026) 		{0x1b, 0x01813030},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11027) 		{0x21, 0x02211020}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11028) 	SND_HDA_PIN_QUIRK(0x10ec0671, 0x103c, "HP cPC", ALC671_FIXUP_HP_HEADSET_MIC2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11029) 		{0x14, 0x01014010},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11030) 		{0x18, 0x01a19040},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11031) 		{0x1b, 0x01813030},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11032) 		{0x21, 0x02211020}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11033) 	SND_HDA_PIN_QUIRK(0x10ec0671, 0x103c, "HP cPC", ALC671_FIXUP_HP_HEADSET_MIC2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11034) 		{0x14, 0x01014020},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11035) 		{0x17, 0x90170110},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11036) 		{0x18, 0x01a19050},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11037) 		{0x1b, 0x01813040},
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11038) 		{0x21, 0x02211030}),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11039) 	{}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11040) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11041) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11042) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11043)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11044) static int patch_alc662(struct hda_codec *codec)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11045) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11046) 	struct alc_spec *spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11047) 	int err;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11048) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11049) 	err = alc_alloc_spec(codec, 0x0b);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11050) 	if (err < 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11051) 		return err;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11052) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11053) 	spec = codec->spec;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11054) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11055) 	spec->shutup = alc_eapd_shutup;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11056) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11057) 	/* handle multiple HPs as is */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11058) 	spec->parse_flags = HDA_PINCFG_NO_HP_FIXUP;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11059) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11060) 	alc_fix_pll_init(codec, 0x20, 0x04, 15);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11061) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11062) 	switch (codec->core.vendor_id) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11063) 	case 0x10ec0668:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11064) 		spec->init_hook = alc668_restore_default_value;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11065) 		break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11066) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11067) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11068) 	alc_pre_init(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11069) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11070) 	snd_hda_pick_fixup(codec, alc662_fixup_models,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11071) 		       alc662_fixup_tbl, alc662_fixups);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11072) 	snd_hda_pick_pin_fixup(codec, alc662_pin_fixup_tbl, alc662_fixups, true);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11073) 	snd_hda_apply_fixup(codec, HDA_FIXUP_ACT_PRE_PROBE);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11074) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11075) 	alc_auto_parse_customize_define(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11076) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11077) 	if (has_cdefine_beep(codec))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11078) 		spec->gen.beep_nid = 0x01;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11079) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11080) 	if ((alc_get_coef0(codec) & (1 << 14)) &&
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11081) 	    codec->bus->pci && codec->bus->pci->subsystem_vendor == 0x1025 &&
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11082) 	    spec->cdefine.platform_type == 1) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11083) 		err = alc_codec_rename(codec, "ALC272X");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11084) 		if (err < 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11085) 			goto error;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11086) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11087) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11088) 	/* automatic parse from the BIOS config */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11089) 	err = alc662_parse_auto_config(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11090) 	if (err < 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11091) 		goto error;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11092) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11093) 	if (!spec->gen.no_analog && spec->gen.beep_nid) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11094) 		switch (codec->core.vendor_id) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11095) 		case 0x10ec0662:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11096) 			err = set_beep_amp(spec, 0x0b, 0x05, HDA_INPUT);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11097) 			break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11098) 		case 0x10ec0272:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11099) 		case 0x10ec0663:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11100) 		case 0x10ec0665:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11101) 		case 0x10ec0668:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11102) 			err = set_beep_amp(spec, 0x0b, 0x04, HDA_INPUT);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11103) 			break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11104) 		case 0x10ec0273:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11105) 			err = set_beep_amp(spec, 0x0b, 0x03, HDA_INPUT);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11106) 			break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11107) 		}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11108) 		if (err < 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11109) 			goto error;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11110) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11111) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11112) 	snd_hda_apply_fixup(codec, HDA_FIXUP_ACT_PROBE);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11113) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11114) 	return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11115) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11116)  error:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11117) 	alc_free(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11118) 	return err;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11119) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11120) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11121) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11122)  * ALC680 support
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11123)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11124) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11125) static int alc680_parse_auto_config(struct hda_codec *codec)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11126) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11127) 	return alc_parse_auto_config(codec, NULL, NULL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11128) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11129) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11130) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11131)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11132) static int patch_alc680(struct hda_codec *codec)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11133) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11134) 	int err;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11135) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11136) 	/* ALC680 has no aa-loopback mixer */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11137) 	err = alc_alloc_spec(codec, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11138) 	if (err < 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11139) 		return err;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11140) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11141) 	/* automatic parse from the BIOS config */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11142) 	err = alc680_parse_auto_config(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11143) 	if (err < 0) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11144) 		alc_free(codec);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11145) 		return err;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11146) 	}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11147) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11148) 	return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11149) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11150) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11151) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11152)  * patch entries
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11153)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11154) static const struct hda_device_id snd_hda_id_realtek[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11155) 	HDA_CODEC_ENTRY(0x10ec0215, "ALC215", patch_alc269),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11156) 	HDA_CODEC_ENTRY(0x10ec0221, "ALC221", patch_alc269),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11157) 	HDA_CODEC_ENTRY(0x10ec0222, "ALC222", patch_alc269),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11158) 	HDA_CODEC_ENTRY(0x10ec0225, "ALC225", patch_alc269),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11159) 	HDA_CODEC_ENTRY(0x10ec0230, "ALC236", patch_alc269),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11160) 	HDA_CODEC_ENTRY(0x10ec0231, "ALC231", patch_alc269),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11161) 	HDA_CODEC_ENTRY(0x10ec0233, "ALC233", patch_alc269),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11162) 	HDA_CODEC_ENTRY(0x10ec0234, "ALC234", patch_alc269),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11163) 	HDA_CODEC_ENTRY(0x10ec0235, "ALC233", patch_alc269),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11164) 	HDA_CODEC_ENTRY(0x10ec0236, "ALC236", patch_alc269),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11165) 	HDA_CODEC_ENTRY(0x10ec0245, "ALC245", patch_alc269),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11166) 	HDA_CODEC_ENTRY(0x10ec0255, "ALC255", patch_alc269),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11167) 	HDA_CODEC_ENTRY(0x10ec0256, "ALC256", patch_alc269),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11168) 	HDA_CODEC_ENTRY(0x10ec0257, "ALC257", patch_alc269),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11169) 	HDA_CODEC_ENTRY(0x10ec0260, "ALC260", patch_alc260),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11170) 	HDA_CODEC_ENTRY(0x10ec0262, "ALC262", patch_alc262),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11171) 	HDA_CODEC_ENTRY(0x10ec0267, "ALC267", patch_alc268),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11172) 	HDA_CODEC_ENTRY(0x10ec0268, "ALC268", patch_alc268),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11173) 	HDA_CODEC_ENTRY(0x10ec0269, "ALC269", patch_alc269),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11174) 	HDA_CODEC_ENTRY(0x10ec0270, "ALC270", patch_alc269),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11175) 	HDA_CODEC_ENTRY(0x10ec0272, "ALC272", patch_alc662),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11176) 	HDA_CODEC_ENTRY(0x10ec0274, "ALC274", patch_alc269),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11177) 	HDA_CODEC_ENTRY(0x10ec0275, "ALC275", patch_alc269),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11178) 	HDA_CODEC_ENTRY(0x10ec0276, "ALC276", patch_alc269),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11179) 	HDA_CODEC_ENTRY(0x10ec0280, "ALC280", patch_alc269),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11180) 	HDA_CODEC_ENTRY(0x10ec0282, "ALC282", patch_alc269),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11181) 	HDA_CODEC_ENTRY(0x10ec0283, "ALC283", patch_alc269),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11182) 	HDA_CODEC_ENTRY(0x10ec0284, "ALC284", patch_alc269),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11183) 	HDA_CODEC_ENTRY(0x10ec0285, "ALC285", patch_alc269),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11184) 	HDA_CODEC_ENTRY(0x10ec0286, "ALC286", patch_alc269),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11185) 	HDA_CODEC_ENTRY(0x10ec0287, "ALC287", patch_alc269),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11186) 	HDA_CODEC_ENTRY(0x10ec0288, "ALC288", patch_alc269),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11187) 	HDA_CODEC_ENTRY(0x10ec0289, "ALC289", patch_alc269),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11188) 	HDA_CODEC_ENTRY(0x10ec0290, "ALC290", patch_alc269),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11189) 	HDA_CODEC_ENTRY(0x10ec0292, "ALC292", patch_alc269),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11190) 	HDA_CODEC_ENTRY(0x10ec0293, "ALC293", patch_alc269),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11191) 	HDA_CODEC_ENTRY(0x10ec0294, "ALC294", patch_alc269),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11192) 	HDA_CODEC_ENTRY(0x10ec0295, "ALC295", patch_alc269),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11193) 	HDA_CODEC_ENTRY(0x10ec0298, "ALC298", patch_alc269),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11194) 	HDA_CODEC_ENTRY(0x10ec0299, "ALC299", patch_alc269),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11195) 	HDA_CODEC_ENTRY(0x10ec0300, "ALC300", patch_alc269),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11196) 	HDA_CODEC_ENTRY(0x10ec0623, "ALC623", patch_alc269),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11197) 	HDA_CODEC_REV_ENTRY(0x10ec0861, 0x100340, "ALC660", patch_alc861),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11198) 	HDA_CODEC_ENTRY(0x10ec0660, "ALC660-VD", patch_alc861vd),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11199) 	HDA_CODEC_ENTRY(0x10ec0861, "ALC861", patch_alc861),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11200) 	HDA_CODEC_ENTRY(0x10ec0862, "ALC861-VD", patch_alc861vd),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11201) 	HDA_CODEC_REV_ENTRY(0x10ec0662, 0x100002, "ALC662 rev2", patch_alc882),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11202) 	HDA_CODEC_REV_ENTRY(0x10ec0662, 0x100101, "ALC662 rev1", patch_alc662),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11203) 	HDA_CODEC_REV_ENTRY(0x10ec0662, 0x100300, "ALC662 rev3", patch_alc662),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11204) 	HDA_CODEC_ENTRY(0x10ec0663, "ALC663", patch_alc662),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11205) 	HDA_CODEC_ENTRY(0x10ec0665, "ALC665", patch_alc662),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11206) 	HDA_CODEC_ENTRY(0x10ec0667, "ALC667", patch_alc662),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11207) 	HDA_CODEC_ENTRY(0x10ec0668, "ALC668", patch_alc662),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11208) 	HDA_CODEC_ENTRY(0x10ec0670, "ALC670", patch_alc662),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11209) 	HDA_CODEC_ENTRY(0x10ec0671, "ALC671", patch_alc662),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11210) 	HDA_CODEC_ENTRY(0x10ec0680, "ALC680", patch_alc680),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11211) 	HDA_CODEC_ENTRY(0x10ec0700, "ALC700", patch_alc269),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11212) 	HDA_CODEC_ENTRY(0x10ec0701, "ALC701", patch_alc269),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11213) 	HDA_CODEC_ENTRY(0x10ec0703, "ALC703", patch_alc269),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11214) 	HDA_CODEC_ENTRY(0x10ec0711, "ALC711", patch_alc269),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11215) 	HDA_CODEC_ENTRY(0x10ec0867, "ALC891", patch_alc662),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11216) 	HDA_CODEC_ENTRY(0x10ec0880, "ALC880", patch_alc880),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11217) 	HDA_CODEC_ENTRY(0x10ec0882, "ALC882", patch_alc882),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11218) 	HDA_CODEC_ENTRY(0x10ec0883, "ALC883", patch_alc882),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11219) 	HDA_CODEC_REV_ENTRY(0x10ec0885, 0x100101, "ALC889A", patch_alc882),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11220) 	HDA_CODEC_REV_ENTRY(0x10ec0885, 0x100103, "ALC889A", patch_alc882),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11221) 	HDA_CODEC_ENTRY(0x10ec0885, "ALC885", patch_alc882),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11222) 	HDA_CODEC_ENTRY(0x10ec0887, "ALC887", patch_alc882),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11223) 	HDA_CODEC_REV_ENTRY(0x10ec0888, 0x100101, "ALC1200", patch_alc882),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11224) 	HDA_CODEC_ENTRY(0x10ec0888, "ALC888", patch_alc882),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11225) 	HDA_CODEC_ENTRY(0x10ec0889, "ALC889", patch_alc882),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11226) 	HDA_CODEC_ENTRY(0x10ec0892, "ALC892", patch_alc662),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11227) 	HDA_CODEC_ENTRY(0x10ec0897, "ALC897", patch_alc662),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11228) 	HDA_CODEC_ENTRY(0x10ec0899, "ALC898", patch_alc882),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11229) 	HDA_CODEC_ENTRY(0x10ec0900, "ALC1150", patch_alc882),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11230) 	HDA_CODEC_ENTRY(0x10ec0b00, "ALCS1200A", patch_alc882),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11231) 	HDA_CODEC_ENTRY(0x10ec1168, "ALC1220", patch_alc882),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11232) 	HDA_CODEC_ENTRY(0x10ec1220, "ALC1220", patch_alc882),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11233) 	{} /* terminator */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11234) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11235) MODULE_DEVICE_TABLE(hdaudio, snd_hda_id_realtek);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11236) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11237) MODULE_LICENSE("GPL");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11238) MODULE_DESCRIPTION("Realtek HD-audio codec");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11239) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11240) static struct hda_codec_driver realtek_driver = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11241) 	.id = snd_hda_id_realtek,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11242) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11243) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11244) module_hda_codec_driver(realtek_driver);