diff options
Diffstat (limited to 'drivers/media/video/cx88/cx88-cards.c')
-rw-r--r-- | drivers/media/video/cx88/cx88-cards.c | 240 |
1 files changed, 201 insertions, 39 deletions
diff --git a/drivers/media/video/cx88/cx88-cards.c b/drivers/media/video/cx88/cx88-cards.c index 14bd4863d157..af71d4225c76 100644 --- a/drivers/media/video/cx88/cx88-cards.c +++ b/drivers/media/video/cx88/cx88-cards.c @@ -294,7 +294,7 @@ struct cx88_board cx88_boards[] = { .type = CX88_RADIO, .gpio0 = 0x0000bd62, }, - .blackbird = 1, + .mpeg = CX88_MPEG_BLACKBIRD, }, [CX88_BOARD_IODATA_GVVCP3PCI] = { .name = "IODATA GV-VCP3/PCI", @@ -358,7 +358,7 @@ struct cx88_board cx88_boards[] = { .type = CX88_RADIO, .gpio0 = 0x0000fde2, }, - .blackbird = 1, + .mpeg = CX88_MPEG_BLACKBIRD, }, [CX88_BOARD_MSI_TVANYWHERE] = { .name = "MSI TV-@nywhere", @@ -401,7 +401,7 @@ struct cx88_board cx88_boards[] = { .gpio0 = 0x0700, .gpio2 = 0x0101, }}, - .dvb = 1, + .mpeg = CX88_MPEG_DVB, }, [CX88_BOARD_DVICO_FUSIONHDTV_DVB_T1] = { .name = "DViCO FusionHDTV DVB-T1", @@ -418,7 +418,7 @@ struct cx88_board cx88_boards[] = { .vmux = 2, .gpio0 = 0x000027df, }}, - .dvb = 1, + .mpeg = CX88_MPEG_DVB, }, [CX88_BOARD_KWORLD_LTV883] = { .name = "KWorld LTV883RF", @@ -488,7 +488,7 @@ struct cx88_board cx88_boards[] = { .vmux = 2, .gpio0 = 0x0f00, }}, - .dvb = 1, + .mpeg = CX88_MPEG_DVB, }, [CX88_BOARD_HAUPPAUGE_DVB_T1] = { .name = "Hauppauge Nova-T DVB-T", @@ -500,7 +500,7 @@ struct cx88_board cx88_boards[] = { .type = CX88_VMUX_DVB, .vmux = 0, }}, - .dvb = 1, + .mpeg = CX88_MPEG_DVB, }, [CX88_BOARD_CONEXANT_DVB_T1] = { .name = "Conexant DVB-T reference design", @@ -512,7 +512,7 @@ struct cx88_board cx88_boards[] = { .type = CX88_VMUX_DVB, .vmux = 0, }}, - .dvb = 1, + .mpeg = CX88_MPEG_DVB, }, [CX88_BOARD_PROVIDEO_PV259] = { .name = "Provideo PV259", @@ -524,7 +524,7 @@ struct cx88_board cx88_boards[] = { .type = CX88_VMUX_TELEVISION, .vmux = 0, }}, - .blackbird = 1, + .mpeg = CX88_MPEG_BLACKBIRD, }, [CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PLUS] = { .name = "DViCO FusionHDTV DVB-T Plus", @@ -541,7 +541,7 @@ struct cx88_board cx88_boards[] = { .vmux = 2, .gpio0 = 0x000027df, }}, - .dvb = 1, + .mpeg = CX88_MPEG_DVB, }, [CX88_BOARD_DNTV_LIVE_DVB_T] = { .name = "digitalnow DNTV Live! DVB-T", @@ -560,7 +560,7 @@ struct cx88_board cx88_boards[] = { .gpio0 = 0x00000700, .gpio2 = 0x00000101, }}, - .dvb = 1, + .mpeg = CX88_MPEG_DVB, }, [CX88_BOARD_PCHDTV_HD3000] = { .name = "pcHDTV HD3000 HDTV", @@ -599,7 +599,7 @@ struct cx88_board cx88_boards[] = { .gpio2 = 0x00000000, .gpio3 = 0x00000000, }, - .dvb = 1, + .mpeg = CX88_MPEG_DVB, }, [CX88_BOARD_HAUPPAUGE_ROSLYN] = { // entry added by Kaustubh D. Bhalerao <bhalerao.1@osu.edu> @@ -633,7 +633,7 @@ struct cx88_board cx88_boards[] = { .gpio0 = 0xed96, .gpio2 = 0x00ff, }, - .blackbird = 1, + .mpeg = CX88_MPEG_BLACKBIRD, }, [CX88_BOARD_DIGITALLOGIC_MEC] = { .name = "Digital-Logic MICROSPACE Entertainment Center (MEC)", @@ -659,7 +659,7 @@ struct cx88_board cx88_boards[] = { .type = CX88_RADIO, .gpio0 = 0x00009d00, }, - .blackbird = 1, + .mpeg = CX88_MPEG_BLACKBIRD, }, [CX88_BOARD_IODATA_GVBCTV7E] = { .name = "IODATA GV/BCTV7E", @@ -727,7 +727,7 @@ struct cx88_board cx88_boards[] = { .vmux = 2, .gpio0 = 0x97e9, }}, - .dvb = 1, + .mpeg = CX88_MPEG_DVB, }, [CX88_BOARD_ADSTECH_DVB_T_PCI] = { .name = "ADS Tech Instant TV DVB-T PCI", @@ -746,7 +746,7 @@ struct cx88_board cx88_boards[] = { .gpio0 = 0x0700, .gpio2 = 0x0101, }}, - .dvb = 1, + .mpeg = CX88_MPEG_DVB, }, [CX88_BOARD_TERRATEC_CINERGY_1400_DVB_T1] = { .name = "TerraTec Cinergy 1400 DVB-T", @@ -755,7 +755,7 @@ struct cx88_board cx88_boards[] = { .type = CX88_VMUX_DVB, .vmux = 0, }}, - .dvb = 1, + .mpeg = CX88_MPEG_DVB, }, [CX88_BOARD_DVICO_FUSIONHDTV_5_GOLD] = { .name = "DViCO FusionHDTV 5 Gold", @@ -777,7 +777,7 @@ struct cx88_board cx88_boards[] = { .vmux = 2, .gpio0 = 0x87f9, }}, - .dvb = 1, + .mpeg = CX88_MPEG_DVB, }, [CX88_BOARD_AVERMEDIA_ULTRATV_MC_550] = { .name = "AverMedia UltraTV Media Center PCI 550", @@ -786,7 +786,7 @@ struct cx88_board cx88_boards[] = { .tuner_addr = ADDR_UNSET, .radio_addr = ADDR_UNSET, .tda9887_conf = TDA9887_PRESENT, - .blackbird = 1, + .mpeg = CX88_MPEG_BLACKBIRD, .input = {{ .type = CX88_VMUX_COMPOSITE1, .vmux = 0, @@ -854,7 +854,7 @@ struct cx88_board cx88_boards[] = { .gpio2 = 0x00000001, .gpio3 = 0x00000000, }}, - .dvb = 1, + .mpeg = CX88_MPEG_DVB, }, [CX88_BOARD_WINFAST_DTV1000] = { .name = "WinFast DTV1000-T", @@ -866,7 +866,7 @@ struct cx88_board cx88_boards[] = { .type = CX88_VMUX_DVB, .vmux = 0, }}, - .dvb = 1, + .mpeg = CX88_MPEG_DVB, }, [CX88_BOARD_AVERTV_303] = { .name = "AVerTV 303 (M126)", @@ -914,7 +914,7 @@ struct cx88_board cx88_boards[] = { .type = CX88_VMUX_SVIDEO, .vmux = 2, }}, - .dvb = 1, + .mpeg = CX88_MPEG_DVB, }, [CX88_BOARD_HAUPPAUGE_NOVASE2_S1] = { .name = "Hauppauge Nova-SE2 DVB-S", @@ -926,7 +926,7 @@ struct cx88_board cx88_boards[] = { .type = CX88_VMUX_DVB, .vmux = 0, }}, - .dvb = 1, + .mpeg = CX88_MPEG_DVB, }, [CX88_BOARD_KWORLD_DVBS_100] = { .name = "KWorld DVB-S 100", @@ -944,7 +944,7 @@ struct cx88_board cx88_boards[] = { .type = CX88_VMUX_SVIDEO, .vmux = 2, }}, - .dvb = 1, + .mpeg = CX88_MPEG_DVB, }, [CX88_BOARD_HAUPPAUGE_HVR1100] = { .name = "Hauppauge WinTV-HVR1100 DVB-T/Hybrid", @@ -964,7 +964,7 @@ struct cx88_board cx88_boards[] = { .vmux = 2, }}, /* fixme: Add radio support */ - .dvb = 1, + .mpeg = CX88_MPEG_DVB, }, [CX88_BOARD_HAUPPAUGE_HVR1100LP] = { .name = "Hauppauge WinTV-HVR1100 DVB-T/Hybrid (Low Profile)", @@ -981,7 +981,7 @@ struct cx88_board cx88_boards[] = { .vmux = 1, }}, /* fixme: Add radio support */ - .dvb = 1, + .mpeg = CX88_MPEG_DVB, }, [CX88_BOARD_DNTV_LIVE_DVB_T_PRO] = { .name = "digitalnow DNTV Live! DVB-T Pro", @@ -1008,7 +1008,7 @@ struct cx88_board cx88_boards[] = { .type = CX88_RADIO, .gpio0 = 0xf80808, }, - .dvb = 1, + .mpeg = CX88_MPEG_DVB, }, [CX88_BOARD_KWORLD_DVB_T_CX22702] = { /* Kworld V-stream Xpert DVB-T with Thomson tuner */ @@ -1030,7 +1030,7 @@ struct cx88_board cx88_boards[] = { .gpio0 = 0x0700, .gpio2 = 0x0101, }}, - .dvb = 1, + .mpeg = CX88_MPEG_DVB, }, [CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_DUAL] = { .name = "DViCO FusionHDTV DVB-T Dual Digital", @@ -1041,13 +1041,13 @@ struct cx88_board cx88_boards[] = { .input = {{ .type = CX88_VMUX_COMPOSITE1, .vmux = 1, - .gpio0 = 0x000027df, + .gpio0 = 0x000067df, },{ .type = CX88_VMUX_SVIDEO, .vmux = 2, - .gpio0 = 0x000027df, + .gpio0 = 0x000067df, }}, - .dvb = 1, + .mpeg = CX88_MPEG_DVB, }, [CX88_BOARD_KWORLD_HARDWARE_MPEG_TV_XPERT] = { /* FIXME: Audio not working for s-video / composite inputs. */ @@ -1075,7 +1075,7 @@ struct cx88_board cx88_boards[] = { .gpio0 = 0x3de6, .gpio2 = 0x00ff, }, - .blackbird = 1, + .mpeg = CX88_MPEG_BLACKBIRD, }, [CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_HYBRID] = { .name = "DViCO FusionHDTV DVB-T Hybrid", @@ -1096,7 +1096,7 @@ struct cx88_board cx88_boards[] = { .vmux = 2, .gpio0 = 0x0000a75b, }}, - .dvb = 1, + .mpeg = CX88_MPEG_DVB, }, [CX88_BOARD_PCHDTV_HD5500] = { .name = "pcHDTV HD5500 HDTV", @@ -1118,7 +1118,7 @@ struct cx88_board cx88_boards[] = { .vmux = 2, .gpio0 = 0x87f9, }}, - .dvb = 1, + .mpeg = CX88_MPEG_DVB, }, [CX88_BOARD_KWORLD_MCE200_DELUXE] = { /* FIXME: tested TV input only, disabled composite, @@ -1134,7 +1134,7 @@ struct cx88_board cx88_boards[] = { .vmux = 0, .gpio0 = 0x0000BDE6 }}, - .blackbird = 1, + .mpeg = CX88_MPEG_BLACKBIRD, }, [CX88_BOARD_PIXELVIEW_PLAYTV_P7000] = { /* FIXME: SVideo, Composite and FM inputs are untested */ @@ -1150,7 +1150,7 @@ struct cx88_board cx88_boards[] = { .vmux = 0, .gpio0 = 0x5da6, }}, - .blackbird = 1, + .mpeg = CX88_MPEG_BLACKBIRD, }, [CX88_BOARD_NPGTECH_REALTV_TOP10FM] = { .name = "NPG Tech Real TV FM Top 10", @@ -1192,7 +1192,7 @@ struct cx88_board cx88_boards[] = { .gpio2 = 0x00017304, .gpio3 = 0x02000000, }}, - .dvb = 1, + .mpeg = CX88_MPEG_DVB, }, [CX88_BOARD_GENIATECH_DVBS] = { .name = "Geniatech DVB-S", @@ -1207,7 +1207,102 @@ struct cx88_board cx88_boards[] = { .type = CX88_VMUX_COMPOSITE1, .vmux = 1, }}, - .dvb = 1, + .mpeg = CX88_MPEG_DVB, + }, + [CX88_BOARD_HAUPPAUGE_HVR3000] = { + /* FIXME: Add dvb & radio support */ + .name = "Hauppauge WinTV-HVR3000 TriMode Analog/DVB-S/DVB-T", + .tuner_type = TUNER_PHILIPS_FMD1216ME_MK3, + .radio_type = UNSET, + .tuner_addr = ADDR_UNSET, + .radio_addr = ADDR_UNSET, + .tda9887_conf = TDA9887_PRESENT, + .input = {{ + .type = CX88_VMUX_TELEVISION, + .vmux = 0, + .gpio0 = 0x84bf, + },{ + .type = CX88_VMUX_COMPOSITE1, + .vmux = 1, + .gpio0 = 0x84bf, + },{ + .type = CX88_VMUX_SVIDEO, + .vmux = 2, + .gpio0 = 0x84bf, + }}, + }, + [CX88_BOARD_NORWOOD_MICRO] = { + .name = "Norwood Micro TV Tuner", + .tuner_type = TUNER_TNF_5335MF, + .radio_type = UNSET, + .tuner_addr = ADDR_UNSET, + .radio_addr = ADDR_UNSET, + .input = {{ + .type = CX88_VMUX_TELEVISION, + .vmux = 0, + .gpio0 = 0x0709, + },{ + .type = CX88_VMUX_COMPOSITE1, + .vmux = 1, + .gpio0 = 0x070b, + },{ + .type = CX88_VMUX_SVIDEO, + .vmux = 2, + .gpio0 = 0x070b, + }}, + }, + [CX88_BOARD_TE_DTV_250_OEM_SWANN] = { + .name = "Shenzhen Tungsten Ages Tech TE-DTV-250 / Swann OEM", + .tuner_type = TUNER_LG_PAL_NEW_TAPC, + .radio_type = UNSET, + .tuner_addr = ADDR_UNSET, + .radio_addr = ADDR_UNSET, + .input = {{ + .type = CX88_VMUX_TELEVISION, + .vmux = 0, + .gpio0 = 0x003fffff, + .gpio1 = 0x00e00000, + .gpio2 = 0x003fffff, + .gpio3 = 0x02000000, + },{ + .type = CX88_VMUX_COMPOSITE1, + .vmux = 1, + .gpio0 = 0x003fffff, + .gpio1 = 0x00e00000, + .gpio2 = 0x003fffff, + .gpio3 = 0x02000000, + },{ + .type = CX88_VMUX_SVIDEO, + .vmux = 2, + .gpio0 = 0x003fffff, + .gpio1 = 0x00e00000, + .gpio2 = 0x003fffff, + .gpio3 = 0x02000000, + }}, + }, + [CX88_BOARD_HAUPPAUGE_HVR1300] = { + .name = "Hauppauge WinTV-HVR1300 DVB-T/Hybrid MPEG Encoder", + .tuner_type = TUNER_PHILIPS_FMD1216ME_MK3, + .radio_type = UNSET, + .tuner_addr = ADDR_UNSET, + .radio_addr = ADDR_UNSET, + .tda9887_conf = TDA9887_PRESENT, + .audio_chip = AUDIO_CHIP_WM8775, + .input = {{ + .type = CX88_VMUX_TELEVISION, + .vmux = 0, + .gpio0 = 0xe780, + },{ + .type = CX88_VMUX_COMPOSITE1, + .vmux = 1, + .gpio0 = 0xe780, + },{ + .type = CX88_VMUX_SVIDEO, + .vmux = 2, + .gpio0 = 0xe780, + }}, + /* fixme: Add radio support */ + .mpeg = CX88_MPEG_DVB, }, }; const unsigned int cx88_bcount = ARRAY_SIZE(cx88_boards); @@ -1254,7 +1349,7 @@ struct cx88_subid cx88_subids[] = { .card = CX88_BOARD_LEADTEK_PVR2000, },{ .subvendor = 0x107d, - .subdevice = 0x663C, + .subdevice = 0x663c, .card = CX88_BOARD_LEADTEK_PVR2000, },{ .subvendor = 0x1461, @@ -1458,6 +1553,43 @@ struct cx88_subid cx88_subids[] = { .subvendor = 0x14f1, .subdevice = 0x0084, .card = CX88_BOARD_GENIATECH_DVBS, + },{ + .subvendor = 0x0070, + .subdevice = 0x1404, + .card = CX88_BOARD_HAUPPAUGE_HVR3000, + },{ + .subvendor = 0x1461, + .subdevice = 0xc111, /* AverMedia M150-D */ + /* This board is known to work with the ASUS PVR416 config */ + .card = CX88_BOARD_ASUS_PVR_416, + },{ + .subvendor = 0xc180, + .subdevice = 0xc980, + .card = CX88_BOARD_TE_DTV_250_OEM_SWANN, + },{ + .subvendor = 0x0070, + .subdevice = 0x9600, + .card = CX88_BOARD_HAUPPAUGE_HVR1300, + },{ + .subvendor = 0x0070, + .subdevice = 0x9601, + .card = CX88_BOARD_HAUPPAUGE_HVR1300, + },{ + .subvendor = 0x0070, + .subdevice = 0x9602, + .card = CX88_BOARD_HAUPPAUGE_HVR1300, + },{ + .subvendor = 0x107d, + .subdevice = 0x6632, + .card = CX88_BOARD_LEADTEK_PVR2000, + },{ + .subvendor = 0x12ab, + .subdevice = 0x2300, /* Club3D Zap TV2100 */ + .card = CX88_BOARD_KWORLD_DVB_T_CX22702, + },{ + .subvendor = 0x0070, + .subdevice = 0x9000, + .card = CX88_BOARD_HAUPPAUGE_DVB_T1, }, }; const unsigned int cx88_idcount = ARRAY_SIZE(cx88_subids); @@ -1501,6 +1633,7 @@ static void hauppauge_eeprom(struct cx88_core *core, u8 *eeprom_data) /* Make sure we support the board model */ switch (tv.model) { + case 14569: /* WinTV-HVR3000 (OEM, no IR, no back panel video) */ case 28552: /* WinTV-PVR 'Roslyn' (No IR) */ case 34519: /* WinTV-PCI-FM */ case 90002: /* Nova-T-PCI (9002) */ @@ -1512,6 +1645,11 @@ static void hauppauge_eeprom(struct cx88_core *core, u8 *eeprom_data) case 92000: /* Nova-SE2 (OEM, No Video or IR) */ case 94009: /* WinTV-HVR1100 (Video and IR Retail) */ case 94501: /* WinTV-HVR1100 (Video and IR OEM) */ + case 96009: /* WinTV-HVR1300 (PAL Video, MPEG Video and IR RX) */ + case 96019: /* WinTV-HVR1300 (PAL Video, MPEG Video and IR RX/TX) */ + case 96559: /* WinTV-HVR1300 (PAL Video, MPEG Video no IR) */ + case 96569: /* WinTV-HVR1300 () */ + case 96659: /* WinTV-HVR1300 () */ case 98559: /* WinTV-HVR1100LP (Video no IR, Retail - Low Profile) */ /* known */ break; @@ -1638,6 +1776,22 @@ void cx88_card_list(struct cx88_core *core, struct pci_dev *pci) core->name, i, cx88_boards[i].name); } +void cx88_card_setup_pre_i2c(struct cx88_core *core) +{ + switch (core->board) { + case CX88_BOARD_HAUPPAUGE_HVR1300: + /* Bring the 702 demod up before i2c scanning/attach or devices are hidden */ + /* We leave here with the 702 on the bus */ + cx_write(MO_GP0_IO, 0x0000e780); + udelay(1000); + cx_clear(MO_GP0_IO, 0x00000080); + udelay(50); + cx_set(MO_GP0_IO, 0x00000080); /* 702 out of reset */ + udelay(1000); + break; + } +} + void cx88_card_setup(struct cx88_core *core) { static u8 eeprom[256]; @@ -1666,6 +1820,8 @@ void cx88_card_setup(struct cx88_core *core) case CX88_BOARD_HAUPPAUGE_DVB_T1: case CX88_BOARD_HAUPPAUGE_HVR1100: case CX88_BOARD_HAUPPAUGE_HVR1100LP: + case CX88_BOARD_HAUPPAUGE_HVR3000: + case CX88_BOARD_HAUPPAUGE_HVR1300: if (0 == core->i2c_rc) hauppauge_eeprom(core,eeprom); break; @@ -1673,9 +1829,15 @@ void cx88_card_setup(struct cx88_core *core) cx_write(MO_GP0_IO, 0x000007f8); cx_write(MO_GP1_IO, 0x00000001); break; + case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_DUAL: + /* GPIO0:6 is hooked to FX2 reset pin */ + cx_set(MO_GP0_IO, 0x00004040); + cx_clear(MO_GP0_IO, 0x00000040); + msleep(1000); + cx_set(MO_GP0_IO, 0x00004040); + /* FALLTHROUGH */ case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T1: case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PLUS: - case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_DUAL: case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_HYBRID: /* GPIO0:0 is hooked to mt352 reset pin */ cx_set(MO_GP0_IO, 0x00000101); |