Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Linux/drivers/media/pci/bt8xx/   (Open Source Betriebssystem Version 6.17.9©)  Datei vom 24.10.2025 mit Größe 147 kB image not shown  

Quelle  bttv-cards.c   Sprache: C

 
// SPDX-License-Identifier: GPL-2.0-or-later
/*

    bttv-cards.c

    this file has configuration information - card-specific stuff
    like the big tvcards array for the most part

    Copyright (C) 1996,97,98 Ralph  Metzler (rjkm@thp.uni-koeln.de)
   & Marcus Metzler (mocm@thp.uni-koeln.de)
    (c) 1999-2001 Gerd Knorr <kraxel@goldbach.in-berlin.de>


*/


#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt

#include <linux/delay.h>
#include <linux/module.h>
#include <linux/kmod.h>
#include <linux/init.h>
#include <linux/pci.h>
#include <linux/vmalloc.h>
#include <linux/firmware.h>
#include <net/checksum.h>

#include <linux/unaligned.h>
#include <asm/io.h>

#include "bttvp.h"
#include <media/v4l2-common.h>
#include <media/i2c/tvaudio.h>
#include "bttv-audio-hook.h"

/* fwd decl */
static void boot_msp34xx(struct bttv *btv, int pin);
static void hauppauge_eeprom(struct bttv *btv);
static void avermedia_eeprom(struct bttv *btv);
static void osprey_eeprom(struct bttv *btv, const u8 ee[256]);
static void modtec_eeprom(struct bttv *btv);
static void init_PXC200(struct bttv *btv);
static void init_RTV24(struct bttv *btv);
static void init_PCI8604PW(struct bttv *btv);

static void rv605_muxsel(struct bttv *btv, unsigned int input);
static void eagle_muxsel(struct bttv *btv, unsigned int input);
static void xguard_muxsel(struct bttv *btv, unsigned int input);
static void ivc120_muxsel(struct bttv *btv, unsigned int input);
static void gvc1100_muxsel(struct bttv *btv, unsigned int input);

static void PXC200_muxsel(struct bttv *btv, unsigned int input);

static void picolo_tetra_muxsel(struct bttv *btv, unsigned int input);
static void picolo_tetra_init(struct bttv *btv);

static void tibetCS16_muxsel(struct bttv *btv, unsigned int input);
static void tibetCS16_init(struct bttv *btv);

static void kodicom4400r_muxsel(struct bttv *btv, unsigned int input);
static void kodicom4400r_init(struct bttv *btv);

static void sigmaSLC_muxsel(struct bttv *btv, unsigned int input);
static void sigmaSQ_muxsel(struct bttv *btv, unsigned int input);

static void geovision_muxsel(struct bttv *btv, unsigned int input);

static void phytec_muxsel(struct bttv *btv, unsigned int input);

static void gv800s_muxsel(struct bttv *btv, unsigned int input);
static void gv800s_init(struct bttv *btv);

static void td3116_muxsel(struct bttv *btv, unsigned int input);

static int terratec_active_radio_upgrade(struct bttv *btv);
static int tea575x_init(struct bttv *btv);
static void identify_by_eeprom(struct bttv *btv,
          unsigned char eeprom_data[256]);
static int pvr_boot(struct bttv *btv);

/* config variables */
static unsigned int triton1;
static unsigned int vsfx;
static unsigned int latency = UNSET;

static unsigned int card[BTTV_MAX]   = { [ 0 ... (BTTV_MAX-1) ] = UNSET };
static unsigned int pll[BTTV_MAX]    = { [ 0 ... (BTTV_MAX-1) ] = UNSET };
static unsigned int tuner[BTTV_MAX]  = { [ 0 ... (BTTV_MAX-1) ] = UNSET };
static unsigned int svhs[BTTV_MAX]   = { [ 0 ... (BTTV_MAX-1) ] = UNSET };
static unsigned int remote[BTTV_MAX] = { [ 0 ... (BTTV_MAX-1) ] = UNSET };
static unsigned int audiodev[BTTV_MAX];
static unsigned int saa6588[BTTV_MAX];
static struct bttv  *master[BTTV_MAX] = { [ 0 ... (BTTV_MAX-1) ] = NULL };
static unsigned int autoload = UNSET;
static unsigned int gpiomask = UNSET;
static unsigned int audioall = UNSET;
static unsigned int audiomux[5] = { [ 0 ... 4 ] = UNSET };

/* insmod options */
module_param(triton1,    int, 0444);
module_param(vsfx,       int, 0444);
module_param(latency,    int, 0444);
module_param(gpiomask,   int, 0444);
module_param(audioall,   int, 0444);
module_param(autoload,   int, 0444);

module_param_array(card,     int, NULL, 0444);
module_param_array(pll,      int, NULL, 0444);
module_param_array(tuner,    int, NULL, 0444);
module_param_array(svhs,     int, NULL, 0444);
module_param_array(remote,   int, NULL, 0444);
module_param_array(audiodev, int, NULL, 0444);
module_param_array(audiomux, int, NULL, 0444);

MODULE_PARM_DESC(triton1, "set ETBF pci config bit [enable bug compatibility for triton1 + others]");
MODULE_PARM_DESC(vsfx, "set VSFX pci config bit [yet another chipset flaw workaround]");
MODULE_PARM_DESC(latency,"pci latency timer");
MODULE_PARM_DESC(card,"specify TV/grabber card model, see CARDLIST file for a list");
MODULE_PARM_DESC(pll, "specify installed crystal (0=none, 28=28 MHz, 35=35 MHz, 14=14 MHz)");
MODULE_PARM_DESC(tuner,"specify installed tuner type");
MODULE_PARM_DESC(autoload, "obsolete option, please do not use anymore");
MODULE_PARM_DESC(audiodev, "specify audio device:\n"
  "\t\t-1 = no audio\n"
  "\t\t 0 = autodetect (default)\n"
  "\t\t 1 = msp3400\n"
  "\t\t 2 = tda7432\n"
  "\t\t 3 = tvaudio");
MODULE_PARM_DESC(saa6588, "if 1, then load the saa6588 RDS module, default (0) is to use the card definition.");

MODULE_FIRMWARE("hcwamc.rbf");

/* I2C addresses list */
#define I2C_ADDR_TDA7432 0x8a
#define I2C_ADDR_MSP3400 0x80
#define I2C_ADDR_MSP3400_ALT 0x88


/* ----------------------------------------------------------------------- */
/* list of card IDs for bt878+ cards                                       */

