diff options
author | Chris Pascoe <c.pascoe@itee.uq.edu.au> | 2006-02-28 06:34:59 -0500 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@infradead.org> | 2006-03-08 09:36:50 -0500 |
commit | 780dfef37e2c941985b708f67aa0074edc922bea (patch) | |
tree | c7db2fd63acfce369d2af871183da2cf0614db9a /drivers/media/video/cx88/cx88-cards.c | |
parent | db5d91eb36e1cc9d46016d1d44874376cfabf274 (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.c | 67 |
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 44e27dc646ae..d91e5b3a64ef 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 | }; |
1076 | const unsigned int cx88_bcount = ARRAY_SIZE(cx88_boards); | 1097 | const 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 | }; |
1286 | const unsigned int cx88_idcount = ARRAY_SIZE(cx88_subids); | 1315 | const 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 | |||
1434 | static 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 | ||
1404 | void cx88_card_list(struct cx88_core *core, struct pci_dev *pci) | 1467 | void 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: |