diff --git a/drivers/media/dvb/frontends/dib3000mc.c b/drivers/media/dvb/frontends/dib3000mc.c
index 0b4b8220b69d..6d61237a450d 100644
--- a/drivers/media/dvb/frontends/dib3000mc.c
+++ b/drivers/media/dvb/frontends/dib3000mc.c
@@ -169,7 +169,8 @@ static int dib3000mc_set_output_mode(struct dib3000mc_state *state, int mode)
 	u16 outreg = 0;
 	u16 outmode = 0;
 	u16 elecout = 1;
-	u16 smo_reg = (0 << 6) | (0 << 5) | (0 << 4) | (0 << 3) | (1 << 1) | 0 ; //smo_mode = 1
+	u16 smo_reg = (0 << 6) | (0 << 5) | (0 << 3) | (1 << 1) | 0 |
+		(dib3000mc_read_word(state, 206) & 0x0010); /* keep the pid_parse bit */
 
 	dprintk("-I-  Setting output mode for demod %p to %d\n",
 			&state->demod, mode);
@@ -197,7 +198,7 @@ static int dib3000mc_set_output_mode(struct dib3000mc_state *state, int mode)
 			P_smo_mode           [2;2:1] = 11
 			P_smo_ovf_prot       [1;0:0] = 0
 			*/
-			smo_reg = (0 << 6) | (0 << 5) | (0 << 4) | (0 << 3) |(3 << 1) | 0;
+			smo_reg = (0 << 6) | (0 << 5) | (0 << 3) |(3 << 1) | 0;
 			fifo_threshold = 512;
 			outmode = 5;
 			break;
@@ -212,7 +213,7 @@ static int dib3000mc_set_output_mode(struct dib3000mc_state *state, int mode)
 	}
 
 	if ((state->cfg->output_mpeg2_in_188_bytes))
-		smo_reg |= (1 << 5) ; //P_smo_rs_discard     [1;5:5] = 1
+		smo_reg |= (1 << 5); // P_smo_rs_discard     [1;5:5] = 1
 
 	outreg = dib3000mc_read_word(state, 244) & 0x07FF;
 	outreg |= (outmode << 11);