static void alc268_acer_setup(struct hda_codec *codec) { struct alc_spec *spec = codec->spec; spec->autocfg.hp_pins[0] = 0x14; spec->autocfg.speaker_pins[0] = 0x15; spec->automute = 1; spec->automute_mode = ALC_AUTOMUTE_AMP; } #define alc268_acer_master_sw_get alc262_hp_master_sw_get #define alc268_acer_master_sw_put alc262_hp_master_sw_put static const struct snd_kcontrol_new alc268_acer_aspire_one_mixer[] = { /* output mixer control */ HDA_BIND_VOL("Master Playback Volume", &alc268_acer_bind_master_vol), { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = "Master Playback Switch", .subdevice = HDA_SUBDEV_NID_FLAG | 0x15, .info = snd_ctl_boolean_mono_info, .get = alc268_acer_master_sw_get, .put = alc268_acer_master_sw_put, }, HDA_CODEC_VOLUME("Mic Boost Capture Volume", 0x18, 0, HDA_INPUT), { } }; static const struct snd_kcontrol_new alc268_acer_mixer[] = { /* output mixer control */ HDA_BIND_VOL("Master Playback Volume", &alc268_acer_bind_master_vol),
} 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 const struct snd_kcontrol_new cs_capture_ctls[] = { HDA_BIND_SW("Capture Switch", 0), HDA_BIND_VOL("Capture Volume", 0), }; static int change_cur_input(struct hda_codec *codec, unsigned int idx, int force) { struct cs_spec *spec = codec->spec; if (spec->cur_input == idx && !force) return 0; if (spec->cur_adc && spec->cur_adc != spec->adc_nid[idx]) { /* stream is running, let's swap the current ADC */ __snd_hda_codec_cleanup_stream(codec, spec->cur_adc, 1); spec->cur_adc = spec->adc_nid[idx]; snd_hda_codec_setup_stream(codec, spec->cur_adc, spec->cur_adc_stream_tag, 0,