Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
hda_auto_parser.h
Go to the documentation of this file.
1 /*
2  * BIOS auto-parser helper functions for HD-audio
3  *
4  * Copyright (c) 2012 Takashi Iwai <[email protected]>
5  *
6  * This driver is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  */
11 
12 #ifndef __SOUND_HDA_AUTO_PARSER_H
13 #define __SOUND_HDA_AUTO_PARSER_H
14 
15 /*
16  * Helper for automatic pin configuration
17  */
18 
19 enum {
25 };
26 
27 enum {
31 };
32 
33 #define AUTO_CFG_MAX_OUTS HDA_MAX_OUTS
34 #define AUTO_CFG_MAX_INS 8
35 
38  int type;
39 };
40 
41 struct auto_pin_cfg;
42 const char *hda_get_autocfg_input_label(struct hda_codec *codec,
43  const struct auto_pin_cfg *cfg,
44  int input);
46  const struct auto_pin_cfg *cfg,
47  char *label, int maxlen, int *indexp);
48 
49 enum {
50  INPUT_PIN_ATTR_UNUSED, /* pin not connected */
51  INPUT_PIN_ATTR_INT, /* internal mic/line-in */
52  INPUT_PIN_ATTR_DOCK, /* docking mic/line-in */
53  INPUT_PIN_ATTR_NORMAL, /* mic/line-in jack */
54  INPUT_PIN_ATTR_FRONT, /* mic/line-in jack in front */
55  INPUT_PIN_ATTR_REAR, /* mic/line-in jack in rear */
56 };
57 
58 int snd_hda_get_input_pin_attr(unsigned int def_conf);
59 
60 struct auto_pin_cfg {
61  int line_outs;
62  /* sorted in the order of Front/Surr/CLFE/Side */
66  int hp_outs;
67  int line_out_type; /* AUTO_PIN_XXX_OUT */
71  int dig_outs;
75  int dig_out_type[2]; /* HDA_PCM_TYPE_XXX */
76  int dig_in_type; /* HDA_PCM_TYPE_XXX */
77 };
78 
79 /* bit-flags for snd_hda_parse_pin_def_config() behavior */
80 #define HDA_PINCFG_NO_HP_FIXUP (1 << 0) /* no HP-split */
81 #define HDA_PINCFG_NO_LO_FIXUP (1 << 1) /* don't take other outs as LO */
82 
84  struct auto_pin_cfg *cfg,
85  const hda_nid_t *ignore_nids,
86  unsigned int cond_flags);
87 
88 /* older function */
89 #define snd_hda_parse_pin_def_config(codec, cfg, ignore) \
90  snd_hda_parse_pin_defcfg(codec, cfg, ignore, 0)
91 
92 /*
93  */
94 
95 struct hda_gen_spec {
96  /* fix-up list */
97  int fixup_id;
98  const struct hda_fixup *fixup_list;
99  const char *fixup_name;
100 
101  /* additional init verbs */
102  struct snd_array verbs;
103 };
104 
105 
106 /*
107  * Fix-up pin default configurations and add default verbs
108  */
109 
110 struct hda_pintbl {
113 };
114 
116  const int id;
117  const char *name;
118 };
119 
120 struct hda_fixup {
121  int type;
122  bool chained;
123  int chain_id;
124  union {
125  const struct hda_pintbl *pins;
126  const struct hda_verb *verbs;
127  void (*func)(struct hda_codec *codec,
128  const struct hda_fixup *fix,
129  int action);
130  } v;
131 };
132 
133 /* fixup types */
134 enum {
139 };
140 
141 /* fixup action definitions */
142 enum {
147 };
148 
149 int snd_hda_gen_add_verbs(struct hda_gen_spec *spec,
150  const struct hda_verb *list);
153  const struct hda_pintbl *cfg);
154 void snd_hda_apply_fixup(struct hda_codec *codec, int action);
155 void snd_hda_pick_fixup(struct hda_codec *codec,
156  const struct hda_model_fixup *models,
157  const struct snd_pci_quirk *quirk,
158  const struct hda_fixup *fixlist);
159 
160 static inline void snd_hda_gen_init(struct hda_gen_spec *spec)
161 {
162  snd_array_init(&spec->verbs, sizeof(struct hda_verb *), 8);
163 }
164 
165 static inline void snd_hda_gen_free(struct hda_gen_spec *spec)
166 {
167  snd_array_free(&spec->verbs);
168 }
169 
170 #endif /* __SOUND_HDA_AUTO_PARSER_H */