1 
   2 
   3 
   4 
   5 
   6 
   7 
   8 #ifndef __SOUND_HDA_GENERIC_H
   9 #define __SOUND_HDA_GENERIC_H
  10 
  11 
  12 struct hda_multi_io {
  13         hda_nid_t pin;          
  14         hda_nid_t dac;          
  15         unsigned int ctl_in;    
  16 };
  17 
  18 
  19 
  20 
  21 
  22 
  23 
  24 
  25 
  26 
  27 
  28 
  29 
  30 #define MAX_NID_PATH_DEPTH      10
  31 
  32 enum {
  33         NID_PATH_VOL_CTL,
  34         NID_PATH_MUTE_CTL,
  35         NID_PATH_BOOST_CTL,
  36         NID_PATH_NUM_CTLS
  37 };
  38 
  39 struct nid_path {
  40         int depth;
  41         hda_nid_t path[MAX_NID_PATH_DEPTH];
  42         unsigned char idx[MAX_NID_PATH_DEPTH];
  43         unsigned char multi[MAX_NID_PATH_DEPTH];
  44         unsigned int ctls[NID_PATH_NUM_CTLS]; 
  45         bool active:1;          
  46         bool pin_enabled:1;     
  47         bool pin_fixed:1;       
  48         bool stream_enabled:1;  
  49 };
  50 
  51 
  52 
  53 #define MAX_AUTO_MIC_PINS       3
  54 
  55 struct automic_entry {
  56         hda_nid_t pin;          
  57         int idx;                
  58         unsigned int attr;      
  59 };
  60 
  61 
  62 enum { STREAM_MULTI_OUT, STREAM_INDEP_HP };
  63 
  64 
  65 enum {
  66         HDA_GEN_PCM_ACT_OPEN,
  67         HDA_GEN_PCM_ACT_PREPARE,
  68         HDA_GEN_PCM_ACT_CLEANUP,
  69         HDA_GEN_PCM_ACT_CLOSE,
  70 };
  71 
  72 
  73 struct badness_table {
  74         int no_primary_dac;     
  75         int no_dac;             
  76         int shared_primary;     
  77         int shared_surr;        
  78         int shared_clfe;        
  79         int shared_surr_main;   
  80 };
  81 
  82 extern const struct badness_table hda_main_out_badness;
  83 extern const struct badness_table hda_extra_out_badness;
  84 
  85 struct hda_micmute_hook {
  86         unsigned int led_mode;
  87         unsigned int capture;
  88         unsigned int led_value;
  89         void (*update)(struct hda_codec *codec);
  90         void (*old_hook)(struct hda_codec *codec,
  91                          struct snd_kcontrol *kcontrol,
  92                          struct snd_ctl_elem_value *ucontrol);
  93 };
  94 
  95 struct hda_gen_spec {
  96         char stream_name_analog[32];    
  97         const struct hda_pcm_stream *stream_analog_playback;
  98         const struct hda_pcm_stream *stream_analog_capture;
  99 
 100         char stream_name_alt_analog[32]; 
 101         const struct hda_pcm_stream *stream_analog_alt_playback;
 102         const struct hda_pcm_stream *stream_analog_alt_capture;
 103 
 104         char stream_name_digital[32];   
 105         const struct hda_pcm_stream *stream_digital_playback;
 106         const struct hda_pcm_stream *stream_digital_capture;
 107 
 108         
 109         unsigned int active_streams;
 110         struct mutex pcm_mutex;
 111 
 112         
 113         struct hda_multi_out multiout;  
 114 
 115 
 116 
 117         hda_nid_t alt_dac_nid;
 118         hda_nid_t slave_dig_outs[3];    
 119         int dig_out_type;
 120 
 121         
 122         unsigned int num_adc_nids;
 123         hda_nid_t adc_nids[AUTO_CFG_MAX_INS];
 124         hda_nid_t dig_in_nid;           
 125         hda_nid_t mixer_nid;            
 126         hda_nid_t mixer_merge_nid;      
 127         const char *input_labels[HDA_MAX_NUM_INPUTS];
 128         int input_label_idxs[HDA_MAX_NUM_INPUTS];
 129 
 130         
 131         hda_nid_t cur_adc;
 132         unsigned int cur_adc_stream_tag;
 133         unsigned int cur_adc_format;
 134 
 135         
 136         struct hda_input_mux input_mux;
 137         unsigned int cur_mux[3];
 138 
 139         
 140         
 141 
 142 
 143 
 144 
 145 
 146 
 147 
 148 
 149 
 150 
 151         int min_channel_count;          
 152         int ext_channel_count;          
 153         int const_channel_count;        
 154 
 155         
 156         struct hda_pcm *pcm_rec[3];     
 157 
 158         
 159         struct auto_pin_cfg autocfg;
 160         struct snd_array kctls;
 161         hda_nid_t private_dac_nids[AUTO_CFG_MAX_OUTS];
 162         hda_nid_t imux_pins[HDA_MAX_NUM_INPUTS];
 163         unsigned int dyn_adc_idx[HDA_MAX_NUM_INPUTS];
 164         
 165         hda_nid_t shared_mic_vref_pin;
 166         hda_nid_t hp_mic_pin;
 167         int hp_mic_mux_idx;
 168 
 169         
 170         int num_all_dacs;
 171         hda_nid_t all_dacs[16];
 172         int num_all_adcs;
 173         hda_nid_t all_adcs[AUTO_CFG_MAX_INS];
 174 
 175         
 176         struct snd_array paths;
 177 
 178         
 179         int out_paths[AUTO_CFG_MAX_OUTS];
 180         int hp_paths[AUTO_CFG_MAX_OUTS];
 181         int speaker_paths[AUTO_CFG_MAX_OUTS];
 182         int aamix_out_paths[3];
 183         int digout_paths[AUTO_CFG_MAX_OUTS];
 184         int input_paths[HDA_MAX_NUM_INPUTS][AUTO_CFG_MAX_INS];
 185         int loopback_paths[HDA_MAX_NUM_INPUTS];
 186         int loopback_merge_path;
 187         int digin_path;
 188 
 189         
 190         int am_num_entries;
 191         struct automic_entry am_entry[MAX_AUTO_MIC_PINS];
 192 
 193         
 194         
 195         unsigned int hp_jack_present:1;
 196         unsigned int line_jack_present:1;
 197         unsigned int speaker_muted:1; 
 198         unsigned int line_out_muted:1; 
 199 
 200         
 201         unsigned int auto_mic:1;
 202         unsigned int automute_speaker:1; 
 203         unsigned int automute_lo:1; 
 204 
 205         
 206         unsigned int detect_hp:1;       
 207         unsigned int detect_lo:1;       
 208         unsigned int automute_speaker_possible:1; 
 209         unsigned int automute_lo_possible:1;      
 210 
 211         
 212         unsigned int master_mute:1;     
 213         unsigned int keep_vref_in_automute:1; 
 214         unsigned int line_in_auto_switch:1; 
 215         unsigned int auto_mute_via_amp:1; 
 216 
 217         
 218         unsigned int suppress_auto_mute:1; 
 219         unsigned int suppress_auto_mic:1; 
 220 
 221         
 222         unsigned int need_dac_fix:1; 
 223         unsigned int hp_mic:1; 
 224         unsigned int suppress_hp_mic_detect:1; 
 225         unsigned int no_primary_hp:1; 
 226         unsigned int no_multi_io:1; 
 227         unsigned int multi_cap_vol:1; 
 228         unsigned int inv_dmic_split:1; 
 229         unsigned int own_eapd_ctl:1; 
 230         unsigned int keep_eapd_on:1; 
 231         unsigned int vmaster_mute_enum:1; 
 232         unsigned int indep_hp:1; 
 233         unsigned int prefer_hp_amp:1; 
 234         unsigned int add_stereo_mix_input:2; 
 235         unsigned int add_jack_modes:1; 
 236         unsigned int power_down_unused:1; 
 237         unsigned int dac_min_mute:1; 
 238         unsigned int suppress_vmaster:1; 
 239 
 240         
 241         unsigned int no_analog:1; 
 242         unsigned int dyn_adc_switch:1; 
 243         unsigned int indep_hp_enabled:1; 
 244         unsigned int have_aamix_ctl:1;
 245         unsigned int hp_mic_jack_modes:1;
 246         unsigned int skip_verbs:1; 
 247 
 248         
 249         u64 mute_bits;
 250 
 251         
 252         u64 out_vol_mask;
 253 
 254         
 255         const struct badness_table *main_out_badness;
 256         const struct badness_table *extra_out_badness;
 257 
 258         
 259         const hda_nid_t *preferred_dacs;
 260 
 261         
 262         bool aamix_mode;
 263 
 264         
 265         hda_nid_t beep_nid;
 266 
 267         
 268         hda_nid_t vmaster_nid;
 269         unsigned int vmaster_tlv[4];
 270         struct hda_vmaster_mute_hook vmaster_mute;
 271 
 272         struct hda_loopback_check loopback;
 273         struct snd_array loopback_list;
 274 
 275         
 276         int multi_ios;
 277         struct hda_multi_io multi_io[4];
 278 
 279         
 280         void (*init_hook)(struct hda_codec *codec);
 281         void (*automute_hook)(struct hda_codec *codec);
 282         void (*cap_sync_hook)(struct hda_codec *codec,
 283                               struct snd_kcontrol *kcontrol,
 284                               struct snd_ctl_elem_value *ucontrol);
 285 
 286         
 287         struct hda_micmute_hook micmute_led;
 288 
 289         
 290         void (*pcm_playback_hook)(struct hda_pcm_stream *hinfo,
 291                                   struct hda_codec *codec,
 292                                   struct snd_pcm_substream *substream,
 293                                   int action);
 294         void (*pcm_capture_hook)(struct hda_pcm_stream *hinfo,
 295                                  struct hda_codec *codec,
 296                                  struct snd_pcm_substream *substream,
 297                                  int action);
 298 
 299         
 300         void (*hp_automute_hook)(struct hda_codec *codec,
 301                                  struct hda_jack_callback *cb);
 302         void (*line_automute_hook)(struct hda_codec *codec,
 303                                    struct hda_jack_callback *cb);
 304         void (*mic_autoswitch_hook)(struct hda_codec *codec,
 305                                     struct hda_jack_callback *cb);
 306 };
 307 
 308 
 309 enum {
 310         HDA_HINT_STEREO_MIX_DISABLE,    
 311         HDA_HINT_STEREO_MIX_ENABLE,     
 312         HDA_HINT_STEREO_MIX_AUTO,       
 313 };
 314 
 315 int snd_hda_gen_spec_init(struct hda_gen_spec *spec);
 316 
 317 int snd_hda_gen_init(struct hda_codec *codec);
 318 void snd_hda_gen_free(struct hda_codec *codec);
 319 
 320 int snd_hda_get_path_idx(struct hda_codec *codec, struct nid_path *path);
 321 struct nid_path *snd_hda_get_path_from_idx(struct hda_codec *codec, int idx);
 322 struct nid_path *
 323 snd_hda_add_new_path(struct hda_codec *codec, hda_nid_t from_nid,
 324                      hda_nid_t to_nid, int anchor_nid);
 325 void snd_hda_activate_path(struct hda_codec *codec, struct nid_path *path,
 326                            bool enable, bool add_aamix);
 327 
 328 struct snd_kcontrol_new *
 329 snd_hda_gen_add_kctl(struct hda_gen_spec *spec, const char *name,
 330                      const struct snd_kcontrol_new *temp);
 331 
 332 int snd_hda_gen_parse_auto_config(struct hda_codec *codec,
 333                                   struct auto_pin_cfg *cfg);
 334 int snd_hda_gen_build_controls(struct hda_codec *codec);
 335 int snd_hda_gen_build_pcms(struct hda_codec *codec);
 336 void snd_hda_gen_reboot_notify(struct hda_codec *codec);
 337 
 338 
 339 void snd_hda_gen_hp_automute(struct hda_codec *codec,
 340                              struct hda_jack_callback *jack);
 341 void snd_hda_gen_line_automute(struct hda_codec *codec,
 342                                struct hda_jack_callback *jack);
 343 void snd_hda_gen_mic_autoswitch(struct hda_codec *codec,
 344                                 struct hda_jack_callback *jack);
 345 void snd_hda_gen_update_outputs(struct hda_codec *codec);
 346 
 347 #ifdef CONFIG_PM
 348 int snd_hda_gen_check_power_status(struct hda_codec *codec, hda_nid_t nid);
 349 #endif
 350 unsigned int snd_hda_gen_path_power_filter(struct hda_codec *codec,
 351                                            hda_nid_t nid,
 352                                            unsigned int power_state);
 353 void snd_hda_gen_stream_pm(struct hda_codec *codec, hda_nid_t nid, bool on);
 354 int snd_hda_gen_fix_pin_power(struct hda_codec *codec, hda_nid_t pin);
 355 
 356 int snd_hda_gen_add_micmute_led(struct hda_codec *codec,
 357                                 void (*hook)(struct hda_codec *));
 358 void snd_hda_gen_fixup_micmute_led(struct hda_codec *codec,
 359                                    const struct hda_fixup *fix, int action);
 360 
 361 #endif