diff --git a/drivers/media/dvb-frontends/mn88472_c.c b/drivers/media/dvb-frontends/mn88472_c.c
index b5bd326..0f463e5 100644
--- a/drivers/media/dvb-frontends/mn88472_c.c
+++ b/drivers/media/dvb-frontends/mn88472_c.c
@@ -150,7 +150,7 @@ static int mn88472_set_frontend_c(struct dvb_frontend *fe)
 		ret = -EINVAL;
 		goto err;
 	}
-
+/*
 	ret = mn88472_wregs(s, 0x1c08, "\x1d", 1);
 	if (ret)
 		goto err;
@@ -207,6 +207,53 @@ static int mn88472_set_frontend_c(struct dvb_frontend *fe)
 	ret = mn88472_wregs(s, 0x1cf8, "\x9f", 1);
 	if (ret)
 		goto err;
+*/
+
+ret = mn88472_wregs(s, 0x1c08, "\x1d", 1); //006957
+ret = mn88472_wregs(s, 0x18d9, "\xe3", 1); //006960
+ret = mn88472_wregs(s, 0x1c0b, "\x30", 1); //007120
+ret = mn88472_wregs(s, 0x1c05, "\x3e", 1); //007122
+ret = mn88472_wregs(s, 0x1c08, "\x1d", 1); //042765
+ret = mn88472_wregs(s, 0x18d9, "\xe3", 1); //042768
+//ret = mn88472_wregs(s, 0x1c83, "\x01", 1); //042776
+//ret = mn88472_wregs(s, 0x1c83, "\x01", 1); //042794
+//ret = mn88472_wregs(s, 0x1c83, "\x01", 1); //047591
+ret = mn88472_wregs(s, 0x1c83, "\x01", 1); //048072
+ret = mn88472_wregs(s, 0x1c05, "\x00", 1); //048083
+ret = mn88472_wregs(s, 0x1c0b, "\x00", 1); //048086
+ret = mn88472_wregs(s, 0x1c0c, "\x00", 1); //048088
+ret = mn88472_wregs(s, 0x1cff, "\x00", 1); //048090
+ret = mn88472_wregs(s, 0x1c00, "\x66", 1); //048093
+ret = mn88472_wregs(s, 0x1c01, "\x00", 1); //048095
+ret = mn88472_wregs(s, 0x1c02, "\x01", 1); //048098
+ret = mn88472_wregs(s, 0x1c03, "\x04", 1); //048100
+ret = mn88472_wregs(s, 0x1c04, "\x00", 1); //048102
+ret = mn88472_wregs(s, 0x1c10, "\x3f", 1); //048104
+ret = mn88472_wregs(s, 0x1c11, "\x50", 1); //048107
+ret = mn88472_wregs(s, 0x1c12, "\x2c", 1); //048109
+ret = mn88472_wregs(s, 0x1c13, "\x8f", 1); //048111
+ret = mn88472_wregs(s, 0x1c14, "\x80", 1); //048115
+ret = mn88472_wregs(s, 0x1c15, "\x00", 1); //048117
+ret = mn88472_wregs(s, 0x1c16, "\x08", 1); //048120
+ret = mn88472_wregs(s, 0x1c17, "\xee", 1); //048122
+ret = mn88472_wregs(s, 0x1c18, "\x08", 1); //048124
+ret = mn88472_wregs(s, 0x1c19, "\xee", 1); //048127
+ret = mn88472_wregs(s, 0x1846, "\x00", 1); //048129
+ret = mn88472_wregs(s, 0x18ae, "\x00", 1); //048131
+ret = mn88472_wregs(s, 0x18b0, "\x0b", 1); //048134
+ret = mn88472_wregs(s, 0x18b4, "\x00", 1); //048136
+ret = mn88472_wregs(s, 0x18cd, "\x17", 1); //048138
+ret = mn88472_wregs(s, 0x18d4, "\x09", 1); //048141
+ret = mn88472_wregs(s, 0x18d6, "\x48", 1); //048143
+ret = mn88472_wregs(s, 0x1a00, "\xb0", 1); //048150
+ret = mn88472_wregs(s, 0x1cf8, "\x9f", 1); //048152
+ret = mn88472_wregs(s, 0x1c83, "\x01", 1); //049212
+//ret = mn88472_wregs(s, 0x1c83, "\x01", 1); //049238
+//ret = mn88472_wregs(s, 0x1c83, "\x01", 1); //050229
+//ret = mn88472_wregs(s, 0x1c83, "\x01", 1); //050251
+//ret = mn88472_wregs(s, 0x1c0b, "\x30", 1); //051218
+//ret = mn88472_wregs(s, 0x1c05, "\x3e", 1); //051220
+
 
 	s->delivery_system = c->delivery_system;
 
@@ -253,7 +300,7 @@ static int mn88472_init_c(struct dvb_frontend *fe)
 
 	/* set cold state by default */
 	s->warm = false;
-
+#if 0
 	/* power on */
 	ret = mn88472_wreg(s, 0x1c05, 0x00);
 	if (ret)
@@ -262,6 +309,15 @@ static int mn88472_init_c(struct dvb_frontend *fe)
 	ret = mn88472_wregs(s, 0x1c0b, "\x00\x00", 2);
 	if (ret)
 		goto err;
+#endif
+ret = mn88472_wregs(s, 0x1cfb, "\x03", 1); //002379
+ret = mn88472_wregs(s, 0x1afc, "\x00", 1); //002382
+ret = mn88472_wregs(s, 0x1afd, "\x00", 1); //002384
+ret = mn88472_wregs(s, 0x1afe, "\x00", 1); //002386
+ret = mn88472_wregs(s, 0x1aff, "\x02", 1); //002389
+ret = mn88472_wregs(s, 0x18f0, "\x20", 1); //002391
+
+
 
 	/* request the firmware, this will block and timeout */
 	ret = request_firmware(&fw, fw_file, s->i2c->dev.parent);
