Commit 24a70fdc authored by Mauro Carvalho Chehab's avatar Mauro Carvalho Chehab Committed by Linus Torvalds

[PATCH] v4l: BTTV updates and card additions

- Remove $Id CVS logs for V4L files
- Added DVICO FusionHDTV 5 Lite card.
- Added Acorp Y878F.
- CodingStyle fixes.
- Added tuner_addr to bttv cards structure.
- linux/version.h replaced by linux/utsname.h on bttvp.h
- kernel module for acquiring RDS data from a SAA6588.
- Allow multiple open() and reading calls to /dev/radio on bttv-driver.c
- added i2c address for lgdt330x.
Signed-off-by: default avatarHans J. Koch <koch@hjk-az.de>
Signed-off-by: default avatarMichael Krufky <mkrufky@m1k.net>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@brturbo.com.br>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 793cf9e6
...@@ -133,3 +133,5 @@ card=131 - Tibet Systems 'Progress DVR' CS16 ...@@ -133,3 +133,5 @@ card=131 - Tibet Systems 'Progress DVR' CS16
card=132 - Kodicom 4400R (master) card=132 - Kodicom 4400R (master)
card=133 - Kodicom 4400R (slave) card=133 - Kodicom 4400R (slave)
card=134 - Adlink RTV24 card=134 - Adlink RTV24
card=135 - DVICO FusionHDTV 5 Lite
card=136 - Acorp Y878F
/* /*
$Id: bttv-cards.c,v 1.54 2005/07/19 18:26:46 mkrufky Exp $
bttv-cards.c bttv-cards.c
...@@ -169,10 +168,10 @@ static struct CARD { ...@@ -169,10 +168,10 @@ static struct CARD {
{ 0xd01810fc, BTTV_GVBCTV5PCI, "I-O Data Co. GV-BCTV5/PCI" }, { 0xd01810fc, BTTV_GVBCTV5PCI, "I-O Data Co. GV-BCTV5/PCI" },
{ 0x001211bd, BTTV_PINNACLE, "Pinnacle PCTV" }, { 0x001211bd, BTTV_PINNACLE, "Pinnacle PCTV" },
// some cards ship with byteswapped IDs ... /* some cards ship with byteswapped IDs ... */
{ 0x1200bd11, BTTV_PINNACLE, "Pinnacle PCTV [bswap]" }, { 0x1200bd11, BTTV_PINNACLE, "Pinnacle PCTV [bswap]" },
{ 0xff00bd11, BTTV_PINNACLE, "Pinnacle PCTV [bswap]" }, { 0xff00bd11, BTTV_PINNACLE, "Pinnacle PCTV [bswap]" },
// this seems to happen as well ... /* this seems to happen as well ... */
{ 0xff1211bd, BTTV_PINNACLE, "Pinnacle PCTV" }, { 0xff1211bd, BTTV_PINNACLE, "Pinnacle PCTV" },
{ 0x3000121a, BTTV_VOODOOTV_FM, "3Dfx VoodooTV FM/ VoodooTV 200" }, { 0x3000121a, BTTV_VOODOOTV_FM, "3Dfx VoodooTV FM/ VoodooTV 200" },
...@@ -200,12 +199,12 @@ static struct CARD { ...@@ -200,12 +199,12 @@ static struct CARD {
{ 0x1123153b, BTTV_TERRATVRADIO, "Terratec TV Radio+" }, { 0x1123153b, BTTV_TERRATVRADIO, "Terratec TV Radio+" },
{ 0x1127153b, BTTV_TERRATV, "Terratec TV+ (V1.05)" }, { 0x1127153b, BTTV_TERRATV, "Terratec TV+ (V1.05)" },
// clashes with FlyVideo /* clashes with FlyVideo
//{ 0x18521852, BTTV_TERRATV, "Terratec TV+ (V1.10)" }, *{ 0x18521852, BTTV_TERRATV, "Terratec TV+ (V1.10)" }, */
{ 0x1134153b, BTTV_TERRATVALUE, "Terratec TValue (LR102)" }, { 0x1134153b, BTTV_TERRATVALUE, "Terratec TValue (LR102)" },
{ 0x1135153b, BTTV_TERRATVALUER, "Terratec TValue Radio" }, // LR102 { 0x1135153b, BTTV_TERRATVALUER, "Terratec TValue Radio" }, /* LR102 */
{ 0x5018153b, BTTV_TERRATVALUE, "Terratec TValue" }, // ?? { 0x5018153b, BTTV_TERRATVALUE, "Terratec TValue" }, /* ?? */
{ 0xff3b153b, BTTV_TERRATVALUER, "Terratec TValue Radio" }, // ?? { 0xff3b153b, BTTV_TERRATVALUER, "Terratec TValue Radio" }, /* ?? */
{ 0x400015b0, BTTV_ZOLTRIX_GENIE, "Zoltrix Genie TV" }, { 0x400015b0, BTTV_ZOLTRIX_GENIE, "Zoltrix Genie TV" },
{ 0x400a15b0, BTTV_ZOLTRIX_GENIE, "Zoltrix Genie TV" }, { 0x400a15b0, BTTV_ZOLTRIX_GENIE, "Zoltrix Genie TV" },
...@@ -287,10 +286,12 @@ static struct CARD { ...@@ -287,10 +286,12 @@ static struct CARD {
{ 0x01071805, BTTV_PICOLO_TETRA_CHIP, "Picolo Tetra Chip #3" }, { 0x01071805, BTTV_PICOLO_TETRA_CHIP, "Picolo Tetra Chip #3" },
{ 0x01081805, BTTV_PICOLO_TETRA_CHIP, "Picolo Tetra Chip #4" }, { 0x01081805, BTTV_PICOLO_TETRA_CHIP, "Picolo Tetra Chip #4" },
// likely broken, vendor id doesn't match the other magic views ... { 0x15409511, BTTV_ACORP_Y878F, "Acorp Y878F" },
//{ 0xa0fca04f, BTTV_MAGICTVIEW063, "Guillemot Maxi TV Video 3" },
// DVB cards (using pci function .1 for mpeg data xfer) /* likely broken, vendor id doesn't match the other magic views ...
* { 0xa0fca04f, BTTV_MAGICTVIEW063, "Guillemot Maxi TV Video 3" }, */
/* DVB cards (using pci function .1 for mpeg data xfer) */
{ 0x01010071, BTTV_NEBULA_DIGITV, "Nebula Electronics DigiTV" }, { 0x01010071, BTTV_NEBULA_DIGITV, "Nebula Electronics DigiTV" },
{ 0x07611461, BTTV_AVDVBT_761, "AverMedia AverTV DVB-T 761" }, { 0x07611461, BTTV_AVDVBT_761, "AverMedia AverTV DVB-T 761" },
{ 0x001c11bd, BTTV_PINNACLESAT, "Pinnacle PCTV Sat" }, { 0x001c11bd, BTTV_PINNACLESAT, "Pinnacle PCTV Sat" },
...@@ -299,6 +300,7 @@ static struct CARD { ...@@ -299,6 +300,7 @@ static struct CARD {
{ 0xfc00270f, BTTV_TWINHAN_DST, "ChainTech digitop DST-1000 DVB-S" }, { 0xfc00270f, BTTV_TWINHAN_DST, "ChainTech digitop DST-1000 DVB-S" },
{ 0x07711461, BTTV_AVDVBT_771, "AVermedia AverTV DVB-T 771" }, { 0x07711461, BTTV_AVDVBT_771, "AVermedia AverTV DVB-T 771" },
{ 0xdb1018ac, BTTV_DVICO_DVBT_LITE, "DVICO FusionHDTV DVB-T Lite" }, { 0xdb1018ac, BTTV_DVICO_DVBT_LITE, "DVICO FusionHDTV DVB-T Lite" },
{ 0xd50018ac, BTTV_DVICO_FUSIONHDTV_5_LITE, "DVICO FusionHDTV 5 Lite" },
{ 0, -1, NULL } { 0, -1, NULL }
}; };
...@@ -316,6 +318,7 @@ struct tvcard bttv_tvcards[] = { ...@@ -316,6 +318,7 @@ struct tvcard bttv_tvcards[] = {
.svhs = 2, .svhs = 2,
.muxsel = { 2, 3, 1, 0}, .muxsel = { 2, 3, 1, 0},
.tuner_type = -1, .tuner_type = -1,
.tuner_addr = ADDR_UNSET,
},{ },{
.name = "MIRO PCTV", .name = "MIRO PCTV",
.video_inputs = 4, .video_inputs = 4,
...@@ -327,6 +330,7 @@ struct tvcard bttv_tvcards[] = { ...@@ -327,6 +330,7 @@ struct tvcard bttv_tvcards[] = {
.audiomux = { 2, 0, 0, 0, 10}, .audiomux = { 2, 0, 0, 0, 10},
.needs_tvaudio = 1, .needs_tvaudio = 1,
.tuner_type = -1, .tuner_type = -1,
.tuner_addr = ADDR_UNSET,
},{ },{
.name = "Hauppauge (bt848)", .name = "Hauppauge (bt848)",
.video_inputs = 4, .video_inputs = 4,
...@@ -338,6 +342,7 @@ struct tvcard bttv_tvcards[] = { ...@@ -338,6 +342,7 @@ struct tvcard bttv_tvcards[] = {
.audiomux = { 0, 1, 2, 3, 4}, .audiomux = { 0, 1, 2, 3, 4},
.needs_tvaudio = 1, .needs_tvaudio = 1,
.tuner_type = -1, .tuner_type = -1,
.tuner_addr = ADDR_UNSET,
},{ },{
.name = "STB, Gateway P/N 6000699 (bt848)", .name = "STB, Gateway P/N 6000699 (bt848)",
.video_inputs = 3, .video_inputs = 3,
...@@ -350,6 +355,7 @@ struct tvcard bttv_tvcards[] = { ...@@ -350,6 +355,7 @@ struct tvcard bttv_tvcards[] = {
.no_msp34xx = 1, .no_msp34xx = 1,
.needs_tvaudio = 1, .needs_tvaudio = 1,
.tuner_type = TUNER_PHILIPS_NTSC, .tuner_type = TUNER_PHILIPS_NTSC,
.tuner_addr = ADDR_UNSET,
.pll = PLL_28, .pll = PLL_28,
.has_radio = 1, .has_radio = 1,
},{ },{
...@@ -365,6 +371,7 @@ struct tvcard bttv_tvcards[] = { ...@@ -365,6 +371,7 @@ struct tvcard bttv_tvcards[] = {
.audiomux = { 0 }, .audiomux = { 0 },
.needs_tvaudio = 0, .needs_tvaudio = 0,
.tuner_type = 4, .tuner_type = 4,
.tuner_addr = ADDR_UNSET,
},{ },{
.name = "Diamond DTV2000", .name = "Diamond DTV2000",
.video_inputs = 4, .video_inputs = 4,
...@@ -376,6 +383,7 @@ struct tvcard bttv_tvcards[] = { ...@@ -376,6 +383,7 @@ struct tvcard bttv_tvcards[] = {
.audiomux = { 0, 1, 0, 1, 3}, .audiomux = { 0, 1, 0, 1, 3},
.needs_tvaudio = 1, .needs_tvaudio = 1,
.tuner_type = -1, .tuner_type = -1,
.tuner_addr = ADDR_UNSET,
},{ },{
.name = "AVerMedia TVPhone", .name = "AVerMedia TVPhone",
.video_inputs = 3, .video_inputs = 3,
...@@ -388,6 +396,7 @@ struct tvcard bttv_tvcards[] = { ...@@ -388,6 +396,7 @@ struct tvcard bttv_tvcards[] = {
/* 0x04 for some cards ?? */ /* 0x04 for some cards ?? */
.needs_tvaudio = 1, .needs_tvaudio = 1,
.tuner_type = -1, .tuner_type = -1,
.tuner_addr = ADDR_UNSET,
.audio_hook = avermedia_tvphone_audio, .audio_hook = avermedia_tvphone_audio,
.has_remote = 1, .has_remote = 1,
},{ },{
...@@ -401,6 +410,7 @@ struct tvcard bttv_tvcards[] = { ...@@ -401,6 +410,7 @@ struct tvcard bttv_tvcards[] = {
.audiomux = {0 }, .audiomux = {0 },
.needs_tvaudio = 1, .needs_tvaudio = 1,
.tuner_type = -1, .tuner_type = -1,
.tuner_addr = ADDR_UNSET,
},{ },{
/* ---- card 0x08 ---------------------------------- */ /* ---- card 0x08 ---------------------------------- */
...@@ -415,6 +425,7 @@ struct tvcard bttv_tvcards[] = { ...@@ -415,6 +425,7 @@ struct tvcard bttv_tvcards[] = {
.needs_tvaudio = 1, .needs_tvaudio = 1,
.pll = PLL_28, .pll = PLL_28,
.tuner_type = -1, .tuner_type = -1,
.tuner_addr = ADDR_UNSET,
},{ },{
.name = "IMS/IXmicro TurboTV", .name = "IMS/IXmicro TurboTV",
.video_inputs = 3, .video_inputs = 3,
...@@ -427,6 +438,7 @@ struct tvcard bttv_tvcards[] = { ...@@ -427,6 +438,7 @@ struct tvcard bttv_tvcards[] = {
.needs_tvaudio = 0, .needs_tvaudio = 0,
.pll = PLL_28, .pll = PLL_28,
.tuner_type = TUNER_TEMIC_PAL, .tuner_type = TUNER_TEMIC_PAL,
.tuner_addr = ADDR_UNSET,
},{ },{
.name = "Hauppauge (bt878)", .name = "Hauppauge (bt878)",
.video_inputs = 4, .video_inputs = 4,
...@@ -439,6 +451,7 @@ struct tvcard bttv_tvcards[] = { ...@@ -439,6 +451,7 @@ struct tvcard bttv_tvcards[] = {
.needs_tvaudio = 1, .needs_tvaudio = 1,
.pll = PLL_28, .pll = PLL_28,
.tuner_type = -1, .tuner_type = -1,
.tuner_addr = ADDR_UNSET,
},{ },{
.name = "MIRO PCTV pro", .name = "MIRO PCTV pro",
.video_inputs = 3, .video_inputs = 3,
...@@ -450,6 +463,7 @@ struct tvcard bttv_tvcards[] = { ...@@ -450,6 +463,7 @@ struct tvcard bttv_tvcards[] = {
.audiomux = { 0x20001,0x10001, 0, 0,10}, .audiomux = { 0x20001,0x10001, 0, 0,10},
.needs_tvaudio = 1, .needs_tvaudio = 1,
.tuner_type = -1, .tuner_type = -1,
.tuner_addr = ADDR_UNSET,
},{ },{
/* ---- card 0x0c ---------------------------------- */ /* ---- card 0x0c ---------------------------------- */
...@@ -463,6 +477,7 @@ struct tvcard bttv_tvcards[] = { ...@@ -463,6 +477,7 @@ struct tvcard bttv_tvcards[] = {
.audiomux = { 13, 14, 11, 7, 0, 0}, .audiomux = { 13, 14, 11, 7, 0, 0},
.needs_tvaudio = 1, .needs_tvaudio = 1,
.tuner_type = -1, .tuner_type = -1,
.tuner_addr = ADDR_UNSET,
},{ },{
.name = "AVerMedia TVCapture 98", .name = "AVerMedia TVCapture 98",
.video_inputs = 3, .video_inputs = 3,
...@@ -476,6 +491,7 @@ struct tvcard bttv_tvcards[] = { ...@@ -476,6 +491,7 @@ struct tvcard bttv_tvcards[] = {
.msp34xx_alt = 1, .msp34xx_alt = 1,
.pll = PLL_28, .pll = PLL_28,
.tuner_type = TUNER_PHILIPS_PAL, .tuner_type = TUNER_PHILIPS_PAL,
.tuner_addr = ADDR_UNSET,
.audio_hook = avermedia_tv_stereo_audio, .audio_hook = avermedia_tv_stereo_audio,
},{ },{
.name = "Aimslab Video Highway Xtreme (VHX)", .name = "Aimslab Video Highway Xtreme (VHX)",
...@@ -489,6 +505,7 @@ struct tvcard bttv_tvcards[] = { ...@@ -489,6 +505,7 @@ struct tvcard bttv_tvcards[] = {
.needs_tvaudio = 1, .needs_tvaudio = 1,
.pll = PLL_28, .pll = PLL_28,
.tuner_type = -1, .tuner_type = -1,
.tuner_addr = ADDR_UNSET,
},{ },{
.name = "Zoltrix TV-Max", .name = "Zoltrix TV-Max",
.video_inputs = 3, .video_inputs = 3,
...@@ -500,6 +517,7 @@ struct tvcard bttv_tvcards[] = { ...@@ -500,6 +517,7 @@ struct tvcard bttv_tvcards[] = {
.audiomux = {0 , 0, 1 , 0, 10}, .audiomux = {0 , 0, 1 , 0, 10},
.needs_tvaudio = 1, .needs_tvaudio = 1,
.tuner_type = -1, .tuner_type = -1,
.tuner_addr = ADDR_UNSET,
},{ },{
/* ---- card 0x10 ---------------------------------- */ /* ---- card 0x10 ---------------------------------- */
...@@ -510,7 +528,7 @@ struct tvcard bttv_tvcards[] = { ...@@ -510,7 +528,7 @@ struct tvcard bttv_tvcards[] = {
.svhs = 2, .svhs = 2,
.gpiomask = 0x01fe00, .gpiomask = 0x01fe00,
.muxsel = { 2, 3, 1, 1}, .muxsel = { 2, 3, 1, 1},
// 2003-10-20 by "Anton A. Arapov" <arapov@mail.ru> /* 2003-10-20 by "Anton A. Arapov" <arapov@mail.ru> */
.audiomux = { 0x001e00, 0, 0x018000, 0x014000, 0x002000, 0 }, .audiomux = { 0x001e00, 0, 0x018000, 0x014000, 0x002000, 0 },
.needs_tvaudio = 1, .needs_tvaudio = 1,
.pll = PLL_28, .pll = PLL_28,
...@@ -526,6 +544,7 @@ struct tvcard bttv_tvcards[] = { ...@@ -526,6 +544,7 @@ struct tvcard bttv_tvcards[] = {
.audiomux = { 0x4fa007,0xcfa007,0xcfa007,0xcfa007,0xcfa007,0xcfa007}, .audiomux = { 0x4fa007,0xcfa007,0xcfa007,0xcfa007,0xcfa007,0xcfa007},
.needs_tvaudio = 1, .needs_tvaudio = 1,
.tuner_type = -1, .tuner_type = -1,
.tuner_addr = ADDR_UNSET,
.audio_hook = winview_audio, .audio_hook = winview_audio,
.has_radio = 1, .has_radio = 1,
},{ },{
...@@ -539,6 +558,7 @@ struct tvcard bttv_tvcards[] = { ...@@ -539,6 +558,7 @@ struct tvcard bttv_tvcards[] = {
.audiomux = {1, 0, 0, 0, 0}, .audiomux = {1, 0, 0, 0, 0},
.needs_tvaudio = 1, .needs_tvaudio = 1,
.tuner_type = -1, .tuner_type = -1,
.tuner_addr = ADDR_UNSET,
},{ },{
.name = "Lifeview FlyVideo II EZ /FlyKit LR38 Bt848 (capture only)", .name = "Lifeview FlyVideo II EZ /FlyKit LR38 Bt848 (capture only)",
.video_inputs = 4, .video_inputs = 4,
...@@ -550,6 +570,7 @@ struct tvcard bttv_tvcards[] = { ...@@ -550,6 +570,7 @@ struct tvcard bttv_tvcards[] = {
.audiomux = { 0 }, .audiomux = { 0 },
.no_msp34xx = 1, .no_msp34xx = 1,
.tuner_type = -1, .tuner_type = -1,
.tuner_addr = ADDR_UNSET,
},{ },{
/* ---- card 0x14 ---------------------------------- */ /* ---- card 0x14 ---------------------------------- */
...@@ -560,10 +581,11 @@ struct tvcard bttv_tvcards[] = { ...@@ -560,10 +581,11 @@ struct tvcard bttv_tvcards[] = {
.svhs = 2, .svhs = 2,
.muxsel = {2, 3, 1, 1}, .muxsel = {2, 3, 1, 1},
.tuner_type = -1, .tuner_type = -1,
.tuner_addr = ADDR_UNSET,
},{ },{
.name = "Lifeview FlyVideo 98/ Lucky Star Image World ConferenceTV LR50", .name = "Lifeview FlyVideo 98/ Lucky Star Image World ConferenceTV LR50",
.video_inputs = 4, .video_inputs = 4,
.audio_inputs = 2, // tuner, line in .audio_inputs = 2, /* tuner, line in */
.tuner = 0, .tuner = 0,
.svhs = 2, .svhs = 2,
.gpiomask = 0x1800, .gpiomask = 0x1800,
...@@ -571,6 +593,7 @@ struct tvcard bttv_tvcards[] = { ...@@ -571,6 +593,7 @@ struct tvcard bttv_tvcards[] = {
.audiomux = { 0, 0x800, 0x1000, 0x1000, 0x1800}, .audiomux = { 0, 0x800, 0x1000, 0x1000, 0x1800},
.pll = PLL_28, .pll = PLL_28,
.tuner_type = TUNER_PHILIPS_PAL_I, .tuner_type = TUNER_PHILIPS_PAL_I,
.tuner_addr = ADDR_UNSET,
},{ },{
.name = "Askey CPH050/ Phoebe Tv Master + FM", .name = "Askey CPH050/ Phoebe Tv Master + FM",
.video_inputs = 3, .video_inputs = 3,
...@@ -583,6 +606,7 @@ struct tvcard bttv_tvcards[] = { ...@@ -583,6 +606,7 @@ struct tvcard bttv_tvcards[] = {
.needs_tvaudio = 1, .needs_tvaudio = 1,
.pll = PLL_28, .pll = PLL_28,
.tuner_type = -1, .tuner_type = -1,
.tuner_addr = ADDR_UNSET,
},{ },{
.name = "Modular Technology MM201/MM202/MM205/MM210/MM215 PCTV, bt878", .name = "Modular Technology MM201/MM202/MM205/MM210/MM215 PCTV, bt878",
.video_inputs = 3, .video_inputs = 3,
...@@ -591,11 +615,12 @@ struct tvcard bttv_tvcards[] = { ...@@ -591,11 +615,12 @@ struct tvcard bttv_tvcards[] = {
.svhs = -1, .svhs = -1,
.gpiomask = 7, .gpiomask = 7,
.muxsel = { 2, 3, -1 }, .muxsel = { 2, 3, -1 },
.digital_mode = DIGITAL_MODE_CAMERA, .digital_mode = DIGITAL_MODE_CAMERA,
.audiomux = { 0, 0, 0, 0, 0 }, .audiomux = { 0, 0, 0, 0, 0 },
.no_msp34xx = 1, .no_msp34xx = 1,
.pll = PLL_28, .pll = PLL_28,
.tuner_type = TUNER_ALPS_TSBB5_PAL_I, .tuner_type = TUNER_ALPS_TSBB5_PAL_I,
.tuner_addr = ADDR_UNSET,
},{ },{
/* ---- card 0x18 ---------------------------------- */ /* ---- card 0x18 ---------------------------------- */
...@@ -610,6 +635,7 @@ struct tvcard bttv_tvcards[] = { ...@@ -610,6 +635,7 @@ struct tvcard bttv_tvcards[] = {
.needs_tvaudio = 1, .needs_tvaudio = 1,
.pll = PLL_28, .pll = PLL_28,
.tuner_type = -1, .tuner_type = -1,
.tuner_addr = ADDR_UNSET,
.has_remote = 1, .has_remote = 1,
},{ },{
.name = "Terratec TerraTV+ Version 1.0 (Bt848)/ Terra TValue Version 1.0/ Vobis TV-Boostar", .name = "Terratec TerraTV+ Version 1.0 (Bt848)/ Terra TValue Version 1.0/ Vobis TV-Boostar",
...@@ -622,6 +648,7 @@ struct tvcard bttv_tvcards[] = { ...@@ -622,6 +648,7 @@ struct tvcard bttv_tvcards[] = {
.audiomux = { 0x20000, 0x30000, 0x10000, 0, 0x40000}, .audiomux = { 0x20000, 0x30000, 0x10000, 0, 0x40000},
.needs_tvaudio = 0, .needs_tvaudio = 0,
.tuner_type = TUNER_PHILIPS_PAL, .tuner_type = TUNER_PHILIPS_PAL,
.tuner_addr = ADDR_UNSET,
.audio_hook = terratv_audio, .audio_hook = terratv_audio,
},{ },{
.name = "Hauppauge WinCam newer (bt878)", .name = "Hauppauge WinCam newer (bt878)",
...@@ -634,6 +661,7 @@ struct tvcard bttv_tvcards[] = { ...@@ -634,6 +661,7 @@ struct tvcard bttv_tvcards[] = {
.audiomux = { 0, 1, 2, 3, 4}, .audiomux = { 0, 1, 2, 3, 4},
.needs_tvaudio = 1, .needs_tvaudio = 1,
.tuner_type = -1, .tuner_type = -1,
.tuner_addr = ADDR_UNSET,
},{ },{
.name = "Lifeview FlyVideo 98/ MAXI TV Video PCI2 LR50", .name = "Lifeview FlyVideo 98/ MAXI TV Video PCI2 LR50",
.video_inputs = 4, .video_inputs = 4,
...@@ -645,6 +673,7 @@ struct tvcard bttv_tvcards[] = { ...@@ -645,6 +673,7 @@ struct tvcard bttv_tvcards[] = {
.audiomux = { 0, 0x800, 0x1000, 0x1000, 0x1800}, .audiomux = { 0, 0x800, 0x1000, 0x1000, 0x1800},
.pll = PLL_28, .pll = PLL_28,
.tuner_type = TUNER_PHILIPS_SECAM, .tuner_type = TUNER_PHILIPS_SECAM,
.tuner_addr = ADDR_UNSET,
},{ },{
/* ---- card 0x1c ---------------------------------- */ /* ---- card 0x1c ---------------------------------- */
...@@ -658,37 +687,38 @@ struct tvcard bttv_tvcards[] = { ...@@ -658,37 +687,38 @@ struct tvcard bttv_tvcards[] = {
.audiomux = { 0x20000, 0x30000, 0x10000, 0x00000, 0x40000}, .audiomux = { 0x20000, 0x30000, 0x10000, 0x00000, 0x40000},
.needs_tvaudio = 0, .needs_tvaudio = 0,
.tuner_type = TUNER_PHILIPS_PAL, .tuner_type = TUNER_PHILIPS_PAL,
.tuner_addr = ADDR_UNSET,
.audio_hook = terratv_audio, .audio_hook = terratv_audio,
/* GPIO wiring: /* GPIO wiring:
External 20 pin connector (for Active Radio Upgrade board) External 20 pin connector (for Active Radio Upgrade board)
gpio00: i2c-sda gpio00: i2c-sda
gpio01: i2c-scl gpio01: i2c-scl
gpio02: om5610-data gpio02: om5610-data
gpio03: om5610-clk gpio03: om5610-clk
gpio04: om5610-wre gpio04: om5610-wre
gpio05: om5610-stereo gpio05: om5610-stereo
gpio06: rds6588-davn gpio06: rds6588-davn
gpio07: Pin 7 n.c. gpio07: Pin 7 n.c.
gpio08: nIOW gpio08: nIOW
gpio09+10: nIOR, nSEL ?? (bt878) gpio09+10: nIOR, nSEL ?? (bt878)
gpio09: nIOR (bt848) gpio09: nIOR (bt848)
gpio10: nSEL (bt848) gpio10: nSEL (bt848)
Sound Routing: Sound Routing:
gpio16: u2-A0 (1st 4052bt) gpio16: u2-A0 (1st 4052bt)
gpio17: u2-A1 gpio17: u2-A1
gpio18: u2-nEN gpio18: u2-nEN
gpio19: u4-A0 (2nd 4052) gpio19: u4-A0 (2nd 4052)
gpio20: u4-A1 gpio20: u4-A1
u4-nEN - GND u4-nEN - GND
Btspy: Btspy:
00000 : Cdrom (internal audio input) 00000 : Cdrom (internal audio input)
10000 : ext. Video audio input 10000 : ext. Video audio input
20000 : TV Mono 20000 : TV Mono
a0000 : TV Mono/2 a0000 : TV Mono/2
1a0000 : TV Stereo 1a0000 : TV Stereo
30000 : Radio 30000 : Radio
40000 : Mute 40000 : Mute
*/ */
},{ },{
/* Jannik Fritsch <jannik@techfak.uni-bielefeld.de> */ /* Jannik Fritsch <jannik@techfak.uni-bielefeld.de> */
...@@ -702,6 +732,7 @@ struct tvcard bttv_tvcards[] = { ...@@ -702,6 +732,7 @@ struct tvcard bttv_tvcards[] = {
.audiomux = { 0 }, .audiomux = { 0 },
.needs_tvaudio = 1, .needs_tvaudio = 1,
.tuner_type = -1, .tuner_type = -1,
.tuner_addr = ADDR_UNSET,
.muxsel_hook = PXC200_muxsel, .muxsel_hook = PXC200_muxsel,
},{ },{
...@@ -710,11 +741,12 @@ struct tvcard bttv_tvcards[] = { ...@@ -710,11 +741,12 @@ struct tvcard bttv_tvcards[] = {
.audio_inputs = 1, .audio_inputs = 1,
.tuner = 0, .tuner = 0,
.svhs = 2, .svhs = 2,
.gpiomask = 0x1800, //0x8dfe00 .gpiomask = 0x1800, /* 0x8dfe00 */
.muxsel = { 2, 3, 1, 1}, .muxsel = { 2, 3, 1, 1},
.audiomux = { 0, 0x0800, 0x1000, 0x1000, 0x1800, 0 }, .audiomux = { 0, 0x0800, 0x1000, 0x1000, 0x1800, 0 },
.pll = PLL_28, .pll = PLL_28,
.tuner_type = -1, .tuner_type = -1,
.tuner_addr = ADDR_UNSET,
},{ },{
.name = "Formac iProTV, Formac ProTV I (bt848)", .name = "Formac iProTV, Formac ProTV I (bt848)",
.video_inputs = 4, .video_inputs = 4,
...@@ -726,6 +758,7 @@ struct tvcard bttv_tvcards[] = { ...@@ -726,6 +758,7 @@ struct tvcard bttv_tvcards[] = {
.audiomux = { 1, 0, 0, 0, 0 }, .audiomux = { 1, 0, 0, 0, 0 },
.pll = PLL_28, .pll = PLL_28,
.tuner_type = TUNER_PHILIPS_PAL, .tuner_type = TUNER_PHILIPS_PAL,
.tuner_addr = ADDR_UNSET,
},{ },{
/* ---- card 0x20 ---------------------------------- */ /* ---- card 0x20 ---------------------------------- */
...@@ -739,6 +772,7 @@ struct tvcard bttv_tvcards[] = { ...@@ -739,6 +772,7 @@ struct tvcard bttv_tvcards[] = {
.audiomux = { 0 }, .audiomux = { 0 },
.needs_tvaudio = 0, .needs_tvaudio = 0,
.tuner_type = 4, .tuner_type = 4,
.tuner_addr = ADDR_UNSET,
},{ },{
.name = "Terratec TerraTValue Version Bt878", .name = "Terratec TerraTValue Version Bt878",
.video_inputs = 3, .video_inputs = 3,
...@@ -751,31 +785,33 @@ struct tvcard bttv_tvcards[] = { ...@@ -751,31 +785,33 @@ struct tvcard bttv_tvcards[] = {
.needs_tvaudio = 1, .needs_tvaudio = 1,
.pll = PLL_28, .pll = PLL_28,
.tuner_type = TUNER_PHILIPS_PAL, .tuner_type = TUNER_PHILIPS_PAL,
.tuner_addr = ADDR_UNSET,
},{ },{
.name = "Leadtek WinFast 2000/ WinFast 2000 XP", .name = "Leadtek WinFast 2000/ WinFast 2000 XP",
.video_inputs = 4, .video_inputs = 4,
.audio_inputs = 1, .audio_inputs = 1,
.tuner = 0, .tuner = 0,
.svhs = 2, .svhs = 2,
.muxsel = { 2, 3, 1, 1, 0}, // TV, CVid, SVid, CVid over SVid connector .muxsel = { 2, 3, 1, 1, 0}, /* TV, CVid, SVid, CVid over SVid connector */
/* Alexander Varakin <avarakin@hotmail.com> [stereo version] */ /* Alexander Varakin <avarakin@hotmail.com> [stereo version] */
.gpiomask = 0xb33000, .gpiomask = 0xb33000,
.audiomux = { 0x122000,0x1000,0x0000,0x620000,0x800000 }, .audiomux = { 0x122000,0x1000,0x0000,0x620000,0x800000 },
/* Audio Routing for "WinFast 2000 XP" (no tv stereo !) /* Audio Routing for "WinFast 2000 XP" (no tv stereo !)
gpio23 -- hef4052:nEnable (0x800000) gpio23 -- hef4052:nEnable (0x800000)
gpio12 -- hef4052:A1 gpio12 -- hef4052:A1
gpio13 -- hef4052:A0 gpio13 -- hef4052:A0
0x0000: external audio 0x0000: external audio
0x1000: FM 0x1000: FM
0x2000: TV 0x2000: TV
0x3000: n.c. 0x3000: n.c.
Note: There exists another variant "Winfast 2000" with tv stereo !? Note: There exists another variant "Winfast 2000" with tv stereo !?
Note: eeprom only contains FF and pci subsystem id 107d:6606 Note: eeprom only contains FF and pci subsystem id 107d:6606
*/ */
.needs_tvaudio = 0, .needs_tvaudio = 0,
.pll = PLL_28, .pll = PLL_28,
.has_radio = 1, .has_radio = 1,
.tuner_type = 5, // default for now, gpio reads BFFF06 for Pal bg+dk .tuner_type = 5, /* default for now, gpio reads BFFF06 for Pal bg+dk */
.tuner_addr = ADDR_UNSET,
.audio_hook = winfast2000_audio, .audio_hook = winfast2000_audio,
.has_remote = 1, .has_remote = 1,
},{ },{
...@@ -789,6 +825,7 @@ struct tvcard bttv_tvcards[] = { ...@@ -789,6 +825,7 @@ struct tvcard bttv_tvcards[] = {
.audiomux = { 0, 0x800, 0x1000, 0x1000, 0x1800}, .audiomux = { 0, 0x800, 0x1000, 0x1000, 0x1800},
.pll = PLL_28, .pll = PLL_28,
.tuner_type = -1, .tuner_type = -1,
.tuner_addr = ADDR_UNSET,
},{ },{
/* ---- card 0x24 ---------------------------------- */ /* ---- card 0x24 ---------------------------------- */
...@@ -802,6 +839,7 @@ struct tvcard bttv_tvcards[] = { ...@@ -802,6 +839,7 @@ struct tvcard bttv_tvcards[] = {
.audiomux = { 0, 0x800, 0x1000, 0x1000, 0x1800, 0 }, .audiomux = { 0, 0x800, 0x1000, 0x1000, 0x1800, 0 },
.pll = PLL_28, .pll = PLL_28,
.tuner_type = -1, .tuner_type = -1,
.tuner_addr = ADDR_UNSET,
.has_radio = 1, .has_radio = 1,
},{ },{
.name = "Prolink PixelView PlayTV pro", .name = "Prolink PixelView PlayTV pro",
...@@ -815,6 +853,7 @@ struct tvcard bttv_tvcards[] = { ...@@ -815,6 +853,7 @@ struct tvcard bttv_tvcards[] = {
.no_msp34xx = 1, .no_msp34xx = 1,
.pll = PLL_28, .pll = PLL_28,
.tuner_type = -1, .tuner_type = -1,
.tuner_addr = ADDR_UNSET,
},{ },{
.name = "Askey CPH06X TView99", .name = "Askey CPH06X TView99",
.video_inputs = 4, .video_inputs = 4,
...@@ -827,6 +866,7 @@ struct tvcard bttv_tvcards[] = { ...@@ -827,6 +866,7 @@ struct tvcard bttv_tvcards[] = {
.needs_tvaudio = 1, .needs_tvaudio = 1,
.pll = PLL_28, .pll = PLL_28,
.tuner_type = 1, .tuner_type = 1,
.tuner_addr = ADDR_UNSET,
.has_remote = 1, .has_remote = 1,
},{ },{
.name = "Pinnacle PCTV Studio/Rave", .name = "Pinnacle PCTV Studio/Rave",
...@@ -840,6 +880,7 @@ struct tvcard bttv_tvcards[] = { ...@@ -840,6 +880,7 @@ struct tvcard bttv_tvcards[] = {
.needs_tvaudio = 0, .needs_tvaudio = 0,
.pll = PLL_28, .pll = PLL_28,
.tuner_type = -1, .tuner_type = -1,
.tuner_addr = ADDR_UNSET,
},{ },{
/* ---- card 0x28 ---------------------------------- */ /* ---- card 0x28 ---------------------------------- */
...@@ -854,6 +895,7 @@ struct tvcard bttv_tvcards[] = { ...@@ -854,6 +895,7 @@ struct tvcard bttv_tvcards[] = {
.no_msp34xx = 1, .no_msp34xx = 1,
.needs_tvaudio = 1, .needs_tvaudio = 1,
.tuner_type = TUNER_PHILIPS_NTSC, .tuner_type = TUNER_PHILIPS_NTSC,
.tuner_addr = ADDR_UNSET,
.pll = PLL_28, .pll = PLL_28,
.has_radio = 1, .has_radio = 1,
},{ },{
...@@ -868,6 +910,7 @@ struct tvcard bttv_tvcards[] = { ...@@ -868,6 +910,7 @@ struct tvcard bttv_tvcards[] = {
.needs_tvaudio = 1, .needs_tvaudio = 1,
.pll = PLL_28, .pll = PLL_28,
.tuner_type = -1, .tuner_type = -1,
.tuner_addr = ADDR_UNSET,
.has_radio = 1, .has_radio = 1,
.audio_hook = avermedia_tvphone_audio, .audio_hook = avermedia_tvphone_audio,
},{ },{
...@@ -883,6 +926,7 @@ struct tvcard bttv_tvcards[] = { ...@@ -883,6 +926,7 @@ struct tvcard bttv_tvcards[] = {
.no_msp34xx = 1, .no_msp34xx = 1,
.pll = PLL_28, .pll = PLL_28,
.tuner_type = 1, .tuner_type = 1,
.tuner_addr = ADDR_UNSET,
},{ },{
.name = "Little OnAir TV", .name = "Little OnAir TV",
.video_inputs = 3, .video_inputs = 3,
...@@ -894,6 +938,7 @@ struct tvcard bttv_tvcards[] = { ...@@ -894,6 +938,7 @@ struct tvcard bttv_tvcards[] = {
.audiomux = {0xff9ff6, 0xff9ff6, 0xff1ff7, 0, 0xff3ffc}, .audiomux = {0xff9ff6, 0xff9ff6, 0xff1ff7, 0, 0xff3ffc},
.no_msp34xx = 1, .no_msp34xx = 1,
.tuner_type = -1, .tuner_type = -1,
.tuner_addr = ADDR_UNSET,
},{ },{
/* ---- card 0x2c ---------------------------------- */ /* ---- card 0x2c ---------------------------------- */
...@@ -908,6 +953,7 @@ struct tvcard bttv_tvcards[] = { ...@@ -908,6 +953,7 @@ struct tvcard bttv_tvcards[] = {
.no_msp34xx = 1, .no_msp34xx = 1,
.pll = PLL_NONE, .pll = PLL_NONE,
.tuner_type = -1, .tuner_type = -1,
.tuner_addr = ADDR_UNSET,
},{ },{
.name = "MATRIX-Vision MV-Delta 2", .name = "MATRIX-Vision MV-Delta 2",
.video_inputs = 5, .video_inputs = 5,
...@@ -920,6 +966,7 @@ struct tvcard bttv_tvcards[] = { ...@@ -920,6 +966,7 @@ struct tvcard bttv_tvcards[] = {
.no_msp34xx = 1, .no_msp34xx = 1,
.pll = PLL_28, .pll = PLL_28,
.tuner_type = -1, .tuner_type = -1,
.tuner_addr = ADDR_UNSET,
},{ },{
.name = "Zoltrix Genie TV/FM", .name = "Zoltrix Genie TV/FM",
.video_inputs = 3, .video_inputs = 3,
...@@ -932,6 +979,7 @@ struct tvcard bttv_tvcards[] = { ...@@ -932,6 +979,7 @@ struct tvcard bttv_tvcards[] = {
.no_msp34xx = 1, .no_msp34xx = 1,
.pll = PLL_28, .pll = PLL_28,
.tuner_type = 21, .tuner_type = 21,
.tuner_addr = ADDR_UNSET,
},{ },{
.name = "Terratec TV/Radio+", .name = "Terratec TV/Radio+",
.video_inputs = 3, .video_inputs = 3,
...@@ -945,6 +993,7 @@ struct tvcard bttv_tvcards[] = { ...@@ -945,6 +993,7 @@ struct tvcard bttv_tvcards[] = {
.no_msp34xx = 1, .no_msp34xx = 1,
.pll = PLL_35, .pll = PLL_35,
.tuner_type = 1, .tuner_type = 1,
.tuner_addr = ADDR_UNSET,
.has_radio = 1, .has_radio = 1,
},{ },{
...@@ -960,6 +1009,7 @@ struct tvcard bttv_tvcards[] = { ...@@ -960,6 +1009,7 @@ struct tvcard bttv_tvcards[] = {
.needs_tvaudio = 1, .needs_tvaudio = 1,
.pll = PLL_28, .pll = PLL_28,
.tuner_type = -1, .tuner_type = -1,
.tuner_addr = ADDR_UNSET,
},{ },{
.name = "IODATA GV-BCTV3/PCI", .name = "IODATA GV-BCTV3/PCI",
.video_inputs = 3, .video_inputs = 3,
...@@ -972,6 +1022,7 @@ struct tvcard bttv_tvcards[] = { ...@@ -972,6 +1022,7 @@ struct tvcard bttv_tvcards[] = {
.no_msp34xx = 1, .no_msp34xx = 1,
.pll = PLL_28, .pll = PLL_28,
.tuner_type = TUNER_ALPS_TSHC6_NTSC, .tuner_type = TUNER_ALPS_TSHC6_NTSC,
.tuner_addr = ADDR_UNSET,
.audio_hook = gvbctv3pci_audio, .audio_hook = gvbctv3pci_audio,
},{ },{
.name = "Prolink PV-BT878P+4E / PixelView PlayTV PAK / Lenco MXTV-9578 CP", .name = "Prolink PV-BT878P+4E / PixelView PlayTV PAK / Lenco MXTV-9578 CP",
...@@ -986,6 +1037,7 @@ struct tvcard bttv_tvcards[] = { ...@@ -986,6 +1037,7 @@ struct tvcard bttv_tvcards[] = {
.no_msp34xx = 1, .no_msp34xx = 1,
.pll = PLL_28, .pll = PLL_28,
.tuner_type = TUNER_PHILIPS_PAL_I, .tuner_type = TUNER_PHILIPS_PAL_I,
.tuner_addr = ADDR_UNSET,
.has_remote = 1, .has_remote = 1,
/* GPIO wiring: (different from Rev.4C !) /* GPIO wiring: (different from Rev.4C !)
GPIO17: U4.A0 (first hef4052bt) GPIO17: U4.A0 (first hef4052bt)
...@@ -994,8 +1046,8 @@ struct tvcard bttv_tvcards[] = { ...@@ -994,8 +1046,8 @@ struct tvcard bttv_tvcards[] = {
GPIO21: U4.nEN GPIO21: U4.nEN
GPIO22: BT832 Reset Line GPIO22: BT832 Reset Line
GPIO23: A5,A0, U5,nEN GPIO23: A5,A0, U5,nEN
Note: At i2c=0x8a is a Bt832 chip, which changes to 0x88 after being reset via GPIO22 Note: At i2c=0x8a is a Bt832 chip, which changes to 0x88 after being reset via GPIO22
*/ */
},{ },{
.name = "Eagle Wireless Capricorn2 (bt878A)", .name = "Eagle Wireless Capricorn2 (bt878A)",
.video_inputs = 4, .video_inputs = 4,
...@@ -1007,6 +1059,7 @@ struct tvcard bttv_tvcards[] = { ...@@ -1007,6 +1059,7 @@ struct tvcard bttv_tvcards[] = {
.audiomux = { 0, 1, 2, 3, 4}, .audiomux = { 0, 1, 2, 3, 4},
.pll = PLL_28, .pll = PLL_28,
.tuner_type = -1 /* TUNER_ALPS_TMDH2_NTSC */, .tuner_type = -1 /* TUNER_ALPS_TMDH2_NTSC */,
.tuner_addr = ADDR_UNSET,
},{ },{
/* ---- card 0x34 ---------------------------------- */ /* ---- card 0x34 ---------------------------------- */
...@@ -1020,20 +1073,21 @@ struct tvcard bttv_tvcards[] = { ...@@ -1020,20 +1073,21 @@ struct tvcard bttv_tvcards[] = {
.muxsel = { 2, 3, 1, 1}, .muxsel = { 2, 3, 1, 1},
.audiomux = { 1, 0xd0001, 0, 0, 10}, .audiomux = { 1, 0xd0001, 0, 0, 10},
/* sound path (5 sources): /* sound path (5 sources):
MUX1 (mask 0x03), Enable Pin 0x08 (0=enable, 1=disable) MUX1 (mask 0x03), Enable Pin 0x08 (0=enable, 1=disable)
0= ext. Audio IN 0= ext. Audio IN
1= from MUX2 1= from MUX2
2= Mono TV sound from Tuner 2= Mono TV sound from Tuner
3= not connected 3= not connected
MUX2 (mask 0x30000): MUX2 (mask 0x30000):
0,2,3= from MSP34xx 0,2,3= from MSP34xx
1= FM stereo Radio from Tuner */ 1= FM stereo Radio from Tuner */
.needs_tvaudio = 0, .needs_tvaudio = 0,
.pll = PLL_28, .pll = PLL_28,
.tuner_type = -1, .tuner_type = -1,
.tuner_addr = ADDR_UNSET,
},{ },{
/* Claas Langbehn <claas@bigfoot.com>, /* Claas Langbehn <claas@bigfoot.com>,
Sven Grothklags <sven@upb.de> */ Sven Grothklags <sven@upb.de> */
.name = "Typhoon TView RDS + FM Stereo / KNC1 TV Station RDS", .name = "Typhoon TView RDS + FM Stereo / KNC1 TV Station RDS",
.video_inputs = 4, .video_inputs = 4,
.audio_inputs = 3, .audio_inputs = 3,
...@@ -1045,10 +1099,11 @@ struct tvcard bttv_tvcards[] = { ...@@ -1045,10 +1099,11 @@ struct tvcard bttv_tvcards[] = {
.needs_tvaudio = 1, .needs_tvaudio = 1,
.pll = PLL_28, .pll = PLL_28,
.tuner_type = TUNER_PHILIPS_PAL, .tuner_type = TUNER_PHILIPS_PAL,
.tuner_addr = ADDR_UNSET,
.has_radio = 1, .has_radio = 1,
},{ },{
/* Tim Rstermundt <rosterm@uni-muenster.de> /* Tim Rstermundt <rosterm@uni-muenster.de>
in de.comp.os.unix.linux.hardware: in de.comp.os.unix.linux.hardware:
options bttv card=0 pll=1 radio=1 gpiomask=0x18e0 options bttv card=0 pll=1 radio=1 gpiomask=0x18e0
audiomux=0x44c71f,0x44d71f,0,0x44d71f,0x44dfff audiomux=0x44c71f,0x44d71f,0,0x44d71f,0x44dfff
options tuner type=5 */ options tuner type=5 */
...@@ -1060,15 +1115,16 @@ struct tvcard bttv_tvcards[] = { ...@@ -1060,15 +1115,16 @@ struct tvcard bttv_tvcards[] = {
.gpiomask = 0x18e0, .gpiomask = 0x18e0,
.muxsel = { 2, 3, 1, 1}, .muxsel = { 2, 3, 1, 1},
.audiomux = { 0x0000,0x0800,0x1000,0x1000,0x18e0 }, .audiomux = { 0x0000,0x0800,0x1000,0x1000,0x18e0 },
/* For cards with tda9820/tda9821: /* For cards with tda9820/tda9821:
0x0000: Tuner normal stereo 0x0000: Tuner normal stereo
0x0080: Tuner A2 SAP (second audio program = Zweikanalton) 0x0080: Tuner A2 SAP (second audio program = Zweikanalton)
0x0880: Tuner A2 stereo */ 0x0880: Tuner A2 stereo */
.pll = PLL_28, .pll = PLL_28,
.tuner_type = -1, .tuner_type = -1,
.tuner_addr = ADDR_UNSET,
},{ },{
/* Miguel Angel Alvarez <maacruz@navegalia.com> /* Miguel Angel Alvarez <maacruz@navegalia.com>
old Easy TV BT848 version (model CPH031) */ old Easy TV BT848 version (model CPH031) */
.name = "Askey CPH031/ BESTBUY Easy TV", .name = "Askey CPH031/ BESTBUY Easy TV",
.video_inputs = 4, .video_inputs = 4,
.audio_inputs = 1, .audio_inputs = 1,
...@@ -1080,6 +1136,7 @@ struct tvcard bttv_tvcards[] = { ...@@ -1080,6 +1136,7 @@ struct tvcard bttv_tvcards[] = {
.needs_tvaudio = 0, .needs_tvaudio = 0,
.pll = PLL_28, .pll = PLL_28,
.tuner_type = TUNER_TEMIC_PAL, .tuner_type = TUNER_TEMIC_PAL,
.tuner_addr = ADDR_UNSET,
},{ },{
/* ---- card 0x38 ---------------------------------- */ /* ---- card 0x38 ---------------------------------- */
...@@ -1094,10 +1151,11 @@ struct tvcard bttv_tvcards[] = { ...@@ -1094,10 +1151,11 @@ struct tvcard bttv_tvcards[] = {
.audiomux = { 0, 0x800, 0x1000, 0x1000, 0x1800, 0 }, .audiomux = { 0, 0x800, 0x1000, 0x1000, 0x1800, 0 },
.pll = PLL_28, .pll = PLL_28,
.tuner_type = 5, .tuner_type = 5,
.tuner_addr = ADDR_UNSET,
},{ },{
/* This is the ultimate cheapo capture card /* This is the ultimate cheapo capture card
* just a BT848A on a small PCB! * just a BT848A on a small PCB!
* Steve Hosgood <steve@equiinet.com> */ * Steve Hosgood <steve@equiinet.com> */
.name = "GrandTec 'Grand Video Capture' (Bt848)", .name = "GrandTec 'Grand Video Capture' (Bt848)",
.video_inputs = 2, .video_inputs = 2,
.audio_inputs = 0, .audio_inputs = 0,
...@@ -1110,19 +1168,21 @@ struct tvcard bttv_tvcards[] = { ...@@ -1110,19 +1168,21 @@ struct tvcard bttv_tvcards[] = {
.no_msp34xx = 1, .no_msp34xx = 1,
.pll = PLL_35, .pll = PLL_35,
.tuner_type = -1, .tuner_type = -1,
.tuner_addr = ADDR_UNSET,
},{ },{
/* Daniel Herrington <daniel.herrington@home.com> */ /* Daniel Herrington <daniel.herrington@home.com> */
.name = "Askey CPH060/ Phoebe TV Master Only (No FM)", .name = "Askey CPH060/ Phoebe TV Master Only (No FM)",
.video_inputs = 3, .video_inputs = 3,
.audio_inputs = 1, .audio_inputs = 1,
.tuner = 0, .tuner = 0,
.svhs = 2, .svhs = 2,
.gpiomask = 0xe00, .gpiomask = 0xe00,
.muxsel = { 2, 3, 1, 1}, .muxsel = { 2, 3, 1, 1},
.audiomux = { 0x400, 0x400, 0x400, 0x400, 0x800, 0x400 }, .audiomux = { 0x400, 0x400, 0x400, 0x400, 0x800, 0x400 },
.needs_tvaudio = 1, .needs_tvaudio = 1,
.pll = PLL_28, .pll = PLL_28,
.tuner_type = TUNER_TEMIC_4036FY5_NTSC, .tuner_type = TUNER_TEMIC_4036FY5_NTSC,
.tuner_addr = ADDR_UNSET,
},{ },{
/* Matti Mottus <mottus@physic.ut.ee> */ /* Matti Mottus <mottus@physic.ut.ee> */
.name = "Askey CPH03x TV Capturer", .name = "Askey CPH03x TV Capturer",
...@@ -1130,11 +1190,12 @@ struct tvcard bttv_tvcards[] = { ...@@ -1130,11 +1190,12 @@ struct tvcard bttv_tvcards[] = {
.audio_inputs = 1, .audio_inputs = 1,
.tuner = 0, .tuner = 0,
.svhs = 2, .svhs = 2,
.gpiomask = 0x03000F, .gpiomask = 0x03000F,
.muxsel = { 2, 3, 1, 0}, .muxsel = { 2, 3, 1, 0},
.audiomux = { 2,0,0,0,1 }, .audiomux = { 2,0,0,0,1 },
.pll = PLL_28, .pll = PLL_28,
.tuner_type = 0, .tuner_type = 0,
.tuner_addr = ADDR_UNSET,
},{ },{
/* ---- card 0x3c ---------------------------------- */ /* ---- card 0x3c ---------------------------------- */
...@@ -1149,7 +1210,7 @@ struct tvcard bttv_tvcards[] = { ...@@ -1149,7 +1210,7 @@ struct tvcard bttv_tvcards[] = {
.audiomux = { 2, 0, 0, 1, 8}, .audiomux = { 2, 0, 0, 1, 8},
.pll = PLL_35, .pll = PLL_35,
.tuner_type = TUNER_TEMIC_PAL, .tuner_type = TUNER_TEMIC_PAL,
.tuner_addr = ADDR_UNSET,
},{ },{
/* Adrian Cox <adrian@humboldt.co.uk */ /* Adrian Cox <adrian@humboldt.co.uk */
.name = "AG Electronics GMV1", .name = "AG Electronics GMV1",
...@@ -1164,10 +1225,11 @@ struct tvcard bttv_tvcards[] = { ...@@ -1164,10 +1225,11 @@ struct tvcard bttv_tvcards[] = {
.needs_tvaudio = 0, .needs_tvaudio = 0,
.pll = PLL_28, .pll = PLL_28,
.tuner_type = -1, .tuner_type = -1,
.tuner_addr = ADDR_UNSET,
},{ },{
/* Miguel Angel Alvarez <maacruz@navegalia.com> /* Miguel Angel Alvarez <maacruz@navegalia.com>
new Easy TV BT878 version (model CPH061) new Easy TV BT878 version (model CPH061)
special thanks to Informatica Mieres for providing the card */ special thanks to Informatica Mieres for providing the card */
.name = "Askey CPH061/ BESTBUY Easy TV (bt878)", .name = "Askey CPH061/ BESTBUY Easy TV (bt878)",
.video_inputs = 3, .video_inputs = 3,
.audio_inputs = 2, .audio_inputs = 2,
...@@ -1179,6 +1241,7 @@ struct tvcard bttv_tvcards[] = { ...@@ -1179,6 +1241,7 @@ struct tvcard bttv_tvcards[] = {
.needs_tvaudio = 0, .needs_tvaudio = 0,
.pll = PLL_28, .pll = PLL_28,
.tuner_type = TUNER_PHILIPS_PAL, .tuner_type = TUNER_PHILIPS_PAL,
.tuner_addr = ADDR_UNSET,
},{ },{
/* Lukas Gebauer <geby@volny.cz> */ /* Lukas Gebauer <geby@volny.cz> */
.name = "ATI TV-Wonder", .name = "ATI TV-Wonder",
...@@ -1191,6 +1254,7 @@ struct tvcard bttv_tvcards[] = { ...@@ -1191,6 +1254,7 @@ struct tvcard bttv_tvcards[] = {
.audiomux = { 0xbffe, 0, 0xbfff, 0, 0xbffe}, .audiomux = { 0xbffe, 0, 0xbfff, 0, 0xbffe},
.pll = PLL_28, .pll = PLL_28,
.tuner_type = TUNER_TEMIC_4006FN5_MULTI_PAL, .tuner_type = TUNER_TEMIC_4006FN5_MULTI_PAL,
.tuner_addr = ADDR_UNSET,
},{ },{
/* ---- card 0x40 ---------------------------------- */ /* ---- card 0x40 ---------------------------------- */
...@@ -1206,6 +1270,7 @@ struct tvcard bttv_tvcards[] = { ...@@ -1206,6 +1270,7 @@ struct tvcard bttv_tvcards[] = {
.no_msp34xx = 1, .no_msp34xx = 1,
.pll = PLL_28, .pll = PLL_28,
.tuner_type = TUNER_TEMIC_4006FN5_MULTI_PAL, .tuner_type = TUNER_TEMIC_4006FN5_MULTI_PAL,
.tuner_addr = ADDR_UNSET,
},{ },{
/* DeeJay <deejay@westel900.net (2000S) */ /* DeeJay <deejay@westel900.net (2000S) */
.name = "Lifeview FlyVideo 2000S LR90", .name = "Lifeview FlyVideo 2000S LR90",
...@@ -1216,7 +1281,7 @@ struct tvcard bttv_tvcards[] = { ...@@ -1216,7 +1281,7 @@ struct tvcard bttv_tvcards[] = {
.gpiomask = 0x18e0, .gpiomask = 0x18e0,
.muxsel = { 2, 3, 0, 1}, .muxsel = { 2, 3, 0, 1},
/* Radio changed from 1e80 to 0x800 to make /* Radio changed from 1e80 to 0x800 to make
FlyVideo2000S in .hu happy (gm)*/ FlyVideo2000S in .hu happy (gm)*/
/* -dk-???: set mute=0x1800 for tda9874h daughterboard */ /* -dk-???: set mute=0x1800 for tda9874h daughterboard */
.audiomux = { 0x0000,0x0800,0x1000,0x1000,0x1800, 0x1080 }, .audiomux = { 0x0000,0x0800,0x1000,0x1000,0x1800, 0x1080 },
.audio_hook = fv2000s_audio, .audio_hook = fv2000s_audio,
...@@ -1225,6 +1290,7 @@ struct tvcard bttv_tvcards[] = { ...@@ -1225,6 +1290,7 @@ struct tvcard bttv_tvcards[] = {
.needs_tvaudio = 1, .needs_tvaudio = 1,
.pll = PLL_28, .pll = PLL_28,
.tuner_type = 5, .tuner_type = 5,
.tuner_addr = ADDR_UNSET,
},{ },{
.name = "Terratec TValueRadio", .name = "Terratec TValueRadio",
.video_inputs = 3, .video_inputs = 3,
...@@ -1237,6 +1303,7 @@ struct tvcard bttv_tvcards[] = { ...@@ -1237,6 +1303,7 @@ struct tvcard bttv_tvcards[] = {
.needs_tvaudio = 1, .needs_tvaudio = 1,
.pll = PLL_28, .pll = PLL_28,
.tuner_type = TUNER_PHILIPS_PAL, .tuner_type = TUNER_PHILIPS_PAL,
.tuner_addr = ADDR_UNSET,
.has_radio = 1, .has_radio = 1,
},{ },{
/* TANAKA Kei <peg00625@nifty.com> */ /* TANAKA Kei <peg00625@nifty.com> */
...@@ -1251,25 +1318,27 @@ struct tvcard bttv_tvcards[] = { ...@@ -1251,25 +1318,27 @@ struct tvcard bttv_tvcards[] = {
.no_msp34xx = 1, .no_msp34xx = 1,
.pll = PLL_28, .pll = PLL_28,
.tuner_type = TUNER_SHARP_2U5JF5540_NTSC, .tuner_type = TUNER_SHARP_2U5JF5540_NTSC,
.tuner_addr = ADDR_UNSET,
.audio_hook = gvbctv3pci_audio, .audio_hook = gvbctv3pci_audio,
},{ },{
/* ---- card 0x44 ---------------------------------- */ /* ---- card 0x44 ---------------------------------- */
.name = "3Dfx VoodooTV FM (Euro), VoodooTV 200 (USA)", .name = "3Dfx VoodooTV FM (Euro), VoodooTV 200 (USA)",
// try "insmod msp3400 simple=0" if you have /* try "insmod msp3400 simple=0" if you have
// sound problems with this card. * sound problems with this card. */
.video_inputs = 4, .video_inputs = 4,
.audio_inputs = 1, .audio_inputs = 1,
.tuner = 0, .tuner = 0,
.svhs = -1, .svhs = -1,
.gpiomask = 0x4f8a00, .gpiomask = 0x4f8a00,
// 0x100000: 1=MSP enabled (0=disable again) /* 0x100000: 1=MSP enabled (0=disable again)
// 0x010000: Connected to "S0" on tda9880 (0=Pal/BG, 1=NTSC) * 0x010000: Connected to "S0" on tda9880 (0=Pal/BG, 1=NTSC) */
.audiomux = {0x947fff, 0x987fff,0x947fff,0x947fff, 0x947fff}, .audiomux = {0x947fff, 0x987fff,0x947fff,0x947fff, 0x947fff},
// tvtuner, radio, external,internal, mute, stereo /* tvtuner, radio, external,internal, mute, stereo
/* tuner, Composit, SVid, Composit-on-Svid-adapter*/ * tuner, Composit, SVid, Composit-on-Svid-adapter */
.muxsel = { 2, 3 ,0 ,1}, .muxsel = { 2, 3 ,0 ,1},
.tuner_type = TUNER_MT2032, .tuner_type = TUNER_MT2032,
.tuner_addr = ADDR_UNSET,
.pll = PLL_28, .pll = PLL_28,
.has_radio = 1, .has_radio = 1,
},{ },{
...@@ -1279,22 +1348,24 @@ struct tvcard bttv_tvcards[] = { ...@@ -1279,22 +1348,24 @@ struct tvcard bttv_tvcards[] = {
.audio_inputs = 0, .audio_inputs = 0,
.tuner = -1, .tuner = -1,
.tuner_type = -1, .tuner_type = -1,
.tuner_addr = ADDR_UNSET,
.pll = PLL_28, .pll = PLL_28,
.muxsel = { 2 }, .muxsel = { 2 },
.gpiomask = 0 .gpiomask = 0
},{ },{
/* Tomasz Pyra <hellfire@sedez.iq.pl> */ /* Tomasz Pyra <hellfire@sedez.iq.pl> */
.name = "Prolink Pixelview PV-BT878P+ (Rev.4C,8E)", .name = "Prolink Pixelview PV-BT878P+ (Rev.4C,8E)",
.video_inputs = 3, .video_inputs = 3,
.audio_inputs = 4, .audio_inputs = 4,
.tuner = 0, .tuner = 0,
.svhs = 2, .svhs = 2,
.gpiomask = 15, .gpiomask = 15,
.muxsel = { 2, 3, 1, 1}, .muxsel = { 2, 3, 1, 1},
.audiomux = { 0, 0, 11, 7, 13, 0}, // TV and Radio with same GPIO ! .audiomux = { 0, 0, 11, 7, 13, 0}, /* TV and Radio with same GPIO ! */
.needs_tvaudio = 1, .needs_tvaudio = 1,
.pll = PLL_28, .pll = PLL_28,
.tuner_type = 25, .tuner_type = 25,
.tuner_addr = ADDR_UNSET,
.has_remote = 1, .has_remote = 1,
/* GPIO wiring: /* GPIO wiring:
GPIO0: U4.A0 (hef4052bt) GPIO0: U4.A0 (hef4052bt)
...@@ -1302,16 +1373,18 @@ struct tvcard bttv_tvcards[] = { ...@@ -1302,16 +1373,18 @@ struct tvcard bttv_tvcards[] = {
GPIO2: U4.A1 (second hef4052bt) GPIO2: U4.A1 (second hef4052bt)
GPIO3: U4.nEN, U5.A0, A5.nEN GPIO3: U4.nEN, U5.A0, A5.nEN
GPIO8-15: vrd866b ? GPIO8-15: vrd866b ?
*/ */
},{ },{
.name = "Lifeview FlyVideo 98EZ (capture only) LR51", .name = "Lifeview FlyVideo 98EZ (capture only) LR51",
.video_inputs = 4, .video_inputs = 4,
.audio_inputs = 0, .audio_inputs = 0,
.tuner = -1, .tuner = -1,
.svhs = 2, .svhs = 2,
.muxsel = { 2, 3, 1, 1}, // AV1, AV2, SVHS, CVid adapter on SVHS .muxsel = { 2, 3, 1, 1}, /* AV1, AV2, SVHS, CVid adapter on SVHS */
.pll = PLL_28, .pll = PLL_28,
.no_msp34xx = 1, .no_msp34xx = 1,
.tuner_type = UNSET,
.tuner_addr = ADDR_UNSET,
},{ },{
/* ---- card 0x48 ---------------------------------- */ /* ---- card 0x48 ---------------------------------- */
...@@ -1329,8 +1402,9 @@ struct tvcard bttv_tvcards[] = { ...@@ -1329,8 +1402,9 @@ struct tvcard bttv_tvcards[] = {
.no_tda9875 = 1, .no_tda9875 = 1,
.pll = PLL_28, .pll = PLL_28,
.tuner_type = 5, .tuner_type = 5,
.audio_hook = pvbt878p9b_audio, // Note: not all cards have stereo .tuner_addr = ADDR_UNSET,
.has_radio = 1, // Note: not all cards have radio .audio_hook = pvbt878p9b_audio, /* Note: not all cards have stereo */
.has_radio = 1, /* Note: not all cards have radio */
.has_remote = 1, .has_remote = 1,
/* GPIO wiring: /* GPIO wiring:
GPIO0: A0 hef4052 GPIO0: A0 hef4052
...@@ -1338,7 +1412,7 @@ struct tvcard bttv_tvcards[] = { ...@@ -1338,7 +1412,7 @@ struct tvcard bttv_tvcards[] = {
GPIO3: nEN hef4052 GPIO3: nEN hef4052
GPIO8-15: vrd866b GPIO8-15: vrd866b
GPIO20,22,23: R30,R29,R28 GPIO20,22,23: R30,R29,R28
*/ */
},{ },{
/* Clay Kunz <ckunz@mail.arc.nasa.gov> */ /* Clay Kunz <ckunz@mail.arc.nasa.gov> */
/* you must jumper JP5 for the card to work */ /* you must jumper JP5 for the card to work */
...@@ -1352,6 +1426,7 @@ struct tvcard bttv_tvcards[] = { ...@@ -1352,6 +1426,7 @@ struct tvcard bttv_tvcards[] = {
.audiomux = { 0 }, .audiomux = { 0 },
.needs_tvaudio = 0, .needs_tvaudio = 0,
.tuner_type = -1, .tuner_type = -1,
.tuner_addr = ADDR_UNSET,
},{ },{
/* Miguel Freitas <miguel@cetuc.puc-rio.br> */ /* Miguel Freitas <miguel@cetuc.puc-rio.br> */
.name = "RemoteVision MX (RV605)", .name = "RemoteVision MX (RV605)",
...@@ -1362,71 +1437,78 @@ struct tvcard bttv_tvcards[] = { ...@@ -1362,71 +1437,78 @@ struct tvcard bttv_tvcards[] = {
.gpiomask = 0x00, .gpiomask = 0x00,
.gpiomask2 = 0x07ff, .gpiomask2 = 0x07ff,
.muxsel = { 0x33, 0x13, 0x23, 0x43, 0xf3, 0x73, 0xe3, 0x03, .muxsel = { 0x33, 0x13, 0x23, 0x43, 0xf3, 0x73, 0xe3, 0x03,
0xd3, 0xb3, 0xc3, 0x63, 0x93, 0x53, 0x83, 0xa3 }, 0xd3, 0xb3, 0xc3, 0x63, 0x93, 0x53, 0x83, 0xa3 },
.no_msp34xx = 1, .no_msp34xx = 1,
.no_tda9875 = 1, .no_tda9875 = 1,
.tuner_type = -1, .tuner_type = -1,
.tuner_addr = ADDR_UNSET,
.muxsel_hook = rv605_muxsel, .muxsel_hook = rv605_muxsel,
},{ },{
.name = "Powercolor MTV878/ MTV878R/ MTV878F", .name = "Powercolor MTV878/ MTV878R/ MTV878F",
.video_inputs = 3, .video_inputs = 3,
.audio_inputs = 2, .audio_inputs = 2,
.tuner = 0, .tuner = 0,
.svhs = 2, .svhs = 2,
.gpiomask = 0x1C800F, // Bit0-2: Audio select, 8-12:remote control 14:remote valid 15:remote reset .gpiomask = 0x1C800F, /* Bit0-2: Audio select, 8-12:remote control 14:remote valid 15:remote reset */
.muxsel = { 2, 1, 1, }, .muxsel = { 2, 1, 1, },
.audiomux = { 0, 1, 2, 2, 4 }, .audiomux = { 0, 1, 2, 2, 4 },
.needs_tvaudio = 0, .needs_tvaudio = 0,
.tuner_type = TUNER_PHILIPS_PAL, .tuner_type = TUNER_PHILIPS_PAL,
.tuner_addr = ADDR_UNSET,
.pll = PLL_28, .pll = PLL_28,
.has_radio = 1, .has_radio = 1,
},{ },{
/* ---- card 0x4c ---------------------------------- */ /* ---- card 0x4c ---------------------------------- */
/* Masaki Suzuki <masaki@btree.org> */ /* Masaki Suzuki <masaki@btree.org> */
.name = "Canopus WinDVR PCI (COMPAQ Presario 3524JP, 5112JP)", .name = "Canopus WinDVR PCI (COMPAQ Presario 3524JP, 5112JP)",
.video_inputs = 3, .video_inputs = 3,
.audio_inputs = 1, .audio_inputs = 1,
.tuner = 0, .tuner = 0,
.svhs = 2, .svhs = 2,
.gpiomask = 0x140007, .gpiomask = 0x140007,
.muxsel = { 2, 3, 1, 1 }, .muxsel = { 2, 3, 1, 1 },
.audiomux = { 0, 1, 2, 3, 4, 0 }, .audiomux = { 0, 1, 2, 3, 4, 0 },
.tuner_type = TUNER_PHILIPS_NTSC, .tuner_type = TUNER_PHILIPS_NTSC,
.audio_hook = windvr_audio, .tuner_addr = ADDR_UNSET,
},{ .audio_hook = windvr_audio,
.name = "GrandTec Multi Capture Card (Bt878)", },{
.video_inputs = 4, .name = "GrandTec Multi Capture Card (Bt878)",
.audio_inputs = 0, .video_inputs = 4,
.tuner = -1, .audio_inputs = 0,
.svhs = -1, .tuner = -1,
.gpiomask = 0, .svhs = -1,
.muxsel = { 2, 3, 1, 0 }, .gpiomask = 0,
.audiomux = { 0 }, .muxsel = { 2, 3, 1, 0 },
.needs_tvaudio = 0, .audiomux = { 0 },
.no_msp34xx = 1, .needs_tvaudio = 0,
.pll = PLL_28, .no_msp34xx = 1,
.tuner_type = -1, .pll = PLL_28,
},{ .tuner_type = -1,
.name = "Jetway TV/Capture JW-TV878-FBK, Kworld KW-TV878RF", .tuner_addr = ADDR_UNSET,
.video_inputs = 4, },{
.audio_inputs = 3, .name = "Jetway TV/Capture JW-TV878-FBK, Kworld KW-TV878RF",
.tuner = 0, .video_inputs = 4,
.svhs = 2, .audio_inputs = 3,
.gpiomask = 7, .tuner = 0,
.muxsel = { 2, 3, 1, 1 }, // Tuner, SVid, SVHS, SVid to SVHS connector .svhs = 2,
.audiomux = { 0 ,0 ,4, 4,4,4},// Yes, this tuner uses the same audio output for TV and FM radio! .gpiomask = 7,
// This card lacks external Audio In, so we mute it on Ext. & Int. .muxsel = { 2, 3, 1, 1 }, /* Tuner, SVid, SVHS, SVid to SVHS connector */
// The PCB can take a sbx1637/sbx1673, wiring unknown. .audiomux = { 0 ,0 ,4, 4,4,4},/* Yes, this tuner uses the same audio output for TV and FM radio!
// This card lacks PCI subsystem ID, sigh. * This card lacks external Audio In, so we mute it on Ext. & Int.
// audiomux=1: lower volume, 2+3: mute * The PCB can take a sbx1637/sbx1673, wiring unknown.
// btwincap uses 0x80000/0x80003 * This card lacks PCI subsystem ID, sigh.
.needs_tvaudio = 0, * audiomux=1: lower volume, 2+3: mute
.no_msp34xx = 1, * btwincap uses 0x80000/0x80003
.pll = PLL_28, */
.tuner_type = 5, // Samsung TCPA9095PC27A (BG+DK), philips compatible, w/FM, stereo and .needs_tvaudio = 0,
// radio signal strength indicators work fine. .no_msp34xx = 1,
.has_radio = 1, .pll = PLL_28,
.tuner_type = 5,
.tuner_addr = ADDR_UNSET,
/* Samsung TCPA9095PC27A (BG+DK), philips compatible, w/FM, stereo and
radio signal strength indicators work fine. */
.has_radio = 1,
/* GPIO Info: /* GPIO Info:
GPIO0,1: HEF4052 A0,A1 GPIO0,1: HEF4052 A0,A1
GPIO2: HEF4052 nENABLE GPIO2: HEF4052 nENABLE
...@@ -1437,25 +1519,27 @@ struct tvcard bttv_tvcards[] = { ...@@ -1437,25 +1519,27 @@ struct tvcard bttv_tvcards[] = {
GPIO22,23: ?? GPIO22,23: ??
?? : mtu8b56ep microcontroller for IR (GPIO wiring unknown)*/ ?? : mtu8b56ep microcontroller for IR (GPIO wiring unknown)*/
},{ },{
/* Arthur Tetzlaff-Deas, DSP Design Ltd <software@dspdesign.com> */ /* Arthur Tetzlaff-Deas, DSP Design Ltd <software@dspdesign.com> */
.name = "DSP Design TCVIDEO", .name = "DSP Design TCVIDEO",
.video_inputs = 4, .video_inputs = 4,
.svhs = -1, .svhs = -1,
.muxsel = { 2, 3, 1, 0}, .muxsel = { 2, 3, 1, 0},
.pll = PLL_28, .pll = PLL_28,
.tuner_type = -1, .tuner_type = -1,
.tuner_addr = ADDR_UNSET,
},{ },{
/* ---- card 0x50 ---------------------------------- */ /* ---- card 0x50 ---------------------------------- */
.name = "Hauppauge WinTV PVR", .name = "Hauppauge WinTV PVR",
.video_inputs = 4, .video_inputs = 4,
.audio_inputs = 1, .audio_inputs = 1,
.tuner = 0, .tuner = 0,
.svhs = 2, .svhs = 2,
.muxsel = { 2, 0, 1, 1}, .muxsel = { 2, 0, 1, 1},
.needs_tvaudio = 1, .needs_tvaudio = 1,
.pll = PLL_28, .pll = PLL_28,
.tuner_type = -1, .tuner_type = -1,
.tuner_addr = ADDR_UNSET,
.gpiomask = 7, .gpiomask = 7,
.audiomux = {7}, .audiomux = {7},
...@@ -1471,6 +1555,7 @@ struct tvcard bttv_tvcards[] = { ...@@ -1471,6 +1555,7 @@ struct tvcard bttv_tvcards[] = {
.no_msp34xx = 1, .no_msp34xx = 1,
.pll = PLL_28, .pll = PLL_28,
.tuner_type = TUNER_PHILIPS_NTSC_M, .tuner_type = TUNER_PHILIPS_NTSC_M,
.tuner_addr = ADDR_UNSET,
.audio_hook = gvbctv5pci_audio, .audio_hook = gvbctv5pci_audio,
.has_radio = 1, .has_radio = 1,
},{ },{
...@@ -1482,9 +1567,10 @@ struct tvcard bttv_tvcards[] = { ...@@ -1482,9 +1567,10 @@ struct tvcard bttv_tvcards[] = {
.muxsel = { 3, 2, 0, 1 }, .muxsel = { 3, 2, 0, 1 },
.pll = PLL_28, .pll = PLL_28,
.tuner_type = -1, .tuner_type = -1,
.no_msp34xx = 1, .tuner_addr = ADDR_UNSET,
.no_tda9875 = 1, .no_msp34xx = 1,
.no_tda7432 = 1, .no_tda9875 = 1,
.no_tda7432 = 1,
},{ },{
.name = "Osprey 100/150 (848)", /* 0x04-54C0-C1 & older boards */ .name = "Osprey 100/150 (848)", /* 0x04-54C0-C1 & older boards */
.video_inputs = 3, .video_inputs = 3,
...@@ -1494,9 +1580,10 @@ struct tvcard bttv_tvcards[] = { ...@@ -1494,9 +1580,10 @@ struct tvcard bttv_tvcards[] = {
.muxsel = { 2, 3, 1 }, .muxsel = { 2, 3, 1 },
.pll = PLL_28, .pll = PLL_28,
.tuner_type = -1, .tuner_type = -1,
.no_msp34xx = 1, .tuner_addr = ADDR_UNSET,
.no_tda9875 = 1, .no_msp34xx = 1,
.no_tda7432 = 1, .no_tda9875 = 1,
.no_tda7432 = 1,
},{ },{
/* ---- card 0x54 ---------------------------------- */ /* ---- card 0x54 ---------------------------------- */
...@@ -1508,9 +1595,10 @@ struct tvcard bttv_tvcards[] = { ...@@ -1508,9 +1595,10 @@ struct tvcard bttv_tvcards[] = {
.muxsel = { 3, 1 }, .muxsel = { 3, 1 },
.pll = PLL_28, .pll = PLL_28,
.tuner_type = -1, .tuner_type = -1,
.no_msp34xx = 1, .tuner_addr = ADDR_UNSET,
.no_tda9875 = 1, .no_msp34xx = 1,
.no_tda7432 = 1, .no_tda9875 = 1,
.no_tda7432 = 1,
},{ },{
.name = "Osprey 101/151", /* 0x1(4|5)-0004-C4 */ .name = "Osprey 101/151", /* 0x1(4|5)-0004-C4 */
.video_inputs = 1, .video_inputs = 1,
...@@ -1520,9 +1608,10 @@ struct tvcard bttv_tvcards[] = { ...@@ -1520,9 +1608,10 @@ struct tvcard bttv_tvcards[] = {
.muxsel = { 0 }, .muxsel = { 0 },
.pll = PLL_28, .pll = PLL_28,
.tuner_type = -1, .tuner_type = -1,
.no_msp34xx = 1, .tuner_addr = ADDR_UNSET,
.no_tda9875 = 1, .no_msp34xx = 1,
.no_tda7432 = 1, .no_tda9875 = 1,
.no_tda7432 = 1,
},{ },{
.name = "Osprey 101/151 w/ svid", /* 0x(16|17|20)-00C4-C1 */ .name = "Osprey 101/151 w/ svid", /* 0x(16|17|20)-00C4-C1 */
.video_inputs = 2, .video_inputs = 2,
...@@ -1532,9 +1621,10 @@ struct tvcard bttv_tvcards[] = { ...@@ -1532,9 +1621,10 @@ struct tvcard bttv_tvcards[] = {
.muxsel = { 0, 1 }, .muxsel = { 0, 1 },
.pll = PLL_28, .pll = PLL_28,
.tuner_type = -1, .tuner_type = -1,
.no_msp34xx = 1, .tuner_addr = ADDR_UNSET,
.no_tda9875 = 1, .no_msp34xx = 1,
.no_tda7432 = 1, .no_tda9875 = 1,
.no_tda7432 = 1,
},{ },{
.name = "Osprey 200/201/250/251", /* 0x1(8|9|E|F)-0004-C4 */ .name = "Osprey 200/201/250/251", /* 0x1(8|9|E|F)-0004-C4 */
.video_inputs = 1, .video_inputs = 1,
...@@ -1543,10 +1633,11 @@ struct tvcard bttv_tvcards[] = { ...@@ -1543,10 +1633,11 @@ struct tvcard bttv_tvcards[] = {
.svhs = -1, .svhs = -1,
.muxsel = { 0 }, .muxsel = { 0 },
.pll = PLL_28, .pll = PLL_28,
.tuner_type = -1, .tuner_type = UNSET,
.no_msp34xx = 1, .tuner_addr = ADDR_UNSET,
.no_tda9875 = 1, .no_msp34xx = 1,
.no_tda7432 = 1, .no_tda9875 = 1,
.no_tda7432 = 1,
},{ },{
/* ---- card 0x58 ---------------------------------- */ /* ---- card 0x58 ---------------------------------- */
...@@ -1557,10 +1648,11 @@ struct tvcard bttv_tvcards[] = { ...@@ -1557,10 +1648,11 @@ struct tvcard bttv_tvcards[] = {
.svhs = 1, .svhs = 1,
.muxsel = { 0, 1 }, .muxsel = { 0, 1 },
.pll = PLL_28, .pll = PLL_28,
.tuner_type = -1, .tuner_type = UNSET,
.no_msp34xx = 1, .tuner_addr = ADDR_UNSET,
.no_tda9875 = 1, .no_msp34xx = 1,
.no_tda7432 = 1, .no_tda9875 = 1,
.no_tda7432 = 1,
},{ },{
.name = "Osprey 210/220", /* 0x1(A|B)-04C0-C1 */ .name = "Osprey 210/220", /* 0x1(A|B)-04C0-C1 */
.video_inputs = 2, .video_inputs = 2,
...@@ -1569,10 +1661,11 @@ struct tvcard bttv_tvcards[] = { ...@@ -1569,10 +1661,11 @@ struct tvcard bttv_tvcards[] = {
.svhs = 1, .svhs = 1,
.muxsel = { 2, 3 }, .muxsel = { 2, 3 },
.pll = PLL_28, .pll = PLL_28,
.tuner_type = -1, .tuner_type = UNSET,
.no_msp34xx = 1, .tuner_addr = ADDR_UNSET,
.no_tda9875 = 1, .no_msp34xx = 1,
.no_tda7432 = 1, .no_tda9875 = 1,
.no_tda7432 = 1,
},{ },{
.name = "Osprey 500", /* 500 */ .name = "Osprey 500", /* 500 */
.video_inputs = 2, .video_inputs = 2,
...@@ -1582,19 +1675,21 @@ struct tvcard bttv_tvcards[] = { ...@@ -1582,19 +1675,21 @@ struct tvcard bttv_tvcards[] = {
.muxsel = { 2, 3 }, .muxsel = { 2, 3 },
.pll = PLL_28, .pll = PLL_28,
.tuner_type = -1, .tuner_type = -1,
.no_msp34xx = 1, .tuner_addr = ADDR_UNSET,
.no_tda9875 = 1, .no_msp34xx = 1,
.no_tda7432 = 1, .no_tda9875 = 1,
.no_tda7432 = 1,
},{ },{
.name = "Osprey 540", /* 540 */ .name = "Osprey 540", /* 540 */
.video_inputs = 4, .video_inputs = 4,
.audio_inputs = 1, .audio_inputs = 1,
.tuner = -1, .tuner = -1,
.pll = PLL_28, .pll = PLL_28,
.tuner_type = -1, .tuner_type = -1,
.no_msp34xx = 1, .tuner_addr = ADDR_UNSET,
.no_tda9875 = 1, .no_msp34xx = 1,
.no_tda7432 = 1, .no_tda9875 = 1,
.no_tda7432 = 1,
},{ },{
/* ---- card 0x5C ---------------------------------- */ /* ---- card 0x5C ---------------------------------- */
...@@ -1605,10 +1700,11 @@ struct tvcard bttv_tvcards[] = { ...@@ -1605,10 +1700,11 @@ struct tvcard bttv_tvcards[] = {
.svhs = 1, .svhs = 1,
.muxsel = { 2, 3 }, .muxsel = { 2, 3 },
.pll = PLL_28, .pll = PLL_28,
.tuner_type = -1, .tuner_type = UNSET,
.no_msp34xx = 1, .tuner_addr = ADDR_UNSET,
.no_tda9875 = 1, .no_msp34xx = 1,
.no_tda7432 = 1, /* must avoid, conflicts with the bt860 */ .no_tda9875 = 1,
.no_tda7432 = 1, /* must avoid, conflicts with the bt860 */
},{ },{
/* M G Berberich <berberic@forwiss.uni-passau.de> */ /* M G Berberich <berberic@forwiss.uni-passau.de> */
.name = "IDS Eagle", .name = "IDS Eagle",
...@@ -1616,6 +1712,7 @@ struct tvcard bttv_tvcards[] = { ...@@ -1616,6 +1712,7 @@ struct tvcard bttv_tvcards[] = {
.audio_inputs = 0, .audio_inputs = 0,
.tuner = -1, .tuner = -1,
.tuner_type = -1, .tuner_type = -1,
.tuner_addr = ADDR_UNSET,
.svhs = -1, .svhs = -1,
.gpiomask = 0, .gpiomask = 0,
.muxsel = { 0, 1, 2, 3 }, .muxsel = { 0, 1, 2, 3 },
...@@ -1630,6 +1727,7 @@ struct tvcard bttv_tvcards[] = { ...@@ -1630,6 +1727,7 @@ struct tvcard bttv_tvcards[] = {
.svhs = 1, .svhs = 1,
.tuner = -1, .tuner = -1,
.tuner_type = -1, .tuner_type = -1,
.tuner_addr = ADDR_UNSET,
.no_msp34xx = 1, .no_msp34xx = 1,
.no_tda9875 = 1, .no_tda9875 = 1,
.no_tda7432 = 1, .no_tda7432 = 1,
...@@ -1641,38 +1739,40 @@ struct tvcard bttv_tvcards[] = { ...@@ -1641,38 +1739,40 @@ struct tvcard bttv_tvcards[] = {
.no_gpioirq = 1, .no_gpioirq = 1,
.has_dvb = 1, .has_dvb = 1,
},{ },{
.name = "Formac ProTV II (bt878)", .name = "Formac ProTV II (bt878)",
.video_inputs = 4, .video_inputs = 4,
.audio_inputs = 1, .audio_inputs = 1,
.tuner = 0, .tuner = 0,
.svhs = 3, .svhs = 3,
.gpiomask = 2, .gpiomask = 2,
// TV, Comp1, Composite over SVID con, SVID /* TV, Comp1, Composite over SVID con, SVID */
.muxsel = { 2, 3, 1, 1}, .muxsel = { 2, 3, 1, 1},
.audiomux = { 2, 2, 0, 0, 0 }, .audiomux = { 2, 2, 0, 0, 0 },
.pll = PLL_28, .pll = PLL_28,
.has_radio = 1, .has_radio = 1,
.tuner_type = TUNER_PHILIPS_PAL, .tuner_type = TUNER_PHILIPS_PAL,
/* sound routing: .tuner_addr = ADDR_UNSET,
GPIO=0x00,0x01,0x03: mute (?) /* sound routing:
0x02: both TV and radio (tuner: FM1216/I) GPIO=0x00,0x01,0x03: mute (?)
The card has onboard audio connectors labeled "cdrom" and "board", 0x02: both TV and radio (tuner: FM1216/I)
not soldered here, though unknown wiring. The card has onboard audio connectors labeled "cdrom" and "board",
Card lacks: external audio in, pci subsystem id. not soldered here, though unknown wiring.
*/ Card lacks: external audio in, pci subsystem id.
*/
},{ },{
/* ---- card 0x60 ---------------------------------- */ /* ---- card 0x60 ---------------------------------- */
.name = "MachTV", .name = "MachTV",
.video_inputs = 3, .video_inputs = 3,
.audio_inputs = 1, .audio_inputs = 1,
.tuner = 0, .tuner = 0,
.svhs = -1, .svhs = -1,
.gpiomask = 7, .gpiomask = 7,
.muxsel = { 2, 3, 1, 1}, .muxsel = { 2, 3, 1, 1},
.audiomux = { 0, 1, 2, 3, 4}, .audiomux = { 0, 1, 2, 3, 4},
.needs_tvaudio = 1, .needs_tvaudio = 1,
.tuner_type = 5, .tuner_type = 5,
.tuner_addr = ADDR_UNSET,
.pll = 1, .pll = 1,
},{ },{
.name = "Euresys Picolo", .name = "Euresys Picolo",
...@@ -1686,6 +1786,8 @@ struct tvcard bttv_tvcards[] = { ...@@ -1686,6 +1786,8 @@ struct tvcard bttv_tvcards[] = {
.no_tda7432 = 1, .no_tda7432 = 1,
.muxsel = { 2, 0, 1}, .muxsel = { 2, 0, 1},
.pll = PLL_28, .pll = PLL_28,
.tuner_type = UNSET,
.tuner_addr = ADDR_UNSET,
},{ },{
/* Luc Van Hoeylandt <luc@e-magic.be> */ /* Luc Van Hoeylandt <luc@e-magic.be> */
.name = "ProVideo PV150", /* 0x4f */ .name = "ProVideo PV150", /* 0x4f */
...@@ -1699,7 +1801,8 @@ struct tvcard bttv_tvcards[] = { ...@@ -1699,7 +1801,8 @@ struct tvcard bttv_tvcards[] = {
.needs_tvaudio = 0, .needs_tvaudio = 0,
.no_msp34xx = 1, .no_msp34xx = 1,
.pll = PLL_28, .pll = PLL_28,
.tuner_type = -1, .tuner_type = UNSET,
.tuner_addr = ADDR_UNSET,
},{ },{
/* Hiroshi Takekawa <sian@big.or.jp> */ /* Hiroshi Takekawa <sian@big.or.jp> */
/* This card lacks subsystem ID */ /* This card lacks subsystem ID */
...@@ -1716,78 +1819,85 @@ struct tvcard bttv_tvcards[] = { ...@@ -1716,78 +1819,85 @@ struct tvcard bttv_tvcards[] = {
.no_msp34xx = 1, .no_msp34xx = 1,
.pll = PLL_28, .pll = PLL_28,
.tuner_type = 2, .tuner_type = 2,
.tuner_addr = ADDR_UNSET,
.audio_hook = adtvk503_audio, .audio_hook = adtvk503_audio,
},{ },{
/* ---- card 0x64 ---------------------------------- */ /* ---- card 0x64 ---------------------------------- */
.name = "Hercules Smart TV Stereo", .name = "Hercules Smart TV Stereo",
.video_inputs = 4, .video_inputs = 4,
.audio_inputs = 1, .audio_inputs = 1,
.tuner = 0, .tuner = 0,
.svhs = 2, .svhs = 2,
.gpiomask = 0x00, .gpiomask = 0x00,
.muxsel = { 2, 3, 1, 1 }, .muxsel = { 2, 3, 1, 1 },
.needs_tvaudio = 1, .needs_tvaudio = 1,
.no_msp34xx = 1, .no_msp34xx = 1,
.pll = PLL_28, .pll = PLL_28,
.tuner_type = 5, .tuner_type = 5,
.tuner_addr = ADDR_UNSET,
/* Notes: /* Notes:
- card lacks subsystem ID - card lacks subsystem ID
- stereo variant w/ daughter board with tda9874a @0xb0 - stereo variant w/ daughter board with tda9874a @0xb0
- Audio Routing: - Audio Routing:
always from tda9874 independent of GPIO (?) always from tda9874 independent of GPIO (?)
external line in: unknown external line in: unknown
- Other chips: em78p156elp @ 0x96 (probably IR remote control) - Other chips: em78p156elp @ 0x96 (probably IR remote control)
hef4053 (instead 4052) for unknown function hef4053 (instead 4052) for unknown function
*/ */
},{ },{
.name = "Pace TV & Radio Card", .name = "Pace TV & Radio Card",
.video_inputs = 4, .video_inputs = 4,
.audio_inputs = 1, .audio_inputs = 1,
.tuner = 0, .tuner = 0,
.svhs = 2, .svhs = 2,
.muxsel = { 2, 3, 1, 1}, // Tuner, CVid, SVid, CVid over SVid connector .muxsel = { 2, 3, 1, 1}, /* Tuner, CVid, SVid, CVid over SVid connector */
.gpiomask = 0, .gpiomask = 0,
.no_tda9875 = 1, .no_tda9875 = 1,
.no_tda7432 = 1, .no_tda7432 = 1,
.tuner_type = 1, .tuner_type = 1,
.has_radio = 1, .tuner_addr = ADDR_UNSET,
.pll = PLL_28, .has_radio = 1,
/* Bt878, Bt832, FI1246 tuner; no pci subsystem id .pll = PLL_28,
only internal line out: (4pin header) RGGL /* Bt878, Bt832, FI1246 tuner; no pci subsystem id
Radio must be decoded by msp3410d (not routed through)*/ only internal line out: (4pin header) RGGL
// .digital_mode = DIGITAL_MODE_CAMERA, // todo! Radio must be decoded by msp3410d (not routed through)*/
},{ /*
/* Chris Willing <chris@vislab.usyd.edu.au> */ .digital_mode = DIGITAL_MODE_CAMERA, todo!
.name = "IVC-200", */
.video_inputs = 1, },{
.audio_inputs = 0, /* Chris Willing <chris@vislab.usyd.edu.au> */
.tuner = -1, .name = "IVC-200",
.tuner_type = -1, .video_inputs = 1,
.svhs = -1, .audio_inputs = 0,
.gpiomask = 0xdf, .tuner = -1,
.muxsel = { 2 }, .tuner_type = -1,
.pll = PLL_28, .tuner_addr = ADDR_UNSET,
.svhs = -1,
.gpiomask = 0xdf,
.muxsel = { 2 },
.pll = PLL_28,
},{ },{
.name = "Grand X-Guard / Trust 814PCI", .name = "Grand X-Guard / Trust 814PCI",
.video_inputs = 16, .video_inputs = 16,
.audio_inputs = 0, .audio_inputs = 0,
.tuner = -1, .tuner = -1,
.svhs = -1, .svhs = -1,
.tuner_type = 4, .tuner_type = 4,
.gpiomask2 = 0xff, .tuner_addr = ADDR_UNSET,
.gpiomask2 = 0xff,
.muxsel = { 2,2,2,2, 3,3,3,3, 1,1,1,1, 0,0,0,0 }, .muxsel = { 2,2,2,2, 3,3,3,3, 1,1,1,1, 0,0,0,0 },
.muxsel_hook = xguard_muxsel, .muxsel_hook = xguard_muxsel,
.no_msp34xx = 1, .no_msp34xx = 1,
.no_tda9875 = 1, .no_tda9875 = 1,
.no_tda7432 = 1, .no_tda7432 = 1,
.pll = PLL_28, .pll = PLL_28,
},{ },{
/* ---- card 0x68 ---------------------------------- */ /* ---- card 0x68 ---------------------------------- */
.name = "Nebula Electronics DigiTV", .name = "Nebula Electronics DigiTV",
.video_inputs = 1, .video_inputs = 1,
.tuner = -1, .tuner = -1,
.svhs = -1, .svhs = -1,
.muxsel = { 2, 3, 1, 0}, .muxsel = { 2, 3, 1, 0},
.no_msp34xx = 1, .no_msp34xx = 1,
...@@ -1795,22 +1905,24 @@ struct tvcard bttv_tvcards[] = { ...@@ -1795,22 +1905,24 @@ struct tvcard bttv_tvcards[] = {
.no_tda7432 = 1, .no_tda7432 = 1,
.pll = PLL_28, .pll = PLL_28,
.tuner_type = -1, .tuner_type = -1,
.tuner_addr = ADDR_UNSET,
.has_dvb = 1, .has_dvb = 1,
.no_gpioirq = 1, .no_gpioirq = 1,
},{ },{
/* Jorge Boncompte - DTI2 <jorge@dti2.net> */ /* Jorge Boncompte - DTI2 <jorge@dti2.net> */
.name = "ProVideo PV143", .name = "ProVideo PV143",
.video_inputs = 4, .video_inputs = 4,
.audio_inputs = 0, .audio_inputs = 0,
.tuner = -1, .tuner = -1,
.svhs = -1, .svhs = -1,
.gpiomask = 0, .gpiomask = 0,
.muxsel = { 2, 3, 1, 0 }, .muxsel = { 2, 3, 1, 0 },
.audiomux = { 0 }, .audiomux = { 0 },
.needs_tvaudio = 0, .needs_tvaudio = 0,
.no_msp34xx = 1, .no_msp34xx = 1,
.pll = PLL_28, .pll = PLL_28,
.tuner_type = -1, .tuner_type = -1,
.tuner_addr = ADDR_UNSET,
},{ },{
/* M.Klahr@phytec.de */ /* M.Klahr@phytec.de */
.name = "PHYTEC VD-009-X1 MiniDIN (bt878)", .name = "PHYTEC VD-009-X1 MiniDIN (bt878)",
...@@ -1824,6 +1936,7 @@ struct tvcard bttv_tvcards[] = { ...@@ -1824,6 +1936,7 @@ struct tvcard bttv_tvcards[] = {
.needs_tvaudio = 1, .needs_tvaudio = 1,
.pll = PLL_28, .pll = PLL_28,
.tuner_type = -1, .tuner_type = -1,
.tuner_addr = ADDR_UNSET,
},{ },{
.name = "PHYTEC VD-009-X1 Combi (bt878)", .name = "PHYTEC VD-009-X1 Combi (bt878)",
.video_inputs = 4, .video_inputs = 4,
...@@ -1836,6 +1949,7 @@ struct tvcard bttv_tvcards[] = { ...@@ -1836,6 +1949,7 @@ struct tvcard bttv_tvcards[] = {
.needs_tvaudio = 1, .needs_tvaudio = 1,
.pll = PLL_28, .pll = PLL_28,
.tuner_type = -1, .tuner_type = -1,
.tuner_addr = ADDR_UNSET,
},{ },{
/* ---- card 0x6c ---------------------------------- */ /* ---- card 0x6c ---------------------------------- */
...@@ -1846,13 +1960,14 @@ struct tvcard bttv_tvcards[] = { ...@@ -1846,13 +1960,14 @@ struct tvcard bttv_tvcards[] = {
.svhs = 9, .svhs = 9,
.gpiomask = 0x00, .gpiomask = 0x00,
.gpiomask2 = 0x03, /* gpiomask2 defines the bits used to switch audio .gpiomask2 = 0x03, /* gpiomask2 defines the bits used to switch audio
via the upper nibble of muxsel. here: used for via the upper nibble of muxsel. here: used for
xternal video-mux */ xternal video-mux */
.muxsel = { 0x02, 0x12, 0x22, 0x32, 0x03, 0x13, 0x23, 0x33, 0x01, 0x00 }, .muxsel = { 0x02, 0x12, 0x22, 0x32, 0x03, 0x13, 0x23, 0x33, 0x01, 0x00 },
.audiomux = { 0, 0, 0, 0, 0, 0 }, /* card has no audio */ .audiomux = { 0, 0, 0, 0, 0, 0 }, /* card has no audio */
.needs_tvaudio = 1, .needs_tvaudio = 1,
.pll = PLL_28, .pll = PLL_28,
.tuner_type = -1, .tuner_type = -1,
.tuner_addr = ADDR_UNSET,
},{ },{
.name = "PHYTEC VD-009 Combi (bt878)", .name = "PHYTEC VD-009 Combi (bt878)",
.video_inputs = 10, .video_inputs = 10,
...@@ -1861,23 +1976,25 @@ struct tvcard bttv_tvcards[] = { ...@@ -1861,23 +1976,25 @@ struct tvcard bttv_tvcards[] = {
.svhs = 9, .svhs = 9,
.gpiomask = 0x00, .gpiomask = 0x00,
.gpiomask2 = 0x03, /* gpiomask2 defines the bits used to switch audio .gpiomask2 = 0x03, /* gpiomask2 defines the bits used to switch audio
via the upper nibble of muxsel. here: used for via the upper nibble of muxsel. here: used for
xternal video-mux */ xternal video-mux */
.muxsel = { 0x02, 0x12, 0x22, 0x32, 0x03, 0x13, 0x23, 0x33, 0x01, 0x01 }, .muxsel = { 0x02, 0x12, 0x22, 0x32, 0x03, 0x13, 0x23, 0x33, 0x01, 0x01 },
.audiomux = { 0, 0, 0, 0, 0, 0 }, /* card has no audio */ .audiomux = { 0, 0, 0, 0, 0, 0 }, /* card has no audio */
.needs_tvaudio = 1, .needs_tvaudio = 1,
.pll = PLL_28, .pll = PLL_28,
.tuner_type = -1, .tuner_type = -1,
.tuner_addr = ADDR_UNSET,
},{ },{
.name = "IVC-100", .name = "IVC-100",
.video_inputs = 4, .video_inputs = 4,
.audio_inputs = 0, .audio_inputs = 0,
.tuner = -1, .tuner = -1,
.tuner_type = -1, .tuner_type = -1,
.svhs = -1, .tuner_addr = ADDR_UNSET,
.gpiomask = 0xdf, .svhs = -1,
.muxsel = { 2, 3, 1, 0 }, .gpiomask = 0xdf,
.pll = PLL_28, .muxsel = { 2, 3, 1, 0 },
.pll = PLL_28,
},{ },{
/* IVC-120G - Alan Garfield <alan@fromorbit.com> */ /* IVC-120G - Alan Garfield <alan@fromorbit.com> */
.name = "IVC-120G", .name = "IVC-120G",
...@@ -1885,6 +2002,7 @@ struct tvcard bttv_tvcards[] = { ...@@ -1885,6 +2002,7 @@ struct tvcard bttv_tvcards[] = {
.audio_inputs = 0, /* card has no audio */ .audio_inputs = 0, /* card has no audio */
.tuner = -1, /* card has no tuner */ .tuner = -1, /* card has no tuner */
.tuner_type = -1, .tuner_type = -1,
.tuner_addr = ADDR_UNSET,
.svhs = -1, /* card has no svhs */ .svhs = -1, /* card has no svhs */
.needs_tvaudio = 0, .needs_tvaudio = 0,
.no_msp34xx = 1, .no_msp34xx = 1,
...@@ -1892,7 +2010,7 @@ struct tvcard bttv_tvcards[] = { ...@@ -1892,7 +2010,7 @@ struct tvcard bttv_tvcards[] = {
.no_tda7432 = 1, .no_tda7432 = 1,
.gpiomask = 0x00, .gpiomask = 0x00,
.muxsel = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, .muxsel = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10 }, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10 },
.muxsel_hook = ivc120_muxsel, .muxsel_hook = ivc120_muxsel,
.pll = PLL_28, .pll = PLL_28,
},{ },{
...@@ -1905,6 +2023,7 @@ struct tvcard bttv_tvcards[] = { ...@@ -1905,6 +2023,7 @@ struct tvcard bttv_tvcards[] = {
.svhs = 2, .svhs = 2,
.muxsel = { 2, 3, 1, 0}, .muxsel = { 2, 3, 1, 0},
.tuner_type = TUNER_PHILIPS_ATSC, .tuner_type = TUNER_PHILIPS_ATSC,
.tuner_addr = ADDR_UNSET,
.has_dvb = 1, .has_dvb = 1,
},{ },{
.name = "Twinhan DST + clones", .name = "Twinhan DST + clones",
...@@ -1912,19 +2031,21 @@ struct tvcard bttv_tvcards[] = { ...@@ -1912,19 +2031,21 @@ struct tvcard bttv_tvcards[] = {
.no_tda9875 = 1, .no_tda9875 = 1,
.no_tda7432 = 1, .no_tda7432 = 1,
.tuner_type = TUNER_ABSENT, .tuner_type = TUNER_ABSENT,
.tuner_addr = ADDR_UNSET,
.no_video = 1, .no_video = 1,
.has_dvb = 1, .has_dvb = 1,
},{ },{
.name = "Winfast VC100", .name = "Winfast VC100",
.video_inputs = 3, .video_inputs = 3,
.audio_inputs = 0, .audio_inputs = 0,
.svhs = 1, .svhs = 1,
.tuner = -1, // no tuner .tuner = -1,
.muxsel = { 3, 1, 1, 3}, // Vid In, SVid In, Vid over SVid in connector .muxsel = { 3, 1, 1, 3}, /* Vid In, SVid In, Vid over SVid in connector */
.no_msp34xx = 1, .no_msp34xx = 1,
.no_tda9875 = 1, .no_tda9875 = 1,
.no_tda7432 = 1, .no_tda7432 = 1,
.tuner_type = TUNER_ABSENT, .tuner_type = TUNER_ABSENT,
.tuner_addr = ADDR_UNSET,
.pll = PLL_28, .pll = PLL_28,
},{ },{
.name = "Teppro TEV-560/InterVision IV-560", .name = "Teppro TEV-560/InterVision IV-560",
...@@ -1937,44 +2058,49 @@ struct tvcard bttv_tvcards[] = { ...@@ -1937,44 +2058,49 @@ struct tvcard bttv_tvcards[] = {
.audiomux = { 1, 1, 1, 1, 0}, .audiomux = { 1, 1, 1, 1, 0},
.needs_tvaudio = 1, .needs_tvaudio = 1,
.tuner_type = TUNER_PHILIPS_PAL, .tuner_type = TUNER_PHILIPS_PAL,
.tuner_addr = ADDR_UNSET,
.pll = PLL_35, .pll = PLL_35,
},{ },{
/* ---- card 0x74 ---------------------------------- */ /* ---- card 0x74 ---------------------------------- */
.name = "SIMUS GVC1100", .name = "SIMUS GVC1100",
.video_inputs = 4, .video_inputs = 4,
.audio_inputs = 0, .audio_inputs = 0,
.tuner = -1, .tuner = -1,
.svhs = -1, .svhs = -1,
.tuner_type = -1, .tuner_type = -1,
.pll = PLL_28, .tuner_addr = ADDR_UNSET,
.muxsel = { 2, 2, 2, 2}, .pll = PLL_28,
.gpiomask = 0x3F, .muxsel = { 2, 2, 2, 2},
.gpiomask = 0x3F,
.muxsel_hook = gvc1100_muxsel, .muxsel_hook = gvc1100_muxsel,
},{ },{
/* Carlos Silva r3pek@r3pek.homelinux.org || card 0x75 */ /* Carlos Silva r3pek@r3pek.homelinux.org || card 0x75 */
.name = "NGS NGSTV+", .name = "NGS NGSTV+",
.video_inputs = 3, .video_inputs = 3,
.tuner = 0, .tuner = 0,
.svhs = 2, .svhs = 2,
.gpiomask = 0x008007, .gpiomask = 0x008007,
.muxsel = {2, 3, 0, 0}, .muxsel = {2, 3, 0, 0},
.audiomux = {0, 0, 0, 0, 0x000003, 0}, .audiomux = {0, 0, 0, 0, 0x000003, 0},
.pll = PLL_28, .pll = PLL_28,
.tuner_type = TUNER_PHILIPS_PAL, .tuner_type = TUNER_PHILIPS_PAL,
.has_remote = 1, .tuner_addr = ADDR_UNSET,
},{ .has_remote = 1,
/* http://linuxmedialabs.com */ },{
.name = "LMLBT4", /* http://linuxmedialabs.com */
.video_inputs = 4, /* IN1,IN2,IN3,IN4 */ .name = "LMLBT4",
.audio_inputs = 0, .video_inputs = 4, /* IN1,IN2,IN3,IN4 */
.tuner = -1, .audio_inputs = 0,
.svhs = -1, .tuner = -1,
.muxsel = { 2, 3, 1, 0 }, .svhs = -1,
.no_msp34xx = 1, .muxsel = { 2, 3, 1, 0 },
.no_tda9875 = 1, .no_msp34xx = 1,
.no_tda7432 = 1, .no_tda9875 = 1,
.needs_tvaudio = 0, .no_tda7432 = 1,
.needs_tvaudio = 0,
.tuner_type = -1,
.tuner_addr = ADDR_UNSET,
},{ },{
/* Helmroos Harri <harri.helmroos@pp.inet.fi> */ /* Helmroos Harri <harri.helmroos@pp.inet.fi> */
.name = "Tekram M205 PRO", .name = "Tekram M205 PRO",
...@@ -1982,6 +2108,7 @@ struct tvcard bttv_tvcards[] = { ...@@ -1982,6 +2108,7 @@ struct tvcard bttv_tvcards[] = {
.audio_inputs = 1, .audio_inputs = 1,
.tuner = 0, .tuner = 0,
.tuner_type = TUNER_PHILIPS_PAL, .tuner_type = TUNER_PHILIPS_PAL,
.tuner_addr = ADDR_UNSET,
.svhs = 2, .svhs = 2,
.needs_tvaudio = 0, .needs_tvaudio = 0,
.gpiomask = 0x68, .gpiomask = 0x68,
...@@ -2004,6 +2131,7 @@ struct tvcard bttv_tvcards[] = { ...@@ -2004,6 +2131,7 @@ struct tvcard bttv_tvcards[] = {
.needs_tvaudio = 0, .needs_tvaudio = 0,
.pll = PLL_28, .pll = PLL_28,
.tuner_type = TUNER_PHILIPS_PAL, .tuner_type = TUNER_PHILIPS_PAL,
.tuner_addr = ADDR_UNSET,
.has_remote = 1, .has_remote = 1,
.has_radio = 1, .has_radio = 1,
},{ },{
...@@ -2026,6 +2154,8 @@ struct tvcard bttv_tvcards[] = { ...@@ -2026,6 +2154,8 @@ struct tvcard bttv_tvcards[] = {
.pll = PLL_28, .pll = PLL_28,
.needs_tvaudio = 0, .needs_tvaudio = 0,
.muxsel_hook = picolo_tetra_muxsel,/*Required as it doesn't follow the classic input selection policy*/ .muxsel_hook = picolo_tetra_muxsel,/*Required as it doesn't follow the classic input selection policy*/
.tuner_type = -1,
.tuner_addr = ADDR_UNSET,
},{ },{
/* Spirit TV Tuner from http://spiritmodems.com.au */ /* Spirit TV Tuner from http://spiritmodems.com.au */
/* Stafford Goodsell <surge@goliath.homeunix.org> */ /* Stafford Goodsell <surge@goliath.homeunix.org> */
...@@ -2038,23 +2168,25 @@ struct tvcard bttv_tvcards[] = { ...@@ -2038,23 +2168,25 @@ struct tvcard bttv_tvcards[] = {
.muxsel = { 2, 1, 1 }, .muxsel = { 2, 1, 1 },
.audiomux = { 0x02, 0x00, 0x00, 0x00, 0x00}, .audiomux = { 0x02, 0x00, 0x00, 0x00, 0x00},
.tuner_type = TUNER_TEMIC_PAL, .tuner_type = TUNER_TEMIC_PAL,
.tuner_addr = ADDR_UNSET,
.no_msp34xx = 1, .no_msp34xx = 1,
.no_tda9875 = 1, .no_tda9875 = 1,
},{ },{
/* Wolfram Joost <wojo@frokaschwei.de> */ /* Wolfram Joost <wojo@frokaschwei.de> */
.name = "AVerMedia AVerTV DVB-T 771", .name = "AVerMedia AVerTV DVB-T 771",
.video_inputs = 2, .video_inputs = 2,
.svhs = 1, .svhs = 1,
.tuner = -1, .tuner = -1,
.tuner_type = TUNER_ABSENT, .tuner_type = TUNER_ABSENT,
.muxsel = { 3 , 3 }, .tuner_addr = ADDR_UNSET,
.no_msp34xx = 1, .muxsel = { 3 , 3 },
.no_tda9875 = 1, .no_msp34xx = 1,
.no_tda7432 = 1, .no_tda9875 = 1,
.pll = PLL_28, .no_tda7432 = 1,
.has_dvb = 1, .pll = PLL_28,
.no_gpioirq = 1, .has_dvb = 1,
.has_remote = 1, .no_gpioirq = 1,
.has_remote = 1,
},{ },{
/* ---- card 0x7c ---------------------------------- */ /* ---- card 0x7c ---------------------------------- */
/* Matt Jesson <dvb@jesson.eclipse.co.uk> */ /* Matt Jesson <dvb@jesson.eclipse.co.uk> */
...@@ -2069,6 +2201,7 @@ struct tvcard bttv_tvcards[] = { ...@@ -2069,6 +2201,7 @@ struct tvcard bttv_tvcards[] = {
.no_tda7432 = 1, .no_tda7432 = 1,
.pll = PLL_28, .pll = PLL_28,
.tuner_type = -1, .tuner_type = -1,
.tuner_addr = ADDR_UNSET,
.has_dvb = 1, .has_dvb = 1,
.no_gpioirq = 1, .no_gpioirq = 1,
.has_remote = 1, .has_remote = 1,
...@@ -2081,12 +2214,13 @@ struct tvcard bttv_tvcards[] = { ...@@ -2081,12 +2214,13 @@ struct tvcard bttv_tvcards[] = {
.svhs = -1, .svhs = -1,
.gpiomask = 0x0, .gpiomask = 0x0,
.muxsel = { 2, 2, 2, 2, 2, 2, 2, 2, .muxsel = { 2, 2, 2, 2, 2, 2, 2, 2,
3, 3, 3, 3, 3, 3, 3, 3 }, 3, 3, 3, 3, 3, 3, 3, 3 },
.muxsel_hook = sigmaSQ_muxsel, .muxsel_hook = sigmaSQ_muxsel,
.audiomux = { 0 }, .audiomux = { 0 },
.no_msp34xx = 1, .no_msp34xx = 1,
.pll = PLL_28, .pll = PLL_28,
.tuner_type = -1, .tuner_type = -1,
.tuner_addr = ADDR_UNSET,
},{ },{
/* andre.schwarz@matrix-vision.de */ /* andre.schwarz@matrix-vision.de */
.name = "MATRIX Vision Sigma-SLC", .name = "MATRIX Vision Sigma-SLC",
...@@ -2101,6 +2235,7 @@ struct tvcard bttv_tvcards[] = { ...@@ -2101,6 +2235,7 @@ struct tvcard bttv_tvcards[] = {
.no_msp34xx = 1, .no_msp34xx = 1,
.pll = PLL_28, .pll = PLL_28,
.tuner_type = -1, .tuner_type = -1,
.tuner_addr = ADDR_UNSET,
},{ },{
/* BTTV_APAC_VIEWCOMP */ /* BTTV_APAC_VIEWCOMP */
/* Attila Kondoros <attila.kondoros@chello.hu> */ /* Attila Kondoros <attila.kondoros@chello.hu> */
...@@ -2116,6 +2251,7 @@ struct tvcard bttv_tvcards[] = { ...@@ -2116,6 +2251,7 @@ struct tvcard bttv_tvcards[] = {
.needs_tvaudio = 0, .needs_tvaudio = 0,
.pll = PLL_28, .pll = PLL_28,
.tuner_type = TUNER_PHILIPS_PAL, .tuner_type = TUNER_PHILIPS_PAL,
.tuner_addr = ADDR_UNSET,
.has_remote = 1, /* miniremote works, see ir-kbd-gpio.c */ .has_remote = 1, /* miniremote works, see ir-kbd-gpio.c */
.has_radio = 1, /* not every card has radio */ .has_radio = 1, /* not every card has radio */
},{ },{
...@@ -2131,6 +2267,7 @@ struct tvcard bttv_tvcards[] = { ...@@ -2131,6 +2267,7 @@ struct tvcard bttv_tvcards[] = {
.no_video = 1, .no_video = 1,
.has_dvb = 1, .has_dvb = 1,
.tuner_type = -1, .tuner_type = -1,
.tuner_addr = ADDR_UNSET,
},{ },{
/* Steven <photon38@pchome.com.tw> */ /* Steven <photon38@pchome.com.tw> */
.name = "V-Gear MyVCD", .name = "V-Gear MyVCD",
...@@ -2144,62 +2281,65 @@ struct tvcard bttv_tvcards[] = { ...@@ -2144,62 +2281,65 @@ struct tvcard bttv_tvcards[] = {
.no_msp34xx = 1, .no_msp34xx = 1,
.pll = PLL_28, .pll = PLL_28,
.tuner_type = TUNER_PHILIPS_NTSC_M, .tuner_type = TUNER_PHILIPS_NTSC_M,
.tuner_addr = ADDR_UNSET,
.has_radio = 0, .has_radio = 0,
// .has_remote = 1,
},{ },{
/* Rick C <cryptdragoon@gmail.com> */ /* Rick C <cryptdragoon@gmail.com> */
.name = "Super TV Tuner", .name = "Super TV Tuner",
.video_inputs = 4, .video_inputs = 4,
.audio_inputs = 1, .audio_inputs = 1,
.tuner = 0, .tuner = 0,
.svhs = 2, .svhs = 2,
.muxsel = { 2, 3, 1, 0}, .muxsel = { 2, 3, 1, 0},
.tuner_type = TUNER_PHILIPS_NTSC, .tuner_type = TUNER_PHILIPS_NTSC,
.gpiomask = 0x008007, .tuner_addr = ADDR_UNSET,
.audiomux = { 0, 0x000001,0,0, 0}, .gpiomask = 0x008007,
.needs_tvaudio = 1, .audiomux = { 0, 0x000001,0,0, 0},
.has_radio = 1, .needs_tvaudio = 1,
},{ .has_radio = 1,
/* Chris Fanning <video4linux@haydon.net> */ },{
.name = "Tibet Systems 'Progress DVR' CS16", /* Chris Fanning <video4linux@haydon.net> */
.video_inputs = 16, .name = "Tibet Systems 'Progress DVR' CS16",
.audio_inputs = 0, .video_inputs = 16,
.tuner = -1, .audio_inputs = 0,
.svhs = -1, .tuner = -1,
.muxsel = { 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 }, .svhs = -1,
.pll = PLL_28, .muxsel = { 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 },
.no_msp34xx = 1, .pll = PLL_28,
.no_tda9875 = 1, .no_msp34xx = 1,
.no_tda7432 = 1, .no_tda9875 = 1,
.tuner_type = -1, .no_tda7432 = 1,
.muxsel_hook = tibetCS16_muxsel, .tuner_type = -1,
.tuner_addr = ADDR_UNSET,
.muxsel_hook = tibetCS16_muxsel,
}, },
{ {
/* Bill Brack <wbrack@mmm.com.hk> */ /* Bill Brack <wbrack@mmm.com.hk> */
/* /*
* Note that, because of the card's wiring, the "master" * Note that, because of the card's wiring, the "master"
* BT878A chip (i.e. the one which controls the analog switch * BT878A chip (i.e. the one which controls the analog switch
* and must use this card type) is the 2nd one detected. The * and must use this card type) is the 2nd one detected. The
* other 3 chips should use card type 0x85, whose description * other 3 chips should use card type 0x85, whose description
* follows this one. There is a EEPROM on the card (which is * follows this one. There is a EEPROM on the card (which is
* connected to the I2C of one of those other chips), but is * connected to the I2C of one of those other chips), but is
* not currently handled. There is also a facility for a * not currently handled. There is also a facility for a
* "monitor", which is also not currently implemented. * "monitor", which is also not currently implemented.
*/ */
.name = "Kodicom 4400R (master)", .name = "Kodicom 4400R (master)",
.video_inputs = 16, .video_inputs = 16,
.audio_inputs = 0, .audio_inputs = 0,
.tuner = -1, .tuner = -1,
.tuner_type = -1, .tuner_type = -1,
.tuner_addr = ADDR_UNSET,
.svhs = -1, .svhs = -1,
/* GPIO bits 0-9 used for analog switch: /* GPIO bits 0-9 used for analog switch:
* 00 - 03: camera selector * 00 - 03: camera selector
* 04 - 06: channel (controller) selector * 04 - 06: channel (controller) selector
* 07: data (1->on, 0->off) * 07: data (1->on, 0->off)
* 08: strobe * 08: strobe
* 09: reset * 09: reset
* bit 16 is input from sync separator for the channel * bit 16 is input from sync separator for the channel
*/ */
.gpiomask = 0x0003ff, .gpiomask = 0x0003ff,
.no_gpioirq = 1, .no_gpioirq = 1,
.muxsel = { 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 }, .muxsel = { 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 },
...@@ -2212,15 +2352,16 @@ struct tvcard bttv_tvcards[] = { ...@@ -2212,15 +2352,16 @@ struct tvcard bttv_tvcards[] = {
{ {
/* Bill Brack <wbrack@mmm.com.hk> */ /* Bill Brack <wbrack@mmm.com.hk> */
/* Note that, for reasons unknown, the "master" BT878A chip (i.e. the /* Note that, for reasons unknown, the "master" BT878A chip (i.e. the
* one which controls the analog switch, and must use the card type) * one which controls the analog switch, and must use the card type)
* is the 2nd one detected. The other 3 chips should use this card * is the 2nd one detected. The other 3 chips should use this card
* type * type
*/ */
.name = "Kodicom 4400R (slave)", .name = "Kodicom 4400R (slave)",
.video_inputs = 16, .video_inputs = 16,
.audio_inputs = 0, .audio_inputs = 0,
.tuner = -1, .tuner = -1,
.tuner_type = -1, .tuner_type = -1,
.tuner_addr = ADDR_UNSET,
.svhs = -1, .svhs = -1,
.gpiomask = 0x010000, .gpiomask = 0x010000,
.no_gpioirq = 1, .no_gpioirq = 1,
...@@ -2232,18 +2373,51 @@ struct tvcard bttv_tvcards[] = { ...@@ -2232,18 +2373,51 @@ struct tvcard bttv_tvcards[] = {
.muxsel_hook = kodicom4400r_muxsel, .muxsel_hook = kodicom4400r_muxsel,
}, },
{ {
/* ---- card 0x85---------------------------------- */ /* ---- card 0x86---------------------------------- */
/* Michael Henson <mhenson@clarityvi.com> */ /* Michael Henson <mhenson@clarityvi.com> */
/* Adlink RTV24 with special unlock codes */ /* Adlink RTV24 with special unlock codes */
.name = "Adlink RTV24", .name = "Adlink RTV24",
.video_inputs = 4, .video_inputs = 4,
.audio_inputs = 1, .audio_inputs = 1,
.tuner = 0, .tuner = 0,
.svhs = 2, .svhs = 2,
.muxsel = { 2, 3, 1, 0}, .muxsel = { 2, 3, 1, 0},
.tuner_type = -1, .tuner_type = -1,
.pll = PLL_28, .tuner_addr = ADDR_UNSET,
.pll = PLL_28,
},
{
/* ---- card 0x87---------------------------------- */
/* Michael Krufky <mkrufky@m1k.net> */
.name = "DVICO FusionHDTV 5 Lite",
.tuner = 0,
.tuner_type = TUNER_LG_TDVS_H062F,
.tuner_addr = ADDR_UNSET,
.video_inputs = 2,
.audio_inputs = 1,
.svhs = 2,
.muxsel = { 2, 3 },
.gpiomask = 0x00e00007,
.audiomux = { 0x00400005, 0, 0, 0, 0, 0 },
.no_msp34xx = 1,
.no_tda9875 = 1,
.no_tda7432 = 1,
},{
/* ---- card 0x88---------------------------------- */
/* Mauro Carvalho Chehab <mchehab@brturbo.com.br> */
.name = "Acorp Y878F",
.video_inputs = 3,
.audio_inputs = 1,
.tuner = 0,
.svhs = 2,
.gpiomask = 0x01fe00,
.muxsel = { 2, 3, 1, 1},
.audiomux = { 0x001e00, 0, 0x018000, 0x014000, 0x002000, 0 },
.needs_tvaudio = 1,
.pll = PLL_28,
.tuner_type = TUNER_YMEC_TVF66T5_B_DFF,
.tuner_addr = 0xc1 >>1,
.has_radio = 1,
}}; }};
static const unsigned int bttv_num_tvcards = ARRAY_SIZE(bttv_tvcards); static const unsigned int bttv_num_tvcards = ARRAY_SIZE(bttv_tvcards);
...@@ -2355,32 +2529,32 @@ static void flyvideo_gpio(struct bttv *btv) ...@@ -2355,32 +2529,32 @@ static void flyvideo_gpio(struct bttv *btv)
int tuner=-1,ttype; int tuner=-1,ttype;
gpio_inout(0xffffff, 0); gpio_inout(0xffffff, 0);
udelay(8); // without this we would see the 0x1800 mask udelay(8); /* without this we would see the 0x1800 mask */
gpio = gpio_read(); gpio = gpio_read();
/* FIXME: must restore OUR_EN ??? */ /* FIXME: must restore OUR_EN ??? */
// all cards provide GPIO info, some have an additional eeprom /* all cards provide GPIO info, some have an additional eeprom
// LR50: GPIO coding can be found lower right CP1 .. CP9 * LR50: GPIO coding can be found lower right CP1 .. CP9
// CP9=GPIO23 .. CP1=GPIO15; when OPEN, the corresponding GPIO reads 1. * CP9=GPIO23 .. CP1=GPIO15; when OPEN, the corresponding GPIO reads 1.
// GPIO14-12: n.c. * GPIO14-12: n.c.
// LR90: GP9=GPIO23 .. GP1=GPIO15 (right above the bt878) * LR90: GP9=GPIO23 .. GP1=GPIO15 (right above the bt878)
// lowest 3 bytes are remote control codes (no handshake needed)
// xxxFFF: No remote control chip soldered
// xxxF00(LR26/LR50), xxxFE0(LR90): Remote control chip (LVA001 or CF45) soldered
// Note: Some bits are Audio_Mask !
* lowest 3 bytes are remote control codes (no handshake needed)
* xxxFFF: No remote control chip soldered
* xxxF00(LR26/LR50), xxxFE0(LR90): Remote control chip (LVA001 or CF45) soldered
* Note: Some bits are Audio_Mask !
*/
ttype=(gpio&0x0f0000)>>16; ttype=(gpio&0x0f0000)>>16;
switch(ttype) { switch(ttype) {
case 0x0: tuner=2; // NTSC, e.g. TPI8NSR11P case 0x0: tuner=2; /* NTSC, e.g. TPI8NSR11P */
break; break;
case 0x2: tuner=39;// LG NTSC (newer TAPC series) TAPC-H701P case 0x2: tuner=39;/* LG NTSC (newer TAPC series) TAPC-H701P */
break; break;
case 0x4: tuner=5; // Philips PAL TPI8PSB02P, TPI8PSB12P, TPI8PSB12D or FI1216, FM1216 case 0x4: tuner=5; /* Philips PAL TPI8PSB02P, TPI8PSB12P, TPI8PSB12D or FI1216, FM1216 */
break; break;
case 0x6: tuner=37; // LG PAL (newer TAPC series) TAPC-G702P case 0x6: tuner=37;/* LG PAL (newer TAPC series) TAPC-G702P */
break; break;
case 0xC: tuner=3; // Philips SECAM(+PAL) FQ1216ME or FI1216MF case 0xC: tuner=3; /* Philips SECAM(+PAL) FQ1216ME or FI1216MF */
break; break;
default: default:
printk(KERN_INFO "bttv%d: FlyVideo_gpio: unknown tuner type.\n", btv->c.nr); printk(KERN_INFO "bttv%d: FlyVideo_gpio: unknown tuner type.\n", btv->c.nr);
...@@ -2388,15 +2562,16 @@ static void flyvideo_gpio(struct bttv *btv) ...@@ -2388,15 +2562,16 @@ static void flyvideo_gpio(struct bttv *btv)
has_remote = gpio & 0x800000; has_remote = gpio & 0x800000;
has_radio = gpio & 0x400000; has_radio = gpio & 0x400000;
// unknown 0x200000; /* unknown 0x200000;
// unknown2 0x100000; * unknown2 0x100000; */
is_capture_only = !(gpio & 0x008000); //GPIO15 is_capture_only = !(gpio & 0x008000); /* GPIO15 */
has_tda9820_tda9821 = !(gpio & 0x004000); has_tda9820_tda9821 = !(gpio & 0x004000);
is_lr90 = !(gpio & 0x002000); // else LR26/LR50 (LR38/LR51 f. capture only) is_lr90 = !(gpio & 0x002000); /* else LR26/LR50 (LR38/LR51 f. capture only) */
// gpio & 0x001000 // output bit for audio routing /*
* gpio & 0x001000 output bit for audio routing */
if(is_capture_only) if(is_capture_only)
tuner=4; // No tuner present tuner=4; /* No tuner present */
printk(KERN_INFO "bttv%d: FlyVideo Radio=%s RemoteControl=%s Tuner=%d gpio=0x%06x\n", printk(KERN_INFO "bttv%d: FlyVideo Radio=%s RemoteControl=%s Tuner=%d gpio=0x%06x\n",
btv->c.nr, has_radio? "yes":"no ", has_remote? "yes":"no ", tuner, gpio); btv->c.nr, has_radio? "yes":"no ", has_remote? "yes":"no ", tuner, gpio);
...@@ -2404,15 +2579,15 @@ static void flyvideo_gpio(struct bttv *btv) ...@@ -2404,15 +2579,15 @@ static void flyvideo_gpio(struct bttv *btv)
btv->c.nr, is_lr90?"yes":"no ", has_tda9820_tda9821?"yes":"no ", btv->c.nr, is_lr90?"yes":"no ", has_tda9820_tda9821?"yes":"no ",
is_capture_only?"yes":"no "); is_capture_only?"yes":"no ");
if(tuner!= -1) // only set if known tuner autodetected, else let insmod option through if(tuner!= -1) /* only set if known tuner autodetected, else let insmod option through */
btv->tuner_type = tuner; btv->tuner_type = tuner;
btv->has_radio = has_radio; btv->has_radio = has_radio;
// LR90 Audio Routing is done by 2 hef4052, so Audio_Mask has 4 bits: 0x001c80 /* LR90 Audio Routing is done by 2 hef4052, so Audio_Mask has 4 bits: 0x001c80
// LR26/LR50 only has 1 hef4052, Audio_Mask 0x000c00 * LR26/LR50 only has 1 hef4052, Audio_Mask 0x000c00
// Audio options: from tuner, from tda9821/tda9821(mono,stereo,sap), from tda9874, ext., mute * Audio options: from tuner, from tda9821/tda9821(mono,stereo,sap), from tda9874, ext., mute */
if(has_tda9820_tda9821) btv->audio_hook = lt9415_audio; if(has_tda9820_tda9821) btv->audio_hook = lt9415_audio;
//todo: if(has_tda9874) btv->audio_hook = fv2000s_audio; /* todo: if(has_tda9874) btv->audio_hook = fv2000s_audio; */
} }
static int miro_tunermap[] = { 0,6,2,3, 4,5,6,0, 3,0,4,5, 5,2,16,1, static int miro_tunermap[] = { 0,6,2,3, 4,5,6,0, 3,0,4,5, 5,2,16,1,
...@@ -2633,6 +2808,8 @@ void __devinit bttv_init_card1(struct bttv *btv) ...@@ -2633,6 +2808,8 @@ void __devinit bttv_init_card1(struct bttv *btv)
void __devinit bttv_init_card2(struct bttv *btv) void __devinit bttv_init_card2(struct bttv *btv)
{ {
int tda9887; int tda9887;
int addr=ADDR_UNSET;
btv->tuner_type = -1; btv->tuner_type = -1;
if (BTTV_UNKNOWN == btv->c.type) { if (BTTV_UNKNOWN == btv->c.type) {
...@@ -2773,9 +2950,12 @@ void __devinit bttv_init_card2(struct bttv *btv) ...@@ -2773,9 +2950,12 @@ void __devinit bttv_init_card2(struct bttv *btv)
btv->pll.pll_current = -1; btv->pll.pll_current = -1;
/* tuner configuration (from card list / autodetect / insmod option) */ /* tuner configuration (from card list / autodetect / insmod option) */
if (UNSET != bttv_tvcards[btv->c.type].tuner_type) if (ADDR_UNSET != bttv_tvcards[btv->c.type].tuner_addr)
addr = bttv_tvcards[btv->c.type].tuner_addr;
if (UNSET != bttv_tvcards[btv->c.type].tuner_type)
if(UNSET == btv->tuner_type) if(UNSET == btv->tuner_type)
btv->tuner_type = bttv_tvcards[btv->c.type].tuner_type; btv->tuner_type = bttv_tvcards[btv->c.type].tuner_type;
if (UNSET != tuner[btv->c.nr]) if (UNSET != tuner[btv->c.nr])
btv->tuner_type = tuner[btv->c.nr]; btv->tuner_type = tuner[btv->c.nr];
printk("bttv%d: using tuner=%d\n",btv->c.nr,btv->tuner_type); printk("bttv%d: using tuner=%d\n",btv->c.nr,btv->tuner_type);
...@@ -2787,7 +2967,7 @@ void __devinit bttv_init_card2(struct bttv *btv) ...@@ -2787,7 +2967,7 @@ void __devinit bttv_init_card2(struct bttv *btv)
tun_setup.mode_mask = T_RADIO | T_ANALOG_TV | T_DIGITAL_TV; tun_setup.mode_mask = T_RADIO | T_ANALOG_TV | T_DIGITAL_TV;
tun_setup.type = btv->tuner_type; tun_setup.type = btv->tuner_type;
tun_setup.addr = ADDR_UNSET; tun_setup.addr = addr;
bttv_call_i2c_clients(btv, TUNER_SET_TYPE_ADDR, &tun_setup); bttv_call_i2c_clients(btv, TUNER_SET_TYPE_ADDR, &tun_setup);
} }
...@@ -2902,7 +3082,7 @@ static int terratec_active_radio_upgrade(struct bttv *btv) ...@@ -2902,7 +3082,7 @@ static int terratec_active_radio_upgrade(struct bttv *btv)
btv->mbox_csel = 1 << 10; btv->mbox_csel = 1 << 10;
freq=88000/62.5; freq=88000/62.5;
tea5757_write(btv, 5 * freq + 0x358); // write 0x1ed8 tea5757_write(btv, 5 * freq + 0x358); /* write 0x1ed8 */
if (0x1ed8 == tea5757_read(btv)) { if (0x1ed8 == tea5757_read(btv)) {
printk("bttv%d: Terratec Active Radio Upgrade found.\n", printk("bttv%d: Terratec Active Radio Upgrade found.\n",
btv->c.nr); btv->c.nr);
...@@ -3073,7 +3253,7 @@ static void __devinit osprey_eeprom(struct bttv *btv) ...@@ -3073,7 +3253,7 @@ static void __devinit osprey_eeprom(struct bttv *btv)
case 0x0060: case 0x0060:
case 0x0070: case 0x0070:
btv->c.type = BTTV_OSPREY2x0; btv->c.type = BTTV_OSPREY2x0;
//enable output on select control lines /* enable output on select control lines */
gpio_inout(0xffffff,0x000303); gpio_inout(0xffffff,0x000303);
break; break;
default: default:
...@@ -3105,7 +3285,7 @@ static int tuner_1_table[] = { ...@@ -3105,7 +3285,7 @@ static int tuner_1_table[] = {
TUNER_TEMIC_NTSC, TUNER_TEMIC_PAL, TUNER_TEMIC_NTSC, TUNER_TEMIC_PAL,
TUNER_TEMIC_PAL, TUNER_TEMIC_PAL, TUNER_TEMIC_PAL, TUNER_TEMIC_PAL,
TUNER_TEMIC_PAL, TUNER_TEMIC_PAL, TUNER_TEMIC_PAL, TUNER_TEMIC_PAL,
TUNER_TEMIC_4012FY5, TUNER_TEMIC_4012FY5, //TUNER_TEMIC_SECAM TUNER_TEMIC_4012FY5, TUNER_TEMIC_4012FY5, /* TUNER_TEMIC_SECAM */
TUNER_TEMIC_4012FY5, TUNER_TEMIC_PAL}; TUNER_TEMIC_4012FY5, TUNER_TEMIC_PAL};
static void __devinit avermedia_eeprom(struct bttv *btv) static void __devinit avermedia_eeprom(struct bttv *btv)
...@@ -3126,7 +3306,7 @@ static void __devinit avermedia_eeprom(struct bttv *btv) ...@@ -3126,7 +3306,7 @@ static void __devinit avermedia_eeprom(struct bttv *btv)
if (tuner_make == 4) if (tuner_make == 4)
if(tuner_format == 0x09) if(tuner_format == 0x09)
tuner = TUNER_LG_NTSC_NEW_TAPC; // TAPC-G702P tuner = TUNER_LG_NTSC_NEW_TAPC; /* TAPC-G702P */
printk(KERN_INFO "bttv%d: Avermedia eeprom[0x%02x%02x]: tuner=", printk(KERN_INFO "bttv%d: Avermedia eeprom[0x%02x%02x]: tuner=",
btv->c.nr,eeprom_data[0x41],eeprom_data[0x42]); btv->c.nr,eeprom_data[0x41],eeprom_data[0x42]);
...@@ -3143,7 +3323,7 @@ static void __devinit avermedia_eeprom(struct bttv *btv) ...@@ -3143,7 +3323,7 @@ static void __devinit avermedia_eeprom(struct bttv *btv)
/* used on Voodoo TV/FM (Voodoo 200), S0 wired to 0x10000 */ /* used on Voodoo TV/FM (Voodoo 200), S0 wired to 0x10000 */
void bttv_tda9880_setnorm(struct bttv *btv, int norm) void bttv_tda9880_setnorm(struct bttv *btv, int norm)
{ {
// fix up our card entry /* fix up our card entry */
if(norm==VIDEO_MODE_NTSC) { if(norm==VIDEO_MODE_NTSC) {
bttv_tvcards[BTTV_VOODOOTV_FM].audiomux[0]=0x957fff; bttv_tvcards[BTTV_VOODOOTV_FM].audiomux[0]=0x957fff;
bttv_tvcards[BTTV_VOODOOTV_FM].audiomux[4]=0x957fff; bttv_tvcards[BTTV_VOODOOTV_FM].audiomux[4]=0x957fff;
...@@ -3154,7 +3334,7 @@ void bttv_tda9880_setnorm(struct bttv *btv, int norm) ...@@ -3154,7 +3334,7 @@ void bttv_tda9880_setnorm(struct bttv *btv, int norm)
bttv_tvcards[BTTV_VOODOOTV_FM].audiomux[4]=0x947fff; bttv_tvcards[BTTV_VOODOOTV_FM].audiomux[4]=0x947fff;
dprintk("bttv_tda9880_setnorm to PAL\n"); dprintk("bttv_tda9880_setnorm to PAL\n");
} }
// set GPIO according /* set GPIO according */
gpio_bits(bttv_tvcards[btv->c.type].gpiomask, gpio_bits(bttv_tvcards[btv->c.type].gpiomask,
bttv_tvcards[btv->c.type].audiomux[btv->audio]); bttv_tvcards[btv->c.type].audiomux[btv->audio]);
} }
...@@ -3447,7 +3627,7 @@ static int tea5757_read(struct bttv *btv) ...@@ -3447,7 +3627,7 @@ static int tea5757_read(struct bttv *btv)
udelay(10); udelay(10);
timeout= jiffies + HZ; timeout= jiffies + HZ;
// wait for DATA line to go low; error if it doesn't /* wait for DATA line to go low; error if it doesn't */
while (bus_in(btv,btv->mbox_data) && time_before(jiffies, timeout)) while (bus_in(btv,btv->mbox_data) && time_before(jiffies, timeout))
schedule(); schedule();
if (bus_in(btv,btv->mbox_data)) { if (bus_in(btv,btv->mbox_data)) {
...@@ -3574,8 +3754,8 @@ gvbctv3pci_audio(struct bttv *btv, struct video_audio *v, int set) ...@@ -3574,8 +3754,8 @@ gvbctv3pci_audio(struct bttv *btv, struct video_audio *v, int set)
con = 0x300; con = 0x300;
if (v->mode & VIDEO_SOUND_STEREO) if (v->mode & VIDEO_SOUND_STEREO)
con = 0x200; con = 0x200;
// if (v->mode & VIDEO_SOUND_MONO) /* if (v->mode & VIDEO_SOUND_MONO)
// con = 0x100; * con = 0x100; */
gpio_bits(0x300, con); gpio_bits(0x300, con);
} else { } else {
v->mode = VIDEO_SOUND_STEREO | v->mode = VIDEO_SOUND_STEREO |
...@@ -3718,7 +3898,7 @@ lt9415_audio(struct bttv *btv, struct video_audio *v, int set) ...@@ -3718,7 +3898,7 @@ lt9415_audio(struct bttv *btv, struct video_audio *v, int set)
} }
} }
// TDA9821 on TerraTV+ Bt848, Bt878 /* TDA9821 on TerraTV+ Bt848, Bt878 */
static void static void
terratv_audio(struct bttv *btv, struct video_audio *v, int set) terratv_audio(struct bttv *btv, struct video_audio *v, int set)
{ {
...@@ -3818,7 +3998,7 @@ fv2000s_audio(struct bttv *btv, struct video_audio *v, int set) ...@@ -3818,7 +3998,7 @@ fv2000s_audio(struct bttv *btv, struct video_audio *v, int set)
} }
if ((v->mode & (VIDEO_SOUND_LANG1 | VIDEO_SOUND_LANG2)) if ((v->mode & (VIDEO_SOUND_LANG1 | VIDEO_SOUND_LANG2))
|| (v->mode & VIDEO_SOUND_STEREO)) { || (v->mode & VIDEO_SOUND_STEREO)) {
val = 0x1080; //-dk-???: 0x0880, 0x0080, 0x1800 ... val = 0x1080; /*-dk-???: 0x0880, 0x0080, 0x1800 ... */
} }
if (val != 0xffff) { if (val != 0xffff) {
gpio_bits(0x1800, val); gpio_bits(0x1800, val);
...@@ -3869,10 +4049,10 @@ adtvk503_audio(struct bttv *btv, struct video_audio *v, int set) ...@@ -3869,10 +4049,10 @@ adtvk503_audio(struct bttv *btv, struct video_audio *v, int set)
{ {
unsigned int con = 0xffffff; unsigned int con = 0xffffff;
//btaor(0x1e0000, ~0x1e0000, BT848_GPIO_OUT_EN); /* btaor(0x1e0000, ~0x1e0000, BT848_GPIO_OUT_EN); */
if (set) { if (set) {
//btor(***, BT848_GPIO_OUT_EN); /* btor(***, BT848_GPIO_OUT_EN); */
if (v->mode & VIDEO_SOUND_LANG1) if (v->mode & VIDEO_SOUND_LANG1)
con = 0x00000000; con = 0x00000000;
if (v->mode & VIDEO_SOUND_LANG2) if (v->mode & VIDEO_SOUND_LANG2)
...@@ -4079,14 +4259,14 @@ static void kodicom4400r_init(struct bttv *btv) ...@@ -4079,14 +4259,14 @@ static void kodicom4400r_init(struct bttv *btv)
master[btv->c.nr+2] = btv; master[btv->c.nr+2] = btv;
} }
// The Grandtec X-Guard framegrabber card uses two Dual 4-channel /* The Grandtec X-Guard framegrabber card uses two Dual 4-channel
// video multiplexers to provide up to 16 video inputs. These * video multiplexers to provide up to 16 video inputs. These
// multiplexers are controlled by the lower 8 GPIO pins of the * multiplexers are controlled by the lower 8 GPIO pins of the
// bt878. The multiplexers probably Pericom PI5V331Q or similar. * bt878. The multiplexers probably Pericom PI5V331Q or similar.
// xxx0 is pin xxx of multiplexer U5,
// yyy1 is pin yyy of multiplexer U2
* xxx0 is pin xxx of multiplexer U5,
* yyy1 is pin yyy of multiplexer U2
*/
#define ENA0 0x01 #define ENA0 0x01
#define ENB0 0x02 #define ENB0 0x02
#define ENA1 0x04 #define ENA1 0x04
...@@ -4157,14 +4337,14 @@ static void picolo_tetra_muxsel (struct bttv* btv, unsigned int input) ...@@ -4157,14 +4337,14 @@ static void picolo_tetra_muxsel (struct bttv* btv, unsigned int input)
static void ivc120_muxsel(struct bttv *btv, unsigned int input) static void ivc120_muxsel(struct bttv *btv, unsigned int input)
{ {
// Simple maths /* Simple maths */
int key = input % 4; int key = input % 4;
int matrix = input / 4; int matrix = input / 4;
dprintk("bttv%d: ivc120_muxsel: Input - %02d | TDA - %02d | In - %02d\n", dprintk("bttv%d: ivc120_muxsel: Input - %02d | TDA - %02d | In - %02d\n",
btv->c.nr, input, matrix, key); btv->c.nr, input, matrix, key);
// Handles the input selection on the TDA8540's /* Handles the input selection on the TDA8540's */
bttv_I2CWrite(btv, I2C_TDA8540_ALT3, 0x00, bttv_I2CWrite(btv, I2C_TDA8540_ALT3, 0x00,
((matrix == 3) ? (key | key << 2) : 0x00), 1); ((matrix == 3) ? (key | key << 2) : 0x00), 1);
bttv_I2CWrite(btv, I2C_TDA8540_ALT4, 0x00, bttv_I2CWrite(btv, I2C_TDA8540_ALT4, 0x00,
...@@ -4174,17 +4354,17 @@ static void ivc120_muxsel(struct bttv *btv, unsigned int input) ...@@ -4174,17 +4354,17 @@ static void ivc120_muxsel(struct bttv *btv, unsigned int input)
bttv_I2CWrite(btv, I2C_TDA8540_ALT6, 0x00, bttv_I2CWrite(btv, I2C_TDA8540_ALT6, 0x00,
((matrix == 2) ? (key | key << 2) : 0x00), 1); ((matrix == 2) ? (key | key << 2) : 0x00), 1);
// Handles the output enables on the TDA8540's /* Handles the output enables on the TDA8540's */
bttv_I2CWrite(btv, I2C_TDA8540_ALT3, 0x02, bttv_I2CWrite(btv, I2C_TDA8540_ALT3, 0x02,
((matrix == 3) ? 0x03 : 0x00), 1); // 13 - 16 ((matrix == 3) ? 0x03 : 0x00), 1); /* 13 - 16 */
bttv_I2CWrite(btv, I2C_TDA8540_ALT4, 0x02, bttv_I2CWrite(btv, I2C_TDA8540_ALT4, 0x02,
((matrix == 0) ? 0x03 : 0x00), 1); // 1-4 ((matrix == 0) ? 0x03 : 0x00), 1); /* 1-4 */
bttv_I2CWrite(btv, I2C_TDA8540_ALT5, 0x02, bttv_I2CWrite(btv, I2C_TDA8540_ALT5, 0x02,
((matrix == 1) ? 0x03 : 0x00), 1); // 5-8 ((matrix == 1) ? 0x03 : 0x00), 1); /* 5-8 */
bttv_I2CWrite(btv, I2C_TDA8540_ALT6, 0x02, bttv_I2CWrite(btv, I2C_TDA8540_ALT6, 0x02,
((matrix == 2) ? 0x03 : 0x00), 1); // 9-12 ((matrix == 2) ? 0x03 : 0x00), 1); /* 9-12 */
// Selects MUX0 for input on the 878 /* Selects MUX0 for input on the 878 */
btaor((0)<<5, ~(3<<5), BT848_IFORM); btaor((0)<<5, ~(3<<5), BT848_IFORM);
} }
...@@ -4305,7 +4485,6 @@ void __devinit bttv_check_chipset(void) ...@@ -4305,7 +4485,6 @@ void __devinit bttv_check_chipset(void)
} }
if (UNSET != latency) if (UNSET != latency)
printk(KERN_INFO "bttv: pci latency fixup [%d]\n",latency); printk(KERN_INFO "bttv: pci latency fixup [%d]\n",latency);
while ((dev = pci_find_device(PCI_VENDOR_ID_INTEL, while ((dev = pci_find_device(PCI_VENDOR_ID_INTEL,
PCI_DEVICE_ID_INTEL_82441, dev))) { PCI_DEVICE_ID_INTEL_82441, dev))) {
unsigned char b; unsigned char b;
......
/* /*
$Id: bttv-driver.c,v 1.52 2005/08/04 00:55:16 mchehab Exp $
bttv - Bt848 frame grabber driver bttv - Bt848 frame grabber driver
...@@ -42,6 +41,9 @@ ...@@ -42,6 +41,9 @@
#include "bttvp.h" #include "bttvp.h"
#include "rds.h"
unsigned int bttv_num; /* number of Bt848s in use */ unsigned int bttv_num; /* number of Bt848s in use */
struct bttv bttvs[BTTV_MAX]; struct bttv bttvs[BTTV_MAX];
...@@ -3128,15 +3130,12 @@ static int radio_open(struct inode *inode, struct file *file) ...@@ -3128,15 +3130,12 @@ static int radio_open(struct inode *inode, struct file *file)
dprintk("bttv%d: open called (radio)\n",btv->c.nr); dprintk("bttv%d: open called (radio)\n",btv->c.nr);
down(&btv->lock); down(&btv->lock);
if (btv->radio_user) {
up(&btv->lock);
return -EBUSY;
}
btv->radio_user++; btv->radio_user++;
file->private_data = btv; file->private_data = btv;
i2c_vidiocschan(btv); bttv_call_i2c_clients(btv,AUDC_SET_RADIO,&btv->tuner_type);
bttv_call_i2c_clients(btv,AUDC_SET_RADIO,&btv->tuner_type);
audio_mux(btv,AUDIO_RADIO); audio_mux(btv,AUDIO_RADIO);
up(&btv->lock); up(&btv->lock);
...@@ -3145,9 +3144,13 @@ static int radio_open(struct inode *inode, struct file *file) ...@@ -3145,9 +3144,13 @@ static int radio_open(struct inode *inode, struct file *file)
static int radio_release(struct inode *inode, struct file *file) static int radio_release(struct inode *inode, struct file *file)
{ {
struct bttv *btv = file->private_data; struct bttv *btv = file->private_data;
struct rds_command cmd;
btv->radio_user--; btv->radio_user--;
bttv_call_i2c_clients(btv, RDS_CMD_CLOSE, &cmd);
return 0; return 0;
} }
...@@ -3203,13 +3206,42 @@ static int radio_ioctl(struct inode *inode, struct file *file, ...@@ -3203,13 +3206,42 @@ static int radio_ioctl(struct inode *inode, struct file *file,
return video_usercopy(inode, file, cmd, arg, radio_do_ioctl); return video_usercopy(inode, file, cmd, arg, radio_do_ioctl);
} }
static ssize_t radio_read(struct file *file, char __user *data,
size_t count, loff_t *ppos)
{
struct bttv *btv = file->private_data;
struct rds_command cmd;
cmd.block_count = count/3;
cmd.buffer = data;
cmd.instance = file;
cmd.result = -ENODEV;
bttv_call_i2c_clients(btv, RDS_CMD_READ, &cmd);
return cmd.result;
}
static unsigned int radio_poll(struct file *file, poll_table *wait)
{
struct bttv *btv = file->private_data;
struct rds_command cmd;
cmd.instance = file;
cmd.event_list = wait;
cmd.result = -ENODEV;
bttv_call_i2c_clients(btv, RDS_CMD_POLL, &cmd);
return cmd.result;
}
static struct file_operations radio_fops = static struct file_operations radio_fops =
{ {
.owner = THIS_MODULE, .owner = THIS_MODULE,
.open = radio_open, .open = radio_open,
.read = radio_read,
.release = radio_release, .release = radio_release,
.ioctl = radio_ioctl, .ioctl = radio_ioctl,
.llseek = no_llseek, .llseek = no_llseek,
.poll = radio_poll,
}; };
static struct video_device radio_template = static struct video_device radio_template =
......
/* /*
$Id: bttv-gpio.c,v 1.7 2005/02/16 12:14:10 kraxel Exp $
bttv-gpio.c -- gpio sub drivers bttv-gpio.c -- gpio sub drivers
......
/* /*
$Id: bttv-i2c.c,v 1.25 2005/07/05 17:37:35 nsh Exp $
bttv-i2c.c -- all the i2c code is here bttv-i2c.c -- all the i2c code is here
...@@ -381,6 +380,7 @@ void __devinit bttv_readee(struct bttv *btv, unsigned char *eedata, int addr) ...@@ -381,6 +380,7 @@ void __devinit bttv_readee(struct bttv *btv, unsigned char *eedata, int addr)
} }
static char *i2c_devs[128] = { static char *i2c_devs[128] = {
[ 0x1c >> 1 ] = "lgdt330x",
[ 0x30 >> 1 ] = "IR (hauppauge)", [ 0x30 >> 1 ] = "IR (hauppauge)",
[ 0x80 >> 1 ] = "msp34xx", [ 0x80 >> 1 ] = "msp34xx",
[ 0x86 >> 1 ] = "tda9887", [ 0x86 >> 1 ] = "tda9887",
......
/* /*
$Id: bttv-if.c,v 1.4 2004/11/17 18:47:47 kraxel Exp $
bttv-if.c -- old gpio interface to other kernel modules bttv-if.c -- old gpio interface to other kernel modules
don't use in new code, will go away in 2.7 don't use in new code, will go away in 2.7
......
/* /*
$Id: bttv-risc.c,v 1.10 2004/11/19 18:07:12 kraxel Exp $
bttv-risc.c -- interfaces to other kernel modules bttv-risc.c -- interfaces to other kernel modules
......
/* /*
$Id: bttv-vbi.c,v 1.9 2005/01/13 17:22:33 kraxel Exp $
bttv - Bt848 frame grabber driver bttv - Bt848 frame grabber driver
vbi interface vbi interface
......
/* /*
* $Id: bttv.h,v 1.22 2005/07/28 18:41:21 mchehab Exp $
* *
* bttv - Bt848 frame grabber driver * bttv - Bt848 frame grabber driver
* *
...@@ -218,6 +217,8 @@ struct tvcard ...@@ -218,6 +217,8 @@ struct tvcard
#define PLL_35 2 #define PLL_35 2
unsigned int tuner_type; unsigned int tuner_type;
unsigned int tuner_addr;
unsigned int has_radio; unsigned int has_radio;
void (*audio_hook)(struct bttv *btv, struct video_audio *v, int set); void (*audio_hook)(struct bttv *btv, struct video_audio *v, int set);
void (*muxsel_hook)(struct bttv *btv, unsigned int input); void (*muxsel_hook)(struct bttv *btv, unsigned int input);
......
/* /*
$Id: bttvp.h,v 1.21 2005/07/15 21:44:14 mchehab Exp $
bttv - Bt848 frame grabber driver bttv - Bt848 frame grabber driver
...@@ -26,7 +25,7 @@ ...@@ -26,7 +25,7 @@
#ifndef _BTTVP_H_ #ifndef _BTTVP_H_
#define _BTTVP_H_ #define _BTTVP_H_
#include <linux/version.h> #include <linux/utsname.h>
#define BTTV_VERSION_CODE KERNEL_VERSION(0,9,16) #define BTTV_VERSION_CODE KERNEL_VERSION(0,9,16)
#include <linux/types.h> #include <linux/types.h>
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment