{-1,                 -1,    -1,   -1},
 };
 
+/* 2304:0242 PCTV QuatroStick (510e)
+ * GPIO_2: decoder reset, 0=active
+ * GPIO_4: decoder suspend, 0=active
+ * GPIO_6: demod reset, 0=active
+ * GPIO_7: LED, 1=active
+ */
+static struct em28xx_reg_seq pctv_510e[] = {
+       {EM2874_R80_GPIO, 0x10, 0xff, 100},
+       {EM2874_R80_GPIO, 0x14, 0xff, 100}, /* GPIO_2 = 1 */
+       {EM2874_R80_GPIO, 0x54, 0xff, 050}, /* GPIO_6 = 1 */
+       {             -1,   -1,   -1,  -1},
+};
+
 /* 2013:0251 PCTV QuatroStick nano (520e)
  * GPIO_2: decoder reset, 0=active
  * GPIO_4: decoder suspend, 0=active
                                EM28XX_I2C_CLK_WAIT_ENABLE |
                                EM28XX_I2C_FREQ_400_KHZ,
        },
+       /* 2304:0242 PCTV QuatroStick (510e)
+        * Empia EM2884 + Micronas DRX 3926K + NXP TDA18271HDC2 */
+       [EM2884_BOARD_PCTV_510E] = {
+               .name          = "PCTV QuatroStick (510e)",
+               .tuner_type    = TUNER_ABSENT,
+               .tuner_gpio    = pctv_510e,
+               .has_dvb       = 1,
+               .ir_codes      = RC_MAP_PINNACLE_PCTV_HD,
+               .i2c_speed     = EM2874_I2C_SECONDARY_BUS_SELECT |
+                               EM28XX_I2C_CLK_WAIT_ENABLE |
+                               EM28XX_I2C_FREQ_400_KHZ,
+       },
        /* 2013:0251 PCTV QuatroStick nano (520e)
         * Empia EM2884 + Micronas DRX 3926K + NXP TDA18271HDC2 */
        [EM2884_BOARD_PCTV_520E] = {
                        .driver_info = EM2860_BOARD_EASYCAP },
        { USB_DEVICE(0x1b80, 0xe425),
                        .driver_info = EM2874_BOARD_MAXMEDIA_UB425_TC },
+       { USB_DEVICE(0x2304, 0x0242),
+                       .driver_info = EM2884_BOARD_PCTV_510E },
        { USB_DEVICE(0x2013, 0x0251),
                        .driver_info = EM2884_BOARD_PCTV_520E },
        { },
 
        .chunk_size = 58,
 };
 
+struct drxk_config pctv_520e_drxk = {
+       .adr = 0x29,
+       .single_master = 1,
+       .microcode_name = "dvb-demod-drxk-pctv.fw",
+       .chunk_size = 58,
+};
+
 static int drxk_gate_ctrl(struct dvb_frontend *fe, int enable)
 {
        struct em28xx_dvb *dvb = fe->sec_priv;
                i2c_master_send(&dev->i2c_client, regs[i].r, regs[i].len);
 };
 
+static void pctv_520e_init(struct em28xx *dev)
+{
+       /*
+        * Init TDA8295(?) analog demodulator. Looks like I2C traffic to
+        * digital demodulator and tuner are routed via TDA8295.
+        */
+       int i;
+       struct {
+               unsigned char r[4];
+               int len;
+       } regs[] = {
+               {{ 0x06, 0x02, 0x00, 0x31 }, 4},
+               {{ 0x01, 0x02 }, 2},
+               {{ 0x01, 0x02, 0x00, 0xc6 }, 4},
+               {{ 0x01, 0x00 }, 2},
+               {{ 0x01, 0x00, 0xff, 0xaf }, 4},
+               {{ 0x01, 0x00, 0x03, 0xa0 }, 4},
+               {{ 0x01, 0x00 }, 2},
+               {{ 0x01, 0x00, 0x73, 0xaf }, 4},
+       };
+
+       dev->i2c_client.addr = 0x82 >> 1; /* 0x41 */
+
+       for (i = 0; i < ARRAY_SIZE(regs); i++)
+               i2c_master_send(&dev->i2c_client, regs[i].r, regs[i].len);
+};
+
 static int em28xx_mt352_terratec_xs_init(struct dvb_frontend *fe)
 {
        /* Values extracted from a USB trace of the Terratec Windows driver */
        case EM2884_BOARD_PCTV_520E:
                pctv_520e_init(dev);
 
+               /* attach demodulator */
+               dvb->fe[0] = dvb_attach(drxk_attach, &pctv_520e_drxk,
+                               &dev->i2c_adap);
+
+               if (dvb->fe[0]) {
+                       /* attach tuner */
+                       if (!dvb_attach(tda18271_attach, dvb->fe[0], 0x60,
+                                       &dev->i2c_adap,
+                                       &em28xx_cxd2820r_tda18271_config)) {
+                               dvb_frontend_detach(dvb->fe[0]);
+                               result = -EINVAL;
+                               goto out_free;
+                       }
+               }
+               break;
+       case EM2884_BOARD_PCTV_510E:
+       case EM2884_BOARD_PCTV_520E:
+               pctv_520e_init(dev);
+
                /* attach demodulator */
                dvb->fe[0] = dvb_attach(drxk_attach, &pctv_520e_drxk,
                                &dev->i2c_adap);
 
 #define EM2884_BOARD_CINERGY_HTC_STICK           82
 #define EM2860_BOARD_HT_VIDBOX_NW03              83
 #define EM2874_BOARD_MAXMEDIA_UB425_TC            84
-#define EM2884_BOARD_PCTV_520E                    85
+#define EM2884_BOARD_PCTV_510E                    85
+#define EM2884_BOARD_PCTV_520E                    86
 
 /* Limits minimum and default number of buffers */
 #define EM28XX_MIN_BUF 4