if (((rt->input >> (4 + i * 4)) & 0xf) == 0)
                                extern_input = 0;
                }
-               if (extern_input)
-                       state->mode = MSP_MODE_EXTERN;
-               else
-                       state->mode = MSP_MODE_AM_DETECT;
+               state->mode = extern_input ? MSP_MODE_EXTERN : MSP_MODE_AM_DETECT;
+               state->rxsubchans = V4L2_TUNER_SUB_STEREO;
                msp_set_scart(client, sc_in, 0);
                msp_set_scart(client, sc1_out, 1);
                msp_set_scart(client, sc2_out, 2);
 
                        /* no carrier scan, just unmute */
                        v4l_dbg(1, msp_debug, client, "thread: no carrier scan\n");
                        state->scan_in_progress = 0;
-                       state->rxsubchans = V4L2_TUNER_SUB_STEREO;
                        msp_set_audio(client);
                        continue;
                }
                source = 1; /* stereo or A|B */
                matrix = 0x20;
                break;
-       case V4L2_TUNER_MODE_STEREO:
        case V4L2_TUNER_MODE_LANG1:
-       default:
                source = 3; /* stereo or A */
                matrix = 0x00;
                break;
+       case V4L2_TUNER_MODE_STEREO:
+       default:
+               source = 3; /* stereo or A */
+               matrix = 0x20;
+               break;
        }
 
        if (in == MSP_DSP_IN_TUNER)
        int is_stereo = status & 0x40;
        int oldrx = state->rxsubchans;
 
+       if (state->mode == MSP_MODE_EXTERN)
+               return 0;
+
        state->rxsubchans = 0;
        if (is_stereo)
                state->rxsubchans = V4L2_TUNER_SUB_STEREO;