diff --git a/drivers/media/dvb-frontends/rtl2832.c b/drivers/media/dvb-frontends/rtl2832.c
index dd52099..d9700e7 100644
--- a/drivers/media/dvb-frontends/rtl2832.c
+++ b/drivers/media/dvb-frontends/rtl2832.c
@@ -487,6 +487,7 @@ static int rtl2832_init(struct dvb_frontend *fe)
 		init = rtl2832_tuner_init_e4000;
 		break;
 	case RTL2832_TUNER_R820T:
+	case RTL2832_TUNER_R828D:
 		len = ARRAY_SIZE(rtl2832_tuner_init_r820t);
 		init = rtl2832_tuner_init_r820t;
 		break;
diff --git a/drivers/media/dvb-frontends/rtl2832.h b/drivers/media/dvb-frontends/rtl2832.h
index 01e9fd5..eef1f6a 100644
--- a/drivers/media/dvb-frontends/rtl2832.h
+++ b/drivers/media/dvb-frontends/rtl2832.h
@@ -46,6 +46,7 @@ struct rtl2832_config {
 #define RTL2832_TUNER_E4000     0x27
 #define RTL2832_TUNER_FC0013    0x29
 #define RTL2832_TUNER_R820T	0x2a
+#define RTL2832_TUNER_R828D	0x2b
 	u8 tuner;
 };
 
diff --git a/drivers/media/tuners/r820t.c b/drivers/media/tuners/r820t.c
index 1c23666..511dbf4 100644
--- a/drivers/media/tuners/r820t.c
+++ b/drivers/media/tuners/r820t.c
@@ -51,7 +51,7 @@
 
 #define VER_NUM  49
 
-static int debug;
+static int debug = 1;
 module_param(debug, int, 0644);
 MODULE_PARM_DESC(debug, "enable verbose debug messages");
 
@@ -636,12 +636,12 @@ static int r820t_set_pll(struct r820t_priv *priv, enum v4l2_tuner_type type,
 	} else if ((vco_fra > pll_ref) && (vco_fra < pll_ref * 129 / 128)) {
 		vco_fra = pll_ref * 129 / 128;
 	}
-
+/*
 	if (nint > 63) {
 		tuner_info("No valid PLL values for %u kHz!\n", freq);
 		return -EINVAL;
 	}
-
+*/
 	ni = (nint - 13) / 4;
 	si = nint - 4 * ni - 13;
 
@@ -921,7 +921,10 @@ static int r820t_sysfreq_sel(struct r820t_priv *priv, u32 freq,
 		if (rc < 0)
 			return rc;
 
+		// taa
+//r820t_write(priv, 0x10, "\x24", 1); // generated
 		rc = r820t_write_reg_mask(priv, 0x10, 0x00, 0x04);
+//		rc = r820t_write_reg_mask(priv, 0x10, 0x04, 0x04);
 		if (rc < 0)
 			return rc;
 	 }
@@ -2188,6 +2191,491 @@ static int r820t_set_params(struct dvb_frontend *fe)
 	rc = generic_set_freq(fe, c->frequency, bw,
 			      V4L2_TUNER_DIGITAL_TV, 0, c->delivery_system);
 
+
+#if 1
+//	ret = rtl2832_sdr_wr_regs(s, 0x101, "\x18", 1);
+/*
+r820t_write(priv, 0x05, "\x83", 1); // generated
+r820t_write(priv, 0x06, "\x32", 1); // generated
+r820t_write(priv, 0x07, "\x75", 1); // generated
+r820t_write(priv, 0x08, "\xc0", 1); // generated
+r820t_write(priv, 0x09, "\x40", 1); // generated
+r820t_write(priv, 0x0a, "\xd6", 1); // generated
+r820t_write(priv, 0x0b, "\x6c", 1); // generated
+r820t_write(priv, 0x0c, "\xf5", 1); // generated
+r820t_write(priv, 0x0d, "\x53", 1); // generated
+r820t_write(priv, 0x0e, "\x75", 1); // generated
+r820t_write(priv, 0x0f, "\x78", 1); // generated
+r820t_write(priv, 0x10, "\x6c", 1); // generated
+r820t_write(priv, 0x11, "\x83", 1); // generated
+r820t_write(priv, 0x12, "\x80", 1); // generated
+r820t_write(priv, 0x13, "\x00", 1); // generated
+r820t_write(priv, 0x14, "\x0f", 1); // generated
+r820t_write(priv, 0x15, "\x00", 1); // generated
+r820t_write(priv, 0x16, "\xc0", 1); // generated
+r820t_write(priv, 0x17, "\x30", 1); // generated
+r820t_write(priv, 0x18, "\x48", 1); // generated
+r820t_write(priv, 0x19, "\xcc", 1); // generated
+r820t_write(priv, 0x1a, "\x60", 1); // generated
+r820t_write(priv, 0x1b, "\x00", 1); // generated
+r820t_write(priv, 0x1c, "\x54", 1); // generated
+r820t_write(priv, 0x1d, "\xa6", 1); // generated
+r820t_write(priv, 0x1e, "\x4a", 1); // generated
+r820t_write(priv, 0x1f, "\xc0", 1); // generated
+r820t_write(priv, 0x10, "\x6f", 1); // generated
+r820t_write(priv, 0x1a, "\x60", 1); // generated
+r820t_write(priv, 0x13, "\x7f", 1); // generated
+r820t_write(priv, 0x13, "\x3f", 1); // generated
+r820t_write(priv, 0x10, "\x6e", 1); // generated
+r820t_write(priv, 0x10, "\x6d", 1); // generated
+r820t_write(priv, 0x10, "\x6c", 1); // generated
+r820t_write(priv, 0x10, "\x6f", 1); // generated
+r820t_write(priv, 0x1a, "\x60", 1); // generated
+r820t_write(priv, 0x13, "\x7f", 1); // generated
+r820t_write(priv, 0x13, "\x3f", 1); // generated
+r820t_write(priv, 0x10, "\x6e", 1); // generated
+r820t_write(priv, 0x10, "\x6d", 1); // generated
+r820t_write(priv, 0x10, "\x6c", 1); // generated
+r820t_write(priv, 0x10, "\x6f", 1); // generated
+r820t_write(priv, 0x1a, "\x60", 1); // generated
+r820t_write(priv, 0x13, "\x7f", 1); // generated
+r820t_write(priv, 0x13, "\x3f", 1); // generated
+r820t_write(priv, 0x10, "\x6e", 1); // generated
+r820t_write(priv, 0x10, "\x6d", 1); // generated
+r820t_write(priv, 0x10, "\x6c", 1); // generated
+r820t_write(priv, 0x05, "\x83", 1); // generated
+r820t_write(priv, 0x06, "\x32", 1); // generated
+r820t_write(priv, 0x07, "\x75", 1); // generated
+r820t_write(priv, 0x08, "\xc0", 1); // generated
+r820t_write(priv, 0x09, "\x40", 1); // generated
+r820t_write(priv, 0x0a, "\xd6", 1); // generated
+r820t_write(priv, 0x0b, "\x6c", 1); // generated
+r820t_write(priv, 0x0c, "\xf5", 1); // generated
+r820t_write(priv, 0x0d, "\x53", 1); // generated
+r820t_write(priv, 0x0e, "\x75", 1); // generated
+r820t_write(priv, 0x0f, "\x78", 1); // generated
+r820t_write(priv, 0x10, "\x6c", 1); // generated
+r820t_write(priv, 0x11, "\x83", 1); // generated
+r820t_write(priv, 0x12, "\x80", 1); // generated
+r820t_write(priv, 0x13, "\x00", 1); // generated
+r820t_write(priv, 0x14, "\x0f", 1); // generated
+r820t_write(priv, 0x15, "\x00", 1); // generated
+r820t_write(priv, 0x16, "\xc0", 1); // generated
+r820t_write(priv, 0x17, "\x30", 1); // generated
+r820t_write(priv, 0x18, "\x48", 1); // generated
+r820t_write(priv, 0x19, "\xcc", 1); // generated
+r820t_write(priv, 0x1a, "\x60", 1); // generated
+r820t_write(priv, 0x1b, "\x00", 1); // generated
+r820t_write(priv, 0x1c, "\x54", 1); // generated
+r820t_write(priv, 0x1d, "\xa6", 1); // generated
+r820t_write(priv, 0x1e, "\x4a", 1); // generated
+r820t_write(priv, 0x1f, "\xc0", 1); // generated
+*/
+/*
+r820t_write(priv, 0x05, "\xa3", 1); // generated
+r820t_write(priv, 0x07, "\x65", 1); // generated
+r820t_write(priv, 0x0a, "\xdf", 1); // generated
+r820t_write(priv, 0x0b, "\x60", 1); // generated
+r820t_write(priv, 0x0c, "\x6b", 1); // generated
+r820t_write(priv, 0x0f, "\x70", 1); // generated
+r820t_write(priv, 0x18, "\x58", 1); // generated
+r820t_write(priv, 0x1c, "\x56", 1); // generated
+r820t_write(priv, 0x1e, "\xca", 1); // generated
+r820t_write(priv, 0x06, "\x12", 1); // generated
+r820t_write(priv, 0x07, "\x65", 1); // generated
+r820t_write(priv, 0x18, "\x79", 1); // generated
+r820t_write(priv, 0x19, "\xcc", 1); // generated
+r820t_write(priv, 0x1f, "\xc3", 1); // generated
+r820t_write(priv, 0x17, "\x30", 1); // generated
+r820t_write(priv, 0x1a, "\x61", 1); // generated
+r820t_write(priv, 0x1b, "\x00", 1); // generated
+r820t_write(priv, 0x10, "\x6c", 1); // generated
+r820t_write(priv, 0x08, "\xc0", 1); // generated
+r820t_write(priv, 0x09, "\x40", 1); // generated
+r820t_write(priv, 0x10, "\x6c", 1); // generated
+r820t_write(priv, 0x1a, "\x61", 1); // generated
+r820t_write(priv, 0x12, "\x80", 1); // generated
+r820t_write(priv, 0x10, "\x2c", 1); // generated
+r820t_write(priv, 0x14, "\x4d", 1); // generated
+r820t_write(priv, 0x12, "\x88", 1); // generated
+r820t_write(priv, 0x16, "\x00", 1); // generated
+r820t_write(priv, 0x15, "\x00", 1); // generated
+r820t_write(priv, 0x1a, "\x69", 1); // generated
+r820t_write(priv, 0x0c, "\x6c", 1); // generated
+r820t_write(priv, 0x0c, "\x6d", 1); // generated
+r820t_write(priv, 0x0c, "\x6e", 1); // generated
+r820t_write(priv, 0x0c, "\x6f", 1); // generated
+r820t_write(priv, 0x08, "\xc0", 1); // generated
+r820t_write(priv, 0x09, "\x40", 1); // generated
+r820t_write(priv, 0x08, "\xc0", 1); // generated
+r820t_write(priv, 0x09, "\x41", 1); // generated
+r820t_write(priv, 0x08, "\xc0", 1); // generated
+r820t_write(priv, 0x09, "\x61", 1); // generated
+r820t_write(priv, 0x08, "\xc1", 1); // generated
+r820t_write(priv, 0x09, "\x40", 1); // generated
+r820t_write(priv, 0x08, "\xe1", 1); // generated
+r820t_write(priv, 0x09, "\x40", 1); // generated
+r820t_write(priv, 0x08, "\xc0", 1); // generated
+r820t_write(priv, 0x09, "\x42", 1); // generated
+r820t_write(priv, 0x08, "\xc0", 1); // generated
+r820t_write(priv, 0x09, "\x62", 1); // generated
+r820t_write(priv, 0x08, "\xc2", 1); // generated
+r820t_write(priv, 0x09, "\x40", 1); // generated
+r820t_write(priv, 0x08, "\xe2", 1); // generated
+r820t_write(priv, 0x09, "\x40", 1); // generated
+r820t_write(priv, 0x08, "\xe2", 1); // generated
+r820t_write(priv, 0x09, "\x40", 1); // generated
+r820t_write(priv, 0x08, "\xe3", 1); // generated
+r820t_write(priv, 0x09, "\x40", 1); // generated
+r820t_write(priv, 0x08, "\xe1", 1); // generated
+r820t_write(priv, 0x09, "\x40", 1); // generated
+r820t_write(priv, 0x08, "\xe1", 1); // generated
+r820t_write(priv, 0x09, "\x41", 1); // generated
+r820t_write(priv, 0x08, "\xe1", 1); // generated
+r820t_write(priv, 0x09, "\x61", 1); // generated
+r820t_write(priv, 0x08, "\xe1", 1); // generated
+r820t_write(priv, 0x09, "\x41", 1); // generated
+r820t_write(priv, 0x09, "\x40", 1); // generated
+r820t_write(priv, 0x08, "\xe1", 1); // generated
+r820t_write(priv, 0x09, "\x40", 1); // generated
+r820t_write(priv, 0x08, "\xe2", 1); // generated
+r820t_write(priv, 0x09, "\x40", 1); // generated
+r820t_write(priv, 0x08, "\xe0", 1); // generated
+r820t_write(priv, 0x08, "\xe0", 1); // generated
+r820t_write(priv, 0x09, "\x40", 1); // generated
+r820t_write(priv, 0x08, "\xe0", 1); // generated
+r820t_write(priv, 0x09, "\x41", 1); // generated
+r820t_write(priv, 0x08, "\xe0", 1); // generated
+r820t_write(priv, 0x09, "\x61", 1); // generated
+r820t_write(priv, 0x08, "\xe1", 1); // generated
+r820t_write(priv, 0x09, "\x40", 1); // generated
+r820t_write(priv, 0x08, "\xe1", 1); // generated
+r820t_write(priv, 0x09, "\x41", 1); // generated
+r820t_write(priv, 0x08, "\xe1", 1); // generated
+r820t_write(priv, 0x09, "\x61", 1); // generated
+r820t_write(priv, 0x08, "\xe2", 1); // generated
+r820t_write(priv, 0x09, "\x40", 1); // generated
+r820t_write(priv, 0x08, "\xe2", 1); // generated
+r820t_write(priv, 0x09, "\x41", 1); // generated
+r820t_write(priv, 0x08, "\xe2", 1); // generated
+r820t_write(priv, 0x09, "\x61", 1); // generated
+r820t_write(priv, 0x08, "\xc0", 1); // generated
+r820t_write(priv, 0x09, "\x40", 1); // generated
+r820t_write(priv, 0x07, "\x65", 1); // generated
+r820t_write(priv, 0x18, "\x59", 1); // generated
+r820t_write(priv, 0x19, "\xce", 1); // generated
+r820t_write(priv, 0x1f, "\xc0", 1); // generated
+r820t_write(priv, 0x17, "\x30", 1); // generated
+r820t_write(priv, 0x1a, "\x2a", 1); // generated
+r820t_write(priv, 0x1b, "\x13", 1); // generated
+r820t_write(priv, 0x10, "\x2c", 1); // generated
+r820t_write(priv, 0x08, "\xc0", 1); // generated
+r820t_write(priv, 0x09, "\x40", 1); // generated
+r820t_write(priv, 0x10, "\x2c", 1); // generated
+r820t_write(priv, 0x1a, "\x22", 1); // generated
+r820t_write(priv, 0x12, "\x88", 1); // generated
+r820t_write(priv, 0x10, "\x6c", 1); // generated
+r820t_write(priv, 0x14, "\x15", 1); // generated
+r820t_write(priv, 0x12, "\x80", 1); // generated
+r820t_write(priv, 0x16, "\x59", 1); // generated
+r820t_write(priv, 0x15, "\x9e", 1); // generated
+r820t_write(priv, 0x1a, "\x2a", 1); // generated
+r820t_write(priv, 0x0c, "\x6c", 1); // generated
+r820t_write(priv, 0x0c, "\x6d", 1); // generated
+r820t_write(priv, 0x0c, "\x6e", 1); // generated
+r820t_write(priv, 0x0c, "\x6f", 1); // generated
+*/
+/*
+r820t_write(priv, 0x08, "\xe0", 1); // generated
+r820t_write(priv, 0x09, "\x40", 1); // generated
+r820t_write(priv, 0x08, "\xe0", 1); // generated
+r820t_write(priv, 0x09, "\x41", 1); // generated
+r820t_write(priv, 0x08, "\xe0", 1); // generated
+r820t_write(priv, 0x09, "\x61", 1); // generated
+r820t_write(priv, 0x08, "\xe1", 1); // generated
+r820t_write(priv, 0x09, "\x40", 1); // generated
+r820t_write(priv, 0x08, "\xe1", 1); // generated
+r820t_write(priv, 0x09, "\x41", 1); // generated
+r820t_write(priv, 0x08, "\xe1", 1); // generated
+r820t_write(priv, 0x09, "\x61", 1); // generated
+r820t_write(priv, 0x08, "\xe2", 1); // generated
+r820t_write(priv, 0x09, "\x40", 1); // generated
+r820t_write(priv, 0x08, "\xe2", 1); // generated
+r820t_write(priv, 0x09, "\x41", 1); // generated
+r820t_write(priv, 0x08, "\xe2", 1); // generated
+r820t_write(priv, 0x09, "\x61", 1); // generated
+r820t_write(priv, 0x07, "\x65", 1); // generated
+r820t_write(priv, 0x18, "\x79", 1); // generated
+r820t_write(priv, 0x19, "\xcf", 1); // generated
+r820t_write(priv, 0x1f, "\xc2", 1); // generated
+r820t_write(priv, 0x17, "\x38", 1); // generated
+r820t_write(priv, 0x1a, "\x2a", 1); // generated
+r820t_write(priv, 0x1b, "\x7b", 1); // generated
+r820t_write(priv, 0x10, "\x6c", 1); // generated
+r820t_write(priv, 0x08, "\xc0", 1); // generated
+r820t_write(priv, 0x09, "\x40", 1); // generated
+r820t_write(priv, 0x10, "\x6c", 1); // generated
+r820t_write(priv, 0x1a, "\x22", 1); // generated
+r820t_write(priv, 0x12, "\x80", 1); // generated
+r820t_write(priv, 0x10, "\x8c", 1); // generated
+r820t_write(priv, 0x14, "\x0c", 1); // generated
+r820t_write(priv, 0x12, "\x80", 1); // generated
+r820t_write(priv, 0x16, "\x5d", 1); // generated
+r820t_write(priv, 0x15, "\xb6", 1); // generated
+r820t_write(priv, 0x1a, "\x2a", 1); // generated
+r820t_write(priv, 0x0c, "\x6c", 1); // generated
+r820t_write(priv, 0x0c, "\x6d", 1); // generated
+r820t_write(priv, 0x0c, "\x6e", 1); // generated
+r820t_write(priv, 0x0c, "\x6f", 1); // generated
+r820t_write(priv, 0x08, "\xe0", 1); // generated
+r820t_write(priv, 0x09, "\x40", 1); // generated
+r820t_write(priv, 0x08, "\xe0", 1); // generated
+r820t_write(priv, 0x09, "\x41", 1); // generated
+r820t_write(priv, 0x08, "\xe0", 1); // generated
+r820t_write(priv, 0x09, "\x61", 1); // generated
+r820t_write(priv, 0x08, "\xe1", 1); // generated
+r820t_write(priv, 0x09, "\x40", 1); // generated
+r820t_write(priv, 0x08, "\xe1", 1); // generated
+r820t_write(priv, 0x09, "\x41", 1); // generated
+r820t_write(priv, 0x08, "\xe1", 1); // generated
+r820t_write(priv, 0x09, "\x61", 1); // generated
+r820t_write(priv, 0x08, "\xe2", 1); // generated
+r820t_write(priv, 0x09, "\x40", 1); // generated
+r820t_write(priv, 0x08, "\xe2", 1); // generated
+r820t_write(priv, 0x09, "\x41", 1); // generated
+r820t_write(priv, 0x08, "\xe2", 1); // generated
+r820t_write(priv, 0x09, "\x61", 1); // generated
+r820t_write(priv, 0x07, "\x65", 1); // generated
+r820t_write(priv, 0x18, "\x59", 1); // generated
+r820t_write(priv, 0x19, "\xcd", 1); // generated
+r820t_write(priv, 0x1f, "\xc3", 1); // generated
+r820t_write(priv, 0x17, "\x30", 1); // generated
+r820t_write(priv, 0x1a, "\x69", 1); // generated
+r820t_write(priv, 0x1b, "\x00", 1); // generated
+r820t_write(priv, 0x10, "\x8c", 1); // generated
+r820t_write(priv, 0x08, "\xc0", 1); // generated
+r820t_write(priv, 0x09, "\x40", 1); // generated
+r820t_write(priv, 0x10, "\x8c", 1); // generated
+r820t_write(priv, 0x1a, "\x61", 1); // generated
+r820t_write(priv, 0x12, "\x80", 1); // generated
+r820t_write(priv, 0x10, "\x4c", 1); // generated
+r820t_write(priv, 0x14, "\x55", 1); // generated
+r820t_write(priv, 0x12, "\x80", 1); // generated
+r820t_write(priv, 0x16, "\xac", 1); // generated
+r820t_write(priv, 0x15, "\xce", 1); // generated
+r820t_write(priv, 0x1a, "\x69", 1); // generated
+r820t_write(priv, 0x0c, "\x6c", 1); // generated
+r820t_write(priv, 0x0c, "\x6d", 1); // generated
+r820t_write(priv, 0x0c, "\x6e", 1); // generated
+r820t_write(priv, 0x0c, "\x6f", 1); // generated
+r820t_write(priv, 0x08, "\xe0", 1); // generated
+r820t_write(priv, 0x09, "\x40", 1); // generated
+r820t_write(priv, 0x08, "\xe0", 1); // generated
+r820t_write(priv, 0x09, "\x41", 1); // generated
+r820t_write(priv, 0x08, "\xe0", 1); // generated
+r820t_write(priv, 0x09, "\x61", 1); // generated
+r820t_write(priv, 0x08, "\xe1", 1); // generated
+r820t_write(priv, 0x09, "\x40", 1); // generated
+r820t_write(priv, 0x08, "\xe1", 1); // generated
+r820t_write(priv, 0x09, "\x41", 1); // generated
+r820t_write(priv, 0x08, "\xe1", 1); // generated
+r820t_write(priv, 0x09, "\x61", 1); // generated
+r820t_write(priv, 0x08, "\xe2", 1); // generated
+r820t_write(priv, 0x09, "\x40", 1); // generated
+r820t_write(priv, 0x08, "\xe2", 1); // generated
+r820t_write(priv, 0x09, "\x41", 1); // generated
+r820t_write(priv, 0x08, "\xe2", 1); // generated
+r820t_write(priv, 0x09, "\x61", 1); // generated
+r820t_write(priv, 0x07, "\x6a", 1); // generated
+r820t_write(priv, 0x18, "\x59", 1); // generated
+r820t_write(priv, 0x19, "\xcc", 1); // generated
+r820t_write(priv, 0x1f, "\xc0", 1); // generated
+r820t_write(priv, 0x17, "\x30", 1); // generated
+r820t_write(priv, 0x1a, "\x68", 1); // generated
+r820t_write(priv, 0x1b, "\x00", 1); // generated
+r820t_write(priv, 0x10, "\x4c", 1); // generated
+r820t_write(priv, 0x08, "\xc0", 1); // generated
+r820t_write(priv, 0x09, "\x40", 1); // generated
+r820t_write(priv, 0x10, "\x4c", 1); // generated
+r820t_write(priv, 0x1a, "\x60", 1); // generated
+r820t_write(priv, 0x12, "\x80", 1); // generated
+r820t_write(priv, 0x10, "\x2c", 1); // generated
+r820t_write(priv, 0x14, "\x95", 1); // generated
+r820t_write(priv, 0x12, "\x80", 1); // generated
+r820t_write(priv, 0x16, "\x56", 1); // generated
+r820t_write(priv, 0x15, "\x68", 1); // generated
+r820t_write(priv, 0x1a, "\x68", 1); // generated
+r820t_write(priv, 0x0c, "\x6c", 1); // generated
+r820t_write(priv, 0x0c, "\x6d", 1); // generated
+r820t_write(priv, 0x0c, "\x6e", 1); // generated
+r820t_write(priv, 0x0c, "\x6f", 1); // generated
+r820t_write(priv, 0x08, "\xc0", 1); // generated
+r820t_write(priv, 0x09, "\x40", 1); // generated
+r820t_write(priv, 0x08, "\xc0", 1); // generated
+r820t_write(priv, 0x09, "\x41", 1); // generated
+r820t_write(priv, 0x08, "\xc0", 1); // generated
+r820t_write(priv, 0x09, "\x61", 1); // generated
+r820t_write(priv, 0x08, "\xc1", 1); // generated
+r820t_write(priv, 0x09, "\x40", 1); // generated
+r820t_write(priv, 0x08, "\xe1", 1); // generated
+r820t_write(priv, 0x09, "\x40", 1); // generated
+r820t_write(priv, 0x08, "\xc0", 1); // generated
+r820t_write(priv, 0x09, "\x42", 1); // generated
+r820t_write(priv, 0x08, "\xc0", 1); // generated
+r820t_write(priv, 0x09, "\x62", 1); // generated
+r820t_write(priv, 0x08, "\xc2", 1); // generated
+r820t_write(priv, 0x09, "\x40", 1); // generated
+r820t_write(priv, 0x08, "\xe2", 1); // generated
+r820t_write(priv, 0x09, "\x40", 1); // generated
+r820t_write(priv, 0x08, "\xe2", 1); // generated
+r820t_write(priv, 0x09, "\x40", 1); // generated
+r820t_write(priv, 0x08, "\xe1", 1); // generated
+r820t_write(priv, 0x09, "\x40", 1); // generated
+r820t_write(priv, 0x08, "\xe1", 1); // generated
+r820t_write(priv, 0x09, "\x41", 1); // generated
+r820t_write(priv, 0x08, "\xe1", 1); // generated
+r820t_write(priv, 0x09, "\x61", 1); // generated
+r820t_write(priv, 0x08, "\xe1", 1); // generated
+r820t_write(priv, 0x09, "\x41", 1); // generated
+r820t_write(priv, 0x09, "\x40", 1); // generated
+r820t_write(priv, 0x08, "\xe1", 1); // generated
+r820t_write(priv, 0x09, "\x40", 1); // generated
+r820t_write(priv, 0x08, "\xe2", 1); // generated
+r820t_write(priv, 0x09, "\x40", 1); // generated
+r820t_write(priv, 0x08, "\xe0", 1); // generated
+r820t_write(priv, 0x08, "\xe0", 1); // generated
+r820t_write(priv, 0x09, "\x40", 1); // generated
+r820t_write(priv, 0x08, "\xe0", 1); // generated
+r820t_write(priv, 0x09, "\x41", 1); // generated
+r820t_write(priv, 0x08, "\xe0", 1); // generated
+r820t_write(priv, 0x09, "\x61", 1); // generated
+r820t_write(priv, 0x08, "\xe1", 1); // generated
+r820t_write(priv, 0x09, "\x40", 1); // generated
+r820t_write(priv, 0x08, "\xe1", 1); // generated
+r820t_write(priv, 0x09, "\x41", 1); // generated
+r820t_write(priv, 0x08, "\xe1", 1); // generated
+r820t_write(priv, 0x09, "\x61", 1); // generated
+r820t_write(priv, 0x08, "\xe2", 1); // generated
+r820t_write(priv, 0x09, "\x40", 1); // generated
+r820t_write(priv, 0x08, "\xe2", 1); // generated
+r820t_write(priv, 0x09, "\x41", 1); // generated
+r820t_write(priv, 0x08, "\xe2", 1); // generated
+r820t_write(priv, 0x09, "\x61", 1); // generated
+r820t_write(priv, 0x08, "\xc0", 1); // generated
+r820t_write(priv, 0x09, "\x40", 1); // generated
+r820t_write(priv, 0x05, "\x83", 1); // generated
+r820t_write(priv, 0x06, "\x32", 1); // generated
+r820t_write(priv, 0x07, "\x75", 1); // generated
+r820t_write(priv, 0x08, "\xc0", 1); // generated
+r820t_write(priv, 0x09, "\x40", 1); // generated
+r820t_write(priv, 0x0a, "\xd6", 1); // generated
+r820t_write(priv, 0x0b, "\x6c", 1); // generated
+r820t_write(priv, 0x0c, "\xf5", 1); // generated
+r820t_write(priv, 0x0d, "\x53", 1); // generated
+r820t_write(priv, 0x0e, "\x75", 1); // generated
+r820t_write(priv, 0x0f, "\x78", 1); // generated
+r820t_write(priv, 0x10, "\x6c", 1); // generated
+r820t_write(priv, 0x11, "\x83", 1); // generated
+r820t_write(priv, 0x12, "\x80", 1); // generated
+r820t_write(priv, 0x13, "\x00", 1); // generated
+r820t_write(priv, 0x14, "\x0f", 1); // generated
+r820t_write(priv, 0x15, "\x00", 1); // generated
+r820t_write(priv, 0x16, "\xc0", 1); // generated
+r820t_write(priv, 0x17, "\x30", 1); // generated
+r820t_write(priv, 0x18, "\x48", 1); // generated
+r820t_write(priv, 0x19, "\xcc", 1); // generated
+r820t_write(priv, 0x1a, "\x60", 1); // generated
+r820t_write(priv, 0x1b, "\x00", 1); // generated
+r820t_write(priv, 0x1c, "\x54", 1); // generated
+r820t_write(priv, 0x1d, "\xa6", 1); // generated
+r820t_write(priv, 0x1e, "\x4a", 1); // generated
+r820t_write(priv, 0x1f, "\xc0", 1); // generated
+*/
+/*
+ret = rtl2832_wr_regs(priv, 0x01, 1, "\x10", 1); // generated
+	ret = rtl2832_sdr_wr_regs(s, 0x101, "\x10", 1);
+ret = mn88472_wreg_38(priv, 0x83, "\x01", 1); // generated
+ret = rtl2832_wr_regs(priv, 0x01, 1, "\x18", 1); // generated
+	ret = rtl2832_sdr_wr_regs(s, 0x101, "\x18", 1);
+*/
+/*
+r820t_write(priv, 0x0c, "\xf7", 1); // generated
+r820t_write(priv, 0x13, "\x39", 1); // generated
+r820t_write(priv, 0x0b, "\x0c", 1); // generated
+r820t_write(priv, 0x0f, "\x7c", 1); // generated
+r820t_write(priv, 0x10, "\x6c", 1); // generated
+r820t_write(priv, 0x10, "\x6c", 1); // generated
+r820t_write(priv, 0x1a, "\x60", 1); // generated
+r820t_write(priv, 0x12, "\x80", 1); // generated
+r820t_write(priv, 0x10, "\x8c", 1); // generated
+r820t_write(priv, 0x14, "\x8d", 1); // generated
+r820t_write(priv, 0x12, "\x80", 1); // generated
+r820t_write(priv, 0x16, "\x7f", 1); // generated
+r820t_write(priv, 0x15, "\xfe", 1); // generated
+r820t_write(priv, 0x1a, "\x68", 1); // generated
+r820t_write(priv, 0x0b, "\x1c", 1); // generated
+r820t_write(priv, 0x0b, "\x0c", 1); // generated
+r820t_write(priv, 0x0f, "\x78", 1); // generated
+r820t_write(priv, 0x0a, "\xdd", 1); // generated
+r820t_write(priv, 0x0b, "\x0b", 1); // generated
+r820t_write(priv, 0x07, "\x75", 1); // generated
+r820t_write(priv, 0x06, "\x12", 1); // generated
+r820t_write(priv, 0x1e, "\x6a", 1); // generated
+r820t_write(priv, 0x05, "\x83", 1); // generated
+r820t_write(priv, 0x1f, "\xc0", 1); // generated
+r820t_write(priv, 0x0f, "\x78", 1); // generated
+r820t_write(priv, 0x19, "\xec", 1); // generated
+r820t_write(priv, 0x17, "\x30", 1); // generated
+r820t_write(priv, 0x1a, "\x68", 1); // generated
+r820t_write(priv, 0x1b, "\x00", 1); // generated
+*/
+/*
+r820t_write(priv, 0x10, "\x8c", 1); // generated
+r820t_write(priv, 0x08, "\xe1", 1); // generated
+r820t_write(priv, 0x09, "\x40", 1); // generated
+r820t_write(priv, 0x10, "\x84", 1); // generated
+r820t_write(priv, 0x10, "\x84", 1); // generated
+r820t_write(priv, 0x1a, "\x60", 1); // generated
+r820t_write(priv, 0x12, "\x80", 1); // generated
+r820t_write(priv, 0x10, "\x24", 1); // generated
+r820t_write(priv, 0x14, "\x90", 1); // generated
+r820t_write(priv, 0x12, "\x80", 1); // generated
+r820t_write(priv, 0x16, "\xd2", 1); // generated
+r820t_write(priv, 0x15, "\x3e", 1); // generated
+r820t_write(priv, 0x1a, "\x68", 1); // generated
+r820t_write(priv, 0x1d, "\xe5", 1); // generated
+r820t_write(priv, 0x1c, "\x24", 1); // generated
+*/
+/*
+r820t_write(priv, 0x0d, "\x53", 1); // generated
+r820t_write(priv, 0x0e, "\x75", 1); // generated
+r820t_write(priv, 0x05, "\x83", 1); // generated
+r820t_write(priv, 0x06, "\x12", 1); // generated
+r820t_write(priv, 0x11, "\xbb", 1); // generated
+r820t_write(priv, 0x17, "\x30", 1); // generated
+r820t_write(priv, 0x0a, "\xdd", 1); // generated
+r820t_write(priv, 0x19, "\xec", 1); // generated
+r820t_write(priv, 0x1d, "\xe5", 1); // generated
+r820t_write(priv, 0x1c, "\x20", 1); // generated
+*/
+/*
+r820t_write(priv, 0x06, "\x52", 1); // generated
+r820t_write(priv, 0x1a, "\x48", 1); // generated
+r820t_write(priv, 0x10, "\x20", 1); // generated
+r820t_write(priv, 0x1c, "\x24", 1); // generated
+*/
+
+//r820t_write(priv, 0x1e, "\x6e", 1); // generated
+//r820t_write(priv, 0x1a, "\x68", 1); // generated
+//r820t_write(priv, 0x10, "\x24", 1); // generated!!
+//ret = rtl2832_wr_regs(priv, 0x01, 1, "\x10", 1); // generated
+#endif
+//loka 25 05:09:10 localhost.localdomain kernel: r820t 5-003a: r820t_write: i2c wr reg=10 len=1: 4c
+//loka 25 05:09:10 localhost.localdomain kernel: r820t 5-003a: shadow_store: prev  reg=10 len=1: 24
+
+	rc = r820t_write_reg_mask(priv, 0x10, 0x04, 0xf0);
+
+
 	if (fe->ops.i2c_gate_ctrl)
 		fe->ops.i2c_gate_ctrl(fe, 0);
 	mutex_unlock(&priv->lock);