diff --git a/drivers/media/dvb-frontends/rtl2832.c b/drivers/media/dvb-frontends/rtl2832.c
index 7e081f0..6d996f2 100644
--- a/drivers/media/dvb-frontends/rtl2832.c
+++ b/drivers/media/dvb-frontends/rtl2832.c
@@ -604,18 +604,40 @@ static int rtl2832_set_frontend(struct dvb_frontend *fe)
 	/* PIP mode */
 	if (c->frequency == 0) {
 		dev_dbg(&priv->i2c->dev, "%s: setting PIP mode\n", __func__);
+#if 0
+
 		ret = rtl2832_wr_regs(priv, 0x0c, 1, "\x5f\xff", 2);
 		if (ret)
 			goto err;
 
-		ret = rtl2832_wr_demod_reg(priv, DVBT_PIP_ON, 0x1);
+		// [3] PIP
+		// [5] err pass
+		// [6] mode_PID
+		// [7] enable_PID
+		// 3, 6
+/*
++ret = rtl2832_wr_regs(priv, 0x21, 0, "\xe0", 1); //010936 1110 0000 PIP mode off
++ret = rtl2832_wr_regs(priv, 0x21, 0, "\xe8", 1); //016921 1110 1000 PIP mode on
++ret = rtl2832_wr_regs(priv, 0x21, 0, "\xa8", 1); //017287 1010 1000 mode_PID? pass matched pid
+*/
+
+//		ret = rtl2832_wr_demod_reg(priv, DVBT_PIP_ON, 0x1);
 		if (ret)
 			goto err;
 
+		ret = rtl2832_wr_reg(priv, 0x21, 0, 0xa8);
+
 		ret = rtl2832_wr_reg(priv, 0xbc, 0, 0x18);
 		if (ret)
 			goto err;
 
+ret = rtl2832_wr_regs(priv, 0x61, 0, "\x60", 1); //016927
+ret = rtl2832_wr_regs(priv, 0x62, 0, "\x00", 1); //016938
+ret = rtl2832_wr_regs(priv, 0x63, 0, "\x00", 1); //016946
+ret = rtl2832_wr_regs(priv, 0x64, 0, "\x00", 1); //016954
+ret = rtl2832_wr_regs(priv, 0x65, 0, "\x00", 1); //016961
+
+
 		ret = rtl2832_wr_reg(priv, 0x22, 0, 0x01);
 		if (ret)
 			goto err;
@@ -628,9 +650,331 @@ static int rtl2832_set_frontend(struct dvb_frontend *fe)
 		if (ret)
 			goto err;
 
+//		ret = rtl2832_wr_regs(priv, 0x26, 0, "\x1f\xff", 2);
+/*
+	ret = rtl2832_wr_regs(priv, 0x22, 0, "\x01\x00", 2); //017293
+	ret = rtl2832_wr_regs(priv, 0x24, 0, "\x00\x00", 2); //017295
+
+	ret = rtl2832_wr_regs(priv, 0x26, 0, "\x01\x92", 2);
+	ret = rtl2832_wr_regs(priv, 0x28, 0, "\x01\x91", 2);
+*/
+//		ret = rtl2832_wr_regs(priv, 0x26, 0, "\x00\x44", 2);
+
 		ret = rtl2832_wr_regs(priv, 0x92, 1, "\x7f\xf7\xff", 3);
 		if (ret)
 			goto err;
+/*
+0x0000 0x0026: pmt_pid 0x0106 Telenor -- BBC Knowledge (running, scrambled)
+0x0000 0x00f4: pmt_pid 0x0190 Welho -- Nelonen HD (running, scrambled)
+0x0000 0x0020: pmt_pid 0x05a0 MTV OY -- MTV Sport 2 (running, scrambled)
+0x0000 0x0063: pmt_pid 0x0042 DNA -- Infokanava (running)
+0x0000 0x0008: pmt_pid 0x0103 (null) -- Liv (???, scrambled)
+*/
+/*
+ret = rtl2832_wr_regs(priv, 0x61, 0, "\x80", 1); // enable PID filter
+ret = rtl2832_wr_regs(priv, 0x62, 0, "\xff", 1); // enable filters 0-7
+ret = rtl2832_wr_regs(priv, 0x63, 0, "\x00", 1); // disable filters 8-15
+ret = rtl2832_wr_regs(priv, 0x64, 0, "\x00", 1); // disable filters 16-23
+ret = rtl2832_wr_regs(priv, 0x65, 0, "\x00", 1); // disable filters 24-31
+ret = rtl2832_wr_regs(priv, 0x66, 0, "\x00\x00", 2); // filter 0
+ret = rtl2832_wr_regs(priv, 0x68, 0, "\x00\x01", 2); // filter 1
+ret = rtl2832_wr_regs(priv, 0x6a, 0, "\x00\x11", 2); // filter 2
+//ret = rtl2832_wr_regs(priv, 0x6c, 0, "\x01\x06", 2); // filter 3
+//ret = rtl2832_wr_regs(priv, 0x6e, 0, "\x01\x90", 2); // filter 4
+//ret = rtl2832_wr_regs(priv, 0x70, 0, "\x05\xa0", 2); // filter 5
+ret = rtl2832_wr_regs(priv, 0x72, 0, "\x00\x42", 2); // filter 6
+//ret = rtl2832_wr_regs(priv, 0x74, 0, "\x01\x03", 2); // filter 7
+*/
+#endif
+
+#if 0
+ret = rtl2832_wr_regs(priv, 0x01, 1, "\x18", 1); //000247
+ret = rtl2832_wr_regs(priv, 0x01, 1, "\x10", 1); //000267
+ret = rtl2832_wr_regs(priv, 0x01, 1, "\x18", 1); //000278
+ret = rtl2832_wr_regs(priv, 0x01, 1, "\x10", 1); //000297
+ret = rtl2832_wr_regs(priv, 0x01, 1, "\x18", 1); //000308
+ret = rtl2832_wr_regs(priv, 0x01, 1, "\x10", 1); //000328
+ret = rtl2832_wr_regs(priv, 0x01, 1, "\x18", 1); //000339
+ret = rtl2832_wr_regs(priv, 0x01, 1, "\x10", 1); //000358
+ret = rtl2832_wr_regs(priv, 0x01, 1, "\x18", 1); //000369
+ret = rtl2832_wr_regs(priv, 0x01, 1, "\x10", 1); //000388
+ret = rtl2832_wr_regs(priv, 0x01, 1, "\x18", 1); //000399
+ret = rtl2832_wr_regs(priv, 0x01, 1, "\x10", 1); //000418
+ret = rtl2832_wr_regs(priv, 0x01, 1, "\x18", 1); //000429
+ret = rtl2832_wr_regs(priv, 0x01, 1, "\x10", 1); //000448
+ret = rtl2832_wr_regs(priv, 0x01, 1, "\x18", 1); //000459
+ret = rtl2832_wr_regs(priv, 0x01, 1, "\x10", 1); //000478
+ret = rtl2832_wr_regs(priv, 0x01, 1, "\x18", 1); //000489
+ret = rtl2832_wr_regs(priv, 0x01, 1, "\x10", 1); //000502
+ret = rtl2832_wr_regs(priv, 0x08, 0, "\x8d", 1); //010768
+ret = rtl2832_wr_regs(priv, 0x08, 0, "\xcd", 1); //010779
+ret = rtl2832_wr_regs(priv, 0x8f, 1, "\x28\x00", 2); //010790
+ret = rtl2832_wr_regs(priv, 0x95, 1, "\x10", 1); //010801
+ret = rtl2832_wr_regs(priv, 0x96, 1, "\x20", 1); //010812
+ret = rtl2832_wr_regs(priv, 0x97, 1, "\x20", 1); //010823
+ret = rtl2832_wr_regs(priv, 0x98, 1, "\x40", 1); //010834
+ret = rtl2832_wr_regs(priv, 0x99, 1, "\x22", 1); //010845
+ret = rtl2832_wr_regs(priv, 0x9a, 1, "\x32", 1); //010856
+ret = rtl2832_wr_regs(priv, 0x9b, 1, "\x37", 1); //010867
+ret = rtl2832_wr_regs(priv, 0x9c, 1, "\x39", 1); //010877
+ret = rtl2832_wr_regs(priv, 0xa6, 1, "\x4d", 1); //010888
+ret = rtl2832_wr_regs(priv, 0x61, 1, "\x24", 1); //010899
+ret = rtl2832_wr_regs(priv, 0x09, 0, "\x2a", 1); //010910
+ret = rtl2832_wr_regs(priv, 0x0a, 0, "\x06", 1); //010921
+ret = rtl2832_wr_regs(priv, 0x21, 0, "\xe0", 1); //010936
+ret = rtl2832_wr_regs(priv, 0x7d, 1, "\x50", 1); //010950
+ret = rtl2832_wr_regs(priv, 0x7d, 1, "\x00", 1); //010960
+ret = rtl2832_wr_regs(priv, 0x92, 2, "\x04", 1); //010971
+ret = rtl2832_wr_regs(priv, 0x93, 2, "\xb0", 1); //010982
+ret = rtl2832_wr_regs(priv, 0xa7, 2, "\x78", 1); //010993
+ret = rtl2832_wr_regs(priv, 0xa9, 2, "\x28", 1); //011005
+ret = rtl2832_wr_regs(priv, 0xaa, 2, "\x59", 1); //011017
+ret = rtl2832_wr_regs(priv, 0xab, 2, "\x83", 1); //011028
+ret = rtl2832_wr_regs(priv, 0xac, 2, "\xd4", 1); //011039
+ret = rtl2832_wr_regs(priv, 0xb0, 2, "\x65", 1); //011050
+ret = rtl2832_wr_regs(priv, 0xb1, 2, "\x43", 1); //011061
+ret = rtl2832_wr_regs(priv, 0x64, 1, "\x23", 1); //011071
+ret = rtl2832_wr_regs(priv, 0x64, 1, "\x43", 1); //011082
+ret = rtl2832_wr_regs(priv, 0x65, 1, "\x07", 1); //011093
+ret = rtl2832_wr_regs(priv, 0xad, 2, "\x48\xa2", 2); //011104
+ret = rtl2832_wr_regs(priv, 0x0d, 0, "\x83", 1); //011115
+ret = rtl2832_wr_regs(priv, 0x7c, 1, "\x01", 1); //011126
+ret = rtl2832_wr_regs(priv, 0x7d, 1, "\x09", 1); //011137
+ret = rtl2832_wr_regs(priv, 0x7d, 1, "\x99", 1); //011148
+ret = rtl2832_wr_regs(priv, 0x06, 0, "\x00", 1); //011159
+ret = rtl2832_wr_regs(priv, 0x07, 0, "\x3c", 1); //011170
+ret = rtl2832_wr_regs(priv, 0x6f, 1, "\x1c", 1); //011181
+ret = rtl2832_wr_regs(priv, 0x70, 1, "\x3e", 1); //011192
+ret = rtl2832_wr_regs(priv, 0x72, 1, "\x06", 1); //011204
+ret = rtl2832_wr_regs(priv, 0x75, 1, "\x25", 1); //011215
+ret = rtl2832_wr_regs(priv, 0x76, 1, "\x40", 1); //011226
+ret = rtl2832_wr_regs(priv, 0x15, 1, "\x07", 1); //011238
+ret = rtl2832_wr_regs(priv, 0x12, 1, "\x39", 1); //011249
+ret = rtl2832_wr_regs(priv, 0x02, 1, "\x40", 1); //011261
+ret = rtl2832_wr_regs(priv, 0x03, 1, "\x40", 1); //011272
+ret = rtl2832_wr_regs(priv, 0xc7, 1, "\x2c", 1); //011283
+ret = rtl2832_wr_regs(priv, 0x04, 1, "\xd0", 1); //011295
+ret = rtl2832_wr_regs(priv, 0x05, 1, "\xbe", 1); //011309
+ret = rtl2832_wr_regs(priv, 0xc8, 1, "\x18", 1); //011324
+ret = rtl2832_wr_regs(priv, 0x06, 1, "\x35", 1); //011335
+ret = rtl2832_wr_regs(priv, 0xc9, 1, "\x21", 1); //011346
+ret = rtl2832_wr_regs(priv, 0xca, 1, "\x21", 1); //011358
+ret = rtl2832_wr_regs(priv, 0xcb, 1, "\x00", 1); //011369
+ret = rtl2832_wr_regs(priv, 0x07, 1, "\x40", 1); //011382
+ret = rtl2832_wr_regs(priv, 0xcd, 1, "\x10", 1); //011393
+ret = rtl2832_wr_regs(priv, 0xce, 1, "\x10", 1); //011405
+ret = rtl2832_wr_regs(priv, 0x08, 1, "\x80", 1); //011416
+ret = rtl2832_wr_regs(priv, 0x09, 1, "\x7f", 1); //011428
+ret = rtl2832_wr_regs(priv, 0x0a, 1, "\x80", 1); //011439
+ret = rtl2832_wr_regs(priv, 0x0b, 1, "\x7f", 1); //011450
+ret = rtl2832_wr_regs(priv, 0x0e, 0, "\xfc", 1); //011462
+ret = rtl2832_wr_regs(priv, 0x0e, 0, "\xfc", 1); //011473
+ret = rtl2832_wr_regs(priv, 0x11, 0, "\xe9\xf4", 2); //011485
+ret = rtl2832_wr_regs(priv, 0x01, 1, "\x14", 1); //011496
+ret = rtl2832_wr_regs(priv, 0x01, 1, "\x10", 1); //011507
+ret = rtl2832_wr_regs(priv, 0x01, 1, "\x18", 1); //011535
+ret = rtl2832_wr_regs(priv, 0x01, 1, "\x10", 1); //016339
+ret = rtl2832_wr_regs(priv, 0x01, 1, "\x18", 1); //016367
+ret = rtl2832_wr_regs(priv, 0x01, 1, "\x10", 1); //016819
+ret = rtl2832_wr_regs(priv, 0x0c, 1, "\x5f\xff", 2); //016916
+ret = rtl2832_wr_regs(priv, 0x21, 0, "\xe8", 1); //016921
+ret = rtl2832_wr_regs(priv, 0x61, 0, "\x60", 1); //016927
+ret = rtl2832_wr_regs(priv, 0xbc, 0, "\x18", 1); //016933
+ret = rtl2832_wr_regs(priv, 0x62, 0, "\x00", 1); //016938
+ret = rtl2832_wr_regs(priv, 0x63, 0, "\x00", 1); //016946
+ret = rtl2832_wr_regs(priv, 0x64, 0, "\x00", 1); //016954
+ret = rtl2832_wr_regs(priv, 0x65, 0, "\x00", 1); //016961
+ret = rtl2832_wr_regs(priv, 0x22, 0, "\x01", 1); //016967
+ret = rtl2832_wr_regs(priv, 0x26, 0, "\x1f", 1); //016972
+ret = rtl2832_wr_regs(priv, 0x27, 0, "\xff", 1); //016978
+ret = rtl2832_wr_regs(priv, 0x92, 1, "\x7f", 1); //016984
+ret = rtl2832_wr_regs(priv, 0x93, 1, "\xf7", 1); //016989
+ret = rtl2832_wr_regs(priv, 0x94, 1, "\xff", 1); //016995
+ret = rtl2832_wr_regs(priv, 0x01, 1, "\x14", 1); //017006
+ret = rtl2832_wr_regs(priv, 0x01, 1, "\x10", 1); //017019
+ret = rtl2832_wr_regs(priv, 0x21, 0, "\xa8", 1); //017287
+ret = rtl2832_wr_regs(priv, 0x22, 0, "\xff\x01", 2); //017293
+ret = rtl2832_wr_regs(priv, 0x24, 0, "\x00\x00", 2); //017295
+ret = rtl2832_wr_regs(priv, 0x26, 0, "\x00\x00", 2); //017301
+ret = rtl2832_wr_regs(priv, 0x28, 0, "\x00\x01", 2); //017304
+ret = rtl2832_wr_regs(priv, 0x2a, 0, "\x00\x10", 2); //017306
+ret = rtl2832_wr_regs(priv, 0x2c, 0, "\x00\x11", 2); //017309
+ret = rtl2832_wr_regs(priv, 0x2e, 0, "\x00\x12", 2); //017311
+ret = rtl2832_wr_regs(priv, 0x30, 0, "\x00\x14", 2); //017313
+ret = rtl2832_wr_regs(priv, 0x32, 0, "\x00\xdd", 2); //017316
+ret = rtl2832_wr_regs(priv, 0x34, 0, "\x01\xa5", 2); //017320
+ret = rtl2832_wr_regs(priv, 0x36, 0, "\x03\x35", 2); //017323
+ret = rtl2832_wr_regs(priv, 0x01, 1, "\x18", 1); //039828
+ret = rtl2832_wr_regs(priv, 0x01, 1, "\x10", 1); //040217
+ret = rtl2832_wr_regs(priv, 0x0c, 1, "\x5f\xff", 2); //040299
+ret = rtl2832_wr_regs(priv, 0x21, 0, "\xe8", 1); //040304
+ret = rtl2832_wr_regs(priv, 0x61, 0, "\x60", 1); //040309
+ret = rtl2832_wr_regs(priv, 0xbc, 0, "\x18", 1); //040315
+ret = rtl2832_wr_regs(priv, 0x62, 0, "\x00", 1); //040320
+ret = rtl2832_wr_regs(priv, 0x63, 0, "\x00", 1); //040326
+ret = rtl2832_wr_regs(priv, 0x64, 0, "\x00", 1); //040331
+ret = rtl2832_wr_regs(priv, 0x65, 0, "\x00", 1); //040337
+ret = rtl2832_wr_regs(priv, 0x22, 0, "\x01", 1); //040342
+ret = rtl2832_wr_regs(priv, 0x26, 0, "\x1f", 1); //040348
+ret = rtl2832_wr_regs(priv, 0x27, 0, "\xff", 1); //040353
+ret = rtl2832_wr_regs(priv, 0x92, 1, "\x7f", 1); //040359
+ret = rtl2832_wr_regs(priv, 0x93, 1, "\xf7", 1); //040364
+ret = rtl2832_wr_regs(priv, 0x94, 1, "\xff", 1); //040369
+ret = rtl2832_wr_regs(priv, 0x01, 1, "\x14", 1); //040381
+ret = rtl2832_wr_regs(priv, 0x01, 1, "\x10", 1); //040392
+ret = rtl2832_wr_regs(priv, 0x21, 0, "\xa8", 1); //040614
+ret = rtl2832_wr_regs(priv, 0x22, 0, "\xff\x01", 2); //040620
+ret = rtl2832_wr_regs(priv, 0x24, 0, "\x00\x00", 2); //040622
+ret = rtl2832_wr_regs(priv, 0x26, 0, "\x00\x00", 2); //040628
+ret = rtl2832_wr_regs(priv, 0x28, 0, "\x00\x01", 2); //040630
+ret = rtl2832_wr_regs(priv, 0x2a, 0, "\x00\x10", 2); //040634
+//ret = rtl2832_wr_regs(priv, 0x2c, 0, "\x00\x11", 2); //040637
+ret = rtl2832_wr_regs(priv, 0x2c, 0, "\x00\x44", 2); //040637
+ret = rtl2832_wr_regs(priv, 0x2e, 0, "\x00\x12", 2); //040639
+ret = rtl2832_wr_regs(priv, 0x30, 0, "\x00\x14", 2); //040641
+ret = rtl2832_wr_regs(priv, 0x32, 0, "\x00\xdd", 2); //040644
+ret = rtl2832_wr_regs(priv, 0x34, 0, "\x01\xa5", 2); //040646
+ret = rtl2832_wr_regs(priv, 0x36, 0, "\x03\x35", 2); //040649
+#endif
+ret = rtl2832_wr_regs(priv, 0x01, 1, "\x18", 1); //000271
+ret = rtl2832_wr_regs(priv, 0x01, 1, "\x10", 1); //000290
+ret = rtl2832_wr_regs(priv, 0x01, 1, "\x18", 1); //000301
+ret = rtl2832_wr_regs(priv, 0x01, 1, "\x10", 1); //000321
+ret = rtl2832_wr_regs(priv, 0x01, 1, "\x18", 1); //000332
+ret = rtl2832_wr_regs(priv, 0x01, 1, "\x10", 1); //000351
+ret = rtl2832_wr_regs(priv, 0x01, 1, "\x18", 1); //000362
+ret = rtl2832_wr_regs(priv, 0x01, 1, "\x10", 1); //000381
+ret = rtl2832_wr_regs(priv, 0x01, 1, "\x18", 1); //000392
+ret = rtl2832_wr_regs(priv, 0x01, 1, "\x10", 1); //000411
+ret = rtl2832_wr_regs(priv, 0x01, 1, "\x18", 1); //000422
+ret = rtl2832_wr_regs(priv, 0x01, 1, "\x10", 1); //000455
+ret = rtl2832_wr_regs(priv, 0x01, 1, "\x18", 1); //000466
+ret = rtl2832_wr_regs(priv, 0x01, 1, "\x10", 1); //000485
+ret = rtl2832_wr_regs(priv, 0x01, 1, "\x18", 1); //000496
+ret = rtl2832_wr_regs(priv, 0x01, 1, "\x10", 1); //000515
+ret = rtl2832_wr_regs(priv, 0x01, 1, "\x18", 1); //000526
+ret = rtl2832_wr_regs(priv, 0x01, 1, "\x10", 1); //000540
+ret = rtl2832_wr_regs(priv, 0x08, 0, "\x8d", 1); //019299
+ret = rtl2832_wr_regs(priv, 0x08, 0, "\xcd", 1); //019310
+ret = rtl2832_wr_regs(priv, 0x8f, 1, "\x28\x00", 2); //019323
+ret = rtl2832_wr_regs(priv, 0x95, 1, "\x10", 1); //019335
+ret = rtl2832_wr_regs(priv, 0x96, 1, "\x20", 1); //019346
+ret = rtl2832_wr_regs(priv, 0x97, 1, "\x20", 1); //019357
+ret = rtl2832_wr_regs(priv, 0x98, 1, "\x40", 1); //019369
+ret = rtl2832_wr_regs(priv, 0x99, 1, "\x22", 1); //019380
+ret = rtl2832_wr_regs(priv, 0x9a, 1, "\x32", 1); //019393
+ret = rtl2832_wr_regs(priv, 0x9b, 1, "\x37", 1); //019404
+ret = rtl2832_wr_regs(priv, 0x9c, 1, "\x39", 1); //019416
+ret = rtl2832_wr_regs(priv, 0xa6, 1, "\x4d", 1); //019427
+ret = rtl2832_wr_regs(priv, 0x61, 1, "\x24", 1); //019438
+ret = rtl2832_wr_regs(priv, 0x09, 0, "\x2a", 1); //019450
+ret = rtl2832_wr_regs(priv, 0x0a, 0, "\x06", 1); //019461
+ret = rtl2832_wr_regs(priv, 0x21, 0, "\xe0", 1); //019474
+ret = rtl2832_wr_regs(priv, 0x7d, 1, "\x50", 1); //019485
+ret = rtl2832_wr_regs(priv, 0x7d, 1, "\x00", 1); //019497
+ret = rtl2832_wr_regs(priv, 0x92, 2, "\x04", 1); //019508
+ret = rtl2832_wr_regs(priv, 0x93, 2, "\xb0", 1); //019519
+ret = rtl2832_wr_regs(priv, 0xa7, 2, "\x78", 1); //019531
+ret = rtl2832_wr_regs(priv, 0xa9, 2, "\x28", 1); //019543
+ret = rtl2832_wr_regs(priv, 0xaa, 2, "\x59", 1); //019555
+ret = rtl2832_wr_regs(priv, 0xab, 2, "\x83", 1); //019566
+ret = rtl2832_wr_regs(priv, 0xac, 2, "\xd4", 1); //019577
+ret = rtl2832_wr_regs(priv, 0xb0, 2, "\x65", 1); //019589
+ret = rtl2832_wr_regs(priv, 0xb1, 2, "\x43", 1); //019600
+ret = rtl2832_wr_regs(priv, 0x64, 1, "\x23", 1); //019612
+ret = rtl2832_wr_regs(priv, 0x64, 1, "\x43", 1); //019625
+ret = rtl2832_wr_regs(priv, 0x65, 1, "\x07", 1); //019637
+ret = rtl2832_wr_regs(priv, 0xad, 2, "\x48\xa2", 2); //019648
+ret = rtl2832_wr_regs(priv, 0x0d, 0, "\x83", 1); //019660
+ret = rtl2832_wr_regs(priv, 0x7c, 1, "\x01", 1); //019671
+ret = rtl2832_wr_regs(priv, 0x7d, 1, "\x09", 1); //019682
+ret = rtl2832_wr_regs(priv, 0x7d, 1, "\x99", 1); //019695
+ret = rtl2832_wr_regs(priv, 0x06, 0, "\x00", 1); //019706
+ret = rtl2832_wr_regs(priv, 0x07, 0, "\x3c", 1); //019718
+ret = rtl2832_wr_regs(priv, 0x6f, 1, "\x1c", 1); //019729
+ret = rtl2832_wr_regs(priv, 0x70, 1, "\x3e", 1); //019740
+ret = rtl2832_wr_regs(priv, 0x72, 1, "\x06", 1); //019752
+ret = rtl2832_wr_regs(priv, 0x75, 1, "\x25", 1); //019763
+ret = rtl2832_wr_regs(priv, 0x76, 1, "\x40", 1); //019776
+ret = rtl2832_wr_regs(priv, 0x15, 1, "\x07", 1); //019787
+ret = rtl2832_wr_regs(priv, 0x12, 1, "\x39", 1); //019799
+ret = rtl2832_wr_regs(priv, 0x02, 1, "\x40", 1); //019810
+ret = rtl2832_wr_regs(priv, 0x03, 1, "\x40", 1); //019821
+ret = rtl2832_wr_regs(priv, 0xc7, 1, "\x2c", 1); //019833
+ret = rtl2832_wr_regs(priv, 0x04, 1, "\xd0", 1); //019845
+ret = rtl2832_wr_regs(priv, 0x05, 1, "\xbe", 1); //019857
+ret = rtl2832_wr_regs(priv, 0xc8, 1, "\x18", 1); //019868
+ret = rtl2832_wr_regs(priv, 0x06, 1, "\x35", 1); //019880
+ret = rtl2832_wr_regs(priv, 0xc9, 1, "\x21", 1); //019891
+ret = rtl2832_wr_regs(priv, 0xca, 1, "\x21", 1); //019903
+ret = rtl2832_wr_regs(priv, 0xcb, 1, "\x00", 1); //019914
+ret = rtl2832_wr_regs(priv, 0x07, 1, "\x40", 1); //019927
+ret = rtl2832_wr_regs(priv, 0xcd, 1, "\x10", 1); //019938
+ret = rtl2832_wr_regs(priv, 0xce, 1, "\x10", 1); //019949
+ret = rtl2832_wr_regs(priv, 0x08, 1, "\x80", 1); //019961
+ret = rtl2832_wr_regs(priv, 0x09, 1, "\x7f", 1); //019972
+ret = rtl2832_wr_regs(priv, 0x0a, 1, "\x80", 1); //019984
+ret = rtl2832_wr_regs(priv, 0x0b, 1, "\x7f", 1); //019996
+ret = rtl2832_wr_regs(priv, 0x0e, 0, "\xfc", 1); //020008
+ret = rtl2832_wr_regs(priv, 0x0e, 0, "\xfc", 1); //020019
+ret = rtl2832_wr_regs(priv, 0x11, 0, "\xe9\xf4", 2); //020031
+ret = rtl2832_wr_regs(priv, 0x01, 1, "\x14", 1); //020042
+ret = rtl2832_wr_regs(priv, 0x01, 1, "\x10", 1); //020054
+ret = rtl2832_wr_regs(priv, 0x01, 1, "\x18", 1); //020118
+ret = rtl2832_wr_regs(priv, 0x01, 1, "\x10", 1); //024881
+ret = rtl2832_wr_regs(priv, 0x01, 1, "\x18", 1); //024909
+ret = rtl2832_wr_regs(priv, 0x01, 1, "\x10", 1); //025361
+ret = rtl2832_wr_regs(priv, 0x0c, 1, "\x5f\xff", 2); //025463
+ret = rtl2832_wr_regs(priv, 0x21, 0, "\xe8", 1); //025469
+ret = rtl2832_wr_regs(priv, 0x61, 0, "\x60", 1); //025475
+ret = rtl2832_wr_regs(priv, 0xbc, 0, "\x18", 1); //025482
+ret = rtl2832_wr_regs(priv, 0x62, 0, "\x00", 1); //025487
+ret = rtl2832_wr_regs(priv, 0x63, 0, "\x00", 1); //025493
+ret = rtl2832_wr_regs(priv, 0x64, 0, "\x00", 1); //025498
+ret = rtl2832_wr_regs(priv, 0x65, 0, "\x00", 1); //025504
+ret = rtl2832_wr_regs(priv, 0x22, 0, "\x01", 1); //025510
+ret = rtl2832_wr_regs(priv, 0x26, 0, "\x1f", 1); //025515
+ret = rtl2832_wr_regs(priv, 0x27, 0, "\xff", 1); //025521
+ret = rtl2832_wr_regs(priv, 0x92, 1, "\x7f", 1); //025527
+ret = rtl2832_wr_regs(priv, 0x93, 1, "\xf7", 1); //025532
+ret = rtl2832_wr_regs(priv, 0x94, 1, "\xff", 1); //025538
+ret = rtl2832_wr_regs(priv, 0x01, 1, "\x14", 1); //025549
+ret = rtl2832_wr_regs(priv, 0x01, 1, "\x10", 1); //025562
+ret = rtl2832_wr_regs(priv, 0x61, 0, "\x80", 1); //026002
+ret = rtl2832_wr_regs(priv, 0x62, 0, "\xff\xff", 2); //026014
+ret = rtl2832_wr_regs(priv, 0x64, 0, "\xff\x3f", 2); //026017
+ret = rtl2832_wr_regs(priv, 0x66, 0, "\x00\x00", 2); //026025
+ret = rtl2832_wr_regs(priv, 0x68, 0, "\x00\x01", 2); //026027
+ret = rtl2832_wr_regs(priv, 0x6a, 0, "\x00\x12", 2); //026030
+ret = rtl2832_wr_regs(priv, 0x6c, 0, "\x00\x42", 2); //026032
+ret = rtl2832_wr_regs(priv, 0x6e, 0, "\x00\x44", 2); //026035
+ret = rtl2832_wr_regs(priv, 0x70, 0, "\x00\x44", 2); //026038
+ret = rtl2832_wr_regs(priv, 0x72, 0, "\x00\x00", 2); //026041
+ret = rtl2832_wr_regs(priv, 0x74, 0, "\x70\xf7", 2); //026043
+ret = rtl2832_wr_regs(priv, 0x76, 0, "\xad\xfb", 2); //026048
+ret = rtl2832_wr_regs(priv, 0x78, 0, "\xd4\x9f", 2); //026053
+ret = rtl2832_wr_regs(priv, 0x7a, 0, "\x40\xe5", 2); //026056
+ret = rtl2832_wr_regs(priv, 0x7c, 0, "\x00\x02", 2); //026058
+ret = rtl2832_wr_regs(priv, 0x7e, 0, "\x00\x02", 2); //026062
+ret = rtl2832_wr_regs(priv, 0x80, 0, "\x00\x08", 2); //026064
+ret = rtl2832_wr_regs(priv, 0x82, 0, "\x72\x49", 2); //026068
+ret = rtl2832_wr_regs(priv, 0x84, 0, "\x6b\x80", 2); //026070
+ret = rtl2832_wr_regs(priv, 0x86, 0, "\x10\xa0", 2); //026073
+ret = rtl2832_wr_regs(priv, 0x88, 0, "\x00\x02", 2); //026076
+ret = rtl2832_wr_regs(priv, 0x8a, 0, "\x61\x56", 2); //026079
+ret = rtl2832_wr_regs(priv, 0x8c, 0, "\x2d\x70", 2); //026081
+ret = rtl2832_wr_regs(priv, 0x8e, 0, "\x2d\x70", 2); //026085
+ret = rtl2832_wr_regs(priv, 0x90, 0, "\xb6\x98", 2); //026087
+ret = rtl2832_wr_regs(priv, 0x92, 0, "\xa3\xf8", 2); //026091
+ret = rtl2832_wr_regs(priv, 0x94, 0, "\x21\xc8", 2); //026093
+ret = rtl2832_wr_regs(priv, 0x96, 0, "\x00\x01", 2); //026096
+ret = rtl2832_wr_regs(priv, 0x98, 0, "\x00\x04", 2); //026099
+ret = rtl2832_wr_regs(priv, 0x9a, 0, "\x43\x54", 2); //026102
+ret = rtl2832_wr_regs(priv, 0x9c, 0, "\x35\xd8", 2); //026104
+ret = rtl2832_wr_regs(priv, 0x9e, 0, "\x11\x70", 2); //026108
+ret = rtl2832_wr_regs(priv, 0xa0, 0, "\x00\x00", 2); //026110
+
+	return 0;
 
 		goto exit_soft_reset;
 	} else {
@@ -715,6 +1059,21 @@ exit_soft_reset:
 	if (ret)
 		goto err;
 
+/*
+ret = rtl2832_wr_regs(priv, 0x21, 0, "\xa8", 1); //040614
+ret = rtl2832_wr_regs(priv, 0x22, 0, "\xff\x01", 2); //040620
+ret = rtl2832_wr_regs(priv, 0x24, 0, "\x00\x00", 2); //040622
+ret = rtl2832_wr_regs(priv, 0x26, 0, "\x00\x00", 2); //040628
+ret = rtl2832_wr_regs(priv, 0x28, 0, "\x00\x01", 2); //040630
+ret = rtl2832_wr_regs(priv, 0x2a, 0, "\x00\x10", 2); //040634
+ret = rtl2832_wr_regs(priv, 0x2c, 0, "\x00\x11", 2); //040637
+ret = rtl2832_wr_regs(priv, 0x2e, 0, "\x00\x12", 2); //040639
+ret = rtl2832_wr_regs(priv, 0x30, 0, "\x00\x14", 2); //040641
+ret = rtl2832_wr_regs(priv, 0x32, 0, "\x00\xdd", 2); //040644
+ret = rtl2832_wr_regs(priv, 0x34, 0, "\x01\xa5", 2); //040646
+ret = rtl2832_wr_regs(priv, 0x36, 0, "\x00\x44", 2); //040649
+*/
+
 	return ret;
 err:
 	dev_dbg(&priv->i2c->dev, "%s: failed=%d\n", __func__, ret);
@@ -940,6 +1299,80 @@ static void rtl2832_release(struct dvb_frontend *fe)
 	kfree(priv);
 }
 
