diff options
Diffstat (limited to 'drivers/media/pci/cx23885/cx23885-dvb.c')
-rw-r--r-- | drivers/media/pci/cx23885/cx23885-dvb.c | 66 |
1 files changed, 51 insertions, 15 deletions
diff --git a/drivers/media/pci/cx23885/cx23885-dvb.c b/drivers/media/pci/cx23885/cx23885-dvb.c index 2f5b902e63ae..9c5ed10b2c5e 100644 --- a/drivers/media/pci/cx23885/cx23885-dvb.c +++ b/drivers/media/pci/cx23885/cx23885-dvb.c | |||
@@ -57,6 +57,7 @@ | |||
57 | #include "netup-init.h" | 57 | #include "netup-init.h" |
58 | #include "lgdt3305.h" | 58 | #include "lgdt3305.h" |
59 | #include "atbm8830.h" | 59 | #include "atbm8830.h" |
60 | #include "ts2020.h" | ||
60 | #include "ds3000.h" | 61 | #include "ds3000.h" |
61 | #include "cx23885-f300.h" | 62 | #include "cx23885-f300.h" |
62 | #include "altera-ci.h" | 63 | #include "altera-ci.h" |
@@ -66,6 +67,8 @@ | |||
66 | #include "stv090x.h" | 67 | #include "stv090x.h" |
67 | #include "stb6100.h" | 68 | #include "stb6100.h" |
68 | #include "stb6100_cfg.h" | 69 | #include "stb6100_cfg.h" |
70 | #include "tda10071.h" | ||
71 | #include "a8293.h" | ||
69 | 72 | ||
70 | static unsigned int debug; | 73 | static unsigned int debug; |
71 | 74 | ||
@@ -469,6 +472,11 @@ static struct ds3000_config tevii_ds3000_config = { | |||
469 | .demod_address = 0x68, | 472 | .demod_address = 0x68, |
470 | }; | 473 | }; |
471 | 474 | ||
475 | static struct ts2020_config tevii_ts2020_config = { | ||
476 | .tuner_address = 0x60, | ||
477 | .clk_out_div = 1, | ||
478 | }; | ||
479 | |||
472 | static struct cx24116_config dvbworld_cx24116_config = { | 480 | static struct cx24116_config dvbworld_cx24116_config = { |
473 | .demod_address = 0x05, | 481 | .demod_address = 0x05, |
474 | }; | 482 | }; |
@@ -493,20 +501,20 @@ static struct xc5000_config mygica_x8506_xc5000_config = { | |||
493 | }; | 501 | }; |
494 | 502 | ||
495 | static struct stv090x_config prof_8000_stv090x_config = { | 503 | static struct stv090x_config prof_8000_stv090x_config = { |
496 | .device = STV0903, | 504 | .device = STV0903, |
497 | .demod_mode = STV090x_SINGLE, | 505 | .demod_mode = STV090x_SINGLE, |
498 | .clk_mode = STV090x_CLK_EXT, | 506 | .clk_mode = STV090x_CLK_EXT, |
499 | .xtal = 27000000, | 507 | .xtal = 27000000, |
500 | .address = 0x6A, | 508 | .address = 0x6A, |
501 | .ts1_mode = STV090x_TSMODE_PARALLEL_PUNCTURED, | 509 | .ts1_mode = STV090x_TSMODE_PARALLEL_PUNCTURED, |
502 | .repeater_level = STV090x_RPTLEVEL_64, | 510 | .repeater_level = STV090x_RPTLEVEL_64, |
503 | .adc1_range = STV090x_ADC_2Vpp, | 511 | .adc1_range = STV090x_ADC_2Vpp, |
504 | .diseqc_envelope_mode = false, | 512 | .diseqc_envelope_mode = false, |
505 | 513 | ||
506 | .tuner_get_frequency = stb6100_get_frequency, | 514 | .tuner_get_frequency = stb6100_get_frequency, |
507 | .tuner_set_frequency = stb6100_set_frequency, | 515 | .tuner_set_frequency = stb6100_set_frequency, |
508 | .tuner_set_bandwidth = stb6100_set_bandwidth, | 516 | .tuner_set_bandwidth = stb6100_set_bandwidth, |
509 | .tuner_get_bandwidth = stb6100_get_bandwidth, | 517 | .tuner_get_bandwidth = stb6100_get_bandwidth, |
510 | }; | 518 | }; |
511 | 519 | ||
512 | static struct stb6100_config prof_8000_stb6100_config = { | 520 | static struct stb6100_config prof_8000_stb6100_config = { |
@@ -659,6 +667,20 @@ static struct mt2063_config terratec_mt2063_config[] = { | |||
659 | }, | 667 | }, |
660 | }; | 668 | }; |
661 | 669 | ||
670 | static const struct tda10071_config hauppauge_tda10071_config = { | ||
671 | .demod_i2c_addr = 0x05, | ||
672 | .tuner_i2c_addr = 0x54, | ||
673 | .i2c_wr_max = 64, | ||
674 | .ts_mode = TDA10071_TS_SERIAL, | ||
675 | .spec_inv = 0, | ||
676 | .xtal = 40444000, /* 40.444 MHz */ | ||
677 | .pll_multiplier = 20, | ||
678 | }; | ||
679 | |||
680 | static const struct a8293_config hauppauge_a8293_config = { | ||
681 | .i2c_addr = 0x0b, | ||
682 | }; | ||
683 | |||
662 | static int netup_altera_fpga_rw(void *device, int flag, int data, int read) | 684 | static int netup_altera_fpga_rw(void *device, int flag, int data, int read) |
663 | { | 685 | { |
664 | struct cx23885_dev *dev = (struct cx23885_dev *)device; | 686 | struct cx23885_dev *dev = (struct cx23885_dev *)device; |
@@ -1011,8 +1033,11 @@ static int dvb_register(struct cx23885_tsport *port) | |||
1011 | fe0->dvb.frontend = dvb_attach(ds3000_attach, | 1033 | fe0->dvb.frontend = dvb_attach(ds3000_attach, |
1012 | &tevii_ds3000_config, | 1034 | &tevii_ds3000_config, |
1013 | &i2c_bus->i2c_adap); | 1035 | &i2c_bus->i2c_adap); |
1014 | if (fe0->dvb.frontend != NULL) | 1036 | if (fe0->dvb.frontend != NULL) { |
1037 | dvb_attach(ts2020_attach, fe0->dvb.frontend, | ||
1038 | &tevii_ts2020_config, &i2c_bus->i2c_adap); | ||
1015 | fe0->dvb.frontend->ops.set_voltage = f300_set_voltage; | 1039 | fe0->dvb.frontend->ops.set_voltage = f300_set_voltage; |
1040 | } | ||
1016 | 1041 | ||
1017 | break; | 1042 | break; |
1018 | case CX23885_BOARD_DVBWORLD_2005: | 1043 | case CX23885_BOARD_DVBWORLD_2005: |
@@ -1242,6 +1267,17 @@ static int dvb_register(struct cx23885_tsport *port) | |||
1242 | fe0->dvb.frontend->ops.set_voltage = p8000_set_voltage; | 1267 | fe0->dvb.frontend->ops.set_voltage = p8000_set_voltage; |
1243 | } | 1268 | } |
1244 | break; | 1269 | break; |
1270 | case CX23885_BOARD_HAUPPAUGE_HVR4400: | ||
1271 | i2c_bus = &dev->i2c_bus[0]; | ||
1272 | fe0->dvb.frontend = dvb_attach(tda10071_attach, | ||
1273 | &hauppauge_tda10071_config, | ||
1274 | &i2c_bus->i2c_adap); | ||
1275 | if (fe0->dvb.frontend != NULL) { | ||
1276 | dvb_attach(a8293_attach, fe0->dvb.frontend, | ||
1277 | &i2c_bus->i2c_adap, | ||
1278 | &hauppauge_a8293_config); | ||
1279 | } | ||
1280 | break; | ||
1245 | default: | 1281 | default: |
1246 | printk(KERN_INFO "%s: The frontend of your DVB/ATSC card " | 1282 | printk(KERN_INFO "%s: The frontend of your DVB/ATSC card " |
1247 | " isn't supported yet\n", | 1283 | " isn't supported yet\n", |