aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/video/cx88/cx88-cards.c
diff options
context:
space:
mode:
authorChris Pascoe <c.pascoe@itee.uq.edu.au>2006-02-28 06:34:59 -0500
committerMauro Carvalho Chehab <mchehab@infradead.org>2006-03-08 09:36:50 -0500
commit780dfef37e2c941985b708f67aa0074edc922bea (patch)
treec7db2fd63acfce369d2af871183da2cf0614db9a /drivers/media/video/cx88/cx88-cards.c
parentdb5d91eb36e1cc9d46016d1d44874376cfabf274 (diff)
V4L/DVB (3408): DViCO FusionHDTV DVB-T Hybrid and ZL10353-based FusionHDTV DVB-T Plus support
Add support for the FE6600 tuner used on the DVB-T Hybrid board. Add support for the Zarlink ZL10353 DVB-T demodulator, which supersedes the MT352, used on the DViCO FusionHDTV DVB-T Hybrid and later model Plus boards. Signed-off-by: Chris Pascoe <c.pascoe@itee.uq.edu.au> Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
Diffstat (limited to 'drivers/media/video/cx88/cx88-cards.c')
-rw-r--r--drivers/media/video/cx88/cx88-cards.c67
1 files changed, 67 insertions, 0 deletions
diff --git a/drivers/media/video/cx88/cx88-cards.c b/drivers/media/video/cx88/cx88-cards.c
index 44e27dc646a..d91e5b3a64e 100644
--- a/drivers/media/video/cx88/cx88-cards.c
+++ b/drivers/media/video/cx88/cx88-cards.c
@@ -1071,6 +1071,27 @@ struct cx88_board cx88_boards[] = {
1071 .gpio2 = 0x00ff, 1071 .gpio2 = 0x00ff,
1072 }, 1072 },
1073 }, 1073 },
1074 [CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_HYBRID] = {
1075 .name = "DViCO FusionHDTV DVB-T Hybrid",
1076 .tuner_type = TUNER_FE6600,
1077 .radio_type = UNSET,
1078 .tuner_addr = ADDR_UNSET,
1079 .radio_addr = ADDR_UNSET,
1080 .input = {{
1081 .type = CX88_VMUX_TELEVISION,
1082 .vmux = 0,
1083 .gpio0 = 0x0000a75f,
1084 },{
1085 .type = CX88_VMUX_COMPOSITE1,
1086 .vmux = 1,
1087 .gpio0 = 0x0000a75b,
1088 },{
1089 .type = CX88_VMUX_SVIDEO,
1090 .vmux = 2,
1091 .gpio0 = 0x0000a75b,
1092 }},
1093 .dvb = 1,
1094 },
1074 1095
1075}; 1096};
1076const unsigned int cx88_bcount = ARRAY_SIZE(cx88_boards); 1097const unsigned int cx88_bcount = ARRAY_SIZE(cx88_boards);
@@ -1281,6 +1302,14 @@ struct cx88_subid cx88_subids[] = {
1281 .subvendor = 0x17de, 1302 .subvendor = 0x17de,
1282 .subdevice = 0x0840, 1303 .subdevice = 0x0840,
1283 .card = CX88_BOARD_KWORLD_HARDWARE_MPEG_TV_XPERT, 1304 .card = CX88_BOARD_KWORLD_HARDWARE_MPEG_TV_XPERT,
1305 },{
1306 .subvendor = 0x18ac,
1307 .subdevice = 0xdb40,
1308 .card = CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_HYBRID,
1309 },{
1310 .subvendor = 0x18ac,
1311 .subdevice = 0xdb44,
1312 .card = CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_HYBRID,
1284 }, 1313 },
1285}; 1314};
1286const unsigned int cx88_idcount = ARRAY_SIZE(cx88_subids); 1315const unsigned int cx88_idcount = ARRAY_SIZE(cx88_subids);
@@ -1400,6 +1429,40 @@ static void gdi_eeprom(struct cx88_core *core, u8 *eeprom_data)
1400} 1429}
1401 1430
1402/* ----------------------------------------------------------------------- */ 1431/* ----------------------------------------------------------------------- */
1432/* some DViCO specific stuff */
1433
1434static void dvico_fusionhdtv_hybrid_init(struct cx88_core *core)
1435{
1436 struct i2c_msg msg = { .addr = 0x45, .flags = 0 };
1437 int i, err;
1438 u8 init_bufs[13][5] = {
1439 { 0x10, 0x00, 0x20, 0x01, 0x03 },
1440 { 0x10, 0x10, 0x01, 0x00, 0x21 },
1441 { 0x10, 0x10, 0x10, 0x00, 0xCA },
1442 { 0x10, 0x10, 0x12, 0x00, 0x08 },
1443 { 0x10, 0x10, 0x13, 0x00, 0x0A },
1444 { 0x10, 0x10, 0x16, 0x01, 0xC0 },
1445 { 0x10, 0x10, 0x22, 0x01, 0x3D },
1446 { 0x10, 0x10, 0x73, 0x01, 0x2E },
1447 { 0x10, 0x10, 0x72, 0x00, 0xC5 },
1448 { 0x10, 0x10, 0x71, 0x01, 0x97 },
1449 { 0x10, 0x10, 0x70, 0x00, 0x0F },
1450 { 0x10, 0x10, 0xB0, 0x00, 0x01 },
1451 { 0x03, 0x0C },
1452 };
1453
1454 for (i = 0; i < 13; i++) {
1455 msg.buf = init_bufs[i];
1456 msg.len = (i != 12 ? 5 : 2);
1457 err = i2c_transfer(&core->i2c_adap, &msg, 1);
1458 if (err != 1) {
1459 printk("dvico_fusionhdtv_hybrid_init buf %d failed (err = %d)!\n", i, err);
1460 return;
1461 }
1462 }
1463}
1464
1465/* ----------------------------------------------------------------------- */
1403 1466
1404void cx88_card_list(struct cx88_core *core, struct pci_dev *pci) 1467void cx88_card_list(struct cx88_core *core, struct pci_dev *pci)
1405{ 1468{
@@ -1465,11 +1528,15 @@ void cx88_card_setup(struct cx88_core *core)
1465 case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T1: 1528 case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T1:
1466 case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PLUS: 1529 case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PLUS:
1467 case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_DUAL: 1530 case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_DUAL:
1531 case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_HYBRID:
1468 /* GPIO0:0 is hooked to mt352 reset pin */ 1532 /* GPIO0:0 is hooked to mt352 reset pin */
1469 cx_set(MO_GP0_IO, 0x00000101); 1533 cx_set(MO_GP0_IO, 0x00000101);
1470 cx_clear(MO_GP0_IO, 0x00000001); 1534 cx_clear(MO_GP0_IO, 0x00000001);
1471 msleep(1); 1535 msleep(1);
1472 cx_set(MO_GP0_IO, 0x00000101); 1536 cx_set(MO_GP0_IO, 0x00000101);
1537 if (0 == core->i2c_rc &&
1538 core->board == CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_HYBRID)
1539 dvico_fusionhdtv_hybrid_init(core);
1473 break; 1540 break;
1474 case CX88_BOARD_KWORLD_DVB_T: 1541 case CX88_BOARD_KWORLD_DVB_T:
1475 case CX88_BOARD_DNTV_LIVE_DVB_T: 1542 case CX88_BOARD_DNTV_LIVE_DVB_T: