/* extra amp-initialization sequence types */
 enum {
+       ALC_INIT_UNDEFINED,
        ALC_INIT_NONE,
        ALC_INIT_DEFAULT,
        ALC_INIT_GPIO1,
         * 7~6 : Reserved
        */
        tmp = (ass & 0x38) >> 3;        /* external Amp control */
-       switch (tmp) {
-       case 1:
-               spec->init_amp = ALC_INIT_GPIO1;
-               break;
-       case 3:
-               spec->init_amp = ALC_INIT_GPIO2;
-               break;
-       case 7:
-               spec->init_amp = ALC_INIT_GPIO3;
-               break;
-       case 5:
-       default:
-               spec->init_amp = ALC_INIT_DEFAULT;
-               break;
+       if (spec->init_amp == ALC_INIT_UNDEFINED) {
+               switch (tmp) {
+               case 1:
+                       spec->init_amp = ALC_INIT_GPIO1;
+                       break;
+               case 3:
+                       spec->init_amp = ALC_INIT_GPIO2;
+                       break;
+               case 7:
+                       spec->init_amp = ALC_INIT_GPIO3;
+                       break;
+               case 5:
+               default:
+                       spec->init_amp = ALC_INIT_DEFAULT;
+                       break;
+               }
        }
 
        /* is laptop or Desktop and enable the function "Mute internal speaker
        switch (action) {
        case HDA_FIXUP_ACT_PRE_PROBE:
                snd_hda_apply_pincfgs(codec, pincfgs);
-               break;
-       case HDA_FIXUP_ACT_PROBE:
                spec->init_amp = ALC_INIT_NONE;
                break;
        }
                                   const struct hda_fixup *fix, int action)
 {
        struct alc_spec *spec = codec->spec;
-       if (action == HDA_FIXUP_ACT_PROBE)
+       if (action == HDA_FIXUP_ACT_PRE_PROBE)
                spec->init_amp = ALC_INIT_NONE;
 }
 
        struct alc_spec *spec = codec->spec;
 
        if (action == HDA_FIXUP_ACT_PRE_PROBE) {
+               spec->init_amp = ALC_INIT_DEFAULT;
                if (alc_register_micmute_input_device(codec) != 0)
                        return;
 
                return;
 
        switch (action) {
-       case HDA_FIXUP_ACT_PROBE:
-               spec->init_amp = ALC_INIT_DEFAULT;
-               break;
        case HDA_FIXUP_ACT_FREE:
                input_unregister_device(spec->kb_dev);
                spec->kb_dev = NULL;
        struct alc_spec *spec = codec->spec;
 
        if (action == HDA_FIXUP_ACT_PRE_PROBE) {
+               spec->init_amp = ALC_INIT_DEFAULT;
                if (alc_register_micmute_input_device(codec) != 0)
                        return;
 
                return;
 
        switch (action) {
-       case HDA_FIXUP_ACT_PROBE:
-               spec->init_amp = ALC_INIT_DEFAULT;
-               break;
        case HDA_FIXUP_ACT_FREE:
                input_unregister_device(spec->kb_dev);
                spec->kb_dev = NULL;
 
        switch (action) {
        case HDA_FIXUP_ACT_PRE_PROBE:
+               spec->init_amp = ALC_INIT_DEFAULT;
                snd_hda_add_verbs(codec, gpio2_verbs);
                snd_hda_apply_pincfgs(codec, dock_pins);
                spec->gen.auto_mute_via_amp = 1;