static struct CARD {
 unsigned id;
 int cardnr;
 char *name;
} cards[] = {
 { 0x13eb0070, BTTV_BOARD_HAUPPAUGE878,  "Hauppauge WinTV" },
 { 0x39000070, BTTV_BOARD_HAUPPAUGE878,  "Hauppauge WinTV-D" },
 { 0x45000070, BTTV_BOARD_HAUPPAUGEPVR,  "Hauppauge WinTV/PVR" },
 { 0xff000070, BTTV_BOARD_OSPREY1x0,     "Osprey-100" },
 { 0xff010070, BTTV_BOARD_OSPREY2x0_SVID,"Osprey-200" },
 { 0xff020070, BTTV_BOARD_OSPREY500,     "Osprey-500" },
 { 0xff030070, BTTV_BOARD_OSPREY2000,    "Osprey-2000" },
 { 0xff040070, BTTV_BOARD_OSPREY540,     "Osprey-540" },
 { 0xff070070, BTTV_BOARD_OSPREY440,     "Osprey-440" },

 { 0x00011002, BTTV_BOARD_ATI_TVWONDER,  "ATI TV Wonder" },
 { 0x00031002, BTTV_BOARD_ATI_TVWONDERVE,"ATI TV Wonder/VE" },

 { 0x6606107d, BTTV_BOARD_WINFAST2000,   "Leadtek WinFast TV 2000" },
 { 0x6607107d, BTTV_BOARD_WINFASTVC100,  "Leadtek WinFast VC 100" },
 { 0x6609107d, BTTV_BOARD_WINFAST2000,   "Leadtek TV 2000 XP" },
 { 0x263610b4, BTTV_BOARD_STB2,          "STB TV PCI FM, Gateway P/N 6000704" },
 { 0x264510b4, BTTV_BOARD_STB2,          "STB TV PCI FM, Gateway P/N 6000704" },
 { 0x402010fc, BTTV_BOARD_GVBCTV3PCI,    "I-O Data Co. GV-BCTV3/PCI" },
 { 0x405010fc, BTTV_BOARD_GVBCTV4PCI,    "I-O Data Co. GV-BCTV4/PCI" },
 { 0x407010fc, BTTV_BOARD_GVBCTV5PCI,    "I-O Data Co. GV-BCTV5/PCI" },
 { 0xd01810fc, BTTV_BOARD_GVBCTV5PCI,    "I-O Data Co. GV-BCTV5/PCI" },

 { 0x001211bd, BTTV_BOARD_PINNACLE,      "Pinnacle PCTV" },
 /* some cards ship with byteswapped IDs ... */
 { 0x1200bd11, BTTV_BOARD_PINNACLE,      "Pinnacle PCTV [bswap]" },
 { 0xff00bd11, BTTV_BOARD_PINNACLE,      "Pinnacle PCTV [bswap]" },
 /* this seems to happen as well ... */
 { 0xff1211bd, BTTV_BOARD_PINNACLE,      "Pinnacle PCTV" },

 { 0x3000121a, BTTV_BOARD_VOODOOTV_200,  "3Dfx VoodooTV 200" },
 { 0x263710b4, BTTV_BOARD_VOODOOTV_FM,   "3Dfx VoodooTV FM" },
 { 0x3060121a, BTTV_BOARD_STB2,   "3Dfx VoodooTV 100/ STB OEM" },

 { 0x3000144f, BTTV_BOARD_MAGICTVIEW063, "(Askey Magic/others) TView99 CPH06x" },
 { 0xa005144f, BTTV_BOARD_MAGICTVIEW063, "CPH06X TView99-Card" },
 { 0x3002144f, BTTV_BOARD_MAGICTVIEW061, "(Askey Magic/others) TView99 CPH05x" },
 { 0x3005144f, BTTV_BOARD_MAGICTVIEW061, "(Askey Magic/others) TView99 CPH061/06L (T1/LC)" },
 { 0x5000144f, BTTV_BOARD_MAGICTVIEW061, "Askey CPH050" },
 { 0x300014ff, BTTV_BOARD_MAGICTVIEW061, "TView 99 (CPH061)" },
 { 0x300214ff, BTTV_BOARD_PHOEBE_TVMAS,  "Phoebe TV Master (CPH060)" },

 { 0x00011461, BTTV_BOARD_AVPHONE98,     "AVerMedia TVPhone98" },
 { 0x00021461, BTTV_BOARD_AVERMEDIA98,   "AVermedia TVCapture 98" },
 { 0x00031461, BTTV_BOARD_AVPHONE98,     "AVerMedia TVPhone98" },
 { 0x00041461, BTTV_BOARD_AVERMEDIA98,   "AVerMedia TVCapture 98" },
 { 0x03001461, BTTV_BOARD_AVERMEDIA98,   "VDOMATE TV TUNER CARD" },

 { 0x1117153b, BTTV_BOARD_TERRATVALUE,   "Terratec TValue (Philips PAL B/G)" },
 { 0x1118153b, BTTV_BOARD_TERRATVALUE,   "Terratec TValue (Temic PAL B/G)" },
 { 0x1119153b, BTTV_BOARD_TERRATVALUE,   "Terratec TValue (Philips PAL I)" },
 { 0x111a153b, BTTV_BOARD_TERRATVALUE,   "Terratec TValue (Temic PAL I)" },

 { 0x1123153b, BTTV_BOARD_TERRATVRADIO,  "Terratec TV Radio+" },
 { 0x1127153b, BTTV_BOARD_TERRATV,       "Terratec TV+ (V1.05)"    },
 /* clashes with FlyVideo
 *{ 0x18521852, BTTV_BOARD_TERRATV,     "Terratec TV+ (V1.10)"    }, */

 { 0x1134153b, BTTV_BOARD_TERRATVALUE,   "Terratec TValue (LR102)" },
 { 0x1135153b, BTTV_BOARD_TERRATVALUER,  "Terratec TValue Radio" }, /* LR102 */
 { 0x5018153b, BTTV_BOARD_TERRATVALUE,   "Terratec TValue" },       /* ?? */
 { 0xff3b153b, BTTV_BOARD_TERRATVALUER,  "Terratec TValue Radio" }, /* ?? */

 { 0x400015b0, BTTV_BOARD_ZOLTRIX_GENIE, "Zoltrix Genie TV" },
 { 0x400a15b0, BTTV_BOARD_ZOLTRIX_GENIE, "Zoltrix Genie TV" },
 { 0x400d15b0, BTTV_BOARD_ZOLTRIX_GENIE, "Zoltrix Genie TV / Radio" },
 { 0x401015b0, BTTV_BOARD_ZOLTRIX_GENIE, "Zoltrix Genie TV / Radio" },
 { 0x401615b0, BTTV_BOARD_ZOLTRIX_GENIE, "Zoltrix Genie TV / Radio" },

 { 0x1430aa00, BTTV_BOARD_PV143,         "Provideo PV143A" },
 { 0x1431aa00, BTTV_BOARD_PV143,         "Provideo PV143B" },
 { 0x1432aa00, BTTV_BOARD_PV143,         "Provideo PV143C" },
 { 0x1433aa00, BTTV_BOARD_PV143,         "Provideo PV143D" },
 { 0x1433aa03, BTTV_BOARD_PV143,         "Security Eyes" },

 { 0x1460aa00, BTTV_BOARD_PV150,         "Provideo PV150A-1" },
 { 0x1461aa01, BTTV_BOARD_PV150,         "Provideo PV150A-2" },
 { 0x1462aa02, BTTV_BOARD_PV150,         "Provideo PV150A-3" },
 { 0x1463aa03, BTTV_BOARD_PV150,         "Provideo PV150A-4" },

 { 0x1464aa04, BTTV_BOARD_PV150,         "Provideo PV150B-1" },
 { 0x1465aa05, BTTV_BOARD_PV150,         "Provideo PV150B-2" },
 { 0x1466aa06, BTTV_BOARD_PV150,         "Provideo PV150B-3" },
 { 0x1467aa07, BTTV_BOARD_PV150,         "Provideo PV150B-4" },

 { 0xa132ff00, BTTV_BOARD_IVC100,        "IVC-100"  },
 { 0xa1550000, BTTV_BOARD_IVC200,        "IVC-200"  },
 { 0xa1550001, BTTV_BOARD_IVC200,        "IVC-200"  },
 { 0xa1550002, BTTV_BOARD_IVC200,        "IVC-200"  },
 { 0xa1550003, BTTV_BOARD_IVC200,        "IVC-200"  },
 { 0xa1550100, BTTV_BOARD_IVC200,        "IVC-200G" },
 { 0xa1550101, BTTV_BOARD_IVC200,        "IVC-200G" },
 { 0xa1550102, BTTV_BOARD_IVC200,        "IVC-200G" },
 { 0xa1550103, BTTV_BOARD_IVC200,        "IVC-200G" },
 { 0xa1550800, BTTV_BOARD_IVC200,        "IVC-200"  },
 { 0xa1550801, BTTV_BOARD_IVC200,        "IVC-200"  },
 { 0xa1550802, BTTV_BOARD_IVC200,        "IVC-200"  },
 { 0xa1550803, BTTV_BOARD_IVC200,        "IVC-200"  },
 { 0xa182ff00, BTTV_BOARD_IVC120,        "IVC-120G" },
 { 0xa182ff01, BTTV_BOARD_IVC120,        "IVC-120G" },
 { 0xa182ff02, BTTV_BOARD_IVC120,        "IVC-120G" },
 { 0xa182ff03, BTTV_BOARD_IVC120,        "IVC-120G" },
 { 0xa182ff04, BTTV_BOARD_IVC120,        "IVC-120G" },
 { 0xa182ff05, BTTV_BOARD_IVC120,        "IVC-120G" },
 { 0xa182ff06, BTTV_BOARD_IVC120,        "IVC-120G" },
 { 0xa182ff07, BTTV_BOARD_IVC120,        "IVC-120G" },
 { 0xa182ff08, BTTV_BOARD_IVC120,        "IVC-120G" },
 { 0xa182ff09, BTTV_BOARD_IVC120,        "IVC-120G" },
 { 0xa182ff0a, BTTV_BOARD_IVC120,        "IVC-120G" },
 { 0xa182ff0b, BTTV_BOARD_IVC120,        "IVC-120G" },
 { 0xa182ff0c, BTTV_BOARD_IVC120,        "IVC-120G" },
 { 0xa182ff0d, BTTV_BOARD_IVC120,        "IVC-120G" },
 { 0xa182ff0e, BTTV_BOARD_IVC120,        "IVC-120G" },
 { 0xa182ff0f, BTTV_BOARD_IVC120,        "IVC-120G" },
 { 0xf0500000, BTTV_BOARD_IVCE8784,      "IVCE-8784" },
 { 0xf0500001, BTTV_BOARD_IVCE8784,      "IVCE-8784" },
 { 0xf0500002, BTTV_BOARD_IVCE8784,      "IVCE-8784" },
 { 0xf0500003, BTTV_BOARD_IVCE8784,      "IVCE-8784" },

 { 0x41424344, BTTV_BOARD_GRANDTEC,      "GrandTec Multi Capture" },
 { 0x01020304, BTTV_BOARD_XGUARD,        "Grandtec Grand X-Guard" },

 { 0x18501851, BTTV_BOARD_CHRONOS_VS2,   "FlyVideo 98 (LR50)/ Chronos Video Shuttle II" },
 { 0xa0501851, BTTV_BOARD_CHRONOS_VS2,   "FlyVideo 98 (LR50)/ Chronos Video Shuttle II" },
 { 0x18511851, BTTV_BOARD_FLYVIDEO98EZ,  "FlyVideo 98EZ (LR51)/ CyberMail AV" },
 { 0x18521852, BTTV_BOARD_TYPHOON_TVIEW, "FlyVideo 98FM (LR50)/ Typhoon TView TV/FM Tuner" },
 { 0x41a0a051, BTTV_BOARD_FLYVIDEO_98FM, "Lifeview FlyVideo 98 LR50 Rev Q" },
 { 0x18501f7f, BTTV_BOARD_FLYVIDEO_98,   "Lifeview Flyvideo 98" },

 { 0x010115cb, BTTV_BOARD_GMV1,          "AG GMV1" },
 { 0x010114c7, BTTV_BOARD_MODTEC_205,    "Modular Technology MM201/MM202/MM205/MM210/MM215 PCTV" },

 { 0x10b42636, BTTV_BOARD_HAUPPAUGE878,  "STB ???" },
 { 0x217d6606, BTTV_BOARD_WINFAST2000,   "Leadtek WinFast TV 2000" },
 { 0xfff6f6ff, BTTV_BOARD_WINFAST2000,   "Leadtek WinFast TV 2000" },
 { 0x03116000, BTTV_BOARD_SENSORAY311_611, "Sensoray 311" },
 { 0x06116000, BTTV_BOARD_SENSORAY311_611, "Sensoray 611" },
 { 0x00790e11, BTTV_BOARD_WINDVR,        "Canopus WinDVR PCI" },
 { 0xa0fca1a0, BTTV_BOARD_ZOLTRIX,       "Face to Face Tvmax" },
 { 0x82b2aa6a, BTTV_BOARD_SIMUS_GVC1100, "SIMUS GVC1100" },
 { 0x146caa0c, BTTV_BOARD_PV951,         "ituner spectra8" },
 { 0x200a1295, BTTV_BOARD_PXC200,        "ImageNation PXC200A" },

 { 0x40111554, BTTV_BOARD_PV_BT878P_9B,  "Prolink Pixelview PV-BT" },
 { 0x17de0a01, BTTV_BOARD_KWORLD,        "Mecer TV/FM/Video Tuner" },

 { 0x01051805, BTTV_BOARD_PICOLO_TETRA_CHIP, "Picolo Tetra Chip #1" },
 { 0x01061805, BTTV_BOARD_PICOLO_TETRA_CHIP, "Picolo Tetra Chip #2" },
 { 0x01071805, BTTV_BOARD_PICOLO_TETRA_CHIP, "Picolo Tetra Chip #3" },
 { 0x01081805, BTTV_BOARD_PICOLO_TETRA_CHIP, "Picolo Tetra Chip #4" },

 { 0x15409511, BTTV_BOARD_ACORP_Y878F, "Acorp Y878F" },

 { 0x53534149, BTTV_BOARD_SSAI_SECURITY, "SSAI Security Video Interface" },
 { 0x5353414a, BTTV_BOARD_SSAI_ULTRASOUND, "SSAI Ultrasound Video Interface" },

 /* likely broken, vendor id doesn't match the other magic views ...
 * { 0xa0fca04f, BTTV_BOARD_MAGICTVIEW063, "Guillemot Maxi TV Video 3" }, */


 /* Duplicate PCI ID, reconfigure for this board during the eeprom read.
* { 0x13eb0070, BTTV_BOARD_HAUPPAUGE_IMPACTVCB,  "Hauppauge ImpactVCB" }, */


 { 0x109e036e, BTTV_BOARD_CONCEPTRONIC_CTVFMI2, "Conceptronic CTVFMi v2"},

 /* DVB cards (using pci function .1 for mpeg data xfer) */
 { 0x001c11bd, BTTV_BOARD_PINNACLESAT,   "Pinnacle PCTV Sat" },
 { 0x01010071, BTTV_BOARD_NEBULA_DIGITV, "Nebula Electronics DigiTV" },
 { 0x20007063, BTTV_BOARD_PC_HDTV,       "pcHDTV HD-2000 TV"},
 { 0x002611bd, BTTV_BOARD_TWINHAN_DST,   "Pinnacle PCTV SAT CI" },
 { 0x00011822, BTTV_BOARD_TWINHAN_DST,   "Twinhan VisionPlus DVB" },
 { 0xfc00270f, BTTV_BOARD_TWINHAN_DST,   "ChainTech digitop DST-1000 DVB-S" },
 { 0x07711461, BTTV_BOARD_AVDVBT_771,    "AVermedia AverTV DVB-T 771" },
 { 0x07611461, BTTV_BOARD_AVDVBT_761,    "AverMedia AverTV DVB-T 761" },
 { 0xdb1018ac, BTTV_BOARD_DVICO_DVBT_LITE,    "DViCO FusionHDTV DVB-T Lite" },
 { 0xdb1118ac, BTTV_BOARD_DVICO_DVBT_LITE,    "Ultraview DVB-T Lite" },
 { 0xd50018ac, BTTV_BOARD_DVICO_FUSIONHDTV_5_LITE,    "DViCO FusionHDTV 5 Lite" },
 { 0x00261822, BTTV_BOARD_TWINHAN_DST, "DNTV Live! Mini "},
 { 0xd200dbc0, BTTV_BOARD_DVICO_FUSIONHDTV_2, "DViCO FusionHDTV 2" },
 { 0x763c008a, BTTV_BOARD_GEOVISION_GV600, "GeoVision GV-600" },
 { 0x18011000, BTTV_BOARD_ENLTV_FM_2, "Encore ENL TV-FM-2" },
 { 0x763d800a, BTTV_BOARD_GEOVISION_GV800S, "GeoVision GV-800(S) (master)" },
 { 0x763d800b, BTTV_BOARD_GEOVISION_GV800S_SL, "GeoVision GV-800(S) (slave)" },
 { 0x763d800c, BTTV_BOARD_GEOVISION_GV800S_SL, "GeoVision GV-800(S) (slave)" },
 { 0x763d800d, BTTV_BOARD_GEOVISION_GV800S_SL, "GeoVision GV-800(S) (slave)" },

 { 0x15401830, BTTV_BOARD_PV183,         "Provideo PV183-1" },
 { 0x15401831, BTTV_BOARD_PV183,         "Provideo PV183-2" },
 { 0x15401832, BTTV_BOARD_PV183,         "Provideo PV183-3" },
 { 0x15401833, BTTV_BOARD_PV183,         "Provideo PV183-4" },
 { 0x15401834, BTTV_BOARD_PV183,         "Provideo PV183-5" },
 { 0x15401835, BTTV_BOARD_PV183,         "Provideo PV183-6" },
 { 0x15401836, BTTV_BOARD_PV183,         "Provideo PV183-7" },
 { 0x15401837, BTTV_BOARD_PV183,         "Provideo PV183-8" },
 { 0x3116f200, BTTV_BOARD_TVT_TD3116, "Tongwei Video Technology TD-3116" },
 { 0x02280279, BTTV_BOARD_APOSONIC_WDVR, "Aposonic W-DVR" },
 { 0, -1, NULL }
};

/* ----------------------------------------------------------------------- */
/* array with description for bt848 / bt878 tv/grabber cards               */

