xref: /openbmc/linux/sound/pci/hda/hda_auto_parser.h (revision 23d30f28275ddd7fdb87f265e9a440baf4a4cf09)
1*23d30f28STakashi Iwai /*
2*23d30f28STakashi Iwai  * BIOS auto-parser helper functions for HD-audio
3*23d30f28STakashi Iwai  *
4*23d30f28STakashi Iwai  * Copyright (c) 2012 Takashi Iwai <tiwai@suse.de>
5*23d30f28STakashi Iwai  *
6*23d30f28STakashi Iwai  * This driver is free software; you can redistribute it and/or modify
7*23d30f28STakashi Iwai  * it under the terms of the GNU General Public License as published by
8*23d30f28STakashi Iwai  * the Free Software Foundation; either version 2 of the License, or
9*23d30f28STakashi Iwai  * (at your option) any later version.
10*23d30f28STakashi Iwai  */
11*23d30f28STakashi Iwai 
12*23d30f28STakashi Iwai #ifndef __SOUND_HDA_AUTO_PARSER_H
13*23d30f28STakashi Iwai #define __SOUND_HDA_AUTO_PARSER_H
14*23d30f28STakashi Iwai 
15*23d30f28STakashi Iwai struct hda_gen_spec {
16*23d30f28STakashi Iwai 	/* fix-up list */
17*23d30f28STakashi Iwai 	int fixup_id;
18*23d30f28STakashi Iwai 	const struct hda_fixup *fixup_list;
19*23d30f28STakashi Iwai 	const char *fixup_name;
20*23d30f28STakashi Iwai 
21*23d30f28STakashi Iwai 	/* additional init verbs */
22*23d30f28STakashi Iwai 	struct snd_array verbs;
23*23d30f28STakashi Iwai };
24*23d30f28STakashi Iwai 
25*23d30f28STakashi Iwai 
26*23d30f28STakashi Iwai /*
27*23d30f28STakashi Iwai  * Fix-up pin default configurations and add default verbs
28*23d30f28STakashi Iwai  */
29*23d30f28STakashi Iwai 
30*23d30f28STakashi Iwai struct hda_pintbl {
31*23d30f28STakashi Iwai 	hda_nid_t nid;
32*23d30f28STakashi Iwai 	u32 val;
33*23d30f28STakashi Iwai };
34*23d30f28STakashi Iwai 
35*23d30f28STakashi Iwai struct hda_model_fixup {
36*23d30f28STakashi Iwai 	const int id;
37*23d30f28STakashi Iwai 	const char *name;
38*23d30f28STakashi Iwai };
39*23d30f28STakashi Iwai 
40*23d30f28STakashi Iwai struct hda_fixup {
41*23d30f28STakashi Iwai 	int type;
42*23d30f28STakashi Iwai 	bool chained;
43*23d30f28STakashi Iwai 	int chain_id;
44*23d30f28STakashi Iwai 	union {
45*23d30f28STakashi Iwai 		const struct hda_pintbl *pins;
46*23d30f28STakashi Iwai 		const struct hda_verb *verbs;
47*23d30f28STakashi Iwai 		void (*func)(struct hda_codec *codec,
48*23d30f28STakashi Iwai 			     const struct hda_fixup *fix,
49*23d30f28STakashi Iwai 			     int action);
50*23d30f28STakashi Iwai 	} v;
51*23d30f28STakashi Iwai };
52*23d30f28STakashi Iwai 
53*23d30f28STakashi Iwai /* fixup types */
54*23d30f28STakashi Iwai enum {
55*23d30f28STakashi Iwai 	HDA_FIXUP_INVALID,
56*23d30f28STakashi Iwai 	HDA_FIXUP_PINS,
57*23d30f28STakashi Iwai 	HDA_FIXUP_VERBS,
58*23d30f28STakashi Iwai 	HDA_FIXUP_FUNC,
59*23d30f28STakashi Iwai };
60*23d30f28STakashi Iwai 
61*23d30f28STakashi Iwai /* fixup action definitions */
62*23d30f28STakashi Iwai enum {
63*23d30f28STakashi Iwai 	HDA_FIXUP_ACT_PRE_PROBE,
64*23d30f28STakashi Iwai 	HDA_FIXUP_ACT_PROBE,
65*23d30f28STakashi Iwai 	HDA_FIXUP_ACT_INIT,
66*23d30f28STakashi Iwai 	HDA_FIXUP_ACT_BUILD,
67*23d30f28STakashi Iwai };
68*23d30f28STakashi Iwai 
69*23d30f28STakashi Iwai int snd_hda_gen_add_verbs(struct hda_gen_spec *spec,
70*23d30f28STakashi Iwai 			  const struct hda_verb *list);
71*23d30f28STakashi Iwai void snd_hda_gen_apply_verbs(struct hda_codec *codec);
72*23d30f28STakashi Iwai void snd_hda_apply_pincfgs(struct hda_codec *codec,
73*23d30f28STakashi Iwai 			   const struct hda_pintbl *cfg);
74*23d30f28STakashi Iwai void snd_hda_apply_fixup(struct hda_codec *codec, int action);
75*23d30f28STakashi Iwai void snd_hda_pick_fixup(struct hda_codec *codec,
76*23d30f28STakashi Iwai 			const struct hda_model_fixup *models,
77*23d30f28STakashi Iwai 			const struct snd_pci_quirk *quirk,
78*23d30f28STakashi Iwai 			const struct hda_fixup *fixlist);
79*23d30f28STakashi Iwai 
80*23d30f28STakashi Iwai #endif /* __SOUND_HDA_AUTO_PARSER_H */
81