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