struct tvcard bttv_tvcards[] = {
 /* ---- card 0x00 ---------------------------------- */
 [BTTV_BOARD_UNKNOWN] = {
  .name  = " *** UNKNOWN/GENERIC *** ",
  .video_inputs = 4,
  .svhs  = 2,
  .muxsel  = MUXSEL(2, 3, 1, 0),
  .tuner_type = UNSET,
  .tuner_addr = ADDR_UNSET,
 },
 [BTTV_BOARD_MIRO] = {
  .name  = "MIRO PCTV",
  .video_inputs = 4,
  /* .audio_inputs= 1, */
  .svhs  = 2,
  .gpiomask = 15,
  .muxsel  = MUXSEL(2, 3, 1, 1),
  .gpiomux = { 2, 0, 0, 0 },
  .gpiomute = 10,
  .tuner_type = UNSET,
  .tuner_addr = ADDR_UNSET,
 },
 [BTTV_BOARD_HAUPPAUGE] = {
  .name  = "Hauppauge (bt848)",
  .video_inputs = 4,
  /* .audio_inputs= 1, */
  .svhs  = 2,
  .gpiomask = 7,
  .muxsel  = MUXSEL(2, 3, 1, 1),
  .gpiomux = { 0, 1, 2, 3 },
  .gpiomute = 4,
  .tuner_type = UNSET,
  .tuner_addr = ADDR_UNSET,
 },
 [BTTV_BOARD_STB] = {
  .name  = "STB, Gateway P/N 6000699 (bt848)",
  .video_inputs = 3,
  /* .audio_inputs= 1, */
  .svhs  = 2,
  .gpiomask = 7,
  .muxsel  = MUXSEL(2, 3, 1, 1),
  .gpiomux = { 4, 0, 2, 3 },
  .gpiomute = 1,
  .no_msp34xx = 1,
  .tuner_type     = TUNER_PHILIPS_NTSC,
  .tuner_addr = ADDR_UNSET,
  .pll            = PLL_28,
  .has_radio      = 1,
 },

 /* ---- card 0x04 ---------------------------------- */
 [BTTV_BOARD_INTEL] = {
  .name  = "Intel Create and Share PCI/ Smart Video Recorder III",
  .video_inputs = 4,
  /* .audio_inputs= 0, */
  .svhs  = 2,
  .gpiomask = 0,
  .muxsel  = MUXSEL(2, 3, 1, 1),
  .gpiomux = { 0 },
  .tuner_type = TUNER_ABSENT,
  .tuner_addr = ADDR_UNSET,
 },
 [BTTV_BOARD_DIAMOND] = {
  .name  = "Diamond DTV2000",
  .video_inputs = 4,
  /* .audio_inputs= 1, */
  .svhs  = 2,
  .gpiomask = 3,
  .muxsel  = MUXSEL(2, 3, 1, 0),
  .gpiomux = { 0, 1, 0, 1 },
  .gpiomute = 3,
  .tuner_type = UNSET,
  .tuner_addr = ADDR_UNSET,
 },
 [BTTV_BOARD_AVERMEDIA] = {
  .name  = "AVerMedia TVPhone",
  .video_inputs = 3,
  /* .audio_inputs= 1, */
  .svhs  = 3,
  .muxsel  = MUXSEL(2, 3, 1, 1),
  .gpiomask = 0x0f,
  .gpiomux = { 0x0c, 0x04, 0x08, 0x04 },
  /*                0x04 for some cards ?? */
  .tuner_type = UNSET,
  .tuner_addr = ADDR_UNSET,
  .audio_mode_gpio= avermedia_tvphone_audio,
  .has_remote     = 1,
 },
 [BTTV_BOARD_MATRIX_VISION] = {
  .name  = "MATRIX-Vision MV-Delta",
  .video_inputs = 5,
  /* .audio_inputs= 1, */
  .svhs  = 3,
  .gpiomask = 0,
  .muxsel  = MUXSEL(2, 3, 1, 0, 0),
  .gpiomux = { 0 },
  .tuner_type = TUNER_ABSENT,
  .tuner_addr = ADDR_UNSET,
 },

 /* ---- card 0x08 ---------------------------------- */
 [BTTV_BOARD_FLYVIDEO] = {
  .name  = "Lifeview FlyVideo II (Bt848) LR26 / MAXI TV Video PCI2 LR26",
  .video_inputs = 4,
  /* .audio_inputs= 1, */
  .svhs  = 2,
  .gpiomask = 0xc00,
  .muxsel  = MUXSEL(2, 3, 1, 1),
  .gpiomux = { 0, 0xc00, 0x800, 0x400 },
  .gpiomute = 0xc00,
  .pll  = PLL_28,
  .tuner_type = UNSET,
  .tuner_addr = ADDR_UNSET,
 },
 [BTTV_BOARD_TURBOTV] = {
  .name  = "IMS/IXmicro TurboTV",
  .video_inputs = 3,
  /* .audio_inputs= 1, */
  .svhs  = 2,
  .gpiomask = 3,
  .muxsel  = MUXSEL(2, 3, 1, 1),
  .gpiomux = { 1, 1, 2, 3 },
  .pll  = PLL_28,
  .tuner_type = TUNER_TEMIC_PAL,
  .tuner_addr = ADDR_UNSET,
 },
 [BTTV_BOARD_HAUPPAUGE878] = {
  .name  = "Hauppauge (bt878)",
  .video_inputs = 4,
  /* .audio_inputs= 1, */
  .svhs  = 2,
  .gpiomask = 0x0f, /* old: 7 */
  .muxsel  = MUXSEL(2, 0, 1, 1),
  .gpiomux = { 0, 1, 2, 3 },
  .gpiomute = 4,
  .pll  = PLL_28,
  .tuner_type = UNSET,
  .tuner_addr = ADDR_UNSET,
 },
 [BTTV_BOARD_MIROPRO] = {
  .name  = "MIRO PCTV pro",
  .video_inputs = 3,
  /* .audio_inputs= 1, */
  .svhs  = 2,
  .gpiomask = 0x3014f,
  .muxsel  = MUXSEL(2, 3, 1, 1),
  .gpiomux = { 0x20001,0x10001, 0, 0 },
  .gpiomute = 10,
  .tuner_type = UNSET,
  .tuner_addr = ADDR_UNSET,
 },

 /* ---- card 0x0c ---------------------------------- */
 [BTTV_BOARD_ADSTECH_TV] = {
  .name  = "ADS Technologies Channel Surfer TV (bt848)",
  .video_inputs = 3,
  /* .audio_inputs= 1, */
  .svhs  = 2,
  .gpiomask = 15,
  .muxsel  = MUXSEL(2, 3, 1, 1),
  .gpiomux = { 13, 14, 11, 7 },
  .tuner_type = UNSET,
  .tuner_addr = ADDR_UNSET,
 },
 [BTTV_BOARD_AVERMEDIA98] = {
  .name  = "AVerMedia TVCapture 98",
  .video_inputs = 3,
  /* .audio_inputs= 4, */
  .svhs  = 2,
  .gpiomask = 15,
  .muxsel  = MUXSEL(2, 3, 1, 1),
  .gpiomux = { 13, 14, 11, 7 },
  .msp34xx_alt    = 1,
  .pll  = PLL_28,
  .tuner_type = TUNER_PHILIPS_PAL,
  .tuner_addr = ADDR_UNSET,
  .audio_mode_gpio= avermedia_tv_stereo_audio,
  .no_gpioirq     = 1,
 },
 [BTTV_BOARD_VHX] = {
  .name  = "Aimslab Video Highway Xtreme (VHX)",
  .video_inputs = 3,
  /* .audio_inputs= 1, */
  .svhs  = 2,
  .gpiomask = 7,
  .muxsel  = MUXSEL(2, 3, 1, 1),
  .gpiomux = { 0, 2, 1, 3 }, /* old: {0, 1, 2, 3, 4} */
  .gpiomute = 4,
  .pll  = PLL_28,
  .tuner_type = UNSET,
  .tuner_addr = ADDR_UNSET,
 },
 [BTTV_BOARD_ZOLTRIX] = {
  .name  = "Zoltrix TV-Max",
  .video_inputs = 3,
  /* .audio_inputs= 1, */
  .svhs  = 2,
  .gpiomask = 15,
  .muxsel  = MUXSEL(2, 3, 1, 1),
  .gpiomux = { 0, 0, 1, 0 },
  .gpiomute = 10,
  .tuner_type = UNSET,
  .tuner_addr = ADDR_UNSET,
 },

 /* ---- card 0x10 ---------------------------------- */
 [BTTV_BOARD_PIXVIEWPLAYTV] = {
  .name  = "Prolink Pixelview PlayTV (bt878)",
  .video_inputs = 3,
  /* .audio_inputs= 1, */
  .svhs  = 2,
  .gpiomask = 0x01fe00,
  .muxsel  = MUXSEL(2, 3, 1, 1),
  /* 2003-10-20 by "Anton A. Arapov" <arapov@mail.ru> */
  .gpiomux        = { 0x001e00, 0, 0x018000, 0x014000 },
  .gpiomute = 0x002000,
  .pll  = PLL_28,
  .tuner_type = UNSET,
  .tuner_addr     = ADDR_UNSET,
 },
 [BTTV_BOARD_WINVIEW_601] = {
  .name  = "Leadtek WinView 601",
  .video_inputs = 3,
  /* .audio_inputs= 1, */
  .svhs  = 2,
  .gpiomask = 0x8300f8,
  .muxsel  = MUXSEL(2, 3, 1, 1, 0),
  .gpiomux = { 0x4fa007,0xcfa007,0xcfa007,0xcfa007 },
  .gpiomute = 0xcfa007,
  .tuner_type = UNSET,
  .tuner_addr = ADDR_UNSET,
  .volume_gpio = winview_volume,
  .has_radio = 1,
 },
 [BTTV_BOARD_AVEC_INTERCAP] = {
  .name  = "AVEC Intercapture",
  .video_inputs = 3,
  /* .audio_inputs= 2, */
  .svhs  = 2,
  .gpiomask = 0,
  .muxsel  = MUXSEL(2, 3, 1, 1),
  .gpiomux = { 1, 0, 0, 0 },
  .tuner_type = UNSET,
  .tuner_addr = ADDR_UNSET,
 },
 [BTTV_BOARD_LIFE_FLYKIT] = {
  .name  = "Lifeview FlyVideo II EZ /FlyKit LR38 Bt848 (capture only)",
  .video_inputs = 4,
  /* .audio_inputs= 1, */
  .svhs  = NO_SVHS,
  .gpiomask = 0x8dff00,
  .muxsel  = MUXSEL(2, 3, 1, 1),
  .gpiomux = { 0 },
  .no_msp34xx = 1,
  .tuner_type = TUNER_ABSENT,
  .tuner_addr = ADDR_UNSET,
 },

 /* ---- card 0x14 ---------------------------------- */
 [BTTV_BOARD_CEI_RAFFLES] = {
  .name  = "CEI Raffles Card",
  .video_inputs = 3,
  /* .audio_inputs= 3, */
  .svhs  = 2,
  .muxsel  = MUXSEL(2, 3, 1, 1),
  .tuner_type = UNSET,
  .tuner_addr = ADDR_UNSET,
 },
 [BTTV_BOARD_CONFERENCETV] = {
  .name  = "Lifeview FlyVideo 98/ Lucky Star Image World ConferenceTV LR50",
  .video_inputs = 4,
  /* .audio_inputs= 2,  tuner, line in */
  .svhs  = 2,
  .gpiomask = 0x1800,
  .muxsel  = MUXSEL(2, 3, 1, 1),
  .gpiomux = { 0, 0x800, 0x1000, 0x1000 },
  .gpiomute = 0x1800,
  .pll  = PLL_28,
  .tuner_type = TUNER_PHILIPS_PAL_I,
  .tuner_addr = ADDR_UNSET,
 },
 [BTTV_BOARD_PHOEBE_TVMAS] = {
  .name  = "Askey CPH050/ Phoebe Tv Master + FM",
  .video_inputs = 3,
  /* .audio_inputs= 1, */
  .svhs  = 2,
  .gpiomask = 0xc00,
  .muxsel  = MUXSEL(2, 3, 1, 1),
  .gpiomux = { 0, 1, 0x800, 0x400 },
  .gpiomute = 0xc00,
  .pll  = PLL_28,
  .tuner_type = UNSET,
  .tuner_addr = ADDR_UNSET,
 },
 [BTTV_BOARD_MODTEC_205] = {
  .name  = "Modular Technology MM201/MM202/MM205/MM210/MM215 PCTV, bt878",
  .video_inputs = 3,
  /* .audio_inputs= 1, */
  .svhs  = NO_SVHS,
  .has_dig_in = 1,
  .gpiomask = 7,
  .muxsel  = MUXSEL(2, 3, 0), /* input 2 is digital */
  /* .digital_mode= DIGITAL_MODE_CAMERA, */
  .gpiomux = { 0, 0, 0, 0 },
  .no_msp34xx = 1,
  .pll            = PLL_28,
  .tuner_type     = TUNER_ALPS_TSBB5_PAL_I,
  .tuner_addr = ADDR_UNSET,
 },

