aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/media/usb/em28xx/em28xx-cards.c16
-rw-r--r--drivers/media/usb/em28xx/em28xx-dvb.c34
-rw-r--r--drivers/media/usb/em28xx/em28xx.h1
3 files changed, 50 insertions, 1 deletions
diff --git a/drivers/media/usb/em28xx/em28xx-cards.c b/drivers/media/usb/em28xx/em28xx-cards.c
index 464cec060fa4..a5196697627f 100644
--- a/drivers/media/usb/em28xx/em28xx-cards.c
+++ b/drivers/media/usb/em28xx/em28xx-cards.c
@@ -175,7 +175,7 @@ static struct em28xx_reg_seq evga_indtube_digital[] = {
175}; 175};
176 176
177/* 177/*
178 * KWorld PlusTV 340U and UB435-Q (ATSC) GPIOs map: 178 * KWorld PlusTV 340U, UB435-Q and UB435-Q V2 (ATSC) GPIOs map:
179 * EM_GPIO_0 - currently unknown 179 * EM_GPIO_0 - currently unknown
180 * EM_GPIO_1 - LED disable/enable (1 = off, 0 = on) 180 * EM_GPIO_1 - LED disable/enable (1 = off, 0 = on)
181 * EM_GPIO_2 - currently unknown 181 * EM_GPIO_2 - currently unknown
@@ -2031,6 +2031,18 @@ struct em28xx_board em28xx_boards[] = {
2031 .i2c_speed = EM28XX_I2C_CLK_WAIT_ENABLE | 2031 .i2c_speed = EM28XX_I2C_CLK_WAIT_ENABLE |
2032 EM28XX_I2C_FREQ_400_KHZ, 2032 EM28XX_I2C_FREQ_400_KHZ,
2033 }, 2033 },
2034 /*
2035 * 1b80:e346 KWorld USB ATSC TV Stick UB435-Q V2
2036 * Empia EM2874B + LG DT3305 + NXP TDA18271HDC2
2037 */
2038 [EM2874_BOARD_KWORLD_UB435Q_V2] = {
2039 .name = "KWorld USB ATSC TV Stick UB435-Q V2",
2040 .tuner_type = TUNER_ABSENT,
2041 .has_dvb = 1,
2042 .dvb_gpio = kworld_a340_digital,
2043 .tuner_gpio = default_tuner_gpio,
2044 .def_i2c_bus = 1,
2045 },
2034}; 2046};
2035const unsigned int em28xx_bcount = ARRAY_SIZE(em28xx_boards); 2047const unsigned int em28xx_bcount = ARRAY_SIZE(em28xx_boards);
2036 2048
@@ -2174,6 +2186,8 @@ struct usb_device_id em28xx_id_table[] = {
2174 .driver_info = EM2860_BOARD_GADMEI_UTV330 }, 2186 .driver_info = EM2860_BOARD_GADMEI_UTV330 },
2175 { USB_DEVICE(0x1b80, 0xa340), 2187 { USB_DEVICE(0x1b80, 0xa340),
2176 .driver_info = EM2870_BOARD_KWORLD_A340 }, 2188 .driver_info = EM2870_BOARD_KWORLD_A340 },
2189 { USB_DEVICE(0x1b80, 0xe346),
2190 .driver_info = EM2874_BOARD_KWORLD_UB435Q_V2 },
2177 { USB_DEVICE(0x2013, 0x024f), 2191 { USB_DEVICE(0x2013, 0x024f),
2178 .driver_info = EM28174_BOARD_PCTV_290E }, 2192 .driver_info = EM28174_BOARD_PCTV_290E },
2179 { USB_DEVICE(0x2013, 0x024c), 2193 { USB_DEVICE(0x2013, 0x024c),
diff --git a/drivers/media/usb/em28xx/em28xx-dvb.c b/drivers/media/usb/em28xx/em28xx-dvb.c
index ee8a6c68162e..344042bb845c 100644
--- a/drivers/media/usb/em28xx/em28xx-dvb.c
+++ b/drivers/media/usb/em28xx/em28xx-dvb.c
@@ -298,6 +298,18 @@ static struct lgdt3305_config em2870_lgdt3304_dev = {
298 .qam_if_khz = 4000, 298 .qam_if_khz = 4000,
299}; 299};
300 300
301static struct lgdt3305_config em2874_lgdt3305_dev = {
302 .i2c_addr = 0x0e,
303 .demod_chip = LGDT3305,
304 .spectral_inversion = 1,
305 .deny_i2c_rptr = 0,
306 .mpeg_mode = LGDT3305_MPEG_SERIAL,
307 .tpclk_edge = LGDT3305_TPCLK_FALLING_EDGE,
308 .tpvalid_polarity = LGDT3305_TP_VALID_HIGH,
309 .vsb_if_khz = 3250,
310 .qam_if_khz = 4000,
311};
312
301static struct s921_config sharp_isdbt = { 313static struct s921_config sharp_isdbt = {
302 .demod_address = 0x30 >> 1 314 .demod_address = 0x30 >> 1
303}; 315};
@@ -329,6 +341,11 @@ static struct tda18271_config kworld_a340_config = {
329 .std_map = &kworld_a340_std_map, 341 .std_map = &kworld_a340_std_map,
330}; 342};
331 343
344static struct tda18271_config kworld_ub435q_v2_config = {
345 .std_map = &kworld_a340_std_map,
346 .gate = TDA18271_GATE_DIGITAL,
347};
348
332static struct zl10353_config em28xx_zl10353_xc3028_no_i2c_gate = { 349static struct zl10353_config em28xx_zl10353_xc3028_no_i2c_gate = {
333 .demod_address = (0x1e >> 1), 350 .demod_address = (0x1e >> 1),
334 .no_tuner = 1, 351 .no_tuner = 1,
@@ -1296,6 +1313,23 @@ static int em28xx_dvb_init(struct em28xx *dev)
1296 goto out_free; 1313 goto out_free;
1297 } 1314 }
1298 break; 1315 break;
1316 case EM2874_BOARD_KWORLD_UB435Q_V2:
1317 dvb->fe[0] = dvb_attach(lgdt3305_attach,
1318 &em2874_lgdt3305_dev,
1319 &dev->i2c_adap[dev->def_i2c_bus]);
1320 if (!dvb->fe[0]) {
1321 result = -EINVAL;
1322 goto out_free;
1323 }
1324
1325 /* Attach the demodulator. */
1326 if (!dvb_attach(tda18271_attach, dvb->fe[0], 0x60,
1327 &dev->i2c_adap[dev->def_i2c_bus],
1328 &kworld_ub435q_v2_config)) {
1329 result = -EINVAL;
1330 goto out_free;
1331 }
1332 break;
1299 default: 1333 default:
1300 em28xx_errdev("/2: The frontend of your DVB/ATSC card" 1334 em28xx_errdev("/2: The frontend of your DVB/ATSC card"
1301 " isn't supported yet\n"); 1335 " isn't supported yet\n");
diff --git a/drivers/media/usb/em28xx/em28xx.h b/drivers/media/usb/em28xx/em28xx.h
index c9ebe19d064c..f8726ad5d0a8 100644
--- a/drivers/media/usb/em28xx/em28xx.h
+++ b/drivers/media/usb/em28xx/em28xx.h
@@ -131,6 +131,7 @@
131#define EM2884_BOARD_TERRATEC_HTC_USB_XS 87 131#define EM2884_BOARD_TERRATEC_HTC_USB_XS 87
132#define EM2884_BOARD_C3TECH_DIGITAL_DUO 88 132#define EM2884_BOARD_C3TECH_DIGITAL_DUO 88
133#define EM2874_BOARD_DELOCK_61959 89 133#define EM2874_BOARD_DELOCK_61959 89
134#define EM2874_BOARD_KWORLD_UB435Q_V2 90
134 135
135/* Limits minimum and default number of buffers */ 136/* Limits minimum and default number of buffers */
136#define EM28XX_MIN_BUF 4 137#define EM28XX_MIN_BUF 4