aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Documentation/video4linux/CARDLIST.cx881
-rw-r--r--drivers/media/video/cx88/cx88-cards.c27
-rw-r--r--drivers/media/video/cx88/cx88-dvb.c69
-rw-r--r--drivers/media/video/cx88/cx88.h1
4 files changed, 98 insertions, 0 deletions
diff --git a/Documentation/video4linux/CARDLIST.cx88 b/Documentation/video4linux/CARDLIST.cx88
index bc5593bd9704..79c166a7f230 100644
--- a/Documentation/video4linux/CARDLIST.cx88
+++ b/Documentation/video4linux/CARDLIST.cx88
@@ -57,3 +57,4 @@
57 56 -> Hauppauge WinTV-HVR1300 DVB-T/Hybrid MPEG Encoder [0070:9600,0070:9601,0070:9602] 57 56 -> Hauppauge WinTV-HVR1300 DVB-T/Hybrid MPEG Encoder [0070:9600,0070:9601,0070:9602]
58 57 -> ADS Tech Instant Video PCI [1421:0390] 58 57 -> ADS Tech Instant Video PCI [1421:0390]
59 58 -> Pinnacle PCTV HD 800i [11bd:0051] 59 58 -> Pinnacle PCTV HD 800i [11bd:0051]
60 59 -> DVICO HDTV5 PCI Nano [18ac:d530]
diff --git a/drivers/media/video/cx88/cx88-cards.c b/drivers/media/video/cx88/cx88-cards.c
index 8c9a8adf52de..23b58bc9cf2b 100644
--- a/drivers/media/video/cx88/cx88-cards.c
+++ b/drivers/media/video/cx88/cx88-cards.c
@@ -1401,6 +1401,29 @@ static const struct cx88_board cx88_boards[] = {
1401 }}, 1401 }},
1402 .mpeg = CX88_MPEG_DVB, 1402 .mpeg = CX88_MPEG_DVB,
1403 }, 1403 },
1404 [CX88_BOARD_DVICO_FUSIONHDTV_5_PCI_NANO] = {
1405 .name = "DVICO HDTV5 PCI Nano",
1406 .tuner_type = TUNER_ABSENT,
1407 .radio_type = UNSET,
1408 .tuner_addr = ADDR_UNSET,
1409 .radio_addr = ADDR_UNSET,
1410 .input = {{
1411 .type = CX88_VMUX_TELEVISION,
1412 .vmux = 0,
1413 .gpio0 = 0x000027df, /* Unconfirmed */
1414 }, {
1415 .type = CX88_VMUX_COMPOSITE1,
1416 .vmux = 1,
1417 .gpio0 = 0x000027df, /* Unconfirmed */
1418 .audioroute = 1,
1419 }, {
1420 .type = CX88_VMUX_SVIDEO,
1421 .vmux = 2,
1422 .gpio0 = 0x000027df, /* Unconfirmed */
1423 .audioroute = 1,
1424 } },
1425 .mpeg = CX88_MPEG_DVB,
1426 },
1404}; 1427};
1405 1428
1406/* ------------------------------------------------------------------ */ 1429/* ------------------------------------------------------------------ */
@@ -1714,6 +1737,10 @@ static const struct cx88_subid cx88_subids[] = {
1714 .subvendor = 0x11bd, 1737 .subvendor = 0x11bd,
1715 .subdevice = 0x0051, 1738 .subdevice = 0x0051,
1716 .card = CX88_BOARD_PINNACLE_PCTV_HD_800i, 1739 .card = CX88_BOARD_PINNACLE_PCTV_HD_800i,
1740 }, {
1741 .subvendor = 0x18ac,
1742 .subdevice = 0xd530,
1743 .card = CX88_BOARD_DVICO_FUSIONHDTV_5_PCI_NANO,
1717 }, 1744 },
1718}; 1745};
1719 1746
diff --git a/drivers/media/video/cx88/cx88-dvb.c b/drivers/media/video/cx88/cx88-dvb.c
index fa21666966e6..735376060df2 100644
--- a/drivers/media/video/cx88/cx88-dvb.c
+++ b/drivers/media/video/cx88/cx88-dvb.c
@@ -45,6 +45,8 @@
45#include "nxt200x.h" 45#include "nxt200x.h"
46#include "cx24123.h" 46#include "cx24123.h"
47#include "isl6421.h" 47#include "isl6421.h"
48#include "tuner-xc2028.h"
49#include "tuner-xc2028-types.h"
48 50
49MODULE_DESCRIPTION("driver for cx2388x based DVB cards"); 51MODULE_DESCRIPTION("driver for cx2388x based DVB cards");
50MODULE_AUTHOR("Chris Pascoe <c.pascoe@itee.uq.edu.au>"); 52MODULE_AUTHOR("Chris Pascoe <c.pascoe@itee.uq.edu.au>");
@@ -357,6 +359,40 @@ static int geniatech_dvbs_set_voltage(struct dvb_frontend *fe,
357 return 0; 359 return 0;
358} 360}
359 361
362static int cx88_xc3028_callback(void *ptr, int command, int arg)
363{
364 struct cx88_core *core = ptr;
365
366 switch (command) {
367 case XC2028_TUNER_RESET:
368 /* Send the tuner in then out of reset */
369 dprintk(1, "%s: XC2028_TUNER_RESET %d\n", __FUNCTION__, arg);
370
371 switch (core->boardnr) {
372 case CX88_BOARD_DVICO_FUSIONHDTV_5_PCI_NANO:
373 /* GPIO-4 xc3028 tuner */
374
375 cx_set(MO_GP0_IO, 0x00001000);
376 cx_clear(MO_GP0_IO, 0x00000010);
377 msleep(100);
378 cx_set(MO_GP0_IO, 0x00000010);
379 msleep(100);
380 break;
381 }
382
383 break;
384 case XC2028_RESET_CLK:
385 dprintk(1, "%s: XC2028_RESET_CLK %d\n", __FUNCTION__, arg);
386 break;
387 default:
388 dprintk(1, "%s: unknown command %d, arg %d\n", __FUNCTION__,
389 command, arg);
390 return -EINVAL;
391 }
392
393 return 0;
394}
395
360static struct cx24123_config geniatech_dvbs_config = { 396static struct cx24123_config geniatech_dvbs_config = {
361 .demod_address = 0x55, 397 .demod_address = 0x55,
362 .set_ts_params = cx24123_set_ts_param, 398 .set_ts_params = cx24123_set_ts_param,
@@ -383,6 +419,15 @@ static struct s5h1409_config pinnacle_pctv_hd_800i_config = {
383 .mpeg_timing = S5H1409_MPEGTIMING_NONCONTINOUS_NONINVERTING_CLOCK, 419 .mpeg_timing = S5H1409_MPEGTIMING_NONCONTINOUS_NONINVERTING_CLOCK,
384}; 420};
385 421
422static struct s5h1409_config dvico_hdtv5_pci_nano_config = {
423 .demod_address = 0x32 >> 1,
424 .output_mode = S5H1409_SERIAL_OUTPUT,
425 .gpio = S5H1409_GPIO_OFF,
426 .inversion = S5H1409_INVERSION_OFF,
427 .status_mode = S5H1409_DEMODLOCKING,
428 .mpeg_timing = S5H1409_MPEGTIMING_CONTINOUS_NONINVERTING_CLOCK,
429};
430
386static struct xc5000_config pinnacle_pctv_hd_800i_tuner_config = { 431static struct xc5000_config pinnacle_pctv_hd_800i_tuner_config = {
387 .i2c_address = 0x64, 432 .i2c_address = 0x64,
388 .if_khz = 5380, 433 .if_khz = 5380,
@@ -658,6 +703,30 @@ static int dvb_register(struct cx8802_dev *dev)
658 &pinnacle_pctv_hd_800i_tuner_config); 703 &pinnacle_pctv_hd_800i_tuner_config);
659 } 704 }
660 break; 705 break;
706 case CX88_BOARD_DVICO_FUSIONHDTV_5_PCI_NANO:
707 dev->dvb.frontend = dvb_attach(s5h1409_attach,
708 &dvico_hdtv5_pci_nano_config,
709 &dev->core->i2c_adap);
710 if (dev->dvb.frontend != NULL) {
711 struct dvb_frontend *fe;
712 struct xc2028_config cfg = {
713 .i2c_adap = &dev->core->i2c_adap,
714 .i2c_addr = 0x61,
715 .video_dev = dev->core,
716 .callback = cx88_xc3028_callback,
717 };
718 static struct xc2028_ctrl ctl = {
719 .fname = "xc3028-v27.fw",
720 .max_len = 64,
721 .scode_table = OREN538,
722 };
723
724 fe = dvb_attach(xc2028_attach,
725 dev->dvb.frontend, &cfg);
726 if (fe != NULL && fe->ops.tuner_ops.set_config != NULL)
727 fe->ops.tuner_ops.set_config(fe, &ctl);
728 }
729 break;
661 default: 730 default:
662 printk(KERN_ERR "%s/2: The frontend of your DVB/ATSC card isn't supported yet\n", 731 printk(KERN_ERR "%s/2: The frontend of your DVB/ATSC card isn't supported yet\n",
663 dev->core->name); 732 dev->core->name);
diff --git a/drivers/media/video/cx88/cx88.h b/drivers/media/video/cx88/cx88.h
index 37e6d2e4002f..8121bd07a88a 100644
--- a/drivers/media/video/cx88/cx88.h
+++ b/drivers/media/video/cx88/cx88.h
@@ -211,6 +211,7 @@ extern struct sram_channel cx88_sram_channels[];
211#define CX88_BOARD_HAUPPAUGE_HVR1300 56 211#define CX88_BOARD_HAUPPAUGE_HVR1300 56
212#define CX88_BOARD_ADSTECH_PTV_390 57 212#define CX88_BOARD_ADSTECH_PTV_390 57
213#define CX88_BOARD_PINNACLE_PCTV_HD_800i 58 213#define CX88_BOARD_PINNACLE_PCTV_HD_800i 58
214#define CX88_BOARD_DVICO_FUSIONHDTV_5_PCI_NANO 59
214 215
215enum cx88_itype { 216enum cx88_itype {
216 CX88_VMUX_COMPOSITE1 = 1, 217 CX88_VMUX_COMPOSITE1 = 1,