11da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
21da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
31da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    bttv-cards.c
41da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
51da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    this file has configuration informations - card-specific stuff
61da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    like the big tvcards array for the most part
71da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
81da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    Copyright (C) 1996,97,98 Ralph  Metzler (rjkm@thp.uni-koeln.de)
94ac97914c6c35f6bf132071c718e034d0846b9f5Mauro Carvalho Chehab			   & Marcus Metzler (mocm@thp.uni-koeln.de)
101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    (c) 1999-2001 Gerd Knorr <kraxel@goldbach.in-berlin.de>
111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    This program is free software; you can redistribute it and/or modify
131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    it under the terms of the GNU General Public License as published by
141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    the Free Software Foundation; either version 2 of the License, or
151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    (at your option) any later version.
161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    This program is distributed in the hope that it will be useful,
181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    but WITHOUT ANY WARRANTY; without even the implied warranty of
191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    GNU General Public License for more details.
211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    You should have received a copy of the GNU General Public License
231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    along with this program; if not, write to the Free Software
241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds*/
271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
288af443e581ab57a6a38f595eb40be3514ea55195Joe Perches#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
298af443e581ab57a6a38f595eb40be3514ea55195Joe Perches
301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/delay.h>
311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/module.h>
321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/kmod.h>
331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/init.h>
341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/pci.h>
351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/vmalloc.h>
361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/firmware.h>
37cf784d554fdb94f21671830135dba56b507126cfTrent Piepho#include <net/checksum.h>
381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
39c1c36f3128c89aa96f01cbf6d40b0cd77a8bc45eAl Viro#include <asm/unaligned.h>
401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <asm/io.h>
411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include "bttvp.h"
435e453dc757385ec892a818e4e3b5de027987ced9Michael Krufky#include <media/v4l2-common.h>
448bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil#include <media/tvaudio.h>
45c2806d03c090a1bf9c8c94bbecb92242b57469f3Mauro Carvalho Chehab#include "bttv-audio-hook.h"
461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* fwd decl */
481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic void boot_msp34xx(struct bttv *btv, int pin);
491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic void hauppauge_eeprom(struct bttv *btv);
501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic void avermedia_eeprom(struct bttv *btv);
51cf784d554fdb94f21671830135dba56b507126cfTrent Piephostatic void osprey_eeprom(struct bttv *btv, const u8 ee[256]);
521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic void modtec_eeprom(struct bttv *btv);
531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic void init_PXC200(struct bttv *btv);
5493b43f13b5bfeac09ef5743edf39eeeee3f4eeaePeter Skipworthstatic void init_RTV24(struct bttv *btv);
55c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöcknerstatic void init_PCI8604PW(struct bttv *btv);
561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic void rv605_muxsel(struct bttv *btv, unsigned int input);
581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic void eagle_muxsel(struct bttv *btv, unsigned int input);
591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic void xguard_muxsel(struct bttv *btv, unsigned int input);
601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic void ivc120_muxsel(struct bttv *btv, unsigned int input);
611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic void gvc1100_muxsel(struct bttv *btv, unsigned int input);
621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic void PXC200_muxsel(struct bttv *btv, unsigned int input);
641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic void picolo_tetra_muxsel(struct bttv *btv, unsigned int input);
661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic void picolo_tetra_init(struct bttv *btv);
671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic void tibetCS16_muxsel(struct bttv *btv, unsigned int input);
691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic void tibetCS16_init(struct bttv *btv);
701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic void kodicom4400r_muxsel(struct bttv *btv, unsigned int input);
721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic void kodicom4400r_init(struct bttv *btv);
731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic void sigmaSLC_muxsel(struct bttv *btv, unsigned int input);
751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic void sigmaSQ_muxsel(struct bttv *btv, unsigned int input);
761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
7797275ac514c7f1131f42f8b06e073b144c744e78Ernesto Hernández-Novichstatic void geovision_muxsel(struct bttv *btv, unsigned int input);
7897275ac514c7f1131f42f8b06e073b144c744e78Ernesto Hernández-Novich
7915f8eeb2a86b969d82bfca5d54f1fb30c35cf243Trent Piephostatic void phytec_muxsel(struct bttv *btv, unsigned int input);
8015f8eeb2a86b969d82bfca5d54f1fb30c35cf243Trent Piepho
810c5db425519487d06a5a14eb369268f4a2b32677Bruno Christostatic void gv800s_muxsel(struct bttv *btv, unsigned int input);
820c5db425519487d06a5a14eb369268f4a2b32677Bruno Christostatic void gv800s_init(struct bttv *btv);
830c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo
84de2843b663fd621e9a6c75fed4da73e8c9a1b094Peter De Schrijverstatic void td3116_muxsel(struct bttv *btv, unsigned int input);
85de2843b663fd621e9a6c75fed4da73e8c9a1b094Peter De Schrijver
861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic int terratec_active_radio_upgrade(struct bttv *btv);
871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic int tea5757_read(struct bttv *btv);
881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic int tea5757_write(struct bttv *btv, int value);
891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic void identify_by_eeprom(struct bttv *btv,
901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			       unsigned char eeprom_data[256]);
914c62e9764ab403d42f9b8871b1241fe7812f19d4Greg Kroah-Hartmanstatic int pvr_boot(struct bttv *btv);
921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* config variables */
94a5ed425cd30c0c2abac4039ae11b38520aa130c2Mauro Carvalho Chehabstatic unsigned int triton1;
95a5ed425cd30c0c2abac4039ae11b38520aa130c2Mauro Carvalho Chehabstatic unsigned int vsfx;
961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic unsigned int latency = UNSET;
974dcef52400fa6b9eb2de589300ae0151a1c65b3bMauro Carvalho Chehabint no_overlay=-1;
981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic unsigned int card[BTTV_MAX]   = { [ 0 ... (BTTV_MAX-1) ] = UNSET };
1001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic unsigned int pll[BTTV_MAX]    = { [ 0 ... (BTTV_MAX-1) ] = UNSET };
1011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic unsigned int tuner[BTTV_MAX]  = { [ 0 ... (BTTV_MAX-1) ] = UNSET };
1021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic unsigned int svhs[BTTV_MAX]   = { [ 0 ... (BTTV_MAX-1) ] = UNSET };
1031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic unsigned int remote[BTTV_MAX] = { [ 0 ... (BTTV_MAX-1) ] = UNSET };
104859f0277a6c3ba59b0a5a1eb183f8f6ce661a95dHans Verkuilstatic unsigned int audiodev[BTTV_MAX];
105859f0277a6c3ba59b0a5a1eb183f8f6ce661a95dHans Verkuilstatic unsigned int saa6588[BTTV_MAX];
1061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic struct bttv  *master[BTTV_MAX] = { [ 0 ... (BTTV_MAX-1) ] = NULL };
107859f0277a6c3ba59b0a5a1eb183f8f6ce661a95dHans Verkuilstatic unsigned int autoload = UNSET;
1081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic unsigned int gpiomask = UNSET;
1091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic unsigned int audioall = UNSET;
1101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic unsigned int audiomux[5] = { [ 0 ... 4 ] = UNSET };
1111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* insmod options */
1131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsmodule_param(triton1,    int, 0444);
1141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsmodule_param(vsfx,       int, 0444);
1151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsmodule_param(no_overlay, int, 0444);
1161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsmodule_param(latency,    int, 0444);
1171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsmodule_param(gpiomask,   int, 0444);
1181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsmodule_param(audioall,   int, 0444);
1191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsmodule_param(autoload,   int, 0444);
1201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsmodule_param_array(card,     int, NULL, 0444);
1221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsmodule_param_array(pll,      int, NULL, 0444);
1231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsmodule_param_array(tuner,    int, NULL, 0444);
1241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsmodule_param_array(svhs,     int, NULL, 0444);
1251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsmodule_param_array(remote,   int, NULL, 0444);
126859f0277a6c3ba59b0a5a1eb183f8f6ce661a95dHans Verkuilmodule_param_array(audiodev, int, NULL, 0444);
1271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsmodule_param_array(audiomux, int, NULL, 0444);
1281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsMODULE_PARM_DESC(triton1,"set ETBF pci config bit "
1301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		 "[enable bug compatibility for triton1 + others]");
1311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsMODULE_PARM_DESC(vsfx,"set VSFX pci config bit "
1321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		 "[yet another chipset flaw workaround]");
1331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsMODULE_PARM_DESC(latency,"pci latency timer");
1341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsMODULE_PARM_DESC(card,"specify TV/grabber card model, see CARDLIST file for a list");
135ec7c15b58f34015df182e909fbb80674211daf54Ondrej ZaryMODULE_PARM_DESC(pll, "specify installed crystal (0=none, 28=28 MHz, 35=35 MHz, 14=14 MHz)");
1361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsMODULE_PARM_DESC(tuner,"specify installed tuner type");
137859f0277a6c3ba59b0a5a1eb183f8f6ce661a95dHans VerkuilMODULE_PARM_DESC(autoload, "obsolete option, please do not use anymore");
138859f0277a6c3ba59b0a5a1eb183f8f6ce661a95dHans VerkuilMODULE_PARM_DESC(audiodev, "specify audio device:\n"
139859f0277a6c3ba59b0a5a1eb183f8f6ce661a95dHans Verkuil		"\t\t-1 = no audio\n"
140859f0277a6c3ba59b0a5a1eb183f8f6ce661a95dHans Verkuil		"\t\t 0 = autodetect (default)\n"
141859f0277a6c3ba59b0a5a1eb183f8f6ce661a95dHans Verkuil		"\t\t 1 = msp3400\n"
142859f0277a6c3ba59b0a5a1eb183f8f6ce661a95dHans Verkuil		"\t\t 2 = tda7432\n"
143859f0277a6c3ba59b0a5a1eb183f8f6ce661a95dHans Verkuil		"\t\t 3 = tvaudio");
144859f0277a6c3ba59b0a5a1eb183f8f6ce661a95dHans VerkuilMODULE_PARM_DESC(saa6588, "if 1, then load the saa6588 RDS module, default (0) is to use the card definition.");
1459050d942b7dc55cd8e6d9b2c1ce260656021f0fbMauro Carvalho ChehabMODULE_PARM_DESC(no_overlay,"allow override overlay default (0 disables, 1 enables)"
1469050d942b7dc55cd8e6d9b2c1ce260656021f0fbMauro Carvalho Chehab		" [some VIA/SIS chipsets are known to have problem with overlay]");
1471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* ----------------------------------------------------------------------- */
1491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* list of card IDs for bt878+ cards                                       */
1501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic struct CARD {
1521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned id;
1531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int cardnr;
1541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	char *name;
1554c62e9764ab403d42f9b8871b1241fe7812f19d4Greg Kroah-Hartman} cards[] = {
1565a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0x13eb0070, BTTV_BOARD_HAUPPAUGE878,  "Hauppauge WinTV" },
1575a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0x39000070, BTTV_BOARD_HAUPPAUGE878,  "Hauppauge WinTV-D" },
1585a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0x45000070, BTTV_BOARD_HAUPPAUGEPVR,  "Hauppauge WinTV/PVR" },
1595a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0xff000070, BTTV_BOARD_OSPREY1x0,     "Osprey-100" },
1605a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0xff010070, BTTV_BOARD_OSPREY2x0_SVID,"Osprey-200" },
1615a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0xff020070, BTTV_BOARD_OSPREY500,     "Osprey-500" },
1625a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0xff030070, BTTV_BOARD_OSPREY2000,    "Osprey-2000" },
1635a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0xff040070, BTTV_BOARD_OSPREY540,     "Osprey-540" },
164f718e6e7a2c402195f3d2944605ef4b01e8e3347Kenth Andersson	{ 0xff070070, BTTV_BOARD_OSPREY440,     "Osprey-440" },
1655a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab
1665a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0x00011002, BTTV_BOARD_ATI_TVWONDER,  "ATI TV Wonder" },
1675a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0x00031002, BTTV_BOARD_ATI_TVWONDERVE,"ATI TV Wonder/VE" },
1685a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab
1695a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0x6606107d, BTTV_BOARD_WINFAST2000,   "Leadtek WinFast TV 2000" },
1705a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0x6607107d, BTTV_BOARD_WINFASTVC100,  "Leadtek WinFast VC 100" },
1715a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0x6609107d, BTTV_BOARD_WINFAST2000,   "Leadtek TV 2000 XP" },
1725a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0x263610b4, BTTV_BOARD_STB2,          "STB TV PCI FM, Gateway P/N 6000704" },
1735a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0x264510b4, BTTV_BOARD_STB2,          "STB TV PCI FM, Gateway P/N 6000704" },
1744ac97914c6c35f6bf132071c718e034d0846b9f5Mauro Carvalho Chehab	{ 0x402010fc, BTTV_BOARD_GVBCTV3PCI,    "I-O Data Co. GV-BCTV3/PCI" },
1755a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0x405010fc, BTTV_BOARD_GVBCTV4PCI,    "I-O Data Co. GV-BCTV4/PCI" },
1765a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0x407010fc, BTTV_BOARD_GVBCTV5PCI,    "I-O Data Co. GV-BCTV5/PCI" },
1774ac97914c6c35f6bf132071c718e034d0846b9f5Mauro Carvalho Chehab	{ 0xd01810fc, BTTV_BOARD_GVBCTV5PCI,    "I-O Data Co. GV-BCTV5/PCI" },
1785a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab
1795a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0x001211bd, BTTV_BOARD_PINNACLE,      "Pinnacle PCTV" },
18024a70fdce872d70171b1f49dcd1a7c3a4e8396b2Mauro Carvalho Chehab	/* some cards ship with byteswapped IDs ... */
1815a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0x1200bd11, BTTV_BOARD_PINNACLE,      "Pinnacle PCTV [bswap]" },
1825a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0xff00bd11, BTTV_BOARD_PINNACLE,      "Pinnacle PCTV [bswap]" },
18324a70fdce872d70171b1f49dcd1a7c3a4e8396b2Mauro Carvalho Chehab	/* this seems to happen as well ... */
1845a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0xff1211bd, BTTV_BOARD_PINNACLE,      "Pinnacle PCTV" },
1855a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab
186434b25263a236c9dd980617d69863ba0eff8c744Wade Berrier	{ 0x3000121a, BTTV_BOARD_VOODOOTV_200,  "3Dfx VoodooTV 200" },
187434b25263a236c9dd980617d69863ba0eff8c744Wade Berrier	{ 0x263710b4, BTTV_BOARD_VOODOOTV_FM,   "3Dfx VoodooTV FM" },
1885a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0x3060121a, BTTV_BOARD_STB2,	  "3Dfx VoodooTV 100/ STB OEM" },
1895a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab
1905a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0x3000144f, BTTV_BOARD_MAGICTVIEW063, "(Askey Magic/others) TView99 CPH06x" },
1915a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0xa005144f, BTTV_BOARD_MAGICTVIEW063, "CPH06X TView99-Card" },
1925a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0x3002144f, BTTV_BOARD_MAGICTVIEW061, "(Askey Magic/others) TView99 CPH05x" },
1935a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0x3005144f, BTTV_BOARD_MAGICTVIEW061, "(Askey Magic/others) TView99 CPH061/06L (T1/LC)" },
1945a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0x5000144f, BTTV_BOARD_MAGICTVIEW061, "Askey CPH050" },
1955a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0x300014ff, BTTV_BOARD_MAGICTVIEW061, "TView 99 (CPH061)" },
1965a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0x300214ff, BTTV_BOARD_PHOEBE_TVMAS,  "Phoebe TV Master (CPH060)" },
1975a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab
1985a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0x00011461, BTTV_BOARD_AVPHONE98,     "AVerMedia TVPhone98" },
1995a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0x00021461, BTTV_BOARD_AVERMEDIA98,   "AVermedia TVCapture 98" },
2005a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0x00031461, BTTV_BOARD_AVPHONE98,     "AVerMedia TVPhone98" },
2015a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0x00041461, BTTV_BOARD_AVERMEDIA98,   "AVerMedia TVCapture 98" },
2025a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0x03001461, BTTV_BOARD_AVERMEDIA98,   "VDOMATE TV TUNER CARD" },
2035a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab
2045a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0x1117153b, BTTV_BOARD_TERRATVALUE,   "Terratec TValue (Philips PAL B/G)" },
2055a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0x1118153b, BTTV_BOARD_TERRATVALUE,   "Terratec TValue (Temic PAL B/G)" },
2065a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0x1119153b, BTTV_BOARD_TERRATVALUE,   "Terratec TValue (Philips PAL I)" },
2075a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0x111a153b, BTTV_BOARD_TERRATVALUE,   "Terratec TValue (Temic PAL I)" },
2085a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab
2095a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0x1123153b, BTTV_BOARD_TERRATVRADIO,  "Terratec TV Radio+" },
2105a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0x1127153b, BTTV_BOARD_TERRATV,       "Terratec TV+ (V1.05)"    },
21124a70fdce872d70171b1f49dcd1a7c3a4e8396b2Mauro Carvalho Chehab	/* clashes with FlyVideo
2125a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	 *{ 0x18521852, BTTV_BOARD_TERRATV,     "Terratec TV+ (V1.10)"    }, */
2135a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0x1134153b, BTTV_BOARD_TERRATVALUE,   "Terratec TValue (LR102)" },
2145a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0x1135153b, BTTV_BOARD_TERRATVALUER,  "Terratec TValue Radio" }, /* LR102 */
2155a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0x5018153b, BTTV_BOARD_TERRATVALUE,   "Terratec TValue" },       /* ?? */
2165a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0xff3b153b, BTTV_BOARD_TERRATVALUER,  "Terratec TValue Radio" }, /* ?? */
2175a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab
2185a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0x400015b0, BTTV_BOARD_ZOLTRIX_GENIE, "Zoltrix Genie TV" },
2195a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0x400a15b0, BTTV_BOARD_ZOLTRIX_GENIE, "Zoltrix Genie TV" },
2205a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0x400d15b0, BTTV_BOARD_ZOLTRIX_GENIE, "Zoltrix Genie TV / Radio" },
2215a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0x401015b0, BTTV_BOARD_ZOLTRIX_GENIE, "Zoltrix Genie TV / Radio" },
2225a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0x401615b0, BTTV_BOARD_ZOLTRIX_GENIE, "Zoltrix Genie TV / Radio" },
2235a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab
2245a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0x1430aa00, BTTV_BOARD_PV143,         "Provideo PV143A" },
2255a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0x1431aa00, BTTV_BOARD_PV143,         "Provideo PV143B" },
2265a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0x1432aa00, BTTV_BOARD_PV143,         "Provideo PV143C" },
2275a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0x1433aa00, BTTV_BOARD_PV143,         "Provideo PV143D" },
2285a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0x1433aa03, BTTV_BOARD_PV143,         "Security Eyes" },
2295a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab
2305a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0x1460aa00, BTTV_BOARD_PV150,         "Provideo PV150A-1" },
2315a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0x1461aa01, BTTV_BOARD_PV150,         "Provideo PV150A-2" },
2325a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0x1462aa02, BTTV_BOARD_PV150,         "Provideo PV150A-3" },
2335a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0x1463aa03, BTTV_BOARD_PV150,         "Provideo PV150A-4" },
2345a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab
2355a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0x1464aa04, BTTV_BOARD_PV150,         "Provideo PV150B-1" },
2365a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0x1465aa05, BTTV_BOARD_PV150,         "Provideo PV150B-2" },
2375a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0x1466aa06, BTTV_BOARD_PV150,         "Provideo PV150B-3" },
2385a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0x1467aa07, BTTV_BOARD_PV150,         "Provideo PV150B-4" },
2395a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab
2405a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0xa132ff00, BTTV_BOARD_IVC100,        "IVC-100"  },
2415a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0xa1550000, BTTV_BOARD_IVC200,        "IVC-200"  },
2425a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0xa1550001, BTTV_BOARD_IVC200,        "IVC-200"  },
2435a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0xa1550002, BTTV_BOARD_IVC200,        "IVC-200"  },
2445a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0xa1550003, BTTV_BOARD_IVC200,        "IVC-200"  },
2455a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0xa1550100, BTTV_BOARD_IVC200,        "IVC-200G" },
2465a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0xa1550101, BTTV_BOARD_IVC200,        "IVC-200G" },
2475a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0xa1550102, BTTV_BOARD_IVC200,        "IVC-200G" },
2485a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0xa1550103, BTTV_BOARD_IVC200,        "IVC-200G" },
249b7589ac4aea794920528c28fe36288908462ddecKirill Smelkov	{ 0xa1550800, BTTV_BOARD_IVC200,        "IVC-200"  },
250b7589ac4aea794920528c28fe36288908462ddecKirill Smelkov	{ 0xa1550801, BTTV_BOARD_IVC200,        "IVC-200"  },
251b7589ac4aea794920528c28fe36288908462ddecKirill Smelkov	{ 0xa1550802, BTTV_BOARD_IVC200,        "IVC-200"  },
252b7589ac4aea794920528c28fe36288908462ddecKirill Smelkov	{ 0xa1550803, BTTV_BOARD_IVC200,        "IVC-200"  },
2535a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0xa182ff00, BTTV_BOARD_IVC120,        "IVC-120G" },
2545a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0xa182ff01, BTTV_BOARD_IVC120,        "IVC-120G" },
2555a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0xa182ff02, BTTV_BOARD_IVC120,        "IVC-120G" },
2565a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0xa182ff03, BTTV_BOARD_IVC120,        "IVC-120G" },
2575a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0xa182ff04, BTTV_BOARD_IVC120,        "IVC-120G" },
2585a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0xa182ff05, BTTV_BOARD_IVC120,        "IVC-120G" },
2595a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0xa182ff06, BTTV_BOARD_IVC120,        "IVC-120G" },
2605a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0xa182ff07, BTTV_BOARD_IVC120,        "IVC-120G" },
2615a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0xa182ff08, BTTV_BOARD_IVC120,        "IVC-120G" },
2625a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0xa182ff09, BTTV_BOARD_IVC120,        "IVC-120G" },
2635a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0xa182ff0a, BTTV_BOARD_IVC120,        "IVC-120G" },
2645a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0xa182ff0b, BTTV_BOARD_IVC120,        "IVC-120G" },
2655a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0xa182ff0c, BTTV_BOARD_IVC120,        "IVC-120G" },
2665a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0xa182ff0d, BTTV_BOARD_IVC120,        "IVC-120G" },
2675a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0xa182ff0e, BTTV_BOARD_IVC120,        "IVC-120G" },
2685a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0xa182ff0f, BTTV_BOARD_IVC120,        "IVC-120G" },
269ade0815c16734e8c25dbac9faf5b5d63bcccd533Douglas Kosovic	{ 0xf0500000, BTTV_BOARD_IVCE8784,      "IVCE-8784" },
270ade0815c16734e8c25dbac9faf5b5d63bcccd533Douglas Kosovic	{ 0xf0500001, BTTV_BOARD_IVCE8784,      "IVCE-8784" },
271ade0815c16734e8c25dbac9faf5b5d63bcccd533Douglas Kosovic	{ 0xf0500002, BTTV_BOARD_IVCE8784,      "IVCE-8784" },
272ade0815c16734e8c25dbac9faf5b5d63bcccd533Douglas Kosovic	{ 0xf0500003, BTTV_BOARD_IVCE8784,      "IVCE-8784" },
2735a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab
2745a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0x41424344, BTTV_BOARD_GRANDTEC,      "GrandTec Multi Capture" },
2755a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0x01020304, BTTV_BOARD_XGUARD,        "Grandtec Grand X-Guard" },
2765a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab
2775a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0x18501851, BTTV_BOARD_CHRONOS_VS2,   "FlyVideo 98 (LR50)/ Chronos Video Shuttle II" },
2785a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0xa0501851, BTTV_BOARD_CHRONOS_VS2,   "FlyVideo 98 (LR50)/ Chronos Video Shuttle II" },
2795a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0x18511851, BTTV_BOARD_FLYVIDEO98EZ,  "FlyVideo 98EZ (LR51)/ CyberMail AV" },
2805a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0x18521852, BTTV_BOARD_TYPHOON_TVIEW, "FlyVideo 98FM (LR50)/ Typhoon TView TV/FM Tuner" },
2815a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0x41a0a051, BTTV_BOARD_FLYVIDEO_98FM, "Lifeview FlyVideo 98 LR50 Rev Q" },
2825a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0x18501f7f, BTTV_BOARD_FLYVIDEO_98,   "Lifeview Flyvideo 98" },
2835a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab
284657de3cd32285831a56f9f96deb85c64205c42fcTrent Piepho	{ 0x010115cb, BTTV_BOARD_GMV1,          "AG GMV1" },
2855a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0x010114c7, BTTV_BOARD_MODTEC_205,    "Modular Technology MM201/MM202/MM205/MM210/MM215 PCTV" },
2865a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab
2875a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0x10b42636, BTTV_BOARD_HAUPPAUGE878,  "STB ???" },
2885a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0x217d6606, BTTV_BOARD_WINFAST2000,   "Leadtek WinFast TV 2000" },
2895a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0xfff6f6ff, BTTV_BOARD_WINFAST2000,   "Leadtek WinFast TV 2000" },
29057437c1da54e5cf7d536d72d61e77ebeb528a87dsensoray-dev	{ 0x03116000, BTTV_BOARD_SENSORAY311_611, "Sensoray 311" },
29157437c1da54e5cf7d536d72d61e77ebeb528a87dsensoray-dev	{ 0x06116000, BTTV_BOARD_SENSORAY311_611, "Sensoray 611" },
2925a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0x00790e11, BTTV_BOARD_WINDVR,        "Canopus WinDVR PCI" },
2935a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0xa0fca1a0, BTTV_BOARD_ZOLTRIX,       "Face to Face Tvmax" },
2945a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0x82b2aa6a, BTTV_BOARD_SIMUS_GVC1100, "SIMUS GVC1100" },
2955a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0x146caa0c, BTTV_BOARD_PV951,         "ituner spectra8" },
2964ac97914c6c35f6bf132071c718e034d0846b9f5Mauro Carvalho Chehab	{ 0x200a1295, BTTV_BOARD_PXC200,        "ImageNation PXC200A" },
2975a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab
2985a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0x40111554, BTTV_BOARD_PV_BT878P_9B,  "Prolink Pixelview PV-BT" },
2995a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0x17de0a01, BTTV_BOARD_KWORLD,        "Mecer TV/FM/Video Tuner" },
3005a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab
3015a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0x01051805, BTTV_BOARD_PICOLO_TETRA_CHIP, "Picolo Tetra Chip #1" },
3025a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0x01061805, BTTV_BOARD_PICOLO_TETRA_CHIP, "Picolo Tetra Chip #2" },
3035a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0x01071805, BTTV_BOARD_PICOLO_TETRA_CHIP, "Picolo Tetra Chip #3" },
3045a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0x01081805, BTTV_BOARD_PICOLO_TETRA_CHIP, "Picolo Tetra Chip #4" },
3055a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab
3065a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0x15409511, BTTV_BOARD_ACORP_Y878F, "Acorp Y878F" },
3071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3081ebba670edac28d4ea37579453417ced71fd9128Scott Alfter	{ 0x53534149, BTTV_BOARD_SSAI_SECURITY, "SSAI Security Video Interface" },
3091ebba670edac28d4ea37579453417ced71fd9128Scott Alfter	{ 0x5353414a, BTTV_BOARD_SSAI_ULTRASOUND, "SSAI Ultrasound Video Interface" },
3101ebba670edac28d4ea37579453417ced71fd9128Scott Alfter
31124a70fdce872d70171b1f49dcd1a7c3a4e8396b2Mauro Carvalho Chehab	/* likely broken, vendor id doesn't match the other magic views ...
3125a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	 * { 0xa0fca04f, BTTV_BOARD_MAGICTVIEW063, "Guillemot Maxi TV Video 3" }, */
31324a70fdce872d70171b1f49dcd1a7c3a4e8396b2Mauro Carvalho Chehab
314cd1257d860f6ee09b589723a5d3888b1fed46487Steven Toth	/* Duplicate PCI ID, reconfigure for this board during the eeprom read.
315cd1257d860f6ee09b589723a5d3888b1fed46487Steven Toth	* { 0x13eb0070, BTTV_BOARD_HAUPPAUGE_IMPACTVCB,  "Hauppauge ImpactVCB" }, */
316cd1257d860f6ee09b589723a5d3888b1fed46487Steven Toth
31776ecf4599e55fd16bdb333a737c6243105c916e6Robert Millan	{ 0x109e036e, BTTV_BOARD_CONCEPTRONIC_CTVFMI2,	"Conceptronic CTVFMi v2"},
31876ecf4599e55fd16bdb333a737c6243105c916e6Robert Millan
31924a70fdce872d70171b1f49dcd1a7c3a4e8396b2Mauro Carvalho Chehab	/* DVB cards (using pci function .1 for mpeg data xfer) */
3205a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0x001c11bd, BTTV_BOARD_PINNACLESAT,   "Pinnacle PCTV Sat" },
3212af3557748c18239b0aa2c77dd9c8392f6c1c7e1Michael Krufky	{ 0x01010071, BTTV_BOARD_NEBULA_DIGITV, "Nebula Electronics DigiTV" },
3222af3557748c18239b0aa2c77dd9c8392f6c1c7e1Michael Krufky	{ 0x20007063, BTTV_BOARD_PC_HDTV,       "pcHDTV HD-2000 TV"},
3235a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0x002611bd, BTTV_BOARD_TWINHAN_DST,   "Pinnacle PCTV SAT CI" },
3245a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0x00011822, BTTV_BOARD_TWINHAN_DST,   "Twinhan VisionPlus DVB" },
3255a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0xfc00270f, BTTV_BOARD_TWINHAN_DST,   "ChainTech digitop DST-1000 DVB-S" },
3265a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0x07711461, BTTV_BOARD_AVDVBT_771,    "AVermedia AverTV DVB-T 771" },
3272af3557748c18239b0aa2c77dd9c8392f6c1c7e1Michael Krufky	{ 0x07611461, BTTV_BOARD_AVDVBT_761,    "AverMedia AverTV DVB-T 761" },
3285a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0xdb1018ac, BTTV_BOARD_DVICO_DVBT_LITE,    "DViCO FusionHDTV DVB-T Lite" },
32919790db00bb7ff4d6621b82933afb3423586644eMichael Krufky	{ 0xdb1118ac, BTTV_BOARD_DVICO_DVBT_LITE,    "Ultraview DVB-T Lite" },
3305a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	{ 0xd50018ac, BTTV_BOARD_DVICO_FUSIONHDTV_5_LITE,    "DViCO FusionHDTV 5 Lite" },
331442d15d5d8ba6a39d0c883585d68503e949a2fe1Cameron Hutchinson	{ 0x00261822, BTTV_BOARD_TWINHAN_DST,	"DNTV Live! Mini "},
33227cb786f4ec5fe85e9e2deffa4d33eed2f588cb0Michael Krufky	{ 0xd200dbc0, BTTV_BOARD_DVICO_FUSIONHDTV_2,	"DViCO FusionHDTV 2" },
33397275ac514c7f1131f42f8b06e073b144c744e78Ernesto Hernández-Novich	{ 0x763c008a, BTTV_BOARD_GEOVISION_GV600,	"GeoVision GV-600" },
3347d341a6a52f115512d60b2de89b2ebde54da8effMauro Carvalho Chehab	{ 0x18011000, BTTV_BOARD_ENLTV_FM_2,	"Encore ENL TV-FM-2" },
3350c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo	{ 0x763d800a, BTTV_BOARD_GEOVISION_GV800S, "GeoVision GV-800(S) (master)" },
3360c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo	{ 0x763d800b, BTTV_BOARD_GEOVISION_GV800S_SL,	"GeoVision GV-800(S) (slave)" },
3370c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo	{ 0x763d800c, BTTV_BOARD_GEOVISION_GV800S_SL,	"GeoVision GV-800(S) (slave)" },
3380c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo	{ 0x763d800d, BTTV_BOARD_GEOVISION_GV800S_SL,	"GeoVision GV-800(S) (slave)" },
339dceaddb978a7fcd2efbdf6775a509529757327c3Alan McIvor
340dceaddb978a7fcd2efbdf6775a509529757327c3Alan McIvor	{ 0x15401830, BTTV_BOARD_PV183,         "Provideo PV183-1" },
341dceaddb978a7fcd2efbdf6775a509529757327c3Alan McIvor	{ 0x15401831, BTTV_BOARD_PV183,         "Provideo PV183-2" },
342dceaddb978a7fcd2efbdf6775a509529757327c3Alan McIvor	{ 0x15401832, BTTV_BOARD_PV183,         "Provideo PV183-3" },
343dceaddb978a7fcd2efbdf6775a509529757327c3Alan McIvor	{ 0x15401833, BTTV_BOARD_PV183,         "Provideo PV183-4" },
344dceaddb978a7fcd2efbdf6775a509529757327c3Alan McIvor	{ 0x15401834, BTTV_BOARD_PV183,         "Provideo PV183-5" },
345dceaddb978a7fcd2efbdf6775a509529757327c3Alan McIvor	{ 0x15401835, BTTV_BOARD_PV183,         "Provideo PV183-6" },
346dceaddb978a7fcd2efbdf6775a509529757327c3Alan McIvor	{ 0x15401836, BTTV_BOARD_PV183,         "Provideo PV183-7" },
347dceaddb978a7fcd2efbdf6775a509529757327c3Alan McIvor	{ 0x15401837, BTTV_BOARD_PV183,         "Provideo PV183-8" },
348de2843b663fd621e9a6c75fed4da73e8c9a1b094Peter De Schrijver	{ 0x3116f200, BTTV_BOARD_TVT_TD3116,	"Tongwei Video Technology TD-3116" },
3499d2952d70f175193b609929427a88a62eaa381bbTony Gentile	{ 0x02280279, BTTV_BOARD_APOSONIC_WDVR, "Aposonic W-DVR" },
3501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	{ 0, -1, NULL }
3511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
3521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* ----------------------------------------------------------------------- */
3541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* array with description for bt848 / bt878 tv/grabber cards               */
3551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct tvcard bttv_tvcards[] = {
3572bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	/* ---- card 0x00 ---------------------------------- */
3585a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_UNKNOWN] = {
3592bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name		= " *** UNKNOWN/GENERIC *** ",
3602bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs	= 4,
3612bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.svhs		= 2,
3626f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel		= MUXSEL(2, 3, 1, 0),
3638c2c0dfe4da28a152c0de2c2ca3a66c1bc2fef7cTrent Piepho		.tuner_type	= UNSET,
3642bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
3652bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
3665a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_MIRO] = {
3672bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name		= "MIRO PCTV",
3682bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs	= 4,
3694c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 1, */
3702bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.svhs		= 2,
3712bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask	= 15,
3726f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel		= MUXSEL(2, 3, 1, 1),
3738bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomux 	= { 2, 0, 0, 0 },
3748bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomute 	= 10,
3758c2c0dfe4da28a152c0de2c2ca3a66c1bc2fef7cTrent Piepho		.tuner_type	= UNSET,
3762bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
3772bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
3785a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_HAUPPAUGE] = {
3792bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name		= "Hauppauge (bt848)",
3802bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs	= 4,
3814c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 1, */
3822bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.svhs		= 2,
3832bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask	= 7,
3846f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel		= MUXSEL(2, 3, 1, 1),
3858bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomux 	= { 0, 1, 2, 3 },
3868bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomute 	= 4,
3878c2c0dfe4da28a152c0de2c2ca3a66c1bc2fef7cTrent Piepho		.tuner_type	= UNSET,
3882bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
3892bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
3905a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_STB] = {
3912bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name		= "STB, Gateway P/N 6000699 (bt848)",
3922bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs	= 3,
3934c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 1, */
3942bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.svhs		= 2,
3952bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask	= 7,
3966f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel		= MUXSEL(2, 3, 1, 1),
3978bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomux 	= { 4, 0, 2, 3 },
3988bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomute 	= 1,
3992bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.no_msp34xx	= 1,
4002bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_type     = TUNER_PHILIPS_NTSC,
4012bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
4022bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll            = PLL_28,
4032bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.has_radio      = 1,
4042bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
4052bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab
4062bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	/* ---- card 0x04 ---------------------------------- */
4075a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_INTEL] = {
4082bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name		= "Intel Create and Share PCI/ Smart Video Recorder III",
4092bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs	= 4,
4104c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 0, */
4112bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.svhs		= 2,
4122bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask	= 0,
4136f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel		= MUXSEL(2, 3, 1, 1),
4148bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomux 	= { 0 },
4158c2c0dfe4da28a152c0de2c2ca3a66c1bc2fef7cTrent Piepho		.tuner_type	= TUNER_ABSENT,
4162bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
4172bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
4185a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_DIAMOND] = {
4192bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name		= "Diamond DTV2000",
4202bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs	= 4,
4214c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 1, */
4222bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.svhs		= 2,
4232bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask	= 3,
4246f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel		= MUXSEL(2, 3, 1, 0),
4258bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomux 	= { 0, 1, 0, 1 },
4268bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomute 	= 3,
4278c2c0dfe4da28a152c0de2c2ca3a66c1bc2fef7cTrent Piepho		.tuner_type	= UNSET,
4282bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
4292bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
4305a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_AVERMEDIA] = {
4312bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name		= "AVerMedia TVPhone",
4322bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs	= 3,
4334c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 1, */
4342bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.svhs		= 3,
4356f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel		= MUXSEL(2, 3, 1, 1),
4362bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask	= 0x0f,
4378bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomux 	= { 0x0c, 0x04, 0x08, 0x04 },
4382bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		/*                0x04 for some cards ?? */
4398c2c0dfe4da28a152c0de2c2ca3a66c1bc2fef7cTrent Piepho		.tuner_type	= UNSET,
4402bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
4414b9b936f278163614543d66f8e8c93d5484dd148Nickolay V. Shmyrev		.audio_mode_gpio= avermedia_tvphone_audio,
4422bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.has_remote     = 1,
4432bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
4445a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_MATRIX_VISION] = {
4452bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name		= "MATRIX-Vision MV-Delta",
4462bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs	= 5,
4474c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 1, */
4482bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.svhs		= 3,
4492bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask	= 0,
4506f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel		= MUXSEL(2, 3, 1, 0, 0),
4518bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomux 	= { 0 },
452abb0362f49c361f71b5aa6d244d4847145ed53c1Trent Piepho		.tuner_type	= TUNER_ABSENT,
4532bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
4542bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
4552bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab
4562bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	/* ---- card 0x08 ---------------------------------- */
4575a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_FLYVIDEO] = {
4582bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name		= "Lifeview FlyVideo II (Bt848) LR26 / MAXI TV Video PCI2 LR26",
4592bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs	= 4,
4604c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 1, */
4612bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.svhs		= 2,
4622bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask	= 0xc00,
4636f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel		= MUXSEL(2, 3, 1, 1),
4648bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomux 	= { 0, 0xc00, 0x800, 0x400 },
4658bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomute 	= 0xc00,
4662bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll		= PLL_28,
4678c2c0dfe4da28a152c0de2c2ca3a66c1bc2fef7cTrent Piepho		.tuner_type	= UNSET,
4682bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
4692bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
4705a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_TURBOTV] = {
4712bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name		= "IMS/IXmicro TurboTV",
4722bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs	= 3,
4734c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 1, */
4742bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.svhs		= 2,
4752bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask	= 3,
4766f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel		= MUXSEL(2, 3, 1, 1),
4778bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomux 	= { 1, 1, 2, 3 },
4782bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll		= PLL_28,
4792bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_type	= TUNER_TEMIC_PAL,
4802bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
4812bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
4825a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_HAUPPAUGE878] = {
4832bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name		= "Hauppauge (bt878)",
4842bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs	= 4,
4854c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 1, */
4862bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.svhs		= 2,
4872bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask	= 0x0f, /* old: 7 */
4886f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel		= MUXSEL(2, 0, 1, 1),
4898bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomux 	= { 0, 1, 2, 3 },
4908bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomute 	= 4,
4912bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll		= PLL_28,
4928c2c0dfe4da28a152c0de2c2ca3a66c1bc2fef7cTrent Piepho		.tuner_type	= UNSET,
4932bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
4942bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
4955a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_MIROPRO] = {
4962bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name		= "MIRO PCTV pro",
4972bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs	= 3,
4984c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 1, */
4992bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.svhs		= 2,
5002bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask	= 0x3014f,
5016f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel		= MUXSEL(2, 3, 1, 1),
5028bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomux 	= { 0x20001,0x10001, 0, 0 },
5038bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomute 	= 10,
5048c2c0dfe4da28a152c0de2c2ca3a66c1bc2fef7cTrent Piepho		.tuner_type	= UNSET,
5052bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
5062bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
5072bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab
5082bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	/* ---- card 0x0c ---------------------------------- */
5095a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_ADSTECH_TV] = {
5102bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name		= "ADS Technologies Channel Surfer TV (bt848)",
5112bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs	= 3,
5124c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 1, */
5132bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.svhs		= 2,
5142bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask	= 15,
5156f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel		= MUXSEL(2, 3, 1, 1),
5168bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomux 	= { 13, 14, 11, 7 },
5178c2c0dfe4da28a152c0de2c2ca3a66c1bc2fef7cTrent Piepho		.tuner_type	= UNSET,
5182bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
5192bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
5205a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_AVERMEDIA98] = {
5212bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name		= "AVerMedia TVCapture 98",
5222bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs	= 3,
5234c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 4, */
5242bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.svhs		= 2,
5252bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask	= 15,
5266f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel		= MUXSEL(2, 3, 1, 1),
5278bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomux 	= { 13, 14, 11, 7 },
5282bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.msp34xx_alt    = 1,
5292bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll		= PLL_28,
5302bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_type	= TUNER_PHILIPS_PAL,
5312bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
5324b9b936f278163614543d66f8e8c93d5484dd148Nickolay V. Shmyrev		.audio_mode_gpio= avermedia_tv_stereo_audio,
533a8900fc242406f25f315190a6d650f1d54617c2fRay Cole		.no_gpioirq     = 1,
5342bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
5355a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_VHX] = {
5362bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name		= "Aimslab Video Highway Xtreme (VHX)",
5372bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs	= 3,
5384c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 1, */
5392bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.svhs		= 2,
5402bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask	= 7,
5416f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel		= MUXSEL(2, 3, 1, 1),
5428bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomux 	= { 0, 2, 1, 3 }, /* old: {0, 1, 2, 3, 4} */
5438bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomute 	= 4,
5442bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll		= PLL_28,
5458c2c0dfe4da28a152c0de2c2ca3a66c1bc2fef7cTrent Piepho		.tuner_type	= UNSET,
5462bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
5472bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
5485a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_ZOLTRIX] = {
5492bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name		= "Zoltrix TV-Max",
5502bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs	= 3,
5514c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 1, */
5522bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.svhs		= 2,
5532bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask	= 15,
5546f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel		= MUXSEL(2, 3, 1, 1),
5558bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomux 	= { 0, 0, 1, 0 },
5568bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomute 	= 10,
5578c2c0dfe4da28a152c0de2c2ca3a66c1bc2fef7cTrent Piepho		.tuner_type	= UNSET,
5582bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
5592bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
5602bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab
5612bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	/* ---- card 0x10 ---------------------------------- */
5625a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_PIXVIEWPLAYTV] = {
5632bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name		= "Prolink Pixelview PlayTV (bt878)",
5642bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs	= 3,
5654c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 1, */
5662bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.svhs		= 2,
5672bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask	= 0x01fe00,
5686f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel		= MUXSEL(2, 3, 1, 1),
5692bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		/* 2003-10-20 by "Anton A. Arapov" <arapov@mail.ru> */
5708bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomux        = { 0x001e00, 0, 0x018000, 0x014000 },
5718bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomute 	= 0x002000,
5722bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll		= PLL_28,
5738c2c0dfe4da28a152c0de2c2ca3a66c1bc2fef7cTrent Piepho		.tuner_type	= UNSET,
57427dea3eb667c058eebf2eb8a090f0e20333386e9Wojciech Migda		.tuner_addr     = ADDR_UNSET,
5752bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
5765a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_WINVIEW_601] = {
5772bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name		= "Leadtek WinView 601",
5782bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs	= 3,
5794c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 1, */
5802bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.svhs		= 2,
5812bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask	= 0x8300f8,
5826f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel		= MUXSEL(2, 3, 1, 1, 0),
5838bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomux 	= { 0x4fa007,0xcfa007,0xcfa007,0xcfa007 },
5848bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomute 	= 0xcfa007,
5858c2c0dfe4da28a152c0de2c2ca3a66c1bc2fef7cTrent Piepho		.tuner_type	= UNSET,
5862bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
5874b9b936f278163614543d66f8e8c93d5484dd148Nickolay V. Shmyrev		.volume_gpio	= winview_volume,
5882bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.has_radio	= 1,
5892bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
5905a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_AVEC_INTERCAP] = {
5912bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name		= "AVEC Intercapture",
5922bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs	= 3,
5934c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 2, */
5942bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.svhs		= 2,
5952bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask	= 0,
5966f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel		= MUXSEL(2, 3, 1, 1),
5978bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomux 	= { 1, 0, 0, 0 },
5988c2c0dfe4da28a152c0de2c2ca3a66c1bc2fef7cTrent Piepho		.tuner_type	= UNSET,
5992bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
6002bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
6015a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_LIFE_FLYKIT] = {
6022bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name		= "Lifeview FlyVideo II EZ /FlyKit LR38 Bt848 (capture only)",
6032bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs	= 4,
6044c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 1, */
6054c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		.svhs		= NO_SVHS,
6062bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask	= 0x8dff00,
6076f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel		= MUXSEL(2, 3, 1, 1),
6088bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomux 	= { 0 },
6092bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.no_msp34xx	= 1,
610abb0362f49c361f71b5aa6d244d4847145ed53c1Trent Piepho		.tuner_type	= TUNER_ABSENT,
6112bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
6122bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
6132bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab
6142bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	/* ---- card 0x14 ---------------------------------- */
6155a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_CEI_RAFFLES] = {
6162bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name		= "CEI Raffles Card",
6172bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs	= 3,
6184c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 3, */
6192bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.svhs		= 2,
6206f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel		= MUXSEL(2, 3, 1, 1),
6218c2c0dfe4da28a152c0de2c2ca3a66c1bc2fef7cTrent Piepho		.tuner_type	= UNSET,
6222bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
6232bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
6245a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_CONFERENCETV] = {
6252bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name		= "Lifeview FlyVideo 98/ Lucky Star Image World ConferenceTV LR50",
6262bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs	= 4,
6274c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 2,  tuner, line in */
6282bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.svhs		= 2,
6292bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask	= 0x1800,
6306f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel		= MUXSEL(2, 3, 1, 1),
6318bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomux 	= { 0, 0x800, 0x1000, 0x1000 },
6328bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomute 	= 0x1800,
6332bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll		= PLL_28,
6342bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_type	= TUNER_PHILIPS_PAL_I,
6352bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
6362bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
6375a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_PHOEBE_TVMAS] = {
6382bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name		= "Askey CPH050/ Phoebe Tv Master + FM",
6392bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs	= 3,
6404c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 1, */
6412bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.svhs		= 2,
6422bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask	= 0xc00,
6436f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel		= MUXSEL(2, 3, 1, 1),
6448bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomux 	= { 0, 1, 0x800, 0x400 },
6458bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomute 	= 0xc00,
6462bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll		= PLL_28,
6478c2c0dfe4da28a152c0de2c2ca3a66c1bc2fef7cTrent Piepho		.tuner_type	= UNSET,
6482bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
6492bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
6505a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_MODTEC_205] = {
6512bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name		= "Modular Technology MM201/MM202/MM205/MM210/MM215 PCTV, bt878",
6522bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs	= 3,
6534c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 1, */
6544c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		.svhs		= NO_SVHS,
6555221e21e5ecd3aebd2e8e3234bd18883ce720945Trent Piepho		.has_dig_in	= 1,
6562bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask	= 7,
6576f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel		= MUXSEL(2, 3, 0), /* input 2 is digital */
6584c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .digital_mode= DIGITAL_MODE_CAMERA, */
6598bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomux 	= { 0, 0, 0, 0 },
6602bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.no_msp34xx	= 1,
6612bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll            = PLL_28,
6622bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_type     = TUNER_ALPS_TSBB5_PAL_I,
6632bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
6642bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
6652bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab
6662bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	/* ---- card 0x18 ---------------------------------- */
6675a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_MAGICTVIEW061] = {
6682bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name		= "Askey CPH05X/06X (bt878) [many vendors]",
6692bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs	= 3,
6704c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 1, */
6712bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.svhs		= 2,
6722bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask	= 0xe00,
6736f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel		= MUXSEL(2, 3, 1, 1),
6748bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomux 	= {0x400, 0x400, 0x400, 0x400 },
6758bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomute 	= 0xc00,
6762bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll		= PLL_28,
6778c2c0dfe4da28a152c0de2c2ca3a66c1bc2fef7cTrent Piepho		.tuner_type	= UNSET,
6782bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
6792bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.has_remote     = 1,
680b61097ee1a99b5689f044895470ef44e7cc73c27Thomas Betker		.has_radio	= 1,  /* not every card has radio */
6812bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
6825a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_VOBIS_BOOSTAR] = {
6832bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name           = "Terratec TerraTV+ Version 1.0 (Bt848)/ Terra TValue Version 1.0/ Vobis TV-Boostar",
6842bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs	= 3,
6854c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 1, */
6862bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.svhs		= 2,
6872bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask       = 0x1f0fff,
6886f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel		= MUXSEL(2, 3, 1, 1),
6898bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomux        = { 0x20000, 0x30000, 0x10000, 0 },
6908bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomute 	= 0x40000,
6912bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_type	= TUNER_PHILIPS_PAL,
6922bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
6934b9b936f278163614543d66f8e8c93d5484dd148Nickolay V. Shmyrev		.audio_mode_gpio= terratv_audio,
6942bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
6955a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_HAUPPAUG_WCAM] = {
6962bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name		= "Hauppauge WinCam newer (bt878)",
6972bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs	= 4,
6984c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 1, */
6992bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.svhs		= 3,
7002bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask	= 7,
7016f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel		= MUXSEL(2, 0, 1, 1),
7028bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomux 	= { 0, 1, 2, 3 },
7038bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomute 	= 4,
7048c2c0dfe4da28a152c0de2c2ca3a66c1bc2fef7cTrent Piepho		.tuner_type	= UNSET,
7052bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
7062bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
7075a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_MAXI] = {
7082bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name		= "Lifeview FlyVideo 98/ MAXI TV Video PCI2 LR50",
7092bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs	= 4,
7104c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 2, */
7112bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.svhs		= 2,
7122bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask	= 0x1800,
7136f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel		= MUXSEL(2, 3, 1, 1),
7148bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomux 	= { 0, 0x800, 0x1000, 0x1000 },
7158bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomute 	= 0x1800,
7162bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll            = PLL_28,
7172bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_type	= TUNER_PHILIPS_SECAM,
7182bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
7192bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
7202bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab
7212bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	/* ---- card 0x1c ---------------------------------- */
7225a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_TERRATV] = {
7232bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name           = "Terratec TerraTV+ Version 1.1 (bt878)",
7242bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs	= 3,
7254c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 1, */
7262bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.svhs		= 2,
7272bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask	= 0x1f0fff,
7286f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel		= MUXSEL(2, 3, 1, 1),
7298bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomux 	= { 0x20000, 0x30000, 0x10000, 0x00000 },
7308bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomute 	= 0x40000,
7312bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_type	= TUNER_PHILIPS_PAL,
7322bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
7334b9b936f278163614543d66f8e8c93d5484dd148Nickolay V. Shmyrev		.audio_mode_gpio= terratv_audio,
7342bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		/* GPIO wiring:
7352bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		External 20 pin connector (for Active Radio Upgrade board)
7362bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		gpio00: i2c-sda
7372bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		gpio01: i2c-scl
7382bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		gpio02: om5610-data
7392bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		gpio03: om5610-clk
7402bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		gpio04: om5610-wre
7412bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		gpio05: om5610-stereo
7422bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		gpio06: rds6588-davn
7432bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		gpio07: Pin 7 n.c.
7442bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		gpio08: nIOW
7452bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		gpio09+10: nIOR, nSEL ?? (bt878)
7462bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab			gpio09: nIOR (bt848)
7472bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab			gpio10: nSEL (bt848)
7482bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		Sound Routing:
7492bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		gpio16: u2-A0 (1st 4052bt)
7502bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		gpio17: u2-A1
7512bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		gpio18: u2-nEN
7522bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		gpio19: u4-A0 (2nd 4052)
7532bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		gpio20: u4-A1
7542bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab			u4-nEN - GND
7552bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		Btspy:
7562bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab			00000 : Cdrom (internal audio input)
7572bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab			10000 : ext. Video audio input
7582bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab			20000 : TV Mono
7592bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab			a0000 : TV Mono/2
7602bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		1a0000 : TV Stereo
7612bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab			30000 : Radio
7622bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab			40000 : Mute
76324a70fdce872d70171b1f49dcd1a7c3a4e8396b2Mauro Carvalho Chehab	*/
7642bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab
7652bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
7665a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_PXC200] = {
7672bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		/* Jannik Fritsch <jannik@techfak.uni-bielefeld.de> */
7682bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name		= "Imagenation PXC200",
7692bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs	= 5,
7704c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 1, */
7712bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.svhs		= 1, /* was: 4 */
7722bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask	= 0,
7736f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel		= MUXSEL(2, 3, 1, 0, 0),
7748bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomux 	= { 0 },
775abb0362f49c361f71b5aa6d244d4847145ed53c1Trent Piepho		.tuner_type	= TUNER_ABSENT,
7762bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
7772bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.muxsel_hook    = PXC200_muxsel,
7782bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab
7792bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
7805a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_FLYVIDEO_98] = {
7812bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name		= "Lifeview FlyVideo 98 LR50",
7822bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs	= 4,
7834c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 1, */
7842bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.svhs		= 2,
7852bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask	= 0x1800,  /* 0x8dfe00 */
7866f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel		= MUXSEL(2, 3, 1, 1),
7878bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomux 	= { 0, 0x0800, 0x1000, 0x1000 },
7888bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomute 	= 0x1800,
7892bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll            = PLL_28,
7908c2c0dfe4da28a152c0de2c2ca3a66c1bc2fef7cTrent Piepho		.tuner_type	= UNSET,
7912bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
7922bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
7935a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_IPROTV] = {
7942bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name		= "Formac iProTV, Formac ProTV I (bt848)",
7952bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs	= 4,
7964c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 1, */
7972bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.svhs		= 3,
7982bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask	= 1,
7996f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel		= MUXSEL(2, 3, 1, 1),
8008bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomux 	= { 1, 0, 0, 0 },
8012bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll            = PLL_28,
8022bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_type	= TUNER_PHILIPS_PAL,
8032bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
8042bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
8052bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab
8062bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	/* ---- card 0x20 ---------------------------------- */
8075a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_INTEL_C_S_PCI] = {
8082bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name		= "Intel Create and Share PCI/ Smart Video Recorder III",
8092bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs	= 4,
8104c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 0, */
8112bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.svhs		= 2,
8122bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask	= 0,
8136f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel		= MUXSEL(2, 3, 1, 1),
8148bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomux 	= { 0 },
8158c2c0dfe4da28a152c0de2c2ca3a66c1bc2fef7cTrent Piepho		.tuner_type	= TUNER_ABSENT,
8162bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
8172bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
8185a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_TERRATVALUE] = {
8192bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name           = "Terratec TerraTValue Version Bt878",
8202bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs	= 3,
8214c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 1, */
8222bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.svhs		= 2,
8232bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask	= 0xffff00,
8246f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel		= MUXSEL(2, 3, 1, 1),
8258bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomux 	= { 0x500, 0, 0x300, 0x900 },
8268bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomute 	= 0x900,
8272bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll		= PLL_28,
8282bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_type	= TUNER_PHILIPS_PAL,
8292bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
8302bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
8315a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_WINFAST2000] = {
8322bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name		= "Leadtek WinFast 2000/ WinFast 2000 XP",
8332bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs	= 4,
8344c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 1, */
8352bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.svhs		= 2,
8366f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		/* TV, CVid, SVid, CVid over SVid connector */
8376f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel		= MUXSEL(2, 3, 1, 1, 0),
8382bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		/* Alexander Varakin <avarakin@hotmail.com> [stereo version] */
8392bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask	= 0xb33000,
8408bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomux 	= { 0x122000,0x1000,0x0000,0x620000 },
8418bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomute 	= 0x800000,
8422bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		/* Audio Routing for "WinFast 2000 XP" (no tv stereo !)
8432bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab			gpio23 -- hef4052:nEnable (0x800000)
8442bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab			gpio12 -- hef4052:A1
8452bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab			gpio13 -- hef4052:A0
8462bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		0x0000: external audio
8472bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		0x1000: FM
8482bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		0x2000: TV
8492bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		0x3000: n.c.
8502bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		Note: There exists another variant "Winfast 2000" with tv stereo !?
8512bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		Note: eeprom only contains FF and pci subsystem id 107d:6606
8522bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		*/
8532bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll		= PLL_28,
8542bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.has_radio	= 1,
8558c2c0dfe4da28a152c0de2c2ca3a66c1bc2fef7cTrent Piepho		.tuner_type	= TUNER_PHILIPS_PAL, /* default for now, gpio reads BFFF06 for Pal bg+dk */
8562bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
8574b9b936f278163614543d66f8e8c93d5484dd148Nickolay V. Shmyrev		.audio_mode_gpio= winfast2000_audio,
8582bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.has_remote     = 1,
8592bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
8605a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_CHRONOS_VS2] = {
8612bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name		= "Lifeview FlyVideo 98 LR50 / Chronos Video Shuttle II",
8622bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs	= 4,
8634c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 3, */
8642bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.svhs		= 2,
8652bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask	= 0x1800,
8666f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel		= MUXSEL(2, 3, 1, 1),
8678bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomux 	= { 0, 0x800, 0x1000, 0x1000 },
8688bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomute 	= 0x1800,
8692bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll		= PLL_28,
8708c2c0dfe4da28a152c0de2c2ca3a66c1bc2fef7cTrent Piepho		.tuner_type	= UNSET,
8712bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
8722bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
8732bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab
8742bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	/* ---- card 0x24 ---------------------------------- */
8755a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_TYPHOON_TVIEW] = {
8762bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name		= "Lifeview FlyVideo 98FM LR50 / Typhoon TView TV/FM Tuner",
8772bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs	= 4,
8784c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 3, */
8792bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.svhs		= 2,
8802bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask	= 0x1800,
8816f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel		= MUXSEL(2, 3, 1, 1),
8828bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomux 	= { 0, 0x800, 0x1000, 0x1000 },
8838bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomute 	= 0x1800,
8842bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll		= PLL_28,
8858c2c0dfe4da28a152c0de2c2ca3a66c1bc2fef7cTrent Piepho		.tuner_type	= UNSET,
8862bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
8872bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.has_radio	= 1,
8882bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
8895a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_PXELVWPLTVPRO] = {
8902bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name		= "Prolink PixelView PlayTV pro",
8912bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs	= 3,
8924c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 1, */
8932bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.svhs		= 2,
8942bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask	= 0xff,
8956f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel		= MUXSEL(2, 3, 1, 1),
8968bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomux 	= { 0x21, 0x20, 0x24, 0x2c },
8978bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomute 	= 0x29,
8982bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.no_msp34xx	= 1,
8992bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll		= PLL_28,
9008c2c0dfe4da28a152c0de2c2ca3a66c1bc2fef7cTrent Piepho		.tuner_type	= UNSET,
9012bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
9022bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
9035a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_MAGICTVIEW063] = {
9042bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name		= "Askey CPH06X TView99",
9052bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs	= 4,
9064c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 1, */
9072bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.svhs		= 2,
9082bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask	= 0x551e00,
9096f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel		= MUXSEL(2, 3, 1, 0),
9108bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomux 	= { 0x551400, 0x551200, 0, 0 },
9118bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomute 	= 0x551c00,
9122bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll		= PLL_28,
9138c2c0dfe4da28a152c0de2c2ca3a66c1bc2fef7cTrent Piepho		.tuner_type	= TUNER_PHILIPS_PAL_I,
9142bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
9152bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.has_remote     = 1,
9162bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
9175a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_PINNACLE] = {
9182bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name		= "Pinnacle PCTV Studio/Rave",
9192bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs	= 3,
9204c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 1, */
9212bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.svhs		= 2,
9222bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask	= 0x03000F,
9236f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel		= MUXSEL(2, 3, 1, 1),
9248bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomux 	= { 2, 0xd0001, 0, 0 },
9258bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomute 	= 1,
9262bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll		= PLL_28,
9278c2c0dfe4da28a152c0de2c2ca3a66c1bc2fef7cTrent Piepho		.tuner_type	= UNSET,
9282bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
9292bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
9302bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab
9312bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	/* ---- card 0x28 ---------------------------------- */
9325a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_STB2] = {
9332bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name		= "STB TV PCI FM, Gateway P/N 6000704 (bt878), 3Dfx VoodooTV 100",
9342bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs	= 3,
9354c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 1, */
9362bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.svhs		= 2,
9372bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask	= 7,
9386f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel		= MUXSEL(2, 3, 1, 1),
9398bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomux 	= { 4, 0, 2, 3 },
9408bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomute 	= 1,
9412bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.no_msp34xx	= 1,
9422bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_type     = TUNER_PHILIPS_NTSC,
9432bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
9442bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll            = PLL_28,
9452bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.has_radio      = 1,
9462bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
9475a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_AVPHONE98] = {
9482bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name		= "AVerMedia TVPhone 98",
9492bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs	= 3,
9504c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 4, */
9512bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.svhs		= 2,
9522bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask	= 15,
9536f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel		= MUXSEL(2, 3, 1, 1),
9548bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomux 	= { 13, 4, 11, 7 },
9552bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll		= PLL_28,
9568c2c0dfe4da28a152c0de2c2ca3a66c1bc2fef7cTrent Piepho		.tuner_type	= UNSET,
9572bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
9582bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.has_radio	= 1,
9594b9b936f278163614543d66f8e8c93d5484dd148Nickolay V. Shmyrev		.audio_mode_gpio= avermedia_tvphone_audio,
9602bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
9615a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_PV951] = {
9622bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name		= "ProVideo PV951", /* pic16c54 */
9632bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs	= 3,
9644c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 1, */
9652bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.svhs		= 2,
9662bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask	= 0,
9676f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel		= MUXSEL(2, 3, 1, 1),
9688bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomux 	= { 0, 0, 0, 0},
9692bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.no_msp34xx	= 1,
9702bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll		= PLL_28,
9718c2c0dfe4da28a152c0de2c2ca3a66c1bc2fef7cTrent Piepho		.tuner_type	= TUNER_PHILIPS_PAL_I,
9722bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
9732bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
9745a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_ONAIR_TV] = {
9752bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name		= "Little OnAir TV",
9762bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs	= 3,
9774c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 1, */
9782bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.svhs		= 2,
9792bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask	= 0xe00b,
9806f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel		= MUXSEL(2, 3, 1, 1),
9818bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomux 	= { 0xff9ff6, 0xff9ff6, 0xff1ff7, 0 },
9828bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomute 	= 0xff3ffc,
9832bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.no_msp34xx	= 1,
9848c2c0dfe4da28a152c0de2c2ca3a66c1bc2fef7cTrent Piepho		.tuner_type	= UNSET,
9852bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
9862bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
9872bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab
9882bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	/* ---- card 0x2c ---------------------------------- */
9895a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_SIGMA_TVII_FM] = {
9902bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name		= "Sigma TVII-FM",
9912bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs	= 2,
9924c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 1, */
9934c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		.svhs		= NO_SVHS,
9942bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask	= 3,
9956f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel		= MUXSEL(2, 3, 1, 1),
9968bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomux 	= { 1, 1, 0, 2 },
9978bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomute 	= 3,
9982bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.no_msp34xx	= 1,
9992bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll		= PLL_NONE,
10008c2c0dfe4da28a152c0de2c2ca3a66c1bc2fef7cTrent Piepho		.tuner_type	= UNSET,
10012bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
10022bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
10035a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_MATRIX_VISION2] = {
10042bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name		= "MATRIX-Vision MV-Delta 2",
10052bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs	= 5,
10064c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 1, */
10072bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.svhs		= 3,
10082bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask	= 0,
10096f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel		= MUXSEL(2, 3, 1, 0, 0),
10108bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomux 	= { 0 },
10112bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.no_msp34xx	= 1,
10122bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll		= PLL_28,
1013abb0362f49c361f71b5aa6d244d4847145ed53c1Trent Piepho		.tuner_type	= TUNER_ABSENT,
10142bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
10152bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
10165a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_ZOLTRIX_GENIE] = {
10172bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name		= "Zoltrix Genie TV/FM",
10182bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs	= 3,
10194c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 1, */
10202bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.svhs		= 2,
10212bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask	= 0xbcf03f,
10226f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel		= MUXSEL(2, 3, 1, 1),
10238bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomux 	= { 0xbc803f, 0xbc903f, 0xbcb03f, 0 },
10248bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomute 	= 0xbcb03f,
10252bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.no_msp34xx	= 1,
10262bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll		= PLL_28,
10278c2c0dfe4da28a152c0de2c2ca3a66c1bc2fef7cTrent Piepho		.tuner_type	= TUNER_TEMIC_4039FR5_NTSC,
10282bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
10292bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
10305a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_TERRATVRADIO] = {
10312bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name		= "Terratec TV/Radio+",
10322bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs	= 3,
10334c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 1, */
10342bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.svhs		= 2,
10352bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask	= 0x70000,
10366f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel		= MUXSEL(2, 3, 1, 1),
10378bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomux 	= { 0x20000, 0x30000, 0x10000, 0 },
10388bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomute 	= 0x40000,
10392bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.no_msp34xx	= 1,
10402bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll		= PLL_35,
10418c2c0dfe4da28a152c0de2c2ca3a66c1bc2fef7cTrent Piepho		.tuner_type	= TUNER_PHILIPS_PAL_I,
10422bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
10432bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.has_radio	= 1,
10442bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
10452bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab
10462bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	/* ---- card 0x30 ---------------------------------- */
10475a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_DYNALINK] = {
10482bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name		= "Askey CPH03x/ Dynalink Magic TView",
10492bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs	= 3,
10504c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 1, */
10512bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.svhs		= 2,
10522bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask	= 15,
10536f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel		= MUXSEL(2, 3, 1, 1),
10548bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomux 	= {2,0,0,0 },
10558bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomute 	= 1,
10562bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll		= PLL_28,
10578c2c0dfe4da28a152c0de2c2ca3a66c1bc2fef7cTrent Piepho		.tuner_type	= UNSET,
10582bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
10592bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
10605a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_GVBCTV3PCI] = {
10612bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name		= "IODATA GV-BCTV3/PCI",
10622bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs	= 3,
10634c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 1, */
10642bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.svhs		= 2,
10652bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask	= 0x010f00,
10666f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel		= MUXSEL(2, 3, 0, 0),
10678bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomux 	= {0x10000, 0, 0x10000, 0 },
10682bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.no_msp34xx	= 1,
10692bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll		= PLL_28,
10702bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_type	= TUNER_ALPS_TSHC6_NTSC,
10712bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
10724b9b936f278163614543d66f8e8c93d5484dd148Nickolay V. Shmyrev		.audio_mode_gpio= gvbctv3pci_audio,
10732bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
10745a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_PXELVWPLTVPAK] = {
10752bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name		= "Prolink PV-BT878P+4E / PixelView PlayTV PAK / Lenco MXTV-9578 CP",
10762bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs	= 5,
10774c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 1, */
10782bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.svhs		= 3,
10795221e21e5ecd3aebd2e8e3234bd18883ce720945Trent Piepho		.has_dig_in	= 1,
10802bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask	= 0xAA0000,
10816f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel		= MUXSEL(2, 3, 1, 1, 0), /* in 4 is digital */
10824c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .digital_mode= DIGITAL_MODE_CAMERA, */
10838bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomux 	= { 0x20000, 0, 0x80000, 0x80000 },
10848bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomute 	= 0xa8000,
10852bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.no_msp34xx	= 1,
10862bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll		= PLL_28,
10872bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_type	= TUNER_PHILIPS_PAL_I,
10882bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
10892bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.has_remote	= 1,
10902bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		/* GPIO wiring: (different from Rev.4C !)
10912bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab			GPIO17: U4.A0 (first hef4052bt)
10922bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab			GPIO19: U4.A1
10932bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab			GPIO20: U5.A1 (second hef4052bt)
10942bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab			GPIO21: U4.nEN
10952bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab			GPIO22: BT832 Reset Line
10962bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab			GPIO23: A5,A0, U5,nEN
10972bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		Note: At i2c=0x8a is a Bt832 chip, which changes to 0x88 after being reset via GPIO22
10982bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		*/
10992bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
11005a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_EAGLE] = {
11012bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name           = "Eagle Wireless Capricorn2 (bt878A)",
11022bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs   = 4,
11034c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 1, */
11042bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.svhs           = 2,
11052bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask       = 7,
11066f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel         = MUXSEL(2, 0, 1, 1),
11078bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomux        = { 0, 1, 2, 3 },
11088bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomute 	= 4,
11092bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll            = PLL_28,
11108c2c0dfe4da28a152c0de2c2ca3a66c1bc2fef7cTrent Piepho		.tuner_type     = UNSET /* TUNER_ALPS_TMDH2_NTSC */,
11112bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
11122bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
11132bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab
11142bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	/* ---- card 0x34 ---------------------------------- */
11155a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_PINNACLEPRO] = {
11162bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		/* David Härdeman <david@2gen.com> */
11172bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name           = "Pinnacle PCTV Studio Pro",
11182bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs   = 4,
11194c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 1, */
11202bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.svhs           = 3,
11212bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask       = 0x03000F,
11226f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel		= MUXSEL(2, 3, 1, 1),
11238bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomux 	= { 1, 0xd0001, 0, 0 },
11248bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomute 	= 10,
11252bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab				/* sound path (5 sources):
11262bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab				MUX1 (mask 0x03), Enable Pin 0x08 (0=enable, 1=disable)
11272bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab					0= ext. Audio IN
11282bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab					1= from MUX2
11292bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab					2= Mono TV sound from Tuner
11302bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab					3= not connected
11312bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab				MUX2 (mask 0x30000):
11322bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab					0,2,3= from MSP34xx
11332bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab					1= FM stereo Radio from Tuner */
11342bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll            = PLL_28,
11358c2c0dfe4da28a152c0de2c2ca3a66c1bc2fef7cTrent Piepho		.tuner_type     = UNSET,
11362bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
11372bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
11385a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_TVIEW_RDS_FM] = {
11392bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		/* Claas Langbehn <claas@bigfoot.com>,
11402bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		Sven Grothklags <sven@upb.de> */
11412bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name		= "Typhoon TView RDS + FM Stereo / KNC1 TV Station RDS",
11422bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs	= 4,
11434c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 3, */
11442bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.svhs		= 2,
11452bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask	= 0x1c,
11466f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel		= MUXSEL(2, 3, 1, 1),
11478bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomux 	= { 0, 0, 0x10, 8 },
11488bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomute 	= 4,
11492bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll		= PLL_28,
11502bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_type	= TUNER_PHILIPS_PAL,
11512bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
11522bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.has_radio	= 1,
11532bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
11545a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_LIFETEC_9415] = {
115596de0e252cedffad61b3cb5e05662c591898e69aJan Engelhardt		/* Tim Röstermundt <rosterm@uni-muenster.de>
11562bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		in de.comp.os.unix.linux.hardware:
11572bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab			options bttv card=0 pll=1 radio=1 gpiomask=0x18e0
11588bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil			gpiomux =0x44c71f,0x44d71f,0,0x44d71f,0x44dfff
11592bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab			options tuner type=5 */
11602bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name		= "Lifeview FlyVideo 2000 /FlyVideo A2/ Lifetec LT 9415 TV [LR90]",
11612bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs	= 4,
11624c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 1, */
11632bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.svhs		= 2,
11642bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask	= 0x18e0,
11656f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel		= MUXSEL(2, 3, 1, 1),
11668bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomux 	= { 0x0000,0x0800,0x1000,0x1000 },
11678bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomute 	= 0x18e0,
11682bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab			/* For cards with tda9820/tda9821:
11692bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab				0x0000: Tuner normal stereo
11702bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab				0x0080: Tuner A2 SAP (second audio program = Zweikanalton)
11712bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab				0x0880: Tuner A2 stereo */
11722bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll		= PLL_28,
11738c2c0dfe4da28a152c0de2c2ca3a66c1bc2fef7cTrent Piepho		.tuner_type	= UNSET,
11742bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
11752bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
11765a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_BESTBUY_EASYTV] = {
11772bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		/* Miguel Angel Alvarez <maacruz@navegalia.com>
11782bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		old Easy TV BT848 version (model CPH031) */
11792bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name           = "Askey CPH031/ BESTBUY Easy TV",
11802bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs	= 4,
11814c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 1, */
11822bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.svhs           = 2,
11832bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask       = 0xF,
11846f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel         = MUXSEL(2, 3, 1, 0),
11858bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomux        = { 2, 0, 0, 0 },
11868bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomute 	= 10,
11872bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll		= PLL_28,
11882bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_type	= TUNER_TEMIC_PAL,
11892bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
11902bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
11912bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab
11922bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	/* ---- card 0x38 ---------------------------------- */
11935a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_FLYVIDEO_98FM] = {
11942bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		/* Gordon Heydon <gjheydon@bigfoot.com ('98) */
11952bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name           = "Lifeview FlyVideo 98FM LR50",
11962bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs   = 4,
11974c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 3, */
11982bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.svhs           = 2,
11992bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask       = 0x1800,
12006f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel         = MUXSEL(2, 3, 1, 1),
12018bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomux        = { 0, 0x800, 0x1000, 0x1000 },
12028bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomute 	= 0x1800,
12032bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll            = PLL_28,
12048c2c0dfe4da28a152c0de2c2ca3a66c1bc2fef7cTrent Piepho		.tuner_type     = TUNER_PHILIPS_PAL,
12052bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
12062bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
12072bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		/* This is the ultimate cheapo capture card
12082bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		* just a BT848A on a small PCB!
12092bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		* Steve Hosgood <steve@equiinet.com> */
12105a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_GRANDTEC] = {
12112bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name           = "GrandTec 'Grand Video Capture' (Bt848)",
12122bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs   = 2,
12134c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 0, */
12142bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.svhs           = 1,
12152bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask       = 0,
12166f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel         = MUXSEL(3, 1),
12178bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomux        = { 0 },
12182bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.no_msp34xx     = 1,
12192bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll            = PLL_35,
1220abb0362f49c361f71b5aa6d244d4847145ed53c1Trent Piepho		.tuner_type     = TUNER_ABSENT,
12212bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
12222bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
12235a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_ASKEY_CPH060] = {
12242bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		/* Daniel Herrington <daniel.herrington@home.com> */
12252bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name           = "Askey CPH060/ Phoebe TV Master Only (No FM)",
12262bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs   = 3,
12274c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 1, */
12282bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.svhs           = 2,
12292bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask       = 0xe00,
12306f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel         = MUXSEL(2, 3, 1, 1),
12318bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomux        = { 0x400, 0x400, 0x400, 0x400 },
12328bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomute 	= 0x800,
12332bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll            = PLL_28,
12342bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_type     = TUNER_TEMIC_4036FY5_NTSC,
12352bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
12362bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
12375a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_ASKEY_CPH03X] = {
12382bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		/* Matti Mottus <mottus@physic.ut.ee> */
12392bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name		= "Askey CPH03x TV Capturer",
12402bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs	= 4,
12414c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 1, */
12422bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.svhs		= 2,
12432bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask       = 0x03000F,
12446f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel		= MUXSEL(2, 3, 1, 0),
12458bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomux        = { 2, 0, 0, 0 },
12468bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomute 	= 1,
12472bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll            = PLL_28,
12488c2c0dfe4da28a152c0de2c2ca3a66c1bc2fef7cTrent Piepho		.tuner_type	= TUNER_TEMIC_PAL,
12492bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
1250ed44f66e4039dfc8fb7905078d546c83adf76811Mauro Carvalho Chehab		.has_remote	= 1,
12512bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
12522bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab
12532bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	/* ---- card 0x3c ---------------------------------- */
12545a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_MM100PCTV] = {
12552bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		/* Philip Blundell <philb@gnu.org> */
12562bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name           = "Modular Technology MM100PCTV",
12572bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs   = 2,
12584c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 2, */
12594c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		.svhs		= NO_SVHS,
12602bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask       = 11,
12616f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel         = MUXSEL(2, 3, 1, 1),
12628bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomux        = { 2, 0, 0, 1 },
12638bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomute 	= 8,
12642bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll            = PLL_35,
12652bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_type     = TUNER_TEMIC_PAL,
12662bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
12672bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
12685a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_GMV1] = {
12692bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		/* Adrian Cox <adrian@humboldt.co.uk */
12704ac97914c6c35f6bf132071c718e034d0846b9f5Mauro Carvalho Chehab		.name		= "AG Electronics GMV1",
12712bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs   = 2,
12724c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 0, */
12734ac97914c6c35f6bf132071c718e034d0846b9f5Mauro Carvalho Chehab		.svhs		= 1,
12742bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask       = 0xF,
12756f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel		= MUXSEL(2, 2),
12768bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomux        = { },
12772bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.no_msp34xx     = 1,
12784ac97914c6c35f6bf132071c718e034d0846b9f5Mauro Carvalho Chehab		.pll		= PLL_28,
1279abb0362f49c361f71b5aa6d244d4847145ed53c1Trent Piepho		.tuner_type     = TUNER_ABSENT,
12802bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
12812bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
12825a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_BESTBUY_EASYTV2] = {
12832bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		/* Miguel Angel Alvarez <maacruz@navegalia.com>
12842bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		new Easy TV BT878 version (model CPH061)
12852bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		special thanks to Informatica Mieres for providing the card */
12862bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name           = "Askey CPH061/ BESTBUY Easy TV (bt878)",
12872bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs	= 3,
12884c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 2, */
12892bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.svhs           = 2,
12902bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask       = 0xFF,
12916f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel         = MUXSEL(2, 3, 1, 0),
12928bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomux        = { 1, 0, 4, 4 },
12938bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomute 	= 9,
12942bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll		= PLL_28,
12952bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_type	= TUNER_PHILIPS_PAL,
12962bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
12972bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
12985a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_ATI_TVWONDER] = {
12992bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		/* Lukas Gebauer <geby@volny.cz> */
13002bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name		= "ATI TV-Wonder",
13012bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs	= 3,
13024c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 1, */
13032bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.svhs		= 2,
13042bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask	= 0xf03f,
13056f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel		= MUXSEL(2, 3, 1, 0),
13068bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomux 	= { 0xbffe, 0, 0xbfff, 0 },
13078bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomute 	= 0xbffe,
13082bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll		= PLL_28,
13092bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_type	= TUNER_TEMIC_4006FN5_MULTI_PAL,
13102bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
13112bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
13122bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab
13132bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	/* ---- card 0x40 ---------------------------------- */
13145a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_ATI_TVWONDERVE] = {
13152bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		/* Lukas Gebauer <geby@volny.cz> */
13162bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name		= "ATI TV-Wonder VE",
13172bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs	= 2,
13184c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 1, */
13194c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		.svhs		= NO_SVHS,
13202bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask	= 1,
13216f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel		= MUXSEL(2, 3, 0, 1),
13228bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomux 	= { 0, 0, 1, 0 },
13232bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.no_msp34xx	= 1,
13242bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll		= PLL_28,
13252bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_type	= TUNER_TEMIC_4006FN5_MULTI_PAL,
13262bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
13272bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
13285a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_FLYVIDEO2000] = {
13292bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		/* DeeJay <deejay@westel900.net (2000S) */
13302bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name           = "Lifeview FlyVideo 2000S LR90",
13312bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs   = 3,
13324c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 3, */
13332bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.svhs           = 2,
13342bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask	= 0x18e0,
13356f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel		= MUXSEL(2, 3, 0, 1),
13362bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab				/* Radio changed from 1e80 to 0x800 to make
13372bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab				FlyVideo2000S in .hu happy (gm)*/
13382bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab				/* -dk-???: set mute=0x1800 for tda9874h daughterboard */
13398bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomux 	= { 0x0000,0x0800,0x1000,0x1000 },
13408bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomute 	= 0x1800,
13414b9b936f278163614543d66f8e8c93d5484dd148Nickolay V. Shmyrev		.audio_mode_gpio= fv2000s_audio,
13422bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.no_msp34xx	= 1,
13432bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll            = PLL_28,
13448c2c0dfe4da28a152c0de2c2ca3a66c1bc2fef7cTrent Piepho		.tuner_type     = TUNER_PHILIPS_PAL,
13452bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
13462bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
13475a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_TERRATVALUER] = {
13482bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name		= "Terratec TValueRadio",
13492bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs	= 3,
13504c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 1, */
13512bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.svhs		= 2,
13522bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask	= 0xffff00,
13536f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel		= MUXSEL(2, 3, 1, 1),
13548bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomux 	= { 0x500, 0x500, 0x300, 0x900 },
13558bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomute 	= 0x900,
13562bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll		= PLL_28,
13572bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_type	= TUNER_PHILIPS_PAL,
13582bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
13592bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.has_radio	= 1,
13602bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
13615a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_GVBCTV4PCI] = {
13622bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		/* TANAKA Kei <peg00625@nifty.com> */
13632bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name           = "IODATA GV-BCTV4/PCI",
13642bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs   = 3,
13654c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 1, */
13662bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.svhs           = 2,
13672bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask       = 0x010f00,
13686f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel         = MUXSEL(2, 3, 0, 0),
13698bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomux        = {0x10000, 0, 0x10000, 0 },
13702bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.no_msp34xx     = 1,
13712bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll            = PLL_28,
13722bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_type     = TUNER_SHARP_2U5JF5540_NTSC,
13732bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
13744b9b936f278163614543d66f8e8c93d5484dd148Nickolay V. Shmyrev		.audio_mode_gpio= gvbctv3pci_audio,
13752bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
13762bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab
13772bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	/* ---- card 0x44 ---------------------------------- */
13785a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_VOODOOTV_FM] = {
1379434b25263a236c9dd980617d69863ba0eff8c744Wade Berrier		.name           = "3Dfx VoodooTV FM (Euro)",
1380434b25263a236c9dd980617d69863ba0eff8c744Wade Berrier		/* try "insmod msp3400 simple=0" if you have
1381434b25263a236c9dd980617d69863ba0eff8c744Wade Berrier		* sound problems with this card. */
1382434b25263a236c9dd980617d69863ba0eff8c744Wade Berrier		.video_inputs   = 4,
13834c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 1, */
13844c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		.svhs           = NO_SVHS,
1385434b25263a236c9dd980617d69863ba0eff8c744Wade Berrier		.gpiomask       = 0x4f8a00,
1386434b25263a236c9dd980617d69863ba0eff8c744Wade Berrier		/* 0x100000: 1=MSP enabled (0=disable again)
1387434b25263a236c9dd980617d69863ba0eff8c744Wade Berrier		* 0x010000: Connected to "S0" on tda9880 (0=Pal/BG, 1=NTSC) */
1388434b25263a236c9dd980617d69863ba0eff8c744Wade Berrier		.gpiomux        = {0x947fff, 0x987fff,0x947fff,0x947fff },
1389434b25263a236c9dd980617d69863ba0eff8c744Wade Berrier		.gpiomute 	= 0x947fff,
1390434b25263a236c9dd980617d69863ba0eff8c744Wade Berrier		/* tvtuner, radio,   external,internal, mute,  stereo
1391434b25263a236c9dd980617d69863ba0eff8c744Wade Berrier		* tuner, Composit, SVid, Composit-on-Svid-adapter */
13926f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel         = MUXSEL(2, 3, 0, 1),
1393434b25263a236c9dd980617d69863ba0eff8c744Wade Berrier		.tuner_type     = TUNER_MT2032,
1394434b25263a236c9dd980617d69863ba0eff8c744Wade Berrier		.tuner_addr	= ADDR_UNSET,
1395434b25263a236c9dd980617d69863ba0eff8c744Wade Berrier		.pll		= PLL_28,
1396434b25263a236c9dd980617d69863ba0eff8c744Wade Berrier		.has_radio	= 1,
1397434b25263a236c9dd980617d69863ba0eff8c744Wade Berrier	},
1398434b25263a236c9dd980617d69863ba0eff8c744Wade Berrier	[BTTV_BOARD_VOODOOTV_200] = {
1399434b25263a236c9dd980617d69863ba0eff8c744Wade Berrier		.name           = "VoodooTV 200 (USA)",
14002bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		/* try "insmod msp3400 simple=0" if you have
14012bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		* sound problems with this card. */
14022bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs   = 4,
14034c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 1, */
14044c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		.svhs           = NO_SVHS,
14052bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask       = 0x4f8a00,
14062bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		/* 0x100000: 1=MSP enabled (0=disable again)
14072bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		* 0x010000: Connected to "S0" on tda9880 (0=Pal/BG, 1=NTSC) */
14088bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomux        = {0x947fff, 0x987fff,0x947fff,0x947fff },
14098bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomute 	= 0x947fff,
14102bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		/* tvtuner, radio,   external,internal, mute,  stereo
14112bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		* tuner, Composit, SVid, Composit-on-Svid-adapter */
14126f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel         = MUXSEL(2, 3, 0, 1),
14132bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_type     = TUNER_MT2032,
14142bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
14152bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll		= PLL_28,
14162bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.has_radio	= 1,
14172bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
14185a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_AIMMS] = {
14192bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		/* Philip Blundell <pb@nexus.co.uk> */
14202bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name           = "Active Imaging AIMMS",
14212bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs   = 1,
14224c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 0, */
1423abb0362f49c361f71b5aa6d244d4847145ed53c1Trent Piepho		.tuner_type     = TUNER_ABSENT,
14242bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
14252bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll            = PLL_28,
14266f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel         = MUXSEL(2),
14272bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask       = 0
14282bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
14295a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_PV_BT878P_PLUS] = {
14302bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		/* Tomasz Pyra <hellfire@sedez.iq.pl> */
14312bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name           = "Prolink Pixelview PV-BT878P+ (Rev.4C,8E)",
14322bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs   = 3,
14334c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 4, */
14342bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.svhs           = 2,
14352bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask       = 15,
14366f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel         = MUXSEL(2, 3, 1, 1),
14378bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomux        = { 0, 0, 11, 7 }, /* TV and Radio with same GPIO ! */
14388bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomute 	= 13,
14392bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll            = PLL_28,
14408c2c0dfe4da28a152c0de2c2ca3a66c1bc2fef7cTrent Piepho		.tuner_type     = TUNER_LG_PAL_I_FM,
14412bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
14422bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.has_remote     = 1,
14432bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		/* GPIO wiring:
14442bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab			GPIO0: U4.A0 (hef4052bt)
14452bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab			GPIO1: U4.A1
14462bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab			GPIO2: U4.A1 (second hef4052bt)
14472bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab			GPIO3: U4.nEN, U5.A0, A5.nEN
14482bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab			GPIO8-15: vrd866b ?
14492bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		*/
14502bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
14515a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_FLYVIDEO98EZ] = {
14522bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name		= "Lifeview FlyVideo 98EZ (capture only) LR51",
14532bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs	= 4,
14544c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 0, */
14552bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.svhs		= 2,
14566f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		/* AV1, AV2, SVHS, CVid adapter on SVHS */
14576f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel		= MUXSEL(2, 3, 1, 1),
14582bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll		= PLL_28,
14592bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.no_msp34xx	= 1,
1460abb0362f49c361f71b5aa6d244d4847145ed53c1Trent Piepho		.tuner_type	= TUNER_ABSENT,
14612bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
14622bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
14632bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab
14642bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	/* ---- card 0x48 ---------------------------------- */
14655a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_PV_BT878P_9B] = {
14662bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		/* Dariusz Kowalewski <darekk@automex.pl> */
14672bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name		= "Prolink Pixelview PV-BT878P+9B (PlayTV Pro rev.9B FM+NICAM)",
14682bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs	= 4,
14694c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 1, */
14702bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.svhs		= 2,
14712bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask	= 0x3f,
14726f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel		= MUXSEL(2, 3, 1, 1),
14738bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomux 	= { 0x01, 0x00, 0x03, 0x03 },
14748bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomute 	= 0x09,
14752bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.no_msp34xx	= 1,
14762bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll		= PLL_28,
14778c2c0dfe4da28a152c0de2c2ca3a66c1bc2fef7cTrent Piepho		.tuner_type	= TUNER_PHILIPS_PAL,
14782bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
14794b9b936f278163614543d66f8e8c93d5484dd148Nickolay V. Shmyrev		.audio_mode_gpio= pvbt878p9b_audio, /* Note: not all cards have stereo */
14802bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.has_radio	= 1,  /* Note: not all cards have radio */
14812bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.has_remote     = 1,
14822bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		/* GPIO wiring:
14832bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab			GPIO0: A0 hef4052
14842bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab			GPIO1: A1 hef4052
14852bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab			GPIO3: nEN hef4052
14862bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab			GPIO8-15: vrd866b
14872bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab			GPIO20,22,23: R30,R29,R28
14882bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		*/
14892bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
149057437c1da54e5cf7d536d72d61e77ebeb528a87dsensoray-dev	[BTTV_BOARD_SENSORAY311_611] = {
14912bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		/* Clay Kunz <ckunz@mail.arc.nasa.gov> */
149257437c1da54e5cf7d536d72d61e77ebeb528a87dsensoray-dev		/* you must jumper JP5 for the 311 card (PC/104+) to work */
149357437c1da54e5cf7d536d72d61e77ebeb528a87dsensoray-dev		.name           = "Sensoray 311/611",
14942bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs   = 5,
14954c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 0, */
14962bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.svhs           = 4,
14972bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask       = 0,
14986f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel         = MUXSEL(2, 3, 1, 0, 0),
14998bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomux        = { 0 },
1500abb0362f49c361f71b5aa6d244d4847145ed53c1Trent Piepho		.tuner_type     = TUNER_ABSENT,
15012bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
15022bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
15035a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_RV605] = {
15042bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		/* Miguel Freitas <miguel@cetuc.puc-rio.br> */
15052bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name           = "RemoteVision MX (RV605)",
15062bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs   = 16,
15074c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 0, */
15084c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		.svhs           = NO_SVHS,
15092bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask       = 0x00,
15102bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask2      = 0x07ff,
15116f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel         = MUXSEL(3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3),
15122bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.no_msp34xx     = 1,
1513abb0362f49c361f71b5aa6d244d4847145ed53c1Trent Piepho		.tuner_type     = TUNER_ABSENT,
15142bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
15152bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.muxsel_hook    = rv605_muxsel,
15162bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
15175a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_POWERCLR_MTV878] = {
15182bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name           = "Powercolor MTV878/ MTV878R/ MTV878F",
15192bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs   = 3,
15204c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 2, */
15212bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.svhs           = 2,
15222bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask       = 0x1C800F,  /* Bit0-2: Audio select, 8-12:remote control 14:remote valid 15:remote reset */
15236f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel         = MUXSEL(2, 1, 1),
15248bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomux        = { 0, 1, 2, 2 },
15258bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomute 	= 4,
15262bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_type     = TUNER_PHILIPS_PAL,
15272bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
15282bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll		= PLL_28,
15292bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.has_radio	= 1,
15302bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
15312bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab
15322bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	/* ---- card 0x4c ---------------------------------- */
15335a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_WINDVR] = {
15342bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		/* Masaki Suzuki <masaki@btree.org> */
15352bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name           = "Canopus WinDVR PCI (COMPAQ Presario 3524JP, 5112JP)",
15362bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs   = 3,
15374c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 1, */
15382bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.svhs           = 2,
15392bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask       = 0x140007,
15406f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel         = MUXSEL(2, 3, 1, 1),
15418bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomux        = { 0, 1, 2, 3 },
15428bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomute 	= 4,
15432bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_type     = TUNER_PHILIPS_NTSC,
15442bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
15454b9b936f278163614543d66f8e8c93d5484dd148Nickolay V. Shmyrev		.audio_mode_gpio= windvr_audio,
15462bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
15475a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_GRANDTEC_MULTI] = {
15482bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name           = "GrandTec Multi Capture Card (Bt878)",
15492bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs   = 4,
15504c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 0, */
15514c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		.svhs           = NO_SVHS,
15522bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask       = 0,
15536f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel         = MUXSEL(2, 3, 1, 0),
15548bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomux        = { 0 },
15552bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.no_msp34xx     = 1,
15562bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll            = PLL_28,
1557abb0362f49c361f71b5aa6d244d4847145ed53c1Trent Piepho		.tuner_type     = TUNER_ABSENT,
15582bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
15592bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
15605a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_KWORLD] = {
15612bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name           = "Jetway TV/Capture JW-TV878-FBK, Kworld KW-TV878RF",
15622bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs   = 4,
15634c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 3, */
15642bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.svhs           = 2,
15652bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask       = 7,
15666f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		/* Tuner, SVid, SVHS, SVid to SVHS connector */
15676f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel         = MUXSEL(2, 3, 1, 1),
15688bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomux        = { 0, 0, 4, 4 },/* Yes, this tuner uses the same audio output for TV and FM radio!
15692bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab						* This card lacks external Audio In, so we mute it on Ext. & Int.
15702bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab						* The PCB can take a sbx1637/sbx1673, wiring unknown.
15712bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab						* This card lacks PCI subsystem ID, sigh.
15728bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil						* gpiomux =1: lower volume, 2+3: mute
15732bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab						* btwincap uses 0x80000/0x80003
15742bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab						*/
15758bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomute 	= 4,
15762bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.no_msp34xx     = 1,
15772bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll            = PLL_28,
15788c2c0dfe4da28a152c0de2c2ca3a66c1bc2fef7cTrent Piepho		.tuner_type     = TUNER_PHILIPS_PAL,
15792bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
15802bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		/* Samsung TCPA9095PC27A (BG+DK), philips compatible, w/FM, stereo and
15812bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		radio signal strength indicators work fine. */
15822bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.has_radio	= 1,
15832bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		/* GPIO Info:
15842bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab			GPIO0,1:   HEF4052 A0,A1
15852bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab			GPIO2:     HEF4052 nENABLE
15862bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab			GPIO3-7:   n.c.
15872bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab			GPIO8-13:  IRDC357 data0-5 (data6 n.c. ?) [chip not present on my card]
15882bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab			GPIO14,15: ??
15892bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab			GPIO16-21: n.c.
15902bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab			GPIO22,23: ??
15912bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab			??       : mtu8b56ep microcontroller for IR (GPIO wiring unknown)*/
15922bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
15935a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_DSP_TCVIDEO] = {
15942bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		/* Arthur Tetzlaff-Deas, DSP Design Ltd <software@dspdesign.com> */
15952bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name           = "DSP Design TCVIDEO",
15962bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs   = 4,
15974c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		.svhs           = NO_SVHS,
15986f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel         = MUXSEL(2, 3, 1, 0),
15992bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll            = PLL_28,
16008c2c0dfe4da28a152c0de2c2ca3a66c1bc2fef7cTrent Piepho		.tuner_type     = UNSET,
16012bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
16022bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
16032bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab
16042bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		/* ---- card 0x50 ---------------------------------- */
16055a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_HAUPPAUGEPVR] = {
16062bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name           = "Hauppauge WinTV PVR",
16072bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs   = 4,
16084c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 1, */
16092bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.svhs           = 2,
16106f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel         = MUXSEL(2, 0, 1, 1),
16112bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll            = PLL_28,
16128c2c0dfe4da28a152c0de2c2ca3a66c1bc2fef7cTrent Piepho		.tuner_type     = UNSET,
16132bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
16142bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab
16152bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask       = 7,
16168bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomux        = {7},
16172bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
16185a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_GVBCTV5PCI] = {
16192bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name           = "IODATA GV-BCTV5/PCI",
16202bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs   = 3,
16214c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 1, */
16222bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.svhs           = 2,
16232bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask       = 0x0f0f80,
16246f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel         = MUXSEL(2, 3, 1, 0),
16258bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomux        = {0x030000, 0x010000, 0, 0 },
16268bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomute 	= 0x020000,
16272bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.no_msp34xx     = 1,
16282bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll            = PLL_28,
16292bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_type     = TUNER_PHILIPS_NTSC_M,
16302bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
16314b9b936f278163614543d66f8e8c93d5484dd148Nickolay V. Shmyrev		.audio_mode_gpio= gvbctv5pci_audio,
16322bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.has_radio      = 1,
16332bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
16345a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_OSPREY1x0] = {
16352bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name           = "Osprey 100/150 (878)", /* 0x1(2|3)-45C6-C1 */
16362bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs   = 4,                  /* id-inputs-clock */
16374c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 0, */
16382bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.svhs           = 3,
16396f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel         = MUXSEL(3, 2, 0, 1),
16402bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll            = PLL_28,
1641abb0362f49c361f71b5aa6d244d4847145ed53c1Trent Piepho		.tuner_type     = TUNER_ABSENT,
16422bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
16432bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.no_msp34xx     = 1,
16442bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.no_tda7432     = 1,
16452bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
16465a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_OSPREY1x0_848] = {
16472bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name           = "Osprey 100/150 (848)", /* 0x04-54C0-C1 & older boards */
16482bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs   = 3,
16494c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 0, */
16502bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.svhs           = 2,
16516f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel         = MUXSEL(2, 3, 1),
16522bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll            = PLL_28,
1653abb0362f49c361f71b5aa6d244d4847145ed53c1Trent Piepho		.tuner_type     = TUNER_ABSENT,
16542bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
16552bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.no_msp34xx     = 1,
16562bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.no_tda7432     = 1,
16572bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
16582bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab
16592bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		/* ---- card 0x54 ---------------------------------- */
16605a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_OSPREY101_848] = {
16612bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name           = "Osprey 101 (848)", /* 0x05-40C0-C1 */
16622bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs   = 2,
16634c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 0, */
16642bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.svhs           = 1,
16656f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel         = MUXSEL(3, 1),
16662bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll            = PLL_28,
1667abb0362f49c361f71b5aa6d244d4847145ed53c1Trent Piepho		.tuner_type     = TUNER_ABSENT,
16682bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
16692bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.no_msp34xx     = 1,
16702bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.no_tda7432     = 1,
16712bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
16725a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_OSPREY1x1] = {
16732bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name           = "Osprey 101/151",       /* 0x1(4|5)-0004-C4 */
16742bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs   = 1,
16754c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 0, */
16764c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		.svhs           = NO_SVHS,
16776f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel         = MUXSEL(0),
16782bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll            = PLL_28,
1679abb0362f49c361f71b5aa6d244d4847145ed53c1Trent Piepho		.tuner_type     = TUNER_ABSENT,
16802bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
16812bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.no_msp34xx     = 1,
16822bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.no_tda7432     = 1,
16832bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
16845a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_OSPREY1x1_SVID] = {
16852bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name           = "Osprey 101/151 w/ svid",  /* 0x(16|17|20)-00C4-C1 */
16862bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs   = 2,
16874c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 0, */
16882bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.svhs           = 1,
16896f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel         = MUXSEL(0, 1),
16902bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll            = PLL_28,
1691abb0362f49c361f71b5aa6d244d4847145ed53c1Trent Piepho		.tuner_type     = TUNER_ABSENT,
16922bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
16932bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.no_msp34xx     = 1,
16942bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.no_tda7432     = 1,
16952bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
16965a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_OSPREY2xx] = {
16972bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name           = "Osprey 200/201/250/251",  /* 0x1(8|9|E|F)-0004-C4 */
16982bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs   = 1,
16994c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 1, */
17004c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		.svhs           = NO_SVHS,
17016f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel         = MUXSEL(0),
17022bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll            = PLL_28,
1703abb0362f49c361f71b5aa6d244d4847145ed53c1Trent Piepho		.tuner_type	= TUNER_ABSENT,
17042bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
17052bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.no_msp34xx     = 1,
17062bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.no_tda7432     = 1,
17072bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
17082bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab
17092bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		/* ---- card 0x58 ---------------------------------- */
17105a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_OSPREY2x0_SVID] = {
17112bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name           = "Osprey 200/250",   /* 0x1(A|B)-00C4-C1 */
17122bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs   = 2,
17134c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 1, */
17142bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.svhs           = 1,
17156f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel         = MUXSEL(0, 1),
17162bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll            = PLL_28,
1717abb0362f49c361f71b5aa6d244d4847145ed53c1Trent Piepho		.tuner_type	= TUNER_ABSENT,
17182bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
17192bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.no_msp34xx     = 1,
17202bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.no_tda7432     = 1,
17212bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
17225a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_OSPREY2x0] = {
172352398efcfa77aeb7e95ef99c9edadd909eb562a5Michael Krufky		.name           = "Osprey 210/220/230",   /* 0x1(A|B)-04C0-C1 */
17242bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs   = 2,
17254c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 1, */
17262bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.svhs           = 1,
17276f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel         = MUXSEL(2, 3),
17282bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll            = PLL_28,
1729abb0362f49c361f71b5aa6d244d4847145ed53c1Trent Piepho		.tuner_type	= TUNER_ABSENT,
17302bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
17312bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.no_msp34xx     = 1,
17322bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.no_tda7432     = 1,
17332bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
17345a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_OSPREY500] = {
17352bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name           = "Osprey 500",   /* 500 */
17362bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs   = 2,
17374c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 1, */
17382bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.svhs           = 1,
17396f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel         = MUXSEL(2, 3),
17402bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll            = PLL_28,
1741abb0362f49c361f71b5aa6d244d4847145ed53c1Trent Piepho		.tuner_type     = TUNER_ABSENT,
17422bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
17432bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.no_msp34xx     = 1,
17442bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.no_tda7432     = 1,
17452bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
17465a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_OSPREY540] = {
17472bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name           = "Osprey 540",   /* 540 */
17482bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs   = 4,
17494c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 1, */
17502bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll            = PLL_28,
1751abb0362f49c361f71b5aa6d244d4847145ed53c1Trent Piepho		.tuner_type     = TUNER_ABSENT,
17522bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
17532bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.no_msp34xx     = 1,
17542bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.no_tda7432     = 1,
17552bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
17562bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab
17572bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		/* ---- card 0x5C ---------------------------------- */
17585a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_OSPREY2000] = {
17592bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name           = "Osprey 2000",  /* 2000 */
17602bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs   = 2,
17614c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 1, */
17622bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.svhs           = 1,
17636f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel         = MUXSEL(2, 3),
17642bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll            = PLL_28,
1765abb0362f49c361f71b5aa6d244d4847145ed53c1Trent Piepho		.tuner_type	= TUNER_ABSENT,
17662bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
17672bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.no_msp34xx     = 1,
17682bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.no_tda7432     = 1,      /* must avoid, conflicts with the bt860 */
17692bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
17705a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_IDS_EAGLE] = {
17712bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		/* M G Berberich <berberic@forwiss.uni-passau.de> */
17722bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name           = "IDS Eagle",
17732bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs   = 4,
17744c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 0, */
1775abb0362f49c361f71b5aa6d244d4847145ed53c1Trent Piepho		.tuner_type     = TUNER_ABSENT,
17762bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
17774c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		.svhs           = NO_SVHS,
17782bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask       = 0,
17796f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel         = MUXSEL(2, 2, 2, 2),
17802bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.muxsel_hook    = eagle_muxsel,
17812bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.no_msp34xx     = 1,
17822bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll            = PLL_28,
17832bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
17845a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_PINNACLESAT] = {
17852bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name           = "Pinnacle PCTV Sat",
17862bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs   = 2,
17874c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 0, */
17882bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.svhs           = 1,
1789abb0362f49c361f71b5aa6d244d4847145ed53c1Trent Piepho		.tuner_type     = TUNER_ABSENT,
17902bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
17912bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.no_msp34xx     = 1,
17922bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.no_tda7432     = 1,
17936f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel         = MUXSEL(3, 1),
17942bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll            = PLL_28,
17952bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.no_gpioirq     = 1,
17962bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.has_dvb        = 1,
17972bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
17985a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_FORMAC_PROTV] = {
17992bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name           = "Formac ProTV II (bt878)",
18002bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs   = 4,
18014c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 1, */
18022bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.svhs           = 3,
18032bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask       = 2,
18042bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		/* TV, Comp1, Composite over SVID con, SVID */
18056f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel         = MUXSEL(2, 3, 1, 1),
18068bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomux        = { 2, 2, 0, 0 },
18072bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll            = PLL_28,
18082bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.has_radio      = 1,
18092bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_type     = TUNER_PHILIPS_PAL,
18102bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
18112bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	/* sound routing:
18122bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		GPIO=0x00,0x01,0x03: mute (?)
18132bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		0x02: both TV and radio (tuner: FM1216/I)
18142bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		The card has onboard audio connectors labeled "cdrom" and "board",
18152bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		not soldered here, though unknown wiring.
18162bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		Card lacks: external audio in, pci subsystem id.
181724a70fdce872d70171b1f49dcd1a7c3a4e8396b2Mauro Carvalho Chehab	*/
18182bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
18192bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab
18202bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		/* ---- card 0x60 ---------------------------------- */
18215a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_MACHTV] = {
18222bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name           = "MachTV",
18232bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs   = 3,
18244c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 1, */
18254c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		.svhs           = NO_SVHS,
18262bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask       = 7,
18276f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel         = MUXSEL(2, 3, 1, 1),
18288bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomux        = { 0, 1, 2, 3},
18298bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomute 	= 4,
18308c2c0dfe4da28a152c0de2c2ca3a66c1bc2fef7cTrent Piepho		.tuner_type     = TUNER_PHILIPS_PAL,
18312bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
1832cf583ac40d06825bc850dc4f47627d7661aaa4f8Michael Krufky		.pll            = PLL_28,
18332bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
18345a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_EURESYS_PICOLO] = {
18352bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name           = "Euresys Picolo",
18362bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs   = 3,
18374c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 0, */
18382bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.svhs           = 2,
18392bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask       = 0,
18402bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.no_msp34xx     = 1,
18412bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.no_tda7432     = 1,
18426f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel         = MUXSEL(2, 0, 1),
18432bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll            = PLL_28,
1844abb0362f49c361f71b5aa6d244d4847145ed53c1Trent Piepho		.tuner_type     = TUNER_ABSENT,
18452bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
18462bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
18475a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_PV150] = {
18482bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		/* Luc Van Hoeylandt <luc@e-magic.be> */
18492bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name           = "ProVideo PV150", /* 0x4f */
18502bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs   = 2,
18514c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 0, */
18524c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		.svhs           = NO_SVHS,
18532bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask       = 0,
18546f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel         = MUXSEL(2, 3),
18558bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomux        = { 0 },
18562bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.no_msp34xx     = 1,
18572bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll            = PLL_28,
1858abb0362f49c361f71b5aa6d244d4847145ed53c1Trent Piepho		.tuner_type     = TUNER_ABSENT,
18592bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
18602bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
18615a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_AD_TVK503] = {
18622bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		/* Hiroshi Takekawa <sian@big.or.jp> */
18632bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		/* This card lacks subsystem ID */
18642bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name           = "AD-TVK503", /* 0x63 */
18652bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs   = 4,
18664c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 1, */
18672bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.svhs           = 2,
18682bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask       = 0x001e8007,
18696f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel         = MUXSEL(2, 3, 1, 0),
18702bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		/*                  Tuner, Radio, external, internal, off,  on */
18718bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomux        = { 0x08,  0x0f,  0x0a,     0x08 },
18728bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomute 	= 0x0f,
18732bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.no_msp34xx     = 1,
18742bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll            = PLL_28,
18758c2c0dfe4da28a152c0de2c2ca3a66c1bc2fef7cTrent Piepho		.tuner_type     = TUNER_PHILIPS_NTSC,
18762bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
18774b9b936f278163614543d66f8e8c93d5484dd148Nickolay V. Shmyrev		.audio_mode_gpio= adtvk503_audio,
18782bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
18792bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab
18802bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		/* ---- card 0x64 ---------------------------------- */
18815a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_HERCULES_SM_TV] = {
18822bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name           = "Hercules Smart TV Stereo",
18832bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs   = 4,
18844c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 1, */
18852bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.svhs           = 2,
18862bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask       = 0x00,
18876f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel         = MUXSEL(2, 3, 1, 1),
18882bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.no_msp34xx     = 1,
18892bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll            = PLL_28,
18908c2c0dfe4da28a152c0de2c2ca3a66c1bc2fef7cTrent Piepho		.tuner_type     = TUNER_PHILIPS_PAL,
18912bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
18922bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		/* Notes:
18932bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		- card lacks subsystem ID
18942bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		- stereo variant w/ daughter board with tda9874a @0xb0
18952bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		- Audio Routing:
18962bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab			always from tda9874 independent of GPIO (?)
18972bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab			external line in: unknown
18982bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		- Other chips: em78p156elp @ 0x96 (probably IR remote control)
18992bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab			hef4053 (instead 4052) for unknown function
19002bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		*/
19012bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
19025a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_PACETV] = {
19032bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name           = "Pace TV & Radio Card",
19042bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs   = 4,
19054c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 1, */
19062bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.svhs           = 2,
19076f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		/* Tuner, CVid, SVid, CVid over SVid connector */
19086f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel         = MUXSEL(2, 3, 1, 1),
19092bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask       = 0,
19102bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.no_tda7432     = 1,
19118c2c0dfe4da28a152c0de2c2ca3a66c1bc2fef7cTrent Piepho		.tuner_type     = TUNER_PHILIPS_PAL_I,
19122bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
19132bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.has_radio      = 1,
19142bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll            = PLL_28,
19152bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		/* Bt878, Bt832, FI1246 tuner; no pci subsystem id
19162bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		only internal line out: (4pin header) RGGL
19172bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		Radio must be decoded by msp3410d (not routed through)*/
19182bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		/*
19192bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.digital_mode   = DIGITAL_MODE_CAMERA,  todo!
19202bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		*/
19212bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
19225a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_IVC200] = {
19232bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		/* Chris Willing <chris@vislab.usyd.edu.au> */
19242bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name           = "IVC-200",
19252bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs   = 1,
19264c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 0, */
1927abb0362f49c361f71b5aa6d244d4847145ed53c1Trent Piepho		.tuner_type     = TUNER_ABSENT,
19282bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
19294c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		.svhs           = NO_SVHS,
1930ade0815c16734e8c25dbac9faf5b5d63bcccd533Douglas Kosovic		.gpiomask       = 0xdf,
19316f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel         = MUXSEL(2),
1932ade0815c16734e8c25dbac9faf5b5d63bcccd533Douglas Kosovic		.pll            = PLL_28,
1933ade0815c16734e8c25dbac9faf5b5d63bcccd533Douglas Kosovic	},
1934ade0815c16734e8c25dbac9faf5b5d63bcccd533Douglas Kosovic	[BTTV_BOARD_IVCE8784] = {
1935ade0815c16734e8c25dbac9faf5b5d63bcccd533Douglas Kosovic		.name           = "IVCE-8784",
1936ade0815c16734e8c25dbac9faf5b5d63bcccd533Douglas Kosovic		.video_inputs   = 1,
19374c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 0, */
1938abb0362f49c361f71b5aa6d244d4847145ed53c1Trent Piepho		.tuner_type     = TUNER_ABSENT,
1939ade0815c16734e8c25dbac9faf5b5d63bcccd533Douglas Kosovic		.tuner_addr     = ADDR_UNSET,
19404c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		.svhs           = NO_SVHS,
19412bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask       = 0xdf,
19426f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel         = MUXSEL(2),
19432bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll            = PLL_28,
19442bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
19455a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_XGUARD] = {
19462bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name           = "Grand X-Guard / Trust 814PCI",
19472bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs   = 16,
19484c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 0, */
19494c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		.svhs           = NO_SVHS,
19508c2c0dfe4da28a152c0de2c2ca3a66c1bc2fef7cTrent Piepho		.tuner_type     = TUNER_ABSENT,
19512bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
19522bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask2      = 0xff,
19536f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel         = MUXSEL(2,2,2,2, 3,3,3,3, 1,1,1,1, 0,0,0,0),
19542bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.muxsel_hook    = xguard_muxsel,
19552bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.no_msp34xx     = 1,
19562bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.no_tda7432     = 1,
19572bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll            = PLL_28,
19582bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
19592bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab
19602bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		/* ---- card 0x68 ---------------------------------- */
19615a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_NEBULA_DIGITV] = {
19622bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name           = "Nebula Electronics DigiTV",
19632bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs   = 1,
19644c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		.svhs           = NO_SVHS,
19656f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel         = MUXSEL(2, 3, 1, 0),
19662bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.no_msp34xx     = 1,
19672bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.no_tda7432     = 1,
19682bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll            = PLL_28,
1969abb0362f49c361f71b5aa6d244d4847145ed53c1Trent Piepho		.tuner_type     = TUNER_ABSENT,
19702bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
19712bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.has_dvb        = 1,
19726c6c0b2c27e70c3593e023882fabb1cebcbd077eMark Weaver		.has_remote	= 1,
19736c6c0b2c27e70c3593e023882fabb1cebcbd077eMark Weaver		.gpiomask	= 0x1b,
19742bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.no_gpioirq     = 1,
19752bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
19765a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_PV143] = {
19772bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		/* Jorge Boncompte - DTI2 <jorge@dti2.net> */
19782bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name           = "ProVideo PV143",
19792bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs   = 4,
19804c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 0, */
19814c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		.svhs           = NO_SVHS,
19822bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask       = 0,
19836f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel         = MUXSEL(2, 3, 1, 0),
19848bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomux        = { 0 },
19852bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.no_msp34xx     = 1,
19862bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll            = PLL_28,
1987abb0362f49c361f71b5aa6d244d4847145ed53c1Trent Piepho		.tuner_type     = TUNER_ABSENT,
19882bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
19892bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
199005583625710dfd75880a6cbb68292929d1d4c33cDirk Heer	[BTTV_BOARD_VD009X1_VD011_MINIDIN] = {
19912bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		/* M.Klahr@phytec.de */
199205583625710dfd75880a6cbb68292929d1d4c33cDirk Heer		.name           = "PHYTEC VD-009-X1 VD-011 MiniDIN (bt878)",
19932bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs   = 4,
19944c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 0, */
19952bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.svhs           = 3,
19962bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask       = 0x00,
19976f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel         = MUXSEL(2, 3, 1, 0),
19988bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomux        = { 0, 0, 0, 0 }, /* card has no audio */
19992bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll            = PLL_28,
2000abb0362f49c361f71b5aa6d244d4847145ed53c1Trent Piepho		.tuner_type     = TUNER_ABSENT,
20012bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
20022bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
200305583625710dfd75880a6cbb68292929d1d4c33cDirk Heer	[BTTV_BOARD_VD009X1_VD011_COMBI] = {
200405583625710dfd75880a6cbb68292929d1d4c33cDirk Heer		.name           = "PHYTEC VD-009-X1 VD-011 Combi (bt878)",
20052bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs   = 4,
20064c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 0, */
20072bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.svhs           = 3,
20082bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask       = 0x00,
20096f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel         = MUXSEL(2, 3, 1, 1),
20108bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomux        = { 0, 0, 0, 0 }, /* card has no audio */
20112bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll            = PLL_28,
2012abb0362f49c361f71b5aa6d244d4847145ed53c1Trent Piepho		.tuner_type     = TUNER_ABSENT,
20132bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
20142bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
20152bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab
20162bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		/* ---- card 0x6c ---------------------------------- */
20175a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_VD009_MINIDIN] = {
20182bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name           = "PHYTEC VD-009 MiniDIN (bt878)",
20192bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs   = 10,
20204c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 0, */
20212bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.svhs           = 9,
20222bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask       = 0x00,
202315f8eeb2a86b969d82bfca5d54f1fb30c35cf243Trent Piepho		.gpiomask2      = 0x03, /* used for external vodeo mux */
20246f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel         = MUXSEL(2, 2, 2, 2, 3, 3, 3, 3, 1, 0),
202515f8eeb2a86b969d82bfca5d54f1fb30c35cf243Trent Piepho		.muxsel_hook	= phytec_muxsel,
20268bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomux        = { 0, 0, 0, 0 }, /* card has no audio */
20272bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll            = PLL_28,
2028abb0362f49c361f71b5aa6d244d4847145ed53c1Trent Piepho		.tuner_type     = TUNER_ABSENT,
20292bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
20302bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
20315a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_VD009_COMBI] = {
20322bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name           = "PHYTEC VD-009 Combi (bt878)",
20332bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs   = 10,
20344c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 0, */
20352bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.svhs           = 9,
20362bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask       = 0x00,
203715f8eeb2a86b969d82bfca5d54f1fb30c35cf243Trent Piepho		.gpiomask2      = 0x03, /* used for external vodeo mux */
20386f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel         = MUXSEL(2, 2, 2, 2, 3, 3, 3, 3, 1, 1),
203915f8eeb2a86b969d82bfca5d54f1fb30c35cf243Trent Piepho		.muxsel_hook	= phytec_muxsel,
20408bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomux        = { 0, 0, 0, 0 }, /* card has no audio */
20412bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll            = PLL_28,
2042abb0362f49c361f71b5aa6d244d4847145ed53c1Trent Piepho		.tuner_type     = TUNER_ABSENT,
20432bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
20442bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
20455a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_IVC100] = {
20462bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name           = "IVC-100",
20472bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs   = 4,
20484c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 0, */
2049abb0362f49c361f71b5aa6d244d4847145ed53c1Trent Piepho		.tuner_type     = TUNER_ABSENT,
20502bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
20514c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		.svhs           = NO_SVHS,
20522bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask       = 0xdf,
20536f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel         = MUXSEL(2, 3, 1, 0),
20542bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll            = PLL_28,
20552bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
20565a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_IVC120] = {
20572bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		/* IVC-120G - Alan Garfield <alan@fromorbit.com> */
20582bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name           = "IVC-120G",
20592bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs   = 16,
20604c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 0, */
2061abb0362f49c361f71b5aa6d244d4847145ed53c1Trent Piepho		.tuner_type     = TUNER_ABSENT,
20622bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
20634c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		.svhs           = NO_SVHS,   /* card has no svhs */
20642bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.no_msp34xx     = 1,
20652bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.no_tda7432     = 1,
20662bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask       = 0x00,
20676f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel         = MUXSEL(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
20682bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.muxsel_hook    = ivc120_muxsel,
20692bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll            = PLL_28,
20702bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
20712bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab
20722bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		/* ---- card 0x70 ---------------------------------- */
20735a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_PC_HDTV] = {
20742bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name           = "pcHDTV HD-2000 TV",
20752bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs   = 4,
20764c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 1, */
20772bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.svhs           = 2,
20786f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel         = MUXSEL(2, 3, 1, 0),
2079ab8b870e430d3e2cfb299f81e0ae0aef7fe5bfdaMichael Krufky		.tuner_type     = TUNER_PHILIPS_FCV1236D,
20802bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
20812bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.has_dvb        = 1,
20822bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
20835a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_TWINHAN_DST] = {
20842bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name           = "Twinhan DST + clones",
20852bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.no_msp34xx     = 1,
20862bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.no_tda7432     = 1,
20872bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_type     = TUNER_ABSENT,
20882bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
20892bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.no_video       = 1,
20902bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.has_dvb        = 1,
20912bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
20925a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_WINFASTVC100] = {
20932bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name           = "Winfast VC100",
20942bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs   = 3,
20954c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 0, */
20962bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.svhs           = 1,
20976f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		/* Vid In, SVid In, Vid over SVid in connector */
20986f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel		= MUXSEL(3, 1, 1, 3),
20992bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.no_msp34xx     = 1,
21002bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.no_tda7432     = 1,
21012bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_type     = TUNER_ABSENT,
21022bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
21032bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll            = PLL_28,
21042bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
21055a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_TEV560] = {
21062bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name           = "Teppro TEV-560/InterVision IV-560",
21072bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs   = 3,
21084c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 1, */
21092bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.svhs           = 2,
21102bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask       = 3,
21116f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel         = MUXSEL(2, 3, 1, 1),
21128bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomux        = { 1, 1, 1, 1 },
21132bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_type     = TUNER_PHILIPS_PAL,
21142bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
21152bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll            = PLL_35,
21162bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
21172bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab
21182bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		/* ---- card 0x74 ---------------------------------- */
21195a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_SIMUS_GVC1100] = {
21202bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name           = "SIMUS GVC1100",
21212bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs   = 4,
21224c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 0, */
21234c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		.svhs           = NO_SVHS,
2124abb0362f49c361f71b5aa6d244d4847145ed53c1Trent Piepho		.tuner_type     = TUNER_ABSENT,
21252bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
21262bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll            = PLL_28,
21276f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel         = MUXSEL(2, 2, 2, 2),
21282bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask       = 0x3F,
21292bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.muxsel_hook    = gvc1100_muxsel,
21302bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
21315a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_NGSTV_PLUS] = {
21322bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		/* Carlos Silva r3pek@r3pek.homelinux.org || card 0x75 */
21332bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name           = "NGS NGSTV+",
21342bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs   = 3,
21352bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.svhs           = 2,
21362bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask       = 0x008007,
21376f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel         = MUXSEL(2, 3, 0, 0),
21388bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomux        = { 0, 0, 0, 0 },
21398bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomute 	= 0x000003,
21402bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll            = PLL_28,
21412bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_type     = TUNER_PHILIPS_PAL,
21422bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
21432bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.has_remote     = 1,
21442bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
21455a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_LMLBT4] = {
21462bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		/* http://linuxmedialabs.com */
21472bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name           = "LMLBT4",
21482bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs   = 4, /* IN1,IN2,IN3,IN4 */
21494c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 0, */
21504c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		.svhs           = NO_SVHS,
21516f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel         = MUXSEL(2, 3, 1, 0),
21522bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.no_msp34xx     = 1,
21532bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.no_tda7432     = 1,
2154abb0362f49c361f71b5aa6d244d4847145ed53c1Trent Piepho		.tuner_type     = TUNER_ABSENT,
21552bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
21562bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
21575a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_TEKRAM_M205] = {
21582bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		/* Helmroos Harri <harri.helmroos@pp.inet.fi> */
21592bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name           = "Tekram M205 PRO",
21602bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs   = 3,
21614c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 1, */
21622bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_type     = TUNER_PHILIPS_PAL,
21632bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
21642bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.svhs           = 2,
21652bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask       = 0x68,
21666f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel         = MUXSEL(2, 3, 1),
21678bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomux        = { 0x68, 0x68, 0x61, 0x61 },
21682bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll            = PLL_28,
21692bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
21702bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab
21712bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		/* ---- card 0x78 ---------------------------------- */
21725a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_CONTVFMI] = {
21732bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		/* Javier Cendan Ares <jcendan@lycos.es> */
21742bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		/* bt878 TV + FM without subsystem ID */
21752bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name           = "Conceptronic CONTVFMi",
21762bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs   = 3,
21774c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 1, */
21782bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.svhs           = 2,
21792bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask       = 0x008007,
21806f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel         = MUXSEL(2, 3, 1, 1),
21818bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomux        = { 0, 1, 2, 2 },
21828bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomute 	= 3,
21832bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll            = PLL_28,
21842bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_type     = TUNER_PHILIPS_PAL,
21852bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
21862bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.has_remote     = 1,
21872bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.has_radio      = 1,
21882bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
21895a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_PICOLO_TETRA_CHIP] = {
21902bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		/*Eric DEBIEF <debief@telemsa.com>*/
219125985edcedea6396277003854657b5f3cb31a628Lucas De Marchi		/*EURESYS Picolo Tetra : 4 Conexant Fusion 878A, no audio, video input set with analog multiplexers GPIO controlled*/
219225985edcedea6396277003854657b5f3cb31a628Lucas De Marchi		/* adds picolo_tetra_muxsel(), picolo_tetra_init(), the following declaration strucure, and #define BTTV_BOARD_PICOLO_TETRA_CHIP*/
21932bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		/*0x79 in bttv.h*/
21942bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name           = "Euresys Picolo Tetra",
21952bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs   = 4,
21964c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 0, */
21974c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		.svhs           = NO_SVHS,
21982bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask       = 0,
21992bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask2      = 0x3C<<16,/*Set the GPIO[18]->GPIO[21] as output pin.==> drive the video inputs through analog multiplexers*/
22002bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.no_msp34xx     = 1,
22012bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.no_tda7432     = 1,
22026f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		/*878A input is always MUX0, see above.*/
22036f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel         = MUXSEL(2, 2, 2, 2),
22048bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomux        = { 0, 0, 0, 0 }, /* card has no audio */
22052bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll            = PLL_28,
22062bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.muxsel_hook    = picolo_tetra_muxsel,/*Required as it doesn't follow the classic input selection policy*/
2207abb0362f49c361f71b5aa6d244d4847145ed53c1Trent Piepho		.tuner_type     = TUNER_ABSENT,
22082bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
22092bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
22105a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_SPIRIT_TV] = {
22112bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		/* Spirit TV Tuner from http://spiritmodems.com.au */
22122bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		/* Stafford Goodsell <surge@goliath.homeunix.org> */
22132bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name           = "Spirit TV Tuner",
22142bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs   = 3,
22154c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 1, */
22162bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.svhs           = 2,
22172bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask       = 0x0000000f,
22186f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel         = MUXSEL(2, 1, 1),
22198bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomux        = { 0x02, 0x00, 0x00, 0x00 },
22202bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_type     = TUNER_TEMIC_PAL,
22212bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
22222bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.no_msp34xx     = 1,
22232bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
22245a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_AVDVBT_771] = {
22252bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		/* Wolfram Joost <wojo@frokaschwei.de> */
22262bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name           = "AVerMedia AVerTV DVB-T 771",
22272bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs   = 2,
22282bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.svhs           = 1,
22292bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_type     = TUNER_ABSENT,
22302bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
22316f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel         = MUXSEL(3, 3),
22322bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.no_msp34xx     = 1,
22332bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.no_tda7432     = 1,
22342bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll            = PLL_28,
22352bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.has_dvb        = 1,
22362bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.no_gpioirq     = 1,
22372bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.has_remote     = 1,
22382bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
22392bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		/* ---- card 0x7c ---------------------------------- */
22405a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_AVDVBT_761] = {
22412bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		/* Matt Jesson <dvb@jesson.eclipse.co.uk> */
22425a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab		/* Based on the Nebula card data - added remote and new card number - BTTV_BOARD_AVDVBT_761, see also ir-kbd-gpio.c */
22432bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name           = "AverMedia AverTV DVB-T 761",
22442bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs   = 2,
22452bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.svhs           = 1,
22466f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel         = MUXSEL(3, 1, 2, 0), /* Comp0, S-Video, ?, ? */
22472bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.no_msp34xx     = 1,
22482bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.no_tda7432     = 1,
22492bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll            = PLL_28,
2250abb0362f49c361f71b5aa6d244d4847145ed53c1Trent Piepho		.tuner_type     = TUNER_ABSENT,
22512bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
22522bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.has_dvb        = 1,
22532bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.no_gpioirq     = 1,
22542bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.has_remote     = 1,
22552bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
22565a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_MATRIX_VISIONSQ] = {
22572bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		/* andre.schwarz@matrix-vision.de */
22584c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		.name		= "MATRIX Vision Sigma-SQ",
22594c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		.video_inputs	= 16,
22604c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 0, */
22614c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		.svhs		= NO_SVHS,
22624c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		.gpiomask	= 0x0,
22636f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel		= MUXSEL(2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3),
22644c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		.muxsel_hook	= sigmaSQ_muxsel,
22654c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		.gpiomux	= { 0 },
22664c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		.no_msp34xx	= 1,
22674c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		.pll		= PLL_28,
22684c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		.tuner_type	= TUNER_ABSENT,
22694c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		.tuner_addr	= ADDR_UNSET,
22702bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
22715a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_MATRIX_VISIONSLC] = {
22722bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		/* andre.schwarz@matrix-vision.de */
22734c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		.name		= "MATRIX Vision Sigma-SLC",
22744c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		.video_inputs	= 4,
22754c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 0, */
22764c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		.svhs		= NO_SVHS,
22774c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		.gpiomask	= 0x0,
22786f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel		= MUXSEL(2, 2, 2, 2),
22794c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		.muxsel_hook	= sigmaSLC_muxsel,
22804c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		.gpiomux	= { 0 },
22814c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		.no_msp34xx	= 1,
22824c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		.pll		= PLL_28,
22834c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		.tuner_type	= TUNER_ABSENT,
22844c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		.tuner_addr	= ADDR_UNSET,
22852bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
22865a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab		/* BTTV_BOARD_APAC_VIEWCOMP */
22875a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_APAC_VIEWCOMP] = {
22882bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		/* Attila Kondoros <attila.kondoros@chello.hu> */
22892bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		/* bt878 TV + FM 0x00000000 subsystem ID */
22902bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name           = "APAC Viewcomp 878(AMAX)",
22912bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs   = 2,
22924c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 1, */
22934c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		.svhs           = NO_SVHS,
22942bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask       = 0xFF,
22956f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel         = MUXSEL(2, 3, 1, 1),
22968bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomux        = { 2, 0, 0, 0 },
22978bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomute 	= 10,
22982bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll            = PLL_28,
22992bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_type     = TUNER_PHILIPS_PAL,
23002bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
23012bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.has_remote     = 1,   /* miniremote works, see ir-kbd-gpio.c */
23022bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.has_radio      = 1,   /* not every card has radio */
23032bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
23042bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab
23052bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		/* ---- card 0x80 ---------------------------------- */
23065a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_DVICO_DVBT_LITE] = {
23072bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		/* Chris Pascoe <c.pascoe@itee.uq.edu.au> */
23082bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name           = "DViCO FusionHDTV DVB-T Lite",
23092bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.no_msp34xx     = 1,
23102bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.no_tda7432     = 1,
23112bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll            = PLL_28,
23122bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.no_video       = 1,
23132bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.has_dvb        = 1,
2314abb0362f49c361f71b5aa6d244d4847145ed53c1Trent Piepho		.tuner_type     = TUNER_ABSENT,
23152bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
23162bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
23175a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_VGEAR_MYVCD] = {
23182bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		/* Steven <photon38@pchome.com.tw> */
23192bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name           = "V-Gear MyVCD",
23202bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs   = 3,
23214c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 1, */
23222bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.svhs           = 2,
23232bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask       = 0x3f,
23246f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel         = MUXSEL(2, 3, 1, 0),
23258bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomux        = {0x31, 0x31, 0x31, 0x31 },
23268bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomute 	= 0x31,
23272bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.no_msp34xx     = 1,
23282bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll            = PLL_28,
23292bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_type     = TUNER_PHILIPS_NTSC_M,
23302bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
23312bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.has_radio      = 0,
23322bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
23335a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_SUPER_TV] = {
23342bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		/* Rick C <cryptdragoon@gmail.com> */
23352bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name           = "Super TV Tuner",
23362bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs   = 4,
23374c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 1, */
23382bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.svhs           = 2,
23396f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel         = MUXSEL(2, 3, 1, 0),
23402bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_type     = TUNER_PHILIPS_NTSC,
23412bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
23422bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask       = 0x008007,
23438bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomux        = { 0, 0x000001,0,0 },
23442bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.has_radio      = 1,
23452bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
23465a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_TIBET_CS16] = {
23472bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		/* Chris Fanning <video4linux@haydon.net> */
23482bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name           = "Tibet Systems 'Progress DVR' CS16",
23492bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs   = 16,
23504c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 0, */
23514c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		.svhs           = NO_SVHS,
23526f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel         = MUXSEL(2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2),
23532bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll		= PLL_28,
23542bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.no_msp34xx     = 1,
23552bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.no_tda7432	= 1,
2356abb0362f49c361f71b5aa6d244d4847145ed53c1Trent Piepho		.tuner_type     = TUNER_ABSENT,
23572bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
23582bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.muxsel_hook    = tibetCS16_muxsel,
23592bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
23605a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_KODICOM_4400R] = {
23612bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		/* Bill Brack <wbrack@mmm.com.hk> */
23622bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		/*
23632bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		* Note that, because of the card's wiring, the "master"
23642bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		* BT878A chip (i.e. the one which controls the analog switch
23652bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		* and must use this card type) is the 2nd one detected.  The
23662bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		* other 3 chips should use card type 0x85, whose description
23672bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		* follows this one.  There is a EEPROM on the card (which is
23682bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		* connected to the I2C of one of those other chips), but is
23692bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		* not currently handled.  There is also a facility for a
23702bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		* "monitor", which is also not currently implemented.
23712bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		*/
23722bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name           = "Kodicom 4400R (master)",
23732bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs	= 16,
23744c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 0, */
2375abb0362f49c361f71b5aa6d244d4847145ed53c1Trent Piepho		.tuner_type	= TUNER_ABSENT,
23762bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
23774c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		.svhs		= NO_SVHS,
23782bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		/* GPIO bits 0-9 used for analog switch:
23792bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		*   00 - 03:	camera selector
23802bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		*   04 - 06:	channel (controller) selector
23812bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		*   07:	data (1->on, 0->off)
23822bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		*   08:	strobe
23832bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		*   09:	reset
23842bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		* bit 16 is input from sync separator for the channel
23852bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		*/
23862bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask	= 0x0003ff,
23872bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.no_gpioirq     = 1,
23886f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel		= MUXSEL(3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3),
23892bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll		= PLL_28,
23902bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.no_msp34xx	= 1,
23912bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.no_tda7432	= 1,
23922bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.muxsel_hook	= kodicom4400r_muxsel,
23932bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
23945a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_KODICOM_4400R_SL] = {
23952bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		/* Bill Brack <wbrack@mmm.com.hk> */
23962bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		/* Note that, for reasons unknown, the "master" BT878A chip (i.e. the
23972bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		* one which controls the analog switch, and must use the card type)
23982bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		* is the 2nd one detected.  The other 3 chips should use this card
23992bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		* type
24002bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		*/
24012bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name		= "Kodicom 4400R (slave)",
24022bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs	= 16,
24034c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 0, */
2404abb0362f49c361f71b5aa6d244d4847145ed53c1Trent Piepho		.tuner_type	= TUNER_ABSENT,
24052bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
24064c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		.svhs		= NO_SVHS,
24072bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask	= 0x010000,
24082bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.no_gpioirq     = 1,
24096f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel		= MUXSEL(3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3),
24102bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll		= PLL_28,
24112bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.no_msp34xx	= 1,
24122bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.no_tda7432	= 1,
24132bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.muxsel_hook	= kodicom4400r_muxsel,
24142bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
24152bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		/* ---- card 0x86---------------------------------- */
24165a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_ADLINK_RTV24] = {
24172bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		/* Michael Henson <mhenson@clarityvi.com> */
24182bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		/* Adlink RTV24 with special unlock codes */
24192bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name           = "Adlink RTV24",
24202bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs   = 4,
24214c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 1, */
24222bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.svhs           = 2,
24236f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel         = MUXSEL(2, 3, 1, 0),
24248c2c0dfe4da28a152c0de2c2ca3a66c1bc2fef7cTrent Piepho		.tuner_type     = UNSET,
24252bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
24262bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll            = PLL_28,
24272bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
24282bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		/* ---- card 0x87---------------------------------- */
24295a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_DVICO_FUSIONHDTV_5_LITE] = {
243008e10972661db78d0e0a2d4a4c28fc3bf93617baMichael Krufky		/* Michael Krufky <mkrufky@linuxtv.org> */
24312bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name           = "DViCO FusionHDTV 5 Lite",
24329c26c8b169f4a7e2db9a3d5abd3ba74ea032dafdMichael Krufky		.tuner_type     = TUNER_LG_TDVS_H06XF, /* TDVS-H064F */
24332bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
24344b017415fc9ab63f7c0e49aced5e403c18d55659Michael Krufky		.video_inputs   = 3,
24354c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 1, */
24362bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.svhs           = 2,
24376f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel		= MUXSEL(2, 3, 1),
24382bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask       = 0x00e00007,
24398bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomux        = { 0x00400005, 0, 0x00000001, 0 },
24408bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomute 	= 0x00c00007,
24412bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.no_msp34xx     = 1,
24422bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.no_tda7432     = 1,
24432bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.has_dvb        = 1,
24442bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
24452bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		/* ---- card 0x88---------------------------------- */
24465a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_ACORP_Y878F] = {
24472e7c6dc3989136844eb63e05f9e4dc6608a763c6Mauro Carvalho Chehab		/* Mauro Carvalho Chehab <mchehab@infradead.org> */
24482bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name		= "Acorp Y878F",
24492bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs	= 3,
24504c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 1, */
24512bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.svhs		= 2,
24522bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask	= 0x01fe00,
24536f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel		= MUXSEL(2, 3, 1, 1),
24548bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomux        = { 0x001e00, 0, 0x018000, 0x014000 },
24558bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomute 	= 0x002000,
24562bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll		= PLL_28,
24572bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_type	= TUNER_YMEC_TVF66T5_B_DFF,
24582bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= 0xc1 >>1,
24592bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.has_radio	= 1,
24602bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
24612bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		/* ---- card 0x89 ---------------------------------- */
24625a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_CONCEPTRONIC_CTVFMI2] = {
24632bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.name           = "Conceptronic CTVFMi v2",
24642bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.video_inputs   = 3,
24654c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 1, */
24662bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.svhs           = 2,
24672bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.gpiomask       = 0x001c0007,
24686f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel         = MUXSEL(2, 3, 1, 1),
24698bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomux        = { 0, 1, 2, 2 },
24708bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomute 	= 3,
24712bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.pll            = PLL_28,
247224d412289d5508f033d11154f981b478f8831c0dRicardo Cerqueira		.tuner_type     = TUNER_TENA_9533_DI,
24732bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.tuner_addr	= ADDR_UNSET,
24742bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.has_remote     = 1,
24752bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab		.has_radio      = 1,
24762bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	},
247710c2c8b18a9cd29fc3f5faa5ad8e825dcc8b58e6Mauro Carvalho Chehab		/* ---- card 0x8a ---------------------------------- */
24785a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	[BTTV_BOARD_PV_BT878P_2E] = {
24794c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		.name		= "Prolink Pixelview PV-BT878P+ (Rev.2E)",
24804c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		.video_inputs	= 5,
24814c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 1, */
24824c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		.svhs		= 3,
24835221e21e5ecd3aebd2e8e3234bd18883ce720945Trent Piepho		.has_dig_in	= 1,
24844c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		.gpiomask	= 0x01fe00,
24856f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel		= MUXSEL(2, 3, 1, 1, 0), /* in 4 is digital */
24864c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .digital_mode= DIGITAL_MODE_CAMERA, */
24874c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		.gpiomux	= { 0x00400, 0x10400, 0x04400, 0x80000 },
24884c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		.gpiomute	= 0x12400,
24894c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		.no_msp34xx	= 1,
24904c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		.pll		= PLL_28,
24914c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		.tuner_type	= TUNER_LG_PAL_FM,
24924c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		.tuner_addr	= ADDR_UNSET,
24934c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		.has_remote	= 1,
249410c2c8b18a9cd29fc3f5faa5ad8e825dcc8b58e6Mauro Carvalho Chehab	},
249510c2c8b18a9cd29fc3f5faa5ad8e825dcc8b58e6Mauro Carvalho Chehab		/* ---- card 0x8b ---------------------------------- */
249610c2c8b18a9cd29fc3f5faa5ad8e825dcc8b58e6Mauro Carvalho Chehab	[BTTV_BOARD_PV_M4900] = {
249796de0e252cedffad61b3cb5e05662c591898e69aJan Engelhardt		/* Sérgio Fortier <sergiofortier@yahoo.com.br> */
249810c2c8b18a9cd29fc3f5faa5ad8e825dcc8b58e6Mauro Carvalho Chehab		.name           = "Prolink PixelView PlayTV MPEG2 PV-M4900",
249910c2c8b18a9cd29fc3f5faa5ad8e825dcc8b58e6Mauro Carvalho Chehab		.video_inputs   = 3,
25004c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 1, */
250110c2c8b18a9cd29fc3f5faa5ad8e825dcc8b58e6Mauro Carvalho Chehab		.svhs           = 2,
250210c2c8b18a9cd29fc3f5faa5ad8e825dcc8b58e6Mauro Carvalho Chehab		.gpiomask       = 0x3f,
25036f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel         = MUXSEL(2, 3, 1, 1),
25048bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomux        = { 0x21, 0x20, 0x24, 0x2c },
25058bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomute 	= 0x29,
250610c2c8b18a9cd29fc3f5faa5ad8e825dcc8b58e6Mauro Carvalho Chehab		.no_msp34xx     = 1,
250710c2c8b18a9cd29fc3f5faa5ad8e825dcc8b58e6Mauro Carvalho Chehab		.pll            = PLL_28,
250810c2c8b18a9cd29fc3f5faa5ad8e825dcc8b58e6Mauro Carvalho Chehab		.tuner_type     = TUNER_YMEC_TVF_5533MF,
250910c2c8b18a9cd29fc3f5faa5ad8e825dcc8b58e6Mauro Carvalho Chehab		.tuner_addr     = ADDR_UNSET,
251010c2c8b18a9cd29fc3f5faa5ad8e825dcc8b58e6Mauro Carvalho Chehab		.has_radio      = 1,
251110c2c8b18a9cd29fc3f5faa5ad8e825dcc8b58e6Mauro Carvalho Chehab		.has_remote     = 1,
2512f718e6e7a2c402195f3d2944605ef4b01e8e3347Kenth Andersson	},
2513cf583ac40d06825bc850dc4f47627d7661aaa4f8Michael Krufky		/* ---- card 0x8c ---------------------------------- */
2514cf784d554fdb94f21671830135dba56b507126cfTrent Piepho	/* Has four Bt878 chips behind a PCI bridge, each chip has:
2515cf784d554fdb94f21671830135dba56b507126cfTrent Piepho	     one external BNC composite input (mux 2)
2516cf784d554fdb94f21671830135dba56b507126cfTrent Piepho	     three internal composite inputs (unknown muxes)
2517cf784d554fdb94f21671830135dba56b507126cfTrent Piepho	     an 18-bit stereo A/D (CS5331A), which has:
2518cf784d554fdb94f21671830135dba56b507126cfTrent Piepho	       one external stereo unblanced (RCA) audio connection
2519cf784d554fdb94f21671830135dba56b507126cfTrent Piepho	       one (or 3?) internal stereo balanced (XLR) audio connection
2520cf784d554fdb94f21671830135dba56b507126cfTrent Piepho	       input is selected via gpio to a 14052B mux
2521cf784d554fdb94f21671830135dba56b507126cfTrent Piepho		 (mask=0x300, unbal=0x000, bal=0x100, ??=0x200,0x300)
2522cf784d554fdb94f21671830135dba56b507126cfTrent Piepho	       gain is controlled via an X9221A chip on the I2C bus @0x28
2523cf784d554fdb94f21671830135dba56b507126cfTrent Piepho	       sample rate is controlled via gpio to an MK1413S
2524cf784d554fdb94f21671830135dba56b507126cfTrent Piepho		 (mask=0x3, 32kHz=0x0, 44.1kHz=0x1, 48kHz=0x2, ??=0x3)
2525cf784d554fdb94f21671830135dba56b507126cfTrent Piepho	     There is neither a tuner nor an svideo input. */
2526f718e6e7a2c402195f3d2944605ef4b01e8e3347Kenth Andersson	[BTTV_BOARD_OSPREY440]  = {
2527f718e6e7a2c402195f3d2944605ef4b01e8e3347Kenth Andersson		.name           = "Osprey 440",
2528cf784d554fdb94f21671830135dba56b507126cfTrent Piepho		.video_inputs   = 4,
25294c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 2, */
25304c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		.svhs           = NO_SVHS,
25316f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel         = MUXSEL(2, 3, 0, 1), /* 3,0,1 are guesses */
2532cf784d554fdb94f21671830135dba56b507126cfTrent Piepho		.gpiomask	= 0x303,
2533cf784d554fdb94f21671830135dba56b507126cfTrent Piepho		.gpiomute	= 0x000, /* int + 32kHz */
2534cf784d554fdb94f21671830135dba56b507126cfTrent Piepho		.gpiomux	= { 0, 0, 0x000, 0x100},
2535f718e6e7a2c402195f3d2944605ef4b01e8e3347Kenth Andersson		.pll            = PLL_28,
2536abb0362f49c361f71b5aa6d244d4847145ed53c1Trent Piepho		.tuner_type     = TUNER_ABSENT,
2537f718e6e7a2c402195f3d2944605ef4b01e8e3347Kenth Andersson		.tuner_addr     = ADDR_UNSET,
2538f718e6e7a2c402195f3d2944605ef4b01e8e3347Kenth Andersson		.no_msp34xx     = 1,
2539f718e6e7a2c402195f3d2944605ef4b01e8e3347Kenth Andersson		.no_tda7432     = 1,
2540f718e6e7a2c402195f3d2944605ef4b01e8e3347Kenth Andersson	},
254171633c05724d85f1afb87629bb96fdf2ef18b41fnshmyrev@yandex.ru		/* ---- card 0x8d ---------------------------------- */
254271633c05724d85f1afb87629bb96fdf2ef18b41fnshmyrev@yandex.ru	[BTTV_BOARD_ASOUND_SKYEYE] = {
254371633c05724d85f1afb87629bb96fdf2ef18b41fnshmyrev@yandex.ru		.name		= "Asound Skyeye PCTV",
254471633c05724d85f1afb87629bb96fdf2ef18b41fnshmyrev@yandex.ru		.video_inputs	= 3,
25454c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 1, */
254671633c05724d85f1afb87629bb96fdf2ef18b41fnshmyrev@yandex.ru		.svhs		= 2,
254771633c05724d85f1afb87629bb96fdf2ef18b41fnshmyrev@yandex.ru		.gpiomask	= 15,
25486f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel		= MUXSEL(2, 3, 1, 1),
25498bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomux 	= { 2, 0, 0, 0 },
25508bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomute 	= 1,
255171633c05724d85f1afb87629bb96fdf2ef18b41fnshmyrev@yandex.ru		.pll		= PLL_28,
25528c2c0dfe4da28a152c0de2c2ca3a66c1bc2fef7cTrent Piepho		.tuner_type	= TUNER_PHILIPS_NTSC,
255371633c05724d85f1afb87629bb96fdf2ef18b41fnshmyrev@yandex.ru		.tuner_addr	= ADDR_UNSET,
255471633c05724d85f1afb87629bb96fdf2ef18b41fnshmyrev@yandex.ru	},
2555633323ffffae91c3f22a08e0185fbfd3fae2a825Bill Pechter		/* ---- card 0x8e ---------------------------------- */
2556633323ffffae91c3f22a08e0185fbfd3fae2a825Bill Pechter	[BTTV_BOARD_SABRENT_TVFM] = {
2557633323ffffae91c3f22a08e0185fbfd3fae2a825Bill Pechter		.name		= "Sabrent TV-FM (bttv version)",
2558633323ffffae91c3f22a08e0185fbfd3fae2a825Bill Pechter		.video_inputs	= 3,
25594c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 1, */
2560633323ffffae91c3f22a08e0185fbfd3fae2a825Bill Pechter		.svhs		= 2,
2561633323ffffae91c3f22a08e0185fbfd3fae2a825Bill Pechter		.gpiomask	= 0x108007,
25626f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel		= MUXSEL(2, 3, 1, 1),
25638bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomux 	= { 100000, 100002, 100002, 100000 },
2564633323ffffae91c3f22a08e0185fbfd3fae2a825Bill Pechter		.no_msp34xx	= 1,
2565633323ffffae91c3f22a08e0185fbfd3fae2a825Bill Pechter		.no_tda7432     = 1,
2566633323ffffae91c3f22a08e0185fbfd3fae2a825Bill Pechter		.pll		= PLL_28,
2567633323ffffae91c3f22a08e0185fbfd3fae2a825Bill Pechter		.tuner_type	= TUNER_TNF_5335MF,
2568633323ffffae91c3f22a08e0185fbfd3fae2a825Bill Pechter		.tuner_addr	= ADDR_UNSET,
2569633323ffffae91c3f22a08e0185fbfd3fae2a825Bill Pechter		.has_radio      = 1,
2570633323ffffae91c3f22a08e0185fbfd3fae2a825Bill Pechter	},
2571cd1257d860f6ee09b589723a5d3888b1fed46487Steven Toth	/* ---- card 0x8f ---------------------------------- */
2572cd1257d860f6ee09b589723a5d3888b1fed46487Steven Toth	[BTTV_BOARD_HAUPPAUGE_IMPACTVCB] = {
2573cd1257d860f6ee09b589723a5d3888b1fed46487Steven Toth		.name		= "Hauppauge ImpactVCB (bt878)",
2574cd1257d860f6ee09b589723a5d3888b1fed46487Steven Toth		.video_inputs	= 4,
25754c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 0, */
25764c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		.svhs		= NO_SVHS,
2577cd1257d860f6ee09b589723a5d3888b1fed46487Steven Toth		.gpiomask	= 0x0f, /* old: 7 */
25786f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel		= MUXSEL(0, 1, 3, 2), /* Composite 0-3 */
2579cd1257d860f6ee09b589723a5d3888b1fed46487Steven Toth		.no_msp34xx	= 1,
2580cd1257d860f6ee09b589723a5d3888b1fed46487Steven Toth		.no_tda7432     = 1,
2581abb0362f49c361f71b5aa6d244d4847145ed53c1Trent Piepho		.tuner_type	= TUNER_ABSENT,
2582cd1257d860f6ee09b589723a5d3888b1fed46487Steven Toth		.tuner_addr	= ADDR_UNSET,
2583cd1257d860f6ee09b589723a5d3888b1fed46487Steven Toth	},
25842d05ae6b5b77f063aa0f82cf0570f3e4b80b367cJulian Calaby	[BTTV_BOARD_MACHTV_MAGICTV] = {
25852d05ae6b5b77f063aa0f82cf0570f3e4b80b367cJulian Calaby		/* Julian Calaby <julian.calaby@gmail.com>
25862d05ae6b5b77f063aa0f82cf0570f3e4b80b367cJulian Calaby		 * Slightly different from original MachTV definition (0x60)
25872d05ae6b5b77f063aa0f82cf0570f3e4b80b367cJulian Calaby
25882d05ae6b5b77f063aa0f82cf0570f3e4b80b367cJulian Calaby		 * FIXME: RegSpy says gpiomask should be "0x001c800f", but it
25892d05ae6b5b77f063aa0f82cf0570f3e4b80b367cJulian Calaby		 * stuffs up remote chip. Bug is a pin on the jaecs is not set
25902d05ae6b5b77f063aa0f82cf0570f3e4b80b367cJulian Calaby		 * properly (methinks) causing no keyup bits being set */
25912d05ae6b5b77f063aa0f82cf0570f3e4b80b367cJulian Calaby
25922d05ae6b5b77f063aa0f82cf0570f3e4b80b367cJulian Calaby		.name           = "MagicTV", /* rebranded MachTV */
25932d05ae6b5b77f063aa0f82cf0570f3e4b80b367cJulian Calaby		.video_inputs   = 3,
25944c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 1, */
25952d05ae6b5b77f063aa0f82cf0570f3e4b80b367cJulian Calaby		.svhs           = 2,
25962d05ae6b5b77f063aa0f82cf0570f3e4b80b367cJulian Calaby		.gpiomask       = 7,
25976f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel         = MUXSEL(2, 3, 1, 1),
25988bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomux        = { 0, 1, 2, 3 },
25998bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil		.gpiomute 	= 4,
26002d05ae6b5b77f063aa0f82cf0570f3e4b80b367cJulian Calaby		.tuner_type     = TUNER_TEMIC_4009FR5_PAL,
26012d05ae6b5b77f063aa0f82cf0570f3e4b80b367cJulian Calaby		.tuner_addr     = ADDR_UNSET,
26022d05ae6b5b77f063aa0f82cf0570f3e4b80b367cJulian Calaby		.pll            = PLL_28,
26032d05ae6b5b77f063aa0f82cf0570f3e4b80b367cJulian Calaby		.has_radio      = 1,
26042d05ae6b5b77f063aa0f82cf0570f3e4b80b367cJulian Calaby		.has_remote     = 1,
26052d05ae6b5b77f063aa0f82cf0570f3e4b80b367cJulian Calaby	},
26061ebba670edac28d4ea37579453417ced71fd9128Scott Alfter	[BTTV_BOARD_SSAI_SECURITY] = {
26071ebba670edac28d4ea37579453417ced71fd9128Scott Alfter		.name		= "SSAI Security Video Interface",
26081ebba670edac28d4ea37579453417ced71fd9128Scott Alfter		.video_inputs	= 4,
26094c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 0, */
26104c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		.svhs		= NO_SVHS,
26116f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel		= MUXSEL(0, 1, 2, 3),
2612abb0362f49c361f71b5aa6d244d4847145ed53c1Trent Piepho		.tuner_type	= TUNER_ABSENT,
26131ebba670edac28d4ea37579453417ced71fd9128Scott Alfter		.tuner_addr	= ADDR_UNSET,
26141ebba670edac28d4ea37579453417ced71fd9128Scott Alfter	},
26151ebba670edac28d4ea37579453417ced71fd9128Scott Alfter	[BTTV_BOARD_SSAI_ULTRASOUND] = {
26161ebba670edac28d4ea37579453417ced71fd9128Scott Alfter		.name		= "SSAI Ultrasound Video Interface",
26171ebba670edac28d4ea37579453417ced71fd9128Scott Alfter		.video_inputs	= 2,
26184c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 0, */
26191ebba670edac28d4ea37579453417ced71fd9128Scott Alfter		.svhs		= 1,
26206f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel		= MUXSEL(2, 0, 1, 3),
2621abb0362f49c361f71b5aa6d244d4847145ed53c1Trent Piepho		.tuner_type	= TUNER_ABSENT,
26221ebba670edac28d4ea37579453417ced71fd9128Scott Alfter		.tuner_addr	= ADDR_UNSET,
26231ebba670edac28d4ea37579453417ced71fd9128Scott Alfter	},
262427cb786f4ec5fe85e9e2deffa4d33eed2f588cb0Michael Krufky	/* ---- card 0x94---------------------------------- */
262527cb786f4ec5fe85e9e2deffa4d33eed2f588cb0Michael Krufky	[BTTV_BOARD_DVICO_FUSIONHDTV_2] = {
262627cb786f4ec5fe85e9e2deffa4d33eed2f588cb0Michael Krufky		.name           = "DViCO FusionHDTV 2",
2627ab8b870e430d3e2cfb299f81e0ae0aef7fe5bfdaMichael Krufky		.tuner_type     = TUNER_PHILIPS_FCV1236D,
262827cb786f4ec5fe85e9e2deffa4d33eed2f588cb0Michael Krufky		.tuner_addr	= ADDR_UNSET,
262927cb786f4ec5fe85e9e2deffa4d33eed2f588cb0Michael Krufky		.video_inputs   = 3,
26304c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 1, */
263127cb786f4ec5fe85e9e2deffa4d33eed2f588cb0Michael Krufky		.svhs           = 2,
26326f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel		= MUXSEL(2, 3, 1),
263327cb786f4ec5fe85e9e2deffa4d33eed2f588cb0Michael Krufky		.gpiomask       = 0x00e00007,
263427cb786f4ec5fe85e9e2deffa4d33eed2f588cb0Michael Krufky		.gpiomux        = { 0x00400005, 0, 0x00000001, 0 },
263527cb786f4ec5fe85e9e2deffa4d33eed2f588cb0Michael Krufky		.gpiomute 	= 0x00c00007,
263627cb786f4ec5fe85e9e2deffa4d33eed2f588cb0Michael Krufky		.no_msp34xx     = 1,
263727cb786f4ec5fe85e9e2deffa4d33eed2f588cb0Michael Krufky		.no_tda7432     = 1,
263827cb786f4ec5fe85e9e2deffa4d33eed2f588cb0Michael Krufky	},
2639b5457b7bdf284d683880163a4c59fdde2f84325aSascha Sommer	/* ---- card 0x95---------------------------------- */
2640b5457b7bdf284d683880163a4c59fdde2f84325aSascha Sommer	[BTTV_BOARD_TYPHOON_TVTUNERPCI] = {
2641b5457b7bdf284d683880163a4c59fdde2f84325aSascha Sommer		.name           = "Typhoon TV-Tuner PCI (50684)",
2642b5457b7bdf284d683880163a4c59fdde2f84325aSascha Sommer		.video_inputs   = 3,
26434c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 1, */
2644b5457b7bdf284d683880163a4c59fdde2f84325aSascha Sommer		.svhs           = 2,
2645b5457b7bdf284d683880163a4c59fdde2f84325aSascha Sommer		.gpiomask       = 0x3014f,
26466f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel         = MUXSEL(2, 3, 1, 1),
2647b5457b7bdf284d683880163a4c59fdde2f84325aSascha Sommer		.gpiomux        = { 0x20001,0x10001, 0, 0 },
2648b5457b7bdf284d683880163a4c59fdde2f84325aSascha Sommer		.gpiomute       = 10,
2649b5457b7bdf284d683880163a4c59fdde2f84325aSascha Sommer		.pll            = PLL_28,
2650b5457b7bdf284d683880163a4c59fdde2f84325aSascha Sommer		.tuner_type     = TUNER_PHILIPS_PAL_I,
2651b5457b7bdf284d683880163a4c59fdde2f84325aSascha Sommer		.tuner_addr     = ADDR_UNSET,
2652b5457b7bdf284d683880163a4c59fdde2f84325aSascha Sommer	},
265397275ac514c7f1131f42f8b06e073b144c744e78Ernesto Hernández-Novich	[BTTV_BOARD_GEOVISION_GV600] = {
265497275ac514c7f1131f42f8b06e073b144c744e78Ernesto Hernández-Novich		/* emhn@usb.ve */
26554c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		.name		= "Geovision GV-600",
26564c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		.video_inputs	= 16,
26574c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 0, */
26584c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		.svhs		= NO_SVHS,
26594c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		.gpiomask	= 0x0,
26606f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel		= MUXSEL(2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2),
26614c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		.muxsel_hook	= geovision_muxsel,
26624c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		.gpiomux	= { 0 },
26634c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		.no_msp34xx	= 1,
26644c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		.pll		= PLL_28,
26654c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		.tuner_type	= TUNER_ABSENT,
26664c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		.tuner_addr	= ADDR_UNSET,
266797275ac514c7f1131f42f8b06e073b144c744e78Ernesto Hernández-Novich	},
2668e80faad3d7a332b7fe5a72dd64a81d28dd5c2e44Mauro Lacy	[BTTV_BOARD_KOZUMI_KTV_01C] = {
2669e80faad3d7a332b7fe5a72dd64a81d28dd5c2e44Mauro Lacy		/* Mauro Lacy <mauro@lacy.com.ar>
2670e80faad3d7a332b7fe5a72dd64a81d28dd5c2e44Mauro Lacy		 * Based on MagicTV and Conceptronic CONTVFMi */
2671e80faad3d7a332b7fe5a72dd64a81d28dd5c2e44Mauro Lacy
2672e80faad3d7a332b7fe5a72dd64a81d28dd5c2e44Mauro Lacy		.name           = "Kozumi KTV-01C",
2673e80faad3d7a332b7fe5a72dd64a81d28dd5c2e44Mauro Lacy		.video_inputs   = 3,
26744c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 1, */
2675e80faad3d7a332b7fe5a72dd64a81d28dd5c2e44Mauro Lacy		.svhs           = 2,
2676e80faad3d7a332b7fe5a72dd64a81d28dd5c2e44Mauro Lacy		.gpiomask       = 0x008007,
26776f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel         = MUXSEL(2, 3, 1, 1),
2678e80faad3d7a332b7fe5a72dd64a81d28dd5c2e44Mauro Lacy		.gpiomux        = { 0, 1, 2, 2 }, /* CONTVFMi */
2679e80faad3d7a332b7fe5a72dd64a81d28dd5c2e44Mauro Lacy		.gpiomute 	= 3, /* CONTVFMi */
2680e80faad3d7a332b7fe5a72dd64a81d28dd5c2e44Mauro Lacy		.tuner_type     = TUNER_PHILIPS_FM1216ME_MK3, /* TCL MK3 */
2681e80faad3d7a332b7fe5a72dd64a81d28dd5c2e44Mauro Lacy		.tuner_addr     = ADDR_UNSET,
2682e80faad3d7a332b7fe5a72dd64a81d28dd5c2e44Mauro Lacy		.pll            = PLL_28,
2683e80faad3d7a332b7fe5a72dd64a81d28dd5c2e44Mauro Lacy		.has_radio      = 1,
2684e80faad3d7a332b7fe5a72dd64a81d28dd5c2e44Mauro Lacy		.has_remote     = 1,
2685e80faad3d7a332b7fe5a72dd64a81d28dd5c2e44Mauro Lacy	},
26867d341a6a52f115512d60b2de89b2ebde54da8effMauro Carvalho Chehab	[BTTV_BOARD_ENLTV_FM_2] = {
26877d341a6a52f115512d60b2de89b2ebde54da8effMauro Carvalho Chehab		/* Encore TV Tuner Pro ENL TV-FM-2
26887d341a6a52f115512d60b2de89b2ebde54da8effMauro Carvalho Chehab		   Mauro Carvalho Chehab <mchehab@infradead.org */
26897d341a6a52f115512d60b2de89b2ebde54da8effMauro Carvalho Chehab		.name           = "Encore ENL TV-FM-2",
26907d341a6a52f115512d60b2de89b2ebde54da8effMauro Carvalho Chehab		.video_inputs   = 3,
26914c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 1, */
26927d341a6a52f115512d60b2de89b2ebde54da8effMauro Carvalho Chehab		.svhs           = 2,
26937d341a6a52f115512d60b2de89b2ebde54da8effMauro Carvalho Chehab		/* bit 6          -> IR disabled
26947d341a6a52f115512d60b2de89b2ebde54da8effMauro Carvalho Chehab		   bit 18/17 = 00 -> mute
26957d341a6a52f115512d60b2de89b2ebde54da8effMauro Carvalho Chehab			       01 -> enable external audio input
26967d341a6a52f115512d60b2de89b2ebde54da8effMauro Carvalho Chehab			       10 -> internal audio input (mono?)
26977d341a6a52f115512d60b2de89b2ebde54da8effMauro Carvalho Chehab			       11 -> internal audio input
26987d341a6a52f115512d60b2de89b2ebde54da8effMauro Carvalho Chehab		 */
26997d341a6a52f115512d60b2de89b2ebde54da8effMauro Carvalho Chehab		.gpiomask       = 0x060040,
27006f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel         = MUXSEL(2, 3, 3),
27017d341a6a52f115512d60b2de89b2ebde54da8effMauro Carvalho Chehab		.gpiomux        = { 0x60000, 0x60000, 0x20000, 0x20000 },
27027d341a6a52f115512d60b2de89b2ebde54da8effMauro Carvalho Chehab		.gpiomute 	= 0,
27037d341a6a52f115512d60b2de89b2ebde54da8effMauro Carvalho Chehab		.tuner_type	= TUNER_TCL_MF02GIP_5N,
27047d341a6a52f115512d60b2de89b2ebde54da8effMauro Carvalho Chehab		.tuner_addr     = ADDR_UNSET,
27057d341a6a52f115512d60b2de89b2ebde54da8effMauro Carvalho Chehab		.pll            = PLL_28,
27067d341a6a52f115512d60b2de89b2ebde54da8effMauro Carvalho Chehab		.has_radio      = 1,
27077d341a6a52f115512d60b2de89b2ebde54da8effMauro Carvalho Chehab		.has_remote     = 1,
270805583625710dfd75880a6cbb68292929d1d4c33cDirk Heer	},
2709835ab0121adb24ff27729bd3743f1477af00c435Hans Verkuil	[BTTV_BOARD_VD012] = {
271005583625710dfd75880a6cbb68292929d1d4c33cDirk Heer		/* D.Heer@Phytec.de */
271105583625710dfd75880a6cbb68292929d1d4c33cDirk Heer		.name           = "PHYTEC VD-012 (bt878)",
271205583625710dfd75880a6cbb68292929d1d4c33cDirk Heer		.video_inputs   = 4,
27134c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 0, */
27144c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		.svhs           = NO_SVHS,
271505583625710dfd75880a6cbb68292929d1d4c33cDirk Heer		.gpiomask       = 0x00,
27166f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel         = MUXSEL(0, 2, 3, 1),
271705583625710dfd75880a6cbb68292929d1d4c33cDirk Heer		.gpiomux        = { 0, 0, 0, 0 }, /* card has no audio */
271805583625710dfd75880a6cbb68292929d1d4c33cDirk Heer		.pll            = PLL_28,
2719abb0362f49c361f71b5aa6d244d4847145ed53c1Trent Piepho		.tuner_type     = TUNER_ABSENT,
272005583625710dfd75880a6cbb68292929d1d4c33cDirk Heer		.tuner_addr	= ADDR_UNSET,
272105583625710dfd75880a6cbb68292929d1d4c33cDirk Heer	},
2722835ab0121adb24ff27729bd3743f1477af00c435Hans Verkuil	[BTTV_BOARD_VD012_X1] = {
272305583625710dfd75880a6cbb68292929d1d4c33cDirk Heer		/* D.Heer@Phytec.de */
272405583625710dfd75880a6cbb68292929d1d4c33cDirk Heer		.name           = "PHYTEC VD-012-X1 (bt878)",
272505583625710dfd75880a6cbb68292929d1d4c33cDirk Heer		.video_inputs   = 4,
27264c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 0, */
272705583625710dfd75880a6cbb68292929d1d4c33cDirk Heer		.svhs           = 3,
272805583625710dfd75880a6cbb68292929d1d4c33cDirk Heer		.gpiomask       = 0x00,
27296f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel         = MUXSEL(2, 3, 1),
273005583625710dfd75880a6cbb68292929d1d4c33cDirk Heer		.gpiomux        = { 0, 0, 0, 0 }, /* card has no audio */
273105583625710dfd75880a6cbb68292929d1d4c33cDirk Heer		.pll            = PLL_28,
2732abb0362f49c361f71b5aa6d244d4847145ed53c1Trent Piepho		.tuner_type     = TUNER_ABSENT,
273305583625710dfd75880a6cbb68292929d1d4c33cDirk Heer		.tuner_addr	= ADDR_UNSET,
273405583625710dfd75880a6cbb68292929d1d4c33cDirk Heer	},
2735835ab0121adb24ff27729bd3743f1477af00c435Hans Verkuil	[BTTV_BOARD_VD012_X2] = {
273605583625710dfd75880a6cbb68292929d1d4c33cDirk Heer		/* D.Heer@Phytec.de */
273705583625710dfd75880a6cbb68292929d1d4c33cDirk Heer		.name           = "PHYTEC VD-012-X2 (bt878)",
273805583625710dfd75880a6cbb68292929d1d4c33cDirk Heer		.video_inputs   = 4,
27394c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		/* .audio_inputs= 0, */
274005583625710dfd75880a6cbb68292929d1d4c33cDirk Heer		.svhs           = 3,
274105583625710dfd75880a6cbb68292929d1d4c33cDirk Heer		.gpiomask       = 0x00,
27426f98700a5bb8d218162b04db1b8a3921a0dcc7ceTrent Piepho		.muxsel         = MUXSEL(3, 2, 1),
274305583625710dfd75880a6cbb68292929d1d4c33cDirk Heer		.gpiomux        = { 0, 0, 0, 0 }, /* card has no audio */
274405583625710dfd75880a6cbb68292929d1d4c33cDirk Heer		.pll            = PLL_28,
2745abb0362f49c361f71b5aa6d244d4847145ed53c1Trent Piepho		.tuner_type     = TUNER_ABSENT,
274605583625710dfd75880a6cbb68292929d1d4c33cDirk Heer		.tuner_addr	= ADDR_UNSET,
27470c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo	},
2748835ab0121adb24ff27729bd3743f1477af00c435Hans Verkuil	[BTTV_BOARD_GEOVISION_GV800S] = {
27490c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo		/* Bruno Christo <bchristo@inf.ufsm.br>
27500c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo		 *
27510c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo		 * GeoVision GV-800(S) has 4 Conexant Fusion 878A:
27520c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo		 * 	1 audio input  per BT878A = 4 audio inputs
27530c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo		 * 	4 video inputs per BT878A = 16 video inputs
27540c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo		 * This is the first BT878A chip of the GV-800(S). It's the
27550c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo		 * "master" chip and it controls the video inputs through an
27560c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo		 * analog multiplexer (a CD22M3494) via some GPIO pins. The
27570c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo		 * slaves should use card type 0x9e (following this one).
27580c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo		 * There is a EEPROM on the card which is currently not handled.
27590c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo		 * The audio input is not working yet.
27600c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo		 */
27610c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo		.name           = "Geovision GV-800(S) (master)",
27620c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo		.video_inputs   = 4,
27630c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo		/* .audio_inputs= 1, */
27640c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo		.tuner_type	= TUNER_ABSENT,
27650c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo		.tuner_addr	= ADDR_UNSET,
27660c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo		.svhs           = NO_SVHS,
27670c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo		.gpiomask	= 0xf107f,
27680c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo		.no_gpioirq     = 1,
27690c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo		.muxsel		= MUXSEL(2, 2, 2, 2),
27700c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo		.pll		= PLL_28,
27710c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo		.no_msp34xx	= 1,
27720c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo		.no_tda7432	= 1,
27730c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo		.muxsel_hook    = gv800s_muxsel,
27740c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo	},
2775835ab0121adb24ff27729bd3743f1477af00c435Hans Verkuil	[BTTV_BOARD_GEOVISION_GV800S_SL] = {
27760c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo		/* Bruno Christo <bchristo@inf.ufsm.br>
27770c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo		 *
27780c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo		 * GeoVision GV-800(S) has 4 Conexant Fusion 878A:
27790c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo		 * 	1 audio input  per BT878A = 4 audio inputs
27800c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo		 * 	4 video inputs per BT878A = 16 video inputs
27810c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo		 * The 3 other BT878A chips are "slave" chips of the GV-800(S)
27820c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo		 * and should use this card type.
27830c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo		 * The audio input is not working yet.
27840c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo		 */
27850c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo		.name           = "Geovision GV-800(S) (slave)",
27860c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo		.video_inputs   = 4,
27870c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo		/* .audio_inputs= 1, */
27880c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo		.tuner_type	= TUNER_ABSENT,
27890c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo		.tuner_addr	= ADDR_UNSET,
27900c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo		.svhs           = NO_SVHS,
27910c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo		.gpiomask	= 0x00,
27920c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo		.no_gpioirq     = 1,
27930c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo		.muxsel		= MUXSEL(2, 2, 2, 2),
27940c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo		.pll		= PLL_28,
27950c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo		.no_msp34xx	= 1,
27960c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo		.no_tda7432	= 1,
27970c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo		.muxsel_hook    = gv800s_muxsel,
27980c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo	},
2799dceaddb978a7fcd2efbdf6775a509529757327c3Alan McIvor	[BTTV_BOARD_PV183] = {
2800dceaddb978a7fcd2efbdf6775a509529757327c3Alan McIvor		.name           = "ProVideo PV183", /* 0x9f */
2801dceaddb978a7fcd2efbdf6775a509529757327c3Alan McIvor		.video_inputs   = 2,
2802dceaddb978a7fcd2efbdf6775a509529757327c3Alan McIvor		/* .audio_inputs= 0, */
2803dceaddb978a7fcd2efbdf6775a509529757327c3Alan McIvor		.svhs           = NO_SVHS,
2804dceaddb978a7fcd2efbdf6775a509529757327c3Alan McIvor		.gpiomask       = 0,
2805dceaddb978a7fcd2efbdf6775a509529757327c3Alan McIvor		.muxsel         = MUXSEL(2, 3),
2806dceaddb978a7fcd2efbdf6775a509529757327c3Alan McIvor		.gpiomux        = { 0 },
2807dceaddb978a7fcd2efbdf6775a509529757327c3Alan McIvor		.no_msp34xx     = 1,
2808dceaddb978a7fcd2efbdf6775a509529757327c3Alan McIvor		.pll            = PLL_28,
2809dceaddb978a7fcd2efbdf6775a509529757327c3Alan McIvor		.tuner_type     = TUNER_ABSENT,
2810dceaddb978a7fcd2efbdf6775a509529757327c3Alan McIvor		.tuner_addr	= ADDR_UNSET,
2811dceaddb978a7fcd2efbdf6775a509529757327c3Alan McIvor	},
2812835ab0121adb24ff27729bd3743f1477af00c435Hans Verkuil	/* ---- card 0xa0---------------------------------- */
2813de2843b663fd621e9a6c75fed4da73e8c9a1b094Peter De Schrijver	[BTTV_BOARD_TVT_TD3116] = {
2814de2843b663fd621e9a6c75fed4da73e8c9a1b094Peter De Schrijver		.name           = "Tongwei Video Technology TD-3116",
2815de2843b663fd621e9a6c75fed4da73e8c9a1b094Peter De Schrijver		.video_inputs   = 16,
2816de2843b663fd621e9a6c75fed4da73e8c9a1b094Peter De Schrijver		.gpiomask       = 0xc00ff,
2817de2843b663fd621e9a6c75fed4da73e8c9a1b094Peter De Schrijver		.muxsel         = MUXSEL(2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2),
2818de2843b663fd621e9a6c75fed4da73e8c9a1b094Peter De Schrijver		.muxsel_hook    = td3116_muxsel,
2819de2843b663fd621e9a6c75fed4da73e8c9a1b094Peter De Schrijver		.svhs           = NO_SVHS,
2820de2843b663fd621e9a6c75fed4da73e8c9a1b094Peter De Schrijver		.pll		= PLL_28,
2821de2843b663fd621e9a6c75fed4da73e8c9a1b094Peter De Schrijver		.tuner_type     = TUNER_ABSENT,
2822de2843b663fd621e9a6c75fed4da73e8c9a1b094Peter De Schrijver	},
28239d2952d70f175193b609929427a88a62eaa381bbTony Gentile	[BTTV_BOARD_APOSONIC_WDVR] = {
28249d2952d70f175193b609929427a88a62eaa381bbTony Gentile		.name           = "Aposonic W-DVR",
28259d2952d70f175193b609929427a88a62eaa381bbTony Gentile		.video_inputs   = 4,
28269d2952d70f175193b609929427a88a62eaa381bbTony Gentile		.svhs           = NO_SVHS,
28279d2952d70f175193b609929427a88a62eaa381bbTony Gentile		.muxsel         = MUXSEL(2, 3, 1, 0),
28289d2952d70f175193b609929427a88a62eaa381bbTony Gentile		.tuner_type     = TUNER_ABSENT,
28299d2952d70f175193b609929427a88a62eaa381bbTony Gentile	},
2830835ab0121adb24ff27729bd3743f1477af00c435Hans Verkuil	[BTTV_BOARD_ADLINK_MPG24] = {
2831835ab0121adb24ff27729bd3743f1477af00c435Hans Verkuil		/* Adlink MPG24 */
2832835ab0121adb24ff27729bd3743f1477af00c435Hans Verkuil		.name           = "Adlink MPG24",
2833835ab0121adb24ff27729bd3743f1477af00c435Hans Verkuil		.video_inputs   = 1,
2834835ab0121adb24ff27729bd3743f1477af00c435Hans Verkuil		/* .audio_inputs= 1, */
2835835ab0121adb24ff27729bd3743f1477af00c435Hans Verkuil		.svhs           = NO_SVHS,
2836835ab0121adb24ff27729bd3743f1477af00c435Hans Verkuil		.muxsel         = MUXSEL(2, 2, 2, 2),
2837835ab0121adb24ff27729bd3743f1477af00c435Hans Verkuil		.tuner_type     = UNSET,
2838835ab0121adb24ff27729bd3743f1477af00c435Hans Verkuil		.tuner_addr	= ADDR_UNSET,
2839835ab0121adb24ff27729bd3743f1477af00c435Hans Verkuil		.pll            = PLL_28,
2840835ab0121adb24ff27729bd3743f1477af00c435Hans Verkuil	},
2841ec7c15b58f34015df182e909fbb80674211daf54Ondrej Zary	[BTTV_BOARD_BT848_CAP_14] = {
2842ec7c15b58f34015df182e909fbb80674211daf54Ondrej Zary		.name		= "Bt848 Capture 14MHz",
2843ec7c15b58f34015df182e909fbb80674211daf54Ondrej Zary		.video_inputs	= 4,
2844ec7c15b58f34015df182e909fbb80674211daf54Ondrej Zary		.svhs		= 2,
2845ec7c15b58f34015df182e909fbb80674211daf54Ondrej Zary		.muxsel		= MUXSEL(2, 3, 1, 0),
2846ec7c15b58f34015df182e909fbb80674211daf54Ondrej Zary		.pll		= PLL_14,
2847ec7c15b58f34015df182e909fbb80674211daf54Ondrej Zary		.tuner_type	= TUNER_ABSENT,
2848ec7c15b58f34015df182e909fbb80674211daf54Ondrej Zary	},
2849ba9948fb9c3bd220b4766f19aff82c2776a7eb4cOndrej Zary	[BTTV_BOARD_CYBERVISION_CV06] = {
2850ba9948fb9c3bd220b4766f19aff82c2776a7eb4cOndrej Zary		.name		= "CyberVision CV06 (SV)",
2851ba9948fb9c3bd220b4766f19aff82c2776a7eb4cOndrej Zary		.video_inputs	= 4,
2852ba9948fb9c3bd220b4766f19aff82c2776a7eb4cOndrej Zary		/* .audio_inputs= 0, */
2853ba9948fb9c3bd220b4766f19aff82c2776a7eb4cOndrej Zary		.svhs		= NO_SVHS,
2854ba9948fb9c3bd220b4766f19aff82c2776a7eb4cOndrej Zary		.muxsel		= MUXSEL(2, 3, 1, 0),
2855ba9948fb9c3bd220b4766f19aff82c2776a7eb4cOndrej Zary		.pll		= PLL_28,
2856ba9948fb9c3bd220b4766f19aff82c2776a7eb4cOndrej Zary		.tuner_type	= TUNER_ABSENT,
2857ba9948fb9c3bd220b4766f19aff82c2776a7eb4cOndrej Zary		.tuner_addr	= ADDR_UNSET,
2858ba9948fb9c3bd220b4766f19aff82c2776a7eb4cOndrej Zary	},
2859493a9cfdb9f7bd576603d15778419dddd49994a2Pojar George	[BTTV_BOARD_KWORLD_VSTREAM_XPERT] = {
2860493a9cfdb9f7bd576603d15778419dddd49994a2Pojar George		/* Pojar George <geoubuntu@gmail.com> */
2861493a9cfdb9f7bd576603d15778419dddd49994a2Pojar George		.name           = "Kworld V-Stream Xpert TV PVR878",
2862493a9cfdb9f7bd576603d15778419dddd49994a2Pojar George		.video_inputs   = 3,
2863493a9cfdb9f7bd576603d15778419dddd49994a2Pojar George		/* .audio_inputs= 1, */
2864493a9cfdb9f7bd576603d15778419dddd49994a2Pojar George		.svhs           = 2,
2865493a9cfdb9f7bd576603d15778419dddd49994a2Pojar George		.gpiomask       = 0x001c0007,
2866493a9cfdb9f7bd576603d15778419dddd49994a2Pojar George		.muxsel         = MUXSEL(2, 3, 1, 1),
2867493a9cfdb9f7bd576603d15778419dddd49994a2Pojar George		.gpiomux        = { 0, 1, 2, 2 },
2868493a9cfdb9f7bd576603d15778419dddd49994a2Pojar George		.gpiomute       = 3,
2869493a9cfdb9f7bd576603d15778419dddd49994a2Pojar George		.pll            = PLL_28,
2870493a9cfdb9f7bd576603d15778419dddd49994a2Pojar George		.tuner_type     = TUNER_TENA_9533_DI,
2871493a9cfdb9f7bd576603d15778419dddd49994a2Pojar George		.tuner_addr    = ADDR_UNSET,
2872493a9cfdb9f7bd576603d15778419dddd49994a2Pojar George		.has_remote     = 1,
2873493a9cfdb9f7bd576603d15778419dddd49994a2Pojar George		.has_radio      = 1,
2874493a9cfdb9f7bd576603d15778419dddd49994a2Pojar George	},
2875c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner	/* ---- card 0xa6---------------------------------- */
2876c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner	[BTTV_BOARD_PCI_8604PW] = {
2877c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner		/* PCI-8604PW with special unlock sequence */
2878c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner		.name           = "PCI-8604PW",
2879c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner		.video_inputs   = 2,
2880c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner		/* .audio_inputs= 0, */
2881c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner		.svhs           = NO_SVHS,
2882c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner		/* The second input is available on CN4, if populated.
2883c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner		 * The other 5x2 header (CN2?) connects to the same inputs
2884c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner		 * as the on-board BNCs */
2885c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner		.muxsel         = MUXSEL(2, 3),
2886c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner		.tuner_type     = TUNER_ABSENT,
2887c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner		.no_msp34xx	= 1,
2888c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner		.no_tda7432	= 1,
2889c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner		.pll            = PLL_35,
2890c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner	},
289110c2c8b18a9cd29fc3f5faa5ad8e825dcc8b58e6Mauro Carvalho Chehab};
28921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
28931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic const unsigned int bttv_num_tvcards = ARRAY_SIZE(bttv_tvcards);
28941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
28951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* ----------------------------------------------------------------------- */
28961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
28971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic unsigned char eeprom_data[256];
28981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
28991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
29001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * identify card
29011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
29024c62e9764ab403d42f9b8871b1241fe7812f19d4Greg Kroah-Hartmanvoid bttv_idcard(struct bttv *btv)
29031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
29041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned int gpiobits;
29051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int i,type;
29061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
29071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* read PCI subsystem ID */
2908fa14001480fb264b916ed6406ead24205dc1a86cSergei Shtylyov	btv->cardid  = btv->c.pci->subsystem_device << 16;
2909fa14001480fb264b916ed6406ead24205dc1a86cSergei Shtylyov	btv->cardid |= btv->c.pci->subsystem_vendor;
29101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
29111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	if (0 != btv->cardid && 0xffffffff != btv->cardid) {
29121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		/* look for the card */
29131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		for (type = -1, i = 0; cards[i].id != 0; i++)
29141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			if (cards[i].id  == btv->cardid)
29151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds				type = i;
29161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
29171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		if (type != -1) {
29181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			/* found it */
29198af443e581ab57a6a38f595eb40be3514ea55195Joe Perches			pr_info("%d: detected: %s [card=%d], PCI subsystem ID is %04x:%04x\n",
29208af443e581ab57a6a38f595eb40be3514ea55195Joe Perches				btv->c.nr, cards[type].name, cards[type].cardnr,
29218af443e581ab57a6a38f595eb40be3514ea55195Joe Perches				btv->cardid & 0xffff,
29228af443e581ab57a6a38f595eb40be3514ea55195Joe Perches				(btv->cardid >> 16) & 0xffff);
29231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			btv->c.type = cards[type].cardnr;
29241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		} else {
29251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			/* 404 */
29268af443e581ab57a6a38f595eb40be3514ea55195Joe Perches			pr_info("%d: subsystem: %04x:%04x (UNKNOWN)\n",
29278af443e581ab57a6a38f595eb40be3514ea55195Joe Perches				btv->c.nr, btv->cardid & 0xffff,
29288af443e581ab57a6a38f595eb40be3514ea55195Joe Perches				(btv->cardid >> 16) & 0xffff);
29298af443e581ab57a6a38f595eb40be3514ea55195Joe Perches			pr_debug("please mail id, board name and the correct card= insmod option to linux-media@vger.kernel.org\n");
29301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		}
29311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	}
29321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
29331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* let the user override the autodetected type */
29341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	if (card[btv->c.nr] < bttv_num_tvcards)
29351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		btv->c.type=card[btv->c.nr];
29361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
29371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* print which card config we are using */
29388af443e581ab57a6a38f595eb40be3514ea55195Joe Perches	pr_info("%d: using: %s [card=%d,%s]\n",
29398af443e581ab57a6a38f595eb40be3514ea55195Joe Perches		btv->c.nr, bttv_tvcards[btv->c.type].name, btv->c.type,
29408af443e581ab57a6a38f595eb40be3514ea55195Joe Perches		card[btv->c.nr] < bttv_num_tvcards
29418af443e581ab57a6a38f595eb40be3514ea55195Joe Perches		? "insmod option" : "autodetected");
29421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
29431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* overwrite gpio stuff ?? */
29441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	if (UNSET == audioall && UNSET == audiomux[0])
29451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		return;
29461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
29471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	if (UNSET != audiomux[0]) {
29481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		gpiobits = 0;
294957747b7f2517524aed5f0c5b744badf9da94a91bMauro Carvalho Chehab		for (i = 0; i < ARRAY_SIZE(bttv_tvcards->gpiomux); i++) {
29508bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil			bttv_tvcards[btv->c.type].gpiomux[i] = audiomux[i];
29511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			gpiobits |= audiomux[i];
29521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		}
29531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	} else {
29541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		gpiobits = audioall;
295557747b7f2517524aed5f0c5b744badf9da94a91bMauro Carvalho Chehab		for (i = 0; i < ARRAY_SIZE(bttv_tvcards->gpiomux); i++) {
29568bf2f8e747700419cc5bbc56c4496774eb8f2f1fHans Verkuil			bttv_tvcards[btv->c.type].gpiomux[i] = audioall;
29571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		}
29581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	}
29591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	bttv_tvcards[btv->c.type].gpiomask = (UNSET != gpiomask) ? gpiomask : gpiobits;
29608af443e581ab57a6a38f595eb40be3514ea55195Joe Perches	pr_info("%d: gpio config override: mask=0x%x, mux=",
29618af443e581ab57a6a38f595eb40be3514ea55195Joe Perches		btv->c.nr, bttv_tvcards[btv->c.type].gpiomask);
296257747b7f2517524aed5f0c5b744badf9da94a91bMauro Carvalho Chehab	for (i = 0; i < ARRAY_SIZE(bttv_tvcards->gpiomux); i++) {
29638af443e581ab57a6a38f595eb40be3514ea55195Joe Perches		pr_cont("%s0x%x",
29648af443e581ab57a6a38f595eb40be3514ea55195Joe Perches			i ? "," : "", bttv_tvcards[btv->c.type].gpiomux[i]);
29651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	}
29668af443e581ab57a6a38f595eb40be3514ea55195Joe Perches	pr_cont("\n");
29671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
29681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
29691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
29701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * (most) board specific initialisations goes here
29711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
29721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
29731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Some Modular Technology cards have an eeprom, but no subsystem ID */
2974943a49027b6d9829b737e6da3d72b867a7a6f832Adrian Bunkstatic void identify_by_eeprom(struct bttv *btv, unsigned char eeprom_data[256])
29751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
29761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int type = -1;
29771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
29781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	if (0 == strncmp(eeprom_data,"GET MM20xPCTV",13))
29795a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab		type = BTTV_BOARD_MODTEC_205;
29801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	else if (0 == strncmp(eeprom_data+20,"Picolo",7))
29815a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab		type = BTTV_BOARD_EURESYS_PICOLO;
29821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	else if (eeprom_data[0] == 0x84 && eeprom_data[2]== 0)
29834ac97914c6c35f6bf132071c718e034d0846b9f5Mauro Carvalho Chehab		type = BTTV_BOARD_HAUPPAUGE; /* old bt848 */
29841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
29851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	if (-1 != type) {
29861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		btv->c.type = type;
29878af443e581ab57a6a38f595eb40be3514ea55195Joe Perches		pr_info("%d: detected by eeprom: %s [card=%d]\n",
29888af443e581ab57a6a38f595eb40be3514ea55195Joe Perches			btv->c.nr, bttv_tvcards[btv->c.type].name, btv->c.type);
29891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	}
29901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
29911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
29921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic void flyvideo_gpio(struct bttv *btv)
29931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
2994c6eb8eafdba4ad18b4520a0d28a38bc9e61883eaHans Verkuil	int gpio, has_remote, has_radio, is_capture_only;
2995c6eb8eafdba4ad18b4520a0d28a38bc9e61883eaHans Verkuil	int is_lr90, has_tda9820_tda9821;
2996c6eb8eafdba4ad18b4520a0d28a38bc9e61883eaHans Verkuil	int tuner_type = UNSET, ttype;
29971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
29981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	gpio_inout(0xffffff, 0);
299924a70fdce872d70171b1f49dcd1a7c3a4e8396b2Mauro Carvalho Chehab	udelay(8);  /* without this we would see the 0x1800 mask */
30001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	gpio = gpio_read();
30011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* FIXME: must restore OUR_EN ??? */
30021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
300324a70fdce872d70171b1f49dcd1a7c3a4e8396b2Mauro Carvalho Chehab	/* all cards provide GPIO info, some have an additional eeprom
300424a70fdce872d70171b1f49dcd1a7c3a4e8396b2Mauro Carvalho Chehab	 * LR50: GPIO coding can be found lower right CP1 .. CP9
300524a70fdce872d70171b1f49dcd1a7c3a4e8396b2Mauro Carvalho Chehab	 *       CP9=GPIO23 .. CP1=GPIO15; when OPEN, the corresponding GPIO reads 1.
300624a70fdce872d70171b1f49dcd1a7c3a4e8396b2Mauro Carvalho Chehab	 *       GPIO14-12: n.c.
300724a70fdce872d70171b1f49dcd1a7c3a4e8396b2Mauro Carvalho Chehab	 * LR90: GP9=GPIO23 .. GP1=GPIO15 (right above the bt878)
30081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
300924a70fdce872d70171b1f49dcd1a7c3a4e8396b2Mauro Carvalho Chehab	 * lowest 3 bytes are remote control codes (no handshake needed)
301024a70fdce872d70171b1f49dcd1a7c3a4e8396b2Mauro Carvalho Chehab	 * xxxFFF: No remote control chip soldered
301124a70fdce872d70171b1f49dcd1a7c3a4e8396b2Mauro Carvalho Chehab	 * xxxF00(LR26/LR50), xxxFE0(LR90): Remote control chip (LVA001 or CF45) soldered
301224a70fdce872d70171b1f49dcd1a7c3a4e8396b2Mauro Carvalho Chehab	 * Note: Some bits are Audio_Mask !
301324a70fdce872d70171b1f49dcd1a7c3a4e8396b2Mauro Carvalho Chehab	 */
3014c6eb8eafdba4ad18b4520a0d28a38bc9e61883eaHans Verkuil	ttype = (gpio & 0x0f0000) >> 16;
3015c6eb8eafdba4ad18b4520a0d28a38bc9e61883eaHans Verkuil	switch (ttype) {
3016c6eb8eafdba4ad18b4520a0d28a38bc9e61883eaHans Verkuil	case 0x0:
3017c6eb8eafdba4ad18b4520a0d28a38bc9e61883eaHans Verkuil		tuner_type = 2;  /* NTSC, e.g. TPI8NSR11P */
30181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		break;
3019c6eb8eafdba4ad18b4520a0d28a38bc9e61883eaHans Verkuil	case 0x2:
3020c6eb8eafdba4ad18b4520a0d28a38bc9e61883eaHans Verkuil		tuner_type = 39; /* LG NTSC (newer TAPC series) TAPC-H701P */
30211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		break;
3022c6eb8eafdba4ad18b4520a0d28a38bc9e61883eaHans Verkuil	case 0x4:
3023c6eb8eafdba4ad18b4520a0d28a38bc9e61883eaHans Verkuil		tuner_type = 5;  /* Philips PAL TPI8PSB02P, TPI8PSB12P, TPI8PSB12D or FI1216, FM1216 */
30241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		break;
3025c6eb8eafdba4ad18b4520a0d28a38bc9e61883eaHans Verkuil	case 0x6:
3026c6eb8eafdba4ad18b4520a0d28a38bc9e61883eaHans Verkuil		tuner_type = 37; /* LG PAL (newer TAPC series) TAPC-G702P */
30271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		break;
3028c6eb8eafdba4ad18b4520a0d28a38bc9e61883eaHans Verkuil	case 0xC:
3029c6eb8eafdba4ad18b4520a0d28a38bc9e61883eaHans Verkuil		tuner_type = 3;  /* Philips SECAM(+PAL) FQ1216ME or FI1216MF */
30301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		break;
30311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	default:
30328af443e581ab57a6a38f595eb40be3514ea55195Joe Perches		pr_info("%d: FlyVideo_gpio: unknown tuner type\n", btv->c.nr);
3033c6eb8eafdba4ad18b4520a0d28a38bc9e61883eaHans Verkuil		break;
30341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	}
30351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
30361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	has_remote          =   gpio & 0x800000;
30371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	has_radio	    =   gpio & 0x400000;
303824a70fdce872d70171b1f49dcd1a7c3a4e8396b2Mauro Carvalho Chehab	/*   unknown                   0x200000;
303924a70fdce872d70171b1f49dcd1a7c3a4e8396b2Mauro Carvalho Chehab	 *   unknown2                  0x100000; */
30404ac97914c6c35f6bf132071c718e034d0846b9f5Mauro Carvalho Chehab	is_capture_only     = !(gpio & 0x008000); /* GPIO15 */
30411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	has_tda9820_tda9821 = !(gpio & 0x004000);
304224a70fdce872d70171b1f49dcd1a7c3a4e8396b2Mauro Carvalho Chehab	is_lr90             = !(gpio & 0x002000); /* else LR26/LR50 (LR38/LR51 f. capture only) */
304324a70fdce872d70171b1f49dcd1a7c3a4e8396b2Mauro Carvalho Chehab	/*
304424a70fdce872d70171b1f49dcd1a7c3a4e8396b2Mauro Carvalho Chehab	 * gpio & 0x001000    output bit for audio routing */
30451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3046c6eb8eafdba4ad18b4520a0d28a38bc9e61883eaHans Verkuil	if (is_capture_only)
3047c6eb8eafdba4ad18b4520a0d28a38bc9e61883eaHans Verkuil		tuner_type = TUNER_ABSENT; /* No tuner present */
30481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
30498af443e581ab57a6a38f595eb40be3514ea55195Joe Perches	pr_info("%d: FlyVideo Radio=%s RemoteControl=%s Tuner=%d gpio=0x%06x\n",
30508af443e581ab57a6a38f595eb40be3514ea55195Joe Perches		btv->c.nr, has_radio ? "yes" : "no",
30518af443e581ab57a6a38f595eb40be3514ea55195Joe Perches		has_remote ? "yes" : "no", tuner_type, gpio);
30528af443e581ab57a6a38f595eb40be3514ea55195Joe Perches	pr_info("%d: FlyVideo  LR90=%s tda9821/tda9820=%s capture_only=%s\n",
30538af443e581ab57a6a38f595eb40be3514ea55195Joe Perches		btv->c.nr, is_lr90 ? "yes" : "no",
30548af443e581ab57a6a38f595eb40be3514ea55195Joe Perches		has_tda9820_tda9821 ? "yes" : "no",
30558af443e581ab57a6a38f595eb40be3514ea55195Joe Perches		is_capture_only ? "yes" : "no");
30561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3057c6eb8eafdba4ad18b4520a0d28a38bc9e61883eaHans Verkuil	if (tuner_type != UNSET) /* only set if known tuner autodetected, else let insmod option through */
3058c6eb8eafdba4ad18b4520a0d28a38bc9e61883eaHans Verkuil		btv->tuner_type = tuner_type;
30591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	btv->has_radio = has_radio;
30601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
306124a70fdce872d70171b1f49dcd1a7c3a4e8396b2Mauro Carvalho Chehab	/* LR90 Audio Routing is done by 2 hef4052, so Audio_Mask has 4 bits: 0x001c80
306224a70fdce872d70171b1f49dcd1a7c3a4e8396b2Mauro Carvalho Chehab	 * LR26/LR50 only has 1 hef4052, Audio_Mask 0x000c00
306324a70fdce872d70171b1f49dcd1a7c3a4e8396b2Mauro Carvalho Chehab	 * Audio options: from tuner, from tda9821/tda9821(mono,stereo,sap), from tda9874, ext., mute */
3064c6eb8eafdba4ad18b4520a0d28a38bc9e61883eaHans Verkuil	if (has_tda9820_tda9821)
3065c6eb8eafdba4ad18b4520a0d28a38bc9e61883eaHans Verkuil		btv->audio_mode_gpio = lt9415_audio;
30664b9b936f278163614543d66f8e8c93d5484dd148Nickolay V. Shmyrev	/* todo: if(has_tda9874) btv->audio_mode_gpio = fv2000s_audio; */
30671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
30681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
30691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic int miro_tunermap[] = { 0,6,2,3,   4,5,6,0,  3,0,4,5,  5,2,16,1,
30701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			       14,2,17,1, 4,1,4,3,  1,2,16,1, 4,4,4,4 };
30711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic int miro_fmtuner[]  = { 0,0,0,0,   0,0,0,0,  0,0,0,0,  0,0,0,1,
30721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			       1,1,1,1,   1,1,1,0,  0,0,0,0,  0,1,0,0 };
30731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
30741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic void miro_pinnacle_gpio(struct bttv *btv)
30751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
30761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int id,msp,gpio;
30771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	char *info;
30781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
30791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	gpio_inout(0xffffff, 0);
30804ac97914c6c35f6bf132071c718e034d0846b9f5Mauro Carvalho Chehab	gpio = gpio_read();
30811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	id   = ((gpio>>10) & 63) -1;
308209df1c163adcf43e2c4234b52985f34b95b7634eMauro Carvalho Chehab	msp  = bttv_I2CRead(btv, I2C_ADDR_MSP3400, "MSP34xx");
30831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	if (id < 32) {
30841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		btv->tuner_type = miro_tunermap[id];
30851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		if (0 == (gpio & 0x20)) {
30861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			btv->has_radio = 1;
30871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			if (!miro_fmtuner[id]) {
30881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds				btv->has_matchbox = 1;
30891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds				btv->mbox_we    = (1<<6);
30901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds				btv->mbox_most  = (1<<7);
30911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds				btv->mbox_clk   = (1<<8);
30921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds				btv->mbox_data  = (1<<9);
30931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds				btv->mbox_mask  = (1<<6)|(1<<7)|(1<<8)|(1<<9);
30941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			}
30951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		} else {
30961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			btv->has_radio = 0;
30971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		}
30981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		if (-1 != msp) {
30995a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab			if (btv->c.type == BTTV_BOARD_MIRO)
31005a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab				btv->c.type = BTTV_BOARD_MIROPRO;
31015a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab			if (btv->c.type == BTTV_BOARD_PINNACLE)
31025a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab				btv->c.type = BTTV_BOARD_PINNACLEPRO;
31031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		}
31048af443e581ab57a6a38f595eb40be3514ea55195Joe Perches		pr_info("%d: miro: id=%d tuner=%d radio=%s stereo=%s\n",
31058af443e581ab57a6a38f595eb40be3514ea55195Joe Perches			btv->c.nr, id+1, btv->tuner_type,
31068af443e581ab57a6a38f595eb40be3514ea55195Joe Perches			!btv->has_radio ? "no" :
31078af443e581ab57a6a38f595eb40be3514ea55195Joe Perches			(btv->has_matchbox ? "matchbox" : "fmtuner"),
31088af443e581ab57a6a38f595eb40be3514ea55195Joe Perches			(-1 == msp) ? "no" : "yes");
31091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	} else {
31101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		/* new cards with microtune tuner */
31111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		id = 63 - id;
31121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		btv->has_radio = 0;
31131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		switch (id) {
31141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		case 1:
31151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			info = "PAL / mono";
311639e8f40da20a803a17e16304e73fd31050b1871cHans Verkuil			btv->tda9887_conf = TDA9887_INTERCARRIER;
31171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			break;
31181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		case 2:
31191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			info = "PAL+SECAM / stereo";
31201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			btv->has_radio = 1;
312139e8f40da20a803a17e16304e73fd31050b1871cHans Verkuil			btv->tda9887_conf = TDA9887_QSS;
31221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			break;
31231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		case 3:
31241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			info = "NTSC / stereo";
31251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			btv->has_radio = 1;
312639e8f40da20a803a17e16304e73fd31050b1871cHans Verkuil			btv->tda9887_conf = TDA9887_QSS;
31271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			break;
31281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		case 4:
31291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			info = "PAL+SECAM / mono";
313039e8f40da20a803a17e16304e73fd31050b1871cHans Verkuil			btv->tda9887_conf = TDA9887_QSS;
31311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			break;
31321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		case 5:
31331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			info = "NTSC / mono";
313439e8f40da20a803a17e16304e73fd31050b1871cHans Verkuil			btv->tda9887_conf = TDA9887_INTERCARRIER;
31351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			break;
31361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		case 6:
31371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			info = "NTSC / stereo";
313839e8f40da20a803a17e16304e73fd31050b1871cHans Verkuil			btv->tda9887_conf = TDA9887_INTERCARRIER;
31391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			break;
31401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		case 7:
31411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			info = "PAL / stereo";
314239e8f40da20a803a17e16304e73fd31050b1871cHans Verkuil			btv->tda9887_conf = TDA9887_INTERCARRIER;
31431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			break;
31441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		default:
31451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			info = "oops: unknown card";
31461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			break;
31471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		}
31481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		if (-1 != msp)
31495a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab			btv->c.type = BTTV_BOARD_PINNACLEPRO;
31508af443e581ab57a6a38f595eb40be3514ea55195Joe Perches		pr_info("%d: pinnacle/mt: id=%d info=\"%s\" radio=%s\n",
31518af443e581ab57a6a38f595eb40be3514ea55195Joe Perches			btv->c.nr, id, info, btv->has_radio ? "yes" : "no");
315239e8f40da20a803a17e16304e73fd31050b1871cHans Verkuil		btv->tuner_type = TUNER_MT2032;
31531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	}
31541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
31551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
31561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* GPIO21   L: Buffer aktiv, H: Buffer inaktiv */
31571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define LM1882_SYNC_DRIVE     0x200000L
31581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
31591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic void init_ids_eagle(struct bttv *btv)
31601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
31611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	gpio_inout(0xffffff,0xFFFF37);
31621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	gpio_write(0x200020);
31631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
31641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* flash strobe inverter ?! */
31651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	gpio_write(0x200024);
31661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
31671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* switch sync drive off */
31681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	gpio_bits(LM1882_SYNC_DRIVE,LM1882_SYNC_DRIVE);
31691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
31701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* set BT848 muxel to 2 */
31711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	btaor((2)<<5, ~(2<<5), BT848_IFORM);
31721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
31731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
31741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Muxsel helper for the IDS Eagle.
31751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * the eagles does not use the standard muxsel-bits but
31761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * has its own multiplexer */
31771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic void eagle_muxsel(struct bttv *btv, unsigned int input)
31781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
3179430390e67b39ccf56d98286f5e5a72d903c9cf87Trent Piepho	gpio_bits(3, input & 3);
31801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3181b930e1d851c3ffbf82127bd0e4d72ffe94d4b7f2Michael Krufky	/* composite */
3182b930e1d851c3ffbf82127bd0e4d72ffe94d4b7f2Michael Krufky	/* set chroma ADC to sleep */
3183b930e1d851c3ffbf82127bd0e4d72ffe94d4b7f2Michael Krufky	btor(BT848_ADC_C_SLEEP, BT848_ADC);
3184b930e1d851c3ffbf82127bd0e4d72ffe94d4b7f2Michael Krufky	/* set to composite video */
3185b930e1d851c3ffbf82127bd0e4d72ffe94d4b7f2Michael Krufky	btand(~BT848_CONTROL_COMP, BT848_E_CONTROL);
3186b930e1d851c3ffbf82127bd0e4d72ffe94d4b7f2Michael Krufky	btand(~BT848_CONTROL_COMP, BT848_O_CONTROL);
3187b930e1d851c3ffbf82127bd0e4d72ffe94d4b7f2Michael Krufky
3188b930e1d851c3ffbf82127bd0e4d72ffe94d4b7f2Michael Krufky	/* switch sync drive off */
3189b930e1d851c3ffbf82127bd0e4d72ffe94d4b7f2Michael Krufky	gpio_bits(LM1882_SYNC_DRIVE,LM1882_SYNC_DRIVE);
31901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
31911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
31921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic void gvc1100_muxsel(struct bttv *btv, unsigned int input)
31931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
31944ac97914c6c35f6bf132071c718e034d0846b9f5Mauro Carvalho Chehab	static const int masks[] = {0x30, 0x01, 0x12, 0x23};
31951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	gpio_write(masks[input%4]);
31961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
31971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
31981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* LMLBT4x initialization - to allow access to GPIO bits for sensors input and
31991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds   alarms output
32001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
32011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds   GPIObit    | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
32021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds   assignment | TI | O3|INx| O2| O1|IN4|IN3|IN2|IN1|   |   |
32031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
32041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds   IN - sensor inputs, INx - sensor inputs and TI XORed together
32051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds   O1,O2,O3 - alarm outputs (relays)
32061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
32071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds   OUT ENABLE   1    1   0  . 1  1   0   0 . 0   0   0    0   = 0x6C0
32081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
32091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds*/
32101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
32111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic void init_lmlbt4x(struct bttv *btv)
32121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
32138af443e581ab57a6a38f595eb40be3514ea55195Joe Perches	pr_debug("LMLBT4x init\n");
32141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	btwrite(0x000000, BT848_GPIO_REG_INP);
32151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	gpio_inout(0xffffff, 0x0006C0);
32161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	gpio_write(0x000000);
32171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
32181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
32191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic void sigmaSQ_muxsel(struct bttv *btv, unsigned int input)
32201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
32211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned int inmux = input % 8;
32221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	gpio_inout( 0xf, 0xf );
32231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	gpio_bits( 0xf, inmux );
32241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
32251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
32261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic void sigmaSLC_muxsel(struct bttv *btv, unsigned int input)
32271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
32281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned int inmux = input % 4;
32291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	gpio_inout( 3<<9, 3<<9 );
32301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	gpio_bits( 3<<9, inmux<<9 );
32311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
32321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
323397275ac514c7f1131f42f8b06e073b144c744e78Ernesto Hernández-Novichstatic void geovision_muxsel(struct bttv *btv, unsigned int input)
323497275ac514c7f1131f42f8b06e073b144c744e78Ernesto Hernández-Novich{
323597275ac514c7f1131f42f8b06e073b144c744e78Ernesto Hernández-Novich	unsigned int inmux = input % 16;
323697275ac514c7f1131f42f8b06e073b144c744e78Ernesto Hernández-Novich	gpio_inout(0xf, 0xf);
323797275ac514c7f1131f42f8b06e073b144c744e78Ernesto Hernández-Novich	gpio_bits(0xf, inmux);
323897275ac514c7f1131f42f8b06e073b144c744e78Ernesto Hernández-Novich}
323997275ac514c7f1131f42f8b06e073b144c744e78Ernesto Hernández-Novich
3240de2843b663fd621e9a6c75fed4da73e8c9a1b094Peter De Schrijver/*
3241de2843b663fd621e9a6c75fed4da73e8c9a1b094Peter De Schrijver * The TD3116 has 2 74HC4051 muxes wired to the MUX0 input of a bt878.
3242de2843b663fd621e9a6c75fed4da73e8c9a1b094Peter De Schrijver * The first 74HC4051 has the lower 8 inputs, the second one the higher 8.
3243de2843b663fd621e9a6c75fed4da73e8c9a1b094Peter De Schrijver * The muxes are controlled via a 74HC373 latch which is connected to
3244de2843b663fd621e9a6c75fed4da73e8c9a1b094Peter De Schrijver * GPIOs 0-7. GPIO 18 is connected to the LE signal of the latch.
3245de2843b663fd621e9a6c75fed4da73e8c9a1b094Peter De Schrijver * Q0 of the latch is connected to the Enable (~E) input of the first
3246de2843b663fd621e9a6c75fed4da73e8c9a1b094Peter De Schrijver * 74HC4051. Q1 - Q3 are connected to S0 - S2 of the same 74HC4051.
3247de2843b663fd621e9a6c75fed4da73e8c9a1b094Peter De Schrijver * Q4 - Q7 are connected to the second 74HC4051 in the same way.
3248de2843b663fd621e9a6c75fed4da73e8c9a1b094Peter De Schrijver */
3249de2843b663fd621e9a6c75fed4da73e8c9a1b094Peter De Schrijver
3250de2843b663fd621e9a6c75fed4da73e8c9a1b094Peter De Schrijverstatic void td3116_latch_value(struct bttv *btv, u32 value)
3251de2843b663fd621e9a6c75fed4da73e8c9a1b094Peter De Schrijver{
3252de2843b663fd621e9a6c75fed4da73e8c9a1b094Peter De Schrijver	gpio_bits((1<<18) | 0xff, value);
3253de2843b663fd621e9a6c75fed4da73e8c9a1b094Peter De Schrijver	gpio_bits((1<<18) | 0xff, (1<<18) | value);
3254de2843b663fd621e9a6c75fed4da73e8c9a1b094Peter De Schrijver	udelay(1);
3255de2843b663fd621e9a6c75fed4da73e8c9a1b094Peter De Schrijver	gpio_bits((1<<18) | 0xff, value);
3256de2843b663fd621e9a6c75fed4da73e8c9a1b094Peter De Schrijver}
3257de2843b663fd621e9a6c75fed4da73e8c9a1b094Peter De Schrijver
3258de2843b663fd621e9a6c75fed4da73e8c9a1b094Peter De Schrijverstatic void td3116_muxsel(struct bttv *btv, unsigned int input)
3259de2843b663fd621e9a6c75fed4da73e8c9a1b094Peter De Schrijver{
3260de2843b663fd621e9a6c75fed4da73e8c9a1b094Peter De Schrijver	u32 value;
3261de2843b663fd621e9a6c75fed4da73e8c9a1b094Peter De Schrijver	u32 highbit;
3262de2843b663fd621e9a6c75fed4da73e8c9a1b094Peter De Schrijver
3263de2843b663fd621e9a6c75fed4da73e8c9a1b094Peter De Schrijver	highbit = (input & 0x8) >> 3 ;
3264de2843b663fd621e9a6c75fed4da73e8c9a1b094Peter De Schrijver
3265de2843b663fd621e9a6c75fed4da73e8c9a1b094Peter De Schrijver	/* Disable outputs and set value in the mux */
3266de2843b663fd621e9a6c75fed4da73e8c9a1b094Peter De Schrijver	value = 0x11; /* Disable outputs */
3267de2843b663fd621e9a6c75fed4da73e8c9a1b094Peter De Schrijver	value |= ((input & 0x7) << 1)  << (4 * highbit);
3268de2843b663fd621e9a6c75fed4da73e8c9a1b094Peter De Schrijver	td3116_latch_value(btv, value);
3269de2843b663fd621e9a6c75fed4da73e8c9a1b094Peter De Schrijver
3270de2843b663fd621e9a6c75fed4da73e8c9a1b094Peter De Schrijver	/* Enable the correct output */
3271de2843b663fd621e9a6c75fed4da73e8c9a1b094Peter De Schrijver	value &= ~0x11;
3272de2843b663fd621e9a6c75fed4da73e8c9a1b094Peter De Schrijver	value |= ((highbit ^ 0x1) << 4) | highbit;
3273de2843b663fd621e9a6c75fed4da73e8c9a1b094Peter De Schrijver	td3116_latch_value(btv, value);
3274de2843b663fd621e9a6c75fed4da73e8c9a1b094Peter De Schrijver}
3275de2843b663fd621e9a6c75fed4da73e8c9a1b094Peter De Schrijver
32761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* ----------------------------------------------------------------------- */
32771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
32781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic void bttv_reset_audio(struct bttv *btv)
32791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
32801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/*
32811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	 * BT878A has a audio-reset register.
32821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	 * 1. This register is an audio reset function but it is in
32831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	 *    function-0 (video capture) address space.
32841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	 * 2. It is enough to do this once per power-up of the card.
32851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	 * 3. There is a typo in the Conexant doc -- it is not at
32861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	 *    0x5B, but at 0x058. (B is an odd-number, obviously a typo!).
32871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	 * --//Shrikumar 030609
32881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	 */
32891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	if (btv->id != 878)
32901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		return;
32911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
32921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	if (bttv_debug)
32938af443e581ab57a6a38f595eb40be3514ea55195Joe Perches		pr_debug("%d: BT878A ARESET\n", btv->c.nr);
32941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	btwrite((1<<7), 0x058);
32951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	udelay(10);
32961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	btwrite(     0, 0x058);
32971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
32981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
32991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* initialization part one -- before registering i2c bus */
33004c62e9764ab403d42f9b8871b1241fe7812f19d4Greg Kroah-Hartmanvoid bttv_init_card1(struct bttv *btv)
33011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
33021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	switch (btv->c.type) {
33035a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	case BTTV_BOARD_HAUPPAUGE:
33045a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	case BTTV_BOARD_HAUPPAUGE878:
33054ac97914c6c35f6bf132071c718e034d0846b9f5Mauro Carvalho Chehab		boot_msp34xx(btv,5);
33061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		break;
3307434b25263a236c9dd980617d69863ba0eff8c744Wade Berrier	case BTTV_BOARD_VOODOOTV_200:
33085a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	case BTTV_BOARD_VOODOOTV_FM:
33094ac97914c6c35f6bf132071c718e034d0846b9f5Mauro Carvalho Chehab		boot_msp34xx(btv,20);
33101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		break;
33115a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	case BTTV_BOARD_AVERMEDIA98:
33121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		boot_msp34xx(btv,11);
33131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		break;
33145a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	case BTTV_BOARD_HAUPPAUGEPVR:
33151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		pvr_boot(btv);
33161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		break;
33175a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	case BTTV_BOARD_TWINHAN_DST:
33185a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	case BTTV_BOARD_AVDVBT_771:
33195a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	case BTTV_BOARD_PINNACLESAT:
33201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		btv->use_i2c_hw = 1;
33211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		break;
33225a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	case BTTV_BOARD_ADLINK_RTV24:
33237c08fb02f1a1b86292aa144cc876a95fbe2a5606Michael Krufky		init_RTV24( btv );
33247c08fb02f1a1b86292aa144cc876a95fbe2a5606Michael Krufky		break;
3325c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner	case BTTV_BOARD_PCI_8604PW:
3326c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner		init_PCI8604PW(btv);
3327c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner		break;
33282d03e289ea4b13d78ce55f1ea0b0d45b8f1b34c3Mauro Carvalho Chehab
33291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	}
33301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	if (!bttv_tvcards[btv->c.type].has_dvb)
33311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		bttv_reset_audio(btv);
33321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
33331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
33341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* initialization part two -- after registering i2c bus */
33354c62e9764ab403d42f9b8871b1241fe7812f19d4Greg Kroah-Hartmanvoid bttv_init_card2(struct bttv *btv)
33361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
3337ac7dc84584310a836d13236767d71545f5b695b3Trent Piepho	btv->tuner_type = UNSET;
33381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
33395a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	if (BTTV_BOARD_UNKNOWN == btv->c.type) {
33401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		bttv_readee(btv,eeprom_data,0xa0);
33411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		identify_by_eeprom(btv,eeprom_data);
33421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	}
33431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
33441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	switch (btv->c.type) {
33455a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	case BTTV_BOARD_MIRO:
33465a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	case BTTV_BOARD_MIROPRO:
33475a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	case BTTV_BOARD_PINNACLE:
33485a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	case BTTV_BOARD_PINNACLEPRO:
33491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		/* miro/pinnacle */
33501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		miro_pinnacle_gpio(btv);
33511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		break;
33525a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	case BTTV_BOARD_FLYVIDEO_98:
33535a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	case BTTV_BOARD_MAXI:
33545a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	case BTTV_BOARD_LIFE_FLYKIT:
33555a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	case BTTV_BOARD_FLYVIDEO:
33565a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	case BTTV_BOARD_TYPHOON_TVIEW:
33575a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	case BTTV_BOARD_CHRONOS_VS2:
33585a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	case BTTV_BOARD_FLYVIDEO_98FM:
33595a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	case BTTV_BOARD_FLYVIDEO2000:
33605a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	case BTTV_BOARD_FLYVIDEO98EZ:
33615a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	case BTTV_BOARD_CONFERENCETV:
33625a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	case BTTV_BOARD_LIFETEC_9415:
33631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		flyvideo_gpio(btv);
33641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		break;
33655a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	case BTTV_BOARD_HAUPPAUGE:
33665a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	case BTTV_BOARD_HAUPPAUGE878:
33675a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	case BTTV_BOARD_HAUPPAUGEPVR:
33681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		/* pick up some config infos from the eeprom */
33691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		bttv_readee(btv,eeprom_data,0xa0);
33704ac97914c6c35f6bf132071c718e034d0846b9f5Mauro Carvalho Chehab		hauppauge_eeprom(btv);
33711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		break;
33725a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	case BTTV_BOARD_AVERMEDIA98:
33735a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	case BTTV_BOARD_AVPHONE98:
33741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		bttv_readee(btv,eeprom_data,0xa0);
33751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		avermedia_eeprom(btv);
33761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		break;
33775a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	case BTTV_BOARD_PXC200:
33781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		init_PXC200(btv);
33791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		break;
33805a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	case BTTV_BOARD_PICOLO_TETRA_CHIP:
33811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		picolo_tetra_init(btv);
33821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		break;
33835a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	case BTTV_BOARD_VHX:
33841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		btv->has_radio    = 1;
33851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		btv->has_matchbox = 1;
33861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		btv->mbox_we      = 0x20;
33871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		btv->mbox_most    = 0;
33881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		btv->mbox_clk     = 0x08;
33891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		btv->mbox_data    = 0x10;
33901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		btv->mbox_mask    = 0x38;
33911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		break;
33925a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	case BTTV_BOARD_VOBIS_BOOSTAR:
33935a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	case BTTV_BOARD_TERRATV:
33941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		terratec_active_radio_upgrade(btv);
33951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		break;
33965a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	case BTTV_BOARD_MAGICTVIEW061:
33971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		if (btv->cardid == 0x3002144f) {
33981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			btv->has_radio=1;
33998af443e581ab57a6a38f595eb40be3514ea55195Joe Perches			pr_info("%d: radio detected by subsystem id (CPH05x)\n",
34008af443e581ab57a6a38f595eb40be3514ea55195Joe Perches				btv->c.nr);
34011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		}
34021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		break;
3403b930e1d851c3ffbf82127bd0e4d72ffe94d4b7f2Michael Krufky	case BTTV_BOARD_STB2:
34044ac97914c6c35f6bf132071c718e034d0846b9f5Mauro Carvalho Chehab		if (btv->cardid == 0x3060121a) {
34051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			/* Fix up entry for 3DFX VoodooTV 100,
34061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			   which is an OEM STB card variant. */
34071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			btv->has_radio=0;
34081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			btv->tuner_type=TUNER_TEMIC_NTSC;
34091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		}
34101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		break;
34115a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	case BTTV_BOARD_OSPREY1x0:
34125a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	case BTTV_BOARD_OSPREY1x0_848:
34135a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	case BTTV_BOARD_OSPREY101_848:
34145a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	case BTTV_BOARD_OSPREY1x1:
34155a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	case BTTV_BOARD_OSPREY1x1_SVID:
34165a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	case BTTV_BOARD_OSPREY2xx:
34175a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	case BTTV_BOARD_OSPREY2x0_SVID:
34185a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	case BTTV_BOARD_OSPREY2x0:
3419cf784d554fdb94f21671830135dba56b507126cfTrent Piepho	case BTTV_BOARD_OSPREY440:
34205a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	case BTTV_BOARD_OSPREY500:
34215a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	case BTTV_BOARD_OSPREY540:
34225a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	case BTTV_BOARD_OSPREY2000:
34231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		bttv_readee(btv,eeprom_data,0xa0);
3424cf784d554fdb94f21671830135dba56b507126cfTrent Piepho		osprey_eeprom(btv, eeprom_data);
34251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		break;
34265a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	case BTTV_BOARD_IDS_EAGLE:
34271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		init_ids_eagle(btv);
34281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		break;
34295a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	case BTTV_BOARD_MODTEC_205:
34301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		bttv_readee(btv,eeprom_data,0xa0);
34311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		modtec_eeprom(btv);
34321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		break;
34335a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	case BTTV_BOARD_LMLBT4:
34341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		init_lmlbt4x(btv);
34351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		break;
34365a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	case BTTV_BOARD_TIBET_CS16:
34371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		tibetCS16_init(btv);
34381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		break;
34395a25e84b3ca053f240dc8fa3320bc843a0a394f5Mauro Carvalho Chehab	case BTTV_BOARD_KODICOM_4400R:
34401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		kodicom4400r_init(btv);
34411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		break;
34420c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo	case BTTV_BOARD_GEOVISION_GV800S:
34430c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo		gv800s_init(btv);
34440c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo		break;
34451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	}
34461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
34471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* pll configuration */
34484ac97914c6c35f6bf132071c718e034d0846b9f5Mauro Carvalho Chehab	if (!(btv->id==848 && btv->revision==0x11)) {
34491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		/* defaults from card list */
34501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		if (PLL_28 == bttv_tvcards[btv->c.type].pll) {
34511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			btv->pll.pll_ifreq=28636363;
34521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			btv->pll.pll_crystal=BT848_IFORM_XT0;
34531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		}
34541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		if (PLL_35 == bttv_tvcards[btv->c.type].pll) {
34551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			btv->pll.pll_ifreq=35468950;
34561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			btv->pll.pll_crystal=BT848_IFORM_XT1;
34571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		}
3458ec7c15b58f34015df182e909fbb80674211daf54Ondrej Zary		if (PLL_14 == bttv_tvcards[btv->c.type].pll) {
3459ec7c15b58f34015df182e909fbb80674211daf54Ondrej Zary			btv->pll.pll_ifreq = 14318181;
3460ec7c15b58f34015df182e909fbb80674211daf54Ondrej Zary			btv->pll.pll_crystal = BT848_IFORM_XT0;
3461ec7c15b58f34015df182e909fbb80674211daf54Ondrej Zary		}
34621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		/* insmod options can override */
34634ac97914c6c35f6bf132071c718e034d0846b9f5Mauro Carvalho Chehab		switch (pll[btv->c.nr]) {
34644ac97914c6c35f6bf132071c718e034d0846b9f5Mauro Carvalho Chehab		case 0: /* none */
34651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			btv->pll.pll_crystal = 0;
34661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			btv->pll.pll_ifreq   = 0;
34671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			btv->pll.pll_ofreq   = 0;
34684ac97914c6c35f6bf132071c718e034d0846b9f5Mauro Carvalho Chehab			break;
34694ac97914c6c35f6bf132071c718e034d0846b9f5Mauro Carvalho Chehab		case 1: /* 28 MHz */
34701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		case 28:
34714ac97914c6c35f6bf132071c718e034d0846b9f5Mauro Carvalho Chehab			btv->pll.pll_ifreq   = 28636363;
34721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			btv->pll.pll_ofreq   = 0;
34734ac97914c6c35f6bf132071c718e034d0846b9f5Mauro Carvalho Chehab			btv->pll.pll_crystal = BT848_IFORM_XT0;
34744ac97914c6c35f6bf132071c718e034d0846b9f5Mauro Carvalho Chehab			break;
34754ac97914c6c35f6bf132071c718e034d0846b9f5Mauro Carvalho Chehab		case 2: /* 35 MHz */
34761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		case 35:
34774ac97914c6c35f6bf132071c718e034d0846b9f5Mauro Carvalho Chehab			btv->pll.pll_ifreq   = 35468950;
34781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			btv->pll.pll_ofreq   = 0;
34794ac97914c6c35f6bf132071c718e034d0846b9f5Mauro Carvalho Chehab			btv->pll.pll_crystal = BT848_IFORM_XT1;
34804ac97914c6c35f6bf132071c718e034d0846b9f5Mauro Carvalho Chehab			break;
3481ec7c15b58f34015df182e909fbb80674211daf54Ondrej Zary		case 3: /* 14 MHz */
3482ec7c15b58f34015df182e909fbb80674211daf54Ondrej Zary		case 14:
3483ec7c15b58f34015df182e909fbb80674211daf54Ondrej Zary			btv->pll.pll_ifreq   = 14318181;
3484ec7c15b58f34015df182e909fbb80674211daf54Ondrej Zary			btv->pll.pll_ofreq   = 0;
3485ec7c15b58f34015df182e909fbb80674211daf54Ondrej Zary			btv->pll.pll_crystal = BT848_IFORM_XT0;
3486ec7c15b58f34015df182e909fbb80674211daf54Ondrej Zary			break;
34874ac97914c6c35f6bf132071c718e034d0846b9f5Mauro Carvalho Chehab		}
34884ac97914c6c35f6bf132071c718e034d0846b9f5Mauro Carvalho Chehab	}
34891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	btv->pll.pll_current = -1;
34901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
34911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* tuner configuration (from card list / autodetect / insmod option) */
349224a70fdce872d70171b1f49dcd1a7c3a4e8396b2Mauro Carvalho Chehab	if (UNSET != bttv_tvcards[btv->c.type].tuner_type)
3493abb0362f49c361f71b5aa6d244d4847145ed53c1Trent Piepho		if (UNSET == btv->tuner_type)
34944ac97914c6c35f6bf132071c718e034d0846b9f5Mauro Carvalho Chehab			btv->tuner_type = bttv_tvcards[btv->c.type].tuner_type;
34951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	if (UNSET != tuner[btv->c.nr])
34961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		btv->tuner_type = tuner[btv->c.nr];
3497ac7dc84584310a836d13236767d71545f5b695b3Trent Piepho
3498abb0362f49c361f71b5aa6d244d4847145ed53c1Trent Piepho	if (btv->tuner_type == TUNER_ABSENT)
34998af443e581ab57a6a38f595eb40be3514ea55195Joe Perches		pr_info("%d: tuner absent\n", btv->c.nr);
35008af443e581ab57a6a38f595eb40be3514ea55195Joe Perches	else if (btv->tuner_type == UNSET)
35018af443e581ab57a6a38f595eb40be3514ea55195Joe Perches		pr_warn("%d: tuner type unset\n", btv->c.nr);
3502ac7dc84584310a836d13236767d71545f5b695b3Trent Piepho	else
35038af443e581ab57a6a38f595eb40be3514ea55195Joe Perches		pr_info("%d: tuner type=%d\n", btv->c.nr, btv->tuner_type);
3504f3b512fd42b4ed6ff47a8afb4f42ac3cc325ddadMauro Carvalho Chehab
3505859f0277a6c3ba59b0a5a1eb183f8f6ce661a95dHans Verkuil	if (autoload != UNSET) {
35068af443e581ab57a6a38f595eb40be3514ea55195Joe Perches		pr_warn("%d: the autoload option is obsolete\n", btv->c.nr);
35078af443e581ab57a6a38f595eb40be3514ea55195Joe Perches		pr_warn("%d: use option msp3400, tda7432 or tvaudio to override which audio module should be used\n",
35088af443e581ab57a6a38f595eb40be3514ea55195Joe Perches			btv->c.nr);
3509859f0277a6c3ba59b0a5a1eb183f8f6ce661a95dHans Verkuil	}
3510859f0277a6c3ba59b0a5a1eb183f8f6ce661a95dHans Verkuil
3511abb0362f49c361f71b5aa6d244d4847145ed53c1Trent Piepho	if (UNSET == btv->tuner_type)
3512abb0362f49c361f71b5aa6d244d4847145ed53c1Trent Piepho		btv->tuner_type = TUNER_ABSENT;
3513abb0362f49c361f71b5aa6d244d4847145ed53c1Trent Piepho
35145221e21e5ecd3aebd2e8e3234bd18883ce720945Trent Piepho	btv->dig = bttv_tvcards[btv->c.type].has_dig_in ?
35155221e21e5ecd3aebd2e8e3234bd18883ce720945Trent Piepho		   bttv_tvcards[btv->c.type].video_inputs - 1 : UNSET;
35164c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho	btv->svhs = bttv_tvcards[btv->c.type].svhs == NO_SVHS ?
35174c548d4b28c0c65938914b2790fd2ca2e9c61d63Trent Piepho		    UNSET : bttv_tvcards[btv->c.type].svhs;
35181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	if (svhs[btv->c.nr] != UNSET)
35191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		btv->svhs = svhs[btv->c.nr];
35201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	if (remote[btv->c.nr] != UNSET)
35211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		btv->has_remote = remote[btv->c.nr];
35221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
35231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	if (bttv_tvcards[btv->c.type].has_radio)
35242c90577841a76f1935ff3437ffb552b41f5c28faHans Verkuil		btv->has_radio = 1;
35251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	if (bttv_tvcards[btv->c.type].has_remote)
35262c90577841a76f1935ff3437ffb552b41f5c28faHans Verkuil		btv->has_remote = 1;
35277c08fb02f1a1b86292aa144cc876a95fbe2a5606Michael Krufky	if (!bttv_tvcards[btv->c.type].no_gpioirq)
35282c90577841a76f1935ff3437ffb552b41f5c28faHans Verkuil		btv->gpioirq = 1;
35294b9b936f278163614543d66f8e8c93d5484dd148Nickolay V. Shmyrev	if (bttv_tvcards[btv->c.type].volume_gpio)
35302c90577841a76f1935ff3437ffb552b41f5c28faHans Verkuil		btv->volume_gpio = bttv_tvcards[btv->c.type].volume_gpio;
35314b9b936f278163614543d66f8e8c93d5484dd148Nickolay V. Shmyrev	if (bttv_tvcards[btv->c.type].audio_mode_gpio)
35322c90577841a76f1935ff3437ffb552b41f5c28faHans Verkuil		btv->audio_mode_gpio = bttv_tvcards[btv->c.type].audio_mode_gpio;
35331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3534abb0362f49c361f71b5aa6d244d4847145ed53c1Trent Piepho	if (btv->tuner_type == TUNER_ABSENT)
3535ac7dc84584310a836d13236767d71545f5b695b3Trent Piepho		return;  /* no tuner or related drivers to load */
3536ac7dc84584310a836d13236767d71545f5b695b3Trent Piepho
3537859f0277a6c3ba59b0a5a1eb183f8f6ce661a95dHans Verkuil	if (btv->has_saa6588 || saa6588[btv->c.nr]) {
3538859f0277a6c3ba59b0a5a1eb183f8f6ce661a95dHans Verkuil		/* Probe for RDS receiver chip */
3539859f0277a6c3ba59b0a5a1eb183f8f6ce661a95dHans Verkuil		static const unsigned short addrs[] = {
3540859f0277a6c3ba59b0a5a1eb183f8f6ce661a95dHans Verkuil			0x20 >> 1,
3541859f0277a6c3ba59b0a5a1eb183f8f6ce661a95dHans Verkuil			0x22 >> 1,
3542859f0277a6c3ba59b0a5a1eb183f8f6ce661a95dHans Verkuil			I2C_CLIENT_END
3543859f0277a6c3ba59b0a5a1eb183f8f6ce661a95dHans Verkuil		};
3544859f0277a6c3ba59b0a5a1eb183f8f6ce661a95dHans Verkuil		struct v4l2_subdev *sd;
3545859f0277a6c3ba59b0a5a1eb183f8f6ce661a95dHans Verkuil
354653dacb15705901e14b03dcba27e40364fedd9d09Hans Verkuil		sd = v4l2_i2c_new_subdev(&btv->c.v4l2_dev,
35479a1f8b34aa539000da17a06235e4bec254d0bfb5Laurent Pinchart			&btv->c.i2c_adap, "saa6588", 0, addrs);
3548859f0277a6c3ba59b0a5a1eb183f8f6ce661a95dHans Verkuil		btv->has_saa6588 = (sd != NULL);
3549859f0277a6c3ba59b0a5a1eb183f8f6ce661a95dHans Verkuil	}
3550859f0277a6c3ba59b0a5a1eb183f8f6ce661a95dHans Verkuil
35511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* try to detect audio/fader chips */
35521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3553859f0277a6c3ba59b0a5a1eb183f8f6ce661a95dHans Verkuil	/* First check if the user specified the audio chip via a module
3554859f0277a6c3ba59b0a5a1eb183f8f6ce661a95dHans Verkuil	   option. */
35551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3556859f0277a6c3ba59b0a5a1eb183f8f6ce661a95dHans Verkuil	switch (audiodev[btv->c.nr]) {
3557859f0277a6c3ba59b0a5a1eb183f8f6ce661a95dHans Verkuil	case -1:
3558859f0277a6c3ba59b0a5a1eb183f8f6ce661a95dHans Verkuil		return;	/* do not load any audio module */
35591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3560859f0277a6c3ba59b0a5a1eb183f8f6ce661a95dHans Verkuil	case 0: /* autodetect */
3561859f0277a6c3ba59b0a5a1eb183f8f6ce661a95dHans Verkuil		break;
3562859f0277a6c3ba59b0a5a1eb183f8f6ce661a95dHans Verkuil
3563859f0277a6c3ba59b0a5a1eb183f8f6ce661a95dHans Verkuil	case 1: {
3564859f0277a6c3ba59b0a5a1eb183f8f6ce661a95dHans Verkuil		/* The user specified that we should probe for msp3400 */
3565859f0277a6c3ba59b0a5a1eb183f8f6ce661a95dHans Verkuil		static const unsigned short addrs[] = {
3566859f0277a6c3ba59b0a5a1eb183f8f6ce661a95dHans Verkuil			I2C_ADDR_MSP3400 >> 1,
3567859f0277a6c3ba59b0a5a1eb183f8f6ce661a95dHans Verkuil			I2C_ADDR_MSP3400_ALT >> 1,
3568859f0277a6c3ba59b0a5a1eb183f8f6ce661a95dHans Verkuil			I2C_CLIENT_END
3569859f0277a6c3ba59b0a5a1eb183f8f6ce661a95dHans Verkuil		};
3570859f0277a6c3ba59b0a5a1eb183f8f6ce661a95dHans Verkuil
357153dacb15705901e14b03dcba27e40364fedd9d09Hans Verkuil		btv->sd_msp34xx = v4l2_i2c_new_subdev(&btv->c.v4l2_dev,
35729a1f8b34aa539000da17a06235e4bec254d0bfb5Laurent Pinchart			&btv->c.i2c_adap, "msp3400", 0, addrs);
3573859f0277a6c3ba59b0a5a1eb183f8f6ce661a95dHans Verkuil		if (btv->sd_msp34xx)
3574859f0277a6c3ba59b0a5a1eb183f8f6ce661a95dHans Verkuil			return;
3575859f0277a6c3ba59b0a5a1eb183f8f6ce661a95dHans Verkuil		goto no_audio;
3576859f0277a6c3ba59b0a5a1eb183f8f6ce661a95dHans Verkuil	}
3577859f0277a6c3ba59b0a5a1eb183f8f6ce661a95dHans Verkuil
3578859f0277a6c3ba59b0a5a1eb183f8f6ce661a95dHans Verkuil	case 2: {
3579859f0277a6c3ba59b0a5a1eb183f8f6ce661a95dHans Verkuil		/* The user specified that we should probe for tda7432 */
3580859f0277a6c3ba59b0a5a1eb183f8f6ce661a95dHans Verkuil		static const unsigned short addrs[] = {
3581859f0277a6c3ba59b0a5a1eb183f8f6ce661a95dHans Verkuil			I2C_ADDR_TDA7432 >> 1,
3582859f0277a6c3ba59b0a5a1eb183f8f6ce661a95dHans Verkuil			I2C_CLIENT_END
3583859f0277a6c3ba59b0a5a1eb183f8f6ce661a95dHans Verkuil		};
3584859f0277a6c3ba59b0a5a1eb183f8f6ce661a95dHans Verkuil
358553dacb15705901e14b03dcba27e40364fedd9d09Hans Verkuil		if (v4l2_i2c_new_subdev(&btv->c.v4l2_dev,
35869a1f8b34aa539000da17a06235e4bec254d0bfb5Laurent Pinchart				&btv->c.i2c_adap, "tda7432", 0, addrs))
3587859f0277a6c3ba59b0a5a1eb183f8f6ce661a95dHans Verkuil			return;
3588859f0277a6c3ba59b0a5a1eb183f8f6ce661a95dHans Verkuil		goto no_audio;
3589859f0277a6c3ba59b0a5a1eb183f8f6ce661a95dHans Verkuil	}
3590859f0277a6c3ba59b0a5a1eb183f8f6ce661a95dHans Verkuil
3591859f0277a6c3ba59b0a5a1eb183f8f6ce661a95dHans Verkuil	case 3: {
3592859f0277a6c3ba59b0a5a1eb183f8f6ce661a95dHans Verkuil		/* The user specified that we should probe for tvaudio */
359353dacb15705901e14b03dcba27e40364fedd9d09Hans Verkuil		btv->sd_tvaudio = v4l2_i2c_new_subdev(&btv->c.v4l2_dev,
35949a1f8b34aa539000da17a06235e4bec254d0bfb5Laurent Pinchart			&btv->c.i2c_adap, "tvaudio", 0, tvaudio_addrs());
3595859f0277a6c3ba59b0a5a1eb183f8f6ce661a95dHans Verkuil		if (btv->sd_tvaudio)
3596859f0277a6c3ba59b0a5a1eb183f8f6ce661a95dHans Verkuil			return;
3597859f0277a6c3ba59b0a5a1eb183f8f6ce661a95dHans Verkuil		goto no_audio;
3598859f0277a6c3ba59b0a5a1eb183f8f6ce661a95dHans Verkuil	}
3599859f0277a6c3ba59b0a5a1eb183f8f6ce661a95dHans Verkuil
3600859f0277a6c3ba59b0a5a1eb183f8f6ce661a95dHans Verkuil	default:
36018af443e581ab57a6a38f595eb40be3514ea55195Joe Perches		pr_warn("%d: unknown audiodev value!\n", btv->c.nr);
3602859f0277a6c3ba59b0a5a1eb183f8f6ce661a95dHans Verkuil		return;
3603859f0277a6c3ba59b0a5a1eb183f8f6ce661a95dHans Verkuil	}
3604859f0277a6c3ba59b0a5a1eb183f8f6ce661a95dHans Verkuil
3605859f0277a6c3ba59b0a5a1eb183f8f6ce661a95dHans Verkuil	/* There were no overrides, so now we try to discover this through the
3606859f0277a6c3ba59b0a5a1eb183f8f6ce661a95dHans Verkuil	   card definition */
3607859f0277a6c3ba59b0a5a1eb183f8f6ce661a95dHans Verkuil
3608859f0277a6c3ba59b0a5a1eb183f8f6ce661a95dHans Verkuil	/* probe for msp3400 first: this driver can detect whether or not
3609859f0277a6c3ba59b0a5a1eb183f8f6ce661a95dHans Verkuil	   it really is a msp3400, so it will return NULL when the device
3610859f0277a6c3ba59b0a5a1eb183f8f6ce661a95dHans Verkuil	   found is really something else (e.g. a tea6300). */
3611859f0277a6c3ba59b0a5a1eb183f8f6ce661a95dHans Verkuil	if (!bttv_tvcards[btv->c.type].no_msp34xx) {
361253dacb15705901e14b03dcba27e40364fedd9d09Hans Verkuil		btv->sd_msp34xx = v4l2_i2c_new_subdev(&btv->c.v4l2_dev,
36139a1f8b34aa539000da17a06235e4bec254d0bfb5Laurent Pinchart			&btv->c.i2c_adap, "msp3400",
361453dacb15705901e14b03dcba27e40364fedd9d09Hans Verkuil			0, I2C_ADDRS(I2C_ADDR_MSP3400 >> 1));
3615859f0277a6c3ba59b0a5a1eb183f8f6ce661a95dHans Verkuil	} else if (bttv_tvcards[btv->c.type].msp34xx_alt) {
361653dacb15705901e14b03dcba27e40364fedd9d09Hans Verkuil		btv->sd_msp34xx = v4l2_i2c_new_subdev(&btv->c.v4l2_dev,
36179a1f8b34aa539000da17a06235e4bec254d0bfb5Laurent Pinchart			&btv->c.i2c_adap, "msp3400",
361853dacb15705901e14b03dcba27e40364fedd9d09Hans Verkuil			0, I2C_ADDRS(I2C_ADDR_MSP3400_ALT >> 1));
3619859f0277a6c3ba59b0a5a1eb183f8f6ce661a95dHans Verkuil	}
3620859f0277a6c3ba59b0a5a1eb183f8f6ce661a95dHans Verkuil
3621859f0277a6c3ba59b0a5a1eb183f8f6ce661a95dHans Verkuil	/* If we found a msp34xx, then we're done. */
3622859f0277a6c3ba59b0a5a1eb183f8f6ce661a95dHans Verkuil	if (btv->sd_msp34xx)
3623859f0277a6c3ba59b0a5a1eb183f8f6ce661a95dHans Verkuil		return;
3624859f0277a6c3ba59b0a5a1eb183f8f6ce661a95dHans Verkuil
3625fafdc26b8558838988f406abef27d6dcc5b3dd76Hans Verkuil	/* Now see if we can find one of the tvaudio devices. */
3626fafdc26b8558838988f406abef27d6dcc5b3dd76Hans Verkuil	btv->sd_tvaudio = v4l2_i2c_new_subdev(&btv->c.v4l2_dev,
3627fafdc26b8558838988f406abef27d6dcc5b3dd76Hans Verkuil		&btv->c.i2c_adap, "tvaudio", 0, tvaudio_addrs());
3628fafdc26b8558838988f406abef27d6dcc5b3dd76Hans Verkuil	if (btv->sd_tvaudio) {
3629fafdc26b8558838988f406abef27d6dcc5b3dd76Hans Verkuil		/* There may be two tvaudio chips on the card, so try to
3630fafdc26b8558838988f406abef27d6dcc5b3dd76Hans Verkuil		   find another. */
3631fafdc26b8558838988f406abef27d6dcc5b3dd76Hans Verkuil		v4l2_i2c_new_subdev(&btv->c.v4l2_dev,
3632fafdc26b8558838988f406abef27d6dcc5b3dd76Hans Verkuil			&btv->c.i2c_adap, "tvaudio", 0, tvaudio_addrs());
3633fafdc26b8558838988f406abef27d6dcc5b3dd76Hans Verkuil	}
3634fafdc26b8558838988f406abef27d6dcc5b3dd76Hans Verkuil
3635859f0277a6c3ba59b0a5a1eb183f8f6ce661a95dHans Verkuil	/* it might also be a tda7432. */
3636859f0277a6c3ba59b0a5a1eb183f8f6ce661a95dHans Verkuil	if (!bttv_tvcards[btv->c.type].no_tda7432) {
3637859f0277a6c3ba59b0a5a1eb183f8f6ce661a95dHans Verkuil		static const unsigned short addrs[] = {
3638859f0277a6c3ba59b0a5a1eb183f8f6ce661a95dHans Verkuil			I2C_ADDR_TDA7432 >> 1,
3639859f0277a6c3ba59b0a5a1eb183f8f6ce661a95dHans Verkuil			I2C_CLIENT_END
3640859f0277a6c3ba59b0a5a1eb183f8f6ce661a95dHans Verkuil		};
3641859f0277a6c3ba59b0a5a1eb183f8f6ce661a95dHans Verkuil
364201df530c2791610727e345b3dd97ef75943c7320Hans Verkuil		btv->sd_tda7432 = v4l2_i2c_new_subdev(&btv->c.v4l2_dev,
364301df530c2791610727e345b3dd97ef75943c7320Hans Verkuil				&btv->c.i2c_adap, "tda7432", 0, addrs);
364401df530c2791610727e345b3dd97ef75943c7320Hans Verkuil		if (btv->sd_tda7432)
3645859f0277a6c3ba59b0a5a1eb183f8f6ce661a95dHans Verkuil			return;
3646859f0277a6c3ba59b0a5a1eb183f8f6ce661a95dHans Verkuil	}
3647859f0277a6c3ba59b0a5a1eb183f8f6ce661a95dHans Verkuil	if (btv->sd_tvaudio)
3648859f0277a6c3ba59b0a5a1eb183f8f6ce661a95dHans Verkuil		return;
36491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3650859f0277a6c3ba59b0a5a1eb183f8f6ce661a95dHans Verkuilno_audio:
36518af443e581ab57a6a38f595eb40be3514ea55195Joe Perches	pr_warn("%d: audio absent, no audio device found!\n", btv->c.nr);
36521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
36531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
36541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
36552c90577841a76f1935ff3437ffb552b41f5c28faHans Verkuil/* initialize the tuner */
36564c62e9764ab403d42f9b8871b1241fe7812f19d4Greg Kroah-Hartmanvoid bttv_init_tuner(struct bttv *btv)
36572c90577841a76f1935ff3437ffb552b41f5c28faHans Verkuil{
36582c90577841a76f1935ff3437ffb552b41f5c28faHans Verkuil	int addr = ADDR_UNSET;
36592c90577841a76f1935ff3437ffb552b41f5c28faHans Verkuil
36602c90577841a76f1935ff3437ffb552b41f5c28faHans Verkuil	if (ADDR_UNSET != bttv_tvcards[btv->c.type].tuner_addr)
36612c90577841a76f1935ff3437ffb552b41f5c28faHans Verkuil		addr = bttv_tvcards[btv->c.type].tuner_addr;
36622c90577841a76f1935ff3437ffb552b41f5c28faHans Verkuil
36632c90577841a76f1935ff3437ffb552b41f5c28faHans Verkuil	if (btv->tuner_type != TUNER_ABSENT) {
36642c90577841a76f1935ff3437ffb552b41f5c28faHans Verkuil		struct tuner_setup tun_setup;
36652c90577841a76f1935ff3437ffb552b41f5c28faHans Verkuil
36662c90577841a76f1935ff3437ffb552b41f5c28faHans Verkuil		/* Load tuner module before issuing tuner config call! */
36675c164646e25a5a073875c6ca346efa0d5afb6934Hans de Goede		if (btv->has_radio)
366853dacb15705901e14b03dcba27e40364fedd9d09Hans Verkuil			v4l2_i2c_new_subdev(&btv->c.v4l2_dev,
36699a1f8b34aa539000da17a06235e4bec254d0bfb5Laurent Pinchart				&btv->c.i2c_adap, "tuner",
367053dacb15705901e14b03dcba27e40364fedd9d09Hans Verkuil				0, v4l2_i2c_tuner_addrs(ADDRS_RADIO));
367153dacb15705901e14b03dcba27e40364fedd9d09Hans Verkuil		v4l2_i2c_new_subdev(&btv->c.v4l2_dev,
36729a1f8b34aa539000da17a06235e4bec254d0bfb5Laurent Pinchart				&btv->c.i2c_adap, "tuner",
367353dacb15705901e14b03dcba27e40364fedd9d09Hans Verkuil				0, v4l2_i2c_tuner_addrs(ADDRS_DEMOD));
367453dacb15705901e14b03dcba27e40364fedd9d09Hans Verkuil		v4l2_i2c_new_subdev(&btv->c.v4l2_dev,
36759a1f8b34aa539000da17a06235e4bec254d0bfb5Laurent Pinchart				&btv->c.i2c_adap, "tuner",
367653dacb15705901e14b03dcba27e40364fedd9d09Hans Verkuil				0, v4l2_i2c_tuner_addrs(ADDRS_TV_WITH_DEMOD));
36772c90577841a76f1935ff3437ffb552b41f5c28faHans Verkuil
3678ad020dc2fe9039628cf6cef42cd1b76531ee8411Mauro Carvalho Chehab		tun_setup.mode_mask = T_ANALOG_TV;
36792c90577841a76f1935ff3437ffb552b41f5c28faHans Verkuil		tun_setup.type = btv->tuner_type;
36802c90577841a76f1935ff3437ffb552b41f5c28faHans Verkuil		tun_setup.addr = addr;
36812c90577841a76f1935ff3437ffb552b41f5c28faHans Verkuil
36825c164646e25a5a073875c6ca346efa0d5afb6934Hans de Goede		if (btv->has_radio)
36832c90577841a76f1935ff3437ffb552b41f5c28faHans Verkuil			tun_setup.mode_mask |= T_RADIO;
36842c90577841a76f1935ff3437ffb552b41f5c28faHans Verkuil
36852c90577841a76f1935ff3437ffb552b41f5c28faHans Verkuil		bttv_call_all(btv, tuner, s_type_addr, &tun_setup);
36862c90577841a76f1935ff3437ffb552b41f5c28faHans Verkuil	}
36872c90577841a76f1935ff3437ffb552b41f5c28faHans Verkuil
36882c90577841a76f1935ff3437ffb552b41f5c28faHans Verkuil	if (btv->tda9887_conf) {
36892c90577841a76f1935ff3437ffb552b41f5c28faHans Verkuil		struct v4l2_priv_tun_config tda9887_cfg;
36902c90577841a76f1935ff3437ffb552b41f5c28faHans Verkuil
36912c90577841a76f1935ff3437ffb552b41f5c28faHans Verkuil		tda9887_cfg.tuner = TUNER_TDA9887;
36922c90577841a76f1935ff3437ffb552b41f5c28faHans Verkuil		tda9887_cfg.priv = &btv->tda9887_conf;
36932c90577841a76f1935ff3437ffb552b41f5c28faHans Verkuil
36942c90577841a76f1935ff3437ffb552b41f5c28faHans Verkuil		bttv_call_all(btv, tuner, s_config, &tda9887_cfg);
36952c90577841a76f1935ff3437ffb552b41f5c28faHans Verkuil	}
36962c90577841a76f1935ff3437ffb552b41f5c28faHans Verkuil}
36972c90577841a76f1935ff3437ffb552b41f5c28faHans Verkuil
36981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* ----------------------------------------------------------------------- */
36991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
37001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic void modtec_eeprom(struct bttv *btv)
37011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
37021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	if( strncmp(&(eeprom_data[0x1e]),"Temic 4066 FY5",14) ==0) {
37031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		btv->tuner_type=TUNER_TEMIC_4066FY5_PAL_I;
37048af443e581ab57a6a38f595eb40be3514ea55195Joe Perches		pr_info("%d: Modtec: Tuner autodetected by eeprom: %s\n",
37058af443e581ab57a6a38f595eb40be3514ea55195Joe Perches			btv->c.nr, &eeprom_data[0x1e]);
37061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	} else if (strncmp(&(eeprom_data[0x1e]),"Alps TSBB5",10) ==0) {
37071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		btv->tuner_type=TUNER_ALPS_TSBB5_PAL_I;
37088af443e581ab57a6a38f595eb40be3514ea55195Joe Perches		pr_info("%d: Modtec: Tuner autodetected by eeprom: %s\n",
37098af443e581ab57a6a38f595eb40be3514ea55195Joe Perches			btv->c.nr, &eeprom_data[0x1e]);
37104ac97914c6c35f6bf132071c718e034d0846b9f5Mauro Carvalho Chehab	} else if (strncmp(&(eeprom_data[0x1e]),"Philips FM1246",14) ==0) {
37114ac97914c6c35f6bf132071c718e034d0846b9f5Mauro Carvalho Chehab		btv->tuner_type=TUNER_PHILIPS_NTSC;
37128af443e581ab57a6a38f595eb40be3514ea55195Joe Perches		pr_info("%d: Modtec: Tuner autodetected by eeprom: %s\n",
37138af443e581ab57a6a38f595eb40be3514ea55195Joe Perches			btv->c.nr, &eeprom_data[0x1e]);
37141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	} else {
37158af443e581ab57a6a38f595eb40be3514ea55195Joe Perches		pr_info("%d: Modtec: Unknown TunerString: %s\n",
37168af443e581ab57a6a38f595eb40be3514ea55195Joe Perches			btv->c.nr, &eeprom_data[0x1e]);
37171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	}
37181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
37191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
37204c62e9764ab403d42f9b8871b1241fe7812f19d4Greg Kroah-Hartmanstatic void hauppauge_eeprom(struct bttv *btv)
37211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
37221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct tveeprom tv;
37231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
37240f97a931b337e4662e736ca67f1fab0a187f5852Mauro Carvalho Chehab	tveeprom_hauppauge_analog(&btv->i2c_client, &tv, eeprom_data);
37251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	btv->tuner_type = tv.tuner_type;
37261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	btv->has_radio  = tv.has_radio;
3727cd1257d860f6ee09b589723a5d3888b1fed46487Steven Toth
37288af443e581ab57a6a38f595eb40be3514ea55195Joe Perches	pr_info("%d: Hauppauge eeprom indicates model#%d\n",
3729cd1257d860f6ee09b589723a5d3888b1fed46487Steven Toth		btv->c.nr, tv.model);
3730cd1257d860f6ee09b589723a5d3888b1fed46487Steven Toth
3731cd1257d860f6ee09b589723a5d3888b1fed46487Steven Toth	/*
3732cd1257d860f6ee09b589723a5d3888b1fed46487Steven Toth	 * Some of the 878 boards have duplicate PCI IDs. Switch the board
3733cd1257d860f6ee09b589723a5d3888b1fed46487Steven Toth	 * type based on model #.
3734cd1257d860f6ee09b589723a5d3888b1fed46487Steven Toth	 */
3735cd1257d860f6ee09b589723a5d3888b1fed46487Steven Toth	if(tv.model == 64900) {
37368af443e581ab57a6a38f595eb40be3514ea55195Joe Perches		pr_info("%d: Switching board type from %s to %s\n",
3737cd1257d860f6ee09b589723a5d3888b1fed46487Steven Toth			btv->c.nr,
3738cd1257d860f6ee09b589723a5d3888b1fed46487Steven Toth			bttv_tvcards[btv->c.type].name,
3739cd1257d860f6ee09b589723a5d3888b1fed46487Steven Toth			bttv_tvcards[BTTV_BOARD_HAUPPAUGE_IMPACTVCB].name);
3740cd1257d860f6ee09b589723a5d3888b1fed46487Steven Toth		btv->c.type = BTTV_BOARD_HAUPPAUGE_IMPACTVCB;
3741cd1257d860f6ee09b589723a5d3888b1fed46487Steven Toth	}
37427025e521b1b068af8a47a7625335a605bbd4d7eaHans de Goede
37437025e521b1b068af8a47a7625335a605bbd4d7eaHans de Goede	/* The 61334 needs the msp3410 to do the radio demod to get sound */
37447025e521b1b068af8a47a7625335a605bbd4d7eaHans de Goede	if (tv.model == 61334)
37457025e521b1b068af8a47a7625335a605bbd4d7eaHans de Goede		btv->radio_uses_msp_demodulator = 1;
37461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
37471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
37481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic int terratec_active_radio_upgrade(struct bttv *btv)
37491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
37501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int freq;
37511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
37521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	btv->has_radio    = 1;
37531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	btv->has_matchbox = 1;
37541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	btv->mbox_we      = 0x10;
37551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	btv->mbox_most    = 0x20;
37561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	btv->mbox_clk     = 0x08;
37571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	btv->mbox_data    = 0x04;
37581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	btv->mbox_mask    = 0x3c;
37591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
37601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	btv->mbox_iow     = 1 <<  8;
37611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	btv->mbox_ior     = 1 <<  9;
37621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	btv->mbox_csel    = 1 << 10;
37631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
37641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	freq=88000/62.5;
376524a70fdce872d70171b1f49dcd1a7c3a4e8396b2Mauro Carvalho Chehab	tea5757_write(btv, 5 * freq + 0x358); /* write 0x1ed8 */
37661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	if (0x1ed8 == tea5757_read(btv)) {
37678af443e581ab57a6a38f595eb40be3514ea55195Joe Perches		pr_info("%d: Terratec Active Radio Upgrade found\n", btv->c.nr);
37681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		btv->has_radio    = 1;
3769859f0277a6c3ba59b0a5a1eb183f8f6ce661a95dHans Verkuil		btv->has_saa6588  = 1;
37701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		btv->has_matchbox = 1;
37711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	} else {
37721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		btv->has_radio    = 0;
37731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		btv->has_matchbox = 0;
37741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	}
37751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	return 0;
37761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
37771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
37781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
37791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* ----------------------------------------------------------------------- */
37801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
37811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
37821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * minimal bootstrap for the WinTV/PVR -- upload altera firmware.
37831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
37841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * The hcwamc.rbf firmware file is on the Hauppauge driver CD.  Have
37851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * a look at Pvr/pvr45xxx.EXE (self-extracting zip archive, can be
37861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * unpacked with unzip).
37871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
37881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define PVR_GPIO_DELAY		10
37891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
37901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define BTTV_ALT_DATA		0x000001
37911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define BTTV_ALT_DCLK		0x100000
37921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define BTTV_ALT_NCONFIG	0x800000
37931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
37944c62e9764ab403d42f9b8871b1241fe7812f19d4Greg Kroah-Hartmanstatic int pvr_altera_load(struct bttv *btv, const u8 *micro, u32 microlen)
37951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
37961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 n;
37974ac97914c6c35f6bf132071c718e034d0846b9f5Mauro Carvalho Chehab	u8 bits;
37981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int i;
37991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
38001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	gpio_inout(0xffffff,BTTV_ALT_DATA|BTTV_ALT_DCLK|BTTV_ALT_NCONFIG);
38011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	gpio_write(0);
38021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	udelay(PVR_GPIO_DELAY);
38031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
38041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	gpio_write(BTTV_ALT_NCONFIG);
38051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	udelay(PVR_GPIO_DELAY);
38061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
38071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	for (n = 0; n < microlen; n++) {
38081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		bits = micro[n];
3809c1d570385bd6dd5fe4c0cab09b1c390331111b35Mauro Carvalho Chehab		for (i = 0 ; i < 8 ; i++) {
38101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			gpio_bits(BTTV_ALT_DCLK,0);
38111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			if (bits & 0x01)
38121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds				gpio_bits(BTTV_ALT_DATA,BTTV_ALT_DATA);
38131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			else
38141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds				gpio_bits(BTTV_ALT_DATA,0);
38151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			gpio_bits(BTTV_ALT_DCLK,BTTV_ALT_DCLK);
38161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			bits >>= 1;
38171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		}
38181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	}
38191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	gpio_bits(BTTV_ALT_DCLK,0);
38201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	udelay(PVR_GPIO_DELAY);
38211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
38221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* begin Altera init loop (Not necessary,but doesn't hurt) */
38231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	for (i = 0 ; i < 30 ; i++) {
38241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		gpio_bits(BTTV_ALT_DCLK,0);
38251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		gpio_bits(BTTV_ALT_DCLK,BTTV_ALT_DCLK);
38261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	}
38271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	gpio_bits(BTTV_ALT_DCLK,0);
38281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	return 0;
38291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
38301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
38314c62e9764ab403d42f9b8871b1241fe7812f19d4Greg Kroah-Hartmanstatic int pvr_boot(struct bttv *btv)
38321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
38334ac97914c6c35f6bf132071c718e034d0846b9f5Mauro Carvalho Chehab	const struct firmware *fw_entry;
38341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int rc;
38351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
38361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	rc = request_firmware(&fw_entry, "hcwamc.rbf", &btv->c.pci->dev);
38371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	if (rc != 0) {
38388af443e581ab57a6a38f595eb40be3514ea55195Joe Perches		pr_warn("%d: no altera firmware [via hotplug]\n", btv->c.nr);
38394ac97914c6c35f6bf132071c718e034d0846b9f5Mauro Carvalho Chehab		return rc;
38404ac97914c6c35f6bf132071c718e034d0846b9f5Mauro Carvalho Chehab	}
38411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	rc = pvr_altera_load(btv, fw_entry->data, fw_entry->size);
38428af443e581ab57a6a38f595eb40be3514ea55195Joe Perches	pr_info("%d: altera firmware upload %s\n",
38438af443e581ab57a6a38f595eb40be3514ea55195Joe Perches		btv->c.nr, (rc < 0) ? "failed" : "ok");
38444ac97914c6c35f6bf132071c718e034d0846b9f5Mauro Carvalho Chehab	release_firmware(fw_entry);
38451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	return rc;
38461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
38471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
38481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* ----------------------------------------------------------------------- */
38491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* some osprey specific stuff                                              */
38501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
38514c62e9764ab403d42f9b8871b1241fe7812f19d4Greg Kroah-Hartmanstatic void osprey_eeprom(struct bttv *btv, const u8 ee[256])
38521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
3853cf784d554fdb94f21671830135dba56b507126cfTrent Piepho	int i;
3854cf784d554fdb94f21671830135dba56b507126cfTrent Piepho	u32 serial = 0;
3855cf784d554fdb94f21671830135dba56b507126cfTrent Piepho	int cardid = -1;
3856cf784d554fdb94f21671830135dba56b507126cfTrent Piepho
3857cf784d554fdb94f21671830135dba56b507126cfTrent Piepho	/* This code will nevery actually get called in this case.... */
3858cf784d554fdb94f21671830135dba56b507126cfTrent Piepho	if (btv->c.type == BTTV_BOARD_UNKNOWN) {
3859cf784d554fdb94f21671830135dba56b507126cfTrent Piepho		/* this might be an antique... check for MMAC label in eeprom */
3860cf784d554fdb94f21671830135dba56b507126cfTrent Piepho		if (!strncmp(ee, "MMAC", 4)) {
3861cf784d554fdb94f21671830135dba56b507126cfTrent Piepho			u8 checksum = 0;
3862cf784d554fdb94f21671830135dba56b507126cfTrent Piepho			for (i = 0; i < 21; i++)
3863cf784d554fdb94f21671830135dba56b507126cfTrent Piepho				checksum += ee[i];
3864cf784d554fdb94f21671830135dba56b507126cfTrent Piepho			if (checksum != ee[21])
3865cf784d554fdb94f21671830135dba56b507126cfTrent Piepho				return;
3866cf784d554fdb94f21671830135dba56b507126cfTrent Piepho			cardid = BTTV_BOARD_OSPREY1x0_848;
3867cf784d554fdb94f21671830135dba56b507126cfTrent Piepho			for (i = 12; i < 21; i++)
3868cf784d554fdb94f21671830135dba56b507126cfTrent Piepho				serial *= 10, serial += ee[i] - '0';
3869cf784d554fdb94f21671830135dba56b507126cfTrent Piepho		}
3870b930e1d851c3ffbf82127bd0e4d72ffe94d4b7f2Michael Krufky	} else {
3871cf784d554fdb94f21671830135dba56b507126cfTrent Piepho		unsigned short type;
3872cf784d554fdb94f21671830135dba56b507126cfTrent Piepho
3873cf784d554fdb94f21671830135dba56b507126cfTrent Piepho		for (i = 4*16; i < 8*16; i += 16) {
3874cf784d554fdb94f21671830135dba56b507126cfTrent Piepho			u16 checksum = ip_compute_csum(ee + i, 16);
3875cf784d554fdb94f21671830135dba56b507126cfTrent Piepho
3876cf784d554fdb94f21671830135dba56b507126cfTrent Piepho			if ((checksum&0xff) + (checksum>>8) == 0xff)
3877cf784d554fdb94f21671830135dba56b507126cfTrent Piepho				break;
3878cf784d554fdb94f21671830135dba56b507126cfTrent Piepho		}
3879cf784d554fdb94f21671830135dba56b507126cfTrent Piepho		if (i >= 8*16)
3880cf784d554fdb94f21671830135dba56b507126cfTrent Piepho			return;
3881cf784d554fdb94f21671830135dba56b507126cfTrent Piepho		ee += i;
3882cf784d554fdb94f21671830135dba56b507126cfTrent Piepho
3883cf784d554fdb94f21671830135dba56b507126cfTrent Piepho		/* found a valid descriptor */
3884c1c36f3128c89aa96f01cbf6d40b0cd77a8bc45eAl Viro		type = get_unaligned_be16((__be16 *)(ee+4));
3885cf784d554fdb94f21671830135dba56b507126cfTrent Piepho
3886cf784d554fdb94f21671830135dba56b507126cfTrent Piepho		switch(type) {
3887cf784d554fdb94f21671830135dba56b507126cfTrent Piepho		/* 848 based */
3888cf784d554fdb94f21671830135dba56b507126cfTrent Piepho		case 0x0004:
3889cf784d554fdb94f21671830135dba56b507126cfTrent Piepho			cardid = BTTV_BOARD_OSPREY1x0_848;
3890cf784d554fdb94f21671830135dba56b507126cfTrent Piepho			break;
3891cf784d554fdb94f21671830135dba56b507126cfTrent Piepho		case 0x0005:
3892cf784d554fdb94f21671830135dba56b507126cfTrent Piepho			cardid = BTTV_BOARD_OSPREY101_848;
3893cf784d554fdb94f21671830135dba56b507126cfTrent Piepho			break;
3894cf784d554fdb94f21671830135dba56b507126cfTrent Piepho
3895cf784d554fdb94f21671830135dba56b507126cfTrent Piepho		/* 878 based */
3896cf784d554fdb94f21671830135dba56b507126cfTrent Piepho		case 0x0012:
3897cf784d554fdb94f21671830135dba56b507126cfTrent Piepho		case 0x0013:
3898cf784d554fdb94f21671830135dba56b507126cfTrent Piepho			cardid = BTTV_BOARD_OSPREY1x0;
3899cf784d554fdb94f21671830135dba56b507126cfTrent Piepho			break;
3900cf784d554fdb94f21671830135dba56b507126cfTrent Piepho		case 0x0014:
3901cf784d554fdb94f21671830135dba56b507126cfTrent Piepho		case 0x0015:
3902cf784d554fdb94f21671830135dba56b507126cfTrent Piepho			cardid = BTTV_BOARD_OSPREY1x1;
3903cf784d554fdb94f21671830135dba56b507126cfTrent Piepho			break;
3904cf784d554fdb94f21671830135dba56b507126cfTrent Piepho		case 0x0016:
3905cf784d554fdb94f21671830135dba56b507126cfTrent Piepho		case 0x0017:
3906cf784d554fdb94f21671830135dba56b507126cfTrent Piepho		case 0x0020:
3907cf784d554fdb94f21671830135dba56b507126cfTrent Piepho			cardid = BTTV_BOARD_OSPREY1x1_SVID;
3908cf784d554fdb94f21671830135dba56b507126cfTrent Piepho			break;
3909cf784d554fdb94f21671830135dba56b507126cfTrent Piepho		case 0x0018:
3910cf784d554fdb94f21671830135dba56b507126cfTrent Piepho		case 0x0019:
3911cf784d554fdb94f21671830135dba56b507126cfTrent Piepho		case 0x001E:
3912cf784d554fdb94f21671830135dba56b507126cfTrent Piepho		case 0x001F:
3913cf784d554fdb94f21671830135dba56b507126cfTrent Piepho			cardid = BTTV_BOARD_OSPREY2xx;
3914cf784d554fdb94f21671830135dba56b507126cfTrent Piepho			break;
3915cf784d554fdb94f21671830135dba56b507126cfTrent Piepho		case 0x001A:
3916cf784d554fdb94f21671830135dba56b507126cfTrent Piepho		case 0x001B:
3917cf784d554fdb94f21671830135dba56b507126cfTrent Piepho			cardid = BTTV_BOARD_OSPREY2x0_SVID;
3918cf784d554fdb94f21671830135dba56b507126cfTrent Piepho			break;
3919cf784d554fdb94f21671830135dba56b507126cfTrent Piepho		case 0x0040:
3920cf784d554fdb94f21671830135dba56b507126cfTrent Piepho			cardid = BTTV_BOARD_OSPREY500;
3921cf784d554fdb94f21671830135dba56b507126cfTrent Piepho			break;
3922cf784d554fdb94f21671830135dba56b507126cfTrent Piepho		case 0x0050:
3923cf784d554fdb94f21671830135dba56b507126cfTrent Piepho		case 0x0056:
3924cf784d554fdb94f21671830135dba56b507126cfTrent Piepho			cardid = BTTV_BOARD_OSPREY540;
3925cf784d554fdb94f21671830135dba56b507126cfTrent Piepho			/* bttv_osprey_540_init(btv); */
3926cf784d554fdb94f21671830135dba56b507126cfTrent Piepho			break;
3927cf784d554fdb94f21671830135dba56b507126cfTrent Piepho		case 0x0060:
3928cf784d554fdb94f21671830135dba56b507126cfTrent Piepho		case 0x0070:
3929cf784d554fdb94f21671830135dba56b507126cfTrent Piepho		case 0x00A0:
3930cf784d554fdb94f21671830135dba56b507126cfTrent Piepho			cardid = BTTV_BOARD_OSPREY2x0;
3931cf784d554fdb94f21671830135dba56b507126cfTrent Piepho			/* enable output on select control lines */
3932cf784d554fdb94f21671830135dba56b507126cfTrent Piepho			gpio_inout(0xffffff,0x000303);
3933cf784d554fdb94f21671830135dba56b507126cfTrent Piepho			break;
3934cf784d554fdb94f21671830135dba56b507126cfTrent Piepho		case 0x00D8:
3935cf784d554fdb94f21671830135dba56b507126cfTrent Piepho			cardid = BTTV_BOARD_OSPREY440;
3936cf784d554fdb94f21671830135dba56b507126cfTrent Piepho			break;
3937cf784d554fdb94f21671830135dba56b507126cfTrent Piepho		default:
3938cf784d554fdb94f21671830135dba56b507126cfTrent Piepho			/* unknown...leave generic, but get serial # */
39398af443e581ab57a6a38f595eb40be3514ea55195Joe Perches			pr_info("%d: osprey eeprom: unknown card type 0x%04x\n",
39408af443e581ab57a6a38f595eb40be3514ea55195Joe Perches				btv->c.nr, type);
3941cf784d554fdb94f21671830135dba56b507126cfTrent Piepho			break;
3942cf784d554fdb94f21671830135dba56b507126cfTrent Piepho		}
3943c1c36f3128c89aa96f01cbf6d40b0cd77a8bc45eAl Viro		serial = get_unaligned_be32((__be32 *)(ee+6));
3944cf784d554fdb94f21671830135dba56b507126cfTrent Piepho	}
3945cf784d554fdb94f21671830135dba56b507126cfTrent Piepho
39468af443e581ab57a6a38f595eb40be3514ea55195Joe Perches	pr_info("%d: osprey eeprom: card=%d '%s' serial=%u\n",
39478af443e581ab57a6a38f595eb40be3514ea55195Joe Perches		btv->c.nr, cardid,
39488af443e581ab57a6a38f595eb40be3514ea55195Joe Perches		cardid > 0 ? bttv_tvcards[cardid].name : "Unknown", serial);
3949cf784d554fdb94f21671830135dba56b507126cfTrent Piepho
3950cf784d554fdb94f21671830135dba56b507126cfTrent Piepho	if (cardid<0 || btv->c.type == cardid)
3951cf784d554fdb94f21671830135dba56b507126cfTrent Piepho		return;
3952cf784d554fdb94f21671830135dba56b507126cfTrent Piepho
3953cf784d554fdb94f21671830135dba56b507126cfTrent Piepho	/* card type isn't set correctly */
3954cf784d554fdb94f21671830135dba56b507126cfTrent Piepho	if (card[btv->c.nr] < bttv_num_tvcards) {
39558af443e581ab57a6a38f595eb40be3514ea55195Joe Perches		pr_warn("%d: osprey eeprom: Not overriding user specified card type\n",
39568af443e581ab57a6a38f595eb40be3514ea55195Joe Perches			btv->c.nr);
3957cf784d554fdb94f21671830135dba56b507126cfTrent Piepho	} else {
39588af443e581ab57a6a38f595eb40be3514ea55195Joe Perches		pr_info("%d: osprey eeprom: Changing card type from %d to %d\n",
39598af443e581ab57a6a38f595eb40be3514ea55195Joe Perches			btv->c.nr, btv->c.type, cardid);
3960cf784d554fdb94f21671830135dba56b507126cfTrent Piepho		btv->c.type = cardid;
3961cf784d554fdb94f21671830135dba56b507126cfTrent Piepho	}
39621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
39631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
39641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* ----------------------------------------------------------------------- */
39651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* AVermedia specific stuff, from  bktr_card.c                             */
39661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
39671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic int tuner_0_table[] = {
39684ac97914c6c35f6bf132071c718e034d0846b9f5Mauro Carvalho Chehab	TUNER_PHILIPS_NTSC,  TUNER_PHILIPS_PAL /* PAL-BG*/,
39694ac97914c6c35f6bf132071c718e034d0846b9f5Mauro Carvalho Chehab	TUNER_PHILIPS_PAL,   TUNER_PHILIPS_PAL /* PAL-I*/,
39704ac97914c6c35f6bf132071c718e034d0846b9f5Mauro Carvalho Chehab	TUNER_PHILIPS_PAL,   TUNER_PHILIPS_PAL,
39714ac97914c6c35f6bf132071c718e034d0846b9f5Mauro Carvalho Chehab	TUNER_PHILIPS_SECAM, TUNER_PHILIPS_SECAM,
39724ac97914c6c35f6bf132071c718e034d0846b9f5Mauro Carvalho Chehab	TUNER_PHILIPS_SECAM, TUNER_PHILIPS_PAL,
39731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	TUNER_PHILIPS_FM1216ME_MK3 };
39741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
39751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic int tuner_1_table[] = {
39764ac97914c6c35f6bf132071c718e034d0846b9f5Mauro Carvalho Chehab	TUNER_TEMIC_NTSC,  TUNER_TEMIC_PAL,
39771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	TUNER_TEMIC_PAL,   TUNER_TEMIC_PAL,
39781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	TUNER_TEMIC_PAL,   TUNER_TEMIC_PAL,
39794ac97914c6c35f6bf132071c718e034d0846b9f5Mauro Carvalho Chehab	TUNER_TEMIC_4012FY5, TUNER_TEMIC_4012FY5, /* TUNER_TEMIC_SECAM */
39804ac97914c6c35f6bf132071c718e034d0846b9f5Mauro Carvalho Chehab	TUNER_TEMIC_4012FY5, TUNER_TEMIC_PAL};
39811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
39824c62e9764ab403d42f9b8871b1241fe7812f19d4Greg Kroah-Hartmanstatic void avermedia_eeprom(struct bttv *btv)
39831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
3984c6eb8eafdba4ad18b4520a0d28a38bc9e61883eaHans Verkuil	int tuner_make, tuner_tv_fm, tuner_format, tuner_type = 0;
39851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
39861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	tuner_make      = (eeprom_data[0x41] & 0x7);
39874ac97914c6c35f6bf132071c718e034d0846b9f5Mauro Carvalho Chehab	tuner_tv_fm     = (eeprom_data[0x41] & 0x18) >> 3;
39884ac97914c6c35f6bf132071c718e034d0846b9f5Mauro Carvalho Chehab	tuner_format    = (eeprom_data[0x42] & 0xf0) >> 4;
39891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	btv->has_remote = (eeprom_data[0x42] & 0x01);
39901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
39911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	if (tuner_make == 0 || tuner_make == 2)
3992c6eb8eafdba4ad18b4520a0d28a38bc9e61883eaHans Verkuil		if (tuner_format <= 0x0a)
3993c6eb8eafdba4ad18b4520a0d28a38bc9e61883eaHans Verkuil			tuner_type = tuner_0_table[tuner_format];
39941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	if (tuner_make == 1)
3995c6eb8eafdba4ad18b4520a0d28a38bc9e61883eaHans Verkuil		if (tuner_format <= 9)
3996c6eb8eafdba4ad18b4520a0d28a38bc9e61883eaHans Verkuil			tuner_type = tuner_1_table[tuner_format];
39971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
39981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	if (tuner_make == 4)
3999c6eb8eafdba4ad18b4520a0d28a38bc9e61883eaHans Verkuil		if (tuner_format == 0x09)
4000c6eb8eafdba4ad18b4520a0d28a38bc9e61883eaHans Verkuil			tuner_type = TUNER_LG_NTSC_NEW_TAPC; /* TAPC-G702P */
40011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
40028af443e581ab57a6a38f595eb40be3514ea55195Joe Perches	pr_info("%d: Avermedia eeprom[0x%02x%02x]: tuner=",
4003c6eb8eafdba4ad18b4520a0d28a38bc9e61883eaHans Verkuil		btv->c.nr, eeprom_data[0x41], eeprom_data[0x42]);
4004c6eb8eafdba4ad18b4520a0d28a38bc9e61883eaHans Verkuil	if (tuner_type) {
4005c6eb8eafdba4ad18b4520a0d28a38bc9e61883eaHans Verkuil		btv->tuner_type = tuner_type;
40068af443e581ab57a6a38f595eb40be3514ea55195Joe Perches		pr_cont("%d", tuner_type);
40071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	} else
40088af443e581ab57a6a38f595eb40be3514ea55195Joe Perches		pr_cont("Unknown type");
40098af443e581ab57a6a38f595eb40be3514ea55195Joe Perches	pr_cont(" radio:%s remote control:%s\n",
40101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	       tuner_tv_fm     ? "yes" : "no",
40111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	       btv->has_remote ? "yes" : "no");
40121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
40131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
401472134a6d5199c3f5c8efe914e49072bde95948b3Trent Piepho/*
401572134a6d5199c3f5c8efe914e49072bde95948b3Trent Piepho * For Voodoo TV/FM and Voodoo 200.  These cards' tuners use a TDA9880
401672134a6d5199c3f5c8efe914e49072bde95948b3Trent Piepho * analog demod, which is not I2C controlled like the newer and more common
401772134a6d5199c3f5c8efe914e49072bde95948b3Trent Piepho * TDA9887 series.  Instead is has two tri-state input pins, S0 and S1,
401872134a6d5199c3f5c8efe914e49072bde95948b3Trent Piepho * that control the IF for the video and audio.  Apparently, bttv GPIO
401972134a6d5199c3f5c8efe914e49072bde95948b3Trent Piepho * 0x10000 is connected to S0.  S0 low selects a 38.9 MHz VIF for B/G/D/K/I
402072134a6d5199c3f5c8efe914e49072bde95948b3Trent Piepho * (i.e., PAL) while high selects 45.75 MHz for M/N (i.e., NTSC).
402172134a6d5199c3f5c8efe914e49072bde95948b3Trent Piepho */
402272134a6d5199c3f5c8efe914e49072bde95948b3Trent Piephou32 bttv_tda9880_setnorm(struct bttv *btv, u32 gpiobits)
40231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
402472134a6d5199c3f5c8efe914e49072bde95948b3Trent Piepho
40252166f0a9710413ea60bd72a4983de11b764468e4Frank Schaefer	if (btv->audio_input == TVAUDIO_INPUT_TUNER) {
402672134a6d5199c3f5c8efe914e49072bde95948b3Trent Piepho		if (bttv_tvnorms[btv->tvnorm].v4l2_id & V4L2_STD_MN)
402772134a6d5199c3f5c8efe914e49072bde95948b3Trent Piepho			gpiobits |= 0x10000;
402872134a6d5199c3f5c8efe914e49072bde95948b3Trent Piepho		else
402972134a6d5199c3f5c8efe914e49072bde95948b3Trent Piepho			gpiobits &= ~0x10000;
40301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	}
403172134a6d5199c3f5c8efe914e49072bde95948b3Trent Piepho
403272134a6d5199c3f5c8efe914e49072bde95948b3Trent Piepho	gpio_bits(bttv_tvcards[btv->c.type].gpiomask, gpiobits);
403372134a6d5199c3f5c8efe914e49072bde95948b3Trent Piepho	return gpiobits;
40341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
40351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
40361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
40371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
40381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * reset/enable the MSP on some Hauppauge cards
403993e960ff2d94a68403f87bbd2e664509bdfefbaeDavid Woodhouse * Thanks to Kyösti Mälkki (kmalkki@cc.hut.fi)!
40401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
40411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Hauppauge:  pin  5
40421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Voodoo:     pin 20
40431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
40444c62e9764ab403d42f9b8871b1241fe7812f19d4Greg Kroah-Hartmanstatic void boot_msp34xx(struct bttv *btv, int pin)
40451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
40461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int mask = (1 << pin);
40471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
40481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	gpio_inout(mask,mask);
40491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	gpio_bits(mask,0);
4050c4e3fd940c7081a0332e9b4ea6485744075067b0Thierry MERLE	mdelay(2);
4051c4e3fd940c7081a0332e9b4ea6485744075067b0Thierry MERLE	udelay(500);
40521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	gpio_bits(mask,mask);
40531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
40541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	if (bttv_gpio)
40551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		bttv_gpio_tracking(btv,"msp34xx");
40561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	if (bttv_verbose)
40578af443e581ab57a6a38f595eb40be3514ea55195Joe Perches		pr_info("%d: Hauppauge/Voodoo msp34xx: reset line init [%d]\n",
40588af443e581ab57a6a38f595eb40be3514ea55195Joe Perches			btv->c.nr, pin);
40591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
40601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
40611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* ----------------------------------------------------------------------- */
40621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*  Imagenation L-Model PXC200 Framegrabber */
40631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*  This is basically the same procedure as
40641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *  used by Alessandro Rubini in his pxc200
40651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *  driver, but using BTTV functions */
40661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
40674c62e9764ab403d42f9b8871b1241fe7812f19d4Greg Kroah-Hartmanstatic void init_PXC200(struct bttv *btv)
40681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
40694c62e9764ab403d42f9b8871b1241fe7812f19d4Greg Kroah-Hartman	static int vals[] = { 0x08, 0x09, 0x0a, 0x0b, 0x0d, 0x0d, 0x01, 0x02,
40704c62e9764ab403d42f9b8871b1241fe7812f19d4Greg Kroah-Hartman			      0x03, 0x04, 0x05, 0x06, 0x00 };
40711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned int i;
40721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int tmp;
40731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32 val;
40741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
40751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* Initialise GPIO-connevted stuff */
40761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	gpio_inout(0xffffff, (1<<13));
40771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	gpio_write(0);
40781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	udelay(3);
40791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	gpio_write(1<<13);
40801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* GPIO inputs are pulled up, so no need to drive
40811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	 * reset pin any longer */
40821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	gpio_bits(0xffffff, 0);
40831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	if (bttv_gpio)
40841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		bttv_gpio_tracking(btv,"pxc200");
40851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
40861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/*  we could/should try and reset/control the AD pots? but
40871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	    right now  we simply  turned off the crushing.  Without
40881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	    this the AGC drifts drifts
40891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	    remember the EN is reverse logic -->
40901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	    setting BT848_ADC_AGC_EN disable the AGC
40911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	    tboult@eecs.lehigh.edu
40921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	*/
40931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
40941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	btwrite(BT848_ADC_RESERVED|BT848_ADC_AGC_EN, BT848_ADC);
40951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
40961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/*	Initialise MAX517 DAC */
40978af443e581ab57a6a38f595eb40be3514ea55195Joe Perches	pr_info("Setting DAC reference voltage level ...\n");
40981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	bttv_I2CWrite(btv,0x5E,0,0x80,1);
40991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
41001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/*	Initialise 12C508 PIC */
41011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/*	The I2CWrite and I2CRead commmands are actually to the
41021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	 *	same chips - but the R/W bit is included in the address
41031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	 *	argument so the numbers are different */
41041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
41051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
41068af443e581ab57a6a38f595eb40be3514ea55195Joe Perches	pr_info("Initialising 12C508 PIC chip ...\n");
41071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
41081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* First of all, enable the clock line. This is used in the PXC200-F */
41091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	val = btread(BT848_GPIO_DMA_CTL);
41101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	val |= BT848_GPIO_DMA_CTL_GPCLKMODE;
41111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	btwrite(val, BT848_GPIO_DMA_CTL);
41121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
41131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* Then, push to 0 the reset pin long enough to reset the *
41141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	 * device same as above for the reset line, but not the same
41151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	 * value sent to the GPIO-connected stuff
41161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	 * which one is the good one? */
41171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	gpio_inout(0xffffff,(1<<2));
41181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	gpio_write(0);
41191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	udelay(10);
41201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	gpio_write(1<<2);
41211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
41224ac97914c6c35f6bf132071c718e034d0846b9f5Mauro Carvalho Chehab	for (i = 0; i < ARRAY_SIZE(vals); i++) {
41231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		tmp=bttv_I2CWrite(btv,0x1E,0,vals[i],1);
41241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		if (tmp != -1) {
41258af443e581ab57a6a38f595eb40be3514ea55195Joe Perches			pr_info("I2C Write(%2.2x) = %i\nI2C Read () = %2.2x\n\n",
41261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			       vals[i],tmp,bttv_I2CRead(btv,0x1F,NULL));
41271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		}
41281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	}
41291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
41308af443e581ab57a6a38f595eb40be3514ea55195Joe Perches	pr_info("PXC200 Initialised\n");
41311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
41321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
41332d03e289ea4b13d78ce55f1ea0b0d45b8f1b34c3Mauro Carvalho Chehab
41342d03e289ea4b13d78ce55f1ea0b0d45b8f1b34c3Mauro Carvalho Chehab
413593b43f13b5bfeac09ef5743edf39eeeee3f4eeaePeter Skipworth/* ----------------------------------------------------------------------- */
413693b43f13b5bfeac09ef5743edf39eeeee3f4eeaePeter Skipworth/*
413793b43f13b5bfeac09ef5743edf39eeeee3f4eeaePeter Skipworth *  The Adlink RTV-24 (aka Angelo) has some special initialisation to unlock
413893b43f13b5bfeac09ef5743edf39eeeee3f4eeaePeter Skipworth *  it. This apparently involves the following procedure for each 878 chip:
413993b43f13b5bfeac09ef5743edf39eeeee3f4eeaePeter Skipworth *
414093b43f13b5bfeac09ef5743edf39eeeee3f4eeaePeter Skipworth *  1) write 0x00C3FEFF to the GPIO_OUT_EN register
414193b43f13b5bfeac09ef5743edf39eeeee3f4eeaePeter Skipworth *
414293b43f13b5bfeac09ef5743edf39eeeee3f4eeaePeter Skipworth *  2)  write to GPIO_DATA
414393b43f13b5bfeac09ef5743edf39eeeee3f4eeaePeter Skipworth *      - 0x0E
414493b43f13b5bfeac09ef5743edf39eeeee3f4eeaePeter Skipworth *      - sleep 1ms
414593b43f13b5bfeac09ef5743edf39eeeee3f4eeaePeter Skipworth *      - 0x10 + 0x0E
414693b43f13b5bfeac09ef5743edf39eeeee3f4eeaePeter Skipworth *      - sleep 10ms
414793b43f13b5bfeac09ef5743edf39eeeee3f4eeaePeter Skipworth *      - 0x0E
414893b43f13b5bfeac09ef5743edf39eeeee3f4eeaePeter Skipworth *     read from GPIO_DATA into buf (uint_32)
414993b43f13b5bfeac09ef5743edf39eeeee3f4eeaePeter Skipworth *      - if ( data>>18 & 0x01 != 0) || ( buf>>19 & 0x01 != 1 )
415093b43f13b5bfeac09ef5743edf39eeeee3f4eeaePeter Skipworth *                 error. ERROR_CPLD_Check_Failed stop.
415193b43f13b5bfeac09ef5743edf39eeeee3f4eeaePeter Skipworth *
415293b43f13b5bfeac09ef5743edf39eeeee3f4eeaePeter Skipworth *  3) write to GPIO_DATA
415393b43f13b5bfeac09ef5743edf39eeeee3f4eeaePeter Skipworth *      - write 0x4400 + 0x0E
415493b43f13b5bfeac09ef5743edf39eeeee3f4eeaePeter Skipworth *      - sleep 10ms
415593b43f13b5bfeac09ef5743edf39eeeee3f4eeaePeter Skipworth *      - write 0x4410 + 0x0E
415693b43f13b5bfeac09ef5743edf39eeeee3f4eeaePeter Skipworth *      - sleep 1ms
415793b43f13b5bfeac09ef5743edf39eeeee3f4eeaePeter Skipworth *      - write 0x0E
415893b43f13b5bfeac09ef5743edf39eeeee3f4eeaePeter Skipworth *     read from GPIO_DATA into buf (uint_32)
4159fef4fa1475db6a53237e29451c88c15167d69cc4Jean Delvare *      - if ( buf>>18 & 0x01 ) || ( buf>>19 & 0x01 != 0 )
416093b43f13b5bfeac09ef5743edf39eeeee3f4eeaePeter Skipworth *                error. ERROR_CPLD_Check_Failed.
416193b43f13b5bfeac09ef5743edf39eeeee3f4eeaePeter Skipworth */
416293b43f13b5bfeac09ef5743edf39eeeee3f4eeaePeter Skipworth/* ----------------------------------------------------------------------- */
4163943a49027b6d9829b737e6da3d72b867a7a6f832Adrian Bunkstatic void
41642d03e289ea4b13d78ce55f1ea0b0d45b8f1b34c3Mauro Carvalho Chehabinit_RTV24 (struct bttv *btv)
416593b43f13b5bfeac09ef5743edf39eeeee3f4eeaePeter Skipworth{
41662d03e289ea4b13d78ce55f1ea0b0d45b8f1b34c3Mauro Carvalho Chehab	uint32_t dataRead = 0;
41672d03e289ea4b13d78ce55f1ea0b0d45b8f1b34c3Mauro Carvalho Chehab	long watchdog_value = 0x0E;
416893b43f13b5bfeac09ef5743edf39eeeee3f4eeaePeter Skipworth
41698af443e581ab57a6a38f595eb40be3514ea55195Joe Perches	pr_info("%d: Adlink RTV-24 initialisation in progress ...\n",
417093b43f13b5bfeac09ef5743edf39eeeee3f4eeaePeter Skipworth		btv->c.nr);
417193b43f13b5bfeac09ef5743edf39eeeee3f4eeaePeter Skipworth
41722d03e289ea4b13d78ce55f1ea0b0d45b8f1b34c3Mauro Carvalho Chehab	btwrite (0x00c3feff, BT848_GPIO_OUT_EN);
417393b43f13b5bfeac09ef5743edf39eeeee3f4eeaePeter Skipworth
41742d03e289ea4b13d78ce55f1ea0b0d45b8f1b34c3Mauro Carvalho Chehab	btwrite (0 + watchdog_value, BT848_GPIO_DATA);
41752d03e289ea4b13d78ce55f1ea0b0d45b8f1b34c3Mauro Carvalho Chehab	msleep (1);
41762d03e289ea4b13d78ce55f1ea0b0d45b8f1b34c3Mauro Carvalho Chehab	btwrite (0x10 + watchdog_value, BT848_GPIO_DATA);
41772d03e289ea4b13d78ce55f1ea0b0d45b8f1b34c3Mauro Carvalho Chehab	msleep (10);
41782d03e289ea4b13d78ce55f1ea0b0d45b8f1b34c3Mauro Carvalho Chehab	btwrite (0 + watchdog_value, BT848_GPIO_DATA);
417993b43f13b5bfeac09ef5743edf39eeeee3f4eeaePeter Skipworth
41802d03e289ea4b13d78ce55f1ea0b0d45b8f1b34c3Mauro Carvalho Chehab	dataRead = btread (BT848_GPIO_DATA);
418193b43f13b5bfeac09ef5743edf39eeeee3f4eeaePeter Skipworth
41822d03e289ea4b13d78ce55f1ea0b0d45b8f1b34c3Mauro Carvalho Chehab	if ((((dataRead >> 18) & 0x01) != 0) || (((dataRead >> 19) & 0x01) != 1)) {
41838af443e581ab57a6a38f595eb40be3514ea55195Joe Perches		pr_info("%d: Adlink RTV-24 initialisation(1) ERROR_CPLD_Check_Failed (read %d)\n",
41842d03e289ea4b13d78ce55f1ea0b0d45b8f1b34c3Mauro Carvalho Chehab			btv->c.nr, dataRead);
418593b43f13b5bfeac09ef5743edf39eeeee3f4eeaePeter Skipworth	}
418693b43f13b5bfeac09ef5743edf39eeeee3f4eeaePeter Skipworth
41872d03e289ea4b13d78ce55f1ea0b0d45b8f1b34c3Mauro Carvalho Chehab	btwrite (0x4400 + watchdog_value, BT848_GPIO_DATA);
41882d03e289ea4b13d78ce55f1ea0b0d45b8f1b34c3Mauro Carvalho Chehab	msleep (10);
41892d03e289ea4b13d78ce55f1ea0b0d45b8f1b34c3Mauro Carvalho Chehab	btwrite (0x4410 + watchdog_value, BT848_GPIO_DATA);
41902d03e289ea4b13d78ce55f1ea0b0d45b8f1b34c3Mauro Carvalho Chehab	msleep (1);
41912d03e289ea4b13d78ce55f1ea0b0d45b8f1b34c3Mauro Carvalho Chehab	btwrite (watchdog_value, BT848_GPIO_DATA);
41922d03e289ea4b13d78ce55f1ea0b0d45b8f1b34c3Mauro Carvalho Chehab	msleep (1);
41932d03e289ea4b13d78ce55f1ea0b0d45b8f1b34c3Mauro Carvalho Chehab	dataRead = btread (BT848_GPIO_DATA);
41942d03e289ea4b13d78ce55f1ea0b0d45b8f1b34c3Mauro Carvalho Chehab
41952d03e289ea4b13d78ce55f1ea0b0d45b8f1b34c3Mauro Carvalho Chehab	if ((((dataRead >> 18) & 0x01) != 0) || (((dataRead >> 19) & 0x01) != 0)) {
41968af443e581ab57a6a38f595eb40be3514ea55195Joe Perches		pr_info("%d: Adlink RTV-24 initialisation(2) ERROR_CPLD_Check_Failed (read %d)\n",
41972d03e289ea4b13d78ce55f1ea0b0d45b8f1b34c3Mauro Carvalho Chehab			btv->c.nr, dataRead);
41982d03e289ea4b13d78ce55f1ea0b0d45b8f1b34c3Mauro Carvalho Chehab
419993b43f13b5bfeac09ef5743edf39eeeee3f4eeaePeter Skipworth		return;
420093b43f13b5bfeac09ef5743edf39eeeee3f4eeaePeter Skipworth	}
420193b43f13b5bfeac09ef5743edf39eeeee3f4eeaePeter Skipworth
42028af443e581ab57a6a38f595eb40be3514ea55195Joe Perches	pr_info("%d: Adlink RTV-24 initialisation complete\n", btv->c.nr);
420393b43f13b5bfeac09ef5743edf39eeeee3f4eeaePeter Skipworth}
42041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
42052d03e289ea4b13d78ce55f1ea0b0d45b8f1b34c3Mauro Carvalho Chehab
42062d03e289ea4b13d78ce55f1ea0b0d45b8f1b34c3Mauro Carvalho Chehab
42071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* ----------------------------------------------------------------------- */
4208c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner/*
4209c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner *  The PCI-8604PW contains a CPLD, probably an ispMACH 4A, that filters
4210c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner *  the PCI REQ signals comming from the four BT878 chips. After power
4211c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner *  up, the CPLD does not forward requests to the bus, which prevents
4212c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner *  the BT878 from fetching RISC instructions from memory. While the
4213c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner *  CPLD is connected to most of the GPIOs of PCI device 0xD, only
4214c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner *  five appear to play a role in unlocking the REQ signal. The following
4215c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner *  sequence has been determined by trial and error without access to the
4216c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner *  original driver.
4217c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner *
4218c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner *  Eight GPIOs of device 0xC are provided on connector CN4 (4 in, 4 out).
4219c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner *  Devices 0xE and 0xF do not appear to have anything connected to their
4220c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner *  GPIOs.
4221c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner *
4222c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner *  The correct GPIO_OUT_EN value might have some more bits set. It should
4223c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner *  be possible to derive it from a boundary scan of the CPLD. Its JTAG
4224c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner *  pins are routed to test points.
4225c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner *
4226c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner */
4227c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner/* ----------------------------------------------------------------------- */
4228c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöcknerstatic void
4229c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöcknerinit_PCI8604PW(struct bttv *btv)
4230c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner{
4231c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner	int state;
4232c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner
4233c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner	if ((PCI_SLOT(btv->c.pci->devfn) & ~3) != 0xC) {
4234c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner		pr_warn("This is not a PCI-8604PW\n");
4235c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner		return;
4236c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner	}
4237c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner
4238c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner	if (PCI_SLOT(btv->c.pci->devfn) != 0xD)
4239c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner		return;
4240c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner
4241c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner	btwrite(0x080002, BT848_GPIO_OUT_EN);
4242c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner
4243c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner	state = (btread(BT848_GPIO_DATA) >> 21) & 7;
4244c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner
4245c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner	for (;;) {
4246c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner		switch (state) {
4247c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner		case 1:
4248c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner		case 5:
4249c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner		case 6:
4250c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner		case 4:
4251c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner			pr_debug("PCI-8604PW in state %i, toggling pin\n",
4252c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner				 state);
4253c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner			btwrite(0x080000, BT848_GPIO_DATA);
4254c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner			msleep(1);
4255c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner			btwrite(0x000000, BT848_GPIO_DATA);
4256c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner			msleep(1);
4257c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner			break;
4258c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner		case 7:
4259c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner			pr_info("PCI-8604PW unlocked\n");
4260c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner			return;
4261c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner		case 0:
4262c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner			/* FIXME: If we are in state 7 and toggle GPIO[19] one
4263c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner			   more time, the CPLD goes into state 0, where PCI bus
4264c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner			   mastering is inhibited again. We have not managed to
4265c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner			   get out of that state. */
4266c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner
4267c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner			pr_err("PCI-8604PW locked until reset\n");
4268c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner			return;
4269c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner		default:
4270c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner			pr_err("PCI-8604PW in unknown state %i\n", state);
4271c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner			return;
4272c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner		}
4273c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner
4274c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner		state = (state << 4) | ((btread(BT848_GPIO_DATA) >> 21) & 7);
4275c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner
4276c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner		switch (state) {
4277c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner		case 0x15:
4278c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner		case 0x56:
4279c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner		case 0x64:
4280c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner		case 0x47:
4281c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner		/* The transition from state 7 to state 0 is, as explained
4282c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner		   above, valid but undesired and with this code impossible
4283c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner		   as we exit as soon as we are in state 7.
4284c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner		case 0x70: */
4285c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner			break;
4286c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner		default:
4287c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner			pr_err("PCI-8604PW invalid transition %i -> %i\n",
4288c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner			       state >> 4, state & 7);
4289c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner			return;
4290c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner		}
4291c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner		state &= 7;
4292c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner	}
4293c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner}
4294c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner
4295c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner
4296c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner
4297c8204930b21ea4d0a5504b40a73479ae318958ddDaniel Glöckner/* ----------------------------------------------------------------------- */
42981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Miro Pro radio stuff -- the tea5757 is connected to some GPIO ports     */
42991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
43001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Copyright (c) 1999 Csaba Halasz <qgehali@uni-miskolc.hu>
43011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * This code is placed under the terms of the GNU General Public License
43021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
43031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Brutally hacked by Dan Sheridan <dan.sheridan@contact.org.uk> djs52 8/3/00
43041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
43051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
43061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic void bus_low(struct bttv *btv, int bit)
43071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
43081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	if (btv->mbox_ior) {
43091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		gpio_bits(btv->mbox_ior | btv->mbox_iow | btv->mbox_csel,
43101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			  btv->mbox_ior | btv->mbox_iow | btv->mbox_csel);
43111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		udelay(5);
43121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	}
43131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
43141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	gpio_bits(bit,0);
43151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	udelay(5);
43161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
43171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	if (btv->mbox_ior) {
43181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		gpio_bits(btv->mbox_iow | btv->mbox_csel, 0);
43191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		udelay(5);
43201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	}
43211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
43221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
43231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic void bus_high(struct bttv *btv, int bit)
43241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
43251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	if (btv->mbox_ior) {
43261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		gpio_bits(btv->mbox_ior | btv->mbox_iow | btv->mbox_csel,
43271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			  btv->mbox_ior | btv->mbox_iow | btv->mbox_csel);
43281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		udelay(5);
43291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	}
43301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
43311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	gpio_bits(bit,bit);
43321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	udelay(5);
43331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
43341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	if (btv->mbox_ior) {
43351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		gpio_bits(btv->mbox_iow | btv->mbox_csel, 0);
43361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		udelay(5);
43371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	}
43381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
43391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
43401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic int bus_in(struct bttv *btv, int bit)
43411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
43421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	if (btv->mbox_ior) {
43431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		gpio_bits(btv->mbox_ior | btv->mbox_iow | btv->mbox_csel,
43441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			  btv->mbox_ior | btv->mbox_iow | btv->mbox_csel);
43451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		udelay(5);
43461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
43471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		gpio_bits(btv->mbox_iow | btv->mbox_csel, 0);
43481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		udelay(5);
43491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	}
43501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	return gpio_read() & (bit);
43511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
43521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
43531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* TEA5757 register bits */
43541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define TEA_FREQ		0:14
43551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define TEA_BUFFER		15:15
43561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
43571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define TEA_SIGNAL_STRENGTH	16:17
43581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
43591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define TEA_PORT1		18:18
43601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define TEA_PORT0		19:19
43611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
43621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define TEA_BAND		20:21
43631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define TEA_BAND_FM		0
43641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define TEA_BAND_MW		1
43651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define TEA_BAND_LW		2
43661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define TEA_BAND_SW		3
43671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
43681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define TEA_MONO		22:22
43691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define TEA_ALLOW_STEREO	0
43701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define TEA_FORCE_MONO		1
43711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
43721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define TEA_SEARCH_DIRECTION	23:23
43731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define TEA_SEARCH_DOWN		0
43741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define TEA_SEARCH_UP		1
43751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
43761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define TEA_STATUS		24:24
43771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define TEA_STATUS_TUNED	0
43781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define TEA_STATUS_SEARCHING	1
43791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
43801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Low-level stuff */
43811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic int tea5757_read(struct bttv *btv)
43821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
43831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned long timeout;
43841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int value = 0;
43851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int i;
43861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
43871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* better safe than sorry */
43881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	gpio_inout(btv->mbox_mask, btv->mbox_clk | btv->mbox_we);
43891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
43901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	if (btv->mbox_ior) {
43911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		gpio_bits(btv->mbox_ior | btv->mbox_iow | btv->mbox_csel,
43921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			  btv->mbox_ior | btv->mbox_iow | btv->mbox_csel);
43931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		udelay(5);
43941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	}
43951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
43961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	if (bttv_gpio)
43971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		bttv_gpio_tracking(btv,"tea5757 read");
43981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
43991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	bus_low(btv,btv->mbox_we);
44001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	bus_low(btv,btv->mbox_clk);
44011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
44021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	udelay(10);
4403fe06fe0a4d0f781f8ae0570e4d7e517a81878c1dMauro Carvalho Chehab	timeout= jiffies + msecs_to_jiffies(1000);
44041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
440524a70fdce872d70171b1f49dcd1a7c3a4e8396b2Mauro Carvalho Chehab	/* wait for DATA line to go low; error if it doesn't */
44061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	while (bus_in(btv,btv->mbox_data) && time_before(jiffies, timeout))
44071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		schedule();
44081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	if (bus_in(btv,btv->mbox_data)) {
44098af443e581ab57a6a38f595eb40be3514ea55195Joe Perches		pr_warn("%d: tea5757: read timeout\n", btv->c.nr);
44101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		return -1;
44111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	}
44121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
44138af443e581ab57a6a38f595eb40be3514ea55195Joe Perches	dprintk("%d: tea5757:", btv->c.nr);
4414c1d570385bd6dd5fe4c0cab09b1c390331111b35Mauro Carvalho Chehab	for (i = 0; i < 24; i++) {
44151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		udelay(5);
44161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		bus_high(btv,btv->mbox_clk);
44171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		udelay(5);
44188af443e581ab57a6a38f595eb40be3514ea55195Joe Perches		dprintk_cont("%c",
44198af443e581ab57a6a38f595eb40be3514ea55195Joe Perches			     bus_in(btv, btv->mbox_most) == 0 ? 'T' : '-');
44201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		bus_low(btv,btv->mbox_clk);
44211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		value <<= 1;
44221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		value |= (bus_in(btv,btv->mbox_data) == 0)?0:1;  /* MSB first */
44238af443e581ab57a6a38f595eb40be3514ea55195Joe Perches		dprintk_cont("%c",
44248af443e581ab57a6a38f595eb40be3514ea55195Joe Perches			     bus_in(btv, btv->mbox_most) == 0 ? 'S' : 'M');
44251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	}
44268af443e581ab57a6a38f595eb40be3514ea55195Joe Perches	dprintk_cont("\n");
44278af443e581ab57a6a38f595eb40be3514ea55195Joe Perches	dprintk("%d: tea5757: read 0x%X\n", btv->c.nr, value);
44281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	return value;
44291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
44301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
44311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic int tea5757_write(struct bttv *btv, int value)
44321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
44331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int i;
44341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int reg = value;
44351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
44361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	gpio_inout(btv->mbox_mask, btv->mbox_clk | btv->mbox_we | btv->mbox_data);
44371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
44381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	if (btv->mbox_ior) {
44391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		gpio_bits(btv->mbox_ior | btv->mbox_iow | btv->mbox_csel,
44401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			  btv->mbox_ior | btv->mbox_iow | btv->mbox_csel);
44411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		udelay(5);
44421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	}
44431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	if (bttv_gpio)
44441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		bttv_gpio_tracking(btv,"tea5757 write");
44451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
44468af443e581ab57a6a38f595eb40be3514ea55195Joe Perches	dprintk("%d: tea5757: write 0x%X\n", btv->c.nr, value);
44471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	bus_low(btv,btv->mbox_clk);
44481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	bus_high(btv,btv->mbox_we);
4449c1d570385bd6dd5fe4c0cab09b1c390331111b35Mauro Carvalho Chehab	for (i = 0; i < 25; i++) {
44501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		if (reg & 0x1000000)
44511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			bus_high(btv,btv->mbox_data);
44521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		else
44531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			bus_low(btv,btv->mbox_data);
44541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		reg <<= 1;
44551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		bus_high(btv,btv->mbox_clk);
44561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		udelay(10);
44571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		bus_low(btv,btv->mbox_clk);
44581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		udelay(10);
44591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	}
44601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	bus_low(btv,btv->mbox_we);  /* unmute !!! */
44611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	return 0;
44621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
44631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
44641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsvoid tea5757_set_freq(struct bttv *btv, unsigned short freq)
44651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
44661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	dprintk("tea5757_set_freq %d\n",freq);
44671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	tea5757_write(btv, 5 * freq + 0x358); /* add 10.7MHz (see docs) */
44681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
44691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
44701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* RemoteVision MX (rv605) muxsel helper [Miguel Freitas]
44711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
44721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * This is needed because rv605 don't use a normal multiplex, but a crosspoint
44731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * switch instead (CD22M3494E). This IC can have multiple active connections
44741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * between Xn (input) and Yn (output) pins. We need to clear any existing
44751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * connection prior to establish a new one, pulsing the STROBE pin.
44761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
44771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * The board hardwire Y0 (xpoint) to MUX1 and MUXOUT to Yin.
44781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * GPIO pins are wired as:
44793a4fa0a25da81600ea0bcd75692ae8ca6050d165Robert P. J. Day *  GPIO[0:3] - AX[0:3] (xpoint) - P1[0:3] (microcontroller)
44803a4fa0a25da81600ea0bcd75692ae8ca6050d165Robert P. J. Day *  GPIO[4:6] - AY[0:2] (xpoint) - P1[4:6] (microcontroller)
44813a4fa0a25da81600ea0bcd75692ae8ca6050d165Robert P. J. Day *  GPIO[7]   - DATA (xpoint)    - P1[7] (microcontroller)
44823a4fa0a25da81600ea0bcd75692ae8ca6050d165Robert P. J. Day *  GPIO[8]   -                  - P3[5] (microcontroller)
44833a4fa0a25da81600ea0bcd75692ae8ca6050d165Robert P. J. Day *  GPIO[9]   - RESET (xpoint)   - P3[6] (microcontroller)
44843a4fa0a25da81600ea0bcd75692ae8ca6050d165Robert P. J. Day *  GPIO[10]  - STROBE (xpoint)  - P3[7] (microcontroller)
44853a4fa0a25da81600ea0bcd75692ae8ca6050d165Robert P. J. Day *  GPINTR    -                  - P3[4] (microcontroller)
44861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
44873a4fa0a25da81600ea0bcd75692ae8ca6050d165Robert P. J. Day * The microcontroller is a 80C32 like. It should be possible to change xpoint
44883a4fa0a25da81600ea0bcd75692ae8ca6050d165Robert P. J. Day * configuration either directly (as we are doing) or using the microcontroller
44891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * which is also wired to I2C interface. I have no further info on the
44903a4fa0a25da81600ea0bcd75692ae8ca6050d165Robert P. J. Day * microcontroller features, one would need to disassembly the firmware.
44911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * note: the vendor refused to give any information on this product, all
44921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *       that stuff was found using a multimeter! :)
44931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
44941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic void rv605_muxsel(struct bttv *btv, unsigned int input)
44951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
449613afaefc0392d377d23ce5b7e1f4f3944a00e1f1Trent Piepho	static const u8 muxgpio[] = { 0x3, 0x1, 0x2, 0x4, 0xf, 0x7, 0xe, 0x0,
449713afaefc0392d377d23ce5b7e1f4f3944a00e1f1Trent Piepho				      0xd, 0xb, 0xc, 0x6, 0x9, 0x5, 0x8, 0xa };
449813afaefc0392d377d23ce5b7e1f4f3944a00e1f1Trent Piepho
449913afaefc0392d377d23ce5b7e1f4f3944a00e1f1Trent Piepho	gpio_bits(0x07f, muxgpio[input]);
450013afaefc0392d377d23ce5b7e1f4f3944a00e1f1Trent Piepho
45011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* reset all conections */
45021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	gpio_bits(0x200,0x200);
45031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	mdelay(1);
45041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	gpio_bits(0x200,0x000);
45051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	mdelay(1);
45061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4507c84e6036ba7177a404cc860cb5a440e06fad92ddJoe Perches	/* create a new connection */
45081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	gpio_bits(0x480,0x480);
45091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	mdelay(1);
45101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	gpio_bits(0x480,0x080);
45111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	mdelay(1);
45121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
45131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
45141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Tibet Systems 'Progress DVR' CS16 muxsel helper [Chris Fanning]
45151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
45161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * The CS16 (available on eBay cheap) is a PCI board with four Fusion
45173ad2f3fbb961429d2aa627465ae4829758bc7e07Daniel Mack * 878A chips, a PCI bridge, an Atmel microcontroller, four sync separator
45181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * chips, ten eight input analog multiplexors, a not chip and a few
45191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * other components.
45201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
45211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 16 inputs on a secondary bracket are provided and can be selected
45221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * from each of the four capture chips.  Two of the eight input
45231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * multiplexors are used to select from any of the 16 input signals.
45241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
45251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Unsupported hardware capabilities:
45261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *  . A video output monitor on the secondary bracket can be selected from
45271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *    one of the 878A chips.
45281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *  . Another passthrough but I haven't spent any time investigating it.
45291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *  . Digital I/O (logic level connected to GPIO) is available from an
45301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *    onboard header.
45311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
45321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * The on chip input mux should always be set to 2.
45331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * GPIO[16:19] - Video input selection
45341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * GPIO[0:3]   - Video output monitor select (only available from one 878A)
45351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * GPIO[?:?]   - Digital I/O.
45361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
45371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * There is an ATMEL microcontroller with an 8031 core on board.  I have not
45381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * determined what function (if any) it provides.  With the microcontroller
45393ad2f3fbb961429d2aa627465ae4829758bc7e07Daniel Mack * and sync separator chips a guess is that it might have to do with video
45401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * switching and maybe some digital I/O.
45411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
45421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic void tibetCS16_muxsel(struct bttv *btv, unsigned int input)
45431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
45441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* video mux */
45451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	gpio_bits(0x0f0000, input << 16);
45461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
45471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
45481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic void tibetCS16_init(struct bttv *btv)
45491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
45501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* enable gpio bits, mask obtained via btSpy */
45511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	gpio_inout(0xffffff, 0x0f7fff);
45521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	gpio_write(0x0f7fff);
45531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
45541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
45551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
45561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * The following routines for the Kodicom-4400r get a little mind-twisting.
45571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * There is a "master" controller and three "slave" controllers, together
45581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * an analog switch which connects any of 16 cameras to any of the BT87A's.
45591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * The analog switch is controlled by the "master", but the detection order
45601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * of the four BT878A chips is in an order which I just don't understand.
45611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * The "master" is actually the second controller to be detected.  The
45623a4fa0a25da81600ea0bcd75692ae8ca6050d165Robert P. J. Day * logic on the board uses logical numbers for the 4 controllers, but
45631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * those numbers are different from the detection sequence.  When working
45641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * with the analog switch, we need to "map" from the detection sequence
45651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * over to the board's logical controller number.  This mapping sequence
45661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * is {3, 0, 2, 1}, i.e. the first controller to be detected is logical
45671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * unit 3, the second (which is the master) is logical unit 0, etc.
45681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * We need to maintain the status of the analog switch (which of the 16
4569cd2e34ead8bf530c45e0446dc4bbbd9e35f28af9Ondrej Zary * cameras is connected to which of the 4 controllers) in sw_status array.
45701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
45711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
45721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
45731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * First a routine to set the analog switch, which controls which camera
45741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * is routed to which controller.  The switch comprises an X-address
45751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * (gpio bits 0-3, representing the camera, ranging from 0-15), and a
45761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Y-address (gpio bits 4-6, representing the controller, ranging from 0-3).
45771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * A data value (gpio bit 7) of '1' enables the switch, and '0' disables
45781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * the switch.  A STROBE bit (gpio bit 8) latches the data value into the
45791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * specified address.  The idea is to set the address and data, then bring
45801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * STROBE high, and finally bring STROBE back to low.
45811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
45821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic void kodicom4400r_write(struct bttv *btv,
45831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			       unsigned char xaddr,
45841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			       unsigned char yaddr,
45851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			       unsigned char data) {
45861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned int udata;
45871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
45881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	udata = (data << 7) | ((yaddr&3) << 4) | (xaddr&0xf);
45891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	gpio_bits(0x1ff, udata);		/* write ADDR and DAT */
45901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	gpio_bits(0x1ff, udata | (1 << 8));	/* strobe high */
45911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	gpio_bits(0x1ff, udata);		/* strobe low */
45921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
45931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
45941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
45951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Next the mux select.  Both the "master" and "slave" 'cards' (controllers)
45961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * use this routine.  The routine finds the "master" for the card, maps
45971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * the controller number from the detected position over to the logical
45981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * number, writes the appropriate data to the analog switch, and housekeeps
45991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * the local copy of the switch information.  The parameter 'input' is the
46001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * requested camera number (0 - 15).
46011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
46021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic void kodicom4400r_muxsel(struct bttv *btv, unsigned int input)
46031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
46041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int xaddr, yaddr;
46051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct bttv *mctlr;
46061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	static unsigned char map[4] = {3, 0, 2, 1};
46071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
46081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	mctlr = master[btv->c.nr];
46091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	if (mctlr == NULL) {	/* ignore if master not yet detected */
46101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		return;
46111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	}
46121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	yaddr = (btv->c.nr - mctlr->c.nr + 1) & 3; /* the '&' is for safety */
46131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	yaddr = map[yaddr];
46141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	xaddr = input & 0xf;
46151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* Check if the controller/camera pair has changed, else ignore */
4616cd2e34ead8bf530c45e0446dc4bbbd9e35f28af9Ondrej Zary	if (mctlr->sw_status[yaddr] != xaddr)
46171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	{
46181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		/* "open" the old switch, "close" the new one, save the new */
4619cd2e34ead8bf530c45e0446dc4bbbd9e35f28af9Ondrej Zary		kodicom4400r_write(mctlr, mctlr->sw_status[yaddr], yaddr, 0);
4620cd2e34ead8bf530c45e0446dc4bbbd9e35f28af9Ondrej Zary		mctlr->sw_status[yaddr] = xaddr;
46211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		kodicom4400r_write(mctlr, xaddr, yaddr, 1);
46221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	}
46231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
46241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
46251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
46261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * During initialisation, we need to reset the analog switch.  We
46271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * also preset the switch to map the 4 connectors on the card to the
46281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * *user's* (see above description of kodicom4400r_muxsel) channels
46291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 0 through 3
46301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
46311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic void kodicom4400r_init(struct bttv *btv)
46321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
46331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int ix;
46341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
46351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	gpio_inout(0x0003ff, 0x0003ff);
46361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	gpio_write(1 << 9);	/* reset MUX */
46371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	gpio_write(0);
46381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* Preset camera 0 to the 4 controllers */
4639c1d570385bd6dd5fe4c0cab09b1c390331111b35Mauro Carvalho Chehab	for (ix = 0; ix < 4; ix++) {
4640cd2e34ead8bf530c45e0446dc4bbbd9e35f28af9Ondrej Zary		btv->sw_status[ix] = ix;
46411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		kodicom4400r_write(btv, ix, ix, 1);
46421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	}
46431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/*
46441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	 * Since this is the "master", we need to set up the
46451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	 * other three controller chips' pointers to this structure
46461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	 * for later use in the muxsel routine.
46471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	 */
46481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	if ((btv->c.nr<1) || (btv->c.nr>BTTV_MAX-3))
46491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	    return;
46501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	master[btv->c.nr-1] = btv;
46511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	master[btv->c.nr]   = btv;
46521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	master[btv->c.nr+1] = btv;
46531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	master[btv->c.nr+2] = btv;
46541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
46551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
465624a70fdce872d70171b1f49dcd1a7c3a4e8396b2Mauro Carvalho Chehab/* The Grandtec X-Guard framegrabber card uses two Dual 4-channel
465724a70fdce872d70171b1f49dcd1a7c3a4e8396b2Mauro Carvalho Chehab * video multiplexers to provide up to 16 video inputs. These
465824a70fdce872d70171b1f49dcd1a7c3a4e8396b2Mauro Carvalho Chehab * multiplexers are controlled by the lower 8 GPIO pins of the
465924a70fdce872d70171b1f49dcd1a7c3a4e8396b2Mauro Carvalho Chehab * bt878. The multiplexers probably Pericom PI5V331Q or similar.
46601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
466124a70fdce872d70171b1f49dcd1a7c3a4e8396b2Mauro Carvalho Chehab * xxx0 is pin xxx of multiplexer U5,
466224a70fdce872d70171b1f49dcd1a7c3a4e8396b2Mauro Carvalho Chehab * yyy1 is pin yyy of multiplexer U2
466324a70fdce872d70171b1f49dcd1a7c3a4e8396b2Mauro Carvalho Chehab */
46641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ENA0    0x01
46651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ENB0    0x02
46661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ENA1    0x04
46671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ENB1    0x08
46681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
46691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IN10    0x10
46701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IN00    0x20
46711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IN11    0x40
46721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IN01    0x80
46731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
46741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic void xguard_muxsel(struct bttv *btv, unsigned int input)
46751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
46761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	static const int masks[] = {
46774ac97914c6c35f6bf132071c718e034d0846b9f5Mauro Carvalho Chehab		ENB0, ENB0|IN00, ENB0|IN10, ENB0|IN00|IN10,
46784ac97914c6c35f6bf132071c718e034d0846b9f5Mauro Carvalho Chehab		ENA0, ENA0|IN00, ENA0|IN10, ENA0|IN00|IN10,
46794ac97914c6c35f6bf132071c718e034d0846b9f5Mauro Carvalho Chehab		ENB1, ENB1|IN01, ENB1|IN11, ENB1|IN01|IN11,
46804ac97914c6c35f6bf132071c718e034d0846b9f5Mauro Carvalho Chehab		ENA1, ENA1|IN01, ENA1|IN11, ENA1|IN01|IN11,
46811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	};
46821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	gpio_write(masks[input%16]);
46831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
46841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic void picolo_tetra_init(struct bttv *btv)
46851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
46861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/*This is the video input redirection fonctionality : I DID NOT USED IT. */
46871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	btwrite (0x08<<16,BT848_GPIO_DATA);/*GPIO[19] [==> 4053 B+C] set to 1 */
46881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	btwrite (0x04<<16,BT848_GPIO_DATA);/*GPIO[18] [==> 4053 A]  set to 1*/
46891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
46901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic void picolo_tetra_muxsel (struct bttv* btv, unsigned int input)
46911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
46921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
46938af443e581ab57a6a38f595eb40be3514ea55195Joe Perches	dprintk("%d : picolo_tetra_muxsel =>  input = %d\n", btv->c.nr, input);
46941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/*Just set the right path in the analog multiplexers : channel 1 -> 4 ==> Analog Mux ==> MUX0*/
46951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/*GPIO[20]&GPIO[21] used to choose the right input*/
46961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	btwrite (input<<20,BT848_GPIO_DATA);
46971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
46981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
46991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
47001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
47011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * ivc120_muxsel [Added by Alan Garfield <alan@fromorbit.com>]
47021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
47031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * The IVC120G security card has 4 i2c controlled TDA8540 matrix
47041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * swichers to provide 16 channels to MUX0. The TDA8540's have
4705d6e05edc59ecd79e8badf440c0d295a979bdfa3eAndreas Mohr * 4 independent outputs and as such the IVC120G also has the
47061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * optional "Monitor Out" bus. This allows the card to be looking
47071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * at one input while the monitor is looking at another.
47081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
47091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Since I've couldn't be bothered figuring out how to add an
471025985edcedea6396277003854657b5f3cb31a628Lucas De Marchi * independent muxsel for the monitor bus, I've just set it to
47111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * whatever the card is looking at.
47121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
47131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *  OUT0 of the TDA8540's is connected to MUX0         (0x03)
47141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *  OUT1 of the TDA8540's is connected to "Monitor Out"        (0x0C)
47151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
47161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *  TDA8540_ALT3 IN0-3 = Channel 13 - 16       (0x03)
47171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *  TDA8540_ALT4 IN0-3 = Channel 1 - 4         (0x03)
47181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *  TDA8540_ALT5 IN0-3 = Channel 5 - 8         (0x03)
47191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *  TDA8540_ALT6 IN0-3 = Channel 9 - 12                (0x03)
47201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
47211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
47221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
47231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* All 7 possible sub-ids for the TDA8540 Matrix Switcher */
47241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define I2C_TDA8540        0x90
47251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define I2C_TDA8540_ALT1   0x92
47261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define I2C_TDA8540_ALT2   0x94
47271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define I2C_TDA8540_ALT3   0x96
47281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define I2C_TDA8540_ALT4   0x98
47291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define I2C_TDA8540_ALT5   0x9a
47301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define I2C_TDA8540_ALT6   0x9c
47311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
47321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic void ivc120_muxsel(struct bttv *btv, unsigned int input)
47331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
473424a70fdce872d70171b1f49dcd1a7c3a4e8396b2Mauro Carvalho Chehab	/* Simple maths */
47351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int key = input % 4;
47361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int matrix = input / 4;
47371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
47388af443e581ab57a6a38f595eb40be3514ea55195Joe Perches	dprintk("%d: ivc120_muxsel: Input - %02d | TDA - %02d | In - %02d\n",
47391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		btv->c.nr, input, matrix, key);
47401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
474124a70fdce872d70171b1f49dcd1a7c3a4e8396b2Mauro Carvalho Chehab	/* Handles the input selection on the TDA8540's */
47421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	bttv_I2CWrite(btv, I2C_TDA8540_ALT3, 0x00,
47431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		      ((matrix == 3) ? (key | key << 2) : 0x00), 1);
47441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	bttv_I2CWrite(btv, I2C_TDA8540_ALT4, 0x00,
47451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		      ((matrix == 0) ? (key | key << 2) : 0x00), 1);
47461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	bttv_I2CWrite(btv, I2C_TDA8540_ALT5, 0x00,
47471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		      ((matrix == 1) ? (key | key << 2) : 0x00), 1);
47481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	bttv_I2CWrite(btv, I2C_TDA8540_ALT6, 0x00,
47491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		      ((matrix == 2) ? (key | key << 2) : 0x00), 1);
47501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
475124a70fdce872d70171b1f49dcd1a7c3a4e8396b2Mauro Carvalho Chehab	/* Handles the output enables on the TDA8540's */
47521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	bttv_I2CWrite(btv, I2C_TDA8540_ALT3, 0x02,
475324a70fdce872d70171b1f49dcd1a7c3a4e8396b2Mauro Carvalho Chehab		      ((matrix == 3) ? 0x03 : 0x00), 1);  /* 13 - 16 */
47541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	bttv_I2CWrite(btv, I2C_TDA8540_ALT4, 0x02,
475524a70fdce872d70171b1f49dcd1a7c3a4e8396b2Mauro Carvalho Chehab		      ((matrix == 0) ? 0x03 : 0x00), 1);  /* 1-4 */
47561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	bttv_I2CWrite(btv, I2C_TDA8540_ALT5, 0x02,
475724a70fdce872d70171b1f49dcd1a7c3a4e8396b2Mauro Carvalho Chehab		      ((matrix == 1) ? 0x03 : 0x00), 1);  /* 5-8 */
47581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	bttv_I2CWrite(btv, I2C_TDA8540_ALT6, 0x02,
475924a70fdce872d70171b1f49dcd1a7c3a4e8396b2Mauro Carvalho Chehab		      ((matrix == 2) ? 0x03 : 0x00), 1);  /* 9-12 */
47601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4761fb5deb1b9ecc3c64b713f33ec56781c01a0b11b9Trent Piepho	/* 878's MUX0 is already selected for input via muxsel values */
47621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
47631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
47641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
47651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* PXC200 muxsel helper
47661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * luke@syseng.anu.edu.au
47671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * another transplant
47681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * from Alessandro Rubini (rubini@linux.it)
47691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
47701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * There are 4 kinds of cards:
47711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * PXC200L which is bt848
47721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * PXC200F which is bt848 with PIC controlling mux
47731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * PXC200AL which is bt878
47741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * PXC200AF which is bt878 with PIC controlling mux
47751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
47761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define PX_CFG_PXC200F 0x01
47771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define PX_FLAG_PXC200A  0x00001000 /* a pxc200A is bt-878 based */
47781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define PX_I2C_PIC       0x0f
47791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define PX_PXC200A_CARDID 0x200a1295
47801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define PX_I2C_CMD_CFG   0x00
47811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
47821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic void PXC200_muxsel(struct bttv *btv, unsigned int input)
47831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
47844ac97914c6c35f6bf132071c718e034d0846b9f5Mauro Carvalho Chehab	int rc;
47851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	long mux;
47861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int bitmask;
47874ac97914c6c35f6bf132071c718e034d0846b9f5Mauro Carvalho Chehab	unsigned char buf[2];
47881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
47891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* Read PIC config to determine if this is a PXC200F */
47901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* PX_I2C_CMD_CFG*/
47911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	buf[0]=0;
47921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	buf[1]=0;
47931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	rc=bttv_I2CWrite(btv,(PX_I2C_PIC<<1),buf[0],buf[1],1);
47941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	if (rc) {
47958af443e581ab57a6a38f595eb40be3514ea55195Joe Perches		pr_debug("%d: PXC200_muxsel: pic cfg write failed:%d\n",
47968af443e581ab57a6a38f595eb40be3514ea55195Joe Perches			 btv->c.nr, rc);
47971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	  /* not PXC ? do nothing */
47988af443e581ab57a6a38f595eb40be3514ea55195Joe Perches		return;
47991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	}
48001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
48011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	rc=bttv_I2CRead(btv,(PX_I2C_PIC<<1),NULL);
48021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	if (!(rc & PX_CFG_PXC200F)) {
48038af443e581ab57a6a38f595eb40be3514ea55195Joe Perches		pr_debug("%d: PXC200_muxsel: not PXC200F rc:%d\n",
48048af443e581ab57a6a38f595eb40be3514ea55195Joe Perches			 btv->c.nr, rc);
48058af443e581ab57a6a38f595eb40be3514ea55195Joe Perches		return;
48061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	}
48071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
48081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
48091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* The multiplexer in the 200F is handled by the GPIO port */
48101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* get correct mapping between inputs  */
48111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/*  mux = bttv_tvcards[btv->type].muxsel[input] & 3; */
48121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* ** not needed!?   */
48131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	mux = input;
48141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
48151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* make sure output pins are enabled */
48161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* bitmask=0x30f; */
48171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	bitmask=0x302;
48181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* check whether we have a PXC200A */
48194ac97914c6c35f6bf132071c718e034d0846b9f5Mauro Carvalho Chehab	if (btv->cardid == PX_PXC200A_CARDID)  {
48201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	   bitmask ^= 0x180; /* use 7 and 9, not 8 and 9 */
48211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	   bitmask |= 7<<4; /* the DAC */
48221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	}
48231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	btwrite(bitmask, BT848_GPIO_OUT_EN);
48241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
48251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	bitmask = btread(BT848_GPIO_DATA);
48264ac97914c6c35f6bf132071c718e034d0846b9f5Mauro Carvalho Chehab	if (btv->cardid == PX_PXC200A_CARDID)
48271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	  bitmask = (bitmask & ~0x280) | ((mux & 2) << 8) | ((mux & 1) << 7);
48281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	else /* older device */
48291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	  bitmask = (bitmask & ~0x300) | ((mux & 3) << 8);
48301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	btwrite(bitmask,BT848_GPIO_DATA);
48311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
48321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/*
48331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	 * Was "to be safe, set the bt848 to input 0"
48341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	 * Actually, since it's ok at load time, better not messing
48351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	 * with these bits (on PXC200AF you need to set mux 2 here)
48361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	 *
48371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	 * needed because bttv-driver sets mux before calling this function
48381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	 */
48394ac97914c6c35f6bf132071c718e034d0846b9f5Mauro Carvalho Chehab	if (btv->cardid == PX_PXC200A_CARDID)
48401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	  btaor(2<<5, ~BT848_IFORM_MUXSEL, BT848_IFORM);
48411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	else /* older device */
48421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	  btand(~BT848_IFORM_MUXSEL,BT848_IFORM);
48431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
48448af443e581ab57a6a38f595eb40be3514ea55195Joe Perches	pr_debug("%d: setting input channel to:%d\n", btv->c.nr, (int)mux);
48451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
48461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
484715f8eeb2a86b969d82bfca5d54f1fb30c35cf243Trent Piephostatic void phytec_muxsel(struct bttv *btv, unsigned int input)
484815f8eeb2a86b969d82bfca5d54f1fb30c35cf243Trent Piepho{
484915f8eeb2a86b969d82bfca5d54f1fb30c35cf243Trent Piepho	unsigned int mux = input % 4;
485015f8eeb2a86b969d82bfca5d54f1fb30c35cf243Trent Piepho
485115f8eeb2a86b969d82bfca5d54f1fb30c35cf243Trent Piepho	if (input == btv->svhs)
485215f8eeb2a86b969d82bfca5d54f1fb30c35cf243Trent Piepho		mux = 0;
485315f8eeb2a86b969d82bfca5d54f1fb30c35cf243Trent Piepho
485415f8eeb2a86b969d82bfca5d54f1fb30c35cf243Trent Piepho	gpio_bits(0x3, mux);
485515f8eeb2a86b969d82bfca5d54f1fb30c35cf243Trent Piepho}
485615f8eeb2a86b969d82bfca5d54f1fb30c35cf243Trent Piepho
48570c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo/*
48580c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo * GeoVision GV-800(S) functions
48590c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo * Bruno Christo <bchristo@inf.ufsm.br>
48600c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo*/
48610c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo
48620c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo/* This is a function to control the analog switch, which determines which
48630c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo * camera is routed to which controller.  The switch comprises an X-address
48640c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo * (gpio bits 0-3, representing the camera, ranging from 0-15), and a
48650c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo * Y-address (gpio bits 4-6, representing the controller, ranging from 0-3).
48660c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo * A data value (gpio bit 18) of '1' enables the switch, and '0' disables
48670c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo * the switch.  A STROBE bit (gpio bit 17) latches the data value into the
48680c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo * specified address. There is also a chip select (gpio bit 16).
48690c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo * The idea is to set the address and chip select together, bring
48700c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo * STROBE high, write the data, and finally bring STROBE back to low.
48710c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo */
48720c5db425519487d06a5a14eb369268f4a2b32677Bruno Christostatic void gv800s_write(struct bttv *btv,
48730c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo			 unsigned char xaddr,
48740c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo			 unsigned char yaddr,
48750c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo			 unsigned char data) {
48760c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo	/* On the "master" 878A:
48770c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo	* GPIO bits 0-9 are used for the analog switch:
48780c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo	*   00 - 03:	camera selector
48790c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo	*   04 - 06:	878A (controller) selector
48800c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo	*   16: 	cselect
48810c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo	*   17:		strobe
48820c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo	*   18: 	data (1->on, 0->off)
48830c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo	*   19:		reset
48840c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo	*/
48850c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo	const u32 ADDRESS = ((xaddr&0xf) | (yaddr&3)<<4);
48860c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo	const u32 CSELECT = 1<<16;
48870c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo	const u32 STROBE = 1<<17;
48880c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo	const u32 DATA = data<<18;
48890c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo
48900c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo	gpio_bits(0x1007f, ADDRESS | CSELECT);	/* write ADDRESS and CSELECT */
48910c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo	gpio_bits(0x20000, STROBE);		/* STROBE high */
48920c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo	gpio_bits(0x40000, DATA);		/* write DATA */
48930c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo	gpio_bits(0x20000, ~STROBE);		/* STROBE low */
48940c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo}
48950c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo
48960c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo/*
48970c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo * GeoVision GV-800(S) muxsel
48980c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo *
48990c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo * Each of the 4 cards (controllers) use this function.
49000c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo * The controller using this function selects the input through the GPIO pins
49010c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo * of the "master" card. A pointer to this card is stored in master[btv->c.nr].
49020c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo *
49030c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo * The parameter 'input' is the requested camera number (0-4) on the controller.
49040c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo * The map array has the address of each input. Note that the addresses in the
49050c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo * array are in the sequence the original GeoVision driver uses, that is, set
49060c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo * every controller to input 0, then to input 1, 2, 3, repeat. This means that
49070c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo * the physical "camera 1" connector corresponds to controller 0 input 0,
49080c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo * "camera 2" corresponds to controller 1 input 0, and so on.
49090c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo *
49100c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo * After getting the input address, the function then writes the appropriate
49110c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo * data to the analog switch, and housekeeps the local copy of the switch
49120c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo * information.
49130c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo */
49140c5db425519487d06a5a14eb369268f4a2b32677Bruno Christostatic void gv800s_muxsel(struct bttv *btv, unsigned int input)
49150c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo{
49160c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo	struct bttv *mctlr;
49170c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo	int xaddr, yaddr;
49180c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo	static unsigned int map[4][4] = { { 0x0, 0x4, 0xa, 0x6 },
49190c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo					  { 0x1, 0x5, 0xb, 0x7 },
49200c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo					  { 0x2, 0x8, 0xc, 0xe },
49210c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo					  { 0x3, 0x9, 0xd, 0xf } };
49220c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo	input = input%4;
49230c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo	mctlr = master[btv->c.nr];
49240c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo	if (mctlr == NULL) {
49250c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo		/* do nothing until the "master" is detected */
49260c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo		return;
49270c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo	}
49280c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo	yaddr = (btv->c.nr - mctlr->c.nr) & 3;
49290c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo	xaddr = map[yaddr][input] & 0xf;
49300c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo
49310c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo	/* Check if the controller/camera pair has changed, ignore otherwise */
4932cd2e34ead8bf530c45e0446dc4bbbd9e35f28af9Ondrej Zary	if (mctlr->sw_status[yaddr] != xaddr) {
49330c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo		/* disable the old switch, enable the new one and save status */
4934cd2e34ead8bf530c45e0446dc4bbbd9e35f28af9Ondrej Zary		gv800s_write(mctlr, mctlr->sw_status[yaddr], yaddr, 0);
4935cd2e34ead8bf530c45e0446dc4bbbd9e35f28af9Ondrej Zary		mctlr->sw_status[yaddr] = xaddr;
49360c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo		gv800s_write(mctlr, xaddr, yaddr, 1);
49370c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo	}
49380c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo}
49390c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo
49400c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo/* GeoVision GV-800(S) "master" chip init */
49410c5db425519487d06a5a14eb369268f4a2b32677Bruno Christostatic void gv800s_init(struct bttv *btv)
49420c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo{
49430c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo	int ix;
49440c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo
49450c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo	gpio_inout(0xf107f, 0xf107f);
49460c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo	gpio_write(1<<19); /* reset the analog MUX */
49470c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo	gpio_write(0);
49480c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo
49490c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo	/* Preset camera 0 to the 4 controllers */
49500c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo	for (ix = 0; ix < 4; ix++) {
4951cd2e34ead8bf530c45e0446dc4bbbd9e35f28af9Ondrej Zary		btv->sw_status[ix] = ix;
49520c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo		gv800s_write(btv, ix, ix, 1);
49530c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo	}
49540c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo
49550c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo	/* Inputs on the "master" controller need this brightness fix */
49560c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo	bttv_I2CWrite(btv, 0x18, 0x5, 0x90, 1);
49570c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo
49580c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo	if (btv->c.nr > BTTV_MAX-4)
49590c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo		return;
49600c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo	/*
49610c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo	 * Store the "master" controller pointer in the master
49620c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo	 * array for later use in the muxsel function.
49630c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo	 */
49640c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo	master[btv->c.nr]   = btv;
49650c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo	master[btv->c.nr+1] = btv;
49660c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo	master[btv->c.nr+2] = btv;
49670c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo	master[btv->c.nr+3] = btv;
49680c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo}
49690c5db425519487d06a5a14eb369268f4a2b32677Bruno Christo
49701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* ----------------------------------------------------------------------- */
49711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* motherboard chipset specific stuff                                      */
49721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
49737d44e8921851f460bcacb3ade432a4f5ada20fb6Adrian Bunkvoid __init bttv_check_chipset(void)
49741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
49751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int pcipci_fail = 0;
49761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct pci_dev *dev = NULL;
49771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
49783d265c96ccb8f72153b4e926053a79e1a52bf264Alan Cox	if (pci_pci_problems & (PCIPCI_FAIL|PCIAGP_FAIL)) 	/* should check if target is AGP */
49791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		pcipci_fail = 1;
49801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	if (pci_pci_problems & (PCIPCI_TRITON|PCIPCI_NATOMA|PCIPCI_VIAETBF))
49811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		triton1 = 1;
49821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	if (pci_pci_problems & PCIPCI_VSFX)
49831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		vsfx = 1;
49841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef PCIPCI_ALIMAGIK
49851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	if (pci_pci_problems & PCIPCI_ALIMAGIK)
49861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		latency = 0x0A;
49871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
49881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
49891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
49901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* print warnings about any quirks found */
49911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	if (triton1)
49928af443e581ab57a6a38f595eb40be3514ea55195Joe Perches		pr_info("Host bridge needs ETBF enabled\n");
49931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	if (vsfx)
49948af443e581ab57a6a38f595eb40be3514ea55195Joe Perches		pr_info("Host bridge needs VSFX enabled\n");
49951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	if (pcipci_fail) {
49968af443e581ab57a6a38f595eb40be3514ea55195Joe Perches		pr_info("bttv and your chipset may not work together\n");
49974dcef52400fa6b9eb2de589300ae0151a1c65b3bMauro Carvalho Chehab		if (!no_overlay) {
49988af443e581ab57a6a38f595eb40be3514ea55195Joe Perches			pr_info("overlay will be disabled\n");
49991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			no_overlay = 1;
50004dcef52400fa6b9eb2de589300ae0151a1c65b3bMauro Carvalho Chehab		} else {
50018af443e581ab57a6a38f595eb40be3514ea55195Joe Perches			pr_info("overlay forced. Use this option at your own risk.\n");
50021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		}
50031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	}
50041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	if (UNSET != latency)
50058af443e581ab57a6a38f595eb40be3514ea55195Joe Perches		pr_info("pci latency fixup [%d]\n", latency);
50062bfa1ac6ce854a7f895d5c9d6c273ef770fad9aeMauro Carvalho Chehab	while ((dev = pci_get_device(PCI_VENDOR_ID_INTEL,
50071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds				      PCI_DEVICE_ID_INTEL_82441, dev))) {
50084ac97914c6c35f6bf132071c718e034d0846b9f5Mauro Carvalho Chehab		unsigned char b;
50091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		pci_read_config_byte(dev, 0x53, &b);
50101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		if (bttv_debug)
50118af443e581ab57a6a38f595eb40be3514ea55195Joe Perches			pr_info("Host bridge: 82441FX Natoma, bufcon=0x%02x\n",
50128af443e581ab57a6a38f595eb40be3514ea55195Joe Perches				b);
50131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	}
50141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
50151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
50164c62e9764ab403d42f9b8871b1241fe7812f19d4Greg Kroah-Hartmanint bttv_handle_chipset(struct bttv *btv)
50171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
50184ac97914c6c35f6bf132071c718e034d0846b9f5Mauro Carvalho Chehab	unsigned char command;
50191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
50201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	if (!triton1 && !vsfx && UNSET == latency)
50211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		return 0;
50221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
50231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	if (bttv_verbose) {
50241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		if (triton1)
50258af443e581ab57a6a38f595eb40be3514ea55195Joe Perches			pr_info("%d: enabling ETBF (430FX/VP3 compatibility)\n",
50268af443e581ab57a6a38f595eb40be3514ea55195Joe Perches				btv->c.nr);
50271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		if (vsfx && btv->id >= 878)
50288af443e581ab57a6a38f595eb40be3514ea55195Joe Perches			pr_info("%d: enabling VSFX\n", btv->c.nr);
50291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		if (UNSET != latency)
50308af443e581ab57a6a38f595eb40be3514ea55195Joe Perches			pr_info("%d: setting pci timer to %d\n",
50318af443e581ab57a6a38f595eb40be3514ea55195Joe Perches				btv->c.nr, latency);
50321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	}
50331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
50341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	if (btv->id < 878) {
50351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		/* bt848 (mis)uses a bit in the irq mask for etbf */
50361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		if (triton1)
50371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			btv->triton1 = BT848_INT_ETBF;
50381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	} else {
50391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		/* bt878 has a bit in the pci config space for it */
50404ac97914c6c35f6bf132071c718e034d0846b9f5Mauro Carvalho Chehab		pci_read_config_byte(btv->c.pci, BT878_DEVCTRL, &command);
50411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		if (triton1)
50421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			command |= BT878_EN_TBFX;
50431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		if (vsfx)
50441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			command |= BT878_EN_VSFX;
50454ac97914c6c35f6bf132071c718e034d0846b9f5Mauro Carvalho Chehab		pci_write_config_byte(btv->c.pci, BT878_DEVCTRL, command);
50464ac97914c6c35f6bf132071c718e034d0846b9f5Mauro Carvalho Chehab	}
50471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	if (UNSET != latency)
50481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		pci_write_config_byte(btv->c.pci, PCI_LATENCY_TIMER, latency);
50491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	return 0;
50501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
50511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
50521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
50531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
50541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Local variables:
50551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * c-basic-offset: 8
50561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * End:
50571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
5058