alc268_quirks.c 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503
  1. /*
  2. * ALC267/ALC268 quirk models
  3. * included by patch_realtek.c
  4. */
  5. /* ALC268 models */
  6. enum {
  7. ALC268_AUTO,
  8. ALC267_QUANTA_IL1,
  9. ALC268_3ST,
  10. ALC268_ACER,
  11. ALC268_ACER_DMIC,
  12. ALC268_ACER_ASPIRE_ONE,
  13. #ifdef CONFIG_SND_DEBUG
  14. ALC268_TEST,
  15. #endif
  16. ALC268_MODEL_LAST /* last tag */
  17. };
  18. /*
  19. * ALC268 channel source setting (2 channel)
  20. */
  21. #define ALC268_DIGOUT_NID ALC880_DIGOUT_NID
  22. #define alc268_modes alc260_modes
  23. static const hda_nid_t alc268_dac_nids[2] = {
  24. /* front, hp */
  25. 0x02, 0x03
  26. };
  27. static const hda_nid_t alc268_adc_nids[2] = {
  28. /* ADC0-1 */
  29. 0x08, 0x07
  30. };
  31. static const hda_nid_t alc268_adc_nids_alt[1] = {
  32. /* ADC0 */
  33. 0x08
  34. };
  35. static const hda_nid_t alc268_capsrc_nids[2] = { 0x23, 0x24 };
  36. static const struct snd_kcontrol_new alc268_base_mixer[] = {
  37. /* output mixer control */
  38. HDA_CODEC_VOLUME("Front Playback Volume", 0x2, 0x0, HDA_OUTPUT),
  39. HDA_CODEC_MUTE("Front Playback Switch", 0x14, 0x0, HDA_OUTPUT),
  40. HDA_CODEC_VOLUME("Headphone Playback Volume", 0x3, 0x0, HDA_OUTPUT),
  41. HDA_CODEC_MUTE("Headphone Playback Switch", 0x15, 0x0, HDA_OUTPUT),
  42. HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT),
  43. HDA_CODEC_VOLUME("Front Mic Boost Volume", 0x19, 0, HDA_INPUT),
  44. HDA_CODEC_VOLUME("Line In Boost Volume", 0x1a, 0, HDA_INPUT),
  45. { }
  46. };
  47. static const struct hda_verb alc268_eapd_verbs[] = {
  48. {0x14, AC_VERB_SET_EAPD_BTLENABLE, 2},
  49. {0x15, AC_VERB_SET_EAPD_BTLENABLE, 2},
  50. { }
  51. };
  52. /* Acer specific */
  53. /* bind volumes of both NID 0x02 and 0x03 */
  54. static const struct hda_bind_ctls alc268_acer_bind_master_vol = {
  55. .ops = &snd_hda_bind_vol,
  56. .values = {
  57. HDA_COMPOSE_AMP_VAL(0x02, 3, 0, HDA_OUTPUT),
  58. HDA_COMPOSE_AMP_VAL(0x03, 3, 0, HDA_OUTPUT),
  59. 0
  60. },
  61. };
  62. static void alc268_acer_setup(struct hda_codec *codec)
  63. {
  64. struct alc_spec *spec = codec->spec;
  65. spec->autocfg.hp_pins[0] = 0x14;
  66. spec->autocfg.speaker_pins[0] = 0x15;
  67. spec->automute = 1;
  68. spec->automute_mode = ALC_AUTOMUTE_AMP;
  69. }
  70. #define alc268_acer_master_sw_get alc262_hp_master_sw_get
  71. #define alc268_acer_master_sw_put alc262_hp_master_sw_put
  72. static const struct snd_kcontrol_new alc268_acer_aspire_one_mixer[] = {
  73. /* output mixer control */
  74. HDA_BIND_VOL("Master Playback Volume", &alc268_acer_bind_master_vol),
  75. {
  76. .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
  77. .name = "Master Playback Switch",
  78. .subdevice = HDA_SUBDEV_NID_FLAG | 0x15,
  79. .info = snd_ctl_boolean_mono_info,
  80. .get = alc268_acer_master_sw_get,
  81. .put = alc268_acer_master_sw_put,
  82. },
  83. HDA_CODEC_VOLUME("Mic Boost Capture Volume", 0x18, 0, HDA_INPUT),
  84. { }
  85. };
  86. static const struct snd_kcontrol_new alc268_acer_mixer[] = {
  87. /* output mixer control */
  88. HDA_BIND_VOL("Master Playback Volume", &alc268_acer_bind_master_vol),
  89. {
  90. .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
  91. .name = "Master Playback Switch",
  92. .subdevice = HDA_SUBDEV_NID_FLAG | 0x14,
  93. .info = snd_ctl_boolean_mono_info,
  94. .get = alc268_acer_master_sw_get,
  95. .put = alc268_acer_master_sw_put,
  96. },
  97. HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT),
  98. HDA_CODEC_VOLUME("Internal Mic Boost Volume", 0x19, 0, HDA_INPUT),
  99. HDA_CODEC_VOLUME("Line In Boost Volume", 0x1a, 0, HDA_INPUT),
  100. { }
  101. };
  102. static const struct snd_kcontrol_new alc268_acer_dmic_mixer[] = {
  103. /* output mixer control */
  104. HDA_BIND_VOL("Master Playback Volume", &alc268_acer_bind_master_vol),
  105. {
  106. .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
  107. .name = "Master Playback Switch",
  108. .subdevice = HDA_SUBDEV_NID_FLAG | 0x14,
  109. .info = snd_ctl_boolean_mono_info,
  110. .get = alc268_acer_master_sw_get,
  111. .put = alc268_acer_master_sw_put,
  112. },
  113. HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT),
  114. HDA_CODEC_VOLUME("Line In Boost Volume", 0x1a, 0, HDA_INPUT),
  115. { }
  116. };
  117. static const struct hda_verb alc268_acer_aspire_one_verbs[] = {
  118. {0x12, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN},
  119. {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_HP},
  120. {0x15, AC_VERB_SET_UNSOLICITED_ENABLE, ALC_HP_EVENT | AC_USRSP_EN},
  121. {0x18, AC_VERB_SET_UNSOLICITED_ENABLE, AC_USRSP_EN | ALC_MIC_EVENT},
  122. {0x23, AC_VERB_SET_CONNECT_SEL, 0x06},
  123. {0x23, AC_VERB_SET_AMP_GAIN_MUTE, 0xa017},
  124. { }
  125. };
  126. static const struct hda_verb alc268_acer_verbs[] = {
  127. {0x12, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN}, /* internal dmic? */
  128. {0x13, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN},
  129. {0x14, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_HP},
  130. {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT},
  131. {0x18, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_VREF80},
  132. {0x1a, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_VREF80},
  133. {0x14, AC_VERB_SET_UNSOLICITED_ENABLE, ALC_HP_EVENT | AC_USRSP_EN},
  134. { }
  135. };
  136. static void alc268_acer_lc_setup(struct hda_codec *codec)
  137. {
  138. struct alc_spec *spec = codec->spec;
  139. spec->autocfg.hp_pins[0] = 0x15;
  140. spec->autocfg.speaker_pins[0] = 0x14;
  141. spec->automute = 1;
  142. spec->automute_mode = ALC_AUTOMUTE_AMP;
  143. spec->ext_mic_pin = 0x18;
  144. spec->int_mic_pin = 0x12;
  145. spec->auto_mic = 1;
  146. }
  147. static const struct snd_kcontrol_new alc267_quanta_il1_mixer[] = {
  148. HDA_CODEC_VOLUME("Speaker Playback Volume", 0x2, 0x0, HDA_OUTPUT),
  149. HDA_CODEC_MUTE("Speaker Playback Switch", 0x14, 0x0, HDA_OUTPUT),
  150. HDA_CODEC_VOLUME("Headphone Playback Volume", 0x3, 0x0, HDA_OUTPUT),
  151. HDA_CODEC_MUTE("Headphone Playback Switch", 0x15, 0x0, HDA_OUTPUT),
  152. HDA_CODEC_VOLUME("Mic Capture Volume", 0x23, 0x0, HDA_OUTPUT),
  153. HDA_BIND_MUTE("Mic Capture Switch", 0x23, 2, HDA_OUTPUT),
  154. HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT),
  155. HDA_CODEC_VOLUME("Internal Mic Boost Volume", 0x19, 0, HDA_INPUT),
  156. { }
  157. };
  158. static const struct hda_verb alc267_quanta_il1_verbs[] = {
  159. {0x15, AC_VERB_SET_UNSOLICITED_ENABLE, ALC_HP_EVENT | AC_USRSP_EN},
  160. {0x18, AC_VERB_SET_UNSOLICITED_ENABLE, ALC_MIC_EVENT | AC_USRSP_EN},
  161. { }
  162. };
  163. static void alc267_quanta_il1_setup(struct hda_codec *codec)
  164. {
  165. struct alc_spec *spec = codec->spec;
  166. spec->autocfg.hp_pins[0] = 0x15;
  167. spec->autocfg.speaker_pins[0] = 0x14;
  168. spec->ext_mic_pin = 0x18;
  169. spec->int_mic_pin = 0x19;
  170. spec->auto_mic = 1;
  171. spec->automute = 1;
  172. spec->automute_mode = ALC_AUTOMUTE_PIN;
  173. }
  174. /*
  175. * generic initialization of ADC, input mixers and output mixers
  176. */
  177. static const struct hda_verb alc268_base_init_verbs[] = {
  178. /* Unmute DAC0-1 and set vol = 0 */
  179. {0x02, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_ZERO},
  180. {0x03, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_ZERO},
  181. /*
  182. * Set up output mixers (0x0c - 0x0e)
  183. */
  184. /* set vol=0 to output mixers */
  185. {0x0e, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)},
  186. {0x0e, AC_VERB_SET_CONNECT_SEL, 0x00},
  187. {0x0f, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)},
  188. {0x10, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)},
  189. {0x14, AC_VERB_SET_PIN_WIDGET_CONTROL, 0x40},
  190. {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL, 0xc0},
  191. {0x16, AC_VERB_SET_PIN_WIDGET_CONTROL, 0x40},
  192. {0x18, AC_VERB_SET_PIN_WIDGET_CONTROL, 0x24},
  193. {0x19, AC_VERB_SET_PIN_WIDGET_CONTROL, 0x24},
  194. {0x1a, AC_VERB_SET_PIN_WIDGET_CONTROL, 0x20},
  195. {0x1c, AC_VERB_SET_PIN_WIDGET_CONTROL, 0x20},
  196. {0x1d, AC_VERB_SET_PIN_WIDGET_CONTROL, 0x20},
  197. {0x14, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE},
  198. {0x15, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE},
  199. {0x16, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE},
  200. {0x18, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE},
  201. {0x1a, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE},
  202. /* set PCBEEP vol = 0, mute connections */
  203. {0x1d, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)},
  204. {0x0f, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(1)},
  205. {0x10, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(1)},
  206. /* Unmute Selector 23h,24h and set the default input to mic-in */
  207. {0x23, AC_VERB_SET_CONNECT_SEL, 0x00},
  208. {0x23, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE},
  209. {0x24, AC_VERB_SET_CONNECT_SEL, 0x00},
  210. {0x24, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE},
  211. { }
  212. };
  213. /* only for model=test */
  214. #ifdef CONFIG_SND_DEBUG
  215. /*
  216. * generic initialization of ADC, input mixers and output mixers
  217. */
  218. static const struct hda_verb alc268_volume_init_verbs[] = {
  219. /* set output DAC */
  220. {0x02, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_ZERO},
  221. {0x03, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_ZERO},
  222. {0x18, AC_VERB_SET_PIN_WIDGET_CONTROL, 0x24},
  223. {0x19, AC_VERB_SET_PIN_WIDGET_CONTROL, 0x24},
  224. {0x1a, AC_VERB_SET_PIN_WIDGET_CONTROL, 0x20},
  225. {0x1c, AC_VERB_SET_PIN_WIDGET_CONTROL, 0x20},
  226. {0x1d, AC_VERB_SET_PIN_WIDGET_CONTROL, 0x20},
  227. {0x0e, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)},
  228. {0x0f, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)},
  229. {0x10, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)},
  230. {0x18, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE},
  231. {0x1a, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE},
  232. { }
  233. };
  234. #endif /* CONFIG_SND_DEBUG */
  235. static const struct snd_kcontrol_new alc268_capture_nosrc_mixer[] = {
  236. HDA_CODEC_VOLUME("Capture Volume", 0x23, 0x0, HDA_OUTPUT),
  237. HDA_CODEC_MUTE("Capture Switch", 0x23, 0x0, HDA_OUTPUT),
  238. { } /* end */
  239. };
  240. static const struct snd_kcontrol_new alc268_capture_alt_mixer[] = {
  241. HDA_CODEC_VOLUME("Capture Volume", 0x23, 0x0, HDA_OUTPUT),
  242. HDA_CODEC_MUTE("Capture Switch", 0x23, 0x0, HDA_OUTPUT),
  243. _DEFINE_CAPSRC(1),
  244. { } /* end */
  245. };
  246. static const struct snd_kcontrol_new alc268_capture_mixer[] = {
  247. HDA_CODEC_VOLUME("Capture Volume", 0x23, 0x0, HDA_OUTPUT),
  248. HDA_CODEC_MUTE("Capture Switch", 0x23, 0x0, HDA_OUTPUT),
  249. HDA_CODEC_VOLUME_IDX("Capture Volume", 1, 0x24, 0x0, HDA_OUTPUT),
  250. HDA_CODEC_MUTE_IDX("Capture Switch", 1, 0x24, 0x0, HDA_OUTPUT),
  251. _DEFINE_CAPSRC(2),
  252. { } /* end */
  253. };
  254. static const struct hda_input_mux alc268_capture_source = {
  255. .num_items = 4,
  256. .items = {
  257. { "Mic", 0x0 },
  258. { "Front Mic", 0x1 },
  259. { "Line", 0x2 },
  260. { "CD", 0x3 },
  261. },
  262. };
  263. static const struct hda_input_mux alc268_acer_capture_source = {
  264. .num_items = 3,
  265. .items = {
  266. { "Mic", 0x0 },
  267. { "Internal Mic", 0x1 },
  268. { "Line", 0x2 },
  269. },
  270. };
  271. static const struct hda_input_mux alc268_acer_dmic_capture_source = {
  272. .num_items = 3,
  273. .items = {
  274. { "Mic", 0x0 },
  275. { "Internal Mic", 0x6 },
  276. { "Line", 0x2 },
  277. },
  278. };
  279. #ifdef CONFIG_SND_DEBUG
  280. static const struct snd_kcontrol_new alc268_test_mixer[] = {
  281. /* Volume widgets */
  282. HDA_CODEC_VOLUME("LOUT1 Playback Volume", 0x02, 0x0, HDA_OUTPUT),
  283. HDA_CODEC_VOLUME("LOUT2 Playback Volume", 0x03, 0x0, HDA_OUTPUT),
  284. HDA_BIND_MUTE_MONO("Mono sum Playback Switch", 0x0e, 1, 2, HDA_INPUT),
  285. HDA_BIND_MUTE("LINE-OUT sum Playback Switch", 0x0f, 2, HDA_INPUT),
  286. HDA_BIND_MUTE("HP-OUT sum Playback Switch", 0x10, 2, HDA_INPUT),
  287. HDA_BIND_MUTE("LINE-OUT Playback Switch", 0x14, 2, HDA_OUTPUT),
  288. HDA_BIND_MUTE("HP-OUT Playback Switch", 0x15, 2, HDA_OUTPUT),
  289. HDA_BIND_MUTE("Mono Playback Switch", 0x16, 2, HDA_OUTPUT),
  290. HDA_CODEC_VOLUME("MIC1 Capture Volume", 0x18, 0x0, HDA_INPUT),
  291. HDA_BIND_MUTE("MIC1 Capture Switch", 0x18, 2, HDA_OUTPUT),
  292. HDA_CODEC_VOLUME("MIC2 Capture Volume", 0x19, 0x0, HDA_INPUT),
  293. HDA_CODEC_VOLUME("LINE1 Capture Volume", 0x1a, 0x0, HDA_INPUT),
  294. HDA_BIND_MUTE("LINE1 Capture Switch", 0x1a, 2, HDA_OUTPUT),
  295. /* The below appears problematic on some hardwares */
  296. /*HDA_CODEC_VOLUME("PCBEEP Playback Volume", 0x1d, 0x0, HDA_INPUT),*/
  297. HDA_CODEC_VOLUME("PCM-IN1 Capture Volume", 0x23, 0x0, HDA_OUTPUT),
  298. HDA_BIND_MUTE("PCM-IN1 Capture Switch", 0x23, 2, HDA_OUTPUT),
  299. HDA_CODEC_VOLUME("PCM-IN2 Capture Volume", 0x24, 0x0, HDA_OUTPUT),
  300. HDA_BIND_MUTE("PCM-IN2 Capture Switch", 0x24, 2, HDA_OUTPUT),
  301. /* Modes for retasking pin widgets */
  302. ALC_PIN_MODE("LINE-OUT pin mode", 0x14, ALC_PIN_DIR_INOUT),
  303. ALC_PIN_MODE("HP-OUT pin mode", 0x15, ALC_PIN_DIR_INOUT),
  304. ALC_PIN_MODE("MIC1 pin mode", 0x18, ALC_PIN_DIR_INOUT),
  305. ALC_PIN_MODE("LINE1 pin mode", 0x1a, ALC_PIN_DIR_INOUT),
  306. /* Controls for GPIO pins, assuming they are configured as outputs */
  307. ALC_GPIO_DATA_SWITCH("GPIO pin 0", 0x01, 0x01),
  308. ALC_GPIO_DATA_SWITCH("GPIO pin 1", 0x01, 0x02),
  309. ALC_GPIO_DATA_SWITCH("GPIO pin 2", 0x01, 0x04),
  310. ALC_GPIO_DATA_SWITCH("GPIO pin 3", 0x01, 0x08),
  311. /* Switches to allow the digital SPDIF output pin to be enabled.
  312. * The ALC268 does not have an SPDIF input.
  313. */
  314. ALC_SPDIF_CTRL_SWITCH("SPDIF Playback Switch", 0x06, 0x01),
  315. /* A switch allowing EAPD to be enabled. Some laptops seem to use
  316. * this output to turn on an external amplifier.
  317. */
  318. ALC_EAPD_CTRL_SWITCH("LINE-OUT EAPD Enable Switch", 0x0f, 0x02),
  319. ALC_EAPD_CTRL_SWITCH("HP-OUT EAPD Enable Switch", 0x10, 0x02),
  320. { } /* end */
  321. };
  322. #endif
  323. /*
  324. * configuration and preset
  325. */
  326. static const char * const alc268_models[ALC268_MODEL_LAST] = {
  327. [ALC267_QUANTA_IL1] = "quanta-il1",
  328. [ALC268_3ST] = "3stack",
  329. [ALC268_ACER] = "acer",
  330. [ALC268_ACER_DMIC] = "acer-dmic",
  331. [ALC268_ACER_ASPIRE_ONE] = "acer-aspire",
  332. #ifdef CONFIG_SND_DEBUG
  333. [ALC268_TEST] = "test",
  334. #endif
  335. [ALC268_AUTO] = "auto",
  336. };
  337. static const struct snd_pci_quirk alc268_cfg_tbl[] = {
  338. SND_PCI_QUIRK(0x1025, 0x011e, "Acer Aspire 5720z", ALC268_ACER),
  339. SND_PCI_QUIRK(0x1025, 0x0126, "Acer", ALC268_ACER),
  340. SND_PCI_QUIRK(0x1025, 0x012e, "Acer Aspire 5310", ALC268_ACER),
  341. SND_PCI_QUIRK(0x1025, 0x0130, "Acer Extensa 5210", ALC268_ACER),
  342. SND_PCI_QUIRK(0x1025, 0x0136, "Acer Aspire 5315", ALC268_ACER),
  343. SND_PCI_QUIRK(0x1025, 0x015b, "Acer Aspire One",
  344. ALC268_ACER_ASPIRE_ONE),
  345. SND_PCI_QUIRK(0x1043, 0x1205, "ASUS W7J", ALC268_3ST),
  346. SND_PCI_QUIRK(0x152d, 0x0771, "Quanta IL1", ALC267_QUANTA_IL1),
  347. {}
  348. };
  349. static const struct alc_config_preset alc268_presets[] = {
  350. [ALC267_QUANTA_IL1] = {
  351. .mixers = { alc267_quanta_il1_mixer, alc268_beep_mixer },
  352. .cap_mixer = alc268_capture_nosrc_mixer,
  353. .init_verbs = { alc268_base_init_verbs, alc268_eapd_verbs,
  354. alc267_quanta_il1_verbs },
  355. .num_dacs = ARRAY_SIZE(alc268_dac_nids),
  356. .dac_nids = alc268_dac_nids,
  357. .num_adc_nids = ARRAY_SIZE(alc268_adc_nids_alt),
  358. .adc_nids = alc268_adc_nids_alt,
  359. .hp_nid = 0x03,
  360. .num_channel_mode = ARRAY_SIZE(alc268_modes),
  361. .channel_mode = alc268_modes,
  362. .unsol_event = alc_sku_unsol_event,
  363. .setup = alc267_quanta_il1_setup,
  364. .init_hook = alc_inithook,
  365. },
  366. [ALC268_3ST] = {
  367. .mixers = { alc268_base_mixer, alc268_beep_mixer },
  368. .cap_mixer = alc268_capture_alt_mixer,
  369. .init_verbs = { alc268_base_init_verbs },
  370. .num_dacs = ARRAY_SIZE(alc268_dac_nids),
  371. .dac_nids = alc268_dac_nids,
  372. .num_adc_nids = ARRAY_SIZE(alc268_adc_nids_alt),
  373. .adc_nids = alc268_adc_nids_alt,
  374. .capsrc_nids = alc268_capsrc_nids,
  375. .hp_nid = 0x03,
  376. .dig_out_nid = ALC268_DIGOUT_NID,
  377. .num_channel_mode = ARRAY_SIZE(alc268_modes),
  378. .channel_mode = alc268_modes,
  379. .input_mux = &alc268_capture_source,
  380. },
  381. [ALC268_ACER] = {
  382. .mixers = { alc268_acer_mixer, alc268_beep_mixer },
  383. .cap_mixer = alc268_capture_alt_mixer,
  384. .init_verbs = { alc268_base_init_verbs, alc268_eapd_verbs,
  385. alc268_acer_verbs },
  386. .num_dacs = ARRAY_SIZE(alc268_dac_nids),
  387. .dac_nids = alc268_dac_nids,
  388. .num_adc_nids = ARRAY_SIZE(alc268_adc_nids_alt),
  389. .adc_nids = alc268_adc_nids_alt,
  390. .capsrc_nids = alc268_capsrc_nids,
  391. .hp_nid = 0x02,
  392. .num_channel_mode = ARRAY_SIZE(alc268_modes),
  393. .channel_mode = alc268_modes,
  394. .input_mux = &alc268_acer_capture_source,
  395. .unsol_event = alc_sku_unsol_event,
  396. .setup = alc268_acer_setup,
  397. .init_hook = alc_inithook,
  398. },
  399. [ALC268_ACER_DMIC] = {
  400. .mixers = { alc268_acer_dmic_mixer, alc268_beep_mixer },
  401. .cap_mixer = alc268_capture_alt_mixer,
  402. .init_verbs = { alc268_base_init_verbs, alc268_eapd_verbs,
  403. alc268_acer_verbs },
  404. .num_dacs = ARRAY_SIZE(alc268_dac_nids),
  405. .dac_nids = alc268_dac_nids,
  406. .num_adc_nids = ARRAY_SIZE(alc268_adc_nids_alt),
  407. .adc_nids = alc268_adc_nids_alt,
  408. .capsrc_nids = alc268_capsrc_nids,
  409. .hp_nid = 0x02,
  410. .num_channel_mode = ARRAY_SIZE(alc268_modes),
  411. .channel_mode = alc268_modes,
  412. .input_mux = &alc268_acer_dmic_capture_source,
  413. .unsol_event = alc_sku_unsol_event,
  414. .setup = alc268_acer_setup,
  415. .init_hook = alc_inithook,
  416. },
  417. [ALC268_ACER_ASPIRE_ONE] = {
  418. .mixers = { alc268_acer_aspire_one_mixer, alc268_beep_mixer},
  419. .cap_mixer = alc268_capture_nosrc_mixer,
  420. .init_verbs = { alc268_base_init_verbs, alc268_eapd_verbs,
  421. alc268_acer_aspire_one_verbs },
  422. .num_dacs = ARRAY_SIZE(alc268_dac_nids),
  423. .dac_nids = alc268_dac_nids,
  424. .num_adc_nids = ARRAY_SIZE(alc268_adc_nids_alt),
  425. .adc_nids = alc268_adc_nids_alt,
  426. .capsrc_nids = alc268_capsrc_nids,
  427. .hp_nid = 0x03,
  428. .num_channel_mode = ARRAY_SIZE(alc268_modes),
  429. .channel_mode = alc268_modes,
  430. .unsol_event = alc_sku_unsol_event,
  431. .setup = alc268_acer_lc_setup,
  432. .init_hook = alc_inithook,
  433. },
  434. #ifdef CONFIG_SND_DEBUG
  435. [ALC268_TEST] = {
  436. .mixers = { alc268_test_mixer },
  437. .cap_mixer = alc268_capture_mixer,
  438. .init_verbs = { alc268_base_init_verbs, alc268_eapd_verbs,
  439. alc268_volume_init_verbs,
  440. alc268_beep_init_verbs },
  441. .num_dacs = ARRAY_SIZE(alc268_dac_nids),
  442. .dac_nids = alc268_dac_nids,
  443. .num_adc_nids = ARRAY_SIZE(alc268_adc_nids_alt),
  444. .adc_nids = alc268_adc_nids_alt,
  445. .capsrc_nids = alc268_capsrc_nids,
  446. .hp_nid = 0x03,
  447. .dig_out_nid = ALC268_DIGOUT_NID,
  448. .num_channel_mode = ARRAY_SIZE(alc268_modes),
  449. .channel_mode = alc268_modes,
  450. .input_mux = &alc268_capture_source,
  451. },
  452. #endif
  453. };