 /* ---- card 0x18 ---------------------------------- */
 [BTTV_BOARD_MAGICTVIEW061] = {
  .name  = "Askey CPH05X/06X (bt878) [many vendors]",
  .video_inputs = 3,
  /* .audio_inputs= 1, */
  .svhs  = 2,
  .gpiomask = 0xe00,
  .muxsel  = MUXSEL(2, 3, 1, 1),
  .gpiomux = {0x400, 0x400, 0x400, 0x400 },
  .gpiomute = 0xc00,
  .pll  = PLL_28,
  .tuner_type = UNSET,
  .tuner_addr = ADDR_UNSET,
  .has_remote     = 1,
  .has_radio = 1,  /* not every card has radio */
 },
 [BTTV_BOARD_VOBIS_BOOSTAR] = {
  .name           = "Terratec TerraTV+ Version 1.0 (Bt848)/ Terra TValue Version 1.0/ Vobis TV-Boostar",
  .video_inputs = 3,
  /* .audio_inputs= 1, */
  .svhs  = 2,
  .gpiomask       = 0x1f0fff,
  .muxsel  = MUXSEL(2, 3, 1, 1),
  .gpiomux        = { 0x20000, 0x30000, 0x10000, 0 },
  .gpiomute = 0x40000,
  .tuner_type = TUNER_PHILIPS_PAL,
  .tuner_addr = ADDR_UNSET,
  .audio_mode_gpio= terratv_audio,
 },
 [BTTV_BOARD_HAUPPAUG_WCAM] = {
  .name  = "Hauppauge WinCam newer (bt878)",
  .video_inputs = 4,
  /* .audio_inputs= 1, */
  .svhs  = 3,
  .gpiomask = 7,
  .muxsel  = MUXSEL(2, 0, 1, 1),
  .gpiomux = { 0, 1, 2, 3 },
  .gpiomute = 4,
  .tuner_type = UNSET,
  .tuner_addr = ADDR_UNSET,
 },
 [BTTV_BOARD_MAXI] = {
  .name  = "Lifeview FlyVideo 98/ MAXI TV Video PCI2 LR50",
  .video_inputs = 4,
  /* .audio_inputs= 2, */
  .svhs  = 2,
  .gpiomask = 0x1800,
  .muxsel  = MUXSEL(2, 3, 1, 1),
  .gpiomux = { 0, 0x800, 0x1000, 0x1000 },
  .gpiomute = 0x1800,
  .pll            = PLL_28,
  .tuner_type = TUNER_PHILIPS_SECAM,
  .tuner_addr = ADDR_UNSET,
 },

 /* ---- card 0x1c ---------------------------------- */
 [BTTV_BOARD_TERRATV] = {
  .name           = "Terratec TerraTV+ Version 1.1 (bt878)",
  .video_inputs = 3,
  /* .audio_inputs= 1, */
  .svhs  = 2,
  .gpiomask = 0x1f0fff,
  .muxsel  = MUXSEL(2, 3, 1, 1),
  .gpiomux = { 0x20000, 0x30000, 0x10000, 0x00000 },
  .gpiomute = 0x40000,
  .tuner_type = TUNER_PHILIPS_PAL,
  .tuner_addr = ADDR_UNSET,
  .audio_mode_gpio= terratv_audio,
  /* GPIO wiring:
External 20 pin connector (for Active Radio Upgrade board)
gpio00: i2c-sda
gpio01: i2c-scl
gpio02: om5610-data
gpio03: om5610-clk
gpio04: om5610-wre
gpio05: om5610-stereo
gpio06: rds6588-davn
gpio07: Pin 7 n.c.
gpio08: nIOW
gpio09+10: nIOR, nSEL ?? (bt878)
gpio09: nIOR (bt848)
gpio10: nSEL (bt848)
Sound Routing:
gpio16: u2-A0 (1st 4052bt)
gpio17: u2-A1
gpio18: u2-nEN
gpio19: u4-A0 (2nd 4052)
gpio20: u4-A1
u4-nEN - GND
Btspy:
00000 : Cdrom (internal audio input)
10000 : ext. Video audio input
20000 : TV Mono
a0000 : TV Mono/2
1a0000 : TV Stereo
30000 : Radio
40000 : Mute
*/


 },
 [BTTV_BOARD_PXC200] = {
  /* Jannik Fritsch <jannik@techfak.uni-bielefeld.de> */
  .name  = "Imagenation PXC200",
  .video_inputs = 5,
  /* .audio_inputs= 1, */
  .svhs  = 1, /* was: 4 */
  .gpiomask = 0,
  .muxsel  = MUXSEL(2, 3, 1, 0, 0),
  .gpiomux = { 0 },
  .tuner_type = TUNER_ABSENT,
  .tuner_addr = ADDR_UNSET,
  .muxsel_hook    = PXC200_muxsel,

 },
 [BTTV_BOARD_FLYVIDEO_98] = {
  .name  = "Lifeview FlyVideo 98 LR50",
  .video_inputs = 4,
  /* .audio_inputs= 1, */
  .svhs  = 2,
  .gpiomask = 0x1800,  /* 0x8dfe00 */
  .muxsel  = MUXSEL(2, 3, 1, 1),
  .gpiomux = { 0, 0x0800, 0x1000, 0x1000 },
  .gpiomute = 0x1800,
  .pll            = PLL_28,
  .tuner_type = UNSET,
  .tuner_addr = ADDR_UNSET,
 },
 [BTTV_BOARD_IPROTV] = {
  .name  = "Formac iProTV, Formac ProTV I (bt848)",
  .video_inputs = 4,
  /* .audio_inputs= 1, */
  .svhs  = 3,
  .gpiomask = 1,
  .muxsel  = MUXSEL(2, 3, 1, 1),
  .gpiomux = { 1, 0, 0, 0 },
  .pll            = PLL_28,
  .tuner_type = TUNER_PHILIPS_PAL,
  .tuner_addr = ADDR_UNSET,
 },

 /* ---- card 0x20 ---------------------------------- */
 [BTTV_BOARD_INTEL_C_S_PCI] = {
  .name  = "Intel Create and Share PCI/ Smart Video Recorder III",
  .video_inputs = 4,
  /* .audio_inputs= 0, */
  .svhs  = 2,
  .gpiomask = 0,
  .muxsel  = MUXSEL(2, 3, 1, 1),
  .gpiomux = { 0 },
  .tuner_type = TUNER_ABSENT,
  .tuner_addr = ADDR_UNSET,
 },
 [BTTV_BOARD_TERRATVALUE] = {
  .name           = "Terratec TerraTValue Version Bt878",
  .video_inputs = 3,
  /* .audio_inputs= 1, */
  .svhs  = 2,
  .gpiomask = 0xffff00,
  .muxsel  = MUXSEL(2, 3, 1, 1),
  .gpiomux = { 0x500, 0, 0x300, 0x900 },
  .gpiomute = 0x900,
  .pll  = PLL_28,
  .tuner_type = TUNER_PHILIPS_PAL,
  .tuner_addr = ADDR_UNSET,
 },
 [BTTV_BOARD_WINFAST2000] = {
  .name  = "Leadtek WinFast 2000/ WinFast 2000 XP",
  .video_inputs = 4,
  /* .audio_inputs= 1, */
  .svhs  = 2,
  /* TV, CVid, SVid, CVid over SVid connector */
  .muxsel  = MUXSEL(2, 3, 1, 1, 0),
  /* Alexander Varakin <avarakin@hotmail.com> [stereo version] */
  .gpiomask = 0xb33000,
  .gpiomux = { 0x122000,0x1000,0x0000,0x620000 },
  .gpiomute = 0x800000,
  /* Audio Routing for "WinFast 2000 XP" (no tv stereo !)
gpio23 -- hef4052:nEnable (0x800000)
gpio12 -- hef4052:A1
gpio13 -- hef4052:A0
0x0000: external audio
0x1000: FM
0x2000: TV
0x3000: n.c.
Note: There exists another variant "Winfast 2000" with tv stereo !?
Note: eeprom only contains FF and pci subsystem id 107d:6606
*/

  .pll  = PLL_28,
  .has_radio = 1,
  .tuner_type = TUNER_PHILIPS_PAL, /* default for now, gpio reads BFFF06 for Pal bg+dk */
  .tuner_addr = ADDR_UNSET,
  .audio_mode_gpio= winfast2000_audio,
  .has_remote     = 1,
 },
 [BTTV_BOARD_CHRONOS_VS2] = {
  .name  = "Lifeview FlyVideo 98 LR50 / Chronos Video Shuttle II",
  .video_inputs = 4,
  /* .audio_inputs= 3, */
  .svhs  = 2,
  .gpiomask = 0x1800,
  .muxsel  = MUXSEL(2, 3, 1, 1),
  .gpiomux = { 0, 0x800, 0x1000, 0x1000 },
  .gpiomute = 0x1800,
  .pll  = PLL_28,
  .tuner_type = UNSET,
  .tuner_addr = ADDR_UNSET,
 },

 /* ---- card 0x24 ---------------------------------- */
 [BTTV_BOARD_TYPHOON_TVIEW] = {
  .name  = "Lifeview FlyVideo 98FM LR50 / Typhoon TView TV/FM Tuner",
  .video_inputs = 4,
  /* .audio_inputs= 3, */
  .svhs  = 2,
  .gpiomask = 0x1800,
  .muxsel  = MUXSEL(2, 3, 1, 1),
  .gpiomux = { 0, 0x800, 0x1000, 0x1000 },
  .gpiomute = 0x1800,
  .pll  = PLL_28,
  .tuner_type = UNSET,
  .tuner_addr = ADDR_UNSET,
  .has_radio = 1,
 },
 [BTTV_BOARD_PXELVWPLTVPRO] = {
  .name  = "Prolink PixelView PlayTV pro",
  .video_inputs = 3,
  /* .audio_inputs= 1, */
  .svhs  = 2,
  .gpiomask = 0xff,
  .muxsel  = MUXSEL(2, 3, 1, 1),
  .gpiomux = { 0x21, 0x20, 0x24, 0x2c },
  .gpiomute = 0x29,
  .no_msp34xx = 1,
  .pll  = PLL_28,
  .tuner_type = UNSET,
  .tuner_addr = ADDR_UNSET,
 },
 [BTTV_BOARD_MAGICTVIEW063] = {
  .name  = "Askey CPH06X TView99",
  .video_inputs = 4,
  /* .audio_inputs= 1, */
  .svhs  = 2,
  .gpiomask = 0x551e00,
  .muxsel  = MUXSEL(2, 3, 1, 0),
  .gpiomux = { 0x551400, 0x551200, 0, 0 },
  .gpiomute = 0x551c00,
  .pll  = PLL_28,
  .tuner_type = TUNER_PHILIPS_PAL_I,
  .tuner_addr = ADDR_UNSET,
  .has_remote     = 1,
 },
 [BTTV_BOARD_PINNACLE] = {
  .name  = "Pinnacle PCTV Studio/Rave",
  .video_inputs = 3,
  /* .audio_inputs= 1, */
  .svhs  = 2,
  .gpiomask = 0x03000F,
  .muxsel  = MUXSEL(2, 3, 1, 1),
  .gpiomux = { 2, 0xd0001, 0, 0 },
  .gpiomute = 1,
  .pll  = PLL_28,
  .tuner_type = UNSET,
  .tuner_addr = ADDR_UNSET,
 },