+int rtl2832_pid_filter_ctrl(struct dvb_frontend *fe, int onoff)
+{
+	struct rtl2832_priv *priv = fe->demodulator_priv;
+	int ret;
+	u8 u8tmp;
+	dev_dbg(&priv->i2c->dev, "%s: onoff=%d\n", __func__, onoff);
+
+	if (onoff)
+		u8tmp = 0xa8;
+	else
+		u8tmp = 0x28;
+/*
+	ret = rtl2832_wr_reg(priv, 0x21, 0, u8tmp);
+	if (ret)
+		goto err;
+*/
+	return 0;
+err:
+	dev_dbg(&priv->i2c->dev, "%s: failed=%d\n", __func__, ret);
+	return ret;
+}
+EXPORT_SYMBOL(rtl2832_pid_filter_ctrl);
+
+int rtl2832_pid_filter(struct dvb_frontend *fe, u8 index, u16 pid, int onoff)
+{
+	struct rtl2832_priv *priv = fe->demodulator_priv;
+	int ret = 0;
+	u8 buf[4];
+
+	dev_dbg(&priv->i2c->dev, "%s: index=%d pid=%04x onoff=%d\n",
+			__func__, index, pid, onoff);
+
+	return 0;
+
+	if (pid > 0x1fff)
+		return 0;
+
+	if (onoff)
+		set_bit(index, &priv->filters);
+	else
+		clear_bit(index, &priv->filters);
+
+	buf[0] = (pid >> 8) & 0xff;
+	buf[1] = (pid >> 0) & 0xff;
+	ret = rtl2832_wr_regs(priv, 0x26 + 2 * index, 0, buf, 2);
+	if (ret)
+		goto err;
+
+	buf[0] = (priv->filters >> 0) & 0xff;
+	buf[1] = (priv->filters >> 8) & 0xff;
+	buf[2] = (priv->filters >> 16) & 0xff;
+	buf[3] = (priv->filters >> 24) & 0xff;
+	ret = rtl2832_wr_regs(priv, 0x22, 0, buf, 4);
+	if (ret)
+		goto err;
+
+#if 0
+	/* soft reset */
+	ret = rtl2832_wr_demod_reg(priv, DVBT_SOFT_RST, 0x1);
+	if (ret)
+		goto err;
+
+	ret = rtl2832_wr_demod_reg(priv, DVBT_SOFT_RST, 0x0);
+	if (ret)
+		goto err;
+#endif
+
+	return 0;
+err:
+	dev_dbg(&priv->i2c->dev, "%s: failed=%d\n", __func__, ret);
+	return ret;
+}
+EXPORT_SYMBOL(rtl2832_pid_filter);
+
 static int rtl2832_select(struct i2c_adapter *adap, void *mux_priv, u32 chan_id)
 {
 	struct rtl2832_priv *priv = mux_priv;
@@ -971,9 +1404,9 @@ static int rtl2832_select(struct i2c_adapter *adap, void *mux_priv, u32 chan_id)
 	buf[0] = 0x01;
 	if (chan_id == 1)
 		buf[1] = 0x18; /* open */
-	else
-		buf[1] = 0x10; /* close */
-
+//	else
+//		buf[1] = 0x10; /* close */
+buf[1] = 0x18; /* open */
 	ret = __i2c_transfer(adap, msg, 1);
 	if (ret != 1)
 		goto err;
diff --git a/drivers/media/dvb-frontends/rtl2832.h b/drivers/media/dvb-frontends/rtl2832.h
index 99ee677..3087ef1 100644
--- a/drivers/media/dvb-frontends/rtl2832.h
+++ b/drivers/media/dvb-frontends/rtl2832.h
@@ -67,6 +67,17 @@ extern struct i2c_adapter *rtl2832_get_i2c_adapter(
 	struct dvb_frontend *fe
 );
 
+extern int rtl2832_pid_filter_ctrl(
+	struct dvb_frontend *fe,
+	int onoff
+);
+extern int rtl2832_pid_filter(
+	struct dvb_frontend *fe,
+	u8 index,
+	u16 pid,
+	int onoff
+);
+
 #else
 
 static inline struct dvb_frontend *rtl2832_attach(
diff --git a/drivers/media/dvb-frontends/rtl2832_priv.h b/drivers/media/dvb-frontends/rtl2832_priv.h
index b98395b..dc1deeb 100644
--- a/drivers/media/dvb-frontends/rtl2832_priv.h
+++ b/drivers/media/dvb-frontends/rtl2832_priv.h
@@ -37,6 +37,8 @@ struct rtl2832_priv {
 
 	u8 tuner;
 	u8 page; /* active register page */
+
+	unsigned long filters;
 };
 
 struct rtl2832_reg_entry {
diff --git a/drivers/media/usb/dvb-usb-v2/rtl28xxu.c b/drivers/media/usb/dvb-usb-v2/rtl28xxu.c
index 35962d9..59213a5 100644
--- a/drivers/media/usb/dvb-usb-v2/rtl28xxu.c
+++ b/drivers/media/usb/dvb-usb-v2/rtl28xxu.c
@@ -1396,6 +1396,24 @@ static int rtl2832u_get_rc_config(struct dvb_usb_device *d,
 #define rtl2832u_get_rc_config NULL
 #endif
 
+static int rtl2832u_pid_filter_ctrl(struct dvb_usb_adapter *adap, int onoff)
+{
+	struct dvb_usb_device *d = adap_to_d(adap);
+	dev_dbg(&d->udev->dev, "%s: onoff=%d\n", __func__, onoff);
+
+	return rtl2832_pid_filter_ctrl(adap->fe[1], onoff);
+}
+
+static int rtl2832u_pid_filter(struct dvb_usb_adapter *adap, int index, u16 pid,
+		int onoff)
+{
+	struct dvb_usb_device *d = adap_to_d(adap);
+	dev_dbg(&d->udev->dev, "%s: index=%d pid=%04x onoff=%d\n",
+			__func__, index, pid, onoff);
+
+	return rtl2832_pid_filter(adap->fe[1], index, pid, onoff);
+}
+
 static const struct dvb_usb_device_properties rtl2831u_props = {
 	.driver_name = KBUILD_MODNAME,
 	.owner = THIS_MODULE,
@@ -1430,11 +1448,19 @@ static const struct dvb_usb_device_properties rtl2832u_props = {
 	.frontend_attach = rtl2832u_frontend_attach,
 	.tuner_attach = rtl2832u_tuner_attach,
 	.init = rtl28xxu_init,
-	.get_rc_config = rtl2832u_get_rc_config,
+//	.get_rc_config = rtl2832u_get_rc_config,
 
 	.num_adapters = 1,
 	.adapter = {
 		{
+			.caps = DVB_USB_ADAP_HAS_PID_FILTER |
+				DVB_USB_ADAP_PID_FILTER_CAN_BE_TURNED_OFF |
+				DVB_USB_ADAP_NEED_PID_FILTERING,
+
+			.pid_filter_count = 32,
+			.pid_filter_ctrl = rtl2832u_pid_filter_ctrl,
+			.pid_filter = rtl2832u_pid_filter,
+
 			.stream = DVB_USB_STREAM_BULK(0x81, 6, 8 * 512),
 		},
 	},