@@ -2236,7 +2724,9 @@ static int r820t_get_if_frequency(struct dvb_frontend *fe, u32 *frequency)
 {
 	struct r820t_priv *priv = fe->tuner_priv;
 
-	tuner_dbg("%s:\n", __func__);
+//	priv->int_freq = 4570000;
+
+	tuner_dbg("%s: frequency=%d\n", __func__, priv->int_freq);
 
 	*frequency = priv->int_freq;
 
diff --git a/drivers/media/usb/dvb-usb-v2/rtl28xxu.c b/drivers/media/usb/dvb-usb-v2/rtl28xxu.c
index 5add6cb..2256270 100644
--- a/drivers/media/usb/dvb-usb-v2/rtl28xxu.c
+++ b/drivers/media/usb/dvb-usb-v2/rtl28xxu.c
@@ -378,6 +378,7 @@ static int rtl2832u_read_config(struct dvb_usb_device *d)
 	struct rtl28xxu_req req_e4000 = {0x02c8, CMD_I2C_RD, 1, buf};
 	struct rtl28xxu_req req_tda18272 = {0x00c0, CMD_I2C_RD, 2, buf};
 	struct rtl28xxu_req req_r820t = {0x0034, CMD_I2C_RD, 1, buf};
+	struct rtl28xxu_req req_r828d = {0x0074, CMD_I2C_RD, 1, buf};
 
 	dev_dbg(&d->udev->dev, "%s:\n", __func__);
 
@@ -490,6 +491,15 @@ static int rtl2832u_read_config(struct dvb_usb_device *d)
 		goto found;
 	}
 