 /* ---- card 0x28 ---------------------------------- */
 [BTTV_BOARD_STB2] = {
  .name  = "STB TV PCI FM, Gateway P/N 6000704 (bt878), 3Dfx VoodooTV 100",
  .video_inputs = 3,
  /* .audio_inputs= 1, */
  .svhs  = 2,
  .gpiomask = 7,
  .muxsel  = MUXSEL(2, 3, 1, 1),
  .gpiomux = { 4, 0, 2, 3 },
  .gpiomute = 1,
  .no_msp34xx = 1,
  .tuner_type     = TUNER_PHILIPS_NTSC,
  .tuner_addr = ADDR_UNSET,
  .pll            = PLL_28,
  .has_radio      = 1,
 },
 [BTTV_BOARD_AVPHONE98] = {
  .name  = "AVerMedia TVPhone 98",
  .video_inputs = 3,
  /* .audio_inputs= 4, */
  .svhs  = 2,
  .gpiomask = 15,
  .muxsel  = MUXSEL(2, 3, 1, 1),
  .gpiomux = { 13, 4, 11, 7 },
  .pll  = PLL_28,
  .tuner_type = UNSET,
  .tuner_addr = ADDR_UNSET,
  .has_radio = 1,
  .audio_mode_gpio= avermedia_tvphone_audio,
 },
 [BTTV_BOARD_PV951] = {
  .name  = "ProVideo PV951"/* pic16c54 */
  .video_inputs = 3,
  /* .audio_inputs= 1, */
  .svhs  = 2,
  .gpiomask = 0,
  .muxsel  = MUXSEL(2, 3, 1, 1),
  .gpiomux = { 0, 0, 0, 0},
  .no_msp34xx = 1,
  .pll  = PLL_28,
  .tuner_type = TUNER_PHILIPS_PAL_I,
  .tuner_addr = ADDR_UNSET,
 },
 [BTTV_BOARD_ONAIR_TV] = {
  .name  = "Little OnAir TV",
  .video_inputs = 3,
  /* .audio_inputs= 1, */
  .svhs  = 2,
  .gpiomask = 0xe00b,
  .muxsel  = MUXSEL(2, 3, 1, 1),
  .gpiomux = { 0xff9ff6, 0xff9ff6, 0xff1ff7, 0 },
  .gpiomute = 0xff3ffc,
  .no_msp34xx = 1,
  .tuner_type = UNSET,
  .tuner_addr = ADDR_UNSET,
 },

 /* ---- card 0x2c ---------------------------------- */
 [BTTV_BOARD_SIGMA_TVII_FM] = {
  .name  = "Sigma TVII-FM",
  .video_inputs = 2,
  /* .audio_inputs= 1, */
  .svhs  = NO_SVHS,
  .gpiomask = 3,
  .muxsel  = MUXSEL(2, 3, 1, 1),
  .gpiomux = { 1, 1, 0, 2 },
  .gpiomute = 3,
  .no_msp34xx = 1,
  .pll  = PLL_NONE,
  .tuner_type = UNSET,
  .tuner_addr = ADDR_UNSET,
 },
 [BTTV_BOARD_MATRIX_VISION2] = {
  .name  = "MATRIX-Vision MV-Delta 2",
  .video_inputs = 5,
  /* .audio_inputs= 1, */
  .svhs  = 3,
  .gpiomask = 0,
  .muxsel  = MUXSEL(2, 3, 1, 0, 0),
  .gpiomux = { 0 },
  .no_msp34xx = 1,
  .pll  = PLL_28,
  .tuner_type = TUNER_ABSENT,
  .tuner_addr = ADDR_UNSET,
 },
 [BTTV_BOARD_ZOLTRIX_GENIE] = {
  .name  = "Zoltrix Genie TV/FM",
  .video_inputs = 3,
  /* .audio_inputs= 1, */
  .svhs  = 2,
  .gpiomask = 0xbcf03f,
  .muxsel  = MUXSEL(2, 3, 1, 1),
  .gpiomux = { 0xbc803f, 0xbc903f, 0xbcb03f, 0 },
  .gpiomute = 0xbcb03f,
  .no_msp34xx = 1,
  .pll  = PLL_28,
  .tuner_type = TUNER_TEMIC_4039FR5_NTSC,
  .tuner_addr = ADDR_UNSET,
 },
 [BTTV_BOARD_TERRATVRADIO] = {
  .name  = "Terratec TV/Radio+",
  .video_inputs = 3,
  /* .audio_inputs= 1, */
  .svhs  = 2,
  .gpiomask = 0x70000,
  .muxsel  = MUXSEL(2, 3, 1, 1),
  .gpiomux = { 0x20000, 0x30000, 0x10000, 0 },
  .gpiomute = 0x40000,
  .no_msp34xx = 1,
  .pll  = PLL_35,
  .tuner_type = TUNER_PHILIPS_PAL_I,
  .tuner_addr = ADDR_UNSET,
  .has_radio = 1,
 },

 /* ---- card 0x30 ---------------------------------- */
 [BTTV_BOARD_DYNALINK] = {
  .name  = "Askey CPH03x/ Dynalink Magic TView",
  .video_inputs = 3,
  /* .audio_inputs= 1, */
  .svhs  = 2,
  .gpiomask = 15,
  .muxsel  = MUXSEL(2, 3, 1, 1),
  .gpiomux = {2,0,0,0 },
  .gpiomute = 1,
  .pll  = PLL_28,
  .tuner_type = UNSET,
  .tuner_addr = ADDR_UNSET,
 },
 [BTTV_BOARD_GVBCTV3PCI] = {
  .name  = "IODATA GV-BCTV3/PCI",
  .video_inputs = 3,
  /* .audio_inputs= 1, */
  .svhs  = 2,
  .gpiomask = 0x010f00,
  .muxsel  = MUXSEL(2, 3, 0, 0),
  .gpiomux = {0x10000, 0, 0x10000, 0 },
  .no_msp34xx = 1,
  .pll  = PLL_28,
  .tuner_type = TUNER_ALPS_TSHC6_NTSC,
  .tuner_addr = ADDR_UNSET,
  .audio_mode_gpio= gvbctv3pci_audio,
 },
 [BTTV_BOARD_PXELVWPLTVPAK] = {
  .name  = "Prolink PV-BT878P+4E / PixelView PlayTV PAK / Lenco MXTV-9578 CP",
  .video_inputs = 5,
  /* .audio_inputs= 1, */
  .svhs  = 3,
  .has_dig_in = 1,
  .gpiomask = 0xAA0000,
  .muxsel  = MUXSEL(2, 3, 1, 1, 0), /* in 4 is digital */
  /* .digital_mode= DIGITAL_MODE_CAMERA, */
  .gpiomux = { 0x20000, 0, 0x80000, 0x80000 },
  .gpiomute = 0xa8000,
  .no_msp34xx = 1,
  .pll  = PLL_28,
  .tuner_type = TUNER_PHILIPS_PAL_I,
  .tuner_addr = ADDR_UNSET,
  .has_remote = 1,
  /* GPIO wiring: (different from Rev.4C !)
GPIO17: U4.A0 (first hef4052bt)
GPIO19: U4.A1
GPIO20: U5.A1 (second hef4052bt)
GPIO21: U4.nEN
GPIO22: BT832 Reset Line
GPIO23: A5,A0, U5,nEN
Note: At i2c=0x8a is a Bt832 chip, which changes to 0x88 after being reset via GPIO22
*/

 },
 [BTTV_BOARD_EAGLE] = {
  .name           = "Eagle Wireless Capricorn2 (bt878A)",
  .video_inputs   = 4,
  /* .audio_inputs= 1, */
  .svhs           = 2,
  .gpiomask       = 7,
  .muxsel         = MUXSEL(2, 0, 1, 1),
  .gpiomux        = { 0, 1, 2, 3 },
  .gpiomute = 4,
  .pll            = PLL_28,
  .tuner_type     = UNSET /* TUNER_ALPS_TMDH2_NTSC */,
  .tuner_addr = ADDR_UNSET,
 },

 /* ---- card 0x34 ---------------------------------- */
 [BTTV_BOARD_PINNACLEPRO] = {
  /* David Härdeman <david@2gen.com> */
  .name           = "Pinnacle PCTV Studio Pro",
  .video_inputs   = 4,
  /* .audio_inputs= 1, */
  .svhs           = 3,
  .gpiomask       = 0x03000F,
  .muxsel  = MUXSEL(2, 3, 1, 1),
  .gpiomux = { 1, 0xd0001, 0, 0 },
  .gpiomute = 10,
    /* sound path (5 sources):
MUX1 (mask 0x03), Enable Pin 0x08 (0=enable, 1=disable)
0= ext. Audio IN
1= from MUX2
2= Mono TV sound from Tuner
3= not connected
MUX2 (mask 0x30000):
0,2,3= from MSP34xx
1= FM stereo Radio from Tuner */

  .pll            = PLL_28,
  .tuner_type     = UNSET,
  .tuner_addr = ADDR_UNSET,
 },
 [BTTV_BOARD_TVIEW_RDS_FM] = {
  /* Claas Langbehn <claas@bigfoot.com>,
Sven Grothklags <sven@upb.de> */

  .name  = "Typhoon TView RDS + FM Stereo / KNC1 TV Station RDS",
  .video_inputs = 4,
  /* .audio_inputs= 3, */
  .svhs  = 2,
  .gpiomask = 0x1c,
  .muxsel  = MUXSEL(2, 3, 1, 1),
  .gpiomux = { 0, 0, 0x10, 8 },
  .gpiomute = 4,
  .pll  = PLL_28,
  .tuner_type = TUNER_PHILIPS_PAL,
  .tuner_addr = ADDR_UNSET,
  .has_radio = 1,
 },
 [BTTV_BOARD_LIFETEC_9415] = {
  /* Tim Röstermundt <rosterm@uni-muenster.de>
in de.comp.os.unix.linux.hardware:
options bttv card=0 pll=1 radio=1 gpiomask=0x18e0
gpiomux =0x44c71f,0x44d71f,0,0x44d71f,0x44dfff
options tuner type=5 */

  .name  = "Lifeview FlyVideo 2000 /FlyVideo A2/ Lifetec LT 9415 TV [LR90]",
  .video_inputs = 4,
  /* .audio_inputs= 1, */
  .svhs  = 2,
  .gpiomask = 0x18e0,
  .muxsel  = MUXSEL(2, 3, 1, 1),
  .gpiomux = { 0x0000,0x0800,0x1000,0x1000 },
  .gpiomute = 0x18e0,
   /* For cards with tda9820/tda9821:
0x0000: Tuner normal stereo
0x0080: Tuner A2 SAP (second audio program = Zweikanalton)
0x0880: Tuner A2 stereo */

  .pll  = PLL_28,
  .tuner_type = UNSET,
  .tuner_addr = ADDR_UNSET,
 },
 [BTTV_BOARD_BESTBUY_EASYTV] = {
  /* Miguel Angel Alvarez <maacruz@navegalia.com>
old Easy TV BT848 version (model CPH031) */

  .name           = "Askey CPH031/ BESTBUY Easy TV",
  .video_inputs = 4,
  /* .audio_inputs= 1, */
  .svhs           = 2,
  .gpiomask       = 0xF,
  .muxsel         = MUXSEL(2, 3, 1, 0),
  .gpiomux        = { 2, 0, 0, 0 },
  .gpiomute = 10,
  .pll  = PLL_28,
  .tuner_type = TUNER_TEMIC_PAL,
  .tuner_addr = ADDR_UNSET,
 },

 /* ---- card 0x38 ---------------------------------- */
 [BTTV_BOARD_FLYVIDEO_98FM] = {
  /* Gordon Heydon <gjheydon@bigfoot.com ('98) */
  .name           = "Lifeview FlyVideo 98FM LR50",
  .video_inputs   = 4,
  /* .audio_inputs= 3, */
  .svhs           = 2,
  .gpiomask       = 0x1800,
  .muxsel         = MUXSEL(2, 3, 1, 1),
  .gpiomux        = { 0, 0x800, 0x1000, 0x1000 },
  .gpiomute = 0x1800,
  .pll            = PLL_28,
  .tuner_type     = TUNER_PHILIPS_PAL,
  .tuner_addr = ADDR_UNSET,
 },
  /* This is the ultimate cheapo capture card
* just a BT848A on a small PCB!
* Steve Hosgood <steve@equiinet.com> */

 [BTTV_BOARD_GRANDTEC] = {
  .name           = "GrandTec 'Grand Video Capture' (Bt848)",
  .video_inputs   = 2,
  /* .audio_inputs= 0, */
  .svhs           = 1,
  .gpiomask       = 0,
  .muxsel         = MUXSEL(3, 1),
  .gpiomux        = { 0 },
  .no_msp34xx     = 1,
  .pll            = PLL_35,
  .tuner_type     = TUNER_ABSENT,
  .tuner_addr = ADDR_UNSET,
 },
 [BTTV_BOARD_ASKEY_CPH060] = {
  /* Daniel Herrington <daniel.herrington@home.com> */
  .name           = "Askey CPH060/ Phoebe TV Master Only (No FM)",
  .video_inputs   = 3,
  /* .audio_inputs= 1, */
  .svhs           = 2,
  .gpiomask       = 0xe00,
  .muxsel         = MUXSEL(2, 3, 1, 1),
  .gpiomux        = { 0x400, 0x400, 0x400, 0x400 },
  .gpiomute = 0x800,
  .pll            = PLL_28,
  .tuner_type     = TUNER_TEMIC_4036FY5_NTSC,
  .tuner_addr = ADDR_UNSET,
 },
 [BTTV_BOARD_ASKEY_CPH03X] = {
  /* Matti Mottus <mottus@physic.ut.ee> */
  .name  = "Askey CPH03x TV Capturer",
  .video_inputs = 4,
  /* .audio_inputs= 1, */
  .svhs  = 2,
  .gpiomask       = 0x03000F,
  .muxsel  = MUXSEL(2, 3, 1, 0),
  .gpiomux        = { 2, 0, 0, 0 },
  .gpiomute = 1,
  .pll            = PLL_28,
  .tuner_type = TUNER_TEMIC_PAL,
  .tuner_addr = ADDR_UNSET,
  .has_remote = 1,
 },

 /* ---- card 0x3c ---------------------------------- */
 [BTTV_BOARD_MM100PCTV] = {
  /* Philip Blundell <philb@gnu.org> */
  .name           = "Modular Technology MM100PCTV",
  .video_inputs   = 2,
  /* .audio_inputs= 2, */
  .svhs  = NO_SVHS,
  .gpiomask       = 11,
  .muxsel         = MUXSEL(2, 3, 1, 1),
  .gpiomux        = { 2, 0, 0, 1 },
  .gpiomute = 8,
  .pll            = PLL_35,
  .tuner_type     = TUNER_TEMIC_PAL,
  .tuner_addr = ADDR_UNSET,
 },
 [BTTV_BOARD_GMV1] = {
  /* Adrian Cox <adrian@humboldt.co.uk */
  .name  = "AG Electronics GMV1",
  .video_inputs   = 2,
  /* .audio_inputs= 0, */
  .svhs  = 1,
  .gpiomask       = 0xF,
  .muxsel  = MUXSEL(2, 2),
  .gpiomux        = { },
  .no_msp34xx     = 1,
  .pll  = PLL_28,
  .tuner_type     = TUNER_ABSENT,
  .tuner_addr = ADDR_UNSET,
 },
 [BTTV_BOARD_BESTBUY_EASYTV2] = {
  /* Miguel Angel Alvarez <maacruz@navegalia.com>
new Easy TV BT878 version (model CPH061)
special thanks to Informatica Mieres for providing the card */

  .name           = "Askey CPH061/ BESTBUY Easy TV (bt878)",
  .video_inputs = 3,
  /* .audio_inputs= 2, */
  .svhs           = 2,
  .gpiomask       = 0xFF,
  .muxsel         = MUXSEL(2, 3, 1, 0),
  .gpiomux        = { 1, 0, 4, 4 },
  .gpiomute = 9,
  .pll  = PLL_28,
  .tuner_type = TUNER_PHILIPS_PAL,
  .tuner_addr = ADDR_UNSET,
 },
 [BTTV_BOARD_ATI_TVWONDER] = {
  /* Lukas Gebauer <geby@volny.cz> */
  .name  = "ATI TV-Wonder",
  .video_inputs = 3,
  /* .audio_inputs= 1, */
  .svhs  = 2,
  .gpiomask = 0xf03f,
  .muxsel  = MUXSEL(2, 3, 1, 0),
  .gpiomux = { 0xbffe, 0, 0xbfff, 0 },
  .gpiomute = 0xbffe,
  .pll  = PLL_28,
  .tuner_type = TUNER_TEMIC_4006FN5_MULTI_PAL,
  .tuner_addr = ADDR_UNSET,
 },

 /* ---- card 0x40 ---------------------------------- */
 [BTTV_BOARD_ATI_TVWONDERVE] = {
  /* Lukas Gebauer <geby@volny.cz> */
  .name  = "ATI TV-Wonder VE",
  .video_inputs = 2,
  /* .audio_inputs= 1, */
  .svhs  = NO_SVHS,
  .gpiomask = 1,
  .muxsel  = MUXSEL(2, 3, 0, 1),
  .gpiomux = { 0, 0, 1, 0 },
  .no_msp34xx = 1,
  .pll  = PLL_28,
  .tuner_type = TUNER_TEMIC_4006FN5_MULTI_PAL,
  .tuner_addr = ADDR_UNSET,
 },
 [BTTV_BOARD_FLYVIDEO2000] = {
  /* DeeJay <deejay@westel900.net (2000S) */
  .name           = "Lifeview FlyVideo 2000S LR90",
  .video_inputs   = 3,
  /* .audio_inputs= 3, */
  .svhs           = 2,
  .gpiomask = 0x18e0,
  .muxsel  = MUXSEL(2, 3, 0, 1),
    /* Radio changed from 1e80 to 0x800 to make
FlyVideo2000S in .hu happy (gm)*/

    /* -dk-???: set mute=0x1800 for tda9874h daughterboard */
  .gpiomux = { 0x0000,0x0800,0x1000,0x1000 },
  .gpiomute = 0x1800,
  .audio_mode_gpio= fv2000s_audio,
  .no_msp34xx = 1,
  .pll            = PLL_28,
  .tuner_type     = TUNER_PHILIPS_PAL,
  .tuner_addr = ADDR_UNSET,
 },
 [BTTV_BOARD_TERRATVALUER] = {
  .name  = "Terratec TValueRadio",
  .video_inputs = 3,
  /* .audio_inputs= 1, */
  .svhs  = 2,
  .gpiomask = 0xffff00,
  .muxsel  = MUXSEL(2, 3, 1, 1),
  .gpiomux = { 0x500, 0x500, 0x300, 0x900 },
  .gpiomute = 0x900,
  .pll  = PLL_28,
  .tuner_type = TUNER_PHILIPS_PAL,
  .tuner_addr = ADDR_UNSET,
  .has_radio = 1,
 },
 [BTTV_BOARD_GVBCTV4PCI] = {
  /* TANAKA Kei <peg00625@nifty.com> */
  .name           = "IODATA GV-BCTV4/PCI",
  .video_inputs   = 3,
  /* .audio_inputs= 1, */
  .svhs           = 2,
  .gpiomask       = 0x010f00,
  .muxsel         = MUXSEL(2, 3, 0, 0),
  .gpiomux        = {0x10000, 0, 0x10000, 0 },
  .no_msp34xx     = 1,
  .pll            = PLL_28,
  .tuner_type     = TUNER_SHARP_2U5JF5540_NTSC,
  .tuner_addr = ADDR_UNSET,
  .audio_mode_gpio= gvbctv3pci_audio,
 },

 /* ---- card 0x44 ---------------------------------- */
 [BTTV_BOARD_VOODOOTV_FM] = {
  .name           = "3Dfx VoodooTV FM (Euro)",
  /* try "insmod msp3400 simple=0" if you have
* sound problems with this card. */

  .video_inputs   = 4,
  /* .audio_inputs= 1, */
  .svhs           = NO_SVHS,
  .gpiomask       = 0x4f8a00,
  /* 0x100000: 1=MSP enabled (0=disable again)
* 0x010000: Connected to "S0" on tda9880 (0=Pal/BG, 1=NTSC) */

  .gpiomux        = {0x947fff, 0x987fff,0x947fff,0x947fff },
  .gpiomute = 0x947fff,
  /* tvtuner, radio,   external,internal, mute,  stereo
* tuner, Composite, SVid, Composite-on-Svid-adapter */

  .muxsel         = MUXSEL(2, 3, 0, 1),
  .tuner_type     = TUNER_MT2032,
  .tuner_addr = ADDR_UNSET,
  .pll  = PLL_28,
  .has_radio = 1,
 },
 [BTTV_BOARD_VOODOOTV_200] = {
  .name           = "VoodooTV 200 (USA)",
  /* try "insmod msp3400 simple=0" if you have
* sound problems with this card. */

  .video_inputs   = 4,
  /* .audio_inputs= 1, */
  .svhs           = NO_SVHS,
  .gpiomask       = 0x4f8a00,
  /* 0x100000: 1=MSP enabled (0=disable again)
* 0x010000: Connected to "S0" on tda9880 (0=Pal/BG, 1=NTSC) */

  .gpiomux        = {0x947fff, 0x987fff,0x947fff,0x947fff },
  .gpiomute = 0x947fff,
  /* tvtuner, radio,   external,internal, mute,  stereo
* tuner, Composite, SVid, Composite-on-Svid-adapter */

  .muxsel         = MUXSEL(2, 3, 0, 1),
  .tuner_type     = TUNER_MT2032,
  .tuner_addr = ADDR_UNSET,
  .pll  = PLL_28,
  .has_radio = 1,
 },
 [BTTV_BOARD_AIMMS] = {
  /* Philip Blundell <pb@nexus.co.uk> */
  .name           = "Active Imaging AIMMS",
  .video_inputs   = 1,
  /* .audio_inputs= 0, */
  .tuner_type     = TUNER_ABSENT,
  .tuner_addr = ADDR_UNSET,
  .pll            = PLL_28,
  .muxsel         = MUXSEL(2),
  .gpiomask       = 0
 },
 [BTTV_BOARD_PV_BT878P_PLUS] = {
  /* Tomasz Pyra <hellfire@sedez.iq.pl> */
  .name           = "Prolink Pixelview PV-BT878P+ (Rev.4C,8E)",
  .video_inputs   = 3,
  /* .audio_inputs= 4, */
  .svhs           = 2,
  .gpiomask       = 15,
  .muxsel         = MUXSEL(2, 3, 1, 1),
  .gpiomux        = { 0, 0, 11, 7 }, /* TV and Radio with same GPIO ! */
  .gpiomute = 13,
  .pll            = PLL_28,
  .tuner_type     = TUNER_LG_PAL_I_FM,
  .tuner_addr = ADDR_UNSET,
  .has_remote     = 1,
  /* GPIO wiring:
GPIO0: U4.A0 (hef4052bt)
GPIO1: U4.A1
GPIO2: U4.A1 (second hef4052bt)
GPIO3: U4.nEN, U5.A0, A5.nEN
GPIO8-15: vrd866b ?
*/

 },
 [BTTV_BOARD_FLYVIDEO98EZ] = {
  .name  = "Lifeview FlyVideo 98EZ (capture only) LR51",
  .video_inputs = 4,
  /* .audio_inputs= 0, */
  .svhs  = 2,
  /* AV1, AV2, SVHS, CVid adapter on SVHS */
  .muxsel  = MUXSEL(2, 3, 1, 1),
  .pll  = PLL_28,
  .no_msp34xx = 1,
  .tuner_type = TUNER_ABSENT,
  .tuner_addr = ADDR_UNSET,
 },

 /* ---- card 0x48 ---------------------------------- */
 [BTTV_BOARD_PV_BT878P_9B] = {
  /* Dariusz Kowalewski <darekk@automex.pl> */
  .name  = "Prolink Pixelview PV-BT878P+9B (PlayTV Pro rev.9B FM+NICAM)",
  .video_inputs = 4,
  /* .audio_inputs= 1, */
  .svhs  = 2,
  .gpiomask = 0x3f,
  .muxsel  = MUXSEL(2, 3, 1, 1),
  .gpiomux = { 0x01, 0x00, 0x03, 0x03 },
  .gpiomute = 0x09,
  .no_msp34xx = 1,
  .pll  = PLL_28,
  .tuner_type = TUNER_PHILIPS_PAL,
  .tuner_addr = ADDR_UNSET,
  .audio_mode_gpio= pvbt878p9b_audio, /* Note: not all cards have stereo */
  .has_radio = 1,  /* Note: not all cards have radio */
  .has_remote     = 1,
  /* GPIO wiring:
GPIO0: A0 hef4052
GPIO1: A1 hef4052
GPIO3: nEN hef4052
GPIO8-15: vrd866b
GPIO20,22,23: R30,R29,R28
*/

 },
 [BTTV_BOARD_SENSORAY311_611] = {
  /* Clay Kunz <ckunz@mail.arc.nasa.gov> */
  /* you must jumper JP5 for the 311 card (PC/104+) to work */
  .name           = "Sensoray 311/611",
  .video_inputs   = 5,
  /* .audio_inputs= 0, */
  .svhs           = 4,
  .gpiomask       = 0,
  .muxsel         = MUXSEL(2, 3, 1, 0, 0),
  .gpiomux        = { 0 },
  .tuner_type     = TUNER_ABSENT,
  .tuner_addr = ADDR_UNSET,
 },
 [BTTV_BOARD_RV605] = {
  /* Miguel Freitas <miguel@cetuc.puc-rio.br> */
  .name           = "RemoteVision MX (RV605)",
  .video_inputs   = 16,
  /* .audio_inputs= 0, */
  .svhs           = NO_SVHS,
  .gpiomask       = 0x00,
  .gpiomask2      = 0x07ff,
  .muxsel         = MUXSEL(3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3),
  .no_msp34xx     = 1,
  .tuner_type     = TUNER_ABSENT,
  .tuner_addr = ADDR_UNSET,
  .muxsel_hook    = rv605_muxsel,
 },
 [BTTV_BOARD_POWERCLR_MTV878] = {
  .name           = "Powercolor MTV878/ MTV878R/ MTV878F",
  .video_inputs   = 3,
  /* .audio_inputs= 2, */
  .svhs           = 2,
  .gpiomask       = 0x1C800F,  /* Bit0-2: Audio select, 8-12:remote control 14:remote valid 15:remote reset */
  .muxsel         = MUXSEL(2, 1, 1),
  .gpiomux        = { 0, 1, 2, 2 },
  .gpiomute = 4,
  .tuner_type     = TUNER_PHILIPS_PAL,
  .tuner_addr = ADDR_UNSET,
  .pll  = PLL_28,
  .has_radio = 1,
 },

