static int parse_input(struct hda_codec *codec) { struct cs_spec *spec = codec->spec; struct auto_pin_cfg *cfg = &spec->autocfg; int i; for (i = 0; i < cfg->num_inputs; i++) { hda_nid_t pin = cfg->inputs[i].pin; spec->input_idx[spec->num_inputs] = i; spec->capsrc_idx[i] = spec->num_inputs++; spec->cur_input = i; spec->adc_nid[i] = get_adc(codec, pin, &spec->adc_idx[i]); } if (!spec->num_inputs) return 0; /* check whether the automatic mic switch is available */ if (spec->num_inputs == 2 && cfg->inputs[0].type == AUTO_PIN_MIC && cfg->inputs[1].type == AUTO_PIN_MIC) { if (is_ext_mic(codec, cfg->inputs[0].pin)) { if (!is_ext_mic(codec, cfg->inputs[1].pin)) { spec->mic_detect = 1; spec->automic_idx = 0; } } else { if (is_ext_mic(codec, cfg->inputs[1].pin)) { spec->mic_detect = 1; spec->automic_idx = 1; } } } return 0; }
static int parse_input(struct hda_codec *codec) { struct cs_spec *spec = codec->spec; struct auto_pin_cfg *cfg = &spec->autocfg; int i; for (i = 0; i < AUTO_PIN_LAST; i++) { hda_nid_t pin = cfg->input_pins[i]; if (!pin) continue; spec->input_idx[spec->num_inputs] = i; spec->capsrc_idx[i] = spec->num_inputs++; spec->cur_input = i; spec->adc_nid[i] = get_adc(codec, pin, &spec->adc_idx[i]); } if (!spec->num_inputs) return 0; /* check whether the automatic mic switch is available */ if (spec->num_inputs == 2 && spec->adc_nid[AUTO_PIN_MIC] && spec->adc_nid[AUTO_PIN_FRONT_MIC]) { if (is_ext_mic(codec, cfg->input_pins[AUTO_PIN_FRONT_MIC])) { if (!is_ext_mic(codec, cfg->input_pins[AUTO_PIN_MIC])) { spec->mic_detect = 1; spec->automic_idx = AUTO_PIN_FRONT_MIC; } } else { if (is_ext_mic(codec, cfg->input_pins[AUTO_PIN_MIC])) { spec->mic_detect = 1; spec->automic_idx = AUTO_PIN_MIC; } } } return 0; }