diff options
author | Jarod Wilson <jarod@redhat.com> | 2010-03-07 15:55:43 -0500 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@redhat.com> | 2010-08-02 15:43:17 -0400 |
commit | 7e48b30af033076c85ab48a8306b5588faf5fb4b (patch) | |
tree | 42ea19c832b2bcca5c1f888198628684b06232c5 /drivers/media/video/em28xx/em28xx-dvb.c | |
parent | 1c488ea9d52032d07dd320d31e0720239c93dd64 (diff) |
V4L/DVB: dvb: add support for kworld 340u and ub435-q to em28xx-dvb
This adds support for the KWorld PlusTV 340U and KWorld UB345-Q ATSC
sticks, which are really the same device. The sticks have an eMPIA
em2870 usb bridge chipset, an LG Electronics LGDT3304 ATSC/QAM
demodulator and an NXP TDA18271HD tuner -- early versions of the 340U
have a a TDA18271HD/C1, later models and the UB435-Q have a C2.
The stick has been tested succesfully with both VSB_8 and QAM_256 signals.
Its using lgdt3304 support added to the lgdt3305 driver by a prior patch,
rather than the current lgdt3304 driver, as its severely lacking in
functionality by comparison (see said patch for details).
Signed-off-by: Jarod Wilson <jarod@redhat.com>
Signed-off-by: Michael Krufky <mkrufky@kernellabs.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'drivers/media/video/em28xx/em28xx-dvb.c')
-rw-r--r-- | drivers/media/video/em28xx/em28xx-dvb.c | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/drivers/media/video/em28xx/em28xx-dvb.c b/drivers/media/video/em28xx/em28xx-dvb.c index cf1d8c3655fc..3ac8d3025fea 100644 --- a/drivers/media/video/em28xx/em28xx-dvb.c +++ b/drivers/media/video/em28xx/em28xx-dvb.c | |||
@@ -30,11 +30,13 @@ | |||
30 | #include "tuner-simple.h" | 30 | #include "tuner-simple.h" |
31 | 31 | ||
32 | #include "lgdt330x.h" | 32 | #include "lgdt330x.h" |
33 | #include "lgdt3305.h" | ||
33 | #include "zl10353.h" | 34 | #include "zl10353.h" |
34 | #include "s5h1409.h" | 35 | #include "s5h1409.h" |
35 | #include "mt352.h" | 36 | #include "mt352.h" |
36 | #include "mt352_priv.h" /* FIXME */ | 37 | #include "mt352_priv.h" /* FIXME */ |
37 | #include "tda1002x.h" | 38 | #include "tda1002x.h" |
39 | #include "tda18271.h" | ||
38 | 40 | ||
39 | MODULE_DESCRIPTION("driver for em28xx based DVB cards"); | 41 | MODULE_DESCRIPTION("driver for em28xx based DVB cards"); |
40 | MODULE_AUTHOR("Mauro Carvalho Chehab <mchehab@infradead.org>"); | 42 | MODULE_AUTHOR("Mauro Carvalho Chehab <mchehab@infradead.org>"); |
@@ -231,6 +233,18 @@ static struct lgdt330x_config em2880_lgdt3303_dev = { | |||
231 | .demod_chip = LGDT3303, | 233 | .demod_chip = LGDT3303, |
232 | }; | 234 | }; |
233 | 235 | ||
236 | static struct lgdt3305_config em2870_lgdt3304_dev = { | ||
237 | .i2c_addr = 0x0e, | ||
238 | .demod_chip = LGDT3304, | ||
239 | .spectral_inversion = 1, | ||
240 | .deny_i2c_rptr = 1, | ||
241 | .mpeg_mode = LGDT3305_MPEG_PARALLEL, | ||
242 | .tpclk_edge = LGDT3305_TPCLK_FALLING_EDGE, | ||
243 | .tpvalid_polarity = LGDT3305_TP_VALID_HIGH, | ||
244 | .vsb_if_khz = 3250, | ||
245 | .qam_if_khz = 4000, | ||
246 | }; | ||
247 | |||
234 | static struct zl10353_config em28xx_zl10353_with_xc3028 = { | 248 | static struct zl10353_config em28xx_zl10353_with_xc3028 = { |
235 | .demod_address = (0x1e >> 1), | 249 | .demod_address = (0x1e >> 1), |
236 | .no_tuner = 1, | 250 | .no_tuner = 1, |
@@ -247,6 +261,17 @@ static struct s5h1409_config em28xx_s5h1409_with_xc3028 = { | |||
247 | .mpeg_timing = S5H1409_MPEGTIMING_CONTINOUS_NONINVERTING_CLOCK | 261 | .mpeg_timing = S5H1409_MPEGTIMING_CONTINOUS_NONINVERTING_CLOCK |
248 | }; | 262 | }; |
249 | 263 | ||
264 | static struct tda18271_std_map kworld_a340_std_map = { | ||
265 | .atsc_6 = { .if_freq = 3250, .agc_mode = 3, .std = 0, | ||
266 | .if_lvl = 1, .rfagc_top = 0x37, }, | ||
267 | .qam_6 = { .if_freq = 4000, .agc_mode = 3, .std = 1, | ||
268 | .if_lvl = 1, .rfagc_top = 0x37, }, | ||
269 | }; | ||
270 | |||
271 | static struct tda18271_config kworld_a340_config = { | ||
272 | .std_map = &kworld_a340_std_map, | ||
273 | }; | ||
274 | |||
250 | static struct zl10353_config em28xx_zl10353_xc3028_no_i2c_gate = { | 275 | static struct zl10353_config em28xx_zl10353_xc3028_no_i2c_gate = { |
251 | .demod_address = (0x1e >> 1), | 276 | .demod_address = (0x1e >> 1), |
252 | .no_tuner = 1, | 277 | .no_tuner = 1, |
@@ -572,6 +597,14 @@ static int dvb_init(struct em28xx *dev) | |||
572 | } | 597 | } |
573 | } | 598 | } |
574 | break; | 599 | break; |
600 | case EM2870_BOARD_KWORLD_A340: | ||
601 | dvb->frontend = dvb_attach(lgdt3305_attach, | ||
602 | &em2870_lgdt3304_dev, | ||
603 | &dev->i2c_adap); | ||
604 | if (dvb->frontend != NULL) | ||
605 | dvb_attach(tda18271_attach, dvb->frontend, 0x60, | ||
606 | &dev->i2c_adap, &kworld_a340_config); | ||
607 | break; | ||
575 | default: | 608 | default: |
576 | em28xx_errdev("/2: The frontend of your DVB/ATSC card" | 609 | em28xx_errdev("/2: The frontend of your DVB/ATSC card" |
577 | " isn't supported yet\n"); | 610 | " isn't supported yet\n"); |