/*
 *  usbvision-cards.c
 *  usbvision cards definition file
 *
 * Copyright (c) 1999-2005 Joerg Heckenbach <joerg@heckenbach-aw.de>
 *
 * This module is part of usbvision driver project.
 * Updates to driver completed by Dwaine P. Garden
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */


#include <linux/list.h>
#include <linux/module.h>
#include <media/v4l2-dev.h>
#include <media/tuner.h>
#include "usbvision.h"
#include "usbvision-cards.h"

/* Supported Devices: A table for usbvision.c*/
struct usbvision_device_data_st  usbvision_device_data[] = {
	[XANBOO] = {
		.interface      = -1,
		.codec          = CODEC_SAA7113,
		.video_channels = 4,
		.video_norm     = V4L2_STD_NTSC,
		.audio_channels = 1,
		.radio          = 0,
		.vbi            = 1,
		.tuner          = 0,
		.tuner_type     = 0,
		.x_offset       = -1,
		.y_offset       = -1,
		.model_string   = "Xanboo",
	},
	[BELKIN_VIDEOBUS_II] = {
		.interface      = -1,
		.codec          = CODEC_SAA7113,
		.video_channels = 2,
		.video_norm     = V4L2_STD_PAL,
		.audio_channels = 1,
		.radio          = 0,
		.vbi            = 1,
		.tuner          = 0,
		.tuner_type     = 0,
		.x_offset       = 0,
		.y_offset       = 3,
		.dvi_yuv_override = 1,
		.dvi_yuv        = 7,
		.model_string   = "Belkin USB VideoBus II Adapter",
	},
	[BELKIN_VIDEOBUS] = {
		.interface      = -1,
		.codec          = CODEC_SAA7111,
		.video_channels = 2,
		.video_norm     = V4L2_STD_NTSC,
		.audio_channels = 1,
		.radio          = 0,
		.vbi            = 1,
		.tuner          = 0,
		.tuner_type     = 0,
		.x_offset       = -1,
		.y_offset       = -1,
		.model_string   = "Belkin Components USB VideoBus",
	},
	[BELKIN_USB_VIDEOBUS_II] = {
		.interface      = -1,
		.codec          = CODEC_SAA7113,
		.video_channels = 2,
		.video_norm     = V4L2_STD_NTSC,
		.audio_channels = 1,
		.radio          = 0,
		.vbi            = 1,
		.tuner          = 0,
		.tuner_type     = 0,
		.x_offset       = 0,
		.y_offset       = 3,
		.dvi_yuv_override = 1,
		.dvi_yuv        = 7,
		.model_string   = "Belkin USB VideoBus II",
	},
	[ECHOFX_INTERVIEW_LITE] = {
		.interface      = 0,
		.codec          = CODEC_SAA7111,
		.video_channels = 2,
		.video_norm     = V4L2_STD_PAL,
		.audio_channels = 0,
		.radio          = 0,
		.vbi            = 1,
		.tuner          = 0,
		.tuner_type     = 0,
		.x_offset       = -1,
		.y_offset       = -1,
		.dvi_yuv_override = 1,
		.dvi_yuv        = 7,
		.model_string   = "echoFX InterView Lite",
	},
	[USBGEAR_USBG_V1] = {
		.interface      = -1,
		.codec          = CODEC_SAA7111,
		.video_channels = 2,
		.video_norm     = V4L2_STD_NTSC,
		.audio_channels = 1,
		.radio          = 0,
		.vbi            = 1,
		.tuner          = 0,
		.tuner_type     = 0,
		.x_offset       = -1,
		.y_offset       = -1,
		.model_string   = "USBGear USBG-V1 resp. HAMA USB",
	},
	[D_LINK_V100] = {
		.interface      = -1,
		.codec          = CODEC_SAA7113,
		.video_channels = 4,
		.video_norm     = V4L2_STD_NTSC,
		.audio_channels = 0,
		.radio          = 0,
		.vbi            = 1,
		.tuner          = 0,
		.tuner_type     = 0,
		.x_offset       = 0,
		.y_offset       = 3,
		.dvi_yuv_override = 1,
		.dvi_yuv        = 7,
		.model_string   = "D-Link V100",
	},
	[X10_USB_CAMERA] = {
		.interface      = -1,
		.codec          = CODEC_SAA7111,
		.video_channels = 2,
		.video_norm     = V4L2_STD_NTSC,
		.audio_channels = 1,
		.radio          = 0,
		.vbi            = 1,
		.tuner          = 0,
		.tuner_type     = 0,
		.x_offset       = -1,
		.y_offset       = -1,
		.model_string   = "X10 USB Camera",
	},
	[HPG_WINTV_LIVE_PAL_BG] = {
		.interface      = -1,
		.codec          = CODEC_SAA7111,
		.video_channels = 2,
		.video_norm     = V4L2_STD_PAL,
		.audio_channels = 1,
		.radio          = 0,
		.vbi            = 1,
		.tuner          = 0,
		.tuner_type     = 0,
		.x_offset       = -1,
		.y_offset       = 3,
		.dvi_yuv_override = 1,
		.dvi_yuv        = 7,
		.model_string   = "Hauppauge WinTV USB Live (PAL B/G)",
	},
	[HPG_WINTV_LIVE_PRO_NTSC_MN] = {
		.interface      = -1,
		.codec          = CODEC_SAA7113,
		.video_channels = 2,
		.video_norm     = V4L2_STD_NTSC,
		.audio_channels = 0,
		.radio          = 0,
		.vbi            = 1,
		.tuner          = 0,
		.tuner_type     = 0,
		.x_offset       = 0,
		.y_offset       = 3,
		.dvi_yuv_override = 1,
		.dvi_yuv        = 7,
		.model_string   = "Hauppauge WinTV USB Live Pro (NTSC M/N)",
	},
	[ZORAN_PMD_NOGATECH] = {
		.interface      = -1,
		.codec          = CODEC_SAA7113,
		.video_channels = 2,
		.video_norm     = V4L2_STD_PAL,
		.audio_channels = 2,
		.radio          = 0,
		.vbi            = 1,
		.tuner          = 0,
		.tuner_type     = 0,
		.x_offset       = 0,
		.y_offset       = 3,
		.dvi_yuv_override = 1,
		.dvi_yuv        = 7,
		.model_string   = "Zoran Co. PMD (Nogatech) AV-grabber Manhattan",
	},
	[NOGATECH_USB_TV_NTSC_FM] = {
		.interface      = -1,
		.codec          = CODEC_SAA7111,
		.video_channels = 3,
		.video_norm     = V4L2_STD_NTSC,
		.audio_channels = 1,
		.radio          = 1,
		.vbi            = 1,
		.tuner          = 1,
		.tuner_type     = TUNER_PHILIPS_NTSC_M,
		.x_offset       = -1,
		.y_offset       = 20,
		.model_string   = "Nogatech USB-TV (NTSC) FM",
	},
	[PNY_USB_TV_NTSC_FM] = {
		.interface      = -1,
		.codec          = CODEC_SAA7111,
		.video_channels = 3,
		.video_norm     = V4L2_STD_NTSC,
		.audio_channels = 1,
		.radio          = 1,
		.vbi            = 1,
		.tuner          = 1,
		.tuner_type     = TUNER_PHILIPS_NTSC_M,
		.x_offset       = -1,
		.y_offset       = 20,
		.model_string   = "PNY USB-TV (NTSC) FM",
	},
	[PV_PLAYTV_USB_PRO_PAL_FM] = {
		.interface      = 0,
		.codec          = CODEC_SAA7113,
		.video_channels = 3,
		.video_norm     = V4L2_STD_PAL,
		.audio_channels = 1,
		.radio          = 1,
		.vbi            = 1,
		.tuner          = 1,
		.tuner_type     = TUNER_PHILIPS_PAL,
		.x_offset       = 0,
		.y_offset       = 3,
		.dvi_yuv_override = 1,
		.dvi_yuv        = 7,
		.model_string   = "PixelView PlayTv-USB PRO (PAL) FM",
	},
	[ZT_721] = {
		.interface      = 0,
		.codec          = CODEC_SAA7113,
		.video_channels = 3,
		.video_norm     = V4L2_STD_PAL,
		.audio_channels = 1,
		.radio          = 1,
		.vbi            = 1,
		.tuner          = 1,
		.tuner_type     = TUNER_PHILIPS_PAL,
		.x_offset       = 0,
		.y_offset       = 3,
		.dvi_yuv_override = 1,
		.dvi_yuv        = 7,
		.model_string   = "ZTV ZT-721 2.4GHz USB A/V Receiver",
	},
	[HPG_WINTV_NTSC_MN] = {
		.interface      = -1,
		.codec          = CODEC_SAA7111,
		.video_channels = 3,
		.video_norm     = V4L2_STD_NTSC,
		.audio_channels = 1,
		.radio          = 0,
		.vbi            = 1,
		.tuner          = 1,
		.tuner_type     = TUNER_PHILIPS_NTSC_M,
		.x_offset       = -1,
		.y_offset       = 20,
		.model_string   = "Hauppauge WinTV USB (NTSC M/N)",
	},
	[HPG_WINTV_PAL_BG] = {
		.interface      = -1,
		.codec          = CODEC_SAA7111,
		.video_channels = 3,
		.video_norm     = V4L2_STD_PAL,
		.audio_channels = 1,
		.radio          = 0,
		.vbi            = 1,
		.tuner          = 1,
		.tuner_type     = TUNER_PHILIPS_PAL,
		.x_offset       = -1,
		.y_offset       = -1,
		.model_string   = "Hauppauge WinTV USB (PAL B/G)",
	},
	[HPG_WINTV_PAL_I] = {
		.interface      = -1,
		.codec          = CODEC_SAA7111,
		.video_channels = 3,
		.video_norm     = V4L2_STD_PAL,
		.audio_channels = 1,
		.radio          = 0,
		.vbi            = 1,
		.tuner          = 1,
		.tuner_type     = TUNER_PHILIPS_PAL,
		.x_offset       = -1,
		.y_offset       = -1,
		.model_string   = "Hauppauge WinTV USB (PAL I)",
	},
	[HPG_WINTV_PAL_SECAM_L] = {
		.interface      = -1,
		.codec          = CODEC_SAA7111,
		.video_channels = 3,
		.video_norm     = V4L2_STD_SECAM,
		.audio_channels = 1,
		.radio          = 0,
		.vbi            = 1,
		.tuner          = 1,
		.tuner_type     = TUNER_PHILIPS_SECAM,
		.x_offset       = 0x80,
		.y_offset       = 0x16,
		.model_string   = "Hauppauge WinTV USB (PAL/SECAM L)",
	},
	[HPG_WINTV_PAL_D_K] = {
		.interface      = -1,
		.codec          = CODEC_SAA7111,
		.video_channels = 3,
		.video_norm     = V4L2_STD_PAL,
		.audio_channels = 1,
		.radio          = 0,
		.vbi            = 1,
		.tuner          = 1,
		.tuner_type     = TUNER_PHILIPS_PAL,
		.x_offset       = -1,
		.y_offset       = -1,
		.model_string   = "Hauppauge WinTV USB (PAL D/K)",
	},
	[HPG_WINTV_NTSC_FM] = {
		.interface      = -1,
		.codec          = CODEC_SAA7111,
		.video_channels = 3,
		.video_norm     = V4L2_STD_NTSC,
		.audio_channels = 1,
		.radio          = 1,
		.vbi            = 1,
		.tuner          = 1,
		.tuner_type     = TUNER_PHILIPS_NTSC_M,
		.x_offset       = -1,
		.y_offset       = -1,
		.model_string   = "Hauppauge WinTV USB (NTSC FM)",
	},
	[HPG_WINTV_PAL_BG_FM] = {
		.interface      = -1,
		.codec          = CODEC_SAA7111,
		.video_channels = 3,
		.video_norm     = V4L2_STD_PAL,
		.audio_channels = 1,
		.radio          = 1,
		.vbi            = 1,
		.tuner          = 1,
		.tuner_type     = TUNER_PHILIPS_PAL,
		.x_offset       = -1,
		.y_offset       = -1,
		.model_string   = "Hauppauge WinTV USB (PAL B/G FM)",
	},
	[HPG_WINTV_PAL_I_FM] = {
		.interface      = -1,
		.codec          = CODEC_SAA7111,
		.video_channels = 3,
		.video_norm     = V4L2_STD_PAL,
		.audio_channels = 1,
		.radio          = 1,
		.vbi            = 1,
		.tuner          = 1,
		.tuner_type     = TUNER_PHILIPS_PAL,
		.x_offset       = -1,
		.y_offset       = -1,
		.model_string   = "Hauppauge WinTV USB (PAL I FM)",
	},
	[HPG_WINTV_PAL_D_K_FM] = {
		.interface      = -1,
		.codec          = CODEC_SAA7111,
		.video_channels = 3,
		.video_norm     = V4L2_STD_PAL,
		.audio_channels = 1,
		.radio          = 1,
		.vbi            = 1,
		.tuner          = 1,
		.tuner_type     = TUNER_PHILIPS_PAL,
		.x_offset       = -1,
		.y_offset       = -1,
		.model_string   = "Hauppauge WinTV USB (PAL D/K FM)",
	},
	[HPG_WINTV_PRO_NTSC_MN] = {
		.interface      = 0,
		.codec          = CODEC_SAA7113,
		.video_channels = 3,
		.video_norm     = V4L2_STD_NTSC,
		.audio_channels = 1,
		.radio          = 1,
		.vbi            = 1,
		.tuner          = 1,
		.tuner_type     = TUNER_MICROTUNE_4049FM5,
		.x_offset       = 0,
		.y_offset       = 3,
		.dvi_yuv_override = 1,
		.dvi_yuv        = 7,
		.model_string   = "Hauppauge WinTV USB Pro (NTSC M/N)",
	},
	[HPG_WINTV_PRO_NTSC_MN_V2] = {
		.interface      = 0,
		.codec          = CODEC_SAA7113,
		.video_channels = 3,
		.video_norm     = V4L2_STD_NTSC,
		.audio_channels = 1,
		.radio          = 1,
		.vbi            = 1,
		.tuner          = 1,
		.tuner_type     = TUNER_MICROTUNE_4049FM5,
		.x_offset       = 0,
		.y_offset       = 3,
		.dvi_yuv_override = 1,
		.dvi_yuv        = 7,
		.model_string   = "Hauppauge WinTV USB Pro (NTSC M/N) V2",
	},
	[HPG_WINTV_PRO_PAL] = {
		.interface      = 0,
		.codec          = CODEC_SAA7113,
		.video_channels = 3,
		.video_norm     = V4L2_STD_PAL,
		.audio_channels = 1,
		.radio          = 0,
		.vbi            = 1,
		.tuner          = 1,
		.tuner_type     = TUNER_PHILIPS_FM1216ME_MK3,
		.x_offset       = 0,
		.y_offset       = 3,
		.dvi_yuv_override = 1,
		.dvi_yuv        = 7,
		.model_string   = "Hauppauge WinTV USB Pro (PAL/SECAM B/G/I/D/K/L)",
	},
	[HPG_WINTV_PRO_NTSC_MN_V3] = {
		.interface      = 0,
		.codec          = CODEC_SAA7113,
		.video_channels = 3,
		.video_norm     = V4L2_STD_NTSC,
		.audio_channels = 1,
		.radio          = 1,
		.vbi            = 1,
		.tuner          = 1,
		.tuner_type     = TUNER_PHILIPS_NTSC_M,
		.x_offset       = 0,
		.y_offset       = 3,
		.dvi_yuv_override = 1,
		.dvi_yuv        = 7,
		.model_string   = "Hauppauge WinTV USB Pro (NTSC M/N) V3",
	},
	[HPG_WINTV_PRO_PAL_BG] = {
		.interface      = 0,
		.codec          = CODEC_SAA7113,
		.video_channels = 3,
		.video_norm     = V4L2_STD_PAL,
		.audio_channels = 1,
		.radio          = 0,
		.vbi            = 1,
		.tuner          = 1,
		.tuner_type     = TUNER_PHILIPS_PAL,
		.x_offset       = 0,
		.y_offset       = 3,
		.dvi_yuv_override = 1,
		.dvi_yuv        = 7,
		.model_string   = "Hauppauge WinTV USB Pro (PAL B/G)",
	},
	[HPG_WINTV_PRO_PAL_I] = {
		.interface      = 0,
		.codec          = CODEC_SAA7113,
		.video_channels = 3,
		.video_norm     = V4L2_STD_PAL,
		.audio_channels = 1,
		.radio          = 0,
		.vbi            = 1,
		.tuner          = 1,
		.tuner_type     = TUNER_PHILIPS_PAL,
		.x_offset       = 0,
		.y_offset       = 3,
		.dvi_yuv_override = 1,
		.dvi_yuv        = 7,
		.model_string   = "Hauppauge WinTV USB Pro (PAL I)",
	},
	[HPG_WINTV_PRO_PAL_SECAM_L] = {
		.interface      = -1,
		.codec          = CODEC_SAA7113,
		.video_channels = 3,
		.video_norm     = V4L2_STD_SECAM,
		.audio_channels = 1,
		.radio          = 0,
		.vbi            = 1,
		.tuner          = 1,
		.tuner_type     = TUNER_PHILIPS_SECAM,
		.x_offset       = 0,
		.y_offset       = 3,
		.dvi_yuv_override = 1,
		.dvi_yuv        = 7,
		.model_string   = "Hauppauge WinTV USB Pro (PAL/SECAM L)",
	},
	[HPG_WINTV_PRO_PAL_D_K] = {
		.interface      = -1,
		.codec          = CODEC_SAA7113,
		.video_channels = 3,
		.video_norm     = V4L2_STD_PAL,
		.audio_channels = 1,
		.radio          = 0,
		.vbi            = 1,
		.tuner          = 1,
		.tuner_type     = TUNER_PHILIPS_PAL,
		.x_offset       = 0,
		.y_offset       = 3,
		.dvi_yuv_override = 1,
		.dvi_yuv        = 7,
		.model_string   = "Hauppauge WinTV USB Pro (PAL D/K)",
	},
	[HPG_WINTV_PRO_PAL_SECAM] = {
		.interface      = -1,
		.codec          = CODEC_SAA7113,
		.video_channels = 3,
		.video_norm     = V4L2_STD_SECAM,
		.audio_channels = 1,
		.radio          = 0,
		.vbi            = 1,
		.tuner          = 1,
		.tuner_type     = TUNER_PHILIPS_SECAM,
		.x_offset       = 0,
		.y_offset       = 3,
		.dvi_yuv_override = 1,
		.dvi_yuv        = 7,
		.model_string   = "Hauppauge WinTV USB Pro (PAL/SECAM BGDK/I/L)",
	},
	[HPG_WINTV_PRO_PAL_SECAM_V2] = {
		.interface      = -1,
		.codec          = CODEC_SAA7113,
		.video_channels = 3,
		.video_norm     = V4L2_STD_SECAM,
		.audio_channels = 1,
		.radio          = 0,
		.vbi            = 1,
		.tuner          = 1,
		.tuner_type     = TUNER_PHILIPS_SECAM,
		.x_offset       = 0,
		.y_offset       = 3,
		.dvi_yuv_override = 1,
		.dvi_yuv        = 7,
		.model_string   = "Hauppauge WinTV USB Pro (PAL/SECAM BGDK/I/L) V2",
	},
	[HPG_WINTV_PRO_PAL_BG_V2] = {
		.interface      = -1,
		.codec          = CODEC_SAA7113,
		.video_channels = 3,
		.video_norm     = V4L2_STD_PAL,
		.audio_channels = 1,
		.radio          = 0,
		.vbi            = 1,
		.tuner          = 1,
		.tuner_type     = TUNER_ALPS_TSBE1_PAL,
		.x_offset       = 0,
		.y_offset       = 3,
		.dvi_yuv_override = 1,
		.dvi_yuv        = 7,
		.model_string   = "Hauppauge WinTV USB Pro (PAL B/G) V2",
	},
	[HPG_WINTV_PRO_PAL_BG_D_K] = {
		.interface      = -1,
		.codec          = CODEC_SAA7113,
		.video_channels = 3,
		.video_norm     = V4L2_STD_PAL,
		.audio_channels = 1,
		.radio          = 0,
		.vbi            = 1,
		.tuner          = 1,
		.tuner_type     = TUNER_ALPS_TSBE1_PAL,
		.x_offset       = 0,
		.y_offset       = 3,
		.dvi_yuv_override = 1,
		.dvi_yuv        = 7,
		.model_string   = "Hauppauge WinTV USB Pro (PAL B/G,D/K)",
	},
	[HPG_WINTV_PRO_PAL_I_D_K] = {
		.interface      = -1,
		.codec          = CODEC_SAA7113,
		.video_channels = 3,
		.video_norm     = V4L2_STD_PAL,
		.audio_channels = 1,
		.radio          = 0,
		.vbi            = 1,
		.tuner          = 1,
		.tuner_type     = TUNER_LG_PAL_NEW_TAPC,
		.x_offset       = 0,
		.y_offset       = 3,
		.dvi_yuv_override = 1,
		.dvi_yuv        = 7,
		.model_string   = "Hauppauge WinTV USB Pro (PAL I,D/K)",
	},
	[HPG_WINTV_PRO_NTSC_MN_FM] = {
		.interface      = -1,
		.codec          = CODEC_SAA7113,
		.video_channels = 3,
		.video_norm     = V4L2_STD_NTSC,
		.audio_channels = 1,
		.radio          = 1,
		.vbi            = 1,
		.tuner          = 1,
		.tuner_type     = TUNER_PHILIPS_NTSC_M,
		.x_offset       = 0,
		.y_offset       = 3,
		.dvi_yuv_override = 1,
		.dvi_yuv        = 7,
		.model_string   = "Hauppauge WinTV USB Pro (NTSC M/N FM)",
	},
	[HPG_WINTV_PRO_PAL_BG_FM] = {
		.interface      = 0,
		.codec          = CODEC_SAA7113,
		.video_channels = 3,
		.video_norm     = V4L2_STD_PAL,
		.audio_channels = 1,
		.radio          = 1,
		.vbi            = 1,
		.tuner          = 1,
		.tuner_type     = TUNER_PHILIPS_PAL,
		.x_offset       = 0,
		.y_offset       = 3,
		.dvi_yuv_override = 1,
		.dvi_yuv        = 7,
		.model_string   = "Hauppauge WinTV USB Pro (PAL B/G FM)",
	},
	[HPG_WINTV_PRO_PAL_I_FM] = {
		.interface      = 0,
		.codec          = CODEC_SAA7113,
		.video_channels = 3,
		.video_norm     = V4L2_STD_PAL,
		.audio_channels = 1,
		.radio          = 1,
		.vbi            = 1,
		.tuner          = 1,
		.tuner_type     = TUNER_PHILIPS_PAL,
		.x_offset       = 0,
		.y_offset       = 3,
		.dvi_yuv_override = 1,
		.dvi_yuv        = 7,
		.model_string   = "Hauppauge WinTV USB Pro (PAL I FM)",
	},
	[HPG_WINTV_PRO_PAL_D_K_FM] = {
		.interface      = 0,
		.codec          = CODEC_SAA7113,
		.video_channels = 3,
		.video_norm     = V4L2_STD_PAL,
		.audio_channels = 1,
		.radio          = 1,
		.vbi            = 1,
		.tuner          = 1,
		.tuner_type     = TUNER_PHILIPS_PAL,
		.x_offset       = 0,
		.y_offset       = 3,
		.dvi_yuv_override = 1,
		.dvi_yuv        = 7,
		.model_string   = "Hauppauge WinTV USB Pro (PAL D/K FM)",
	},
	[HPG_WINTV_PRO_TEMIC_PAL_FM] = {
		.interface      = 0,
		.codec          = CODEC_SAA7113,
		.video_channels = 3,
		.video_norm     = V4L2_STD_PAL,
		.audio_channels = 1,
		.radio          = 1,
		.vbi            = 1,
		.tuner          = 1,
		.tuner_type     = TUNER_MICROTUNE_4049FM5,
		.x_offset       = 0,
		.y_offset       = 3,
		.dvi_yuv_override = 1,
		.dvi_yuv        = 7,
		.model_string   = "Hauppauge WinTV USB Pro (Temic PAL/SECAM B/G/I/D/K/L FM)",
	},
	[HPG_WINTV_PRO_TEMIC_PAL_BG_FM] = {
		.interface      = 0,
		.codec          = CODEC_SAA7113,
		.video_channels = 3,
		.video_norm     = V4L2_STD_PAL,
		.audio_channels = 1,
		.radio          = 1,
		.vbi            = 1,
		.tuner          = 1,
		.tuner_type     = TUNER_MICROTUNE_4049FM5,
		.x_offset       = 0,
		.y_offset       = 3,
		.dvi_yuv_override = 1,
		.dvi_yuv        = 7,
		.model_string   = "Hauppauge WinTV USB Pro (Temic PAL B/G FM)",
	},
	[HPG_WINTV_PRO_PAL_FM] = {
		.interface      = 0,
		.codec          = CODEC_SAA7113,
		.video_channels = 3,
		.video_norm     = V4L2_STD_PAL,
		.audio_channels = 1,
		.radio          = 1,
		.vbi            = 1,
		.tuner          = 1,
		.tuner_type     = TUNER_PHILIPS_FM1216ME_MK3,
		.x_offset       = 0,
		.y_offset       = 3,
		.dvi_yuv_override = 1,
		.dvi_yuv        = 7,
		.model_string   = "Hauppauge WinTV USB Pro (PAL/SECAM B/G/I/D/K/L FM)",
	},
	[HPG_WINTV_PRO_NTSC_MN_FM_V2] = {
		.interface      = 0,
		.codec          = CODEC_SAA7113,
		.video_channels = 3,
		.video_norm     = V4L2_STD_NTSC,
		.audio_channels = 1,
		.radio          = 1,
		.vbi            = 1,
		.tuner          = 1,
		.tuner_type     = TUNER_PHILIPS_NTSC_M,
		.x_offset       = 0,
		.y_offset       = 3,
		.dvi_yuv_override = 1,
		.dvi_yuv        = 7,
		.model_string   = "Hauppauge WinTV USB Pro (NTSC M/N FM) V2",
	},
	[CAMTEL_TVB330] = {
		.interface      = -1,
		.codec          = CODEC_SAA7113,
		.video_channels = 3,
		.video_norm     = V4L2_STD_NTSC,
		.audio_channels = 1,
		.radio          = 1,
		.vbi            = 1,
		.tuner          = 1,
		.tuner_type     = TUNER_PHILIPS_NTSC_M,
		.x_offset       = 5,
		.y_offset       = 5,
		.model_string   = "Camtel Technology USB TV Genie Pro FM Model TVB330",
	},
	[DIGITAL_VIDEO_CREATOR_I] = {
		.interface      = -1,
		.codec          = CODEC_SAA7113,
		.video_channels = 2,
		.video_norm     = V4L2_STD_PAL,
		.audio_channels = 0,
		.radio          = 0,
		.vbi            = 1,
		.tuner          = 0,
		.tuner_type     = 0,
		.x_offset       = 0,
		.y_offset       = 3,
		.dvi_yuv_override = 1,
		.dvi_yuv        = 7,
		.model_string   = "Digital Video Creator I",
	},
	[GLOBAL_VILLAGE_GV_007_NTSC] = {
		.interface      = -1,
		.codec          = CODEC_SAA7111,
		.video_channels = 2,
		.video_norm     = V4L2_STD_NTSC,
		.audio_channels = 0,
		.radio          = 0,
		.vbi            = 1,
		.tuner          = 0,
		.tuner_type     = 0,
		.x_offset       = 82,
		.y_offset       = 20,
		.dvi_yuv_override = 1,
		.dvi_yuv        = 7,
		.model_string   = "Global Village GV-007 (NTSC)",
	},
	[DAZZLE_DVC_50_REV_1_NTSC] = {
		.interface      = 0,
		.codec          = CODEC_SAA7113,
		.video_channels = 2,
		.video_norm     = V4L2_STD_NTSC,
		.audio_channels = 0,
		.radio          = 0,
		.vbi            = 1,
		.tuner          = 0,
		.tuner_type     = 0,
		.x_offset       = 0,
		.y_offset       = 3,
		.dvi_yuv_override = 1,
		.dvi_yuv        = 7,
		.model_string   = "Dazzle Fusion Model DVC-50 Rev 1 (NTSC)",
	},
	[DAZZLE_DVC_80_REV_1_PAL] = {
		.interface      = 0,
		.codec          = CODEC_SAA7113,
		.video_channels = 2,
		.video_norm     = V4L2_STD_PAL,
		.audio_channels = 0,
		.radio          = 0,
		.vbi            = 1,
		.tuner          = 0,
		.tuner_type     = 0,
		.x_offset       = 0,
		.y_offset       = 3,
		.dvi_yuv_override = 1,
		.dvi_yuv        = 7,
		.model_string   = "Dazzle Fusion Model DVC-80 Rev 1 (PAL)",
	},
	[DAZZLE_DVC_90_REV_1_SECAM] = {
		.interface      = 0,
		.codec          = CODEC_SAA7113,
		.video_channels = 2,
		.video_norm     = V4L2_STD_SECAM,
		.audio_channels = 0,
		.radio          = 0,
		.vbi            = 1,
		.tuner          = 0,
		.tuner_type     = 0,
		.x_offset       = 0,
		.y_offset       = 3,
		.dvi_yuv_override = 1,
		.dvi_yuv        = 7,
		.model_string   = "Dazzle Fusion Model DVC-90 Rev 1 (SECAM)",
	},
	[ESKAPE_LABS_MYTV2GO] = {
		.interface      = 0,
		.codec          = CODEC_SAA7113,
		.video_channels = 2,
		.video_norm     = V4L2_STD_PAL,
		.audio_channels = 1,
		.radio          = 1,
		.vbi            = 1,
		.tuner          = 1,
		.tuner_type     = TUNER_PHILIPS_FM1216ME_MK3,
		.x_offset       = 0,
		.y_offset       = 3,
		.dvi_yuv_override = 1,
		.dvi_yuv        = 7,
		.model_string   = "Eskape Labs MyTV2Go",
	},
	[PINNA_PCTV_USB_PAL] = {
		.interface      = -1,
		.codec          = CODEC_SAA7111,
		.video_channels = 3,
		.video_norm     = V4L2_STD_PAL,
		.audio_channels = 1,
		.radio          = 0,
		.vbi            = 0,
		.tuner          = 1,
		.tuner_type     = TUNER_TEMIC_4066FY5_PAL_I,
		.x_offset       = -1,
		.y_offset       = -1,
		.model_string   = "Pinnacle Studio PCTV USB (PAL)",
	},
	[PINNA_PCTV_USB_SECAM] = {
		.interface      = -1,
		.codec          = CODEC_SAA7111,
		.video_channels = 3,
		.video_norm     = V4L2_STD_SECAM,
		.audio_channels = 1,
		.radio          = 0,
		.vbi            = 1,
		.tuner          = 1,
		.tuner_type     = TUNER_PHILIPS_SECAM,
		.x_offset       = -1,
		.y_offset       = -1,
		.model_string   = "Pinnacle Studio PCTV USB (SECAM)",
	},
	[PINNA_PCTV_USB_PAL_FM] = {
		.interface      = -1,
		.codec          = CODEC_SAA7111,
		.video_channels = 3,
		.video_norm     = V4L2_STD_PAL,
		.audio_channels = 1,
		.radio          = 1,
		.vbi            = 1,
		.tuner          = 1,
		.tuner_type     = TUNER_PHILIPS_PAL,
		.x_offset       = 128,
		.y_offset       = 23,
		.model_string   = "Pinnacle Studio PCTV USB (PAL) FM",
	},
	[MIRO_PCTV_USB] = {
		.interface      = -1,
		.codec          = CODEC_SAA7111,
		.video_channels = 3,
		.video_norm     = V4L2_STD_PAL,
		.audio_channels = 1,
		.radio          = 0,
		.vbi            = 1,
		.tuner          = 1,
		.tuner_type     = TUNER_PHILIPS_PAL,
		.x_offset       = -1,
		.y_offset       = -1,
		.model_string   = "Miro PCTV USB",
	},
	[PINNA_PCTV_USB_NTSC_FM] = {
		.interface      = -1,
		.codec          = CODEC_SAA7111,
		.video_channels = 3,
		.video_norm     = V4L2_STD_NTSC,
		.audio_channels = 1,
		.radio          = 1,
		.vbi            = 1,
		.tuner          = 1,
		.tuner_type     = TUNER_PHILIPS_NTSC_M,
		.x_offset       = -1,
		.y_offset       = -1,
		.model_string   = "Pinnacle Studio PCTV USB (NTSC) FM",
	},
	[PINNA_PCTV_USB_NTSC_FM_V3] = {
		.interface      = -1,
		.codec          = CODEC_SAA7111,
		.video_channels = 3,
		.video_norm     = V4L2_STD_NTSC,
		.audio_channels = 1,
		.radio          = 1,
		.vbi            = 1,
		.tuner          = 1,
		.tuner_type     = TUNER_PHILIPS_NTSC_M,
		.x_offset       = -1,
		.y_offset       = -1,
		.model_string   = "Pinnacle Studio PCTV USB (NTSC) FM V3",
	},
	[PINNA_PCTV_USB_PAL_FM_V2] = {
		.interface      = -1,
		.codec          = CODEC_SAA7113,
		.video_channels = 3,
		.video_norm     = V4L2_STD_PAL,
		.audio_channels = 1,
		.radio          = 1,
		.vbi            = 1,
		.tuner          = 1,
		.tuner_type     = TUNER_TEMIC_4009FR5_PAL,
		.x_offset       = 0,
		.y_offset       = 3,
		.dvi_yuv_override = 1,
		.dvi_yuv        = 7,
		.model_string   = "Pinnacle Studio PCTV USB (PAL) FM V2",
	},
	[PINNA_PCTV_USB_NTSC_FM_V2] = {
		.interface      = -1,
		.codec          = CODEC_SAA7111,
		.video_channels = 3,
		.video_norm     = V4L2_STD_NTSC,
		.audio_channels = 1,
		.radio          = 1,
		.vbi            = 1,
		.tuner          = 1,
		.tuner_type     = TUNER_TEMIC_4039FR5_NTSC,
		.x_offset       = 0,
		.y_offset       = 3,
		.dvi_yuv_override = 1,
		.dvi_yuv        = 7,
		.model_string   = "Pinnacle Studio PCTV USB (NTSC) FM V2",
	},
	[PINNA_PCTV_USB_PAL_FM_V3] = {
		.interface      = -1,
		.codec          = CODEC_SAA7113,
		.video_channels = 3,
		.video_norm     = V4L2_STD_PAL,
		.audio_channels = 1,
		.radio          = 1,
		.vbi            = 1,
		.tuner          = 1,
		.tuner_type     = TUNER_TEMIC_4009FR5_PAL,
		.x_offset       = 0,
		.y_offset       = 3,
		.dvi_yuv_override = 1,
		.dvi_yuv        = 7,
		.model_string   = "Pinnacle Studio PCTV USB (PAL) FM V3",
	},
	[PINNA_LINX_VD_IN_CAB_NTSC] = {
		.interface      = -1,
		.codec          = CODEC_SAA7113,
		.video_channels = 2,
		.video_norm     = V4L2_STD_NTSC,
		.audio_channels = 1,
		.radio          = 0,
		.vbi            = 1,
		.tuner          = 0,
		.tuner_type     = 0,
		.x_offset       = 0,
		.y_offset       = 3,
		.dvi_yuv_override = 1,
		.dvi_yuv        = 7,
		.model_string   = "Pinnacle Studio Linx Video input cable (NTSC)",
	},
	[PINNA_LINX_VD_IN_CAB_PAL] = {
		.interface      = -1,
		.codec          = CODEC_SAA7113,
		.video_channels = 2,
		.video_norm     = V4L2_STD_PAL,
		.audio_channels = 1,
		.radio          = 0,
		.vbi            = 1,
		.tuner          = 0,
		.tuner_type     = 0,
		.x_offset       = 0,
		.y_offset       = 3,
		.dvi_yuv_override = 1,
		.dvi_yuv        = 7,
		.model_string   = "Pinnacle Studio Linx Video input cable (PAL)",
	},
	[PINNA_PCTV_BUNGEE_PAL_FM] = {
		.interface      = -1,
		.codec          = CODEC_SAA7113,
		.video_channels = 3,
		.video_norm     = V4L2_STD_PAL,
		.audio_channels = 1,
		.radio          = 1,
		.vbi            = 1,
		.tuner          = 1,
		.tuner_type     = TUNER_TEMIC_4009FR5_PAL,
		.x_offset       = 0,
		.y_offset       = 3,
		.dvi_yuv_override = 1,
		.dvi_yuv        = 7,
		.model_string   = "Pinnacle PCTV Bungee USB (PAL) FM",
	},
	[HPG_WINTV] = {
		.interface      = -1,
		.codec          = CODEC_SAA7111,
		.video_channels = 3,
		.video_norm     = V4L2_STD_NTSC,
		.audio_channels = 1,
		.radio          = 0,
		.vbi            = 1,
		.tuner          = 1,
		.tuner_type     = TUNER_PHILIPS_NTSC_M,
		.x_offset       = -1,
		.y_offset       = -1,
		.model_string   = "Hauppauge WinTv-USB",
	},
	[MICROCAM_NTSC] = {
		.interface      = -1,
		.codec          = CODEC_WEBCAM,
		.video_channels = 1,
		.video_norm     = V4L2_STD_NTSC,
		.audio_channels = 0,
		.radio          = 0,
		.vbi            = 0,
		.tuner          = 0,
		.tuner_type     = 0,
		.x_offset       = 71,
		.y_offset       = 15,
		.model_string   = "Nogatech USB MicroCam NTSC (NV3000N)",
	},
	[MICROCAM_PAL] = {
		.interface      = -1,
		.codec          = CODEC_WEBCAM,
		.video_channels = 1,
		.video_norm     = V4L2_STD_PAL,
		.audio_channels = 0,
		.radio          = 0,
		.vbi            = 0,
		.tuner          = 0,
		.tuner_type     = 0,
		.x_offset       = 71,
		.y_offset       = 18,
		.model_string   = "Nogatech USB MicroCam PAL (NV3001P)",
	},
};
const int usbvision_device_data_size = ARRAY_SIZE(usbvision_device_data);

