if (!spec->mux_nids[adc_idx])
                return -EINVAL;
+       /* switch to D0 beofre change index */
+       if (snd_hda_codec_read(codec, spec->mux_nids[adc_idx], 0,
+                              AC_VERB_GET_POWER_STATE, 0x00) != AC_PWRST_D0)
+               snd_hda_codec_write(codec, spec->mux_nids[adc_idx], 0,
+                                   AC_VERB_SET_POWER_STATE, AC_PWRST_D0);
+       /* update jack power state */
+       set_jack_power_state(codec);
+
        return snd_hda_input_mux_put(codec, spec->input_mux, ucontrol,
                                     spec->mux_nids[adc_idx],
                                     &spec->cur_mux[adc_idx]);