static int build_output(struct hda_codec *codec) { struct cs_spec *spec = codec->spec; struct auto_pin_cfg *cfg = &spec->autocfg; int i, err; for (i = 0; i < cfg->line_outs; i++) { err = add_output(codec, get_dac(codec, cfg->line_out_pins[i]), i, cfg->line_outs, cfg->line_out_type); if (err < 0) return err; } for (i = 0; i < cfg->hp_outs; i++) { err = add_output(codec, get_dac(codec, cfg->hp_pins[i]), i, cfg->hp_outs, AUTO_PIN_HP_OUT); if (err < 0) return err; } for (i = 0; i < cfg->speaker_outs; i++) { err = add_output(codec, get_dac(codec, cfg->speaker_pins[i]), i, cfg->speaker_outs, AUTO_PIN_SPEAKER_OUT); if (err < 0) return err; } return 0; }
static int parse_output(struct hda_codec *codec) { struct cs_spec *spec = codec->spec; struct auto_pin_cfg *cfg = &spec->autocfg; int i, extra_nids; hda_nid_t dac; for (i = 0; i < cfg->line_outs; i++) { dac = get_dac(codec, cfg->line_out_pins[i]); if (!dac) break; spec->dac_nid[i] = dac; } spec->multiout.num_dacs = i; spec->multiout.dac_nids = spec->dac_nid; spec->multiout.max_channels = i * 2; /* add HP and speakers */ extra_nids = 0; for (i = 0; i < cfg->hp_outs; i++) { dac = get_dac(codec, cfg->hp_pins[i]); if (!dac) break; if (!i) spec->multiout.hp_nid = dac; else spec->multiout.extra_out_nid[extra_nids++] = dac; } for (i = 0; i < cfg->speaker_outs; i++) { dac = get_dac(codec, cfg->speaker_pins[i]); if (!dac) break; spec->multiout.extra_out_nid[extra_nids++] = dac; } if (cfg->line_out_type == AUTO_PIN_SPEAKER_OUT) { cfg->speaker_outs = cfg->line_outs; memcpy(cfg->speaker_pins, cfg->line_out_pins, sizeof(cfg->speaker_pins)); cfg->line_outs = 0; memset(cfg->line_out_pins, 0, sizeof(cfg->line_out_pins)); } return 0; }