PageRenderTime 80ms CodeModel.GetById 20ms app.highlight 40ms RepoModel.GetById 0ms app.codeStats 1ms

/drivers/media/video/bt8xx/bttv-cards.c

https://bitbucket.org/wisechild/galaxy-nexus
C | 4919 lines | 3616 code | 335 blank | 968 comment | 267 complexity | 2cf82df568d82f3fc00a6bea644c353e MD5 | raw file
Possible License(s): GPL-2.0, LGPL-2.0, AGPL-1.0

Large files files are truncated, but you can click here to view the full file

   1/*
   2
   3    bttv-cards.c
   4
   5    this file has configuration informations - card-specific stuff
   6    like the big tvcards array for the most part
   7
   8    Copyright (C) 1996,97,98 Ralph  Metzler (rjkm@thp.uni-koeln.de)
   9			   & Marcus Metzler (mocm@thp.uni-koeln.de)
  10    (c) 1999-2001 Gerd Knorr <kraxel@goldbach.in-berlin.de>
  11
  12    This program is free software; you can redistribute it and/or modify
  13    it under the terms of the GNU General Public License as published by
  14    the Free Software Foundation; either version 2 of the License, or
  15    (at your option) any later version.
  16
  17    This program is distributed in the hope that it will be useful,
  18    but WITHOUT ANY WARRANTY; without even the implied warranty of
  19    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  20    GNU General Public License for more details.
  21
  22    You should have received a copy of the GNU General Public License
  23    along with this program; if not, write to the Free Software
  24    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  25
  26*/
  27
  28#include <linux/delay.h>
  29#include <linux/module.h>
  30#include <linux/kmod.h>
  31#include <linux/init.h>
  32#include <linux/pci.h>
  33#include <linux/vmalloc.h>
  34#include <linux/firmware.h>
  35#include <net/checksum.h>
  36
  37#include <asm/unaligned.h>
  38#include <asm/io.h>
  39
  40#include "bttvp.h"
  41#include <media/v4l2-common.h>
  42#include <media/tvaudio.h>
  43#include "bttv-audio-hook.h"
  44
  45/* fwd decl */
  46static void boot_msp34xx(struct bttv *btv, int pin);
  47static void hauppauge_eeprom(struct bttv *btv);
  48static void avermedia_eeprom(struct bttv *btv);
  49static void osprey_eeprom(struct bttv *btv, const u8 ee[256]);
  50static void modtec_eeprom(struct bttv *btv);
  51static void init_PXC200(struct bttv *btv);
  52static void init_RTV24(struct bttv *btv);
  53
  54static void rv605_muxsel(struct bttv *btv, unsigned int input);
  55static void eagle_muxsel(struct bttv *btv, unsigned int input);
  56static void xguard_muxsel(struct bttv *btv, unsigned int input);
  57static void ivc120_muxsel(struct bttv *btv, unsigned int input);
  58static void gvc1100_muxsel(struct bttv *btv, unsigned int input);
  59
  60static void PXC200_muxsel(struct bttv *btv, unsigned int input);
  61
  62static void picolo_tetra_muxsel(struct bttv *btv, unsigned int input);
  63static void picolo_tetra_init(struct bttv *btv);
  64
  65static void tibetCS16_muxsel(struct bttv *btv, unsigned int input);
  66static void tibetCS16_init(struct bttv *btv);
  67
  68static void kodicom4400r_muxsel(struct bttv *btv, unsigned int input);
  69static void kodicom4400r_init(struct bttv *btv);
  70
  71static void sigmaSLC_muxsel(struct bttv *btv, unsigned int input);
  72static void sigmaSQ_muxsel(struct bttv *btv, unsigned int input);
  73
  74static void geovision_muxsel(struct bttv *btv, unsigned int input);
  75
  76static void phytec_muxsel(struct bttv *btv, unsigned int input);
  77
  78static void gv800s_muxsel(struct bttv *btv, unsigned int input);
  79static void gv800s_init(struct bttv *btv);
  80
  81static int terratec_active_radio_upgrade(struct bttv *btv);
  82static int tea5757_read(struct bttv *btv);
  83static int tea5757_write(struct bttv *btv, int value);
  84static void identify_by_eeprom(struct bttv *btv,
  85			       unsigned char eeprom_data[256]);
  86static int __devinit pvr_boot(struct bttv *btv);
  87
  88/* config variables */
  89static unsigned int triton1;
  90static unsigned int vsfx;
  91static unsigned int latency = UNSET;
  92int no_overlay=-1;
  93
  94static unsigned int card[BTTV_MAX]   = { [ 0 ... (BTTV_MAX-1) ] = UNSET };
  95static unsigned int pll[BTTV_MAX]    = { [ 0 ... (BTTV_MAX-1) ] = UNSET };
  96static unsigned int tuner[BTTV_MAX]  = { [ 0 ... (BTTV_MAX-1) ] = UNSET };
  97static unsigned int svhs[BTTV_MAX]   = { [ 0 ... (BTTV_MAX-1) ] = UNSET };
  98static unsigned int remote[BTTV_MAX] = { [ 0 ... (BTTV_MAX-1) ] = UNSET };
  99static unsigned int audiodev[BTTV_MAX];
 100static unsigned int saa6588[BTTV_MAX];
 101static struct bttv  *master[BTTV_MAX] = { [ 0 ... (BTTV_MAX-1) ] = NULL };
 102static unsigned int autoload = UNSET;
 103static unsigned int gpiomask = UNSET;
 104static unsigned int audioall = UNSET;
 105static unsigned int audiomux[5] = { [ 0 ... 4 ] = UNSET };
 106
 107/* insmod options */
 108module_param(triton1,    int, 0444);
 109module_param(vsfx,       int, 0444);
 110module_param(no_overlay, int, 0444);
 111module_param(latency,    int, 0444);
 112module_param(gpiomask,   int, 0444);
 113module_param(audioall,   int, 0444);
 114module_param(autoload,   int, 0444);
 115
 116module_param_array(card,     int, NULL, 0444);
 117module_param_array(pll,      int, NULL, 0444);
 118module_param_array(tuner,    int, NULL, 0444);
 119module_param_array(svhs,     int, NULL, 0444);
 120module_param_array(remote,   int, NULL, 0444);
 121module_param_array(audiodev, int, NULL, 0444);
 122module_param_array(audiomux, int, NULL, 0444);
 123
 124MODULE_PARM_DESC(triton1,"set ETBF pci config bit "
 125		 "[enable bug compatibility for triton1 + others]");
 126MODULE_PARM_DESC(vsfx,"set VSFX pci config bit "
 127		 "[yet another chipset flaw workaround]");
 128MODULE_PARM_DESC(latency,"pci latency timer");
 129MODULE_PARM_DESC(card,"specify TV/grabber card model, see CARDLIST file for a list");
 130MODULE_PARM_DESC(pll,"specify installed crystal (0=none, 28=28 MHz, 35=35 MHz)");
 131MODULE_PARM_DESC(tuner,"specify installed tuner type");
 132MODULE_PARM_DESC(autoload, "obsolete option, please do not use anymore");
 133MODULE_PARM_DESC(audiodev, "specify audio device:\n"
 134		"\t\t-1 = no audio\n"
 135		"\t\t 0 = autodetect (default)\n"
 136		"\t\t 1 = msp3400\n"
 137		"\t\t 2 = tda7432\n"
 138		"\t\t 3 = tvaudio");
 139MODULE_PARM_DESC(saa6588, "if 1, then load the saa6588 RDS module, default (0) is to use the card definition.");
 140MODULE_PARM_DESC(no_overlay,"allow override overlay default (0 disables, 1 enables)"
 141		" [some VIA/SIS chipsets are known to have problem with overlay]");
 142
 143/* ----------------------------------------------------------------------- */
 144/* list of card IDs for bt878+ cards                                       */
 145
 146static struct CARD {
 147	unsigned id;
 148	int cardnr;
 149	char *name;
 150} cards[] __devinitdata = {
 151	{ 0x13eb0070, BTTV_BOARD_HAUPPAUGE878,  "Hauppauge WinTV" },
 152	{ 0x39000070, BTTV_BOARD_HAUPPAUGE878,  "Hauppauge WinTV-D" },
 153	{ 0x45000070, BTTV_BOARD_HAUPPAUGEPVR,  "Hauppauge WinTV/PVR" },
 154	{ 0xff000070, BTTV_BOARD_OSPREY1x0,     "Osprey-100" },
 155	{ 0xff010070, BTTV_BOARD_OSPREY2x0_SVID,"Osprey-200" },
 156	{ 0xff020070, BTTV_BOARD_OSPREY500,     "Osprey-500" },
 157	{ 0xff030070, BTTV_BOARD_OSPREY2000,    "Osprey-2000" },
 158	{ 0xff040070, BTTV_BOARD_OSPREY540,     "Osprey-540" },
 159	{ 0xff070070, BTTV_BOARD_OSPREY440,     "Osprey-440" },
 160
 161	{ 0x00011002, BTTV_BOARD_ATI_TVWONDER,  "ATI TV Wonder" },
 162	{ 0x00031002, BTTV_BOARD_ATI_TVWONDERVE,"ATI TV Wonder/VE" },
 163
 164	{ 0x6606107d, BTTV_BOARD_WINFAST2000,   "Leadtek WinFast TV 2000" },
 165	{ 0x6607107d, BTTV_BOARD_WINFASTVC100,  "Leadtek WinFast VC 100" },
 166	{ 0x6609107d, BTTV_BOARD_WINFAST2000,   "Leadtek TV 2000 XP" },
 167	{ 0x263610b4, BTTV_BOARD_STB2,          "STB TV PCI FM, Gateway P/N 6000704" },
 168	{ 0x264510b4, BTTV_BOARD_STB2,          "STB TV PCI FM, Gateway P/N 6000704" },
 169	{ 0x402010fc, BTTV_BOARD_GVBCTV3PCI,    "I-O Data Co. GV-BCTV3/PCI" },
 170	{ 0x405010fc, BTTV_BOARD_GVBCTV4PCI,    "I-O Data Co. GV-BCTV4/PCI" },
 171	{ 0x407010fc, BTTV_BOARD_GVBCTV5PCI,    "I-O Data Co. GV-BCTV5/PCI" },
 172	{ 0xd01810fc, BTTV_BOARD_GVBCTV5PCI,    "I-O Data Co. GV-BCTV5/PCI" },
 173
 174	{ 0x001211bd, BTTV_BOARD_PINNACLE,      "Pinnacle PCTV" },
 175	/* some cards ship with byteswapped IDs ... */
 176	{ 0x1200bd11, BTTV_BOARD_PINNACLE,      "Pinnacle PCTV [bswap]" },
 177	{ 0xff00bd11, BTTV_BOARD_PINNACLE,      "Pinnacle PCTV [bswap]" },
 178	/* this seems to happen as well ... */
 179	{ 0xff1211bd, BTTV_BOARD_PINNACLE,      "Pinnacle PCTV" },
 180
 181	{ 0x3000121a, BTTV_BOARD_VOODOOTV_200,  "3Dfx VoodooTV 200" },
 182	{ 0x263710b4, BTTV_BOARD_VOODOOTV_FM,   "3Dfx VoodooTV FM" },
 183	{ 0x3060121a, BTTV_BOARD_STB2,	  "3Dfx VoodooTV 100/ STB OEM" },
 184
 185	{ 0x3000144f, BTTV_BOARD_MAGICTVIEW063, "(Askey Magic/others) TView99 CPH06x" },
 186	{ 0xa005144f, BTTV_BOARD_MAGICTVIEW063, "CPH06X TView99-Card" },
 187	{ 0x3002144f, BTTV_BOARD_MAGICTVIEW061, "(Askey Magic/others) TView99 CPH05x" },
 188	{ 0x3005144f, BTTV_BOARD_MAGICTVIEW061, "(Askey Magic/others) TView99 CPH061/06L (T1/LC)" },
 189	{ 0x5000144f, BTTV_BOARD_MAGICTVIEW061, "Askey CPH050" },
 190	{ 0x300014ff, BTTV_BOARD_MAGICTVIEW061, "TView 99 (CPH061)" },
 191	{ 0x300214ff, BTTV_BOARD_PHOEBE_TVMAS,  "Phoebe TV Master (CPH060)" },
 192
 193	{ 0x00011461, BTTV_BOARD_AVPHONE98,     "AVerMedia TVPhone98" },
 194	{ 0x00021461, BTTV_BOARD_AVERMEDIA98,   "AVermedia TVCapture 98" },
 195	{ 0x00031461, BTTV_BOARD_AVPHONE98,     "AVerMedia TVPhone98" },
 196	{ 0x00041461, BTTV_BOARD_AVERMEDIA98,   "AVerMedia TVCapture 98" },
 197	{ 0x03001461, BTTV_BOARD_AVERMEDIA98,   "VDOMATE TV TUNER CARD" },
 198
 199	{ 0x1117153b, BTTV_BOARD_TERRATVALUE,   "Terratec TValue (Philips PAL B/G)" },
 200	{ 0x1118153b, BTTV_BOARD_TERRATVALUE,   "Terratec TValue (Temic PAL B/G)" },
 201	{ 0x1119153b, BTTV_BOARD_TERRATVALUE,   "Terratec TValue (Philips PAL I)" },
 202	{ 0x111a153b, BTTV_BOARD_TERRATVALUE,   "Terratec TValue (Temic PAL I)" },
 203
 204	{ 0x1123153b, BTTV_BOARD_TERRATVRADIO,  "Terratec TV Radio+" },
 205	{ 0x1127153b, BTTV_BOARD_TERRATV,       "Terratec TV+ (V1.05)"    },
 206	/* clashes with FlyVideo
 207	 *{ 0x18521852, BTTV_BOARD_TERRATV,     "Terratec TV+ (V1.10)"    }, */
 208	{ 0x1134153b, BTTV_BOARD_TERRATVALUE,   "Terratec TValue (LR102)" },
 209	{ 0x1135153b, BTTV_BOARD_TERRATVALUER,  "Terratec TValue Radio" }, /* LR102 */
 210	{ 0x5018153b, BTTV_BOARD_TERRATVALUE,   "Terratec TValue" },       /* ?? */
 211	{ 0xff3b153b, BTTV_BOARD_TERRATVALUER,  "Terratec TValue Radio" }, /* ?? */
 212
 213	{ 0x400015b0, BTTV_BOARD_ZOLTRIX_GENIE, "Zoltrix Genie TV" },
 214	{ 0x400a15b0, BTTV_BOARD_ZOLTRIX_GENIE, "Zoltrix Genie TV" },
 215	{ 0x400d15b0, BTTV_BOARD_ZOLTRIX_GENIE, "Zoltrix Genie TV / Radio" },
 216	{ 0x401015b0, BTTV_BOARD_ZOLTRIX_GENIE, "Zoltrix Genie TV / Radio" },
 217	{ 0x401615b0, BTTV_BOARD_ZOLTRIX_GENIE, "Zoltrix Genie TV / Radio" },
 218
 219	{ 0x1430aa00, BTTV_BOARD_PV143,         "Provideo PV143A" },
 220	{ 0x1431aa00, BTTV_BOARD_PV143,         "Provideo PV143B" },
 221	{ 0x1432aa00, BTTV_BOARD_PV143,         "Provideo PV143C" },
 222	{ 0x1433aa00, BTTV_BOARD_PV143,         "Provideo PV143D" },
 223	{ 0x1433aa03, BTTV_BOARD_PV143,         "Security Eyes" },
 224
 225	{ 0x1460aa00, BTTV_BOARD_PV150,         "Provideo PV150A-1" },
 226	{ 0x1461aa01, BTTV_BOARD_PV150,         "Provideo PV150A-2" },
 227	{ 0x1462aa02, BTTV_BOARD_PV150,         "Provideo PV150A-3" },
 228	{ 0x1463aa03, BTTV_BOARD_PV150,         "Provideo PV150A-4" },
 229
 230	{ 0x1464aa04, BTTV_BOARD_PV150,         "Provideo PV150B-1" },
 231	{ 0x1465aa05, BTTV_BOARD_PV150,         "Provideo PV150B-2" },
 232	{ 0x1466aa06, BTTV_BOARD_PV150,         "Provideo PV150B-3" },
 233	{ 0x1467aa07, BTTV_BOARD_PV150,         "Provideo PV150B-4" },
 234
 235	{ 0xa132ff00, BTTV_BOARD_IVC100,        "IVC-100"  },
 236	{ 0xa1550000, BTTV_BOARD_IVC200,        "IVC-200"  },
 237	{ 0xa1550001, BTTV_BOARD_IVC200,        "IVC-200"  },
 238	{ 0xa1550002, BTTV_BOARD_IVC200,        "IVC-200"  },
 239	{ 0xa1550003, BTTV_BOARD_IVC200,        "IVC-200"  },
 240	{ 0xa1550100, BTTV_BOARD_IVC200,        "IVC-200G" },
 241	{ 0xa1550101, BTTV_BOARD_IVC200,        "IVC-200G" },
 242	{ 0xa1550102, BTTV_BOARD_IVC200,        "IVC-200G" },
 243	{ 0xa1550103, BTTV_BOARD_IVC200,        "IVC-200G" },
 244	{ 0xa1550800, BTTV_BOARD_IVC200,        "IVC-200"  },
 245	{ 0xa1550801, BTTV_BOARD_IVC200,        "IVC-200"  },
 246	{ 0xa1550802, BTTV_BOARD_IVC200,        "IVC-200"  },
 247	{ 0xa1550803, BTTV_BOARD_IVC200,        "IVC-200"  },
 248	{ 0xa182ff00, BTTV_BOARD_IVC120,        "IVC-120G" },
 249	{ 0xa182ff01, BTTV_BOARD_IVC120,        "IVC-120G" },
 250	{ 0xa182ff02, BTTV_BOARD_IVC120,        "IVC-120G" },
 251	{ 0xa182ff03, BTTV_BOARD_IVC120,        "IVC-120G" },
 252	{ 0xa182ff04, BTTV_BOARD_IVC120,        "IVC-120G" },
 253	{ 0xa182ff05, BTTV_BOARD_IVC120,        "IVC-120G" },
 254	{ 0xa182ff06, BTTV_BOARD_IVC120,        "IVC-120G" },
 255	{ 0xa182ff07, BTTV_BOARD_IVC120,        "IVC-120G" },
 256	{ 0xa182ff08, BTTV_BOARD_IVC120,        "IVC-120G" },
 257	{ 0xa182ff09, BTTV_BOARD_IVC120,        "IVC-120G" },
 258	{ 0xa182ff0a, BTTV_BOARD_IVC120,        "IVC-120G" },
 259	{ 0xa182ff0b, BTTV_BOARD_IVC120,        "IVC-120G" },
 260	{ 0xa182ff0c, BTTV_BOARD_IVC120,        "IVC-120G" },
 261	{ 0xa182ff0d, BTTV_BOARD_IVC120,        "IVC-120G" },
 262	{ 0xa182ff0e, BTTV_BOARD_IVC120,        "IVC-120G" },
 263	{ 0xa182ff0f, BTTV_BOARD_IVC120,        "IVC-120G" },
 264	{ 0xf0500000, BTTV_BOARD_IVCE8784,      "IVCE-8784" },
 265	{ 0xf0500001, BTTV_BOARD_IVCE8784,      "IVCE-8784" },
 266	{ 0xf0500002, BTTV_BOARD_IVCE8784,      "IVCE-8784" },
 267	{ 0xf0500003, BTTV_BOARD_IVCE8784,      "IVCE-8784" },
 268
 269	{ 0x41424344, BTTV_BOARD_GRANDTEC,      "GrandTec Multi Capture" },
 270	{ 0x01020304, BTTV_BOARD_XGUARD,        "Grandtec Grand X-Guard" },
 271
 272	{ 0x18501851, BTTV_BOARD_CHRONOS_VS2,   "FlyVideo 98 (LR50)/ Chronos Video Shuttle II" },
 273	{ 0xa0501851, BTTV_BOARD_CHRONOS_VS2,   "FlyVideo 98 (LR50)/ Chronos Video Shuttle II" },
 274	{ 0x18511851, BTTV_BOARD_FLYVIDEO98EZ,  "FlyVideo 98EZ (LR51)/ CyberMail AV" },
 275	{ 0x18521852, BTTV_BOARD_TYPHOON_TVIEW, "FlyVideo 98FM (LR50)/ Typhoon TView TV/FM Tuner" },
 276	{ 0x41a0a051, BTTV_BOARD_FLYVIDEO_98FM, "Lifeview FlyVideo 98 LR50 Rev Q" },
 277	{ 0x18501f7f, BTTV_BOARD_FLYVIDEO_98,   "Lifeview Flyvideo 98" },
 278
 279	{ 0x010115cb, BTTV_BOARD_GMV1,          "AG GMV1" },
 280	{ 0x010114c7, BTTV_BOARD_MODTEC_205,    "Modular Technology MM201/MM202/MM205/MM210/MM215 PCTV" },
 281
 282	{ 0x10b42636, BTTV_BOARD_HAUPPAUGE878,  "STB ???" },
 283	{ 0x217d6606, BTTV_BOARD_WINFAST2000,   "Leadtek WinFast TV 2000" },
 284	{ 0xfff6f6ff, BTTV_BOARD_WINFAST2000,   "Leadtek WinFast TV 2000" },
 285	{ 0x03116000, BTTV_BOARD_SENSORAY311,   "Sensoray 311" },
 286	{ 0x00790e11, BTTV_BOARD_WINDVR,        "Canopus WinDVR PCI" },
 287	{ 0xa0fca1a0, BTTV_BOARD_ZOLTRIX,       "Face to Face Tvmax" },
 288	{ 0x82b2aa6a, BTTV_BOARD_SIMUS_GVC1100, "SIMUS GVC1100" },
 289	{ 0x146caa0c, BTTV_BOARD_PV951,         "ituner spectra8" },
 290	{ 0x200a1295, BTTV_BOARD_PXC200,        "ImageNation PXC200A" },
 291
 292	{ 0x40111554, BTTV_BOARD_PV_BT878P_9B,  "Prolink Pixelview PV-BT" },
 293	{ 0x17de0a01, BTTV_BOARD_KWORLD,        "Mecer TV/FM/Video Tuner" },
 294
 295	{ 0x01051805, BTTV_BOARD_PICOLO_TETRA_CHIP, "Picolo Tetra Chip #1" },
 296	{ 0x01061805, BTTV_BOARD_PICOLO_TETRA_CHIP, "Picolo Tetra Chip #2" },
 297	{ 0x01071805, BTTV_BOARD_PICOLO_TETRA_CHIP, "Picolo Tetra Chip #3" },
 298	{ 0x01081805, BTTV_BOARD_PICOLO_TETRA_CHIP, "Picolo Tetra Chip #4" },
 299
 300	{ 0x15409511, BTTV_BOARD_ACORP_Y878F, "Acorp Y878F" },
 301
 302	{ 0x53534149, BTTV_BOARD_SSAI_SECURITY, "SSAI Security Video Interface" },
 303	{ 0x5353414a, BTTV_BOARD_SSAI_ULTRASOUND, "SSAI Ultrasound Video Interface" },
 304
 305	/* likely broken, vendor id doesn't match the other magic views ...
 306	 * { 0xa0fca04f, BTTV_BOARD_MAGICTVIEW063, "Guillemot Maxi TV Video 3" }, */
 307
 308	/* Duplicate PCI ID, reconfigure for this board during the eeprom read.
 309	* { 0x13eb0070, BTTV_BOARD_HAUPPAUGE_IMPACTVCB,  "Hauppauge ImpactVCB" }, */
 310
 311	{ 0x109e036e, BTTV_BOARD_CONCEPTRONIC_CTVFMI2,	"Conceptronic CTVFMi v2"},
 312
 313	/* DVB cards (using pci function .1 for mpeg data xfer) */
 314	{ 0x001c11bd, BTTV_BOARD_PINNACLESAT,   "Pinnacle PCTV Sat" },
 315	{ 0x01010071, BTTV_BOARD_NEBULA_DIGITV, "Nebula Electronics DigiTV" },
 316	{ 0x20007063, BTTV_BOARD_PC_HDTV,       "pcHDTV HD-2000 TV"},
 317	{ 0x002611bd, BTTV_BOARD_TWINHAN_DST,   "Pinnacle PCTV SAT CI" },
 318	{ 0x00011822, BTTV_BOARD_TWINHAN_DST,   "Twinhan VisionPlus DVB" },
 319	{ 0xfc00270f, BTTV_BOARD_TWINHAN_DST,   "ChainTech digitop DST-1000 DVB-S" },
 320	{ 0x07711461, BTTV_BOARD_AVDVBT_771,    "AVermedia AverTV DVB-T 771" },
 321	{ 0x07611461, BTTV_BOARD_AVDVBT_761,    "AverMedia AverTV DVB-T 761" },
 322	{ 0xdb1018ac, BTTV_BOARD_DVICO_DVBT_LITE,    "DViCO FusionHDTV DVB-T Lite" },
 323	{ 0xdb1118ac, BTTV_BOARD_DVICO_DVBT_LITE,    "Ultraview DVB-T Lite" },
 324	{ 0xd50018ac, BTTV_BOARD_DVICO_FUSIONHDTV_5_LITE,    "DViCO FusionHDTV 5 Lite" },
 325	{ 0x00261822, BTTV_BOARD_TWINHAN_DST,	"DNTV Live! Mini "},
 326	{ 0xd200dbc0, BTTV_BOARD_DVICO_FUSIONHDTV_2,	"DViCO FusionHDTV 2" },
 327	{ 0x763c008a, BTTV_BOARD_GEOVISION_GV600,	"GeoVision GV-600" },
 328	{ 0x18011000, BTTV_BOARD_ENLTV_FM_2,	"Encore ENL TV-FM-2" },
 329	{ 0x763d800a, BTTV_BOARD_GEOVISION_GV800S, "GeoVision GV-800(S) (master)" },
 330	{ 0x763d800b, BTTV_BOARD_GEOVISION_GV800S_SL,	"GeoVision GV-800(S) (slave)" },
 331	{ 0x763d800c, BTTV_BOARD_GEOVISION_GV800S_SL,	"GeoVision GV-800(S) (slave)" },
 332	{ 0x763d800d, BTTV_BOARD_GEOVISION_GV800S_SL,	"GeoVision GV-800(S) (slave)" },
 333
 334	{ 0x15401830, BTTV_BOARD_PV183,         "Provideo PV183-1" },
 335	{ 0x15401831, BTTV_BOARD_PV183,         "Provideo PV183-2" },
 336	{ 0x15401832, BTTV_BOARD_PV183,         "Provideo PV183-3" },
 337	{ 0x15401833, BTTV_BOARD_PV183,         "Provideo PV183-4" },
 338	{ 0x15401834, BTTV_BOARD_PV183,         "Provideo PV183-5" },
 339	{ 0x15401835, BTTV_BOARD_PV183,         "Provideo PV183-6" },
 340	{ 0x15401836, BTTV_BOARD_PV183,         "Provideo PV183-7" },
 341	{ 0x15401837, BTTV_BOARD_PV183,         "Provideo PV183-8" },
 342
 343	{ 0, -1, NULL }
 344};
 345
 346/* ----------------------------------------------------------------------- */
 347/* array with description for bt848 / bt878 tv/grabber cards               */
 348
 349struct tvcard bttv_tvcards[] = {
 350	/* ---- card 0x00 ---------------------------------- */
 351	[BTTV_BOARD_UNKNOWN] = {
 352		.name		= " *** UNKNOWN/GENERIC *** ",
 353		.video_inputs	= 4,
 354		.svhs		= 2,
 355		.muxsel		= MUXSEL(2, 3, 1, 0),
 356		.tuner_type	= UNSET,
 357		.tuner_addr	= ADDR_UNSET,
 358	},
 359	[BTTV_BOARD_MIRO] = {
 360		.name		= "MIRO PCTV",
 361		.video_inputs	= 4,
 362		/* .audio_inputs= 1, */
 363		.svhs		= 2,
 364		.gpiomask	= 15,
 365		.muxsel		= MUXSEL(2, 3, 1, 1),
 366		.gpiomux 	= { 2, 0, 0, 0 },
 367		.gpiomute 	= 10,
 368		.needs_tvaudio	= 1,
 369		.tuner_type	= UNSET,
 370		.tuner_addr	= ADDR_UNSET,
 371	},
 372	[BTTV_BOARD_HAUPPAUGE] = {
 373		.name		= "Hauppauge (bt848)",
 374		.video_inputs	= 4,
 375		/* .audio_inputs= 1, */
 376		.svhs		= 2,
 377		.gpiomask	= 7,
 378		.muxsel		= MUXSEL(2, 3, 1, 1),
 379		.gpiomux 	= { 0, 1, 2, 3 },
 380		.gpiomute 	= 4,
 381		.needs_tvaudio	= 1,
 382		.tuner_type	= UNSET,
 383		.tuner_addr	= ADDR_UNSET,
 384	},
 385	[BTTV_BOARD_STB] = {
 386		.name		= "STB, Gateway P/N 6000699 (bt848)",
 387		.video_inputs	= 3,
 388		/* .audio_inputs= 1, */
 389		.svhs		= 2,
 390		.gpiomask	= 7,
 391		.muxsel		= MUXSEL(2, 3, 1, 1),
 392		.gpiomux 	= { 4, 0, 2, 3 },
 393		.gpiomute 	= 1,
 394		.no_msp34xx	= 1,
 395		.needs_tvaudio	= 1,
 396		.tuner_type     = TUNER_PHILIPS_NTSC,
 397		.tuner_addr	= ADDR_UNSET,
 398		.pll            = PLL_28,
 399		.has_radio      = 1,
 400	},
 401
 402	/* ---- card 0x04 ---------------------------------- */
 403	[BTTV_BOARD_INTEL] = {
 404		.name		= "Intel Create and Share PCI/ Smart Video Recorder III",
 405		.video_inputs	= 4,
 406		/* .audio_inputs= 0, */
 407		.svhs		= 2,
 408		.gpiomask	= 0,
 409		.muxsel		= MUXSEL(2, 3, 1, 1),
 410		.gpiomux 	= { 0 },
 411		.needs_tvaudio	= 0,
 412		.tuner_type	= TUNER_ABSENT,
 413		.tuner_addr	= ADDR_UNSET,
 414	},
 415	[BTTV_BOARD_DIAMOND] = {
 416		.name		= "Diamond DTV2000",
 417		.video_inputs	= 4,
 418		/* .audio_inputs= 1, */
 419		.svhs		= 2,
 420		.gpiomask	= 3,
 421		.muxsel		= MUXSEL(2, 3, 1, 0),
 422		.gpiomux 	= { 0, 1, 0, 1 },
 423		.gpiomute 	= 3,
 424		.needs_tvaudio	= 1,
 425		.tuner_type	= UNSET,
 426		.tuner_addr	= ADDR_UNSET,
 427	},
 428	[BTTV_BOARD_AVERMEDIA] = {
 429		.name		= "AVerMedia TVPhone",
 430		.video_inputs	= 3,
 431		/* .audio_inputs= 1, */
 432		.svhs		= 3,
 433		.muxsel		= MUXSEL(2, 3, 1, 1),
 434		.gpiomask	= 0x0f,
 435		.gpiomux 	= { 0x0c, 0x04, 0x08, 0x04 },
 436		/*                0x04 for some cards ?? */
 437		.needs_tvaudio	= 1,
 438		.tuner_type	= UNSET,
 439		.tuner_addr	= ADDR_UNSET,
 440		.audio_mode_gpio= avermedia_tvphone_audio,
 441		.has_remote     = 1,
 442	},
 443	[BTTV_BOARD_MATRIX_VISION] = {
 444		.name		= "MATRIX-Vision MV-Delta",
 445		.video_inputs	= 5,
 446		/* .audio_inputs= 1, */
 447		.svhs		= 3,
 448		.gpiomask	= 0,
 449		.muxsel		= MUXSEL(2, 3, 1, 0, 0),
 450		.gpiomux 	= { 0 },
 451		.needs_tvaudio	= 1,
 452		.tuner_type	= TUNER_ABSENT,
 453		.tuner_addr	= ADDR_UNSET,
 454	},
 455
 456	/* ---- card 0x08 ---------------------------------- */
 457	[BTTV_BOARD_FLYVIDEO] = {
 458		.name		= "Lifeview FlyVideo II (Bt848) LR26 / MAXI TV Video PCI2 LR26",
 459		.video_inputs	= 4,
 460		/* .audio_inputs= 1, */
 461		.svhs		= 2,
 462		.gpiomask	= 0xc00,
 463		.muxsel		= MUXSEL(2, 3, 1, 1),
 464		.gpiomux 	= { 0, 0xc00, 0x800, 0x400 },
 465		.gpiomute 	= 0xc00,
 466		.needs_tvaudio	= 1,
 467		.pll		= PLL_28,
 468		.tuner_type	= UNSET,
 469		.tuner_addr	= ADDR_UNSET,
 470	},
 471	[BTTV_BOARD_TURBOTV] = {
 472		.name		= "IMS/IXmicro TurboTV",
 473		.video_inputs	= 3,
 474		/* .audio_inputs= 1, */
 475		.svhs		= 2,
 476		.gpiomask	= 3,
 477		.muxsel		= MUXSEL(2, 3, 1, 1),
 478		.gpiomux 	= { 1, 1, 2, 3 },
 479		.needs_tvaudio	= 0,
 480		.pll		= PLL_28,
 481		.tuner_type	= TUNER_TEMIC_PAL,
 482		.tuner_addr	= ADDR_UNSET,
 483	},
 484	[BTTV_BOARD_HAUPPAUGE878] = {
 485		.name		= "Hauppauge (bt878)",
 486		.video_inputs	= 4,
 487		/* .audio_inputs= 1, */
 488		.svhs		= 2,
 489		.gpiomask	= 0x0f, /* old: 7 */
 490		.muxsel		= MUXSEL(2, 0, 1, 1),
 491		.gpiomux 	= { 0, 1, 2, 3 },
 492		.gpiomute 	= 4,
 493		.needs_tvaudio	= 1,
 494		.pll		= PLL_28,
 495		.tuner_type	= UNSET,
 496		.tuner_addr	= ADDR_UNSET,
 497	},
 498	[BTTV_BOARD_MIROPRO] = {
 499		.name		= "MIRO PCTV pro",
 500		.video_inputs	= 3,
 501		/* .audio_inputs= 1, */
 502		.svhs		= 2,
 503		.gpiomask	= 0x3014f,
 504		.muxsel		= MUXSEL(2, 3, 1, 1),
 505		.gpiomux 	= { 0x20001,0x10001, 0, 0 },
 506		.gpiomute 	= 10,
 507		.needs_tvaudio	= 1,
 508		.tuner_type	= UNSET,
 509		.tuner_addr	= ADDR_UNSET,
 510	},
 511
 512	/* ---- card 0x0c ---------------------------------- */
 513	[BTTV_BOARD_ADSTECH_TV] = {
 514		.name		= "ADS Technologies Channel Surfer TV (bt848)",
 515		.video_inputs	= 3,
 516		/* .audio_inputs= 1, */
 517		.svhs		= 2,
 518		.gpiomask	= 15,
 519		.muxsel		= MUXSEL(2, 3, 1, 1),
 520		.gpiomux 	= { 13, 14, 11, 7 },
 521		.needs_tvaudio	= 1,
 522		.tuner_type	= UNSET,
 523		.tuner_addr	= ADDR_UNSET,
 524	},
 525	[BTTV_BOARD_AVERMEDIA98] = {
 526		.name		= "AVerMedia TVCapture 98",
 527		.video_inputs	= 3,
 528		/* .audio_inputs= 4, */
 529		.svhs		= 2,
 530		.gpiomask	= 15,
 531		.muxsel		= MUXSEL(2, 3, 1, 1),
 532		.gpiomux 	= { 13, 14, 11, 7 },
 533		.needs_tvaudio	= 1,
 534		.msp34xx_alt    = 1,
 535		.pll		= PLL_28,
 536		.tuner_type	= TUNER_PHILIPS_PAL,
 537		.tuner_addr	= ADDR_UNSET,
 538		.audio_mode_gpio= avermedia_tv_stereo_audio,
 539		.no_gpioirq     = 1,
 540	},
 541	[BTTV_BOARD_VHX] = {
 542		.name		= "Aimslab Video Highway Xtreme (VHX)",
 543		.video_inputs	= 3,
 544		/* .audio_inputs= 1, */
 545		.svhs		= 2,
 546		.gpiomask	= 7,
 547		.muxsel		= MUXSEL(2, 3, 1, 1),
 548		.gpiomux 	= { 0, 2, 1, 3 }, /* old: {0, 1, 2, 3, 4} */
 549		.gpiomute 	= 4,
 550		.needs_tvaudio	= 1,
 551		.pll		= PLL_28,
 552		.tuner_type	= UNSET,
 553		.tuner_addr	= ADDR_UNSET,
 554	},
 555	[BTTV_BOARD_ZOLTRIX] = {
 556		.name		= "Zoltrix TV-Max",
 557		.video_inputs	= 3,
 558		/* .audio_inputs= 1, */
 559		.svhs		= 2,
 560		.gpiomask	= 15,
 561		.muxsel		= MUXSEL(2, 3, 1, 1),
 562		.gpiomux 	= { 0, 0, 1, 0 },
 563		.gpiomute 	= 10,
 564		.needs_tvaudio	= 1,
 565		.tuner_type	= UNSET,
 566		.tuner_addr	= ADDR_UNSET,
 567	},
 568
 569	/* ---- card 0x10 ---------------------------------- */
 570	[BTTV_BOARD_PIXVIEWPLAYTV] = {
 571		.name		= "Prolink Pixelview PlayTV (bt878)",
 572		.video_inputs	= 3,
 573		/* .audio_inputs= 1, */
 574		.svhs		= 2,
 575		.gpiomask	= 0x01fe00,
 576		.muxsel		= MUXSEL(2, 3, 1, 1),
 577		/* 2003-10-20 by "Anton A. Arapov" <arapov@mail.ru> */
 578		.gpiomux        = { 0x001e00, 0, 0x018000, 0x014000 },
 579		.gpiomute 	= 0x002000,
 580		.needs_tvaudio	= 1,
 581		.pll		= PLL_28,
 582		.tuner_type	= UNSET,
 583		.tuner_addr     = ADDR_UNSET,
 584	},
 585	[BTTV_BOARD_WINVIEW_601] = {
 586		.name		= "Leadtek WinView 601",
 587		.video_inputs	= 3,
 588		/* .audio_inputs= 1, */
 589		.svhs		= 2,
 590		.gpiomask	= 0x8300f8,
 591		.muxsel		= MUXSEL(2, 3, 1, 1, 0),
 592		.gpiomux 	= { 0x4fa007,0xcfa007,0xcfa007,0xcfa007 },
 593		.gpiomute 	= 0xcfa007,
 594		.needs_tvaudio	= 1,
 595		.tuner_type	= UNSET,
 596		.tuner_addr	= ADDR_UNSET,
 597		.volume_gpio	= winview_volume,
 598		.has_radio	= 1,
 599	},
 600	[BTTV_BOARD_AVEC_INTERCAP] = {
 601		.name		= "AVEC Intercapture",
 602		.video_inputs	= 3,
 603		/* .audio_inputs= 2, */
 604		.svhs		= 2,
 605		.gpiomask	= 0,
 606		.muxsel		= MUXSEL(2, 3, 1, 1),
 607		.gpiomux 	= { 1, 0, 0, 0 },
 608		.needs_tvaudio	= 1,
 609		.tuner_type	= UNSET,
 610		.tuner_addr	= ADDR_UNSET,
 611	},
 612	[BTTV_BOARD_LIFE_FLYKIT] = {
 613		.name		= "Lifeview FlyVideo II EZ /FlyKit LR38 Bt848 (capture only)",
 614		.video_inputs	= 4,
 615		/* .audio_inputs= 1, */
 616		.svhs		= NO_SVHS,
 617		.gpiomask	= 0x8dff00,
 618		.muxsel		= MUXSEL(2, 3, 1, 1),
 619		.gpiomux 	= { 0 },
 620		.no_msp34xx	= 1,
 621		.tuner_type	= TUNER_ABSENT,
 622		.tuner_addr	= ADDR_UNSET,
 623	},
 624
 625	/* ---- card 0x14 ---------------------------------- */
 626	[BTTV_BOARD_CEI_RAFFLES] = {
 627		.name		= "CEI Raffles Card",
 628		.video_inputs	= 3,
 629		/* .audio_inputs= 3, */
 630		.svhs		= 2,
 631		.muxsel		= MUXSEL(2, 3, 1, 1),
 632		.tuner_type	= UNSET,
 633		.tuner_addr	= ADDR_UNSET,
 634	},
 635	[BTTV_BOARD_CONFERENCETV] = {
 636		.name		= "Lifeview FlyVideo 98/ Lucky Star Image World ConferenceTV LR50",
 637		.video_inputs	= 4,
 638		/* .audio_inputs= 2,  tuner, line in */
 639		.svhs		= 2,
 640		.gpiomask	= 0x1800,
 641		.muxsel		= MUXSEL(2, 3, 1, 1),
 642		.gpiomux 	= { 0, 0x800, 0x1000, 0x1000 },
 643		.gpiomute 	= 0x1800,
 644		.pll		= PLL_28,
 645		.tuner_type	= TUNER_PHILIPS_PAL_I,
 646		.tuner_addr	= ADDR_UNSET,
 647	},
 648	[BTTV_BOARD_PHOEBE_TVMAS] = {
 649		.name		= "Askey CPH050/ Phoebe Tv Master + FM",
 650		.video_inputs	= 3,
 651		/* .audio_inputs= 1, */
 652		.svhs		= 2,
 653		.gpiomask	= 0xc00,
 654		.muxsel		= MUXSEL(2, 3, 1, 1),
 655		.gpiomux 	= { 0, 1, 0x800, 0x400 },
 656		.gpiomute 	= 0xc00,
 657		.needs_tvaudio	= 1,
 658		.pll		= PLL_28,
 659		.tuner_type	= UNSET,
 660		.tuner_addr	= ADDR_UNSET,
 661	},
 662	[BTTV_BOARD_MODTEC_205] = {
 663		.name		= "Modular Technology MM201/MM202/MM205/MM210/MM215 PCTV, bt878",
 664		.video_inputs	= 3,
 665		/* .audio_inputs= 1, */
 666		.svhs		= NO_SVHS,
 667		.has_dig_in	= 1,
 668		.gpiomask	= 7,
 669		.muxsel		= MUXSEL(2, 3, 0), /* input 2 is digital */
 670		/* .digital_mode= DIGITAL_MODE_CAMERA, */
 671		.gpiomux 	= { 0, 0, 0, 0 },
 672		.no_msp34xx	= 1,
 673		.pll            = PLL_28,
 674		.tuner_type     = TUNER_ALPS_TSBB5_PAL_I,
 675		.tuner_addr	= ADDR_UNSET,
 676	},
 677
 678	/* ---- card 0x18 ---------------------------------- */
 679	[BTTV_BOARD_MAGICTVIEW061] = {
 680		.name		= "Askey CPH05X/06X (bt878) [many vendors]",
 681		.video_inputs	= 3,
 682		/* .audio_inputs= 1, */
 683		.svhs		= 2,
 684		.gpiomask	= 0xe00,
 685		.muxsel		= MUXSEL(2, 3, 1, 1),
 686		.gpiomux 	= {0x400, 0x400, 0x400, 0x400 },
 687		.gpiomute 	= 0xc00,
 688		.needs_tvaudio	= 1,
 689		.pll		= PLL_28,
 690		.tuner_type	= UNSET,
 691		.tuner_addr	= ADDR_UNSET,
 692		.has_remote     = 1,
 693	},
 694	[BTTV_BOARD_VOBIS_BOOSTAR] = {
 695		.name           = "Terratec TerraTV+ Version 1.0 (Bt848)/ Terra TValue Version 1.0/ Vobis TV-Boostar",
 696		.video_inputs	= 3,
 697		/* .audio_inputs= 1, */
 698		.svhs		= 2,
 699		.gpiomask       = 0x1f0fff,
 700		.muxsel		= MUXSEL(2, 3, 1, 1),
 701		.gpiomux        = { 0x20000, 0x30000, 0x10000, 0 },
 702		.gpiomute 	= 0x40000,
 703		.needs_tvaudio	= 0,
 704		.tuner_type	= TUNER_PHILIPS_PAL,
 705		.tuner_addr	= ADDR_UNSET,
 706		.audio_mode_gpio= terratv_audio,
 707	},
 708	[BTTV_BOARD_HAUPPAUG_WCAM] = {
 709		.name		= "Hauppauge WinCam newer (bt878)",
 710		.video_inputs	= 4,
 711		/* .audio_inputs= 1, */
 712		.svhs		= 3,
 713		.gpiomask	= 7,
 714		.muxsel		= MUXSEL(2, 0, 1, 1),
 715		.gpiomux 	= { 0, 1, 2, 3 },
 716		.gpiomute 	= 4,
 717		.needs_tvaudio	= 1,
 718		.tuner_type	= UNSET,
 719		.tuner_addr	= ADDR_UNSET,
 720	},
 721	[BTTV_BOARD_MAXI] = {
 722		.name		= "Lifeview FlyVideo 98/ MAXI TV Video PCI2 LR50",
 723		.video_inputs	= 4,
 724		/* .audio_inputs= 2, */
 725		.svhs		= 2,
 726		.gpiomask	= 0x1800,
 727		.muxsel		= MUXSEL(2, 3, 1, 1),
 728		.gpiomux 	= { 0, 0x800, 0x1000, 0x1000 },
 729		.gpiomute 	= 0x1800,
 730		.pll            = PLL_28,
 731		.tuner_type	= TUNER_PHILIPS_SECAM,
 732		.tuner_addr	= ADDR_UNSET,
 733	},
 734
 735	/* ---- card 0x1c ---------------------------------- */
 736	[BTTV_BOARD_TERRATV] = {
 737		.name           = "Terratec TerraTV+ Version 1.1 (bt878)",
 738		.video_inputs	= 3,
 739		/* .audio_inputs= 1, */
 740		.svhs		= 2,
 741		.gpiomask	= 0x1f0fff,
 742		.muxsel		= MUXSEL(2, 3, 1, 1),
 743		.gpiomux 	= { 0x20000, 0x30000, 0x10000, 0x00000 },
 744		.gpiomute 	= 0x40000,
 745		.needs_tvaudio	= 0,
 746		.tuner_type	= TUNER_PHILIPS_PAL,
 747		.tuner_addr	= ADDR_UNSET,
 748		.audio_mode_gpio= terratv_audio,
 749		/* GPIO wiring:
 750		External 20 pin connector (for Active Radio Upgrade board)
 751		gpio00: i2c-sda
 752		gpio01: i2c-scl
 753		gpio02: om5610-data
 754		gpio03: om5610-clk
 755		gpio04: om5610-wre
 756		gpio05: om5610-stereo
 757		gpio06: rds6588-davn
 758		gpio07: Pin 7 n.c.
 759		gpio08: nIOW
 760		gpio09+10: nIOR, nSEL ?? (bt878)
 761			gpio09: nIOR (bt848)
 762			gpio10: nSEL (bt848)
 763		Sound Routing:
 764		gpio16: u2-A0 (1st 4052bt)
 765		gpio17: u2-A1
 766		gpio18: u2-nEN
 767		gpio19: u4-A0 (2nd 4052)
 768		gpio20: u4-A1
 769			u4-nEN - GND
 770		Btspy:
 771			00000 : Cdrom (internal audio input)
 772			10000 : ext. Video audio input
 773			20000 : TV Mono
 774			a0000 : TV Mono/2
 775		1a0000 : TV Stereo
 776			30000 : Radio
 777			40000 : Mute
 778	*/
 779
 780	},
 781	[BTTV_BOARD_PXC200] = {
 782		/* Jannik Fritsch <jannik@techfak.uni-bielefeld.de> */
 783		.name		= "Imagenation PXC200",
 784		.video_inputs	= 5,
 785		/* .audio_inputs= 1, */
 786		.svhs		= 1, /* was: 4 */
 787		.gpiomask	= 0,
 788		.muxsel		= MUXSEL(2, 3, 1, 0, 0),
 789		.gpiomux 	= { 0 },
 790		.needs_tvaudio	= 1,
 791		.tuner_type	= TUNER_ABSENT,
 792		.tuner_addr	= ADDR_UNSET,
 793		.muxsel_hook    = PXC200_muxsel,
 794
 795	},
 796	[BTTV_BOARD_FLYVIDEO_98] = {
 797		.name		= "Lifeview FlyVideo 98 LR50",
 798		.video_inputs	= 4,
 799		/* .audio_inputs= 1, */
 800		.svhs		= 2,
 801		.gpiomask	= 0x1800,  /* 0x8dfe00 */
 802		.muxsel		= MUXSEL(2, 3, 1, 1),
 803		.gpiomux 	= { 0, 0x0800, 0x1000, 0x1000 },
 804		.gpiomute 	= 0x1800,
 805		.pll            = PLL_28,
 806		.tuner_type	= UNSET,
 807		.tuner_addr	= ADDR_UNSET,
 808	},
 809	[BTTV_BOARD_IPROTV] = {
 810		.name		= "Formac iProTV, Formac ProTV I (bt848)",
 811		.video_inputs	= 4,
 812		/* .audio_inputs= 1, */
 813		.svhs		= 3,
 814		.gpiomask	= 1,
 815		.muxsel		= MUXSEL(2, 3, 1, 1),
 816		.gpiomux 	= { 1, 0, 0, 0 },
 817		.pll            = PLL_28,
 818		.tuner_type	= TUNER_PHILIPS_PAL,
 819		.tuner_addr	= ADDR_UNSET,
 820	},
 821
 822	/* ---- card 0x20 ---------------------------------- */
 823	[BTTV_BOARD_INTEL_C_S_PCI] = {
 824		.name		= "Intel Create and Share PCI/ Smart Video Recorder III",
 825		.video_inputs	= 4,
 826		/* .audio_inputs= 0, */
 827		.svhs		= 2,
 828		.gpiomask	= 0,
 829		.muxsel		= MUXSEL(2, 3, 1, 1),
 830		.gpiomux 	= { 0 },
 831		.needs_tvaudio	= 0,
 832		.tuner_type	= TUNER_ABSENT,
 833		.tuner_addr	= ADDR_UNSET,
 834	},
 835	[BTTV_BOARD_TERRATVALUE] = {
 836		.name           = "Terratec TerraTValue Version Bt878",
 837		.video_inputs	= 3,
 838		/* .audio_inputs= 1, */
 839		.svhs		= 2,
 840		.gpiomask	= 0xffff00,
 841		.muxsel		= MUXSEL(2, 3, 1, 1),
 842		.gpiomux 	= { 0x500, 0, 0x300, 0x900 },
 843		.gpiomute 	= 0x900,
 844		.needs_tvaudio	= 1,
 845		.pll		= PLL_28,
 846		.tuner_type	= TUNER_PHILIPS_PAL,
 847		.tuner_addr	= ADDR_UNSET,
 848	},
 849	[BTTV_BOARD_WINFAST2000] = {
 850		.name		= "Leadtek WinFast 2000/ WinFast 2000 XP",
 851		.video_inputs	= 4,
 852		/* .audio_inputs= 1, */
 853		.svhs		= 2,
 854		/* TV, CVid, SVid, CVid over SVid connector */
 855		.muxsel		= MUXSEL(2, 3, 1, 1, 0),
 856		/* Alexander Varakin <avarakin@hotmail.com> [stereo version] */
 857		.gpiomask	= 0xb33000,
 858		.gpiomux 	= { 0x122000,0x1000,0x0000,0x620000 },
 859		.gpiomute 	= 0x800000,
 860		/* Audio Routing for "WinFast 2000 XP" (no tv stereo !)
 861			gpio23 -- hef4052:nEnable (0x800000)
 862			gpio12 -- hef4052:A1
 863			gpio13 -- hef4052:A0
 864		0x0000: external audio
 865		0x1000: FM
 866		0x2000: TV
 867		0x3000: n.c.
 868		Note: There exists another variant "Winfast 2000" with tv stereo !?
 869		Note: eeprom only contains FF and pci subsystem id 107d:6606
 870		*/
 871		.needs_tvaudio	= 0,
 872		.pll		= PLL_28,
 873		.has_radio	= 1,
 874		.tuner_type	= TUNER_PHILIPS_PAL, /* default for now, gpio reads BFFF06 for Pal bg+dk */
 875		.tuner_addr	= ADDR_UNSET,
 876		.audio_mode_gpio= winfast2000_audio,
 877		.has_remote     = 1,
 878	},
 879	[BTTV_BOARD_CHRONOS_VS2] = {
 880		.name		= "Lifeview FlyVideo 98 LR50 / Chronos Video Shuttle II",
 881		.video_inputs	= 4,
 882		/* .audio_inputs= 3, */
 883		.svhs		= 2,
 884		.gpiomask	= 0x1800,
 885		.muxsel		= MUXSEL(2, 3, 1, 1),
 886		.gpiomux 	= { 0, 0x800, 0x1000, 0x1000 },
 887		.gpiomute 	= 0x1800,
 888		.pll		= PLL_28,
 889		.tuner_type	= UNSET,
 890		.tuner_addr	= ADDR_UNSET,
 891	},
 892
 893	/* ---- card 0x24 ---------------------------------- */
 894	[BTTV_BOARD_TYPHOON_TVIEW] = {
 895		.name		= "Lifeview FlyVideo 98FM LR50 / Typhoon TView TV/FM Tuner",
 896		.video_inputs	= 4,
 897		/* .audio_inputs= 3, */
 898		.svhs		= 2,
 899		.gpiomask	= 0x1800,
 900		.muxsel		= MUXSEL(2, 3, 1, 1),
 901		.gpiomux 	= { 0, 0x800, 0x1000, 0x1000 },
 902		.gpiomute 	= 0x1800,
 903		.pll		= PLL_28,
 904		.tuner_type	= UNSET,
 905		.tuner_addr	= ADDR_UNSET,
 906		.has_radio	= 1,
 907	},
 908	[BTTV_BOARD_PXELVWPLTVPRO] = {
 909		.name		= "Prolink PixelView PlayTV pro",
 910		.video_inputs	= 3,
 911		/* .audio_inputs= 1, */
 912		.svhs		= 2,
 913		.gpiomask	= 0xff,
 914		.muxsel		= MUXSEL(2, 3, 1, 1),
 915		.gpiomux 	= { 0x21, 0x20, 0x24, 0x2c },
 916		.gpiomute 	= 0x29,
 917		.no_msp34xx	= 1,
 918		.pll		= PLL_28,
 919		.tuner_type	= UNSET,
 920		.tuner_addr	= ADDR_UNSET,
 921	},
 922	[BTTV_BOARD_MAGICTVIEW063] = {
 923		.name		= "Askey CPH06X TView99",
 924		.video_inputs	= 4,
 925		/* .audio_inputs= 1, */
 926		.svhs		= 2,
 927		.gpiomask	= 0x551e00,
 928		.muxsel		= MUXSEL(2, 3, 1, 0),
 929		.gpiomux 	= { 0x551400, 0x551200, 0, 0 },
 930		.gpiomute 	= 0x551c00,
 931		.needs_tvaudio	= 1,
 932		.pll		= PLL_28,
 933		.tuner_type	= TUNER_PHILIPS_PAL_I,
 934		.tuner_addr	= ADDR_UNSET,
 935		.has_remote     = 1,
 936	},
 937	[BTTV_BOARD_PINNACLE] = {
 938		.name		= "Pinnacle PCTV Studio/Rave",
 939		.video_inputs	= 3,
 940		/* .audio_inputs= 1, */
 941		.svhs		= 2,
 942		.gpiomask	= 0x03000F,
 943		.muxsel		= MUXSEL(2, 3, 1, 1),
 944		.gpiomux 	= { 2, 0xd0001, 0, 0 },
 945		.gpiomute 	= 1,
 946		.needs_tvaudio	= 0,
 947		.pll		= PLL_28,
 948		.tuner_type	= UNSET,
 949		.tuner_addr	= ADDR_UNSET,
 950	},
 951
 952	/* ---- card 0x28 ---------------------------------- */
 953	[BTTV_BOARD_STB2] = {
 954		.name		= "STB TV PCI FM, Gateway P/N 6000704 (bt878), 3Dfx VoodooTV 100",
 955		.video_inputs	= 3,
 956		/* .audio_inputs= 1, */
 957		.svhs		= 2,
 958		.gpiomask	= 7,
 959		.muxsel		= MUXSEL(2, 3, 1, 1),
 960		.gpiomux 	= { 4, 0, 2, 3 },
 961		.gpiomute 	= 1,
 962		.no_msp34xx	= 1,
 963		.needs_tvaudio	= 1,
 964		.tuner_type     = TUNER_PHILIPS_NTSC,
 965		.tuner_addr	= ADDR_UNSET,
 966		.pll            = PLL_28,
 967		.has_radio      = 1,
 968	},
 969	[BTTV_BOARD_AVPHONE98] = {
 970		.name		= "AVerMedia TVPhone 98",
 971		.video_inputs	= 3,
 972		/* .audio_inputs= 4, */
 973		.svhs		= 2,
 974		.gpiomask	= 15,
 975		.muxsel		= MUXSEL(2, 3, 1, 1),
 976		.gpiomux 	= { 13, 4, 11, 7 },
 977		.needs_tvaudio	= 1,
 978		.pll		= PLL_28,
 979		.tuner_type	= UNSET,
 980		.tuner_addr	= ADDR_UNSET,
 981		.has_radio	= 1,
 982		.audio_mode_gpio= avermedia_tvphone_audio,
 983	},
 984	[BTTV_BOARD_PV951] = {
 985		.name		= "ProVideo PV951", /* pic16c54 */
 986		.video_inputs	= 3,
 987		/* .audio_inputs= 1, */
 988		.svhs		= 2,
 989		.gpiomask	= 0,
 990		.muxsel		= MUXSEL(2, 3, 1, 1),
 991		.gpiomux 	= { 0, 0, 0, 0},
 992		.needs_tvaudio	= 1,
 993		.no_msp34xx	= 1,
 994		.pll		= PLL_28,
 995		.tuner_type	= TUNER_PHILIPS_PAL_I,
 996		.tuner_addr	= ADDR_UNSET,
 997	},
 998	[BTTV_BOARD_ONAIR_TV] = {
 999		.name		= "Little OnAir TV",
1000		.video_inputs	= 3,
1001		/* .audio_inputs= 1, */
1002		.svhs		= 2,
1003		.gpiomask	= 0xe00b,
1004		.muxsel		= MUXSEL(2, 3, 1, 1),
1005		.gpiomux 	= { 0xff9ff6, 0xff9ff6, 0xff1ff7, 0 },
1006		.gpiomute 	= 0xff3ffc,
1007		.no_msp34xx	= 1,
1008		.tuner_type	= UNSET,
1009		.tuner_addr	= ADDR_UNSET,
1010	},
1011
1012	/* ---- card 0x2c ---------------------------------- */
1013	[BTTV_BOARD_SIGMA_TVII_FM] = {
1014		.name		= "Sigma TVII-FM",
1015		.video_inputs	= 2,
1016		/* .audio_inputs= 1, */
1017		.svhs		= NO_SVHS,
1018		.gpiomask	= 3,
1019		.muxsel		= MUXSEL(2, 3, 1, 1),
1020		.gpiomux 	= { 1, 1, 0, 2 },
1021		.gpiomute 	= 3,
1022		.no_msp34xx	= 1,
1023		.pll		= PLL_NONE,
1024		.tuner_type	= UNSET,
1025		.tuner_addr	= ADDR_UNSET,
1026	},
1027	[BTTV_BOARD_MATRIX_VISION2] = {
1028		.name		= "MATRIX-Vision MV-Delta 2",
1029		.video_inputs	= 5,
1030		/* .audio_inputs= 1, */
1031		.svhs		= 3,
1032		.gpiomask	= 0,
1033		.muxsel		= MUXSEL(2, 3, 1, 0, 0),
1034		.gpiomux 	= { 0 },
1035		.no_msp34xx	= 1,
1036		.pll		= PLL_28,
1037		.tuner_type	= TUNER_ABSENT,
1038		.tuner_addr	= ADDR_UNSET,
1039	},
1040	[BTTV_BOARD_ZOLTRIX_GENIE] = {
1041		.name		= "Zoltrix Genie TV/FM",
1042		.video_inputs	= 3,
1043		/* .audio_inputs= 1, */
1044		.svhs		= 2,
1045		.gpiomask	= 0xbcf03f,
1046		.muxsel		= MUXSEL(2, 3, 1, 1),
1047		.gpiomux 	= { 0xbc803f, 0xbc903f, 0xbcb03f, 0 },
1048		.gpiomute 	= 0xbcb03f,
1049		.no_msp34xx	= 1,
1050		.pll		= PLL_28,
1051		.tuner_type	= TUNER_TEMIC_4039FR5_NTSC,
1052		.tuner_addr	= ADDR_UNSET,
1053	},
1054	[BTTV_BOARD_TERRATVRADIO] = {
1055		.name		= "Terratec TV/Radio+",
1056		.video_inputs	= 3,
1057		/* .audio_inputs= 1, */
1058		.svhs		= 2,
1059		.gpiomask	= 0x70000,
1060		.muxsel		= MUXSEL(2, 3, 1, 1),
1061		.gpiomux 	= { 0x20000, 0x30000, 0x10000, 0 },
1062		.gpiomute 	= 0x40000,
1063		.needs_tvaudio	= 1,
1064		.no_msp34xx	= 1,
1065		.pll		= PLL_35,
1066		.tuner_type	= TUNER_PHILIPS_PAL_I,
1067		.tuner_addr	= ADDR_UNSET,
1068		.has_radio	= 1,
1069	},
1070
1071	/* ---- card 0x30 ---------------------------------- */
1072	[BTTV_BOARD_DYNALINK] = {
1073		.name		= "Askey CPH03x/ Dynalink Magic TView",
1074		.video_inputs	= 3,
1075		/* .audio_inputs= 1, */
1076		.svhs		= 2,
1077		.gpiomask	= 15,
1078		.muxsel		= MUXSEL(2, 3, 1, 1),
1079		.gpiomux 	= {2,0,0,0 },
1080		.gpiomute 	= 1,
1081		.needs_tvaudio	= 1,
1082		.pll		= PLL_28,
1083		.tuner_type	= UNSET,
1084		.tuner_addr	= ADDR_UNSET,
1085	},
1086	[BTTV_BOARD_GVBCTV3PCI] = {
1087		.name		= "IODATA GV-BCTV3/PCI",
1088		.video_inputs	= 3,
1089		/* .audio_inputs= 1, */
1090		.svhs		= 2,
1091		.gpiomask	= 0x010f00,
1092		.muxsel		= MUXSEL(2, 3, 0, 0),
1093		.gpiomux 	= {0x10000, 0, 0x10000, 0 },
1094		.no_msp34xx	= 1,
1095		.pll		= PLL_28,
1096		.tuner_type	= TUNER_ALPS_TSHC6_NTSC,
1097		.tuner_addr	= ADDR_UNSET,
1098		.audio_mode_gpio= gvbctv3pci_audio,
1099	},
1100	[BTTV_BOARD_PXELVWPLTVPAK] = {
1101		.name		= "Prolink PV-BT878P+4E / PixelView PlayTV PAK / Lenco MXTV-9578 CP",
1102		.video_inputs	= 5,
1103		/* .audio_inputs= 1, */
1104		.svhs		= 3,
1105		.has_dig_in	= 1,
1106		.gpiomask	= 0xAA0000,
1107		.muxsel		= MUXSEL(2, 3, 1, 1, 0), /* in 4 is digital */
1108		/* .digital_mode= DIGITAL_MODE_CAMERA, */
1109		.gpiomux 	= { 0x20000, 0, 0x80000, 0x80000 },
1110		.gpiomute 	= 0xa8000,
1111		.no_msp34xx	= 1,
1112		.pll		= PLL_28,
1113		.tuner_type	= TUNER_PHILIPS_PAL_I,
1114		.tuner_addr	= ADDR_UNSET,
1115		.has_remote	= 1,
1116		/* GPIO wiring: (different from Rev.4C !)
1117			GPIO17: U4.A0 (first hef4052bt)
1118			GPIO19: U4.A1
1119			GPIO20: U5.A1 (second hef4052bt)
1120			GPIO21: U4.nEN
1121			GPIO22: BT832 Reset Line
1122			GPIO23: A5,A0, U5,nEN
1123		Note: At i2c=0x8a is a Bt832 chip, which changes to 0x88 after being reset via GPIO22
1124		*/
1125	},
1126	[BTTV_BOARD_EAGLE] = {
1127		.name           = "Eagle Wireless Capricorn2 (bt878A)",
1128		.video_inputs   = 4,
1129		/* .audio_inputs= 1, */
1130		.svhs           = 2,
1131		.gpiomask       = 7,
1132		.muxsel         = MUXSEL(2, 0, 1, 1),
1133		.gpiomux        = { 0, 1, 2, 3 },
1134		.gpiomute 	= 4,
1135		.pll            = PLL_28,
1136		.tuner_type     = UNSET /* TUNER_ALPS_TMDH2_NTSC */,
1137		.tuner_addr	= ADDR_UNSET,
1138	},
1139
1140	/* ---- card 0x34 ---------------------------------- */
1141	[BTTV_BOARD_PINNACLEPRO] = {
1142		/* David Härdeman <david@2gen.com> */
1143		.name           = "Pinnacle PCTV Studio Pro",
1144		.video_inputs   = 4,
1145		/* .audio_inputs= 1, */
1146		.svhs           = 3,
1147		.gpiomask       = 0x03000F,
1148		.muxsel		= MUXSEL(2, 3, 1, 1),
1149		.gpiomux 	= { 1, 0xd0001, 0, 0 },
1150		.gpiomute 	= 10,
1151				/* sound path (5 sources):
1152				MUX1 (mask 0x03), Enable Pin 0x08 (0=enable, 1=disable)
1153					0= ext. Audio IN
1154					1= from MUX2
1155					2= Mono TV sound from Tuner
1156					3= not connected
1157				MUX2 (mask 0x30000):
1158					0,2,3= from MSP34xx
1159					1= FM stereo Radio from Tuner */
1160		.needs_tvaudio  = 0,
1161		.pll            = PLL_28,
1162		.tuner_type     = UNSET,
1163		.tuner_addr	= ADDR_UNSET,
1164	},
1165	[BTTV_BOARD_TVIEW_RDS_FM] = {
1166		/* Claas Langbehn <claas@bigfoot.com>,
1167		Sven Grothklags <sven@upb.de> */
1168		.name		= "Typhoon TView RDS + FM Stereo / KNC1 TV Station RDS",
1169		.video_inputs	= 4,
1170		/* .audio_inputs= 3, */
1171		.svhs		= 2,
1172		.gpiomask	= 0x1c,
1173		.muxsel		= MUXSEL(2, 3, 1, 1),
1174		.gpiomux 	= { 0, 0, 0x10, 8 },
1175		.gpiomute 	= 4,
1176		.needs_tvaudio	= 1,
1177		.pll		= PLL_28,
1178		.tuner_type	= TUNER_PHILIPS_PAL,
1179		.tuner_addr	= ADDR_UNSET,
1180		.has_radio	= 1,
1181	},
1182	[BTTV_BOARD_LIFETEC_9415] = {
1183		/* Tim Röstermundt <rosterm@uni-muenster.de>
1184		in de.comp.os.unix.linux.hardware:
1185			options bttv card=0 pll=1 radio=1 gpiomask=0x18e0
1186			gpiomux =0x44c71f,0x44d71f,0,0x44d71f,0x44dfff
1187			options tuner type=5 */
1188		.name		= "Lifeview FlyVideo 2000 /FlyVideo A2/ Lifetec LT 9415 TV [LR90]",
1189		.video_inputs	= 4,
1190		/* .audio_inputs= 1, */
1191		.svhs		= 2,
1192		.gpiomask	= 0x18e0,
1193		.muxsel		= MUXSEL(2, 3, 1, 1),
1194		.gpiomux 	= { 0x0000,0x0800,0x1000,0x1000 },
1195		.gpiomute 	= 0x18e0,
1196			/* For cards with tda9820/tda9821:
1197				0x0000: Tuner normal stereo
1198				0x0080: Tuner A2 SAP (second audio program = Zweikanalton)
1199				0x0880: Tuner A2 stereo */
1200		.pll		= PLL_28,
1201		.tuner_type	= UNSET,
1202		.tuner_addr	= ADDR_UNSET,
1203	},
1204	[BTTV_BOARD_BESTBUY_EASYTV] = {
1205		/* Miguel Angel Alvarez <maacruz@navegalia.com>
1206		old Easy TV BT848 version (model CPH031) */
1207		.name           = "Askey CPH031/ BESTBUY Easy TV",
1208		.video_inputs	= 4,
1209		/* .audio_inputs= 1, */
1210		.svhs           = 2,
1211		.gpiomask       = 0xF,
1212		.muxsel         = MUXSEL(2, 3, 1, 0),
1213		.gpiomux        = { 2, 0, 0, 0 },
1214		.gpiomute 	= 10,
1215		.needs_tvaudio  = 0,
1216		.pll		= PLL_28,
1217		.tuner_type	= TUNER_TEMIC_PAL,
1218		.tuner_addr	= ADDR_UNSET,
1219	},
1220
1221	/* ---- card 0x38 ---------------------------------- */
1222	[BTTV_BOARD_FLYVIDEO_98FM] = {
1223		/* Gordon Heydon <gjheydon@bigfoot.com ('98) */
1224		.name           = "Lifeview FlyVideo 98FM LR50",
1225		.video_inputs   = 4,
1226		/* .audio_inputs= 3, */
1227		.svhs           = 2,
1228		.gpiomask       = 0x1800,
1229		.muxsel         = MUXSEL(2, 3, 1, 1),
1230		.gpiomux        = { 0, 0x800, 0x1000, 0x1000 },
1231		.gpiomute 	= 0x1800,
1232		.pll            = PLL_28,
1233		.tuner_type     = TUNER_PHILIPS_PAL,
1234		.tuner_addr	= ADDR_UNSET,
1235	},
1236		/* This is the ultimate cheapo capture card
1237		* just a BT848A on a small PCB!
1238		* Steve Hosgood <steve@equiinet.com> */
1239	[BTTV_BOARD_GRANDTEC] = {
1240		.name           = "GrandTec 'Grand Video Capture' (Bt848)",
1241		.video_inputs   = 2,
1242		/* .audio_inputs= 0, */
1243		.svhs           = 1,
1244		.gpiomask       = 0,
1245		.muxsel         = MUXSEL(3, 1),
1246		.gpiomux        = { 0 },
1247		.needs_tvaudio  = 0,
1248		.no_msp34xx     = 1,
1249		.pll            = PLL_35,
1250		.tuner_type     = TUNER_ABSENT,
1251		.tuner_addr	= ADDR_UNSET,
1252	},
1253	[BTTV_BOARD_ASKEY_CPH060] = {
1254		/* Daniel Herrington <daniel.herrington@home.com> */
1255		.name           = "Askey CPH060/ Phoebe TV Master Only (No FM)",
1256		.video_inputs   = 3,
1257		/* .audio_inputs= 1, */
1258		.svhs           = 2,
1259		.gpiomask       = 0xe00,
1260		.muxsel         = MUXSEL(2, 3, 1, 1),
1261		.gpiomux        = { 0x400, 0x400, 0x400, 0x400 },
1262		.gpiomute 	= 0x800,
1263		.needs_tvaudio  = 1,
1264		.pll            = PLL_28,
1265		.tuner_type     = TUNER_TEMIC_4036FY5_NTSC,
1266		.tuner_addr	= ADDR_UNSET,
1267	},
1268	[BTTV_BOARD_ASKEY_CPH03X] = {
1269		/* Matti Mottus <mottus@physic.ut.ee> */
1270		.name		= "Askey CPH03x TV Capturer",
1271		.video_inputs	= 4,
1272		/* .audio_inputs= 1, */
1273		.svhs		= 2,
1274		.gpiomask       = 0x03000F,
1275		.muxsel		= MUXSEL(2, 3, 1, 0),
1276		.gpiomux        = { 2, 0, 0, 0 },
1277		.gpiomute 	= 1,
1278		.pll            = PLL_28,
1279		.tuner_type	= TUNER_TEMIC_PAL,
1280		.tuner_addr	= ADDR_UNSET,
1281		.has_remote	= 1,
1282	},
1283
1284	/* ---- card 0x3c ---------------------------------- */
1285	[BTTV_BOARD_MM100PCTV] = {
1286		/* Philip Blundell <philb@gnu.org> */
1287		.name           = "Modular Technology MM100PCTV",
1288		.video_inputs   = 2,
1289		/* .audio_inputs= 2, */
1290		.svhs		= NO_SVHS,
1291		.gpiomask       = 11,
1292		.muxsel         = MUXSEL(2, 3, 1, 1),
1293		.gpiomux        = { 2, 0, 0, 1 },
1294		.gpiomute 	= 8,
1295		.pll            = PLL_35,
1296		.tuner_type     = TUNER_TEMIC_PAL,
1297		.tuner_addr	= ADDR_UNSET,
1298	},
1299	[BTTV_BOARD_GMV1] = {
1300		/* Adrian Cox <adrian@humboldt.co.uk */
1301		.name		= "AG Electronics GMV1",
1302		.video_inputs   = 2,
1303		/* .audio_inputs= 0, */
1304		.svhs		= 1,
1305		.gpiomask       = 0xF,
1306		.muxsel		= MUXSEL(2, 2),
1307		.gpiomux        = { },
1308		.no_msp34xx     = 1,
1309		.needs_tvaudio  = 0,
1310		.pll		= PLL_28,
1311		.tuner_type     = TUNER_ABSENT,
1312		.tuner_addr	= ADDR_UNSET,
1313	},
1314	[BTTV_BOARD_BESTBUY_EASYTV2] = {
1315		/* Miguel Angel Alvarez <maacruz@navegalia.com>
1316		new Easy TV BT878 version (model CPH061)
1317		special thanks to Informatica Mieres for providing the card */
1318		.name           = "Askey CPH061/ BESTBUY Easy TV (bt878)",
1319		.video_inputs	= 3,
1320		/* .audio_inputs= 2, */
1321		.svhs           = 2,
1322		.gpiomask       = 0xFF,
1323		.muxsel         = MUXSEL(2, 3, 1, 0),
1324		.gpiomux        = { 1, 0, 4, 4 },
1325		.gpiomute 	= 9,
1326		.needs_tvaudio  = 0,
1327		.pll		= PLL_28,
1328		.tuner_type	= TUNER_PHILIPS_PAL,
1329		.tuner_addr	= ADDR_UNSET,
1330	},
1331	[BTTV_BOARD_ATI_TVWONDER] = {
1332		/* Lukas Gebauer <geby@volny.cz> */
1333		.name		= "ATI TV-Wonder",
1334		.video_inputs	= 3,
1335		/* .audio_inputs= 1, */
1336		.svhs		= 2,
1337		.gpiomask	= 0xf03f,
1338		.muxsel		= MUXSEL(2, 3, 1, 0),
1339		.gpiomux 	= { 0xbffe, 0, 0xbfff, 0 },
1340		.gpiomute 	= 0xbffe,
1341		.pll		= PLL_28,
1342		.tuner_type	= TUNER_TEMIC_4006FN5_MULTI_PAL,
1343		.tuner_addr	= ADDR_UNSET,
1344	},
1345
1346	/* ---- card 0x40 ---------------------------------- */
1347	[BTTV_BOARD_ATI_TVWONDERVE] = {
1348		/* Lukas Gebauer <geby@volny.cz> */
1349		.name		= "ATI TV-Wonder VE",
1350		.video_inputs	= 2,
1351		/* .audio_inputs= 1, */
1352		.svhs		= NO_SVHS,
1353		.gpiomask	= 1,
1354		.muxsel		= MUXSEL(2, 3, 0, 1),
1355		.gpiomux 	= { 0, 0, 1, 0 },
1356		.no_msp34xx	= 1,
1357		.pll		= PLL_28,
1358		.tuner_type	= TUNER_TEMIC_4006FN5_MULTI_PAL,
1359		.tuner_addr	= ADDR_UNSET,
1360	},
1361	[BTTV_BOARD_FLYVIDEO2000] = {
1362		/* DeeJay <deejay@westel900.net (2000S) */
1363		.name           = "Lifeview FlyVideo 2000S LR90",
1364		.video_inputs   = 3,
1365		/* .audio_inputs= 3, */
1366		.svhs           = 2,
1367		.gpiomask	= 0x18e0,
1368		.muxsel		= MUXSEL(2, 3, 0, 1),
1369				/* Radio changed from 1e80 to 0x800 to make
1370				FlyVideo2000S in .hu happy (gm)*/
1371				/* -dk-???: set mute=0x1800 for tda9874h daughterboard */
1372		.gpiomux 	= { 0x0000,0x0800,0x1000,0x1000 },
1373		.gpiomute 	= 0x1800,
1374		.audio_mode_gpio= fv2000s_audio,
1375		.no_msp34xx	= 1,
1376		.needs_tvaudio  = 1,
1377		.pll            = PLL_28,
1378		.tuner_type     = TUNER_PHILIPS_PAL,
1379		.tuner_addr	= ADDR_UNSET,
1380	},
1381	[BTTV_BOARD_TERRATVALUER] = {
1382		.name		= "Terratec TValueRadio",
1383		.video_inputs	= 3,
1384		/* .audio_inputs= 1, */
1385		.svhs		= 2,
1386		.gpiomask	= 0xffff00,
1387		.muxsel		= MUXSEL(2, 3, 1, 1),
1388		.gpiomux 	= { 0x500, 0x500, 0x300, 0x900 },
1389		.gpiomute 	= 0x900,
1390		.needs_tvaudio	= 1,
1391		.pll		= PLL_28,
1392		.tuner_type	= TUNER_PHILIPS_PAL,
1393		.tuner_addr	= ADDR_UNSET,
1394		.has_radio	= 1,
1395	},
1396	[BTTV_BOARD_GVBCTV4PCI] = {
1397		/* TANAKA Kei <peg00625@nifty.com> */
1398		.name           = "IODATA GV-BCTV4/PCI",
1399		.video_inputs   = 3,
1400		/* .audio_inputs= 1, */
1401		.svhs           = 2,
1402		.gpiomask       = 0x010f00,
1403		.muxsel         = MUXSEL(2, 3, 0, 0),
1404		.gpiomux        = {0x10000, 0, 0x10000, 0 },
1405		.no_msp34xx     = 1,
1406		.pll            = PLL_28,
1407		.tuner_type     = TUNER_SHARP_2U5JF5540_NTSC,
1408		.tuner_addr	= ADDR_UNSET,
1409		.audio_mode_gpio= gvbctv3pci_audio,
1410	},
1411
1412	/* ---- card 0x44 ---------------------------------- */
1413	[BTTV_BOARD_VOODOOTV_FM] = {
1414		.name           = "3Dfx VoodooTV FM (Euro)",
1415		/* try "insmod msp3400 simple=0" if you have
1416		* sound problems with this card. */
1417		.video_inputs   = 4,
1418		/* .audio_inputs= 1, */
1419		.svhs           = NO_SVHS,
1420		.gpiomask       = 0x4f8a00,
1421		/* 0x100000: 1=MSP enabled (0=disable again)
1422		* 0x010000: Connected to "S0" on tda9880 (0=Pal/BG, 1=NTSC) */
1423		.gpiomux        = {0x947fff, 0x987fff,0x947fff,0x947fff },
1424		.gpiomute 	= 0x947fff,
1425		/* tvtuner, radio,   external,internal, mute,  stereo
1426		* tuner, Composit, SVid, Composit-on-Svid-adapter */
1427		.muxsel         = MUXSEL(2, 3, 0, 1),
1428		.tuner_type     = TUNER_MT2032,
1429		.tuner_addr	= ADDR_UNSET,
1430		.pll		= PLL_28,
1431		.has_radio	= 1,
1432	},
1433	[BTTV_BOARD_VOODOOTV_200] = {
1434		.name           = "VoodooTV 200 (USA)",
1435		/* try "insmod msp3400 simple=0" if you have
1436		* sound problems with this card. */
1437		.video_inputs   = 4,
1438		/* .audio_inputs= 1, */
1439		.svhs           = NO_SVHS,
1440		.gpiomask       = 0x4f8a00,
1441		/* 0x100000: 1=MSP enabled (0=disable again)
1442		* 0x010000: Connected to "S0" on tda9880 (0=Pal/BG, 1=NTSC) */
1443		.gpiomux        = {0x947fff, 0x987fff,0x947fff,0x947fff },
1444		.gpiomute 	= 0x947fff,
1445		/* tvtuner, radio,   external,internal, mute,  stereo
1446		* tuner, Composit, SVid, Composit-on-Svid-adapter */
1447		.muxsel         = MUXSEL(2, 3, 0, 1),
1448		.tuner_type     = TUNER_MT2032,
1449		.tuner_addr	= ADDR_UNSET,
1450		.pll		= PLL_28,
1451		.has_radio	= 1,
1452	},
1453	[BTTV_BOARD_AIMMS] = {
1454		/* Philip Blundell <pb@nexus.co.uk> */
1455		.name           = "Active Imaging AIMMS",
1456		.video_inputs   = 1,
1457		/* .audio_inputs= 0, */
1458		.tuner_type     = TUNER_ABSENT,
1459		.tuner_addr	= ADDR_UNSET,
1460		.pll            = PLL_28,
1461		.muxsel         = MUXSEL(2),
1462		.gpiomask       = 0
1463	},
1464	[BTTV_BOARD_PV_BT878P_PLUS] = {
1465		/* Tomasz Pyra <hellfire@sedez.iq.pl> */
1466		.name           = "Prolink Pixelview PV-BT878P+ (Rev.4C,8E)",
1467		.video_inputs   = 3,
1468		/* .audio_inputs= 4, */
1469		.svhs           = 2,
1470		.gpiomask       = 15,
1471		.muxsel         = MUXSEL(2, 3, 1, 1),
1472		.gpiomux        = { 0, 0, 11, 7 }, /* TV and Radio with same GPIO ! */
1473		.gpiomute 	= 13,
1474		.needs_tvaudio  = 1,
1475		.pll            = PLL_28,
1476		.tuner_type     = TUNER_LG_PAL_I_FM,
1477		.tuner_addr	= ADDR_UNSET,
1478		.has_remote     = 1,
1479		/* GPIO wiring:
1480			GPIO0: U4.A0 (hef4052bt)
1481			GPIO1: U4.A1
1482			GPIO2: U4.A1 (second hef4052bt)
1483			GPIO3: U4.nEN, U5.A0, A5.nEN
1484			GPIO8-15: vrd866b ?
1485		*/
1486	},
1487	[BTTV_BOARD_FLYVIDEO98EZ] = {
1488		.name		= "Lifeview FlyVideo 98EZ (capture only) LR51",
1489		.video_inputs	= 4,
1490		/* .audio_inputs= 0, */
1491		.svhs		= 2,
1492		/* AV1, AV2, SVHS, CVid adapter on SVHS */
1493		.muxsel		= MUXSEL(2, 3, 1, 1),
1494		.pll		= PLL_28,
1495		.no_msp34xx	= 1,
1496		.tuner_type	= TUNER_ABSENT,
1497		.tuner_addr	= ADDR_UNSET,
1498	},
1499
1500	/* ---- card 0x48 ---------------------------------- */
1501	[BTTV_BOARD_PV_BT878P_9B] = {
1502		/* Dariusz Kowalewski <darekk@automex.pl> */
1503		.name		= "Prolink Pixelview PV-BT878P+9B (PlayTV Pro rev.9B FM+NICAM)",
1504		.video_inputs	= 4,
1505		/* .audio_inputs= 1, */
1506		.svhs		= 2,
1507		.gpiomask	= 0x3f,
1508		.muxsel		= MUXSEL(2, 3, 1, 1),
1509		.gpiomux 	= { 0x01, 0x00, 0x03, 0x03 },
1510		.gpiomute 	= 0x09,
1511		.needs_tvaudio  = 1,
1512		.no_msp34xx	= 1,
1513		.pll		= PLL_28,
1514		.tuner_type	= TUNER_PHILIPS_PAL,
1515		.tuner_addr	= ADDR_UNSET,
1516		.audio_mode_gpio= pvbt878p9b_audio, /* Note: not all cards have stereo */
1517		.has_radio	= 1,  /* Note: not all cards have radio */
1518		.has_remote     = 1,
1519		/* GPIO wiring:
1520			GPIO0: A0 hef4052
1521			GPIO1: A1 hef4052
1522			GPIO3: nEN hef4052
1523			GPIO8-15: vrd866b
1524			GPIO20,22,23: R30,R29,R28
1525		*/
1526	},
1527	[BTTV_BOARD_SENSORAY311] = {
1528		/* Clay Kunz <ckunz@mail.arc.nasa.gov> */
1529		/* you must jumper JP5 for the card to work */
1530		.name           = "Sensoray 311",
1531		.video_inputs   = 5,
1532		/* .audio_inputs= 0, */
1533		.svhs           = 4,
1534		.gpiomask       = 0,
1535		.muxsel         = MUXSEL(2, 3, 1, 0, 0),
1536		.gpiomux        = { 0 },
1537		.needs_tvaudio  = 0,
1538		.tuner_type     = TUNER_ABSENT,
1539		.tuner_addr	= ADDR_UNSET,
1540	},
1541	[BTTV_BOARD_RV605] = {
1542		/* Miguel Freitas <miguel@cetuc.puc-rio.br> */
1543		.name           = "RemoteVision MX (RV605)",
1544		.video_inputs   = 16,
1545		/* .audio_inputs= 0, */
1546		.svhs           = NO_SVHS,
1547		.gpiomask       = 0x00,
1548		.gpiomask2      = 0x07ff,
1549		.muxsel         = MUXSEL(3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3),
1550		.no_msp34xx     = 1,
1551		.tuner_type     = TUNER_ABSENT,
1552		.tuner_addr	= ADDR_UNSET,
1553		.muxsel_hook 

Large files files are truncated, but you can click here to view the full file