 /* ---- card 0x4c ---------------------------------- */
 [BTTV_BOARD_WINDVR] = {
  /* Masaki Suzuki <masaki@btree.org> */
  .name           = "Canopus WinDVR PCI (COMPAQ Presario 3524JP, 5112JP)",
  .video_inputs   = 3,
  /* .audio_inputs= 1, */
  .svhs           = 2,
  .gpiomask       = 0x140007,
  .muxsel         = MUXSEL(2, 3, 1, 1),
  .gpiomux        = { 0, 1, 2, 3 },
  .gpiomute = 4,
  .tuner_type     = TUNER_PHILIPS_NTSC,
  .tuner_addr = ADDR_UNSET,
  .audio_mode_gpio= windvr_audio,
 },
 [BTTV_BOARD_GRANDTEC_MULTI] = {
  .name           = "GrandTec Multi Capture Card (Bt878)",
  .video_inputs   = 4,
  /* .audio_inputs= 0, */
  .svhs           = NO_SVHS,
  .gpiomask       = 0,
  .muxsel         = MUXSEL(2, 3, 1, 0),
  .gpiomux        = { 0 },
  .no_msp34xx     = 1,
  .pll            = PLL_28,
  .tuner_type     = TUNER_ABSENT,
  .tuner_addr = ADDR_UNSET,
 },
 [BTTV_BOARD_KWORLD] = {
  .name           = "Jetway TV/Capture JW-TV878-FBK, Kworld KW-TV878RF",
  .video_inputs   = 4,
  /* .audio_inputs= 3, */
  .svhs           = 2,
  .gpiomask       = 7,
  /* Tuner, SVid, SVHS, SVid to SVHS connector */
  .muxsel         = MUXSEL(2, 3, 1, 1),
  .gpiomux        = { 0, 0, 4, 4 },/* Yes, this tuner uses the same audio output for TV and FM radio!
* This card lacks external Audio In, so we mute it on Ext. & Int.
* The PCB can take a sbx1637/sbx1673, wiring unknown.
* This card lacks PCI subsystem ID, sigh.
* gpiomux =1: lower volume, 2+3: mute
* btwincap uses 0x80000/0x80003
*/

  .gpiomute = 4,
  .no_msp34xx     = 1,
  .pll            = PLL_28,
  .tuner_type     = TUNER_PHILIPS_PAL,
  .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:
GPIO0,1:   HEF4052 A0,A1
GPIO2:     HEF4052 nENABLE
GPIO3-7:   n.c.
GPIO8-13:  IRDC357 data0-5 (data6 n.c. ?) [chip not present on my card]
GPIO14,15: ??
GPIO16-21: n.c.
GPIO22,23: ??
??       : mtu8b56ep microcontroller for IR (GPIO wiring unknown)*/

 },
 [BTTV_BOARD_DSP_TCVIDEO] = {
  /* Arthur Tetzlaff-Deas, DSP Design Ltd <software@dspdesign.com> */
  .name           = "DSP Design TCVIDEO",
  .video_inputs   = 4,
  .svhs           = NO_SVHS,
  .muxsel         = MUXSEL(2, 3, 1, 0),
  .pll            = PLL_28,
  .tuner_type     = UNSET,
  .tuner_addr = ADDR_UNSET,
 },

  /* ---- card 0x50 ---------------------------------- */
 [BTTV_BOARD_HAUPPAUGEPVR] = {
  .name           = "Hauppauge WinTV PVR",
  .video_inputs   = 4,
  /* .audio_inputs= 1, */
  .svhs           = 2,
  .muxsel         = MUXSEL(2, 0, 1, 1),
  .pll            = PLL_28,
  .tuner_type     = UNSET,
  .tuner_addr = ADDR_UNSET,

  .gpiomask       = 7,
  .gpiomux        = {7},
 },
 [BTTV_BOARD_GVBCTV5PCI] = {
  .name           = "IODATA GV-BCTV5/PCI",
  .video_inputs   = 3,
  /* .audio_inputs= 1, */
  .svhs           = 2,
  .gpiomask       = 0x0f0f80,
  .muxsel         = MUXSEL(2, 3, 1, 0),
  .gpiomux        = {0x030000, 0x010000, 0, 0 },
  .gpiomute = 0x020000,
  .no_msp34xx     = 1,
  .pll            = PLL_28,
  .tuner_type     = TUNER_PHILIPS_NTSC_M,
  .tuner_addr = ADDR_UNSET,
  .audio_mode_gpio= gvbctv5pci_audio,
  .has_radio      = 1,
 },
 [BTTV_BOARD_OSPREY1x0] = {
  .name           = "Osprey 100/150 (878)"/* 0x1(2|3)-45C6-C1 */
  .video_inputs   = 4,                  /* id-inputs-clock */
  /* .audio_inputs= 0, */
  .svhs           = 3,
  .muxsel         = MUXSEL(3, 2, 0, 1),
  .pll            = PLL_28,
  .tuner_type     = TUNER_ABSENT,
  .tuner_addr = ADDR_UNSET,
  .no_msp34xx     = 1,
  .no_tda7432     = 1,
 },
 [BTTV_BOARD_OSPREY1x0_848] = {
  .name           = "Osprey 100/150 (848)"/* 0x04-54C0-C1 & older boards */
  .video_inputs   = 3,
  /* .audio_inputs= 0, */
  .svhs           = 2,
  .muxsel         = MUXSEL(2, 3, 1),
  .pll            = PLL_28,
  .tuner_type     = TUNER_ABSENT,
  .tuner_addr = ADDR_UNSET,
  .no_msp34xx     = 1,
  .no_tda7432     = 1,
 },

  /* ---- card 0x54 ---------------------------------- */
 [BTTV_BOARD_OSPREY101_848] = {
  .name           = "Osprey 101 (848)"/* 0x05-40C0-C1 */
  .video_inputs   = 2,
  /* .audio_inputs= 0, */
  .svhs           = 1,
  .muxsel         = MUXSEL(3, 1),
  .pll            = PLL_28,
  .tuner_type     = TUNER_ABSENT,
  .tuner_addr = ADDR_UNSET,
  .no_msp34xx     = 1,
  .no_tda7432     = 1,
 },
 [BTTV_BOARD_OSPREY1x1] = {
  .name           = "Osprey 101/151",       /* 0x1(4|5)-0004-C4 */
  .video_inputs   = 1,
  /* .audio_inputs= 0, */
  .svhs           = NO_SVHS,
  .muxsel         = MUXSEL(0),
  .pll            = PLL_28,
  .tuner_type     = TUNER_ABSENT,
  .tuner_addr = ADDR_UNSET,
  .no_msp34xx     = 1,
  .no_tda7432     = 1,
 },
 [BTTV_BOARD_OSPREY1x1_SVID] = {
  .name           = "Osprey 101/151 w/ svid",  /* 0x(16|17|20)-00C4-C1 */
  .video_inputs   = 2,
  /* .audio_inputs= 0, */
  .svhs           = 1,
  .muxsel         = MUXSEL(0, 1),
  .pll            = PLL_28,
  .tuner_type     = TUNER_ABSENT,
  .tuner_addr = ADDR_UNSET,
  .no_msp34xx     = 1,
  .no_tda7432     = 1,
 },
 [BTTV_BOARD_OSPREY2xx] = {
  .name           = "Osprey 200/201/250/251",  /* 0x1(8|9|E|F)-0004-C4 */
  .video_inputs   = 1,
  /* .audio_inputs= 1, */
  .svhs           = NO_SVHS,
  .muxsel         = MUXSEL(0),
  .pll            = PLL_28,
  .tuner_type = TUNER_ABSENT,
  .tuner_addr = ADDR_UNSET,
  .no_msp34xx     = 1,
  .no_tda7432     = 1,
 },

  /* ---- card 0x58 ---------------------------------- */
 [BTTV_BOARD_OSPREY2x0_SVID] = {
  .name           = "Osprey 200/250",   /* 0x1(A|B)-00C4-C1 */
  .video_inputs   = 2,
  /* .audio_inputs= 1, */
  .svhs           = 1,
  .muxsel         = MUXSEL(0, 1),
  .pll            = PLL_28,
  .tuner_type = TUNER_ABSENT,
  .tuner_addr = ADDR_UNSET,
  .no_msp34xx     = 1,
  .no_tda7432     = 1,
 },
 [BTTV_BOARD_OSPREY2x0] = {
  .name           = "Osprey 210/220/230",   /* 0x1(A|B)-04C0-C1 */
  .video_inputs   = 2,
  /* .audio_inputs= 1, */
  .svhs           = 1,
  .muxsel         = MUXSEL(2, 3),
  .pll            = PLL_28,
  .tuner_type = TUNER_ABSENT,
  .tuner_addr = ADDR_UNSET,
  .no_msp34xx     = 1,
  .no_tda7432     = 1,
 },
 [BTTV_BOARD_OSPREY500] = {
  .name           = "Osprey 500",   /* 500 */
  .video_inputs   = 2,
  /* .audio_inputs= 1, */
  .svhs           = 1,
  .muxsel         = MUXSEL(2, 3),
  .pll            = PLL_28,
  .tuner_type     = TUNER_ABSENT,
  .tuner_addr = ADDR_UNSET,
  .no_msp34xx     = 1,
  .no_tda7432     = 1,
 },
 [BTTV_BOARD_OSPREY540] = {
  .name           = "Osprey 540",   /* 540 */
  .video_inputs   = 4,
  /* .audio_inputs= 1, */
  .pll            = PLL_28,
  .tuner_type     = TUNER_ABSENT,
  .tuner_addr = ADDR_UNSET,
  .no_msp34xx     = 1,
  .no_tda7432     = 1,
 },

  /* ---- card 0x5C ---------------------------------- */
 [BTTV_BOARD_OSPREY2000] = {
  .name           = "Osprey 2000",  /* 2000 */
  .video_inputs   = 2,
  /* .audio_inputs= 1, */
  .svhs           = 1,
  .muxsel         = MUXSEL(2, 3),
  .pll            = PLL_28,
  .tuner_type = TUNER_ABSENT,
  .tuner_addr = ADDR_UNSET,
  .no_msp34xx     = 1,
  .no_tda7432     = 1,      /* must avoid, conflicts with the bt860 */
 },
 [BTTV_BOARD_IDS_EAGLE] = {
  /* M G Berberich <berberic@forwiss.uni-passau.de> */
  .name           = "IDS Eagle",
  .video_inputs   = 4,
  /* .audio_inputs= 0, */
  .tuner_type     = TUNER_ABSENT,
  .tuner_addr = ADDR_UNSET,
  .svhs           = NO_SVHS,
  .gpiomask       = 0,
  .muxsel         = MUXSEL(2, 2, 2, 2),
  .muxsel_hook    = eagle_muxsel,
  .no_msp34xx     = 1,
  .pll            = PLL_28,
 },
 [BTTV_BOARD_PINNACLESAT] = {
  .name           = "Pinnacle PCTV Sat",
  .video_inputs   = 2,
  /* .audio_inputs= 0, */
  .svhs           = 1,
  .tuner_type     = TUNER_ABSENT,
  .tuner_addr = ADDR_UNSET,
  .no_msp34xx     = 1,
  .no_tda7432     = 1,
  .muxsel         = MUXSEL(3, 1),
  .pll            = PLL_28,
  .no_gpioirq     = 1,
  .has_dvb        = 1,
 },
 [BTTV_BOARD_FORMAC_PROTV] = {
  .name           = "Formac ProTV II (bt878)",
  .video_inputs   = 4,
  /* .audio_inputs= 1, */
  .svhs           = 3,
  .gpiomask       = 2,
  /* TV, Comp1, Composite over SVID con, SVID */
  .muxsel         = MUXSEL(2, 3, 1, 1),
  .gpiomux        = { 2, 2, 0, 0 },
  .pll            = PLL_28,
  .has_radio      = 1,
  .tuner_type     = TUNER_PHILIPS_PAL,
  .tuner_addr = ADDR_UNSET,
 /* sound routing:
GPIO=0x00,0x01,0x03: mute (?)
0x02: both TV and radio (tuner: FM1216/I)
The card has onboard audio connectors labeled "cdrom" and "board",
not soldered here, though unknown wiring.
Card lacks: external audio in, pci subsystem id.
*/

 },

