aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJean-Francois Thibert <jfthibert@google.com>2013-10-09 10:18:05 -0400
committerMauro Carvalho Chehab <m.chehab@samsung.com>2013-10-31 03:33:20 -0400
commit6dbea9f0978fc47e26aaf1fd4246e63160b778a6 (patch)
tree0e89836b1a869be3d3ffae873dcfba1533363d13
parentc6dd1ef8f88257e70d8863d8784854e3e498e02c (diff)
[media] Add support for KWorld UB435-Q V2
This patch adds support for the UB435-Q V2. You might need to use the device once with the Windows driver provided by KWorld in order to permanently reprogram the device descriptors. Thanks to Jarod Wilson for the initial attempt at adding support for this device. [m.chehab@samsung.com: Fixed Whitespace mangling, Coding Style and improved the error handling at DVB attach] Signed-off-by: Jean-Francois Thibert <jfthibert@google.com> Reviewed-by: Frank Schäfer <fschaefer.oss@googlemail.com> Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com>
-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