PageRenderTime 251ms CodeModel.GetById 26ms app.highlight 206ms RepoModel.GetById 1ms app.codeStats 1ms

/drivers/media/video/cx88/cx88-cards.c

https://bitbucket.org/slukk/jb-tsm-kernel-4.2
C | 3563 lines | 3203 code | 110 blank | 250 comment | 108 complexity | a3966c00081f41d60f2128e627aec482 MD5 | raw file
Possible License(s): GPL-2.0, LGPL-2.0, AGPL-1.0

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

   1/*
   2 *
   3 * device driver for Conexant 2388x based TV cards
   4 * card-specific stuff.
   5 *
   6 * (c) 2003 Gerd Knorr <kraxel@bytesex.org> [SuSE Labs]
   7 *
   8 *  This program is free software; you can redistribute it and/or modify
   9 *  it under the terms of the GNU General Public License as published by
  10 *  the Free Software Foundation; either version 2 of the License, or
  11 *  (at your option) any later version.
  12 *
  13 *  This program is distributed in the hope that it will be useful,
  14 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  15 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  16 *  GNU General Public License for more details.
  17 *
  18 *  You should have received a copy of the GNU General Public License
  19 *  along with this program; if not, write to the Free Software
  20 *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  21 */
  22
  23#include <linux/init.h>
  24#include <linux/module.h>
  25#include <linux/pci.h>
  26#include <linux/delay.h>
  27#include <linux/slab.h>
  28
  29#include "cx88.h"
  30#include "tea5767.h"
  31
  32static unsigned int tuner[] = {[0 ... (CX88_MAXBOARDS - 1)] = UNSET };
  33static unsigned int radio[] = {[0 ... (CX88_MAXBOARDS - 1)] = UNSET };
  34static unsigned int card[]  = {[0 ... (CX88_MAXBOARDS - 1)] = UNSET };
  35
  36module_param_array(tuner, int, NULL, 0444);
  37module_param_array(radio, int, NULL, 0444);
  38module_param_array(card,  int, NULL, 0444);
  39
  40MODULE_PARM_DESC(tuner,"tuner type");
  41MODULE_PARM_DESC(radio,"radio tuner type");
  42MODULE_PARM_DESC(card,"card type");
  43
  44static unsigned int latency = UNSET;
  45module_param(latency,int,0444);
  46MODULE_PARM_DESC(latency,"pci latency timer");
  47
  48static int disable_ir;
  49module_param(disable_ir, int, 0444);
  50MODULE_PARM_DESC(disable_ir, "Disable IR support");
  51
  52#define info_printk(core, fmt, arg...) \
  53	printk(KERN_INFO "%s: " fmt, core->name , ## arg)
  54
  55#define warn_printk(core, fmt, arg...) \
  56	printk(KERN_WARNING "%s: " fmt, core->name , ## arg)
  57
  58#define err_printk(core, fmt, arg...) \
  59	printk(KERN_ERR "%s: " fmt, core->name , ## arg)
  60
  61
  62/* ------------------------------------------------------------------ */
  63/* board config info                                                  */
  64
  65/* If radio_type !=UNSET, radio_addr should be specified
  66 */
  67
  68static const struct cx88_board cx88_boards[] = {
  69	[CX88_BOARD_UNKNOWN] = {
  70		.name		= "UNKNOWN/GENERIC",
  71		.tuner_type     = UNSET,
  72		.radio_type     = UNSET,
  73		.tuner_addr	= ADDR_UNSET,
  74		.radio_addr	= ADDR_UNSET,
  75		.input          = {{
  76			.type   = CX88_VMUX_COMPOSITE1,
  77			.vmux   = 0,
  78		},{
  79			.type   = CX88_VMUX_COMPOSITE2,
  80			.vmux   = 1,
  81		},{
  82			.type   = CX88_VMUX_COMPOSITE3,
  83			.vmux   = 2,
  84		},{
  85			.type   = CX88_VMUX_COMPOSITE4,
  86			.vmux   = 3,
  87		}},
  88	},
  89	[CX88_BOARD_HAUPPAUGE] = {
  90		.name		= "Hauppauge WinTV 34xxx models",
  91		.tuner_type     = UNSET,
  92		.radio_type     = UNSET,
  93		.tuner_addr	= ADDR_UNSET,
  94		.radio_addr	= ADDR_UNSET,
  95		.tda9887_conf   = TDA9887_PRESENT,
  96		.input          = {{
  97			.type   = CX88_VMUX_TELEVISION,
  98			.vmux   = 0,
  99			.gpio0  = 0xff00,  // internal decoder
 100		},{
 101			.type   = CX88_VMUX_DEBUG,
 102			.vmux   = 0,
 103			.gpio0  = 0xff01,  // mono from tuner chip
 104		},{
 105			.type   = CX88_VMUX_COMPOSITE1,
 106			.vmux   = 1,
 107			.gpio0  = 0xff02,
 108		},{
 109			.type   = CX88_VMUX_SVIDEO,
 110			.vmux   = 2,
 111			.gpio0  = 0xff02,
 112		}},
 113		.radio = {
 114			.type   = CX88_RADIO,
 115			.gpio0  = 0xff01,
 116		},
 117	},
 118	[CX88_BOARD_GDI] = {
 119		.name		= "GDI Black Gold",
 120		.tuner_type     = UNSET,
 121		.radio_type     = UNSET,
 122		.tuner_addr	= ADDR_UNSET,
 123		.radio_addr	= ADDR_UNSET,
 124		.input          = {{
 125			.type   = CX88_VMUX_TELEVISION,
 126			.vmux   = 0,
 127		},{
 128			.type   = CX88_VMUX_SVIDEO,
 129			.vmux   = 2,
 130		}},
 131	},
 132	[CX88_BOARD_PIXELVIEW] = {
 133		.name           = "PixelView",
 134		.tuner_type     = TUNER_PHILIPS_PAL,
 135		.radio_type     = UNSET,
 136		.tuner_addr	= ADDR_UNSET,
 137		.radio_addr	= ADDR_UNSET,
 138		.input          = {{
 139			.type   = CX88_VMUX_TELEVISION,
 140			.vmux   = 0,
 141			.gpio0  = 0xff00,  // internal decoder
 142		},{
 143			.type   = CX88_VMUX_COMPOSITE1,
 144			.vmux   = 1,
 145		},{
 146			.type   = CX88_VMUX_SVIDEO,
 147			.vmux   = 2,
 148		}},
 149		.radio = {
 150			 .type  = CX88_RADIO,
 151			 .gpio0 = 0xff10,
 152		},
 153	},
 154	[CX88_BOARD_ATI_WONDER_PRO] = {
 155		.name           = "ATI TV Wonder Pro",
 156		.tuner_type     = TUNER_PHILIPS_4IN1,
 157		.radio_type     = UNSET,
 158		.tuner_addr	= ADDR_UNSET,
 159		.radio_addr	= ADDR_UNSET,
 160		.tda9887_conf   = TDA9887_PRESENT | TDA9887_INTERCARRIER,
 161		.input          = {{
 162			.type   = CX88_VMUX_TELEVISION,
 163			.vmux   = 0,
 164			.gpio0  = 0x03ff,
 165		},{
 166			.type   = CX88_VMUX_COMPOSITE1,
 167			.vmux   = 1,
 168			.gpio0  = 0x03fe,
 169		},{
 170			.type   = CX88_VMUX_SVIDEO,
 171			.vmux   = 2,
 172			.gpio0  = 0x03fe,
 173		}},
 174	},
 175	[CX88_BOARD_WINFAST2000XP_EXPERT] = {
 176		.name           = "Leadtek Winfast 2000XP Expert",
 177		.tuner_type     = TUNER_PHILIPS_4IN1,
 178		.radio_type     = UNSET,
 179		.tuner_addr	= ADDR_UNSET,
 180		.radio_addr	= ADDR_UNSET,
 181		.tda9887_conf   = TDA9887_PRESENT,
 182		.input          = {{
 183			.type   = CX88_VMUX_TELEVISION,
 184			.vmux   = 0,
 185			.gpio0	= 0x00F5e700,
 186			.gpio1  = 0x00003004,
 187			.gpio2  = 0x00F5e700,
 188			.gpio3  = 0x02000000,
 189		},{
 190			.type   = CX88_VMUX_COMPOSITE1,
 191			.vmux   = 1,
 192			.gpio0	= 0x00F5c700,
 193			.gpio1  = 0x00003004,
 194			.gpio2  = 0x00F5c700,
 195			.gpio3  = 0x02000000,
 196		},{
 197			.type   = CX88_VMUX_SVIDEO,
 198			.vmux   = 2,
 199			.gpio0	= 0x00F5c700,
 200			.gpio1  = 0x00003004,
 201			.gpio2  = 0x00F5c700,
 202			.gpio3  = 0x02000000,
 203		}},
 204		.radio = {
 205			.type   = CX88_RADIO,
 206			.gpio0	= 0x00F5d700,
 207			.gpio1  = 0x00003004,
 208			.gpio2  = 0x00F5d700,
 209			.gpio3  = 0x02000000,
 210		},
 211	},
 212	[CX88_BOARD_AVERTV_STUDIO_303] = {
 213		.name           = "AverTV Studio 303 (M126)",
 214		.tuner_type     = TUNER_PHILIPS_FM1216ME_MK3,
 215		.radio_type     = UNSET,
 216		.tuner_addr	= ADDR_UNSET,
 217		.radio_addr	= ADDR_UNSET,
 218		.tda9887_conf   = TDA9887_PRESENT,
 219		.input          = {{
 220			.type   = CX88_VMUX_TELEVISION,
 221			.vmux   = 0,
 222			.gpio1  = 0xe09f,
 223		},{
 224			.type   = CX88_VMUX_COMPOSITE1,
 225			.vmux   = 1,
 226			.gpio1  = 0xe05f,
 227		},{
 228			.type   = CX88_VMUX_SVIDEO,
 229			.vmux   = 2,
 230			.gpio1  = 0xe05f,
 231		}},
 232		.radio = {
 233			.gpio1  = 0xe0df,
 234			.type   = CX88_RADIO,
 235		},
 236	},
 237	[CX88_BOARD_MSI_TVANYWHERE_MASTER] = {
 238		// added gpio values thanks to Michal
 239		// values for PAL from DScaler
 240		.name           = "MSI TV-@nywhere Master",
 241		.tuner_type     = TUNER_MT2032,
 242		.radio_type     = UNSET,
 243		.tuner_addr	= ADDR_UNSET,
 244		.radio_addr	= ADDR_UNSET,
 245		.tda9887_conf	= TDA9887_PRESENT | TDA9887_INTERCARRIER_NTSC,
 246		.input          = {{
 247			.type   = CX88_VMUX_TELEVISION,
 248			.vmux   = 0,
 249			.gpio0  = 0x000040bf,
 250			.gpio1  = 0x000080c0,
 251			.gpio2  = 0x0000ff40,
 252		},{
 253			.type   = CX88_VMUX_COMPOSITE1,
 254			.vmux   = 1,
 255			.gpio0  = 0x000040bf,
 256			.gpio1  = 0x000080c0,
 257			.gpio2  = 0x0000ff40,
 258		},{
 259			.type   = CX88_VMUX_SVIDEO,
 260			.vmux   = 2,
 261			.gpio0  = 0x000040bf,
 262			.gpio1  = 0x000080c0,
 263			.gpio2  = 0x0000ff40,
 264		}},
 265		.radio = {
 266			 .type   = CX88_RADIO,
 267			 .vmux   = 3,
 268			 .gpio0  = 0x000040bf,
 269			 .gpio1  = 0x000080c0,
 270			 .gpio2  = 0x0000ff20,
 271		},
 272	},
 273	[CX88_BOARD_WINFAST_DV2000] = {
 274		.name           = "Leadtek Winfast DV2000",
 275		.tuner_type     = TUNER_PHILIPS_FM1216ME_MK3,
 276		.radio_type     = UNSET,
 277		.tuner_addr	= ADDR_UNSET,
 278		.radio_addr	= ADDR_UNSET,
 279		.tda9887_conf   = TDA9887_PRESENT,
 280		.input          = {{
 281			.type   = CX88_VMUX_TELEVISION,
 282			.vmux   = 0,
 283			.gpio0  = 0x0035e700,
 284			.gpio1  = 0x00003004,
 285			.gpio2  = 0x0035e700,
 286			.gpio3  = 0x02000000,
 287		},{
 288
 289			.type   = CX88_VMUX_COMPOSITE1,
 290			.vmux   = 1,
 291			.gpio0  = 0x0035c700,
 292			.gpio1  = 0x00003004,
 293			.gpio2  = 0x0035c700,
 294			.gpio3  = 0x02000000,
 295		},{
 296			.type   = CX88_VMUX_SVIDEO,
 297			.vmux   = 2,
 298			.gpio0  = 0x0035c700,
 299			.gpio1  = 0x0035c700,
 300			.gpio2  = 0x02000000,
 301			.gpio3  = 0x02000000,
 302		}},
 303		.radio = {
 304			.type   = CX88_RADIO,
 305			.gpio0  = 0x0035d700,
 306			.gpio1  = 0x00007004,
 307			.gpio2  = 0x0035d700,
 308			.gpio3  = 0x02000000,
 309		},
 310	},
 311	[CX88_BOARD_LEADTEK_PVR2000] = {
 312		// gpio values for PAL version from regspy by DScaler
 313		.name           = "Leadtek PVR 2000",
 314		.tuner_type     = TUNER_PHILIPS_FM1216ME_MK3,
 315		.radio_type     = UNSET,
 316		.tuner_addr	= ADDR_UNSET,
 317		.radio_addr	= ADDR_UNSET,
 318		.tda9887_conf   = TDA9887_PRESENT,
 319		.input          = {{
 320			.type   = CX88_VMUX_TELEVISION,
 321			.vmux   = 0,
 322			.gpio0  = 0x0000bde2,
 323			.audioroute = 1,
 324		},{
 325			.type   = CX88_VMUX_COMPOSITE1,
 326			.vmux   = 1,
 327			.gpio0  = 0x0000bde6,
 328			.audioroute = 1,
 329		},{
 330			.type   = CX88_VMUX_SVIDEO,
 331			.vmux   = 2,
 332			.gpio0  = 0x0000bde6,
 333			.audioroute = 1,
 334		}},
 335		.radio = {
 336			.type   = CX88_RADIO,
 337			.gpio0  = 0x0000bd62,
 338			.audioroute = 1,
 339		},
 340		.mpeg           = CX88_MPEG_BLACKBIRD,
 341	},
 342	[CX88_BOARD_IODATA_GVVCP3PCI] = {
 343		.name		= "IODATA GV-VCP3/PCI",
 344		.tuner_type     = TUNER_ABSENT,
 345		.radio_type     = UNSET,
 346		.tuner_addr	= ADDR_UNSET,
 347		.radio_addr	= ADDR_UNSET,
 348		.input          = {{
 349			.type   = CX88_VMUX_COMPOSITE1,
 350			.vmux   = 0,
 351		},{
 352			.type   = CX88_VMUX_COMPOSITE2,
 353			.vmux   = 1,
 354		},{
 355			.type   = CX88_VMUX_SVIDEO,
 356			.vmux   = 2,
 357		}},
 358	},
 359	[CX88_BOARD_PROLINK_PLAYTVPVR] = {
 360		.name           = "Prolink PlayTV PVR",
 361		.tuner_type     = TUNER_PHILIPS_FM1236_MK3,
 362		.radio_type     = UNSET,
 363		.tuner_addr	= ADDR_UNSET,
 364		.radio_addr	= ADDR_UNSET,
 365		.tda9887_conf	= TDA9887_PRESENT,
 366		.input          = {{
 367			.type   = CX88_VMUX_TELEVISION,
 368			.vmux   = 0,
 369			.gpio0  = 0xbff0,
 370		},{
 371			.type   = CX88_VMUX_COMPOSITE1,
 372			.vmux   = 1,
 373			.gpio0  = 0xbff3,
 374		},{
 375			.type   = CX88_VMUX_SVIDEO,
 376			.vmux   = 2,
 377			.gpio0  = 0xbff3,
 378		}},
 379		.radio = {
 380			.type   = CX88_RADIO,
 381			.gpio0  = 0xbff0,
 382		},
 383	},
 384	[CX88_BOARD_ASUS_PVR_416] = {
 385		.name		= "ASUS PVR-416",
 386		.tuner_type     = TUNER_PHILIPS_FM1236_MK3,
 387		.radio_type     = UNSET,
 388		.tuner_addr	= ADDR_UNSET,
 389		.radio_addr	= ADDR_UNSET,
 390		.tda9887_conf   = TDA9887_PRESENT,
 391		.input          = {{
 392			.type   = CX88_VMUX_TELEVISION,
 393			.vmux   = 0,
 394			.gpio0  = 0x0000fde6,
 395		},{
 396			.type   = CX88_VMUX_SVIDEO,
 397			.vmux   = 2,
 398			.gpio0  = 0x0000fde6, // 0x0000fda6 L,R RCA audio in?
 399			.audioroute = 1,
 400		}},
 401		.radio = {
 402			.type   = CX88_RADIO,
 403			.gpio0  = 0x0000fde2,
 404		},
 405		.mpeg           = CX88_MPEG_BLACKBIRD,
 406	},
 407	[CX88_BOARD_MSI_TVANYWHERE] = {
 408		.name           = "MSI TV-@nywhere",
 409		.tuner_type     = TUNER_MT2032,
 410		.radio_type     = UNSET,
 411		.tuner_addr	= ADDR_UNSET,
 412		.radio_addr	= ADDR_UNSET,
 413		.tda9887_conf   = TDA9887_PRESENT,
 414		.input          = {{
 415			.type   = CX88_VMUX_TELEVISION,
 416			.vmux   = 0,
 417			.gpio0  = 0x00000fbf,
 418			.gpio2  = 0x0000fc08,
 419		},{
 420			.type   = CX88_VMUX_COMPOSITE1,
 421			.vmux   = 1,
 422			.gpio0  = 0x00000fbf,
 423			.gpio2  = 0x0000fc68,
 424		},{
 425			.type   = CX88_VMUX_SVIDEO,
 426			.vmux   = 2,
 427			.gpio0  = 0x00000fbf,
 428			.gpio2  = 0x0000fc68,
 429		}},
 430	},
 431	[CX88_BOARD_KWORLD_DVB_T] = {
 432		.name           = "KWorld/VStream XPert DVB-T",
 433		.tuner_type     = TUNER_ABSENT,
 434		.radio_type     = UNSET,
 435		.tuner_addr	= ADDR_UNSET,
 436		.radio_addr	= ADDR_UNSET,
 437		.input          = {{
 438			.type   = CX88_VMUX_COMPOSITE1,
 439			.vmux   = 1,
 440			.gpio0  = 0x0700,
 441			.gpio2  = 0x0101,
 442		},{
 443			.type   = CX88_VMUX_SVIDEO,
 444			.vmux   = 2,
 445			.gpio0  = 0x0700,
 446			.gpio2  = 0x0101,
 447		}},
 448		.mpeg           = CX88_MPEG_DVB,
 449	},
 450	[CX88_BOARD_DVICO_FUSIONHDTV_DVB_T1] = {
 451		.name           = "DViCO FusionHDTV DVB-T1",
 452		.tuner_type     = TUNER_ABSENT, /* No analog tuner */
 453		.radio_type     = UNSET,
 454		.tuner_addr	= ADDR_UNSET,
 455		.radio_addr	= ADDR_UNSET,
 456		.input          = {{
 457			.type   = CX88_VMUX_COMPOSITE1,
 458			.vmux   = 1,
 459			.gpio0  = 0x000027df,
 460		},{
 461			.type   = CX88_VMUX_SVIDEO,
 462			.vmux   = 2,
 463			.gpio0  = 0x000027df,
 464		}},
 465		.mpeg           = CX88_MPEG_DVB,
 466	},
 467	[CX88_BOARD_KWORLD_LTV883] = {
 468		.name           = "KWorld LTV883RF",
 469		.tuner_type     = TUNER_TNF_8831BGFF,
 470		.radio_type     = UNSET,
 471		.tuner_addr	= ADDR_UNSET,
 472		.radio_addr	= ADDR_UNSET,
 473		.input          = {{
 474			.type   = CX88_VMUX_TELEVISION,
 475			.vmux   = 0,
 476			.gpio0  = 0x07f8,
 477		},{
 478			.type   = CX88_VMUX_DEBUG,
 479			.vmux   = 0,
 480			.gpio0  = 0x07f9,  // mono from tuner chip
 481		},{
 482			.type   = CX88_VMUX_COMPOSITE1,
 483			.vmux   = 1,
 484			.gpio0  = 0x000007fa,
 485		},{
 486			.type   = CX88_VMUX_SVIDEO,
 487			.vmux   = 2,
 488			.gpio0  = 0x000007fa,
 489		}},
 490		.radio = {
 491			.type   = CX88_RADIO,
 492			.gpio0  = 0x000007f8,
 493		},
 494	},
 495	[CX88_BOARD_DVICO_FUSIONHDTV_3_GOLD_Q] = {
 496		.name		= "DViCO FusionHDTV 3 Gold-Q",
 497		.tuner_type     = TUNER_MICROTUNE_4042FI5,
 498		.radio_type     = UNSET,
 499		.tuner_addr	= ADDR_UNSET,
 500		.radio_addr	= ADDR_UNSET,
 501		/*
 502		   GPIO[0] resets DT3302 DTV receiver
 503		    0 - reset asserted
 504		    1 - normal operation
 505		   GPIO[1] mutes analog audio output connector
 506		    0 - enable selected source
 507		    1 - mute
 508		   GPIO[2] selects source for analog audio output connector
 509		    0 - analog audio input connector on tab
 510		    1 - analog DAC output from CX23881 chip
 511		   GPIO[3] selects RF input connector on tuner module
 512		    0 - RF connector labeled CABLE
 513		    1 - RF connector labeled ANT
 514		   GPIO[4] selects high RF for QAM256 mode
 515		    0 - normal RF
 516		    1 - high RF
 517		*/
 518		.input          = {{
 519			.type   = CX88_VMUX_TELEVISION,
 520			.vmux   = 0,
 521			.gpio0	= 0x0f0d,
 522		},{
 523			.type   = CX88_VMUX_CABLE,
 524			.vmux   = 0,
 525			.gpio0	= 0x0f05,
 526		},{
 527			.type   = CX88_VMUX_COMPOSITE1,
 528			.vmux   = 1,
 529			.gpio0	= 0x0f00,
 530		},{
 531			.type   = CX88_VMUX_SVIDEO,
 532			.vmux   = 2,
 533			.gpio0	= 0x0f00,
 534		}},
 535		.mpeg           = CX88_MPEG_DVB,
 536	},
 537	[CX88_BOARD_HAUPPAUGE_DVB_T1] = {
 538		.name           = "Hauppauge Nova-T DVB-T",
 539		.tuner_type     = TUNER_ABSENT,
 540		.radio_type     = UNSET,
 541		.tuner_addr	= ADDR_UNSET,
 542		.radio_addr	= ADDR_UNSET,
 543		.input          = {{
 544			.type   = CX88_VMUX_DVB,
 545			.vmux   = 0,
 546		}},
 547		.mpeg           = CX88_MPEG_DVB,
 548	},
 549	[CX88_BOARD_CONEXANT_DVB_T1] = {
 550		.name           = "Conexant DVB-T reference design",
 551		.tuner_type     = TUNER_ABSENT,
 552		.radio_type     = UNSET,
 553		.tuner_addr	= ADDR_UNSET,
 554		.radio_addr	= ADDR_UNSET,
 555		.input          = {{
 556			.type   = CX88_VMUX_DVB,
 557			.vmux   = 0,
 558		}},
 559		.mpeg           = CX88_MPEG_DVB,
 560	},
 561	[CX88_BOARD_PROVIDEO_PV259] = {
 562		.name		= "Provideo PV259",
 563		.tuner_type     = TUNER_PHILIPS_FQ1216ME,
 564		.radio_type     = UNSET,
 565		.tuner_addr	= ADDR_UNSET,
 566		.radio_addr	= ADDR_UNSET,
 567		.input          = {{
 568			.type   = CX88_VMUX_TELEVISION,
 569			.vmux   = 0,
 570			.audioroute = 1,
 571		}},
 572		.mpeg           = CX88_MPEG_BLACKBIRD,
 573	},
 574	[CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PLUS] = {
 575		.name           = "DViCO FusionHDTV DVB-T Plus",
 576		.tuner_type     = TUNER_ABSENT, /* No analog tuner */
 577		.radio_type     = UNSET,
 578		.tuner_addr	= ADDR_UNSET,
 579		.radio_addr	= ADDR_UNSET,
 580		.input          = {{
 581			.type   = CX88_VMUX_COMPOSITE1,
 582			.vmux   = 1,
 583			.gpio0  = 0x000027df,
 584		},{
 585			.type   = CX88_VMUX_SVIDEO,
 586			.vmux   = 2,
 587			.gpio0  = 0x000027df,
 588		}},
 589		.mpeg           = CX88_MPEG_DVB,
 590	},
 591	[CX88_BOARD_DNTV_LIVE_DVB_T] = {
 592		.name		= "digitalnow DNTV Live! DVB-T",
 593		.tuner_type     = TUNER_ABSENT,
 594		.radio_type     = UNSET,
 595		.tuner_addr	= ADDR_UNSET,
 596		.radio_addr	= ADDR_UNSET,
 597		.input		= {{
 598			.type   = CX88_VMUX_COMPOSITE1,
 599			.vmux   = 1,
 600			.gpio0  = 0x00000700,
 601			.gpio2  = 0x00000101,
 602		},{
 603			.type   = CX88_VMUX_SVIDEO,
 604			.vmux   = 2,
 605			.gpio0  = 0x00000700,
 606			.gpio2  = 0x00000101,
 607		}},
 608		.mpeg           = CX88_MPEG_DVB,
 609	},
 610	[CX88_BOARD_PCHDTV_HD3000] = {
 611		.name           = "pcHDTV HD3000 HDTV",
 612		.tuner_type     = TUNER_THOMSON_DTT761X,
 613		.radio_type     = UNSET,
 614		.tuner_addr	= ADDR_UNSET,
 615		.radio_addr	= ADDR_UNSET,
 616		.tda9887_conf   = TDA9887_PRESENT,
 617		/* GPIO[2] = audio source for analog audio out connector
 618		 *  0 = analog audio input connector
 619		 *  1 = CX88 audio DACs
 620		 *
 621		 * GPIO[7] = input to CX88's audio/chroma ADC
 622		 *  0 = FM 10.7 MHz IF
 623		 *  1 = Sound 4.5 MHz IF
 624		 *
 625		 * GPIO[1,5,6] = Oren 51132 pins 27,35,28 respectively
 626		 *
 627		 * GPIO[16] = Remote control input
 628		 */
 629		.input          = {{
 630			.type   = CX88_VMUX_TELEVISION,
 631			.vmux   = 0,
 632			.gpio0  = 0x00008484,
 633		},{
 634			.type   = CX88_VMUX_COMPOSITE1,
 635			.vmux   = 1,
 636			.gpio0  = 0x00008400,
 637		},{
 638			.type   = CX88_VMUX_SVIDEO,
 639			.vmux   = 2,
 640			.gpio0  = 0x00008400,
 641		}},
 642		.radio = {
 643			.type   = CX88_RADIO,
 644			.gpio0  = 0x00008404,
 645		},
 646		.mpeg           = CX88_MPEG_DVB,
 647	},
 648	[CX88_BOARD_HAUPPAUGE_ROSLYN] = {
 649		// entry added by Kaustubh D. Bhalerao <bhalerao.1@osu.edu>
 650		// GPIO values obtained from regspy, courtesy Sean Covel
 651		.name           = "Hauppauge WinTV 28xxx (Roslyn) models",
 652		.tuner_type     = UNSET,
 653		.radio_type     = UNSET,
 654		.tuner_addr	= ADDR_UNSET,
 655		.radio_addr	= ADDR_UNSET,
 656		.input          = {{
 657			.type   = CX88_VMUX_TELEVISION,
 658			.vmux   = 0,
 659			.gpio0  = 0xed1a,
 660			.gpio2  = 0x00ff,
 661		},{
 662			.type   = CX88_VMUX_DEBUG,
 663			.vmux   = 0,
 664			.gpio0  = 0xff01,
 665		},{
 666			.type   = CX88_VMUX_COMPOSITE1,
 667			.vmux   = 1,
 668			.gpio0  = 0xff02,
 669		},{
 670			.type   = CX88_VMUX_SVIDEO,
 671			.vmux   = 2,
 672			.gpio0  = 0xed92,
 673			.gpio2  = 0x00ff,
 674		}},
 675		.radio = {
 676			 .type   = CX88_RADIO,
 677			 .gpio0  = 0xed96,
 678			 .gpio2  = 0x00ff,
 679		 },
 680		.mpeg           = CX88_MPEG_BLACKBIRD,
 681	},
 682	[CX88_BOARD_DIGITALLOGIC_MEC] = {
 683		.name           = "Digital-Logic MICROSPACE Entertainment Center (MEC)",
 684		.tuner_type     = TUNER_PHILIPS_FM1216ME_MK3,
 685		.radio_type     = UNSET,
 686		.tuner_addr	= ADDR_UNSET,
 687		.radio_addr	= ADDR_UNSET,
 688		.tda9887_conf   = TDA9887_PRESENT,
 689		.input          = {{
 690			.type   = CX88_VMUX_TELEVISION,
 691			.vmux   = 0,
 692			.gpio0  = 0x00009d80,
 693			.audioroute = 1,
 694		},{
 695			.type   = CX88_VMUX_COMPOSITE1,
 696			.vmux   = 1,
 697			.gpio0  = 0x00009d76,
 698			.audioroute = 1,
 699		},{
 700			.type   = CX88_VMUX_SVIDEO,
 701			.vmux   = 2,
 702			.gpio0  = 0x00009d76,
 703			.audioroute = 1,
 704		}},
 705		.radio = {
 706			.type   = CX88_RADIO,
 707			.gpio0  = 0x00009d00,
 708			.audioroute = 1,
 709		},
 710		.mpeg           = CX88_MPEG_BLACKBIRD,
 711	},
 712	[CX88_BOARD_IODATA_GVBCTV7E] = {
 713		.name           = "IODATA GV/BCTV7E",
 714		.tuner_type     = TUNER_PHILIPS_FQ1286,
 715		.radio_type     = UNSET,
 716		.tuner_addr	= ADDR_UNSET,
 717		.radio_addr	= ADDR_UNSET,
 718		.tda9887_conf   = TDA9887_PRESENT,
 719		.input          = {{
 720			.type   = CX88_VMUX_TELEVISION,
 721			.vmux   = 1,
 722			.gpio1  = 0x0000e03f,
 723		},{
 724			.type   = CX88_VMUX_COMPOSITE1,
 725			.vmux   = 2,
 726			.gpio1  = 0x0000e07f,
 727		},{
 728			.type   = CX88_VMUX_SVIDEO,
 729			.vmux   = 3,
 730			.gpio1  = 0x0000e07f,
 731		}}
 732	},
 733	[CX88_BOARD_PIXELVIEW_PLAYTV_ULTRA_PRO] = {
 734		.name           = "PixelView PlayTV Ultra Pro (Stereo)",
 735		/* May be also TUNER_YMEC_TVF_5533MF for NTSC/M or PAL/M */
 736		.tuner_type     = TUNER_PHILIPS_FM1216ME_MK3,
 737		.radio_type     = UNSET,
 738		.tuner_addr	= ADDR_UNSET,
 739		.radio_addr	= ADDR_UNSET,
 740		/* Some variants use a tda9874 and so need the tvaudio module. */
 741		.audio_chip     = V4L2_IDENT_TVAUDIO,
 742		.input          = {{
 743			.type   = CX88_VMUX_TELEVISION,
 744			.vmux   = 0,
 745			.gpio0  = 0xbf61,  /* internal decoder */
 746		},{
 747			.type   = CX88_VMUX_COMPOSITE1,
 748			.vmux   = 1,
 749			.gpio0	= 0xbf63,
 750		},{
 751			.type   = CX88_VMUX_SVIDEO,
 752			.vmux   = 2,
 753			.gpio0	= 0xbf63,
 754		}},
 755		.radio = {
 756			 .type  = CX88_RADIO,
 757			 .gpio0 = 0xbf60,
 758		 },
 759	},
 760	[CX88_BOARD_DVICO_FUSIONHDTV_3_GOLD_T] = {
 761		.name           = "DViCO FusionHDTV 3 Gold-T",
 762		.tuner_type     = TUNER_THOMSON_DTT761X,
 763		.radio_type     = UNSET,
 764		.tuner_addr	= ADDR_UNSET,
 765		.radio_addr	= ADDR_UNSET,
 766		.tda9887_conf   = TDA9887_PRESENT,
 767		.input          = {{
 768			.type   = CX88_VMUX_TELEVISION,
 769			.vmux   = 0,
 770			.gpio0  = 0x97ed,
 771		},{
 772			.type   = CX88_VMUX_COMPOSITE1,
 773			.vmux   = 1,
 774			.gpio0  = 0x97e9,
 775		},{
 776			.type   = CX88_VMUX_SVIDEO,
 777			.vmux   = 2,
 778			.gpio0  = 0x97e9,
 779		}},
 780		.mpeg           = CX88_MPEG_DVB,
 781	},
 782	[CX88_BOARD_ADSTECH_DVB_T_PCI] = {
 783		.name           = "ADS Tech Instant TV DVB-T PCI",
 784		.tuner_type     = TUNER_ABSENT,
 785		.radio_type     = UNSET,
 786		.tuner_addr	= ADDR_UNSET,
 787		.radio_addr	= ADDR_UNSET,
 788		.input          = {{
 789			.type   = CX88_VMUX_COMPOSITE1,
 790			.vmux   = 1,
 791			.gpio0  = 0x0700,
 792			.gpio2  = 0x0101,
 793		},{
 794			.type   = CX88_VMUX_SVIDEO,
 795			.vmux   = 2,
 796			.gpio0  = 0x0700,
 797			.gpio2  = 0x0101,
 798		}},
 799		.mpeg           = CX88_MPEG_DVB,
 800	},
 801	[CX88_BOARD_TERRATEC_CINERGY_1400_DVB_T1] = {
 802		.name           = "TerraTec Cinergy 1400 DVB-T",
 803		.tuner_type     = TUNER_ABSENT,
 804		.input          = {{
 805			.type   = CX88_VMUX_DVB,
 806			.vmux   = 0,
 807		},{
 808			.type   = CX88_VMUX_COMPOSITE1,
 809			.vmux   = 2,
 810		},{
 811			.type   = CX88_VMUX_SVIDEO,
 812			.vmux   = 2,
 813		}},
 814		.mpeg           = CX88_MPEG_DVB,
 815	},
 816	[CX88_BOARD_DVICO_FUSIONHDTV_5_GOLD] = {
 817		.name           = "DViCO FusionHDTV 5 Gold",
 818		.tuner_type     = TUNER_LG_TDVS_H06XF, /* TDVS-H062F */
 819		.radio_type     = UNSET,
 820		.tuner_addr	= ADDR_UNSET,
 821		.radio_addr	= ADDR_UNSET,
 822		.tda9887_conf   = TDA9887_PRESENT,
 823		.input          = {{
 824			.type   = CX88_VMUX_TELEVISION,
 825			.vmux   = 0,
 826			.gpio0  = 0x87fd,
 827		},{
 828			.type   = CX88_VMUX_COMPOSITE1,
 829			.vmux   = 1,
 830			.gpio0  = 0x87f9,
 831		},{
 832			.type   = CX88_VMUX_SVIDEO,
 833			.vmux   = 2,
 834			.gpio0  = 0x87f9,
 835		}},
 836		.mpeg           = CX88_MPEG_DVB,
 837	},
 838	[CX88_BOARD_AVERMEDIA_ULTRATV_MC_550] = {
 839		.name           = "AverMedia UltraTV Media Center PCI 550",
 840		.tuner_type     = TUNER_PHILIPS_FM1236_MK3,
 841		.radio_type     = UNSET,
 842		.tuner_addr     = ADDR_UNSET,
 843		.radio_addr     = ADDR_UNSET,
 844		.tda9887_conf   = TDA9887_PRESENT,
 845		.input          = {{
 846			.type   = CX88_VMUX_COMPOSITE1,
 847			.vmux   = 0,
 848			.gpio0  = 0x0000cd73,
 849			.audioroute = 1,
 850		},{
 851			.type   = CX88_VMUX_SVIDEO,
 852			.vmux   = 1,
 853			.gpio0  = 0x0000cd73,
 854			.audioroute = 1,
 855		},{
 856			.type   = CX88_VMUX_TELEVISION,
 857			.vmux   = 3,
 858			.gpio0  = 0x0000cdb3,
 859			.audioroute = 1,
 860		}},
 861		.radio = {
 862			.type   = CX88_RADIO,
 863			.vmux   = 2,
 864			.gpio0  = 0x0000cdf3,
 865			.audioroute = 1,
 866		},
 867		.mpeg           = CX88_MPEG_BLACKBIRD,
 868	},
 869	[CX88_BOARD_KWORLD_VSTREAM_EXPERT_DVD] = {
 870		 /* Alexander Wold <awold@bigfoot.com> */
 871		 .name           = "Kworld V-Stream Xpert DVD",
 872		 .tuner_type     = UNSET,
 873		 .input          = {{
 874			 .type   = CX88_VMUX_COMPOSITE1,
 875			 .vmux   = 1,
 876			 .gpio0  = 0x03000000,
 877			 .gpio1  = 0x01000000,
 878			 .gpio2  = 0x02000000,
 879			 .gpio3  = 0x00100000,
 880		 },{
 881			 .type   = CX88_VMUX_SVIDEO,
 882			 .vmux   = 2,
 883			 .gpio0  = 0x03000000,
 884			 .gpio1  = 0x01000000,
 885			 .gpio2  = 0x02000000,
 886			 .gpio3  = 0x00100000,
 887		 }},
 888	},
 889	[CX88_BOARD_ATI_HDTVWONDER] = {
 890		.name           = "ATI HDTV Wonder",
 891		.tuner_type     = TUNER_PHILIPS_TUV1236D,
 892		.radio_type     = UNSET,
 893		.tuner_addr	= ADDR_UNSET,
 894		.radio_addr	= ADDR_UNSET,
 895		.input          = {{
 896			.type   = CX88_VMUX_TELEVISION,
 897			.vmux   = 0,
 898			.gpio0  = 0x00000ff7,
 899			.gpio1  = 0x000000ff,
 900			.gpio2  = 0x00000001,
 901			.gpio3  = 0x00000000,
 902		},{
 903			.type   = CX88_VMUX_COMPOSITE1,
 904			.vmux   = 1,
 905			.gpio0  = 0x00000ffe,
 906			.gpio1  = 0x000000ff,
 907			.gpio2  = 0x00000001,
 908			.gpio3  = 0x00000000,
 909		},{
 910			.type   = CX88_VMUX_SVIDEO,
 911			.vmux   = 2,
 912			.gpio0  = 0x00000ffe,
 913			.gpio1  = 0x000000ff,
 914			.gpio2  = 0x00000001,
 915			.gpio3  = 0x00000000,
 916		}},
 917		.mpeg           = CX88_MPEG_DVB,
 918	},
 919	[CX88_BOARD_WINFAST_DTV1000] = {
 920		.name           = "WinFast DTV1000-T",
 921		.tuner_type     = TUNER_ABSENT,
 922		.radio_type     = UNSET,
 923		.tuner_addr	= ADDR_UNSET,
 924		.radio_addr	= ADDR_UNSET,
 925		.input          = {{
 926			.type   = CX88_VMUX_DVB,
 927			.vmux   = 0,
 928		},{
 929			.type   = CX88_VMUX_COMPOSITE1,
 930			.vmux   = 1,
 931		},{
 932			.type   = CX88_VMUX_SVIDEO,
 933			.vmux   = 2,
 934		}},
 935		.mpeg           = CX88_MPEG_DVB,
 936	},
 937	[CX88_BOARD_AVERTV_303] = {
 938		.name           = "AVerTV 303 (M126)",
 939		.tuner_type     = TUNER_PHILIPS_FM1216ME_MK3,
 940		.radio_type     = UNSET,
 941		.tuner_addr	= ADDR_UNSET,
 942		.radio_addr	= ADDR_UNSET,
 943		.tda9887_conf   = TDA9887_PRESENT,
 944		.input          = {{
 945			.type   = CX88_VMUX_TELEVISION,
 946			.vmux   = 0,
 947			.gpio0  = 0x00ff,
 948			.gpio1  = 0xe09f,
 949			.gpio2  = 0x0010,
 950			.gpio3  = 0x0000,
 951		},{
 952			.type   = CX88_VMUX_COMPOSITE1,
 953			.vmux   = 1,
 954			.gpio0  = 0x00ff,
 955			.gpio1  = 0xe05f,
 956			.gpio2  = 0x0010,
 957			.gpio3  = 0x0000,
 958		},{
 959			.type   = CX88_VMUX_SVIDEO,
 960			.vmux   = 2,
 961			.gpio0  = 0x00ff,
 962			.gpio1  = 0xe05f,
 963			.gpio2  = 0x0010,
 964			.gpio3  = 0x0000,
 965		}},
 966	},
 967	[CX88_BOARD_HAUPPAUGE_NOVASPLUS_S1] = {
 968		.name		= "Hauppauge Nova-S-Plus DVB-S",
 969		.tuner_type	= TUNER_ABSENT,
 970		.radio_type	= UNSET,
 971		.tuner_addr	= ADDR_UNSET,
 972		.radio_addr	= ADDR_UNSET,
 973		.audio_chip	= V4L2_IDENT_WM8775,
 974		.i2sinputcntl   = 2,
 975		.input		= {{
 976			.type	= CX88_VMUX_DVB,
 977			.vmux	= 0,
 978			/* 2: Line-In */
 979			.audioroute = 2,
 980		},{
 981			.type	= CX88_VMUX_COMPOSITE1,
 982			.vmux	= 1,
 983			/* 2: Line-In */
 984			.audioroute = 2,
 985		},{
 986			.type	= CX88_VMUX_SVIDEO,
 987			.vmux	= 2,
 988			/* 2: Line-In */
 989			.audioroute = 2,
 990		}},
 991		.mpeg           = CX88_MPEG_DVB,
 992	},
 993	[CX88_BOARD_HAUPPAUGE_NOVASE2_S1] = {
 994		.name		= "Hauppauge Nova-SE2 DVB-S",
 995		.tuner_type	= TUNER_ABSENT,
 996		.radio_type	= UNSET,
 997		.tuner_addr	= ADDR_UNSET,
 998		.radio_addr	= ADDR_UNSET,
 999		.input		= {{
1000			.type	= CX88_VMUX_DVB,
1001			.vmux	= 0,
1002		}},
1003		.mpeg           = CX88_MPEG_DVB,
1004	},
1005	[CX88_BOARD_KWORLD_DVBS_100] = {
1006		.name		= "KWorld DVB-S 100",
1007		.tuner_type	= TUNER_ABSENT,
1008		.radio_type	= UNSET,
1009		.tuner_addr	= ADDR_UNSET,
1010		.radio_addr	= ADDR_UNSET,
1011		.audio_chip = V4L2_IDENT_WM8775,
1012		.input		= {{
1013			.type	= CX88_VMUX_DVB,
1014			.vmux	= 0,
1015			/* 2: Line-In */
1016			.audioroute = 2,
1017		},{
1018			.type	= CX88_VMUX_COMPOSITE1,
1019			.vmux	= 1,
1020			/* 2: Line-In */
1021			.audioroute = 2,
1022		},{
1023			.type	= CX88_VMUX_SVIDEO,
1024			.vmux	= 2,
1025			/* 2: Line-In */
1026			.audioroute = 2,
1027		}},
1028		.mpeg           = CX88_MPEG_DVB,
1029	},
1030	[CX88_BOARD_HAUPPAUGE_HVR1100] = {
1031		.name		= "Hauppauge WinTV-HVR1100 DVB-T/Hybrid",
1032		.tuner_type     = TUNER_PHILIPS_FMD1216ME_MK3,
1033		.radio_type	= UNSET,
1034		.tuner_addr	= ADDR_UNSET,
1035		.radio_addr	= ADDR_UNSET,
1036		.tda9887_conf   = TDA9887_PRESENT,
1037		.input		= {{
1038			.type   = CX88_VMUX_TELEVISION,
1039			.vmux   = 0,
1040		},{
1041			.type	= CX88_VMUX_COMPOSITE1,
1042			.vmux	= 1,
1043		},{
1044			.type	= CX88_VMUX_SVIDEO,
1045			.vmux	= 2,
1046		}},
1047		/* fixme: Add radio support */
1048		.mpeg           = CX88_MPEG_DVB,
1049	},
1050	[CX88_BOARD_HAUPPAUGE_HVR1100LP] = {
1051		.name		= "Hauppauge WinTV-HVR1100 DVB-T/Hybrid (Low Profile)",
1052		.tuner_type     = TUNER_PHILIPS_FMD1216ME_MK3,
1053		.radio_type	= UNSET,
1054		.tuner_addr	= ADDR_UNSET,
1055		.radio_addr	= ADDR_UNSET,
1056		.tda9887_conf   = TDA9887_PRESENT,
1057		.input		= {{
1058			.type   = CX88_VMUX_TELEVISION,
1059			.vmux   = 0,
1060		},{
1061			.type	= CX88_VMUX_COMPOSITE1,
1062			.vmux	= 1,
1063		}},
1064		/* fixme: Add radio support */
1065		.mpeg           = CX88_MPEG_DVB,
1066	},
1067	[CX88_BOARD_DNTV_LIVE_DVB_T_PRO] = {
1068		.name           = "digitalnow DNTV Live! DVB-T Pro",
1069		.tuner_type     = TUNER_PHILIPS_FMD1216ME_MK3,
1070		.radio_type     = UNSET,
1071		.tuner_addr	= ADDR_UNSET,
1072		.radio_addr	= ADDR_UNSET,
1073		.tda9887_conf   = TDA9887_PRESENT | TDA9887_PORT1_ACTIVE |
1074				  TDA9887_PORT2_ACTIVE,
1075		.input          = {{
1076			.type   = CX88_VMUX_TELEVISION,
1077			.vmux   = 0,
1078			.gpio0  = 0xf80808,
1079		},{
1080			.type   = CX88_VMUX_COMPOSITE1,
1081			.vmux   = 1,
1082			.gpio0	= 0xf80808,
1083		},{
1084			.type   = CX88_VMUX_SVIDEO,
1085			.vmux   = 2,
1086			.gpio0	= 0xf80808,
1087		}},
1088		.radio = {
1089			 .type  = CX88_RADIO,
1090			 .gpio0 = 0xf80808,
1091		},
1092		.mpeg           = CX88_MPEG_DVB,
1093	},
1094	[CX88_BOARD_KWORLD_DVB_T_CX22702] = {
1095		/* Kworld V-stream Xpert DVB-T with Thomson tuner */
1096		/* DTT 7579 Conexant CX22702-19 Conexant CX2388x  */
1097		/* Manenti Marco <marco_manenti@colman.it> */
1098		.name           = "KWorld/VStream XPert DVB-T with cx22702",
1099		.tuner_type     = TUNER_ABSENT,
1100		.radio_type     = UNSET,
1101		.tuner_addr	= ADDR_UNSET,
1102		.radio_addr	= ADDR_UNSET,
1103		.input          = {{
1104			.type   = CX88_VMUX_COMPOSITE1,
1105			.vmux   = 1,
1106			.gpio0  = 0x0700,
1107			.gpio2  = 0x0101,
1108		},{
1109			.type   = CX88_VMUX_SVIDEO,
1110			.vmux   = 2,
1111			.gpio0  = 0x0700,
1112			.gpio2  = 0x0101,
1113		}},
1114		.mpeg           = CX88_MPEG_DVB,
1115	},
1116	[CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_DUAL] = {
1117		.name           = "DViCO FusionHDTV DVB-T Dual Digital",
1118		.tuner_type     = TUNER_ABSENT, /* No analog tuner */
1119		.radio_type     = UNSET,
1120		.tuner_addr	= ADDR_UNSET,
1121		.radio_addr	= ADDR_UNSET,
1122		.input          = {{
1123			.type   = CX88_VMUX_COMPOSITE1,
1124			.vmux   = 1,
1125			.gpio0  = 0x000067df,
1126		 },{
1127			.type   = CX88_VMUX_SVIDEO,
1128			.vmux   = 2,
1129			.gpio0  = 0x000067df,
1130		}},
1131		.mpeg           = CX88_MPEG_DVB,
1132	},
1133	[CX88_BOARD_KWORLD_HARDWARE_MPEG_TV_XPERT] = {
1134		.name           = "KWorld HardwareMpegTV XPert",
1135		.tuner_type     = TUNER_PHILIPS_TDA8290,
1136		.radio_type     = UNSET,
1137		.tuner_addr	= ADDR_UNSET,
1138		.radio_addr	= ADDR_UNSET,
1139		.input          = {{
1140			.type   = CX88_VMUX_TELEVISION,
1141			.vmux   = 0,
1142			.gpio0  = 0x3de2,
1143			.gpio2  = 0x00ff,
1144		},{
1145			.type   = CX88_VMUX_COMPOSITE1,
1146			.vmux   = 1,
1147			.gpio0  = 0x3de6,
1148			.audioroute = 1,
1149		},{
1150			.type   = CX88_VMUX_SVIDEO,
1151			.vmux   = 2,
1152			.gpio0  = 0x3de6,
1153			.audioroute = 1,
1154		}},
1155		.radio = {
1156			.type   = CX88_RADIO,
1157			.gpio0  = 0x3de6,
1158			.gpio2  = 0x00ff,
1159		},
1160		.mpeg           = CX88_MPEG_BLACKBIRD,
1161	},
1162	[CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_HYBRID] = {
1163		.name           = "DViCO FusionHDTV DVB-T Hybrid",
1164		.tuner_type     = TUNER_THOMSON_FE6600,
1165		.radio_type     = UNSET,
1166		.tuner_addr	= ADDR_UNSET,
1167		.radio_addr	= ADDR_UNSET,
1168		.input          = {{
1169			.type   = CX88_VMUX_TELEVISION,
1170			.vmux   = 0,
1171			.gpio0  = 0x0000a75f,
1172		},{
1173			.type   = CX88_VMUX_COMPOSITE1,
1174			.vmux   = 1,
1175			.gpio0  = 0x0000a75b,
1176		},{
1177			.type   = CX88_VMUX_SVIDEO,
1178			.vmux   = 2,
1179			.gpio0  = 0x0000a75b,
1180		}},
1181		.mpeg           = CX88_MPEG_DVB,
1182	},
1183	[CX88_BOARD_PCHDTV_HD5500] = {
1184		.name           = "pcHDTV HD5500 HDTV",
1185		.tuner_type     = TUNER_LG_TDVS_H06XF, /* TDVS-H064F */
1186		.radio_type     = UNSET,
1187		.tuner_addr	= ADDR_UNSET,
1188		.radio_addr	= ADDR_UNSET,
1189		.tda9887_conf   = TDA9887_PRESENT,
1190		.input          = {{
1191			.type   = CX88_VMUX_TELEVISION,
1192			.vmux   = 0,
1193			.gpio0  = 0x87fd,
1194		},{
1195			.type   = CX88_VMUX_COMPOSITE1,
1196			.vmux   = 1,
1197			.gpio0  = 0x87f9,
1198		},{
1199			.type   = CX88_VMUX_SVIDEO,
1200			.vmux   = 2,
1201			.gpio0  = 0x87f9,
1202		}},
1203		.mpeg           = CX88_MPEG_DVB,
1204	},
1205	[CX88_BOARD_KWORLD_MCE200_DELUXE] = {
1206		/* FIXME: tested TV input only, disabled composite,
1207		   svideo and radio until they can be tested also. */
1208		.name           = "Kworld MCE 200 Deluxe",
1209		.tuner_type     = TUNER_TENA_9533_DI,
1210		.radio_type     = UNSET,
1211		.tda9887_conf   = TDA9887_PRESENT,
1212		.tuner_addr     = ADDR_UNSET,
1213		.radio_addr     = ADDR_UNSET,
1214		.input          = {{
1215			.type   = CX88_VMUX_TELEVISION,
1216			.vmux   = 0,
1217			.gpio0  = 0x0000BDE6
1218		}},
1219		.mpeg           = CX88_MPEG_BLACKBIRD,
1220	},
1221	[CX88_BOARD_PIXELVIEW_PLAYTV_P7000] = {
1222		/* FIXME: SVideo, Composite and FM inputs are untested */
1223		.name           = "PixelView PlayTV P7000",
1224		.tuner_type     = TUNER_PHILIPS_FM1216ME_MK3,
1225		.radio_type     = UNSET,
1226		.tuner_addr	= ADDR_UNSET,
1227		.radio_addr	= ADDR_UNSET,
1228		.tda9887_conf   = TDA9887_PRESENT | TDA9887_PORT1_ACTIVE |
1229				  TDA9887_PORT2_ACTIVE,
1230		.input          = {{
1231			.type   = CX88_VMUX_TELEVISION,
1232			.vmux   = 0,
1233			.gpio0  = 0x5da6,
1234		}},
1235		.mpeg           = CX88_MPEG_BLACKBIRD,
1236	},
1237	[CX88_BOARD_NPGTECH_REALTV_TOP10FM] = {
1238		.name           = "NPG Tech Real TV FM Top 10",
1239		.tuner_type     = TUNER_TNF_5335MF, /* Actually a TNF9535 */
1240		.radio_type     = UNSET,
1241		.tuner_addr	= ADDR_UNSET,
1242		.radio_addr	= ADDR_UNSET,
1243		.input          = {{
1244			.type   = CX88_VMUX_TELEVISION,
1245			.vmux   = 0,
1246			.gpio0	= 0x0788,
1247		},{
1248			.type   = CX88_VMUX_COMPOSITE1,
1249			.vmux   = 1,
1250			.gpio0	= 0x078b,
1251		},{
1252			.type   = CX88_VMUX_SVIDEO,
1253			.vmux   = 2,
1254			.gpio0	= 0x078b,
1255		}},
1256		.radio = {
1257			 .type  = CX88_RADIO,
1258			 .gpio0 = 0x074a,
1259		},
1260	},
1261	[CX88_BOARD_WINFAST_DTV2000H] = {
1262		.name           = "WinFast DTV2000 H",
1263		.tuner_type     = TUNER_PHILIPS_FMD1216ME_MK3,
1264		.radio_type     = UNSET,
1265		.tuner_addr     = ADDR_UNSET,
1266		.radio_addr     = ADDR_UNSET,
1267		.tda9887_conf   = TDA9887_PRESENT,
1268		.input          = {{
1269			.type   = CX88_VMUX_TELEVISION,
1270			.vmux   = 0,
1271			.gpio0  = 0x00017304,
1272			.gpio1  = 0x00008203,
1273			.gpio2  = 0x00017304,
1274			.gpio3  = 0x02000000,
1275		}, {
1276			.type   = CX88_VMUX_COMPOSITE1,
1277			.vmux   = 1,
1278			.gpio0  = 0x0001d701,
1279			.gpio1  = 0x0000b207,
1280			.gpio2  = 0x0001d701,
1281			.gpio3  = 0x02000000,
1282		}, {
1283			.type   = CX88_VMUX_COMPOSITE2,
1284			.vmux   = 2,
1285			.gpio0  = 0x0001d503,
1286			.gpio1  = 0x0000b207,
1287			.gpio2  = 0x0001d503,
1288			.gpio3  = 0x02000000,
1289		}, {
1290			.type   = CX88_VMUX_SVIDEO,
1291			.vmux   = 3,
1292			.gpio0  = 0x0001d701,
1293			.gpio1  = 0x0000b207,
1294			.gpio2  = 0x0001d701,
1295			.gpio3  = 0x02000000,
1296		}},
1297		.radio = {
1298			 .type  = CX88_RADIO,
1299			 .gpio0 = 0x00015702,
1300			 .gpio1 = 0x0000f207,
1301			 .gpio2 = 0x00015702,
1302			 .gpio3 = 0x02000000,
1303		},
1304		.mpeg           = CX88_MPEG_DVB,
1305	},
1306	[CX88_BOARD_WINFAST_DTV2000H_J] = {
1307		.name           = "WinFast DTV2000 H rev. J",
1308		.tuner_type     = TUNER_PHILIPS_FMD1216ME_MK3,
1309		.radio_type     = UNSET,
1310		.tuner_addr     = ADDR_UNSET,
1311		.radio_addr     = ADDR_UNSET,
1312		.tda9887_conf   = TDA9887_PRESENT,
1313		.input          = {{
1314			.type   = CX88_VMUX_TELEVISION,
1315			.vmux   = 0,
1316			.gpio0  = 0x00017300,
1317			.gpio1  = 0x00008207,
1318			.gpio2	= 0x00000000,
1319			.gpio3  = 0x02000000,
1320		},{
1321			.type   = CX88_VMUX_TELEVISION,
1322			.vmux   = 0,
1323			.gpio0  = 0x00018300,
1324			.gpio1  = 0x0000f207,
1325			.gpio2	= 0x00017304,
1326			.gpio3  = 0x02000000,
1327		},{
1328			.type   = CX88_VMUX_COMPOSITE1,
1329			.vmux   = 1,
1330			.gpio0  = 0x00018301,
1331			.gpio1  = 0x0000f207,
1332			.gpio2	= 0x00017304,
1333			.gpio3  = 0x02000000,
1334		},{
1335			.type   = CX88_VMUX_SVIDEO,
1336			.vmux   = 2,
1337			.gpio0  = 0x00018301,
1338			.gpio1  = 0x0000f207,
1339			.gpio2	= 0x00017304,
1340			.gpio3  = 0x02000000,
1341		}},
1342		.radio = {
1343			 .type  = CX88_RADIO,
1344			 .gpio0 = 0x00015702,
1345			 .gpio1 = 0x0000f207,
1346			 .gpio2 = 0x00015702,
1347			 .gpio3 = 0x02000000,
1348		},
1349		.mpeg           = CX88_MPEG_DVB,
1350	},
1351	[CX88_BOARD_GENIATECH_DVBS] = {
1352		.name          = "Geniatech DVB-S",
1353		.tuner_type    = TUNER_ABSENT,
1354		.radio_type    = UNSET,
1355		.tuner_addr    = ADDR_UNSET,
1356		.radio_addr    = ADDR_UNSET,
1357		.input  = {{
1358			.type  = CX88_VMUX_DVB,
1359			.vmux  = 0,
1360		},{
1361			.type  = CX88_VMUX_COMPOSITE1,
1362			.vmux  = 1,
1363		}},
1364		.mpeg           = CX88_MPEG_DVB,
1365	},
1366	[CX88_BOARD_HAUPPAUGE_HVR3000] = {
1367		.name           = "Hauppauge WinTV-HVR3000 TriMode Analog/DVB-S/DVB-T",
1368		.tuner_type     = TUNER_PHILIPS_FMD1216ME_MK3,
1369		.radio_type     = UNSET,
1370		.tuner_addr     = ADDR_UNSET,
1371		.radio_addr     = ADDR_UNSET,
1372		.tda9887_conf   = TDA9887_PRESENT,
1373		.audio_chip     = V4L2_IDENT_WM8775,
1374		.input          = {{
1375			.type   = CX88_VMUX_TELEVISION,
1376			.vmux   = 0,
1377			.gpio0  = 0x84bf,
1378			/* 1: TV Audio / FM Mono */
1379			.audioroute = 1,
1380		},{
1381			.type   = CX88_VMUX_COMPOSITE1,
1382			.vmux   = 1,
1383			.gpio0  = 0x84bf,
1384			/* 2: Line-In */
1385			.audioroute = 2,
1386		},{
1387			.type   = CX88_VMUX_SVIDEO,
1388			.vmux   = 2,
1389			.gpio0  = 0x84bf,
1390			/* 2: Line-In */
1391			.audioroute = 2,
1392		}},
1393		.radio = {
1394			.type   = CX88_RADIO,
1395			.gpio0	= 0x84bf,
1396			/* 4: FM Stereo (untested) */
1397			.audioroute = 8,
1398		},
1399		.mpeg           = CX88_MPEG_DVB,
1400		.num_frontends	= 2,
1401	},
1402	[CX88_BOARD_NORWOOD_MICRO] = {
1403		.name           = "Norwood Micro TV Tuner",
1404		.tuner_type     = TUNER_TNF_5335MF,
1405		.radio_type     = UNSET,
1406		.tuner_addr     = ADDR_UNSET,
1407		.radio_addr     = ADDR_UNSET,
1408		.input          = {{
1409			.type   = CX88_VMUX_TELEVISION,
1410			.vmux   = 0,
1411			.gpio0  = 0x0709,
1412		},{
1413			.type   = CX88_VMUX_COMPOSITE1,
1414			.vmux   = 1,
1415			.gpio0  = 0x070b,
1416		},{
1417			.type   = CX88_VMUX_SVIDEO,
1418			.vmux   = 2,
1419			.gpio0  = 0x070b,
1420		}},
1421	},
1422	[CX88_BOARD_TE_DTV_250_OEM_SWANN] = {
1423		.name           = "Shenzhen Tungsten Ages Tech TE-DTV-250 / Swann OEM",
1424		.tuner_type     = TUNER_LG_PAL_NEW_TAPC,
1425		.radio_type     = UNSET,
1426		.tuner_addr     = ADDR_UNSET,
1427		.radio_addr     = ADDR_UNSET,
1428		.input          = {{
1429			.type   = CX88_VMUX_TELEVISION,
1430			.vmux   = 0,
1431			.gpio0  = 0x003fffff,
1432			.gpio1  = 0x00e00000,
1433			.gpio2  = 0x003fffff,
1434			.gpio3  = 0x02000000,
1435		},{
1436			.type   = CX88_VMUX_COMPOSITE1,
1437			.vmux   = 1,
1438			.gpio0  = 0x003fffff,
1439			.gpio1  = 0x00e00000,
1440			.gpio2  = 0x003fffff,
1441			.gpio3  = 0x02000000,
1442		},{
1443			.type   = CX88_VMUX_SVIDEO,
1444			.vmux   = 2,
1445			.gpio0  = 0x003fffff,
1446			.gpio1  = 0x00e00000,
1447			.gpio2  = 0x003fffff,
1448			.gpio3  = 0x02000000,
1449		}},
1450	},
1451	[CX88_BOARD_HAUPPAUGE_HVR1300] = {
1452		.name		= "Hauppauge WinTV-HVR1300 DVB-T/Hybrid MPEG Encoder",
1453		.tuner_type     = TUNER_PHILIPS_FMD1216ME_MK3,
1454		.radio_type	= UNSET,
1455		.tuner_addr	= ADDR_UNSET,
1456		.radio_addr	= ADDR_UNSET,
1457		.tda9887_conf   = TDA9887_PRESENT,
1458		.audio_chip     = V4L2_IDENT_WM8775,
1459		/*
1460		 * gpio0 as reported by Mike Crash <mike AT mikecrash.com>
1461		 */
1462		.input		= {{
1463			.type   = CX88_VMUX_TELEVISION,
1464			.vmux   = 0,
1465			.gpio0	= 0xef88,
1466			/* 1: TV Audio / FM Mono */
1467			.audioroute = 1,
1468		},{
1469			.type	= CX88_VMUX_COMPOSITE1,
1470			.vmux	= 1,
1471			.gpio0	= 0xef88,
1472			/* 2: Line-In */
1473			.audioroute = 2,
1474		},{
1475			.type	= CX88_VMUX_SVIDEO,
1476			.vmux	= 2,
1477			.gpio0	= 0xef88,
1478			/* 2: Line-In */
1479			.audioroute = 2,
1480		}},
1481		.mpeg           = CX88_MPEG_DVB | CX88_MPEG_BLACKBIRD,
1482		.radio = {
1483			.type   = CX88_RADIO,
1484			.gpio0	= 0xef88,
1485			/* 4: FM Stereo (untested) */
1486			.audioroute = 8,
1487		},
1488	},
1489	[CX88_BOARD_SAMSUNG_SMT_7020] = {
1490		.name		= "Samsung SMT 7020 DVB-S",
1491		.tuner_type	= TUNER_ABSENT,
1492		.radio_type	= UNSET,
1493		.tuner_addr	= ADDR_UNSET,
1494		.radio_addr	= ADDR_UNSET,
1495		.input		= { {
1496			.type	= CX88_VMUX_DVB,
1497			.vmux	= 0,
1498		} },
1499		.mpeg           = CX88_MPEG_DVB,
1500	},
1501	[CX88_BOARD_ADSTECH_PTV_390] = {
1502		.name           = "ADS Tech Instant Video PCI",
1503		.tuner_type     = TUNER_ABSENT,
1504		.radio_type     = UNSET,
1505		.tuner_addr     = ADDR_UNSET,
1506		.radio_addr     = ADDR_UNSET,
1507		.input          = {{
1508			.type   = CX88_VMUX_DEBUG,
1509			.vmux   = 3,
1510			.gpio0  = 0x04ff,
1511		},{
1512			.type   = CX88_VMUX_COMPOSITE1,
1513			.vmux   = 1,
1514			.gpio0  = 0x07fa,
1515		},{
1516			.type   = CX88_VMUX_SVIDEO,
1517			.vmux   = 2,
1518			.gpio0  = 0x07fa,
1519		}},
1520	},
1521	[CX88_BOARD_PINNACLE_PCTV_HD_800i] = {
1522		.name           = "Pinnacle PCTV HD 800i",
1523		.tuner_type     = TUNER_XC5000,
1524		.radio_type     = UNSET,
1525		.tuner_addr	= ADDR_UNSET,
1526		.radio_addr	= ADDR_UNSET,
1527		.input          = {{
1528			.type   = CX88_VMUX_TELEVISION,
1529			.vmux   = 0,
1530			.gpio0  = 0x04fb,
1531			.gpio1  = 0x10ff,
1532		},{
1533			.type   = CX88_VMUX_COMPOSITE1,
1534			.vmux   = 1,
1535			.gpio0  = 0x04fb,
1536			.gpio1  = 0x10ef,
1537			.audioroute = 1,
1538		},{
1539			.type   = CX88_VMUX_SVIDEO,
1540			.vmux   = 2,
1541			.gpio0  = 0x04fb,
1542			.gpio1  = 0x10ef,
1543			.audioroute = 1,
1544		}},
1545		.mpeg           = CX88_MPEG_DVB,
1546	},
1547	[CX88_BOARD_DVICO_FUSIONHDTV_5_PCI_NANO] = {
1548		.name           = "DViCO FusionHDTV 5 PCI nano",
1549		/* xc3008 tuner, digital only for now */
1550		.tuner_type     = TUNER_ABSENT,
1551		.radio_type     = UNSET,
1552		.tuner_addr	= ADDR_UNSET,
1553		.radio_addr	= ADDR_UNSET,
1554		.input          = {{
1555			.type   = CX88_VMUX_TELEVISION,
1556			.vmux   = 0,
1557			.gpio0  = 0x000027df, /* Unconfirmed */
1558		}, {
1559			.type   = CX88_VMUX_COMPOSITE1,
1560			.vmux   = 1,
1561			.gpio0  = 0x000027df, /* Unconfirmed */
1562			.audioroute = 1,
1563		}, {
1564			.type   = CX88_VMUX_SVIDEO,
1565			.vmux   = 2,
1566			.gpio0  = 0x000027df, /* Unconfirmed */
1567			.audioroute = 1,
1568		} },
1569		.mpeg           = CX88_MPEG_DVB,
1570	},
1571	[CX88_BOARD_PINNACLE_HYBRID_PCTV] = {
1572		.name           = "Pinnacle Hybrid PCTV",
1573		.tuner_type     = TUNER_XC2028,
1574		.tuner_addr     = 0x61,
1575		.radio_type     = TUNER_XC2028,
1576		.radio_addr     = 0x61,
1577		.input          = { {
1578			.type   = CX88_VMUX_TELEVISION,
1579			.vmux   = 0,
1580			.gpio0  = 0x004ff,
1581			.gpio1  = 0x010ff,
1582			.gpio2  = 0x00001,
1583		}, {
1584			.type   = CX88_VMUX_COMPOSITE1,
1585			.vmux   = 1,
1586			.gpio0  = 0x004fb,
1587			.gpio1  = 0x010ef,
1588			.audioroute = 1,
1589		}, {
1590			.type   = CX88_VMUX_SVIDEO,
1591			.vmux   = 2,
1592			.gpio0  = 0x004fb,
1593			.gpio1  = 0x010ef,
1594			.audioroute = 1,
1595		} },
1596		.radio = {
1597			.type   = CX88_RADIO,
1598			.gpio0  = 0x004ff,
1599			.gpio1  = 0x010ff,
1600			.gpio2  = 0x0ff,
1601		},
1602		.mpeg           = CX88_MPEG_DVB,
1603	},
1604	/* Terry Wu <terrywu2009@gmail.com> */
1605	/* TV Audio :      set GPIO 2, 18, 19 value to 0, 1, 0 */
1606	/* FM Audio :      set GPIO 2, 18, 19 value to 0, 0, 0 */
1607	/* Line-in Audio : set GPIO 2, 18, 19 value to 0, 1, 1 */
1608	/* Mute Audio :    set GPIO 2 value to 1               */
1609	[CX88_BOARD_WINFAST_TV2000_XP_GLOBAL] = {
1610		.name           = "Leadtek TV2000 XP Global",
1611		.tuner_type     = TUNER_XC2028,
1612		.tuner_addr     = 0x61,
1613		.radio_type     = TUNER_XC2028,
1614		.radio_addr     = 0x61,
1615		.input          = { {
1616			.type   = CX88_VMUX_TELEVISION,
1617			.vmux   = 0,
1618			.gpio0  = 0x0400,       /* pin 2 = 0 */
1619			.gpio1  = 0x0000,
1620			.gpio2  = 0x0C04,       /* pin 18 = 1, pin 19 = 0 */
1621			.gpio3  = 0x0000,
1622		}, {
1623			.type   = CX88_VMUX_COMPOSITE1,
1624			.vmux   = 1,
1625			.gpio0  = 0x0400,       /* pin 2 = 0 */
1626			.gpio1  = 0x0000,
1627			.gpio2  = 0x0C0C,       /* pin 18 = 1, pin 19 = 1 */
1628			.gpio3  = 0x0000,
1629		}, {
1630			.type   = CX88_VMUX_SVIDEO,
1631			.vmux   = 2,
1632			.gpio0  = 0x0400,       /* pin 2 = 0 */
1633			.gpio1  = 0x0000,
1634			.gpio2  = 0x0C0C,       /* pin 18 = 1, pin 19 = 1 */
1635			.gpio3  = 0x0000,
1636		} },
1637		.radio = {
1638			.type   = CX88_RADIO,
1639			.gpio0  = 0x0400,        /* pin 2 = 0 */
1640			.gpio1  = 0x0000,
1641			.gpio2  = 0x0C00,       /* pin 18 = 0, pin 19 = 0 */
1642			.gpio3  = 0x0000,
1643		},
1644	},
1645	[CX88_BOARD_POWERCOLOR_REAL_ANGEL] = {
1646		.name           = "PowerColor RA330",	/* Long names may confuse LIRC. */
1647		.tuner_type     = TUNER_XC2028,
1648		.tuner_addr     = 0x61,
1649		.input          = { {
1650			.type   = CX88_VMUX_DEBUG,
1651			.vmux   = 3,		/* Due to the way the cx88 driver is written,	*/
1652			.gpio0 = 0x00ff,	/* there is no way to deactivate audio pass-	*/
1653			.gpio1 = 0xf39d,	/* through without this entry. Furthermore, if	*/
1654			.gpio3 = 0x0000,	/* the TV mux entry is first, you get audio	*/
1655		}, {				/* from the tuner on boot for a little while.	*/
1656			.type   = CX88_VMUX_TELEVISION,
1657			.vmux   = 0,
1658			.gpio0 = 0x00ff,
1659			.gpio1 = 0xf35d,
1660			.gpio3 = 0x0000,
1661		}, {
1662			.type   = CX88_VMUX_COMPOSITE1,
1663			.vmux   = 1,
1664			.gpio0 = 0x00ff,
1665			.gpio1 = 0xf37d,
1666			.gpio3 = 0x0000,
1667		}, {
1668			.type   = CX88_VMUX_SVIDEO,
1669			.vmux   = 2,
1670			.gpio0  = 0x000ff,
1671			.gpio1  = 0x0f37d,
1672			.gpio3  = 0x00000,
1673		} },
1674		.radio = {
1675			.type   = CX88_RADIO,
1676			.gpio0  = 0x000ff,
1677			.gpio1  = 0x0f35d,
1678			.gpio3  = 0x00000,
1679		},
1680	},
1681	[CX88_BOARD_GENIATECH_X8000_MT] = {
1682		/* Also PowerColor Real Angel 330 and Geniatech X800 OEM */
1683		.name           = "Geniatech X8000-MT DVBT",
1684		.tuner_type     = TUNER_XC2028,
1685		.tuner_addr     = 0x61,
1686		.input          = { {
1687			.type   = CX88_VMUX_TELEVISION,
1688			.vmux   = 0,
1689			.gpio0  = 0x00000000,
1690			.gpio1  = 0x00e3e341,
1691			.gpio2  = 0x00000000,
1692			.gpio3  = 0x00000000,
1693		}, {
1694			.type   = CX88_VMUX_COMPOSITE1,
1695			.vmux   = 1,
1696			.gpio0  = 0x00000000,
1697			.gpio1  = 0x00e3e361,
1698			.gpio2  = 0x00000000,
1699			.gpio3  = 0x00000000,
1700		}, {
1701			.type   = CX88_VMUX_SVIDEO,
1702			.vmux   = 2,
1703			.gpio0  = 0x00000000,
1704			.gpio1  = 0x00e3e361,
1705			.gpio2  = 0x00000000,
1706			.gpio3  = 0x00000000,
1707		} },
1708		.radio = {
1709			.type   = CX88_RADIO,
1710			.gpio0  = 0x00000000,
1711			.gpio1  = 0x00e3e341,
1712			.gpio2  = 0x00000000,
1713			.gpio3  = 0x00000000,
1714		},
1715		.mpeg           = CX88_MPEG_DVB,
1716	},
1717	[CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PRO] = {
1718		.name           = "DViCO FusionHDTV DVB-T PRO",
1719		.tuner_type     = TUNER_XC2028,
1720		.tuner_addr     = 0x61,
1721		.radio_type     = UNSET,
1722		.radio_addr     = ADDR_UNSET,
1723		.input          = { {
1724			.type   = CX88_VMUX_COMPOSITE1,
1725			.vmux   = 1,
1726			.gpio0  = 0x000067df,
1727		}, {
1728			.type   = CX88_VMUX_SVIDEO,
1729			.vmux   = 2,
1730			.gpio0  = 0x000067df,
1731		} },
1732		.mpeg           = CX88_MPEG_DVB,
1733	},
1734	[CX88_BOARD_DVICO_FUSIONHDTV_7_GOLD] = {
1735		.name           = "DViCO FusionHDTV 7 Gold",
1736		.tuner_type     = TUNER_XC5000,
1737		.radio_type     = UNSET,
1738		.tuner_addr	= ADDR_UNSET,
1739		.radio_addr	= ADDR_UNSET,
1740		.input          = {{
1741			.type   = CX88_VMUX_TELEVISION,
1742			.vmux   = 0,
1743			.gpio0  = 0x10df,
1744		},{
1745			.type   = CX88_VMUX_COMPOSITE1,
1746			.vmux   = 1,
1747			.gpio0  = 0x16d9,
1748		},{
1749			.type   = CX88_VMUX_SVIDEO,
1750			.vmux   = 2,
1751			.gpio0  = 0x16d9,
1752		}},
1753		.mpeg           = CX88_MPEG_DVB,
1754	},
1755	[CX88_BOARD_PROLINK_PV_8000GT] = {
1756		.name           = "Prolink Pixelview MPEG 8000GT",
1757		.tuner_type     = TUNER_XC2028,
1758		.tuner_addr     = 0x61,
1759		.input          = { {
1760			.type   = CX88_VMUX_TELEVISION,
1761			.vmux   = 0,
1762			.gpio0 = 0x0ff,
1763			.gpio2 = 0x0cfb,
1764		}, {
1765			.type   = CX88_VMUX_COMPOSITE1,
1766			.vmux   = 1,
1767			.gpio2 = 0x0cfb,
1768		}, {
1769			.type   = CX88_VMUX_SVIDEO,
1770			.vmux   = 2,
1771			.gpio2 = 0x0cfb,
1772		} },
1773		.radio = {
1774			.type   = CX88_RADIO,
1775			.gpio2 = 0x0cfb,
1776		},
1777	},
1778	[CX88_BOARD_PROLINK_PV_GLOBAL_XTREME] = {
1779		.name           = "Prolink Pixelview Global Extreme",
1780		.tuner_type     = TUNER_XC2028,
1781		.tuner_addr     = 0x61,
1782		.input          = { {
1783			.type   = CX88_VMUX_TELEVISION,
1784			.vmux   = 0,
1785			.gpio0 = 0x04fb,
1786			.gpio1 = 0x04080,
1787			.gpio2 = 0x0cf7,
1788		}, {
1789			.type   = CX88_VMUX_COMPOSITE1,
1790			.vmux   = 1,
1791			.gpio0 = 0x04fb,
1792			.gpio1 = 0x04080,
1793			.gpio2 = 0x0cfb,
1794		}, {
1795			.type   = CX88_VMUX_SVIDEO,
1796			.vmux   = 2,
1797			.gpio0 = 0x04fb,
1798			.gpio1 = 0x04080,
1799			.gpio2 = 0x0cfb,
1800		} },
1801		.radio = {
1802			.type   = CX88_RADIO,
1803			.gpio0 = 0x04ff,
1804			.gpio1 = 0x04080,
1805			.gpio2 = 0x0cf7,
1806		},
1807	},
1808	/* Both radio, analog and ATSC work with this board.
1809	   However, for analog to work, s5h1409 gate should be open,
1810	   otherwise, tuner-xc3028 won't be detected.
1811	   A proper fix require using the newer i2c methods to add
1812	   tuner-xc3028 without doing an i2c probe.
1813	 */
1814	[CX88_BOARD_KWORLD_ATSC_120] = {
1815		.name           = "Kworld PlusTV HD PCI 120 (ATSC 120)",
1816		.tuner_type     = TUNER_XC2028,
1817		.radio_type     = UNSET,
1818		.tuner_addr	= ADDR_UNSET,
1819		.radio_addr	= ADDR_UNSET,
1820		.input          = { {
1821			.type   = CX88_VMUX_TELEVISION,
1822			.vmux   = 0,
1823			.gpio0  = 0x000000ff,
1824			.gpio1  = 0x0000f35d,
1825			.gpio2  = 0x00000000,
1826		}, {
1827			.type   = CX88_VMUX_COMPOSITE1,
1828			.vmux   = 1,
1829			.gpio0  = 0x000000ff,
1830			.gpio1  = 0x0000f37e,
1831			.gpio2  = 0x00000000,
1832		}, {
1833			.type   = CX88_VMUX_SVIDEO,
1834			.vmux   = 2,
1835			.gpio0  = 0x000000ff,
1836			.gpio1  = 0x0000f37e,
1837			.gpio2  = 0x00000000,
1838		} },
1839		.radio = {
1840			.type   = CX88_RADIO,
1841			.gpio0  = 0x000000ff,
1842			.gpio1  = 0x0000f35d,
1843			.gpio2  = 0x00000000,
1844		},
1845		.mpeg           = CX88_MPEG_DVB,
1846	},
1847	[CX88_BOARD_HAUPPAUGE_HVR4000] = {
1848		.name           = "Hauppauge WinTV-HVR4000 DVB-S/S2/T/Hybrid",
1849		.tuner_type     = TUNER_PHILIPS_FMD1216ME_MK3,
1850		.radio_type     = UNSET,
1851		.tuner_addr     = ADDR_UNSET,
1852		.radio_addr     = ADDR_UNSET,
1853		.tda9887_conf   = TDA9887_PRESENT,
1854		.audio_chip     = V4L2_IDENT_WM8775,
1855		/*
1856		 * GPIO0 (WINTV2000)
1857		 *
1858		 * Analogue     SAT     DVB-T
1859		 * Antenna      0xc4bf  0xc4bb
1860		 * Composite    0xc4bf  0xc4bb
1861		 * S-Video      0xc4bf  0xc4bb
1862		 * Composite1   0xc4ff  0xc4fb
1863		 * S-Video1     0xc4ff  0xc4fb
1864		 *
1865		 * BIT  VALUE   FUNCTION GP{x}_IO
1866		 * 0    1       I:?
1867		 * 1    1       I:?
1868		 * 2    1       O:MPEG PORT 0=DVB-T 1=DVB-S
1869		 * 3    1       I:?
1870		 * 4    1       I:?
1871		 * 5    1       I:?
1872		 * 6    0       O:INPUT SELECTOR 0=INTERNAL 1=EXPANSION
1873		 * 7    1       O:DVB-T DEMOD RESET LOW
1874		 *
1875		 * BIT  VALUE   FUNCTION GP{x}_OE
1876		 * 8    0       I
1877		 * 9    0       I
1878		 * a    1       O
1879		 * b    0       I
1880		 * c    0       I
1881		 * d    0       I
1882		 * e    1       O
1883		 * f    1       O
1884		 *
1885		 * WM8775 ADC
1886		 *
1887		 * 1: TV Audio / FM Mono
1888		 * 2: Line-In
1889		 * 3: Line-In Expansion
1890		 * 4: FM Stereo
1891		 */
1892		.input          = {{
1893			.type   = CX88_VMUX_TELEVISION,
1894			.vmux   = 0,
1895			.gpio0  = 0xc4bf,
1896			/* 1: TV Audio / FM Mono */
1897			.audioroute = 1,
1898		}, {
1899			.type   = CX88_VMUX_COMPOSITE1,
1900			.vmux   = 1,
1901			.gpio0  = 0xc4bf,
1902			/* 2: Line-In */
1903			.audioroute = 2,
1904		}, {
1905			.type   = CX88_VMUX_SVIDEO,
1906			.vmux   = 2,
1907			.gpio0  = 0xc4bf,
1908			/* 2: Line-In */
1909			.audioroute = 2,
1910		} },
1911		.radio = {
1912			.type   = CX88_RADIO,
1913			.gpio0	= 0xc4bf,
1914			/* 4: FM Stereo */
1915			.audioroute = 8,
1916		},
1917		.mpeg           = CX88_MPEG_DVB,
1918		.num_frontends	= 2,
1919	},
1920	[CX88_BOARD_HAUPPAUGE_HVR4000LITE] = {
1921		.name           = "Hauppauge WinTV-HVR4000(Lite) DVB-S/S2",
1922		.tuner_type     = UNSET,
1923		.radio_type     = UNSET,
1924		.tuner_addr     = ADDR_UNSET,
1925		.radio_addr     = ADDR_UNSET,
1926		.input          = {{
1927			.type   = CX88_VMUX_DVB,
1928			.vmux   = 0,
1929		} },
1930		.mpeg           = CX88_MPEG_DVB,
1931	},
1932	[CX88_BOARD_TEVII_S420] = {
1933		.name           = "TeVii S420 DVB-S",
1934		.tuner_type     = UNSET,
1935		.radio_type     = UNSET,
1936		.tuner_addr     = ADDR_UNSET,
1937		.radio_addr     = ADDR_UNSET,
1938		.input          = {{
1939			.type   = CX88_VMUX_DVB,
1940			.vmux   = 0,
1941		} },
1942		.mpeg           = CX88_MPEG_DVB,
1943	},
1944	[CX88_BOARD_TEVII_S460] = {
1945		.name           = "TeVii S460 DVB-S/S2",
1946		.tuner_type     = UNSET,
1947		.radio_type     = UNSET,
1948		.tuner_addr     = ADDR_UNSET,
1949		.radio_addr     = ADDR_UNSET,
1950		.input          = {{
1951			.type   = CX88_VMUX_DVB,
1952			.vmux   = 0,
1953		} },
1954		.mpeg           = CX88_MPEG_DVB,
1955	},
1956	[CX88_BOARD_TEVII_S464] = {
1957		.name           = "TeVii S464 DVB-S/S2",
1958		.tuner_type     = UNSET,
1959		.radio_type     = UNSET,
1960		.tuner_addr     = ADDR_UNSET,
1961		.radio_addr     = ADDR_UNSET,
1962		.input          = {{
1963			.type   = CX88_VMUX_DVB,
1964			.vmux   = 0,
1965		} },
1966		.mpeg           = CX88_MPEG_DVB,
1967	},
1968	[CX88_BOARD_OMICOM_SS4_PCI] = {
1969		.name           = "Omicom SS4 DVB-S/S2 PCI",
1970		.tuner_type     = UNSET,
1971		.radio_type     = UNSET,
1972		.tuner_addr     = ADDR_UNSET,
1973		.radio_addr     = ADDR_UNSET,
1974		.input          = {{
1975			.type   = CX88_VMUX_DVB,
1976			.vmux   = 0,
1977		} },
1978		.mpeg           = CX88_MPEG_DVB,
1979	},
1980	[CX88_BOARD_TBS_8910] = {
1981		.name           = "TBS 8910 DVB-S",
1982		.tuner_type     = UNSET,
1983		.radio_type     = UNSET,
1984		.tuner_addr     = ADDR_UNSET,
1985		.radio_addr     = ADDR_UNSET,
1986		.input          = {{
1987			.type   = CX88_VMUX_DVB,
1988			.vmux   = 0,
1989		} },
1990		.mpeg           = CX88_MPEG_DVB,
1991	},
1992	[CX88_BOARD_TBS_8920] = {
1993		.name           = "TBS 8920 DVB-S/S2",
1994		.tuner_type     = TUNER_ABSENT,
1995		.radio_type     = UNSET,
1996		.tuner_addr     = ADDR_UNSET,
1997		.radio_addr     = ADDR_UNSET,
1998		.input          = {{
1999			.type   = CX88_VMUX_DVB,
2000			.vmux   = 0,
2001			.gpio0  = 0x8080,
2002		} },
2003		.mpeg           = CX88_MPEG_DVB,
2004	},
2005	[CX88_BOARD_PROF_6200]

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