[media] em28xx: add support for Kworld UB435-Q version 3
This device is close to Kworld UB435-Q, but it uses a different tuner. Add support for it. Tested with both 8VSB and 256QAM modulations. Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com>
This commit is contained in:
parent
6cff36b23b
commit
02bc1f5574
|
@ -91,3 +91,4 @@
|
|||
90 -> KWorld USB ATSC TV Stick UB435-Q V2 (em2874) [1b80:e346]
|
||||
91 -> SpeedLink Vicious And Devine Laplace webcam (em2765) [1ae7:9003,1ae7:9004]
|
||||
92 -> PCTV DVB-S2 Stick (461e) (em28178)
|
||||
93 -> KWorld USB ATSC TV Stick UB435-Q V3 (em2874) [1b80:e34c]
|
||||
|
|
|
@ -53,6 +53,7 @@ config VIDEO_EM28XX_DVB
|
|||
select DVB_MB86A20S if MEDIA_SUBDRV_AUTOSELECT
|
||||
select MEDIA_TUNER_QT1010 if MEDIA_SUBDRV_AUTOSELECT
|
||||
select MEDIA_TUNER_TDA18271 if MEDIA_SUBDRV_AUTOSELECT
|
||||
select MEDIA_TUNER_TDA18212 if MEDIA_SUBDRV_AUTOSELECT
|
||||
select DVB_M88DS3103 if MEDIA_SUBDRV_AUTOSELECT
|
||||
select MEDIA_TUNER_M88TS2022 if MEDIA_SUBDRV_AUTOSELECT
|
||||
select DVB_DRX39XYJ if MEDIA_SUBDRV_AUTOSELECT
|
||||
|
|
|
@ -189,6 +189,14 @@ static struct em28xx_reg_seq kworld_a340_digital[] = {
|
|||
{ -1, -1, -1, -1},
|
||||
};
|
||||
|
||||
static struct em28xx_reg_seq kworld_ub435q_v3_digital[] = {
|
||||
{EM2874_R80_GPIO_P0_CTRL, 0xff, 0xff, 100},
|
||||
{EM2874_R80_GPIO_P0_CTRL, 0xfe, 0xff, 100},
|
||||
{EM2874_R80_GPIO_P0_CTRL, 0xbe, 0xff, 100},
|
||||
{EM2874_R80_GPIO_P0_CTRL, 0xfe, 0xff, 100},
|
||||
{ -1, -1, -1, -1},
|
||||
};
|
||||
|
||||
/* Pinnacle Hybrid Pro eb1a:2881 */
|
||||
static struct em28xx_reg_seq pinnacle_hybrid_pro_analog[] = {
|
||||
{EM2820_R08_GPIO_CTRL, 0xfd, ~EM_GPIO_4, 10},
|
||||
|
@ -2139,6 +2147,19 @@ struct em28xx_board em28xx_boards[] = {
|
|||
.tuner_gpio = default_tuner_gpio,
|
||||
.def_i2c_bus = 1,
|
||||
},
|
||||
/*
|
||||
* 1b80:e34c KWorld USB ATSC TV Stick UB435-Q V3
|
||||
* Empia EM2874B + LG DT3305 + NXP TDA18271HDC2
|
||||
*/
|
||||
[EM2874_BOARD_KWORLD_UB435Q_V3] = {
|
||||
.name = "KWorld USB ATSC TV Stick UB435-Q V3",
|
||||
.tuner_type = TUNER_ABSENT,
|
||||
.has_dvb = 1,
|
||||
.tuner_gpio = kworld_ub435q_v3_digital,
|
||||
.def_i2c_bus = 1,
|
||||
.i2c_speed = EM28XX_I2C_CLK_WAIT_ENABLE |
|
||||
EM28XX_I2C_FREQ_100_KHZ,
|
||||
},
|
||||
[EM2874_BOARD_PCTV_HD_MINI_80E] = {
|
||||
.name = "Pinnacle PCTV HD Mini",
|
||||
.tuner_type = TUNER_ABSENT,
|
||||
|
@ -2325,6 +2346,8 @@ struct usb_device_id em28xx_id_table[] = {
|
|||
.driver_info = EM2870_BOARD_KWORLD_A340 },
|
||||
{ USB_DEVICE(0x1b80, 0xe346),
|
||||
.driver_info = EM2874_BOARD_KWORLD_UB435Q_V2 },
|
||||
{ USB_DEVICE(0x1b80, 0xe34c),
|
||||
.driver_info = EM2874_BOARD_KWORLD_UB435Q_V3 },
|
||||
{ USB_DEVICE(0x2013, 0x024f),
|
||||
.driver_info = EM28174_BOARD_PCTV_290E },
|
||||
{ USB_DEVICE(0x2013, 0x024c),
|
||||
|
|
|
@ -49,6 +49,7 @@
|
|||
#include "tda18271c2dd.h"
|
||||
#include "drxk.h"
|
||||
#include "tda10071.h"
|
||||
#include "tda18212.h"
|
||||
#include "a8293.h"
|
||||
#include "qt1010.h"
|
||||
#include "mb86a20s.h"
|
||||
|
@ -320,6 +321,18 @@ static struct lgdt3305_config em2874_lgdt3305_dev = {
|
|||
.qam_if_khz = 4000,
|
||||
};
|
||||
|
||||
static struct lgdt3305_config em2874_lgdt3305_nogate_dev = {
|
||||
.i2c_addr = 0x0e,
|
||||
.demod_chip = LGDT3305,
|
||||
.spectral_inversion = 1,
|
||||
.deny_i2c_rptr = 1,
|
||||
.mpeg_mode = LGDT3305_MPEG_SERIAL,
|
||||
.tpclk_edge = LGDT3305_TPCLK_FALLING_EDGE,
|
||||
.tpvalid_polarity = LGDT3305_TP_VALID_HIGH,
|
||||
.vsb_if_khz = 3600,
|
||||
.qam_if_khz = 3600,
|
||||
};
|
||||
|
||||
static struct s921_config sharp_isdbt = {
|
||||
.demod_address = 0x30 >> 1
|
||||
};
|
||||
|
@ -356,6 +369,12 @@ static struct tda18271_config kworld_ub435q_v2_config = {
|
|||
.gate = TDA18271_GATE_DIGITAL,
|
||||
};
|
||||
|
||||
static struct tda18212_config kworld_ub435q_v3_config = {
|
||||
.i2c_address = 0x60,
|
||||
.if_atsc_vsb = 3600,
|
||||
.if_atsc_qam = 3600,
|
||||
};
|
||||
|
||||
static struct zl10353_config em28xx_zl10353_xc3028_no_i2c_gate = {
|
||||
.demod_address = (0x1e >> 1),
|
||||
.no_tuner = 1,
|
||||
|
@ -1389,6 +1408,23 @@ static int em28xx_dvb_init(struct em28xx *dev)
|
|||
goto out_free;
|
||||
}
|
||||
break;
|
||||
case EM2874_BOARD_KWORLD_UB435Q_V3:
|
||||
dvb->fe[0] = dvb_attach(lgdt3305_attach,
|
||||
&em2874_lgdt3305_nogate_dev,
|
||||
&dev->i2c_adap[dev->def_i2c_bus]);
|
||||
if (!dvb->fe[0]) {
|
||||
result = -EINVAL;
|
||||
goto out_free;
|
||||
}
|
||||
|
||||
/* Attach the demodulator. */
|
||||
if (!dvb_attach(tda18212_attach, dvb->fe[0],
|
||||
&dev->i2c_adap[dev->def_i2c_bus],
|
||||
&kworld_ub435q_v3_config)) {
|
||||
result = -EINVAL;
|
||||
goto out_free;
|
||||
}
|
||||
break;
|
||||
case EM2874_BOARD_PCTV_HD_MINI_80E:
|
||||
dvb->fe[0] = dvb_attach(drx39xxj_attach, &dev->i2c_adap[dev->def_i2c_bus]);
|
||||
if (dvb->fe[0] != NULL) {
|
||||
|
|
|
@ -138,6 +138,7 @@
|
|||
#define EM2874_BOARD_KWORLD_UB435Q_V2 90
|
||||
#define EM2765_BOARD_SPEEDLINK_VAD_LAPLACE 91
|
||||
#define EM28178_BOARD_PCTV_461E 92
|
||||
#define EM2874_BOARD_KWORLD_UB435Q_V3 93
|
||||
|
||||
/* Limits minimum and default number of buffers */
|
||||
#define EM28XX_MIN_BUF 4
|
||||
|
|
Loading…
Reference in New Issue