/* table entry for multi-io paths */ struct hda_multi_io {
hda_nid_t pin; /* multi-io widget pin NID */
hda_nid_t dac; /* DAC to be connected */ unsignedint ctl_in; /* cached input-pin control value */
};
/* Widget connection path * * For output, stored in the order of DAC -> ... -> pin, * for input, pin -> ... -> ADC. * * idx[i] contains the source index number to select on of the widget path[i]; * e.g. idx[1] is the index of the DAC (path[0]) selected by path[1] widget * multi[] indicates whether it's a selector widget with multi-connectors * (i.e. the connection selection is mandatory) * vol_ctl and mute_ctl contains the NIDs for the assigned mixers
*/
/* DAC assignment badness table */ struct badness_table { int no_primary_dac; /* no primary DAC */ int no_dac; /* no secondary DACs */ int shared_primary; /* primary DAC is shared with main output */ int shared_surr; /* secondary DAC shared with main or primary */ int shared_clfe; /* third DAC shared with main or primary */ int shared_surr_main; /* secondary DAC sahred with main/DAC0 */
};
/* playback */ struct hda_multi_out multiout; /* playback set-up * max_channels, dacs must be set * dig_out_nid and hp_nid are optional
*/
hda_nid_t alt_dac_nid;
hda_nid_t follower_dig_outs[3]; /* optional - for auto-parsing */ int dig_out_type;
/* channel model */ /* min_channel_count contains the minimum channel count for primary * outputs. When multi_ios is set, the channels can be configured * between min_channel_count and (min_channel_count + multi_ios * 2). * * ext_channel_count contains the current channel count of the primary * out. This varies in the range above. * * Meanwhile, const_channel_count is the channel count for all outputs * including headphone and speakers. It's a constant value, and the * PCM is set up as max(ext_channel_count, const_channel_count).
*/ int min_channel_count; /* min. channel count for primary out */ int ext_channel_count; /* current channel count for primary */ int const_channel_count; /* channel count for all */
/* PCM information */ struct hda_pcm *pcm_rec[3]; /* used in build_pcms() */
/* DAC/ADC lists */ int num_all_dacs;
hda_nid_t all_dacs[16]; int num_all_adcs;
hda_nid_t all_adcs[AUTO_CFG_MAX_INS];
/* path list */ struct snd_array paths;
/* path indices */ int out_paths[AUTO_CFG_MAX_OUTS]; int hp_paths[AUTO_CFG_MAX_OUTS]; int speaker_paths[AUTO_CFG_MAX_OUTS]; int aamix_out_paths[3]; int digout_paths[AUTO_CFG_MAX_OUTS]; int input_paths[HDA_MAX_NUM_INPUTS][AUTO_CFG_MAX_INS]; int loopback_paths[HDA_MAX_NUM_INPUTS]; int loopback_merge_path; int digin_path;
/* auto-mic stuff */ int am_num_entries; struct automic_entry am_entry[MAX_AUTO_MIC_PINS];
/* for pin sensing */ /* current status; set in hda_generic.c */ unsignedint hp_jack_present:1; unsignedint line_jack_present:1; unsignedint speaker_muted:1; /* current status of speaker mute */ unsignedint line_out_muted:1; /* current status of LO mute */
/* internal states of automute / autoswitch behavior */ unsignedint auto_mic:1; unsignedint automute_speaker:1; /* automute speaker outputs */ unsignedint automute_lo:1; /* automute LO outputs */
/* capabilities detected by parser */ unsignedint detect_hp:1; /* Headphone detection enabled */ unsignedint detect_lo:1; /* Line-out detection enabled */ unsignedint automute_speaker_possible:1; /* there are speakers and either LO or HP */ unsignedint automute_lo_possible:1; /* there are line outs and HP */
/* additional parameters set by codec drivers */ unsignedint master_mute:1; /* master mute over all */ unsignedint keep_vref_in_automute:1; /* Don't clear VREF in automute */ unsignedint line_in_auto_switch:1; /* allow line-in auto switch */ unsignedint auto_mute_via_amp:1; /* auto-mute via amp instead of pinctl */
/* parser behavior flags; set before snd_hda_gen_parse_auto_config() */ unsignedint suppress_auto_mute:1; /* suppress input jack auto mute */ unsignedint suppress_auto_mic:1; /* suppress input jack auto switch */
/* other parse behavior flags */ unsignedint need_dac_fix:1; /* need to limit DACs for multi channels */ unsignedint hp_mic:1; /* Allow HP as a mic-in */ unsignedint suppress_hp_mic_detect:1; /* Don't detect HP/mic */ unsignedint no_primary_hp:1; /* Don't prefer HP pins to speaker pins */ unsignedint no_multi_io:1; /* Don't try multi I/O config */ unsignedint multi_cap_vol:1; /* allow multiple capture xxx volumes */ unsignedint inv_dmic_split:1; /* inverted dmic w/a for conexant */ unsignedint own_eapd_ctl:1; /* set EAPD by own function */ unsignedint keep_eapd_on:1; /* don't turn off EAPD automatically */ unsignedint vmaster_mute_led:1; /* add SPK-LED flag to vmaster mute switch */ unsignedint mic_mute_led:1; /* add MIC-LED flag to capture mute switch */ unsignedint indep_hp:1; /* independent HP supported */ unsignedint prefer_hp_amp:1; /* enable HP amp for speaker if any */ unsignedint add_stereo_mix_input:2; /* add aamix as a capture src */ unsignedint add_jack_modes:1; /* add i/o jack mode enum ctls */ unsignedint power_down_unused:1; /* power down unused widgets */ unsignedint dac_min_mute:1; /* minimal = mute for DACs */ unsignedint suppress_vmaster:1; /* don't create vmaster kctls */
/* other internal flags */ unsignedint no_analog:1; /* digital I/O only */ unsignedint dyn_adc_switch:1; /* switch ADCs (for ALC275) */ unsignedint indep_hp_enabled:1; /* independent HP enabled */ unsignedint have_aamix_ctl:1; unsignedint hp_mic_jack_modes:1; unsignedint skip_verbs:1; /* don't apply verbs at snd_hda_gen_init() */
int snd_hda_gen_parse_auto_config(struct hda_codec *codec, struct auto_pin_cfg *cfg); int snd_hda_gen_build_controls(struct hda_codec *codec); int snd_hda_gen_build_pcms(struct hda_codec *codec);
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.