+	/* check R828D ID register; reg=00 val=69 */
+	ret = rtl28xxu_ctrl_msg(d, &req_r828d);
+	if (ret == 0 && buf[0] == 0x69) {
+		priv->tuner = TUNER_RTL2832_R828D;
+		priv->tuner_name = "R828D";
+		goto found;
+	}
+
+
 found:
 	dev_dbg(&d->udev->dev, "%s: tuner=%s\n", __func__, priv->tuner_name);
 
@@ -744,6 +754,7 @@ static int rtl2832u_frontend_attach(struct dvb_usb_adapter *adap)
 		rtl2832_config = &rtl28xxu_rtl2832_e4000_config;
 		break;
 	case TUNER_RTL2832_R820T:
+	case TUNER_RTL2832_R828D:
 		rtl2832_config = &rtl28xxu_rtl2832_r820t_config;
 		break;
 	default:
@@ -864,6 +875,13 @@ static const struct r820t_config rtl2832u_r820t_config = {
 	.rafael_chip = CHIP_R820T,
 };
 
+static const struct r820t_config rtl2832u_r828d_config = {
+	.i2c_addr = 0x3a,
+	.xtal = 16000000,
+	.max_i2c_msg_len = 2,
+	.rafael_chip = CHIP_R828D,
+};
+
 /* dvb_frontend => stand-alone tuner wrappers */
 static int rtl2832u_tuner_init(struct dvb_frontend *fe)
 {
@@ -977,6 +995,14 @@ static int rtl2832u_tuner_attach(struct dvb_usb_adapter *adap)
 		adap->fe[0]->ops.read_signal_strength =
 				adap->fe[0]->ops.tuner_ops.get_rf_strength;
 		break;
+	case TUNER_RTL2832_R828D:
+		fe = dvb_attach(r820t_attach, adap->fe[0], &d->i2c_adap,
+				&rtl2832u_r828d_config);
+
+		/* Use tuner to get the signal strength */
+		adap->fe[0]->ops.read_signal_strength =
+				adap->fe[0]->ops.tuner_ops.get_rf_strength;
+		break;
 	default:
 		dev_err(&d->udev->dev, "%s: unknown tuner=%d\n", KBUILD_MODNAME,
 				priv->tuner);
@@ -1405,7 +1431,7 @@ static const struct dvb_usb_device_properties rtl2832u_props = {
 	.tuner_attach = rtl2832u_tuner_attach,
 	.init = rtl28xxu_init,
 	.exit = rtl28xxu_exit,
-	.get_rc_config = rtl2832u_get_rc_config,
+//	.get_rc_config = rtl2832u_get_rc_config,
 
 	.num_adapters = 1,
 	.adapter = {
@@ -1461,6 +1487,9 @@ static const struct usb_device_id rtl28xxu_id_table[] = {
 		&rtl2832u_props, "Leadtek WinFast DTV Dongle mini", NULL) },
 	{ DVB_USB_DEVICE(USB_VID_GTEK, USB_PID_CPYTO_REDI_PC50A,
 		&rtl2832u_props, "Crypto ReDi PC 50 A", NULL) },
+
+	{ DVB_USB_DEVICE(USB_VID_HANFTEK, 0x0131,
+		&rtl2832u_props, "Astrometa DVB-T2", NULL) },
 	{ }
 };
 MODULE_DEVICE_TABLE(usb, rtl28xxu_id_table);
diff --git a/drivers/media/usb/dvb-usb-v2/rtl28xxu.h b/drivers/media/usb/dvb-usb-v2/rtl28xxu.h
index 52c26b2..091c03e 100644
--- a/drivers/media/usb/dvb-usb-v2/rtl28xxu.h
+++ b/drivers/media/usb/dvb-usb-v2/rtl28xxu.h
@@ -86,6 +86,7 @@ enum rtl28xxu_tuner {
 	TUNER_RTL2832_TDA18272,
 	TUNER_RTL2832_FC0013,
 	TUNER_RTL2832_R820T,
+	TUNER_RTL2832_R828D,
 };
 
 struct rtl28xxu_req {
