diff options
-rw-r--r-- | drivers/media/usb/em28xx/em28xx-cards.c | 16 | ||||
-rw-r--r-- | drivers/media/usb/em28xx/em28xx-dvb.c | 34 | ||||
-rw-r--r-- | drivers/media/usb/em28xx/em28xx.h | 1 |
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 | }; |
2035 | const unsigned int em28xx_bcount = ARRAY_SIZE(em28xx_boards); | 2047 | const 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 | ||
301 | static 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 | |||
301 | static struct s921_config sharp_isdbt = { | 313 | static 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 | ||
344 | static struct tda18271_config kworld_ub435q_v2_config = { | ||
345 | .std_map = &kworld_a340_std_map, | ||
346 | .gate = TDA18271_GATE_DIGITAL, | ||
347 | }; | ||
348 | |||
332 | static struct zl10353_config em28xx_zl10353_xc3028_no_i2c_gate = { | 349 | static 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 |