  /* ---- card 0x60 ---------------------------------- */
 [BTTV_BOARD_MACHTV] = {
  .name           = "MachTV",
  .video_inputs   = 3,
  /* .audio_inputs= 1, */
  .svhs           = NO_SVHS,
  .gpiomask       = 7,
  .muxsel         = MUXSEL(2, 3, 1, 1),
  .gpiomux        = { 0, 1, 2, 3},
  .gpiomute = 4,
  .tuner_type     = TUNER_PHILIPS_PAL,
  .tuner_addr = ADDR_UNSET,
  .pll            = PLL_28,
 },
 [BTTV_BOARD_EURESYS_PICOLO] = {
  .name           = "Euresys Picolo",
  .video_inputs   = 3,
  /* .audio_inputs= 0, */
  .svhs           = 2,
  .gpiomask       = 0,
  .no_msp34xx     = 1,
  .no_tda7432     = 1,
  .muxsel         = MUXSEL(2, 0, 1),
  .pll            = PLL_28,
  .tuner_type     = TUNER_ABSENT,
  .tuner_addr = ADDR_UNSET,
 },
 [BTTV_BOARD_PV150] = {
  /* Luc Van Hoeylandt <luc@e-magic.be> */
  .name           = "ProVideo PV150"/* 0x4f */
  .video_inputs   = 2,
  /* .audio_inputs= 0, */
  .svhs           = NO_SVHS,
  .gpiomask       = 0,
  .muxsel         = MUXSEL(2, 3),
  .gpiomux        = { 0 },
  .no_msp34xx     = 1,
  .pll            = PLL_28,
  .tuner_type     = TUNER_ABSENT,
  .tuner_addr = ADDR_UNSET,
 },
 [BTTV_BOARD_AD_TVK503] = {
  /* Hiroshi Takekawa <sian@big.or.jp> */
  /* This card lacks subsystem ID */
  .name           = "AD-TVK503"/* 0x63 */
  .video_inputs   = 4,
  /* .audio_inputs= 1, */
  .svhs           = 2,
  .gpiomask       = 0x001e8007,
  .muxsel         = MUXSEL(2, 3, 1, 0),
  /*                  Tuner, Radio, external, internal, off,  on */
  .gpiomux        = { 0x08,  0x0f,  0x0a,     0x08 },
  .gpiomute = 0x0f,
  .no_msp34xx     = 1,
  .pll            = PLL_28,
  .tuner_type     = TUNER_PHILIPS_NTSC,
  .tuner_addr = ADDR_UNSET,
  .audio_mode_gpio= adtvk503_audio,
 },

  /* ---- card 0x64 ---------------------------------- */
 [BTTV_BOARD_HERCULES_SM_TV] = {
  .name           = "Hercules Smart TV Stereo",
  .video_inputs   = 4,
  /* .audio_inputs= 1, */
  .svhs           = 2,
  .gpiomask       = 0x00,
  .muxsel         = MUXSEL(2, 3, 1, 1),
  .no_msp34xx     = 1,
  .pll            = PLL_28,
  .tuner_type     = TUNER_PHILIPS_PAL,
  .tuner_addr = ADDR_UNSET,
  /* Notes:
- card lacks subsystem ID
- stereo variant w/ daughter board with tda9874a @0xb0
- Audio Routing:
always from tda9874 independent of GPIO (?)
external line in: unknown
- Other chips: em78p156elp @ 0x96 (probably IR remote control)
hef4053 (instead 4052) for unknown function
*/

 },
 [BTTV_BOARD_PACETV] = {
  .name           = "Pace TV & Radio Card",
  .video_inputs   = 4,
  /* .audio_inputs= 1, */
  .svhs           = 2,
  /* Tuner, CVid, SVid, CVid over SVid connector */
  .muxsel         = MUXSEL(2, 3, 1, 1),
  .gpiomask       = 0,
  .no_tda7432     = 1,
  .tuner_type     = TUNER_PHILIPS_PAL_I,
  .tuner_addr = ADDR_UNSET,
  .has_radio      = 1,
  .pll            = PLL_28,
  /* Bt878, Bt832, FI1246 tuner; no pci subsystem id
only internal line out: (4pin header) RGGL
Radio must be decoded by msp3410d (not routed through)*/

  /*
.digital_mode   = DIGITAL_MODE_CAMERA,  todo!
*/

 },
 [BTTV_BOARD_IVC200] = {
  /* Chris Willing <chris@vislab.usyd.edu.au> */
  .name           = "IVC-200",
  .video_inputs   = 1,
  /* .audio_inputs= 0, */
  .tuner_type     = TUNER_ABSENT,
  .tuner_addr = ADDR_UNSET,
  .svhs           = NO_SVHS,
  .gpiomask       = 0xdf,
  .muxsel         = MUXSEL(2),
  .pll            = PLL_28,
 },
 [BTTV_BOARD_IVCE8784] = {
  .name           = "IVCE-8784",
  .video_inputs   = 1,
  /* .audio_inputs= 0, */
  .tuner_type     = TUNER_ABSENT,
  .tuner_addr     = ADDR_UNSET,
  .svhs           = NO_SVHS,
  .gpiomask       = 0xdf,
  .muxsel         = MUXSEL(2),
  .pll            = PLL_28,
 },
 [BTTV_BOARD_XGUARD] = {
  .name           = "Grand X-Guard / Trust 814PCI",
  .video_inputs   = 16,
  /* .audio_inputs= 0, */
  .svhs           = NO_SVHS,
  .tuner_type     = TUNER_ABSENT,
  .tuner_addr = ADDR_UNSET,
  .gpiomask2      = 0xff,
  .muxsel         = MUXSEL(2,2,2,2, 3,3,3,3, 1,1,1,1, 0,0,0,0),
  .muxsel_hook    = xguard_muxsel,
  .no_msp34xx     = 1,
  .no_tda7432     = 1,
  .pll            = PLL_28,
 },

  /* ---- card 0x68 ---------------------------------- */
 [BTTV_BOARD_NEBULA_DIGITV] = {
  .name           = "Nebula Electronics DigiTV",
  .video_inputs   = 1,
  .svhs           = NO_SVHS,
  .muxsel         = MUXSEL(2, 3, 1, 0),
  .no_msp34xx     = 1,
  .no_tda7432     = 1,
  .pll            = PLL_28,
  .tuner_type     = TUNER_ABSENT,
  .tuner_addr = ADDR_UNSET,
  .has_dvb        = 1,
  .has_remote = 1,
  .gpiomask = 0x1b,
  .no_gpioirq     = 1,
 },
 [BTTV_BOARD_PV143] = {
  /* Jorge Boncompte - DTI2 <jorge@dti2.net> */
  .name           = "ProVideo PV143",
  .video_inputs   = 4,
  /* .audio_inputs= 0, */
  .svhs           = NO_SVHS,
  .gpiomask       = 0,
  .muxsel         = MUXSEL(2, 3, 1, 0),
  .gpiomux        = { 0 },
  .no_msp34xx     = 1,
  .pll            = PLL_28,
  .tuner_type     = TUNER_ABSENT,
  .tuner_addr = ADDR_UNSET,
 },
 [BTTV_BOARD_VD009X1_VD011_MINIDIN] = {
  /* M.Klahr@phytec.de */
  .name           = "PHYTEC VD-009-X1 VD-011 MiniDIN (bt878)",
  .video_inputs   = 4,
  /* .audio_inputs= 0, */
  .svhs           = 3,
  .gpiomask       = 0x00,
  .muxsel         = MUXSEL(2, 3, 1, 0),
  .gpiomux        = { 0, 0, 0, 0 }, /* card has no audio */
  .pll            = PLL_28,
  .tuner_type     = TUNER_ABSENT,
  .tuner_addr = ADDR_UNSET,
 },
 [BTTV_BOARD_VD009X1_VD011_COMBI] = {
  .name           = "PHYTEC VD-009-X1 VD-011 Combi (bt878)",
  .video_inputs   = 4,
  /* .audio_inputs= 0, */
  .svhs           = 3,
  .gpiomask       = 0x00,
  .muxsel         = MUXSEL(2, 3, 1, 1),
  .gpiomux        = { 0, 0, 0, 0 }, /* card has no audio */
  .pll            = PLL_28,
  .tuner_type     = TUNER_ABSENT,
  .tuner_addr = ADDR_UNSET,
 },

  /* ---- card 0x6c ---------------------------------- */
 [BTTV_BOARD_VD009_MINIDIN] = {
  .name           = "PHYTEC VD-009 MiniDIN (bt878)",
  .video_inputs   = 10,
  /* .audio_inputs= 0, */
  .svhs           = 9,
  .gpiomask       = 0x00,
  .gpiomask2      = 0x03, /* used for external video mux */
  .muxsel         = MUXSEL(2, 2, 2, 2, 3, 3, 3, 3, 1, 0),
  .muxsel_hook = phytec_muxsel,
  .gpiomux        = { 0, 0, 0, 0 }, /* card has no audio */
  .pll            = PLL_28,
  .tuner_type     = TUNER_ABSENT,
  .tuner_addr = ADDR_UNSET,
 },
 [BTTV_BOARD_VD009_COMBI] = {
  .name           = "PHYTEC VD-009 Combi (bt878)",
  .video_inputs   = 10,
  /* .audio_inputs= 0, */
  .svhs           = 9,
  .gpiomask       = 0x00,
  .gpiomask2      = 0x03, /* used for external video mux */
  .muxsel         = MUXSEL(2, 2, 2, 2, 3, 3, 3, 3, 1, 1),
  .muxsel_hook = phytec_muxsel,
  .gpiomux        = { 0, 0, 0, 0 }, /* card has no audio */
  .pll            = PLL_28,
  .tuner_type     = TUNER_ABSENT,
  .tuner_addr = ADDR_UNSET,
 },
 [BTTV_BOARD_IVC100] = {
  .name           = "IVC-100",
  .video_inputs   = 4,
  /* .audio_inputs= 0, */
  .tuner_type     = TUNER_ABSENT,
  .tuner_addr = ADDR_UNSET,
  .svhs           = NO_SVHS,
  .gpiomask       = 0xdf,
  .muxsel         = MUXSEL(2, 3, 1, 0),
  .pll            = PLL_28,
 },
 [BTTV_BOARD_IVC120] = {
  /* IVC-120G - Alan Garfield <alan@fromorbit.com> */
  .name           = "IVC-120G",
  .video_inputs   = 16,
  /* .audio_inputs= 0, */
  .tuner_type     = TUNER_ABSENT,
  .tuner_addr = ADDR_UNSET,
  .svhs           = NO_SVHS,   /* card has no svhs */
  .no_msp34xx     = 1,
  .no_tda7432     = 1,
  .gpiomask       = 0x00,
  .muxsel         = MUXSEL(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
  .muxsel_hook    = ivc120_muxsel,
  .pll            = PLL_28,
 },

  /* ---- card 0x70 ---------------------------------- */
 [BTTV_BOARD_PC_HDTV] = {
  .name           = "pcHDTV HD-2000 TV",
  .video_inputs   = 4,
  /* .audio_inputs= 1, */
  .svhs           = 2,
  .muxsel         = MUXSEL(2, 3, 1, 0),
--> --------------------

--> maximum size reached

--> --------------------

Messung V0.5
C=88 H=99 G=93

¤ Dauer der Verarbeitung: 0.27 Sekunden  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.