/* Supported Devices */

struct usb_device_id usbvision_table[] = {
	{ USB_DEVICE(0x0a6f, 0x0400), .driver_info = XANBOO },
	{ USB_DEVICE(0x050d, 0x0106), .driver_info = BELKIN_VIDEOBUS_II },
	{ USB_DEVICE(0x050d, 0x0207), .driver_info = BELKIN_VIDEOBUS },
	{ USB_DEVICE(0x050d, 0x0208), .driver_info = BELKIN_USB_VIDEOBUS_II },
	{ USB_DEVICE(0x0571, 0x0002), .driver_info = ECHOFX_INTERVIEW_LITE },
	{ USB_DEVICE(0x0573, 0x0003), .driver_info = USBGEAR_USBG_V1 },
	{ USB_DEVICE(0x0573, 0x0400), .driver_info = D_LINK_V100 },
	{ USB_DEVICE(0x0573, 0x2000), .driver_info = X10_USB_CAMERA },
	{ USB_DEVICE(0x0573, 0x2d00), .driver_info = HPG_WINTV_LIVE_PAL_BG },
	{ USB_DEVICE(0x0573, 0x2d01), .driver_info = HPG_WINTV_LIVE_PRO_NTSC_MN },
	{ USB_DEVICE(0x0573, 0x2101), .driver_info = ZORAN_PMD_NOGATECH },
	{ USB_DEVICE(0x0573, 0x3000), .driver_info = MICROCAM_NTSC },
	{ USB_DEVICE(0x0573, 0x3001), .driver_info = MICROCAM_PAL },
	{ USB_DEVICE(0x0573, 0x4100), .driver_info = NOGATECH_USB_TV_NTSC_FM },
	{ USB_DEVICE(0x0573, 0x4110), .driver_info = PNY_USB_TV_NTSC_FM },
	{ USB_DEVICE(0x0573, 0x4450), .driver_info = PV_PLAYTV_USB_PRO_PAL_FM },
	{ USB_DEVICE(0x0573, 0x4550), .driver_info = ZT_721 },
	{ USB_DEVICE(0x0573, 0x4d00), .driver_info = HPG_WINTV_NTSC_MN },
	{ USB_DEVICE(0x0573, 0x4d01), .driver_info = HPG_WINTV_PAL_BG },
	{ USB_DEVICE(0x0573, 0x4d02), .driver_info = HPG_WINTV_PAL_I },
	{ USB_DEVICE(0x0573, 0x4d03), .driver_info = HPG_WINTV_PAL_SECAM_L },
	{ USB_DEVICE(0x0573, 0x4d04), .driver_info = HPG_WINTV_PAL_D_K },
	{ USB_DEVICE(0x0573, 0x4d10), .driver_info = HPG_WINTV_NTSC_FM },
	{ USB_DEVICE(0x0573, 0x4d11), .driver_info = HPG_WINTV_PAL_BG_FM },
	{ USB_DEVICE(0x0573, 0x4d12), .driver_info = HPG_WINTV_PAL_I_FM },
	{ USB_DEVICE(0x0573, 0x4d14), .driver_info = HPG_WINTV_PAL_D_K_FM },
	{ USB_DEVICE(0x0573, 0x4d2a), .driver_info = HPG_WINTV_PRO_NTSC_MN },
	{ USB_DEVICE(0x0573, 0x4d2b), .driver_info = HPG_WINTV_PRO_NTSC_MN_V2 },
	{ USB_DEVICE(0x0573, 0x4d2c), .driver_info = HPG_WINTV_PRO_PAL },
	{ USB_DEVICE(0x0573, 0x4d20), .driver_info = HPG_WINTV_PRO_NTSC_MN_V3 },
	{ USB_DEVICE(0x0573, 0x4d21), .driver_info = HPG_WINTV_PRO_PAL_BG },
	{ USB_DEVICE(0x0573, 0x4d22), .driver_info = HPG_WINTV_PRO_PAL_I },
	{ USB_DEVICE(0x0573, 0x4d23), .driver_info = HPG_WINTV_PRO_PAL_SECAM_L },
	{ USB_DEVICE(0x0573, 0x4d24), .driver_info = HPG_WINTV_PRO_PAL_D_K },
	{ USB_DEVICE(0x0573, 0x4d25), .driver_info = HPG_WINTV_PRO_PAL_SECAM },
	{ USB_DEVICE(0x0573, 0x4d26), .driver_info = HPG_WINTV_PRO_PAL_SECAM_V2 },
	{ USB_DEVICE(0x0573, 0x4d27), .driver_info = HPG_WINTV_PRO_PAL_BG_V2 },
	{ USB_DEVICE(0x0573, 0x4d28), .driver_info = HPG_WINTV_PRO_PAL_BG_D_K },
	{ USB_DEVICE(0x0573, 0x4d29), .driver_info = HPG_WINTV_PRO_PAL_I_D_K },
	{ USB_DEVICE(0x0573, 0x4d30), .driver_info = HPG_WINTV_PRO_NTSC_MN_FM },
	{ USB_DEVICE(0x0573, 0x4d31), .driver_info = HPG_WINTV_PRO_PAL_BG_FM },
	{ USB_DEVICE(0x0573, 0x4d32), .driver_info = HPG_WINTV_PRO_PAL_I_FM },
	{ USB_DEVICE(0x0573, 0x4d34), .driver_info = HPG_WINTV_PRO_PAL_D_K_FM },
	{ USB_DEVICE(0x0573, 0x4d35), .driver_info = HPG_WINTV_PRO_TEMIC_PAL_FM },
	{ USB_DEVICE(0x0573, 0x4d36), .driver_info = HPG_WINTV_PRO_TEMIC_PAL_BG_FM },
	{ USB_DEVICE(0x0573, 0x4d37), .driver_info = HPG_WINTV_PRO_PAL_FM },
	{ USB_DEVICE(0x0573, 0x4d38), .driver_info = HPG_WINTV_PRO_NTSC_MN_FM_V2 },
	{ USB_DEVICE(0x0768, 0x0006), .driver_info = CAMTEL_TVB330 },
	{ USB_DEVICE(0x07d0, 0x0001), .driver_info = DIGITAL_VIDEO_CREATOR_I },
	{ USB_DEVICE(0x07d0, 0x0002), .driver_info = GLOBAL_VILLAGE_GV_007_NTSC },
	{ USB_DEVICE(0x07d0, 0x0003), .driver_info = DAZZLE_DVC_50_REV_1_NTSC },
	{ USB_DEVICE(0x07d0, 0x0004), .driver_info = DAZZLE_DVC_80_REV_1_PAL },
	{ USB_DEVICE(0x07d0, 0x0005), .driver_info = DAZZLE_DVC_90_REV_1_SECAM },
	{ USB_DEVICE(0x07f8, 0x9104), .driver_info = ESKAPE_LABS_MYTV2GO },
	{ USB_DEVICE(0x2304, 0x010d), .driver_info = PINNA_PCTV_USB_PAL },
	{ USB_DEVICE(0x2304, 0x0109), .driver_info = PINNA_PCTV_USB_SECAM },
	{ USB_DEVICE(0x2304, 0x0110), .driver_info = PINNA_PCTV_USB_PAL_FM },
	{ USB_DEVICE(0x2304, 0x0111), .driver_info = MIRO_PCTV_USB },
	{ USB_DEVICE(0x2304, 0x0112), .driver_info = PINNA_PCTV_USB_NTSC_FM },
	{ USB_DEVICE(0x2304, 0x0113), .driver_info = PINNA_PCTV_USB_NTSC_FM_V3 },
	{ USB_DEVICE(0x2304, 0x0210), .driver_info = PINNA_PCTV_USB_PAL_FM_V2 },
	{ USB_DEVICE(0x2304, 0x0212), .driver_info = PINNA_PCTV_USB_NTSC_FM_V2 },
	{ USB_DEVICE(0x2304, 0x0214), .driver_info = PINNA_PCTV_USB_PAL_FM_V3 },
	{ USB_DEVICE(0x2304, 0x0300), .driver_info = PINNA_LINX_VD_IN_CAB_NTSC },
	{ USB_DEVICE(0x2304, 0x0301), .driver_info = PINNA_LINX_VD_IN_CAB_PAL },
	{ USB_DEVICE(0x2304, 0x0419), .driver_info = PINNA_PCTV_BUNGEE_PAL_FM },
	{ USB_DEVICE(0x2400, 0x4200), .driver_info = HPG_WINTV },
	{ },    /* terminate list */
};

MODULE_DEVICE_TABLE(usb, usbvision_table);
