aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/video/usbvision
diff options
context:
space:
mode:
authorPaul Mackerras <paulus@samba.org>2007-04-29 22:38:01 -0400
committerPaul Mackerras <paulus@samba.org>2007-04-29 22:38:01 -0400
commit49e1900d4cc2e7bcecb681fe60f0990bec2dcce8 (patch)
tree253801ebf57e0a23856a2c7be129c2c178f62fdf /drivers/media/video/usbvision
parent34f6d749c0a328817d5e36274e53121c1db734dc (diff)
parentb9099ff63c75216d6ca10bce5a1abcd9293c27e6 (diff)
Merge branch 'linux-2.6' into for-2.6.22
Diffstat (limited to 'drivers/media/video/usbvision')
-rw-r--r--drivers/media/video/usbvision/usbvision-cards.c1165
-rw-r--r--drivers/media/video/usbvision/usbvision-cards.h66
-rw-r--r--drivers/media/video/usbvision/usbvision-core.c10
-rw-r--r--drivers/media/video/usbvision/usbvision-i2c.c104
-rw-r--r--drivers/media/video/usbvision/usbvision-video.c173
-rw-r--r--drivers/media/video/usbvision/usbvision.h39
6 files changed, 1205 insertions, 352 deletions
diff --git a/drivers/media/video/usbvision/usbvision-cards.c b/drivers/media/video/usbvision/usbvision-cards.c
index a40e5838515b..13f69fe6360d 100644
--- a/drivers/media/video/usbvision/usbvision-cards.c
+++ b/drivers/media/video/usbvision/usbvision-cards.c
@@ -1,6 +1,6 @@
1/* 1/*
2 * USBVISION.H 2 * usbvision-cards.c
3 * usbvision header file 3 * usbvision cards definition file
4 * 4 *
5 * Copyright (c) 1999-2005 Joerg Heckenbach <joerg@heckenbach-aw.de> 5 * Copyright (c) 1999-2005 Joerg Heckenbach <joerg@heckenbach-aw.de>
6 * 6 *
@@ -28,129 +28,1060 @@
28#include <media/v4l2-dev.h> 28#include <media/v4l2-dev.h>
29#include <media/tuner.h> 29#include <media/tuner.h>
30#include "usbvision.h" 30#include "usbvision.h"
31#include "usbvision-cards.h"
31 32
32/* Supported Devices: A table for usbvision.c*/ 33/* Supported Devices: A table for usbvision.c*/
33struct usbvision_device_data_st usbvision_device_data[] = { 34struct usbvision_device_data_st usbvision_device_data[] = {
34 {0xFFF0, 0xFFF0, -1, CODEC_SAA7111, 3, V4L2_STD_NTSC, 1, 1, 1, 1, TUNER_PHILIPS_NTSC_M, -1, -1, -1, -1, -1, "Custom Dummy USBVision Device"}, 35 [XANBOO] = {
35 {0x0A6F, 0x0400, -1, CODEC_SAA7113, 4, V4L2_STD_NTSC, 1, 0, 1, 0, 0, -1, -1, -1, -1, -1, "Xanboo"}, 36 .Interface = -1,
36 {0x050D, 0x0208, -1, CODEC_SAA7113, 2, V4L2_STD_PAL, 1, 0, 1, 0, 0, -1, -1, 0, 3, 7, "Belkin USBView II"}, 37 .Codec = CODEC_SAA7113,
37 {0x0571, 0x0002, 0, CODEC_SAA7111, 2, V4L2_STD_PAL, 0, 0, 1, 0, 0, -1, -1, -1, -1, 7, "echoFX InterView Lite"}, 38 .VideoChannels = 4,
38 {0x0573, 0x0003, -1, CODEC_SAA7111, 2, V4L2_STD_NTSC, 1, 0, 1, 0, 0, -1, -1, -1, -1, -1, "USBGear USBG-V1 resp. HAMA USB"}, 39 .VideoNorm = V4L2_STD_NTSC,
39 {0x0573, 0x0400, -1, CODEC_SAA7113, 4, V4L2_STD_NTSC, 0, 0, 1, 0, 0, -1, -1, 0, 3, 7, "D-Link V100"}, 40 .AudioChannels = 1,
40 {0x0573, 0x2000, -1, CODEC_SAA7111, 2, V4L2_STD_NTSC, 1, 0, 1, 0, 0, -1, -1, -1, -1, -1, "X10 USB Camera"}, 41 .Radio = 0,
41 {0x0573, 0x2d00, -1, CODEC_SAA7111, 2, V4L2_STD_PAL, 1, 0, 1, 0, 0, -1, -1, -1, 3, 7, "Osprey 50"}, 42 .vbi = 1,
42 {0x0573, 0x2d01, -1, CODEC_SAA7113, 2, V4L2_STD_NTSC, 0, 0, 1, 0, 0, -1, -1, 0, 3, 7, "Hauppauge USB-Live Model 600"}, 43 .Tuner = 0,
43 {0x0573, 0x2101, -1, CODEC_SAA7113, 2, V4L2_STD_PAL, 2, 0, 1, 0, 0, -1, -1, 0, 3, 7, "Zoran Co. PMD (Nogatech) AV-grabber Manhattan"}, 44 .TunerType = 0,
44 {0x0573, 0x4100, -1, CODEC_SAA7111, 3, V4L2_STD_NTSC, 1, 1, 1, 1, TUNER_PHILIPS_NTSC_M, -1, -1, -1, 20, -1, "Nogatech USB-TV (NTSC) FM"}, 45 .X_Offset = -1,
45 {0x0573, 0x4110, -1, CODEC_SAA7111, 3, V4L2_STD_NTSC, 1, 1, 1, 1, TUNER_PHILIPS_NTSC_M, -1, -1, -1, 20, -1, "PNY USB-TV (NTSC) FM"}, 46 .Y_Offset = -1,
46 {0x0573, 0x4450, 0, CODEC_SAA7113, 3, V4L2_STD_PAL, 1, 1, 1, 1, TUNER_PHILIPS_PAL, -1, -1, 0, 3, 7, "PixelView PlayTv-USB PRO (PAL) FM"}, 47 .ModelString = "Xanboo",
47 {0x0573, 0x4550, 0, CODEC_SAA7113, 3, V4L2_STD_PAL, 1, 1, 1, 1, TUNER_PHILIPS_PAL, -1, -1, 0, 3, 7, "ZTV ZT-721 2.4GHz USB A/V Receiver"}, 48 },
48 {0x0573, 0x4d00, -1, CODEC_SAA7111, 3, V4L2_STD_NTSC, 1, 0, 1, 1, TUNER_PHILIPS_NTSC_M, -1, -1, -1, 20, -1, "Hauppauge WinTv-USB USA"}, 49 [BELKIN_VIDEOBUS_II] = {
49 {0x0573, 0x4d01, -1, CODEC_SAA7111, 3, V4L2_STD_NTSC, 1, 0, 1, 1, TUNER_PHILIPS_NTSC_M, -1, -1, -1, -1, -1, "Hauppauge WinTv-USB"}, 50 .Interface = -1,
50 {0x0573, 0x4d02, -1, CODEC_SAA7111, 3, V4L2_STD_NTSC, 1, 0, 1, 1, TUNER_PHILIPS_NTSC_M, -1, -1, -1, -1, -1, "Hauppauge WinTv-USB (NTSC)"}, 51 .Codec = CODEC_SAA7113,
51 {0x0573, 0x4d03, -1, CODEC_SAA7111, 3, V4L2_STD_SECAM, 1, 0, 1, 1, TUNER_PHILIPS_SECAM, -1, -1, -1, -1, -1, "Hauppauge WinTv-USB (SECAM) "}, 52 .VideoChannels = 2,
52 {0x0573, 0x4d10, -1, CODEC_SAA7111, 3, V4L2_STD_NTSC, 1, 1, 1, 1, TUNER_PHILIPS_NTSC_M, -1, -1, -1, -1, -1, "Hauppauge WinTv-USB (NTSC) FM"}, 53 .VideoNorm = V4L2_STD_PAL,
53 {0x0573, 0x4d11, -1, CODEC_SAA7111, 3, V4L2_STD_PAL, 1, 1, 1, 1, TUNER_PHILIPS_PAL, -1, -1, -1, -1, -1, "Hauppauge WinTv-USB (PAL) FM"}, 54 .AudioChannels = 1,
54 {0x0573, 0x4d12, -1, CODEC_SAA7111, 3, V4L2_STD_PAL, 1, 1, 1, 1, TUNER_PHILIPS_PAL, -1, -1, -1, -1, -1, "Hauppauge WinTv-USB (PAL) FM"}, 55 .Radio = 0,
55 {0x0573, 0x4d2a, 0, CODEC_SAA7113, 3, V4L2_STD_NTSC, 1, 1, 1, 1, TUNER_MICROTUNE_4049FM5, -1, -1, 0, 3, 7, "Hauppauge WinTv USB (NTSC) FM Model 602 40201 Rev B285"}, 56 .vbi = 1,
56 {0x0573, 0x4d2b, 0, CODEC_SAA7113, 3, V4L2_STD_NTSC, 1, 1, 1, 1, TUNER_MICROTUNE_4049FM5, -1, -1, 0, 3, 7, "Hauppauge WinTv USB (NTSC) FM Model 602 40201 Rev B282"}, 57 .Tuner = 0,
57 {0x0573, 0x4d2c, 0, CODEC_SAA7113, 3, V4L2_STD_PAL, 1, 0, 1, 1, TUNER_PHILIPS_FM1216ME_MK3, -1, -1, 0, 3, 7, "Hauppauge WinTv USB (PAL/SECAM) 40209 Rev E1A5"}, 58 .TunerType = 0,
58 {0x0573, 0x4d20, 0, CODEC_SAA7113, 3, V4L2_STD_PAL, 1, 1, 1, 1, TUNER_PHILIPS_PAL, -1, -1, 0, 3, 7, "Hauppauge WinTv-USB II (PAL) FM Model 40201 Rev B226"}, 59 .X_Offset = 0,
59 {0x0573, 0x4d21, 0, CODEC_SAA7113, 3, V4L2_STD_PAL, 1, 0, 1, 1, TUNER_PHILIPS_PAL, -1, -1, 0, 3, 7, "Hauppauge WinTv-USB II (PAL)"}, 60 .Y_Offset = 3,
60 {0x0573, 0x4d22, 0, CODEC_SAA7113, 3, V4L2_STD_PAL, 1, 0, 1, 1, TUNER_PHILIPS_PAL, -1, -1, 0, 3, 7, "Hauppauge WinTv-USB II (PAL) MODEL 566"}, 61 .Dvi_yuv_override = 1,
61 {0x0573, 0x4d23, -1, CODEC_SAA7113, 3, V4L2_STD_SECAM, 1, 0, 1, 1, TUNER_PHILIPS_SECAM, -1, -1, 0, 3, 7, "Hauppauge WinTv-USB (SECAM) 4D23"}, 62 .Dvi_yuv = 7,
62 {0x0573, 0x4d25, -1, CODEC_SAA7113, 3, V4L2_STD_SECAM, 1, 0, 1, 1, TUNER_PHILIPS_SECAM, -1, -1, 0, 3, 7, "Hauppauge WinTv-USB (SECAM) Model 40209 Rev B234"}, 63 .ModelString = "Belkin USB VideoBus II Adapter",
63 {0x0573, 0x4d26, -1, CODEC_SAA7113, 3, V4L2_STD_SECAM, 1, 0, 1, 1, TUNER_PHILIPS_SECAM, -1, -1, 0, 3, 7, "Hauppauge WinTv-USB (SECAM) Model 40209 Rev B243"}, 64 },
64 {0x0573, 0x4d27, -1, CODEC_SAA7113, 3, V4L2_STD_PAL, 1, 0, 1, 1, TUNER_ALPS_TSBE1_PAL, -1, -1, 0, 3, 7, "Hauppauge WinTv-USB Model 40204 Rev B281"}, 65 [BELKIN_VIDEOBUS] = {
65 {0x0573, 0x4d28, -1, CODEC_SAA7113, 3, V4L2_STD_PAL, 1, 0, 1, 1, TUNER_ALPS_TSBE1_PAL, -1, -1, 0, 3, 7, "Hauppauge WinTv-USB Model 40204 Rev B283"}, 66 .Interface = -1,
66 {0x0573, 0x4d29, -1, CODEC_SAA7113, 3, V4L2_STD_PAL, 1, 0, 1, 1, TUNER_PHILIPS_PAL, -1, -1, 0, 3, 7, "Hauppauge WinTv-USB Model 40205 Rev B298"}, 67 .Codec = CODEC_SAA7111,
67 {0x0573, 0x4d30, -1, CODEC_SAA7113, 3, V4L2_STD_NTSC, 1, 1, 1, 1, TUNER_PHILIPS_NTSC_M, -1, -1, 0, 3, 7, "Hauppauge WinTv-USB FM Model 40211 Rev B123"}, 68 .VideoChannels = 2,
68 {0x0573, 0x4d31, 0, CODEC_SAA7113, 3, V4L2_STD_PAL, 1, 1, 1, 1, TUNER_PHILIPS_PAL, -1, -1, 0, 3, 7, "Hauppauge WinTv-USB III (PAL) FM Model 568"}, 69 .VideoNorm = V4L2_STD_NTSC,
69 {0x0573, 0x4d32, 0, CODEC_SAA7113, 3, V4L2_STD_PAL, 1, 1, 1, 1, TUNER_PHILIPS_PAL, -1, -1, 0, 3, 7, "Hauppauge WinTv-USB III (PAL) FM Model 573"}, 70 .AudioChannels = 1,
70 {0x0573, 0x4d35, 0, CODEC_SAA7113, 3, V4L2_STD_PAL, 1, 1, 1, 1, TUNER_MICROTUNE_4049FM5, -1, -1, 0, 3, 7, "Hauppauge WinTv-USB III (PAL) FM Model 40219 Rev B252"}, 71 .Radio = 0,
71 {0x0573, 0x4d37, 0, CODEC_SAA7113, 3, V4L2_STD_PAL, 1, 1, 1, 1, TUNER_PHILIPS_FM1216ME_MK3, -1, -1, 0, 3, 7, "Hauppauge WinTV USB device Model 40219 Rev E189"}, 72 .vbi = 1,
72 {0x0768, 0x0006, -1, CODEC_SAA7113, 3, V4L2_STD_NTSC, 1, 1, 1, 1, TUNER_PHILIPS_NTSC_M, -1, -1, 5, 5, -1, "Camtel Technology USB TV Genie Pro FM Model TVB330"}, 73 .Tuner = 0,
73 {0x07d0, 0x0001, -1, CODEC_SAA7113, 2, V4L2_STD_PAL, 0, 0, 1, 0, 0, -1, -1, 0, 3, 7, "Digital Video Creator I"}, 74 .TunerType = 0,
74 {0x07d0, 0x0002, -1, CODEC_SAA7111, 2, V4L2_STD_NTSC, 0, 0, 1, 0, 0, -1, -1, 82, 20, 7, "Global Village GV-007 (NTSC)"}, 75 .X_Offset = -1,
75 {0x07d0, 0x0003, 0, CODEC_SAA7113, 2, V4L2_STD_NTSC, 0, 0, 1, 0, 0, -1, -1, 0, 3, 7, "Dazzle Fusion Model DVC-50 Rev 1 (NTSC)"}, 76 .Y_Offset = -1,
76 {0x07d0, 0x0004, 0, CODEC_SAA7113, 2, V4L2_STD_PAL, 0, 0, 1, 0, 0, -1, -1, 0, 3, 7, "Dazzle Fusion Model DVC-80 Rev 1 (PAL)"}, 77 .ModelString = "Belkin Components USB VideoBus",
77 {0x07d0, 0x0005, 0, CODEC_SAA7113, 2, V4L2_STD_SECAM, 0, 0, 1, 0, 0, -1, -1, 0, 3, 7, "Dazzle Fusion Model DVC-90 Rev 1 (SECAM)"}, 78 },
78 {0x2304, 0x010d, -1, CODEC_SAA7111, 3, V4L2_STD_PAL, 1, 0, 0, 1, TUNER_TEMIC_4066FY5_PAL_I, -1, -1, -1, -1, -1, "Pinnacle Studio PCTV USB (PAL)"}, 79 [BELKIN_USB_VIDEOBUS_II] = {
79 {0x2304, 0x0109, -1, CODEC_SAA7111, 3, V4L2_STD_SECAM, 1, 0, 1, 1, TUNER_PHILIPS_SECAM, -1, -1, -1, -1, -1, "Pinnacle Studio PCTV USB (SECAM)"}, 80 .Interface = -1,
80 {0x2304, 0x0110, -1, CODEC_SAA7111, 3, V4L2_STD_PAL, 1, 1, 1, 1, TUNER_PHILIPS_PAL, -1, -1,128, 23, -1, "Pinnacle Studio PCTV USB (PAL) FM"}, 81 .Codec = CODEC_SAA7113,
81 {0x2304, 0x0111, -1, CODEC_SAA7111, 3, V4L2_STD_PAL, 1, 0, 1, 1, TUNER_PHILIPS_PAL, -1, -1, -1, -1, -1, "Miro PCTV USB"}, 82 .VideoChannels = 2,
82 {0x2304, 0x0112, -1, CODEC_SAA7111, 3, V4L2_STD_NTSC, 1, 1, 1, 1, TUNER_PHILIPS_NTSC_M, -1, -1, -1, -1, -1, "Pinnacle Studio PCTV USB (NTSC) FM"}, 83 .VideoNorm = V4L2_STD_PAL,
83 {0x2304, 0x0210, -1, CODEC_SAA7113, 3, V4L2_STD_PAL, 1, 1, 1, 1, TUNER_TEMIC_4009FR5_PAL, -1, -1, 0, 3, 7, "Pinnacle Studio PCTV USB (PAL) FM"}, 84 .AudioChannels = 1,
84 {0x2304, 0x0212, -1, CODEC_SAA7111, 3, V4L2_STD_NTSC, 1, 1, 1, 1, TUNER_TEMIC_4039FR5_NTSC, -1, -1, 0, 3, 7, "Pinnacle Studio PCTV USB (NTSC) FM"}, 85 .Radio = 0,
85 {0x2304, 0x0214, -1, CODEC_SAA7113, 3, V4L2_STD_PAL, 1, 1, 1, 1, TUNER_TEMIC_4009FR5_PAL, -1, -1, 0, 3, 7, "Pinnacle Studio PCTV USB (PAL) FM"}, 86 .vbi = 1,
86 {0x2304, 0x0300, -1, CODEC_SAA7113, 2, V4L2_STD_NTSC, 1, 0, 1, 0, 0, -1, -1, 0, 3, 7, "Pinnacle Studio Linx Video input cable (NTSC)"}, 87 .Tuner = 0,
87 {0x2304, 0x0301, -1, CODEC_SAA7113, 2, V4L2_STD_PAL, 1, 0, 1, 0, 0, -1, -1, 0, 3, 7, "Pinnacle Studio Linx Video input cable (PAL)"}, 88 .TunerType = 0,
88 {0x2304, 0x0419, -1, CODEC_SAA7113, 3, V4L2_STD_PAL, 1, 1, 1, 1, TUNER_TEMIC_4009FR5_PAL, -1, -1, 0, 3, 7, "Pinnacle PCTV Bungee USB (PAL) FM"}, 89 .X_Offset = 0,
89 {0x2400, 0x4200, -1, CODEC_SAA7111, 3, V4L2_STD_NTSC, 1, 0, 1, 1, TUNER_PHILIPS_NTSC_M, -1, -1, -1, -1, -1, "Hauppauge WinTv-USB"}, 90 .Y_Offset = 3,
90 {} /* Terminating entry */ 91 .Dvi_yuv_override = 1,
92 .Dvi_yuv = 7,
93 .ModelString = "Belkin USB VideoBus II",
94 },
95 [ECHOFX_INTERVIEW_LITE] = {
96 .Interface = 0,
97 .Codec = CODEC_SAA7111,
98 .VideoChannels = 2,
99 .VideoNorm = V4L2_STD_PAL,
100 .AudioChannels = 0,
101 .Radio = 0,
102 .vbi = 1,
103 .Tuner = 0,
104 .TunerType = 0,
105 .X_Offset = -1,
106 .Y_Offset = -1,
107 .Dvi_yuv_override = 1,
108 .Dvi_yuv = 7,
109 .ModelString = "echoFX InterView Lite",
110 },
111 [USBGEAR_USBG_V1] = {
112 .Interface = -1,
113 .Codec = CODEC_SAA7111,
114 .VideoChannels = 2,
115 .VideoNorm = V4L2_STD_NTSC,
116 .AudioChannels = 1,
117 .Radio = 0,
118 .vbi = 1,
119 .Tuner = 0,
120 .TunerType = 0,
121 .X_Offset = -1,
122 .Y_Offset = -1,
123 .ModelString = "USBGear USBG-V1 resp. HAMA USB",
124 },
125 [D_LINK_V100] = {
126 .Interface = -1,
127 .Codec = CODEC_SAA7113,
128 .VideoChannels = 4,
129 .VideoNorm = V4L2_STD_NTSC,
130 .AudioChannels = 0,
131 .Radio = 0,
132 .vbi = 1,
133 .Tuner = 0,
134 .TunerType = 0,
135 .X_Offset = 0,
136 .Y_Offset = 3,
137 .Dvi_yuv_override = 1,
138 .Dvi_yuv = 7,
139 .ModelString = "D-Link V100",
140 },
141 [X10_USB_CAMERA] = {
142 .Interface = -1,
143 .Codec = CODEC_SAA7111,
144 .VideoChannels = 2,
145 .VideoNorm = V4L2_STD_NTSC,
146 .AudioChannels = 1,
147 .Radio = 0,
148 .vbi = 1,
149 .Tuner = 0,
150 .TunerType = 0,
151 .X_Offset = -1,
152 .Y_Offset = -1,
153 .ModelString = "X10 USB Camera",
154 },
155 [HPG_WINTV_LIVE_PAL_BG] = {
156 .Interface = -1,
157 .Codec = CODEC_SAA7111,
158 .VideoChannels = 2,
159 .VideoNorm = V4L2_STD_PAL,
160 .AudioChannels = 1,
161 .Radio = 0,
162 .vbi = 1,
163 .Tuner = 0,
164 .TunerType = 0,
165 .X_Offset = -1,
166 .Y_Offset = 3,
167 .Dvi_yuv_override = 1,
168 .Dvi_yuv = 7,
169 .ModelString = "Hauppauge WinTV USB Live (PAL B/G)",
170 },
171 [HPG_WINTV_LIVE_PRO_NTSC_MN] = {
172 .Interface = -1,
173 .Codec = CODEC_SAA7113,
174 .VideoChannels = 2,
175 .VideoNorm = V4L2_STD_NTSC,
176 .AudioChannels = 0,
177 .Radio = 0,
178 .vbi = 1,
179 .Tuner = 0,
180 .TunerType = 0,
181 .X_Offset = 0,
182 .Y_Offset = 3,
183 .Dvi_yuv_override = 1,
184 .Dvi_yuv = 7,
185 .ModelString = "Hauppauge WinTV USB Live Pro (NTSC M/N)",
186 },
187 [ZORAN_PMD_NOGATECH] = {
188 .Interface = -1,
189 .Codec = CODEC_SAA7113,
190 .VideoChannels = 2,
191 .VideoNorm = V4L2_STD_PAL,
192 .AudioChannels = 2,
193 .Radio = 0,
194 .vbi = 1,
195 .Tuner = 0,
196 .TunerType = 0,
197 .X_Offset = 0,
198 .Y_Offset = 3,
199 .Dvi_yuv_override = 1,
200 .Dvi_yuv = 7,
201 .ModelString = "Zoran Co. PMD (Nogatech) AV-grabber Manhattan",
202 },
203 [NOGATECH_USB_TV_NTSC_FM] = {
204 .Interface = -1,
205 .Codec = CODEC_SAA7111,
206 .VideoChannels = 3,
207 .VideoNorm = V4L2_STD_NTSC,
208 .AudioChannels = 1,
209 .Radio = 1,
210 .vbi = 1,
211 .Tuner = 1,
212 .TunerType = TUNER_PHILIPS_NTSC_M,
213 .X_Offset = -1,
214 .Y_Offset = 20,
215 .ModelString = "Nogatech USB-TV (NTSC) FM",
216 },
217 [PNY_USB_TV_NTSC_FM] = {
218 .Interface = -1,
219 .Codec = CODEC_SAA7111,
220 .VideoChannels = 3,
221 .VideoNorm = V4L2_STD_NTSC,
222 .AudioChannels = 1,
223 .Radio = 1,
224 .vbi = 1,
225 .Tuner = 1,
226 .TunerType = TUNER_PHILIPS_NTSC_M,
227 .X_Offset = -1,
228 .Y_Offset = 20,
229 .ModelString = "PNY USB-TV (NTSC) FM",
230 },
231 [PV_PLAYTV_USB_PRO_PAL_FM] = {
232 .Interface = 0,
233 .Codec = CODEC_SAA7113,
234 .VideoChannels = 3,
235 .VideoNorm = V4L2_STD_PAL,
236 .AudioChannels = 1,
237 .Radio = 1,
238 .vbi = 1,
239 .Tuner = 1,
240 .TunerType = TUNER_PHILIPS_PAL,
241 .X_Offset = 0,
242 .Y_Offset = 3,
243 .Dvi_yuv_override = 1,
244 .Dvi_yuv = 7,
245 .ModelString = "PixelView PlayTv-USB PRO (PAL) FM",
246 },
247 [ZT_721] = {
248 .Interface = 0,
249 .Codec = CODEC_SAA7113,
250 .VideoChannels = 3,
251 .VideoNorm = V4L2_STD_PAL,
252 .AudioChannels = 1,
253 .Radio = 1,
254 .vbi = 1,
255 .Tuner = 1,
256 .TunerType = TUNER_PHILIPS_PAL,
257 .X_Offset = 0,
258 .Y_Offset = 3,
259 .Dvi_yuv_override = 1,
260 .Dvi_yuv = 7,
261 .ModelString = "ZTV ZT-721 2.4GHz USB A/V Receiver",
262 },
263 [HPG_WINTV_NTSC_MN] = {
264 .Interface = -1,
265 .Codec = CODEC_SAA7111,
266 .VideoChannels = 3,
267 .VideoNorm = V4L2_STD_NTSC,
268 .AudioChannels = 1,
269 .Radio = 0,
270 .vbi = 1,
271 .Tuner = 1,
272 .TunerType = TUNER_PHILIPS_NTSC_M,
273 .X_Offset = -1,
274 .Y_Offset = 20,
275 .ModelString = "Hauppauge WinTV USB (NTSC M/N)",
276 },
277 [HPG_WINTV_PAL_BG] = {
278 .Interface = -1,
279 .Codec = CODEC_SAA7111,
280 .VideoChannels = 3,
281 .VideoNorm = V4L2_STD_PAL,
282 .AudioChannels = 1,
283 .Radio = 0,
284 .vbi = 1,
285 .Tuner = 1,
286 .TunerType = TUNER_PHILIPS_PAL,
287 .X_Offset = -1,
288 .Y_Offset = -1,
289 .ModelString = "Hauppauge WinTV USB (PAL B/G)",
290 },
291 [HPG_WINTV_PAL_I] = {
292 .Interface = -1,
293 .Codec = CODEC_SAA7111,
294 .VideoChannels = 3,
295 .VideoNorm = V4L2_STD_PAL,
296 .AudioChannels = 1,
297 .Radio = 0,
298 .vbi = 1,
299 .Tuner = 1,
300 .TunerType = TUNER_PHILIPS_PAL,
301 .X_Offset = -1,
302 .Y_Offset = -1,
303 .ModelString = "Hauppauge WinTV USB (PAL I)",
304 },
305 [HPG_WINTV_PAL_SECAM_L] = {
306 .Interface = -1,
307 .Codec = CODEC_SAA7111,
308 .VideoChannels = 3,
309 .VideoNorm = V4L2_STD_SECAM,
310 .AudioChannels = 1,
311 .Radio = 0,
312 .vbi = 1,
313 .Tuner = 1,
314 .TunerType = TUNER_PHILIPS_SECAM,
315 .X_Offset = -1,
316 .Y_Offset = -1,
317 .ModelString = "Hauppauge WinTV USB (PAL/SECAM L)",
318 },
319 [HPG_WINTV_PAL_D_K] = {
320 .Interface = -1,
321 .Codec = CODEC_SAA7111,
322 .VideoChannels = 3,
323 .VideoNorm = V4L2_STD_PAL,
324 .AudioChannels = 1,
325 .Radio = 0,
326 .vbi = 1,
327 .Tuner = 1,
328 .TunerType = TUNER_PHILIPS_PAL,
329 .X_Offset = -1,
330 .Y_Offset = -1,
331 .ModelString = "Hauppauge WinTV USB (PAL D/K)",
332 },
333 [HPG_WINTV_NTSC_FM] = {
334 .Interface = -1,
335 .Codec = CODEC_SAA7111,
336 .VideoChannels = 3,
337 .VideoNorm = V4L2_STD_NTSC,
338 .AudioChannels = 1,
339 .Radio = 1,
340 .vbi = 1,
341 .Tuner = 1,
342 .TunerType = TUNER_PHILIPS_NTSC_M,
343 .X_Offset = -1,
344 .Y_Offset = -1,
345 .ModelString = "Hauppauge WinTV USB (NTSC FM)",
346 },
347 [HPG_WINTV_PAL_BG_FM] = {
348 .Interface = -1,
349 .Codec = CODEC_SAA7111,
350 .VideoChannels = 3,
351 .VideoNorm = V4L2_STD_PAL,
352 .AudioChannels = 1,
353 .Radio = 1,
354 .vbi = 1,
355 .Tuner = 1,
356 .TunerType = TUNER_PHILIPS_PAL,
357 .X_Offset = -1,
358 .Y_Offset = -1,
359 .ModelString = "Hauppauge WinTV USB (PAL B/G FM)",
360 },
361 [HPG_WINTV_PAL_I_FM] = {
362 .Interface = -1,
363 .Codec = CODEC_SAA7111,
364 .VideoChannels = 3,
365 .VideoNorm = V4L2_STD_PAL,
366 .AudioChannels = 1,
367 .Radio = 1,
368 .vbi = 1,
369 .Tuner = 1,
370 .TunerType = TUNER_PHILIPS_PAL,
371 .X_Offset = -1,
372 .Y_Offset = -1,
373 .ModelString = "Hauppauge WinTV USB (PAL I FM)",
374 },
375 [HPG_WINTV_PAL_D_K_FM] = {
376 .Interface = -1,
377 .Codec = CODEC_SAA7111,
378 .VideoChannels = 3,
379 .VideoNorm = V4L2_STD_PAL,
380 .AudioChannels = 1,
381 .Radio = 1,
382 .vbi = 1,
383 .Tuner = 1,
384 .TunerType = TUNER_PHILIPS_PAL,
385 .X_Offset = -1,
386 .Y_Offset = -1,
387 .ModelString = "Hauppauge WinTV USB (PAL D/K FM)",
388 },
389 [HPG_WINTV_PRO_NTSC_MN] = {
390 .Interface = 0,
391 .Codec = CODEC_SAA7113,
392 .VideoChannels = 3,
393 .VideoNorm = V4L2_STD_NTSC,
394 .AudioChannels = 1,
395 .Radio = 1,
396 .vbi = 1,
397 .Tuner = 1,
398 .TunerType = TUNER_MICROTUNE_4049FM5,
399 .X_Offset = 0,
400 .Y_Offset = 3,
401 .Dvi_yuv_override = 1,
402 .Dvi_yuv = 7,
403 .ModelString = "Hauppauge WinTV USB Pro (NTSC M/N)",
404 },
405 [HPG_WINTV_PRO_NTSC_MN_V2] = {
406 .Interface = 0,
407 .Codec = CODEC_SAA7113,
408 .VideoChannels = 3,
409 .VideoNorm = V4L2_STD_NTSC,
410 .AudioChannels = 1,
411 .Radio = 1,
412 .vbi = 1,
413 .Tuner = 1,
414 .TunerType = TUNER_MICROTUNE_4049FM5,
415 .X_Offset = 0,
416 .Y_Offset = 3,
417 .Dvi_yuv_override = 1,
418 .Dvi_yuv = 7,
419 .ModelString = "Hauppauge WinTV USB Pro (NTSC M/N) V2",
420 },
421 [HPG_WINTV_PRO_PAL] = {
422 .Interface = 0,
423 .Codec = CODEC_SAA7113,
424 .VideoChannels = 3,
425 .VideoNorm = V4L2_STD_PAL,
426 .AudioChannels = 1,
427 .Radio = 0,
428 .vbi = 1,
429 .Tuner = 1,
430 .TunerType = TUNER_PHILIPS_FM1216ME_MK3,
431 .X_Offset = 0,
432 .Y_Offset = 3,
433 .Dvi_yuv_override = 1,
434 .Dvi_yuv = 7,
435 .ModelString = "Hauppauge WinTV USB Pro (PAL/SECAM B/G/I/D/K/L)",
436 },
437 [HPG_WINTV_PRO_NTSC_MN_V3] = {
438 .Interface = 0,
439 .Codec = CODEC_SAA7113,
440 .VideoChannels = 3,
441 .VideoNorm = V4L2_STD_NTSC,
442 .AudioChannels = 1,
443 .Radio = 1,
444 .vbi = 1,
445 .Tuner = 1,
446 .TunerType = TUNER_PHILIPS_NTSC_M,
447 .X_Offset = 0,
448 .Y_Offset = 3,
449 .Dvi_yuv_override = 1,
450 .Dvi_yuv = 7,
451 .ModelString = "Hauppauge WinTV USB Pro (NTSC M/N) V3",
452 },
453 [HPG_WINTV_PRO_PAL_BG] = {
454 .Interface = 0,
455 .Codec = CODEC_SAA7113,
456 .VideoChannels = 3,
457 .VideoNorm = V4L2_STD_PAL,
458 .AudioChannels = 1,
459 .Radio = 0,
460 .vbi = 1,
461 .Tuner = 1,
462 .TunerType = TUNER_PHILIPS_PAL,
463 .X_Offset = 0,
464 .Y_Offset = 3,
465 .Dvi_yuv_override = 1,
466 .Dvi_yuv = 7,
467 .ModelString = "Hauppauge WinTV USB Pro (PAL B/G)",
468 },
469 [HPG_WINTV_PRO_PAL_I] = {
470 .Interface = 0,
471 .Codec = CODEC_SAA7113,
472 .VideoChannels = 3,
473 .VideoNorm = V4L2_STD_PAL,
474 .AudioChannels = 1,
475 .Radio = 0,
476 .vbi = 1,
477 .Tuner = 1,
478 .TunerType = TUNER_PHILIPS_PAL,
479 .X_Offset = 0,
480 .Y_Offset = 3,
481 .Dvi_yuv_override = 1,
482 .Dvi_yuv = 7,
483 .ModelString = "Hauppauge WinTV USB Pro (PAL I)",
484 },
485 [HPG_WINTV_PRO_PAL_SECAM_L] = {
486 .Interface = -1,
487 .Codec = CODEC_SAA7113,
488 .VideoChannels = 3,
489 .VideoNorm = V4L2_STD_SECAM,
490 .AudioChannels = 1,
491 .Radio = 0,
492 .vbi = 1,
493 .Tuner = 1,
494 .TunerType = TUNER_PHILIPS_SECAM,
495 .X_Offset = 0,
496 .Y_Offset = 3,
497 .Dvi_yuv_override = 1,
498 .Dvi_yuv = 7,
499 .ModelString = "Hauppauge WinTV USB Pro (PAL/SECAM L)",
500 },
501 [HPG_WINTV_PRO_PAL_D_K] = {
502 .Interface = -1,
503 .Codec = CODEC_SAA7113,
504 .VideoChannels = 3,
505 .VideoNorm = V4L2_STD_PAL,
506 .AudioChannels = 1,
507 .Radio = 0,
508 .vbi = 1,
509 .Tuner = 1,
510 .TunerType = TUNER_PHILIPS_PAL,
511 .X_Offset = 0,
512 .Y_Offset = 3,
513 .Dvi_yuv_override = 1,
514 .Dvi_yuv = 7,
515 .ModelString = "Hauppauge WinTV USB Pro (PAL D/K)",
516 },
517 [HPG_WINTV_PRO_PAL_SECAM] = {
518 .Interface = -1,
519 .Codec = CODEC_SAA7113,
520 .VideoChannels = 3,
521 .VideoNorm = V4L2_STD_SECAM,
522 .AudioChannels = 1,
523 .Radio = 0,
524 .vbi = 1,
525 .Tuner = 1,
526 .TunerType = TUNER_PHILIPS_SECAM,
527 .X_Offset = 0,
528 .Y_Offset = 3,
529 .Dvi_yuv_override = 1,
530 .Dvi_yuv = 7,
531 .ModelString = "Hauppauge WinTV USB Pro (PAL/SECAM BGDK/I/L)",
532 },
533 [HPG_WINTV_PRO_PAL_SECAM_V2] = {
534 .Interface = -1,
535 .Codec = CODEC_SAA7113,
536 .VideoChannels = 3,
537 .VideoNorm = V4L2_STD_SECAM,
538 .AudioChannels = 1,
539 .Radio = 0,
540 .vbi = 1,
541 .Tuner = 1,
542 .TunerType = TUNER_PHILIPS_SECAM,
543 .X_Offset = 0,
544 .Y_Offset = 3,
545 .Dvi_yuv_override = 1,
546 .Dvi_yuv = 7,
547 .ModelString = "Hauppauge WinTV USB Pro (PAL/SECAM BGDK/I/L) V2",
548 },
549 [HPG_WINTV_PRO_PAL_BG_V2] = {
550 .Interface = -1,
551 .Codec = CODEC_SAA7113,
552 .VideoChannels = 3,
553 .VideoNorm = V4L2_STD_PAL,
554 .AudioChannels = 1,
555 .Radio = 0,
556 .vbi = 1,
557 .Tuner = 1,
558 .TunerType = TUNER_ALPS_TSBE1_PAL,
559 .X_Offset = 0,
560 .Y_Offset = 3,
561 .Dvi_yuv_override = 1,
562 .Dvi_yuv = 7,
563 .ModelString = "Hauppauge WinTV USB Pro (PAL B/G) V2",
564 },
565 [HPG_WINTV_PRO_PAL_BG_D_K] = {
566 .Interface = -1,
567 .Codec = CODEC_SAA7113,
568 .VideoChannels = 3,
569 .VideoNorm = V4L2_STD_PAL,
570 .AudioChannels = 1,
571 .Radio = 0,
572 .vbi = 1,
573 .Tuner = 1,
574 .TunerType = TUNER_ALPS_TSBE1_PAL,
575 .X_Offset = 0,
576 .Y_Offset = 3,
577 .Dvi_yuv_override = 1,
578 .Dvi_yuv = 7,
579 .ModelString = "Hauppauge WinTV USB Pro (PAL B/G,D/K)",
580 },
581 [HPG_WINTV_PRO_PAL_I_D_K] = {
582 .Interface = -1,
583 .Codec = CODEC_SAA7113,
584 .VideoChannels = 3,
585 .VideoNorm = V4L2_STD_PAL,
586 .AudioChannels = 1,
587 .Radio = 0,
588 .vbi = 1,
589 .Tuner = 1,
590 .TunerType = TUNER_PHILIPS_PAL,
591 .X_Offset = 0,
592 .Y_Offset = 3,
593 .Dvi_yuv_override = 1,
594 .Dvi_yuv = 7,
595 .ModelString = "Hauppauge WinTV USB Pro (PAL I,D/K)",
596 },
597 [HPG_WINTV_PRO_NTSC_MN_FM] = {
598 .Interface = -1,
599 .Codec = CODEC_SAA7113,
600 .VideoChannels = 3,
601 .VideoNorm = V4L2_STD_NTSC,
602 .AudioChannels = 1,
603 .Radio = 1,
604 .vbi = 1,
605 .Tuner = 1,
606 .TunerType = TUNER_PHILIPS_NTSC_M,
607 .X_Offset = 0,
608 .Y_Offset = 3,
609 .Dvi_yuv_override = 1,
610 .Dvi_yuv = 7,
611 .ModelString = "Hauppauge WinTV USB Pro (NTSC M/N FM)",
612 },
613 [HPG_WINTV_PRO_PAL_BG_FM] = {
614 .Interface = 0,
615 .Codec = CODEC_SAA7113,
616 .VideoChannels = 3,
617 .VideoNorm = V4L2_STD_PAL,
618 .AudioChannels = 1,
619 .Radio = 1,
620 .vbi = 1,
621 .Tuner = 1,
622 .TunerType = TUNER_PHILIPS_PAL,
623 .X_Offset = 0,
624 .Y_Offset = 3,
625 .Dvi_yuv_override = 1,
626 .Dvi_yuv = 7,
627 .ModelString = "Hauppauge WinTV USB Pro (PAL B/G FM)",
628 },
629 [HPG_WINTV_PRO_PAL_I_FM] = {
630 .Interface = 0,
631 .Codec = CODEC_SAA7113,
632 .VideoChannels = 3,
633 .VideoNorm = V4L2_STD_PAL,
634 .AudioChannels = 1,
635 .Radio = 1,
636 .vbi = 1,
637 .Tuner = 1,
638 .TunerType = TUNER_PHILIPS_PAL,
639 .X_Offset = 0,
640 .Y_Offset = 3,
641 .Dvi_yuv_override = 1,
642 .Dvi_yuv = 7,
643 .ModelString = "Hauppauge WinTV USB Pro (PAL I FM)",
644 },
645 [HPG_WINTV_PRO_PAL_D_K_FM] = {
646 .Interface = 0,
647 .Codec = CODEC_SAA7113,
648 .VideoChannels = 3,
649 .VideoNorm = V4L2_STD_PAL,
650 .AudioChannels = 1,
651 .Radio = 1,
652 .vbi = 1,
653 .Tuner = 1,
654 .TunerType = TUNER_PHILIPS_PAL,
655 .X_Offset = 0,
656 .Y_Offset = 3,
657 .Dvi_yuv_override = 1,
658 .Dvi_yuv = 7,
659 .ModelString = "Hauppauge WinTV USB Pro (PAL D/K FM)",
660 },
661 [HPG_WINTV_PRO_TEMIC_PAL_FM] = {
662 .Interface = 0,
663 .Codec = CODEC_SAA7113,
664 .VideoChannels = 3,
665 .VideoNorm = V4L2_STD_PAL,
666 .AudioChannels = 1,
667 .Radio = 1,
668 .vbi = 1,
669 .Tuner = 1,
670 .TunerType = TUNER_MICROTUNE_4049FM5,
671 .X_Offset = 0,
672 .Y_Offset = 3,
673 .Dvi_yuv_override = 1,
674 .Dvi_yuv = 7,
675 .ModelString = "Hauppauge WinTV USB Pro (Temic PAL/SECAM B/G/I/D/K/L FM)",
676 },
677 [HPG_WINTV_PRO_TEMIC_PAL_BG_FM] = {
678 .Interface = 0,
679 .Codec = CODEC_SAA7113,
680 .VideoChannels = 3,
681 .VideoNorm = V4L2_STD_PAL,
682 .AudioChannels = 1,
683 .Radio = 1,
684 .vbi = 1,
685 .Tuner = 1,
686 .TunerType = TUNER_MICROTUNE_4049FM5,
687 .X_Offset = 0,
688 .Y_Offset = 3,
689 .Dvi_yuv_override = 1,
690 .Dvi_yuv = 7,
691 .ModelString = "Hauppauge WinTV USB Pro (Temic PAL B/G FM)",
692 },
693 [HPG_WINTV_PRO_PAL_FM] = {
694 .Interface = 0,
695 .Codec = CODEC_SAA7113,
696 .VideoChannels = 3,
697 .VideoNorm = V4L2_STD_PAL,
698 .AudioChannels = 1,
699 .Radio = 1,
700 .vbi = 1,
701 .Tuner = 1,
702 .TunerType = TUNER_PHILIPS_FM1216ME_MK3,
703 .X_Offset = 0,
704 .Y_Offset = 3,
705 .Dvi_yuv_override = 1,
706 .Dvi_yuv = 7,
707 .ModelString = "Hauppauge WinTV USB Pro (PAL/SECAM B/G/I/D/K/L FM)",
708 },
709 [HPG_WINTV_PRO_NTSC_MN_FM_V2] = {
710 .Interface = 0,
711 .Codec = CODEC_SAA7113,
712 .VideoChannels = 3,
713 .VideoNorm = V4L2_STD_NTSC,
714 .AudioChannels = 1,
715 .Radio = 1,
716 .vbi = 1,
717 .Tuner = 1,
718 .TunerType = TUNER_PHILIPS_NTSC_M,
719 .X_Offset = 0,
720 .Y_Offset = 3,
721 .Dvi_yuv_override = 1,
722 .Dvi_yuv = 7,
723 .ModelString = "Hauppauge WinTV USB Pro (NTSC M/N FM) V2",
724 },
725 [CAMTEL_TVB330] = {
726 .Interface = -1,
727 .Codec = CODEC_SAA7113,
728 .VideoChannels = 3,
729 .VideoNorm = V4L2_STD_NTSC,
730 .AudioChannels = 1,
731 .Radio = 1,
732 .vbi = 1,
733 .Tuner = 1,
734 .TunerType = TUNER_PHILIPS_NTSC_M,
735 .X_Offset = 5,
736 .Y_Offset = 5,
737 .ModelString = "Camtel Technology USB TV Genie Pro FM Model TVB330",
738 },
739 [DIGITAL_VIDEO_CREATOR_I] = {
740 .Interface = -1,
741 .Codec = CODEC_SAA7113,
742 .VideoChannels = 2,
743 .VideoNorm = V4L2_STD_PAL,
744 .AudioChannels = 0,
745 .Radio = 0,
746 .vbi = 1,
747 .Tuner = 0,
748 .TunerType = 0,
749 .X_Offset = 0,
750 .Y_Offset = 3,
751 .Dvi_yuv_override = 1,
752 .Dvi_yuv = 7,
753 .ModelString = "Digital Video Creator I",
754 },
755 [GLOBAL_VILLAGE_GV_007_NTSC] = {
756 .Interface = -1,
757 .Codec = CODEC_SAA7111,
758 .VideoChannels = 2,
759 .VideoNorm = V4L2_STD_NTSC,
760 .AudioChannels = 0,
761 .Radio = 0,
762 .vbi = 1,
763 .Tuner = 0,
764 .TunerType = 0,
765 .X_Offset = 82,
766 .Y_Offset = 20,
767 .Dvi_yuv_override = 1,
768 .Dvi_yuv = 7,
769 .ModelString = "Global Village GV-007 (NTSC)",
770 },
771 [DAZZLE_DVC_50_REV_1_NTSC] = {
772 .Interface = 0,
773 .Codec = CODEC_SAA7113,
774 .VideoChannels = 2,
775 .VideoNorm = V4L2_STD_NTSC,
776 .AudioChannels = 0,
777 .Radio = 0,
778 .vbi = 1,
779 .Tuner = 0,
780 .TunerType = 0,
781 .X_Offset = 0,
782 .Y_Offset = 3,
783 .Dvi_yuv_override = 1,
784 .Dvi_yuv = 7,
785 .ModelString = "Dazzle Fusion Model DVC-50 Rev 1 (NTSC)",
786 },
787 [DAZZLE_DVC_80_REV_1_PAL] = {
788 .Interface = 0,
789 .Codec = CODEC_SAA7113,
790 .VideoChannels = 2,
791 .VideoNorm = V4L2_STD_PAL,
792 .AudioChannels = 0,
793 .Radio = 0,
794 .vbi = 1,
795 .Tuner = 0,
796 .TunerType = 0,
797 .X_Offset = 0,
798 .Y_Offset = 3,
799 .Dvi_yuv_override = 1,
800 .Dvi_yuv = 7,
801 .ModelString = "Dazzle Fusion Model DVC-80 Rev 1 (PAL)",
802 },
803 [DAZZLE_DVC_90_REV_1_SECAM] = {
804 .Interface = 0,
805 .Codec = CODEC_SAA7113,
806 .VideoChannels = 2,
807 .VideoNorm = V4L2_STD_SECAM,
808 .AudioChannels = 0,
809 .Radio = 0,
810 .vbi = 1,
811 .Tuner = 0,
812 .TunerType = 0,
813 .X_Offset = 0,
814 .Y_Offset = 3,
815 .Dvi_yuv_override = 1,
816 .Dvi_yuv = 7,
817 .ModelString = "Dazzle Fusion Model DVC-90 Rev 1 (SECAM)",
818 },
819 [ESKAPE_LABS_MYTV2GO] = {
820 .Interface = 0,
821 .Codec = CODEC_SAA7113,
822 .VideoChannels = 2,
823 .VideoNorm = V4L2_STD_PAL,
824 .AudioChannels = 1,
825 .Radio = 1,
826 .vbi = 1,
827 .Tuner = 1,
828 .TunerType = TUNER_PHILIPS_FM1216ME_MK3,
829 .X_Offset = 0,
830 .Y_Offset = 3,
831 .Dvi_yuv_override = 1,
832 .Dvi_yuv = 7,
833 .ModelString = "Eskape Labs MyTV2Go",
834 },
835 [PINNA_PCTV_USB_PAL] = {
836 .Interface = -1,
837 .Codec = CODEC_SAA7111,
838 .VideoChannels = 3,
839 .VideoNorm = V4L2_STD_PAL,
840 .AudioChannels = 1,
841 .Radio = 0,
842 .vbi = 0,
843 .Tuner = 1,
844 .TunerType = TUNER_TEMIC_4066FY5_PAL_I,
845 .X_Offset = -1,
846 .Y_Offset = -1,
847 .ModelString = "Pinnacle Studio PCTV USB (PAL)",
848 },
849 [PINNA_PCTV_USB_SECAM] = {
850 .Interface = -1,
851 .Codec = CODEC_SAA7111,
852 .VideoChannels = 3,
853 .VideoNorm = V4L2_STD_SECAM,
854 .AudioChannels = 1,
855 .Radio = 0,
856 .vbi = 1,
857 .Tuner = 1,
858 .TunerType = TUNER_PHILIPS_SECAM,
859 .X_Offset = -1,
860 .Y_Offset = -1,
861 .ModelString = "Pinnacle Studio PCTV USB (SECAM)",
862 },
863 [PINNA_PCTV_USB_PAL_FM] = {
864 .Interface = -1,
865 .Codec = CODEC_SAA7111,
866 .VideoChannels = 3,
867 .VideoNorm = V4L2_STD_PAL,
868 .AudioChannels = 1,
869 .Radio = 1,
870 .vbi = 1,
871 .Tuner = 1,
872 .TunerType = TUNER_PHILIPS_PAL,
873 .X_Offset = 128,
874 .Y_Offset = 23,
875 .ModelString = "Pinnacle Studio PCTV USB (PAL) FM",
876 },
877 [MIRO_PCTV_USB] = {
878 .Interface = -1,
879 .Codec = CODEC_SAA7111,
880 .VideoChannels = 3,
881 .VideoNorm = V4L2_STD_PAL,
882 .AudioChannels = 1,
883 .Radio = 0,
884 .vbi = 1,
885 .Tuner = 1,
886 .TunerType = TUNER_PHILIPS_PAL,
887 .X_Offset = -1,
888 .Y_Offset = -1,
889 .ModelString = "Miro PCTV USB",
890 },
891 [PINNA_PCTV_USB_NTSC_FM] = {
892 .Interface = -1,
893 .Codec = CODEC_SAA7111,
894 .VideoChannels = 3,
895 .VideoNorm = V4L2_STD_NTSC,
896 .AudioChannels = 1,
897 .Radio = 1,
898 .vbi = 1,
899 .Tuner = 1,
900 .TunerType = TUNER_PHILIPS_NTSC_M,
901 .X_Offset = -1,
902 .Y_Offset = -1,
903 .ModelString = "Pinnacle Studio PCTV USB (NTSC) FM",
904 },
905 [PINNA_PCTV_USB_PAL_FM_V2] = {
906 .Interface = -1,
907 .Codec = CODEC_SAA7113,
908 .VideoChannels = 3,
909 .VideoNorm = V4L2_STD_PAL,
910 .AudioChannels = 1,
911 .Radio = 1,
912 .vbi = 1,
913 .Tuner = 1,
914 .TunerType = TUNER_TEMIC_4009FR5_PAL,
915 .X_Offset = 0,
916 .Y_Offset = 3,
917 .Dvi_yuv_override = 1,
918 .Dvi_yuv = 7,
919 .ModelString = "Pinnacle Studio PCTV USB (PAL) FM V2",
920 },
921 [PINNA_PCTV_USB_NTSC_FM_V2] = {
922 .Interface = -1,
923 .Codec = CODEC_SAA7111,
924 .VideoChannels = 3,
925 .VideoNorm = V4L2_STD_NTSC,
926 .AudioChannels = 1,
927 .Radio = 1,
928 .vbi = 1,
929 .Tuner = 1,
930 .TunerType = TUNER_TEMIC_4039FR5_NTSC,
931 .X_Offset = 0,
932 .Y_Offset = 3,
933 .Dvi_yuv_override = 1,
934 .Dvi_yuv = 7,
935 .ModelString = "Pinnacle Studio PCTV USB (NTSC) FM V2",
936 },
937 [PINNA_PCTV_USB_PAL_FM_V3] = {
938 .Interface = -1,
939 .Codec = CODEC_SAA7113,
940 .VideoChannels = 3,
941 .VideoNorm = V4L2_STD_PAL,
942 .AudioChannels = 1,
943 .Radio = 1,
944 .vbi = 1,
945 .Tuner = 1,
946 .TunerType = TUNER_TEMIC_4009FR5_PAL,
947 .X_Offset = 0,
948 .Y_Offset = 3,
949 .Dvi_yuv_override = 1,
950 .Dvi_yuv = 7,
951 .ModelString = "Pinnacle Studio PCTV USB (PAL) FM V3",
952 },
953 [PINNA_LINX_VD_IN_CAB_NTSC] = {
954 .Interface = -1,
955 .Codec = CODEC_SAA7113,
956 .VideoChannels = 2,
957 .VideoNorm = V4L2_STD_NTSC,
958 .AudioChannels = 1,
959 .Radio = 0,
960 .vbi = 1,
961 .Tuner = 0,
962 .TunerType = 0,
963 .X_Offset = 0,
964 .Y_Offset = 3,
965 .Dvi_yuv_override = 1,
966 .Dvi_yuv = 7,
967 .ModelString = "Pinnacle Studio Linx Video input cable (NTSC)",
968 },
969 [PINNA_LINX_VD_IN_CAB_PAL] = {
970 .Interface = -1,
971 .Codec = CODEC_SAA7113,
972 .VideoChannels = 2,
973 .VideoNorm = V4L2_STD_PAL,
974 .AudioChannels = 1,
975 .Radio = 0,
976 .vbi = 1,
977 .Tuner = 0,
978 .TunerType = 0,
979 .X_Offset = 0,
980 .Y_Offset = 3,
981 .Dvi_yuv_override = 1,
982 .Dvi_yuv = 7,
983 .ModelString = "Pinnacle Studio Linx Video input cable (PAL)",
984 },
985 [PINNA_PCTV_BUNGEE_PAL_FM] = {
986 .Interface = -1,
987 .Codec = CODEC_SAA7113,
988 .VideoChannels = 3,
989 .VideoNorm = V4L2_STD_PAL,
990 .AudioChannels = 1,
991 .Radio = 1,
992 .vbi = 1,
993 .Tuner = 1,
994 .TunerType = TUNER_TEMIC_4009FR5_PAL,
995 .X_Offset = 0,
996 .Y_Offset = 3,
997 .Dvi_yuv_override = 1,
998 .Dvi_yuv = 7,
999 .ModelString = "Pinnacle PCTV Bungee USB (PAL) FM",
1000 },
1001 [HPG_WINTV] = {
1002 .Interface = -1,
1003 .Codec = CODEC_SAA7111,
1004 .VideoChannels = 3,
1005 .VideoNorm = V4L2_STD_NTSC,
1006 .AudioChannels = 1,
1007 .Radio = 0,
1008 .vbi = 1,
1009 .Tuner = 1,
1010 .TunerType = TUNER_PHILIPS_NTSC_M,
1011 .X_Offset = -1,
1012 .Y_Offset = -1,
1013 .ModelString = "Hauppauge WinTv-USB",
1014 },
91}; 1015};
1016const int usbvision_device_data_size=ARRAY_SIZE(usbvision_device_data);
92 1017
93/* Supported Devices */ 1018/* Supported Devices */
94 1019
95struct usb_device_id usbvision_table [] = { 1020struct usb_device_id usbvision_table [] = {
96 { USB_DEVICE(0xFFF0, 0xFFF0) }, /* Custom Dummy USBVision Device */ 1021 { USB_DEVICE(0x0a6f, 0x0400), .driver_info=XANBOO },
97 { USB_DEVICE(0x0A6F, 0x0400) }, /* Xanboo */ 1022 { USB_DEVICE(0x050d, 0x0106), .driver_info=BELKIN_VIDEOBUS_II },
98 { USB_DEVICE(0x050d, 0x0208) }, /* Belkin USBView II */ 1023 { USB_DEVICE(0x050d, 0x0207), .driver_info=BELKIN_VIDEOBUS },
99 { USB_DEVICE(0x0571, 0x0002) }, /* echoFX InterView Lite */ 1024 { USB_DEVICE(0x050d, 0x0208), .driver_info=BELKIN_USB_VIDEOBUS_II },
100 { USB_DEVICE(0x0573, 0x0003) }, /* USBGear USBG-V1 */ 1025 { USB_DEVICE(0x0571, 0x0002), .driver_info=ECHOFX_INTERVIEW_LITE },
101 { USB_DEVICE(0x0573, 0x0400) }, /* D-Link V100 */ 1026 { USB_DEVICE(0x0573, 0x0003), .driver_info=USBGEAR_USBG_V1 },
102 { USB_DEVICE(0x0573, 0x2000) }, /* X10 USB Camera */ 1027 { USB_DEVICE(0x0573, 0x0400), .driver_info=D_LINK_V100 },
103 { USB_DEVICE(0x0573, 0x2d00) }, /* Osprey 50 */ 1028 { USB_DEVICE(0x0573, 0x2000), .driver_info=X10_USB_CAMERA },
104 { USB_DEVICE(0x0573, 0x2d01) }, /* Hauppauge USB-Live Model 600 */ 1029 { USB_DEVICE(0x0573, 0x2d00), .driver_info=HPG_WINTV_LIVE_PAL_BG },
105 { USB_DEVICE(0x0573, 0x2101) }, /* Zoran Co. PMD (Nogatech) AV-grabber Manhattan */ 1030 { USB_DEVICE(0x0573, 0x2d01), .driver_info=HPG_WINTV_LIVE_PRO_NTSC_MN },
106 { USB_DEVICE(0x0573, 0x4100) }, /* Nogatech USB-TV FM (NTSC) */ 1031 { USB_DEVICE(0x0573, 0x2101), .driver_info=ZORAN_PMD_NOGATECH },
107 { USB_DEVICE(0x0573, 0x4110) }, /* PNY USB-TV (NTSC) FM */ 1032 { USB_DEVICE(0x0573, 0x4100), .driver_info=NOGATECH_USB_TV_NTSC_FM },
108 { USB_DEVICE(0x0573, 0x4450) }, /* PixelView PlayTv-USB PRO (PAL) FM */ 1033 { USB_DEVICE(0x0573, 0x4110), .driver_info=PNY_USB_TV_NTSC_FM },
109 { USB_DEVICE(0x0573, 0x4550) }, /* ZTV ZT-721 2.4GHz USB A/V Receiver */ 1034 { USB_DEVICE(0x0573, 0x4450), .driver_info=PV_PLAYTV_USB_PRO_PAL_FM },
110 { USB_DEVICE(0x0573, 0x4d00) }, /* Hauppauge WinTv-USB USA */ 1035 { USB_DEVICE(0x0573, 0x4550), .driver_info=ZT_721 },
111 { USB_DEVICE(0x0573, 0x4d01) }, /* Hauppauge WinTv-USB */ 1036 { USB_DEVICE(0x0573, 0x4d00), .driver_info=HPG_WINTV_NTSC_MN },
112 { USB_DEVICE(0x0573, 0x4d02) }, /* Hauppauge WinTv-USB UK */ 1037 { USB_DEVICE(0x0573, 0x4d01), .driver_info=HPG_WINTV_PAL_BG },
113 { USB_DEVICE(0x0573, 0x4d03) }, /* Hauppauge WinTv-USB France */ 1038 { USB_DEVICE(0x0573, 0x4d02), .driver_info=HPG_WINTV_PAL_I },
114 { USB_DEVICE(0x0573, 0x4d10) }, /* Hauppauge WinTv-USB with FM USA radio */ 1039 { USB_DEVICE(0x0573, 0x4d03), .driver_info=HPG_WINTV_PAL_SECAM_L },
115 { USB_DEVICE(0x0573, 0x4d11) }, /* Hauppauge WinTv-USB (PAL) with FM radio */ 1040 { USB_DEVICE(0x0573, 0x4d04), .driver_info=HPG_WINTV_PAL_D_K },
116 { USB_DEVICE(0x0573, 0x4d12) }, /* Hauppauge WinTv-USB UK with FM Radio */ 1041 { USB_DEVICE(0x0573, 0x4d10), .driver_info=HPG_WINTV_NTSC_FM },
117 { USB_DEVICE(0x0573, 0x4d2a) }, /* Hauppague WinTv USB Model 602 40201 Rev B285 */ 1042 { USB_DEVICE(0x0573, 0x4d11), .driver_info=HPG_WINTV_PAL_BG_FM },
118 { USB_DEVICE(0x0573, 0x4d2b) }, /* Hauppague WinTv USB Model 602 40201 Rev B282 */ 1043 { USB_DEVICE(0x0573, 0x4d12), .driver_info=HPG_WINTV_PAL_I_FM },
119 { USB_DEVICE(0x0573, 0x4d2c) }, /* Hauppague WinTv USB Model 40209 Rev. E1A5 PAL*/ 1044 { USB_DEVICE(0x0573, 0x4d14), .driver_info=HPG_WINTV_PAL_D_K_FM },
120 { USB_DEVICE(0x0573, 0x4d20) }, /* Hauppauge WinTv-USB II (PAL) FM Model 40201 Rev B226 */ 1045 { USB_DEVICE(0x0573, 0x4d2a), .driver_info=HPG_WINTV_PRO_NTSC_MN },
121 { USB_DEVICE(0x0573, 0x4d21) }, /* Hauppauge WinTv-USB II (PAL) with FM radio*/ 1046 { USB_DEVICE(0x0573, 0x4d2b), .driver_info=HPG_WINTV_PRO_NTSC_MN_V2 },
122 { USB_DEVICE(0x0573, 0x4d22) }, /* Hauppauge WinTv-USB II (PAL) Model 566 */ 1047 { USB_DEVICE(0x0573, 0x4d2c), .driver_info=HPG_WINTV_PRO_PAL },
123 { USB_DEVICE(0x0573, 0x4d23) }, /* Hauppauge WinTv-USB France 4D23*/ 1048 { USB_DEVICE(0x0573, 0x4d20), .driver_info=HPG_WINTV_PRO_NTSC_MN_V3 },
124 { USB_DEVICE(0x0573, 0x4d25) }, /* Hauppauge WinTv-USB Model 40209 rev B234 */ 1049 { USB_DEVICE(0x0573, 0x4d21), .driver_info=HPG_WINTV_PRO_PAL_BG },
125 { USB_DEVICE(0x0573, 0x4d26) }, /* Hauppauge WinTv-USB Model 40209 Rev B243 */ 1050 { USB_DEVICE(0x0573, 0x4d22), .driver_info=HPG_WINTV_PRO_PAL_I },
126 { USB_DEVICE(0x0573, 0x4d27) }, /* Hauppauge WinTv-USB Model 40204 Rev B281 */ 1051 { USB_DEVICE(0x0573, 0x4d23), .driver_info=HPG_WINTV_PRO_PAL_SECAM_L },
127 { USB_DEVICE(0x0573, 0x4d28) }, /* Hauppauge WinTv-USB Model 40204 Rev B283 */ 1052 { USB_DEVICE(0x0573, 0x4d24), .driver_info=HPG_WINTV_PRO_PAL_D_K },
128 { USB_DEVICE(0x0573, 0x4d29) }, /* Hauppauge WinTv-USB Model 40205 Rev B298 */ 1053 { USB_DEVICE(0x0573, 0x4d25), .driver_info=HPG_WINTV_PRO_PAL_SECAM },
129 { USB_DEVICE(0x0573, 0x4d30) }, /* Hauppauge WinTv-USB FM Model 40211 Rev B123 */ 1054 { USB_DEVICE(0x0573, 0x4d26), .driver_info=HPG_WINTV_PRO_PAL_SECAM_V2 },
130 { USB_DEVICE(0x0573, 0x4d31) }, /* Hauppauge WinTv-USB III (PAL) with FM radio Model 568 */ 1055 { USB_DEVICE(0x0573, 0x4d27), .driver_info=HPG_WINTV_PRO_PAL_BG_V2 },
131 { USB_DEVICE(0x0573, 0x4d32) }, /* Hauppauge WinTv-USB III (PAL) FM Model 573 */ 1056 { USB_DEVICE(0x0573, 0x4d28), .driver_info=HPG_WINTV_PRO_PAL_BG_D_K },
132 { USB_DEVICE(0x0573, 0x4d35) }, /* Hauppauge WinTv-USB III (SECAM) FM Model 40219 Rev B252 */ 1057 { USB_DEVICE(0x0573, 0x4d29), .driver_info=HPG_WINTV_PRO_PAL_I_D_K },
133 { USB_DEVICE(0x0573, 0x4d37) }, /* Hauppauge WinTv-USB Model 40219 Rev E189 */ 1058 { USB_DEVICE(0x0573, 0x4d30), .driver_info=HPG_WINTV_PRO_NTSC_MN_FM },
134 { USB_DEVICE(0x0768, 0x0006) }, /* Camtel Technology USB TV Genie Pro FM Model TVB330 */ 1059 { USB_DEVICE(0x0573, 0x4d31), .driver_info=HPG_WINTV_PRO_PAL_BG_FM },
135 { USB_DEVICE(0x07d0, 0x0001) }, /* Digital Video Creator I */ 1060 { USB_DEVICE(0x0573, 0x4d32), .driver_info=HPG_WINTV_PRO_PAL_I_FM },
136 { USB_DEVICE(0x07d0, 0x0002) }, /* Global Village GV-007 (NTSC) */ 1061 { USB_DEVICE(0x0573, 0x4d34), .driver_info=HPG_WINTV_PRO_PAL_D_K_FM },
137 { USB_DEVICE(0x07d0, 0x0003) }, /* Dazzle Fusion Model DVC-50 Rev 1 (NTSC) */ 1062 { USB_DEVICE(0x0573, 0x4d35), .driver_info=HPG_WINTV_PRO_TEMIC_PAL_FM },
138 { USB_DEVICE(0x07d0, 0x0004) }, /* Dazzle Fusion Model DVC-80 Rev 1 (PAL) */ 1063 { USB_DEVICE(0x0573, 0x4d36), .driver_info=HPG_WINTV_PRO_TEMIC_PAL_BG_FM },
139 { USB_DEVICE(0x07d0, 0x0005) }, /* Dazzle Fusion Model DVC-90 Rev 1 (SECAM) */ 1064 { USB_DEVICE(0x0573, 0x4d37), .driver_info=HPG_WINTV_PRO_PAL_FM },
140 { USB_DEVICE(0x2304, 0x010d) }, /* Pinnacle Studio PCTV USB (PAL) */ 1065 { USB_DEVICE(0x0573, 0x4d38), .driver_info=HPG_WINTV_PRO_NTSC_MN_FM_V2 },
141 { USB_DEVICE(0x2304, 0x0109) }, /* Pinnacle Studio PCTV USB (SECAM) */ 1066 { USB_DEVICE(0x0768, 0x0006), .driver_info=CAMTEL_TVB330 },
142 { USB_DEVICE(0x2304, 0x0110) }, /* Pinnacle Studio PCTV USB (PAL) */ 1067 { USB_DEVICE(0x07d0, 0x0001), .driver_info=DIGITAL_VIDEO_CREATOR_I },
143 { USB_DEVICE(0x2304, 0x0111) }, /* Miro PCTV USB */ 1068 { USB_DEVICE(0x07d0, 0x0002), .driver_info=GLOBAL_VILLAGE_GV_007_NTSC },
144 { USB_DEVICE(0x2304, 0x0112) }, /* Pinnacle Studio PCTV USB (NTSC) with FM radio */ 1069 { USB_DEVICE(0x07d0, 0x0003), .driver_info=DAZZLE_DVC_50_REV_1_NTSC },
145 { USB_DEVICE(0x2304, 0x0210) }, /* Pinnacle Studio PCTV USB (PAL) with FM radio */ 1070 { USB_DEVICE(0x07d0, 0x0004), .driver_info=DAZZLE_DVC_80_REV_1_PAL },
146 { USB_DEVICE(0x2304, 0x0212) }, /* Pinnacle Studio PCTV USB (NTSC) with FM radio */ 1071 { USB_DEVICE(0x07d0, 0x0005), .driver_info=DAZZLE_DVC_90_REV_1_SECAM },
147 { USB_DEVICE(0x2304, 0x0214) }, /* Pinnacle Studio PCTV USB (PAL) with FM radio */ 1072 { USB_DEVICE(0x07f8, 0x9104), .driver_info=ESKAPE_LABS_MYTV2GO },
148 { USB_DEVICE(0x2304, 0x0300) }, /* Pinnacle Studio Linx Video input cable (NTSC) */ 1073 { USB_DEVICE(0x2304, 0x010d), .driver_info=PINNA_PCTV_USB_PAL },
149 { USB_DEVICE(0x2304, 0x0301) }, /* Pinnacle Studio Linx Video input cable (PAL) */ 1074 { USB_DEVICE(0x2304, 0x0109), .driver_info=PINNA_PCTV_USB_SECAM },
150 { USB_DEVICE(0x2304, 0x0419) }, /* Pinnacle PCTV Bungee USB (PAL) FM */ 1075 { USB_DEVICE(0x2304, 0x0110), .driver_info=PINNA_PCTV_USB_PAL_FM },
151 { USB_DEVICE(0x2400, 0x4200) }, /* Hauppauge WinTv-USB2 Model 42012 */ 1076 { USB_DEVICE(0x2304, 0x0111), .driver_info=MIRO_PCTV_USB },
152 1077 { USB_DEVICE(0x2304, 0x0112), .driver_info=PINNA_PCTV_USB_NTSC_FM },
153 { } /* Terminating entry */ 1078 { USB_DEVICE(0x2304, 0x0210), .driver_info=PINNA_PCTV_USB_PAL_FM_V2 },
1079 { USB_DEVICE(0x2304, 0x0212), .driver_info=PINNA_PCTV_USB_NTSC_FM_V2 },
1080 { USB_DEVICE(0x2304, 0x0214), .driver_info=PINNA_PCTV_USB_PAL_FM_V3 },
1081 { USB_DEVICE(0x2304, 0x0300), .driver_info=PINNA_LINX_VD_IN_CAB_NTSC },
1082 { USB_DEVICE(0x2304, 0x0301), .driver_info=PINNA_LINX_VD_IN_CAB_PAL },
1083 { USB_DEVICE(0x2304, 0x0419), .driver_info=PINNA_PCTV_BUNGEE_PAL_FM },
1084 { USB_DEVICE(0x2400, 0x4200), .driver_info=HPG_WINTV },
154}; 1085};
155 1086
156MODULE_DEVICE_TABLE (usb, usbvision_table); 1087MODULE_DEVICE_TABLE (usb, usbvision_table);
diff --git a/drivers/media/video/usbvision/usbvision-cards.h b/drivers/media/video/usbvision/usbvision-cards.h
new file mode 100644
index 000000000000..512c5cee4145
--- /dev/null
+++ b/drivers/media/video/usbvision/usbvision-cards.h
@@ -0,0 +1,66 @@
1#define XANBOO 0
2#define BELKIN_VIDEOBUS_II 1
3#define BELKIN_VIDEOBUS 2
4#define BELKIN_USB_VIDEOBUS_II 3
5#define ECHOFX_INTERVIEW_LITE 4
6#define USBGEAR_USBG_V1 5
7#define D_LINK_V100 6
8#define X10_USB_CAMERA 7
9#define HPG_WINTV_LIVE_PAL_BG 8
10#define HPG_WINTV_LIVE_PRO_NTSC_MN 9
11#define ZORAN_PMD_NOGATECH 10
12#define NOGATECH_USB_TV_NTSC_FM 11
13#define PNY_USB_TV_NTSC_FM 12
14#define PV_PLAYTV_USB_PRO_PAL_FM 13
15#define ZT_721 14
16#define HPG_WINTV_NTSC_MN 15
17#define HPG_WINTV_PAL_BG 16
18#define HPG_WINTV_PAL_I 17
19#define HPG_WINTV_PAL_SECAM_L 18
20#define HPG_WINTV_PAL_D_K 19
21#define HPG_WINTV_NTSC_FM 20
22#define HPG_WINTV_PAL_BG_FM 21
23#define HPG_WINTV_PAL_I_FM 22
24#define HPG_WINTV_PAL_D_K_FM 23
25#define HPG_WINTV_PRO_NTSC_MN 24
26#define HPG_WINTV_PRO_NTSC_MN_V2 25
27#define HPG_WINTV_PRO_PAL 26
28#define HPG_WINTV_PRO_NTSC_MN_V3 27
29#define HPG_WINTV_PRO_PAL_BG 28
30#define HPG_WINTV_PRO_PAL_I 29
31#define HPG_WINTV_PRO_PAL_SECAM_L 30
32#define HPG_WINTV_PRO_PAL_D_K 31
33#define HPG_WINTV_PRO_PAL_SECAM 32
34#define HPG_WINTV_PRO_PAL_SECAM_V2 33
35#define HPG_WINTV_PRO_PAL_BG_V2 34
36#define HPG_WINTV_PRO_PAL_BG_D_K 35
37#define HPG_WINTV_PRO_PAL_I_D_K 36
38#define HPG_WINTV_PRO_NTSC_MN_FM 37
39#define HPG_WINTV_PRO_PAL_BG_FM 38
40#define HPG_WINTV_PRO_PAL_I_FM 39
41#define HPG_WINTV_PRO_PAL_D_K_FM 40
42#define HPG_WINTV_PRO_TEMIC_PAL_FM 41
43#define HPG_WINTV_PRO_TEMIC_PAL_BG_FM 42
44#define HPG_WINTV_PRO_PAL_FM 43
45#define HPG_WINTV_PRO_NTSC_MN_FM_V2 44
46#define CAMTEL_TVB330 45
47#define DIGITAL_VIDEO_CREATOR_I 46
48#define GLOBAL_VILLAGE_GV_007_NTSC 47
49#define DAZZLE_DVC_50_REV_1_NTSC 48
50#define DAZZLE_DVC_80_REV_1_PAL 49
51#define DAZZLE_DVC_90_REV_1_SECAM 50
52#define ESKAPE_LABS_MYTV2GO 51
53#define PINNA_PCTV_USB_PAL 52
54#define PINNA_PCTV_USB_SECAM 53
55#define PINNA_PCTV_USB_PAL_FM 54
56#define MIRO_PCTV_USB 55
57#define PINNA_PCTV_USB_NTSC_FM 56
58#define PINNA_PCTV_USB_PAL_FM_V2 57
59#define PINNA_PCTV_USB_NTSC_FM_V2 58
60#define PINNA_PCTV_USB_PAL_FM_V3 59
61#define PINNA_LINX_VD_IN_CAB_NTSC 60
62#define PINNA_LINX_VD_IN_CAB_PAL 61
63#define PINNA_PCTV_BUNGEE_PAL_FM 62
64#define HPG_WINTV 63
65
66extern const int usbvision_device_data_size;
diff --git a/drivers/media/video/usbvision/usbvision-core.c b/drivers/media/video/usbvision/usbvision-core.c
index f2154dc072e2..bcb551adb7e6 100644
--- a/drivers/media/video/usbvision/usbvision-core.c
+++ b/drivers/media/video/usbvision/usbvision-core.c
@@ -2040,8 +2040,8 @@ int usbvision_set_input(struct usb_usbvision *usbvision)
2040 return 0; 2040 return 0;
2041 2041
2042 /* Set input format expected from decoder*/ 2042 /* Set input format expected from decoder*/
2043 if (usbvision_device_data[usbvision->DevModel].Vin_Reg1 >= 0) { 2043 if (usbvision_device_data[usbvision->DevModel].Vin_Reg1_override) {
2044 value[0] = usbvision_device_data[usbvision->DevModel].Vin_Reg1 & 0xff; 2044 value[0] = usbvision_device_data[usbvision->DevModel].Vin_Reg1;
2045 } else if(usbvision_device_data[usbvision->DevModel].Codec == CODEC_SAA7113) { 2045 } else if(usbvision_device_data[usbvision->DevModel].Codec == CODEC_SAA7113) {
2046 /* SAA7113 uses 8 bit output */ 2046 /* SAA7113 uses 8 bit output */
2047 value[0] = USBVISION_8_422_SYNC; 2047 value[0] = USBVISION_8_422_SYNC;
@@ -2112,8 +2112,8 @@ int usbvision_set_input(struct usb_usbvision *usbvision)
2112 2112
2113 dvi_yuv_value = 0x00; /* U comes after V, Ya comes after U/V, Yb comes after Yb */ 2113 dvi_yuv_value = 0x00; /* U comes after V, Ya comes after U/V, Yb comes after Yb */
2114 2114
2115 if(usbvision_device_data[usbvision->DevModel].Dvi_yuv >= 0){ 2115 if(usbvision_device_data[usbvision->DevModel].Dvi_yuv_override){
2116 dvi_yuv_value = usbvision_device_data[usbvision->DevModel].Dvi_yuv & 0xff; 2116 dvi_yuv_value = usbvision_device_data[usbvision->DevModel].Dvi_yuv;
2117 } 2117 }
2118 else if(usbvision_device_data[usbvision->DevModel].Codec == CODEC_SAA7113) { 2118 else if(usbvision_device_data[usbvision->DevModel].Codec == CODEC_SAA7113) {
2119 /* This changes as the fine sync control changes. Further investigation necessary */ 2119 /* This changes as the fine sync control changes. Further investigation necessary */
@@ -2238,7 +2238,7 @@ static void call_usbvision_power_off(struct work_struct *work)
2238 PDEBUG(DBG_FUNC, ""); 2238 PDEBUG(DBG_FUNC, "");
2239 down_interruptible(&usbvision->lock); 2239 down_interruptible(&usbvision->lock);
2240 if(usbvision->user == 0) { 2240 if(usbvision->user == 0) {
2241 usbvision_i2c_usb_del_bus(&usbvision->i2c_adap); 2241 usbvision_i2c_unregister(usbvision);
2242 2242
2243 usbvision_power_off(usbvision); 2243 usbvision_power_off(usbvision);
2244 usbvision->initialized = 0; 2244 usbvision->initialized = 0;
diff --git a/drivers/media/video/usbvision/usbvision-i2c.c b/drivers/media/video/usbvision/usbvision-i2c.c
index 609e1fd9c784..025be555194f 100644
--- a/drivers/media/video/usbvision/usbvision-i2c.c
+++ b/drivers/media/video/usbvision/usbvision-i2c.c
@@ -1,8 +1,8 @@
1/* 1/*
2 * I2C_ALGO_USB.C 2 * usbvision_i2c.c
3 * i2c algorithm for USB-I2C Bridges 3 * i2c algorithm for USB-I2C Bridges
4 * 4 *
5 * Copyright (c) 1999-2005 Joerg Heckenbach <joerg@heckenbach-aw.de> 5 * Copyright (c) 1999-2007 Joerg Heckenbach <joerg@heckenbach-aw.de>
6 * Dwaine Garden <dwainegarden@rogers.com> 6 * Dwaine Garden <dwainegarden@rogers.com>
7 * 7 *
8 * This module is part of usbvision driver project. 8 * This module is part of usbvision driver project.
@@ -39,7 +39,6 @@
39#include "usbvision.h" 39#include "usbvision.h"
40 40
41#define DBG_I2C 1<<0 41#define DBG_I2C 1<<0
42#define DBG_ALGO 1<<1
43 42
44static int i2c_debug = 0; 43static int i2c_debug = 0;
45 44
@@ -49,22 +48,22 @@ MODULE_PARM_DESC(i2c_debug, "enable debug messages [i2c]");
49#define PDEBUG(level, fmt, args...) \ 48#define PDEBUG(level, fmt, args...) \
50 if (i2c_debug & (level)) info("[%s:%d] " fmt, __PRETTY_FUNCTION__, __LINE__ , ## args) 49 if (i2c_debug & (level)) info("[%s:%d] " fmt, __PRETTY_FUNCTION__, __LINE__ , ## args)
51 50
52static int usbvision_i2c_write(void *data, unsigned char addr, char *buf, 51static int usbvision_i2c_write(struct usb_usbvision *usbvision, unsigned char addr, char *buf,
53 short len); 52 short len);
54static int usbvision_i2c_read(void *data, unsigned char addr, char *buf, 53static int usbvision_i2c_read(struct usb_usbvision *usbvision, unsigned char addr, char *buf,
55 short len); 54 short len);
56 55
57static inline int try_write_address(struct i2c_adapter *i2c_adap, 56static inline int try_write_address(struct i2c_adapter *i2c_adap,
58 unsigned char addr, int retries) 57 unsigned char addr, int retries)
59{ 58{
60 void *data; 59 struct usb_usbvision *usbvision;
61 int i, ret = -1; 60 int i, ret = -1;
62 char buf[4]; 61 char buf[4];
63 62
64 data = i2c_get_adapdata(i2c_adap); 63 usbvision = (struct usb_usbvision *)i2c_get_adapdata(i2c_adap);
65 buf[0] = 0x00; 64 buf[0] = 0x00;
66 for (i = 0; i <= retries; i++) { 65 for (i = 0; i <= retries; i++) {
67 ret = (usbvision_i2c_write(data, addr, buf, 1)); 66 ret = (usbvision_i2c_write(usbvision, addr, buf, 1));
68 if (ret == 1) 67 if (ret == 1)
69 break; /* success! */ 68 break; /* success! */
70 udelay(5); 69 udelay(5);
@@ -73,8 +72,8 @@ static inline int try_write_address(struct i2c_adapter *i2c_adap,
73 udelay(10); 72 udelay(10);
74 } 73 }
75 if (i) { 74 if (i) {
76 PDEBUG(DBG_ALGO,"Needed %d retries for address %#2x", i, addr); 75 PDEBUG(DBG_I2C,"Needed %d retries for address %#2x", i, addr);
77 PDEBUG(DBG_ALGO,"Maybe there's no device at this address"); 76 PDEBUG(DBG_I2C,"Maybe there's no device at this address");
78 } 77 }
79 return ret; 78 return ret;
80} 79}
@@ -82,13 +81,13 @@ static inline int try_write_address(struct i2c_adapter *i2c_adap,
82static inline int try_read_address(struct i2c_adapter *i2c_adap, 81static inline int try_read_address(struct i2c_adapter *i2c_adap,
83 unsigned char addr, int retries) 82 unsigned char addr, int retries)
84{ 83{
85 void *data; 84 struct usb_usbvision *usbvision;
86 int i, ret = -1; 85 int i, ret = -1;
87 char buf[4]; 86 char buf[4];
88 87
89 data = i2c_get_adapdata(i2c_adap); 88 usbvision = (struct usb_usbvision *)i2c_get_adapdata(i2c_adap);
90 for (i = 0; i <= retries; i++) { 89 for (i = 0; i <= retries; i++) {
91 ret = (usbvision_i2c_read(data, addr, buf, 1)); 90 ret = (usbvision_i2c_read(usbvision, addr, buf, 1));
92 if (ret == 1) 91 if (ret == 1)
93 break; /* success! */ 92 break; /* success! */
94 udelay(5); 93 udelay(5);
@@ -97,8 +96,8 @@ static inline int try_read_address(struct i2c_adapter *i2c_adap,
97 udelay(10); 96 udelay(10);
98 } 97 }
99 if (i) { 98 if (i) {
100 PDEBUG(DBG_ALGO,"Needed %d retries for address %#2x", i, addr); 99 PDEBUG(DBG_I2C,"Needed %d retries for address %#2x", i, addr);
101 PDEBUG(DBG_ALGO,"Maybe there's no device at this address"); 100 PDEBUG(DBG_I2C,"Maybe there's no device at this address");
102 } 101 }
103 return ret; 102 return ret;
104} 103}
@@ -152,32 +151,32 @@ static inline int usb_find_address(struct i2c_adapter *i2c_adap,
152} 151}
153 152
154static int 153static int
155usb_xfer(struct i2c_adapter *i2c_adap, struct i2c_msg msgs[], int num) 154usbvision_i2c_xfer(struct i2c_adapter *i2c_adap, struct i2c_msg msgs[], int num)
156{ 155{
157 struct i2c_msg *pmsg; 156 struct i2c_msg *pmsg;
158 void *data; 157 struct usb_usbvision *usbvision;
159 int i, ret; 158 int i, ret;
160 unsigned char addr; 159 unsigned char addr;
161 160
162 data = i2c_get_adapdata(i2c_adap); 161 usbvision = (struct usb_usbvision *)i2c_get_adapdata(i2c_adap);
163 162
164 for (i = 0; i < num; i++) { 163 for (i = 0; i < num; i++) {
165 pmsg = &msgs[i]; 164 pmsg = &msgs[i];
166 ret = usb_find_address(i2c_adap, pmsg, i2c_adap->retries, &addr); 165 ret = usb_find_address(i2c_adap, pmsg, i2c_adap->retries, &addr);
167 if (ret != 0) { 166 if (ret != 0) {
168 PDEBUG(DBG_ALGO,"got NAK from device, message #%d", i); 167 PDEBUG(DBG_I2C,"got NAK from device, message #%d", i);
169 return (ret < 0) ? ret : -EREMOTEIO; 168 return (ret < 0) ? ret : -EREMOTEIO;
170 } 169 }
171 170
172 if (pmsg->flags & I2C_M_RD) { 171 if (pmsg->flags & I2C_M_RD) {
173 /* read bytes into buffer */ 172 /* read bytes into buffer */
174 ret = (usbvision_i2c_read(data, addr, pmsg->buf, pmsg->len)); 173 ret = (usbvision_i2c_read(usbvision, addr, pmsg->buf, pmsg->len));
175 if (ret < pmsg->len) { 174 if (ret < pmsg->len) {
176 return (ret < 0) ? ret : -EREMOTEIO; 175 return (ret < 0) ? ret : -EREMOTEIO;
177 } 176 }
178 } else { 177 } else {
179 /* write bytes from buffer */ 178 /* write bytes from buffer */
180 ret = (usbvision_i2c_write(data, addr, pmsg->buf, pmsg->len)); 179 ret = (usbvision_i2c_write(usbvision, addr, pmsg->buf, pmsg->len));
181 if (ret < pmsg->len) { 180 if (ret < pmsg->len) {
182 return (ret < 0) ? ret : -EREMOTEIO; 181 return (ret < 0) ? ret : -EREMOTEIO;
183 } 182 }
@@ -191,7 +190,7 @@ static int algo_control(struct i2c_adapter *adapter, unsigned int cmd, unsigned
191 return 0; 190 return 0;
192} 191}
193 192
194static u32 usb_func(struct i2c_adapter *adap) 193static u32 functionality(struct i2c_adapter *adap)
195{ 194{
196 return I2C_FUNC_SMBUS_EMUL | I2C_FUNC_10BIT_ADDR | I2C_FUNC_PROTOCOL_MANGLING; 195 return I2C_FUNC_SMBUS_EMUL | I2C_FUNC_10BIT_ADDR | I2C_FUNC_PROTOCOL_MANGLING;
197} 196}
@@ -199,11 +198,11 @@ static u32 usb_func(struct i2c_adapter *adap)
199 198
200/* -----exported algorithm data: ------------------------------------- */ 199/* -----exported algorithm data: ------------------------------------- */
201 200
202static struct i2c_algorithm i2c_usb_algo = { 201static struct i2c_algorithm usbvision_algo = {
203 .master_xfer = usb_xfer, 202 .master_xfer = usbvision_i2c_xfer,
204 .smbus_xfer = NULL, 203 .smbus_xfer = NULL,
205 .algo_control = algo_control, 204 .algo_control = algo_control,
206 .functionality = usb_func, 205 .functionality = functionality,
207}; 206};
208 207
209 208
@@ -213,41 +212,29 @@ static struct i2c_algorithm i2c_usb_algo = {
213static int usbvision_i2c_usb_add_bus(struct i2c_adapter *adap) 212static int usbvision_i2c_usb_add_bus(struct i2c_adapter *adap)
214{ 213{
215 PDEBUG(DBG_I2C, "I2C debugging is enabled [i2c]"); 214 PDEBUG(DBG_I2C, "I2C debugging is enabled [i2c]");
216 PDEBUG(DBG_ALGO, "ALGO debugging is enabled [i2c]"); 215 PDEBUG(DBG_I2C, "ALGO debugging is enabled [i2c]");
217 216
218 /* register new adapter to i2c module... */ 217 /* register new adapter to i2c module... */
219 218
220 adap->algo = &i2c_usb_algo; 219 adap->algo = &usbvision_algo;
221 220
222 adap->timeout = 100; /* default values, should */ 221 adap->timeout = 100; /* default values, should */
223 adap->retries = 3; /* be replaced by defines */ 222 adap->retries = 3; /* be replaced by defines */
224 223
225 i2c_add_adapter(adap); 224 i2c_add_adapter(adap);
226 225
227 PDEBUG(DBG_ALGO,"i2c bus for %s registered", adap->name); 226 PDEBUG(DBG_I2C,"i2c bus for %s registered", adap->name);
228
229 return 0;
230}
231
232
233int usbvision_i2c_usb_del_bus(struct i2c_adapter *adap)
234{
235
236 i2c_del_adapter(adap);
237
238 PDEBUG(DBG_ALGO,"i2c bus for %s unregistered", adap->name);
239 227
240 return 0; 228 return 0;
241} 229}
242 230
243
244/* ----------------------------------------------------------------------- */ 231/* ----------------------------------------------------------------------- */
245/* usbvision specific I2C functions */ 232/* usbvision specific I2C functions */
246/* ----------------------------------------------------------------------- */ 233/* ----------------------------------------------------------------------- */
247static struct i2c_adapter i2c_adap_template; 234static struct i2c_adapter i2c_adap_template;
248static struct i2c_client i2c_client_template; 235static struct i2c_client i2c_client_template;
249 236
250int usbvision_init_i2c(struct usb_usbvision *usbvision) 237int usbvision_i2c_register(struct usb_usbvision *usbvision)
251{ 238{
252 memcpy(&usbvision->i2c_adap, &i2c_adap_template, 239 memcpy(&usbvision->i2c_adap, &i2c_adap_template,
253 sizeof(struct i2c_adapter)); 240 sizeof(struct i2c_adapter));
@@ -265,7 +252,7 @@ int usbvision_init_i2c(struct usb_usbvision *usbvision)
265 usbvision->i2c_client.adapter = &usbvision->i2c_adap; 252 usbvision->i2c_client.adapter = &usbvision->i2c_adap;
266 253
267 if (usbvision_write_reg(usbvision, USBVISION_SER_MODE, USBVISION_IIC_LRNACK) < 0) { 254 if (usbvision_write_reg(usbvision, USBVISION_SER_MODE, USBVISION_IIC_LRNACK) < 0) {
268 printk(KERN_ERR "usbvision_init_i2c: can't write reg\n"); 255 printk(KERN_ERR "usbvision_register: can't write reg\n");
269 return -EBUSY; 256 return -EBUSY;
270 } 257 }
271 258
@@ -287,6 +274,16 @@ int usbvision_init_i2c(struct usb_usbvision *usbvision)
287 return usbvision_i2c_usb_add_bus(&usbvision->i2c_adap); 274 return usbvision_i2c_usb_add_bus(&usbvision->i2c_adap);
288} 275}
289 276
277int usbvision_i2c_unregister(struct usb_usbvision *usbvision)
278{
279
280 i2c_del_adapter(&(usbvision->i2c_adap));
281
282 PDEBUG(DBG_I2C,"i2c bus for %s unregistered", usbvision->i2c_adap.name);
283
284 return 0;
285}
286
290void call_i2c_clients(struct usb_usbvision *usbvision, unsigned int cmd, 287void call_i2c_clients(struct usb_usbvision *usbvision, unsigned int cmd,
291 void *arg) 288 void *arg)
292{ 289{
@@ -300,19 +297,12 @@ static int attach_inform(struct i2c_client *client)
300 usbvision = (struct usb_usbvision *)i2c_get_adapdata(client->adapter); 297 usbvision = (struct usb_usbvision *)i2c_get_adapdata(client->adapter);
301 298
302 switch (client->addr << 1) { 299 switch (client->addr << 1) {
303 case 0x43: 300 case 0x42 << 1:
304 case 0x4b: 301 case 0x43 << 1:
305 { 302 case 0x4a << 1:
306 struct tuner_setup tun_setup; 303 case 0x4b << 1:
307 304 PDEBUG(DBG_I2C,"attach_inform: tda9887 detected.");
308 tun_setup.mode_mask = T_ANALOG_TV | T_RADIO;
309 tun_setup.type = TUNER_TDA9887;
310 tun_setup.addr = client->addr;
311
312 call_i2c_clients(usbvision, TUNER_SET_TYPE_ADDR, &tun_setup);
313
314 break; 305 break;
315 }
316 case 0x42: 306 case 0x42:
317 PDEBUG(DBG_I2C,"attach_inform: saa7114 detected."); 307 PDEBUG(DBG_I2C,"attach_inform: saa7114 detected.");
318 break; 308 break;
@@ -480,7 +470,7 @@ static int usbvision_i2c_write_max4(struct usb_usbvision *usbvision,
480 return len; 470 return len;
481} 471}
482 472
483static int usbvision_i2c_write(void *data, unsigned char addr, char *buf, 473static int usbvision_i2c_write(struct usb_usbvision *usbvision, unsigned char addr, char *buf,
484 short len) 474 short len)
485{ 475{
486 char *bufPtr = buf; 476 char *bufPtr = buf;
@@ -488,7 +478,6 @@ static int usbvision_i2c_write(void *data, unsigned char addr, char *buf,
488 int wrcount = 0; 478 int wrcount = 0;
489 int count; 479 int count;
490 int maxLen = 4; 480 int maxLen = 4;
491 struct usb_usbvision *usbvision = (struct usb_usbvision *) data;
492 481
493 while (len > 0) { 482 while (len > 0) {
494 count = (len > maxLen) ? maxLen : len; 483 count = (len > maxLen) ? maxLen : len;
@@ -503,14 +492,13 @@ static int usbvision_i2c_write(void *data, unsigned char addr, char *buf,
503 return wrcount; 492 return wrcount;
504} 493}
505 494
506static int usbvision_i2c_read(void *data, unsigned char addr, char *buf, 495static int usbvision_i2c_read(struct usb_usbvision *usbvision, unsigned char addr, char *buf,
507 short len) 496 short len)
508{ 497{
509 char temp[4]; 498 char temp[4];
510 int retval, i; 499 int retval, i;
511 int rdcount = 0; 500 int rdcount = 0;
512 int count; 501 int count;
513 struct usb_usbvision *usbvision = (struct usb_usbvision *) data;
514 502
515 while (len > 0) { 503 while (len > 0) {
516 count = (len > 3) ? 4 : len; 504 count = (len > 3) ? 4 : len;
diff --git a/drivers/media/video/usbvision/usbvision-video.c b/drivers/media/video/usbvision/usbvision-video.c
index 6fc14557d623..216704170a4c 100644
--- a/drivers/media/video/usbvision/usbvision-video.c
+++ b/drivers/media/video/usbvision/usbvision-video.c
@@ -76,6 +76,7 @@
76#endif 76#endif
77 77
78#include "usbvision.h" 78#include "usbvision.h"
79#include "usbvision-cards.h"
79 80
80#define DRIVER_AUTHOR "Joerg Heckenbach <joerg@heckenbach-aw.de>, Dwaine Garden <DwaineGarden@rogers.com>" 81#define DRIVER_AUTHOR "Joerg Heckenbach <joerg@heckenbach-aw.de>, Dwaine Garden <DwaineGarden@rogers.com>"
81#define DRIVER_NAME "usbvision" 82#define DRIVER_NAME "usbvision"
@@ -150,7 +151,6 @@ static int PowerOnAtOpen = 1; // Set the default device to power on at startu
150static int video_nr = -1; // Sequential Number of Video Device 151static int video_nr = -1; // Sequential Number of Video Device
151static int radio_nr = -1; // Sequential Number of Radio Device 152static int radio_nr = -1; // Sequential Number of Radio Device
152static int vbi_nr = -1; // Sequential Number of VBI Device 153static int vbi_nr = -1; // Sequential Number of VBI Device
153static char *CustomDevice=NULL; // Set as nothing....
154 154
155// Grab parameters for the device driver 155// Grab parameters for the device driver
156 156
@@ -161,7 +161,6 @@ module_param(PowerOnAtOpen, int, 0444);
161module_param(video_nr, int, 0444); 161module_param(video_nr, int, 0444);
162module_param(radio_nr, int, 0444); 162module_param(radio_nr, int, 0444);
163module_param(vbi_nr, int, 0444); 163module_param(vbi_nr, int, 0444);
164module_param(CustomDevice, charp, 0444);
165#else // Old Style 164#else // Old Style
166MODULE_PARAM(isocMode, "i"); 165MODULE_PARAM(isocMode, "i");
167MODULE_PARM(video_debug, "i"); // Grab the Debug Mode of the device driver 166MODULE_PARM(video_debug, "i"); // Grab the Debug Mode of the device driver
@@ -171,7 +170,6 @@ MODULE_PARM(SwitchSVideoInput, "i"); // To help people with Black and White ou
171MODULE_PARM(video_nr, "i"); // video_nr option allows to specify a certain /dev/videoX device (like /dev/video0 or /dev/video1 ...) 170MODULE_PARM(video_nr, "i"); // video_nr option allows to specify a certain /dev/videoX device (like /dev/video0 or /dev/video1 ...)
172MODULE_PARM(radio_nr, "i"); // radio_nr option allows to specify a certain /dev/radioX device (like /dev/radio0 or /dev/radio1 ...) 171MODULE_PARM(radio_nr, "i"); // radio_nr option allows to specify a certain /dev/radioX device (like /dev/radio0 or /dev/radio1 ...)
173MODULE_PARM(vbi_nr, "i"); // vbi_nr option allows to specify a certain /dev/vbiX device (like /dev/vbi0 or /dev/vbi1 ...) 172MODULE_PARM(vbi_nr, "i"); // vbi_nr option allows to specify a certain /dev/vbiX device (like /dev/vbi0 or /dev/vbi1 ...)
174MODULE_PARM(CustomDevice, "s"); // .... CustomDevice
175#endif 173#endif
176 174
177MODULE_PARM_DESC(isocMode, " Set the default format for ISOC endpoint. Default: 0x60 (Compression On)"); 175MODULE_PARM_DESC(isocMode, " Set the default format for ISOC endpoint. Default: 0x60 (Compression On)");
@@ -180,7 +178,6 @@ MODULE_PARM_DESC(PowerOnAtOpen, " Set the default device to power on when device
180MODULE_PARM_DESC(video_nr, "Set video device number (/dev/videoX). Default: -1 (autodetect)"); 178MODULE_PARM_DESC(video_nr, "Set video device number (/dev/videoX). Default: -1 (autodetect)");
181MODULE_PARM_DESC(radio_nr, "Set radio device number (/dev/radioX). Default: -1 (autodetect)"); 179MODULE_PARM_DESC(radio_nr, "Set radio device number (/dev/radioX). Default: -1 (autodetect)");
182MODULE_PARM_DESC(vbi_nr, "Set vbi device number (/dev/vbiX). Default: -1 (autodetect)"); 180MODULE_PARM_DESC(vbi_nr, "Set vbi device number (/dev/vbiX). Default: -1 (autodetect)");
183MODULE_PARM_DESC(CustomDevice, " Define the fine tuning parameters for the device. Default: null");
184 181
185 182
186// Misc stuff 183// Misc stuff
@@ -409,7 +406,7 @@ static int usbvision_v4l2_open(struct inode *inode, struct file *file)
409 down(&usbvision->lock); 406 down(&usbvision->lock);
410 if (usbvision->power == 0) { 407 if (usbvision->power == 0) {
411 usbvision_power_on(usbvision); 408 usbvision_power_on(usbvision);
412 usbvision_init_i2c(usbvision); 409 usbvision_i2c_register(usbvision);
413 } 410 }
414 411
415 /* Send init sequence only once, it's large! */ 412 /* Send init sequence only once, it's large! */
@@ -431,7 +428,7 @@ static int usbvision_v4l2_open(struct inode *inode, struct file *file)
431 } 428 }
432 else { 429 else {
433 if (PowerOnAtOpen) { 430 if (PowerOnAtOpen) {
434 usbvision_i2c_usb_del_bus(&usbvision->i2c_adap); 431 usbvision_i2c_unregister(usbvision);
435 usbvision_power_off(usbvision); 432 usbvision_power_off(usbvision);
436 usbvision->initialized = 0; 433 usbvision->initialized = 0;
437 } 434 }
@@ -1239,7 +1236,7 @@ static int usbvision_radio_open(struct inode *inode, struct file *file)
1239 usbvision_reset_powerOffTimer(usbvision); 1236 usbvision_reset_powerOffTimer(usbvision);
1240 if (usbvision->power == 0) { 1237 if (usbvision->power == 0) {
1241 usbvision_power_on(usbvision); 1238 usbvision_power_on(usbvision);
1242 usbvision_init_i2c(usbvision); 1239 usbvision_i2c_register(usbvision);
1243 } 1240 }
1244 } 1241 }
1245 1242
@@ -1261,7 +1258,7 @@ static int usbvision_radio_open(struct inode *inode, struct file *file)
1261 1258
1262 if (errCode) { 1259 if (errCode) {
1263 if (PowerOnAtOpen) { 1260 if (PowerOnAtOpen) {
1264 usbvision_i2c_usb_del_bus(&usbvision->i2c_adap); 1261 usbvision_i2c_unregister(usbvision);
1265 usbvision_power_off(usbvision); 1262 usbvision_power_off(usbvision);
1266 usbvision->initialized = 0; 1263 usbvision->initialized = 0;
1267 } 1264 }
@@ -1744,8 +1741,8 @@ static void usbvision_configure_video(struct usb_usbvision *usbvision)
1744 model = usbvision->DevModel; 1741 model = usbvision->DevModel;
1745 usbvision->palette = usbvision_v4l2_format[2]; // V4L2_PIX_FMT_RGB24; 1742 usbvision->palette = usbvision_v4l2_format[2]; // V4L2_PIX_FMT_RGB24;
1746 1743
1747 if (usbvision_device_data[usbvision->DevModel].Vin_Reg2 >= 0) { 1744 if (usbvision_device_data[usbvision->DevModel].Vin_Reg2_override) {
1748 usbvision->Vin_Reg2_Preset = usbvision_device_data[usbvision->DevModel].Vin_Reg2 & 0xff; 1745 usbvision->Vin_Reg2_Preset = usbvision_device_data[usbvision->DevModel].Vin_Reg2;
1749 } else { 1746 } else {
1750 usbvision->Vin_Reg2_Preset = 0; 1747 usbvision->Vin_Reg2_Preset = 0;
1751 } 1748 }
@@ -1764,7 +1761,7 @@ static void usbvision_configure_video(struct usb_usbvision *usbvision)
1764 usbvision_audio_off(usbvision); //first switch off audio 1761 usbvision_audio_off(usbvision); //first switch off audio
1765 if (!PowerOnAtOpen) { 1762 if (!PowerOnAtOpen) {
1766 usbvision_power_on(usbvision); //and then power up the noisy tuner 1763 usbvision_power_on(usbvision); //and then power up the noisy tuner
1767 usbvision_init_i2c(usbvision); 1764 usbvision_i2c_register(usbvision);
1768 } 1765 }
1769} 1766}
1770 1767
@@ -1775,7 +1772,8 @@ static void usbvision_configure_video(struct usb_usbvision *usbvision)
1775 * if it looks like USBVISION video device 1772 * if it looks like USBVISION video device
1776 * 1773 *
1777 */ 1774 */
1778static int __devinit usbvision_probe(struct usb_interface *intf, const struct usb_device_id *devid) 1775static int __devinit usbvision_probe(struct usb_interface *intf,
1776 const struct usb_device_id *devid)
1779{ 1777{
1780 struct usb_device *dev = usb_get_dev(interface_to_usbdev(intf)); 1778 struct usb_device *dev = usb_get_dev(interface_to_usbdev(intf));
1781 struct usb_interface *uif; 1779 struct usb_interface *uif;
@@ -1786,25 +1784,17 @@ static int __devinit usbvision_probe(struct usb_interface *intf, const struct us
1786 int model,i; 1784 int model,i;
1787 1785
1788 PDEBUG(DBG_PROBE, "VID=%#04x, PID=%#04x, ifnum=%u", 1786 PDEBUG(DBG_PROBE, "VID=%#04x, PID=%#04x, ifnum=%u",
1789 dev->descriptor.idVendor, dev->descriptor.idProduct, ifnum); 1787 dev->descriptor.idVendor,
1788 dev->descriptor.idProduct, ifnum);
1790 1789
1791 /* Is it an USBVISION video dev? */ 1790 model = devid->driver_info;
1792 model = 0; 1791 if ( (model<0) || (model>=usbvision_device_data_size) ) {
1793 for(model = 0; usbvision_device_data[model].idVendor; model++) { 1792 PDEBUG(DBG_PROBE, "model out of bounds %d",model);
1794 if (le16_to_cpu(dev->descriptor.idVendor) != usbvision_device_data[model].idVendor) { 1793 return -ENODEV;
1795 continue;
1796 }
1797 if (le16_to_cpu(dev->descriptor.idProduct) != usbvision_device_data[model].idProduct) {
1798 continue;
1799 }
1800
1801 printk(KERN_INFO "%s: %s found\n", __FUNCTION__, usbvision_device_data[model].ModelString);
1802 break;
1803 } 1794 }
1795 printk(KERN_INFO "%s: %s found\n", __FUNCTION__,
1796 usbvision_device_data[model].ModelString);
1804 1797
1805 if (usbvision_device_data[model].idVendor == 0) {
1806 return -ENODEV; //no matching device
1807 }
1808 if (usbvision_device_data[model].Interface >= 0) { 1798 if (usbvision_device_data[model].Interface >= 0) {
1809 interface = &dev->actconfig->interface[usbvision_device_data[model].Interface]->altsetting[0]; 1799 interface = &dev->actconfig->interface[usbvision_device_data[model].Interface]->altsetting[0];
1810 } 1800 }
@@ -1822,16 +1812,15 @@ static int __devinit usbvision_probe(struct usb_interface *intf, const struct us
1822 return -ENODEV; 1812 return -ENODEV;
1823 } 1813 }
1824 1814
1825 usb_get_dev(dev);
1826
1827 if ((usbvision = usbvision_alloc(dev)) == NULL) { 1815 if ((usbvision = usbvision_alloc(dev)) == NULL) {
1828 err("%s: couldn't allocate USBVision struct", __FUNCTION__); 1816 err("%s: couldn't allocate USBVision struct", __FUNCTION__);
1829 return -ENOMEM; 1817 return -ENOMEM;
1830 } 1818 }
1819
1831 if (dev->descriptor.bNumConfigurations > 1) { 1820 if (dev->descriptor.bNumConfigurations > 1) {
1832 usbvision->bridgeType = BRIDGE_NT1004; 1821 usbvision->bridgeType = BRIDGE_NT1004;
1833 } 1822 }
1834 else if (usbvision_device_data[model].ModelString == "Dazzle Fusion Model DVC-90 Rev 1 (SECAM)") { 1823 else if (model == DAZZLE_DVC_90_REV_1_SECAM) {
1835 usbvision->bridgeType = BRIDGE_NT1005; 1824 usbvision->bridgeType = BRIDGE_NT1005;
1836 } 1825 }
1837 else { 1826 else {
@@ -1920,7 +1909,7 @@ static void __devexit usbvision_disconnect(struct usb_interface *intf)
1920 usbvision_stop_isoc(usbvision); 1909 usbvision_stop_isoc(usbvision);
1921 1910
1922 if (usbvision->power) { 1911 if (usbvision->power) {
1923 usbvision_i2c_usb_del_bus(&usbvision->i2c_adap); 1912 usbvision_i2c_unregister(usbvision);
1924 usbvision_power_off(usbvision); 1913 usbvision_power_off(usbvision);
1925 } 1914 }
1926 usbvision->remove_pending = 1; // Now all ISO data will be ignored 1915 usbvision->remove_pending = 1; // Now all ISO data will be ignored
@@ -1951,124 +1940,6 @@ static struct usb_driver usbvision_driver = {
1951}; 1940};
1952 1941
1953/* 1942/*
1954 * customdevice_process()
1955 *
1956 * This procedure preprocesses CustomDevice parameter if any
1957 *
1958 */
1959static void customdevice_process(void)
1960{
1961 usbvision_device_data[0]=usbvision_device_data[1];
1962 usbvision_table[0]=usbvision_table[1];
1963
1964 if(CustomDevice)
1965 {
1966 char *parse=CustomDevice;
1967
1968 PDEBUG(DBG_PROBE, "CustomDevide=%s", CustomDevice);
1969
1970 /*format is CustomDevice="0x0573 0x4D31 0 7113 3 PAL 1 1 1 5 -1 -1 -1 -1 -1"
1971 usbvision_device_data[0].idVendor;
1972 usbvision_device_data[0].idProduct;
1973 usbvision_device_data[0].Interface;
1974 usbvision_device_data[0].Codec;
1975 usbvision_device_data[0].VideoChannels;
1976 usbvision_device_data[0].VideoNorm;
1977 usbvision_device_data[0].AudioChannels;
1978 usbvision_device_data[0].Radio;
1979 usbvision_device_data[0].Tuner;
1980 usbvision_device_data[0].TunerType;
1981 usbvision_device_data[0].Vin_Reg1;
1982 usbvision_device_data[0].Vin_Reg2;
1983 usbvision_device_data[0].X_Offset;
1984 usbvision_device_data[0].Y_Offset;
1985 usbvision_device_data[0].Dvi_yuv;
1986 usbvision_device_data[0].ModelString;
1987 */
1988
1989 rmspace(parse);
1990 usbvision_device_data[0].ModelString="USBVISION Custom Device";
1991
1992 parse+=2;
1993 sscanf(parse,"%x",&usbvision_device_data[0].idVendor);
1994 goto2next(parse);
1995 PDEBUG(DBG_PROBE, "idVendor=0x%.4X", usbvision_device_data[0].idVendor);
1996 parse+=2;
1997 sscanf(parse,"%x",&usbvision_device_data[0].idProduct);
1998 goto2next(parse);
1999 PDEBUG(DBG_PROBE, "idProduct=0x%.4X", usbvision_device_data[0].idProduct);
2000 sscanf(parse,"%d",&usbvision_device_data[0].Interface);
2001 goto2next(parse);
2002 PDEBUG(DBG_PROBE, "Interface=%d", usbvision_device_data[0].Interface);
2003 sscanf(parse,"%d",&usbvision_device_data[0].Codec);
2004 goto2next(parse);
2005 PDEBUG(DBG_PROBE, "Codec=%d", usbvision_device_data[0].Codec);
2006 sscanf(parse,"%d",&usbvision_device_data[0].VideoChannels);
2007 goto2next(parse);
2008 PDEBUG(DBG_PROBE, "VideoChannels=%d", usbvision_device_data[0].VideoChannels);
2009
2010 switch(*parse)
2011 {
2012 case 'P':
2013 PDEBUG(DBG_PROBE, "VideoNorm=PAL");
2014 usbvision_device_data[0].VideoNorm=V4L2_STD_PAL;
2015 break;
2016
2017 case 'S':
2018 PDEBUG(DBG_PROBE, "VideoNorm=SECAM");
2019 usbvision_device_data[0].VideoNorm=V4L2_STD_SECAM;
2020 break;
2021
2022 case 'N':
2023 PDEBUG(DBG_PROBE, "VideoNorm=NTSC");
2024 usbvision_device_data[0].VideoNorm=V4L2_STD_NTSC;
2025 break;
2026
2027 default:
2028 PDEBUG(DBG_PROBE, "VideoNorm=PAL (by default)");
2029 usbvision_device_data[0].VideoNorm=V4L2_STD_PAL;
2030 break;
2031 }
2032 goto2next(parse);
2033
2034 sscanf(parse,"%d",&usbvision_device_data[0].AudioChannels);
2035 goto2next(parse);
2036 PDEBUG(DBG_PROBE, "AudioChannels=%d", usbvision_device_data[0].AudioChannels);
2037 sscanf(parse,"%d",&usbvision_device_data[0].Radio);
2038 goto2next(parse);
2039 PDEBUG(DBG_PROBE, "Radio=%d", usbvision_device_data[0].Radio);
2040 sscanf(parse,"%d",&usbvision_device_data[0].Tuner);
2041 goto2next(parse);
2042 PDEBUG(DBG_PROBE, "Tuner=%d", usbvision_device_data[0].Tuner);
2043 sscanf(parse,"%d",&usbvision_device_data[0].TunerType);
2044 goto2next(parse);
2045 PDEBUG(DBG_PROBE, "TunerType=%d", usbvision_device_data[0].TunerType);
2046 sscanf(parse,"%d",&usbvision_device_data[0].Vin_Reg1);
2047 goto2next(parse);
2048 PDEBUG(DBG_PROBE, "Vin_Reg1=%d", usbvision_device_data[0].Vin_Reg1);
2049 sscanf(parse,"%d",&usbvision_device_data[0].Vin_Reg2);
2050 goto2next(parse);
2051 PDEBUG(DBG_PROBE, "Vin_Reg2=%d", usbvision_device_data[0].Vin_Reg2);
2052 sscanf(parse,"%d",&usbvision_device_data[0].X_Offset);
2053 goto2next(parse);
2054 PDEBUG(DBG_PROBE, "X_Offset=%d", usbvision_device_data[0].X_Offset);
2055 sscanf(parse,"%d",&usbvision_device_data[0].Y_Offset);
2056 goto2next(parse);
2057 PDEBUG(DBG_PROBE, "Y_Offset=%d", usbvision_device_data[0].Y_Offset);
2058 sscanf(parse,"%d",&usbvision_device_data[0].Dvi_yuv);
2059 PDEBUG(DBG_PROBE, "Dvi_yuv=%d", usbvision_device_data[0].Dvi_yuv);
2060
2061 //add to usbvision_table also
2062 usbvision_table[0].match_flags=USB_DEVICE_ID_MATCH_DEVICE;
2063 usbvision_table[0].idVendor=usbvision_device_data[0].idVendor;
2064 usbvision_table[0].idProduct=usbvision_device_data[0].idProduct;
2065
2066 }
2067}
2068
2069
2070
2071/*
2072 * usbvision_init() 1943 * usbvision_init()
2073 * 1944 *
2074 * This code is run to initialize the driver. 1945 * This code is run to initialize the driver.
@@ -2092,8 +1963,6 @@ static int __init usbvision_init(void)
2092 usbvision_v4l2_format[7].supported = 0; // V4L2_PIX_FMT_YUV422P 1963 usbvision_v4l2_format[7].supported = 0; // V4L2_PIX_FMT_YUV422P
2093 } 1964 }
2094 1965
2095 customdevice_process();
2096
2097 errCode = usb_register(&usbvision_driver); 1966 errCode = usb_register(&usbvision_driver);
2098 1967
2099 if (errCode == 0) { 1968 if (errCode == 0) {
diff --git a/drivers/media/video/usbvision/usbvision.h b/drivers/media/video/usbvision/usbvision.h
index ad6afd3e42a4..bd6f6422ed54 100644
--- a/drivers/media/video/usbvision/usbvision.h
+++ b/drivers/media/video/usbvision/usbvision.h
@@ -342,23 +342,24 @@ struct usbvision_frame {
342#define BRIDGE_NT1005 1005 342#define BRIDGE_NT1005 1005
343 343
344struct usbvision_device_data_st { 344struct usbvision_device_data_st {
345 int idVendor;
346 int idProduct;
347 int Interface; /* to handle special interface number like BELKIN and Hauppauge WinTV-USB II */
348 int Codec;
349 int VideoChannels;
350 __u64 VideoNorm; 345 __u64 VideoNorm;
351 int AudioChannels; 346 const char *ModelString;
352 int Radio; 347 int Interface; /* to handle special interface number like BELKIN and Hauppauge WinTV-USB II */
353 int vbi; 348 __u16 Codec;
354 int Tuner; 349 unsigned VideoChannels:3;
355 int TunerType; 350 unsigned AudioChannels:2;
356 int Vin_Reg1; 351 unsigned Radio:1;
357 int Vin_Reg2; 352 unsigned vbi:1;
358 int X_Offset; 353 unsigned Tuner:1;
359 int Y_Offset; 354 unsigned Vin_Reg1_override:1; /* Override default value with */
360 int Dvi_yuv; 355 unsigned Vin_Reg2_override:1; /* Vin_Reg1, Vin_Reg2, etc. */
361 char *ModelString; 356 unsigned Dvi_yuv_override:1;
357 __u8 Vin_Reg1;
358 __u8 Vin_Reg2;
359 __u8 Dvi_yuv;
360 __u8 TunerType;
361 __s16 X_Offset;
362 __s16 Y_Offset;
362}; 363};
363 364
364/* Declared on usbvision-cards.c */ 365/* Declared on usbvision-cards.c */
@@ -481,13 +482,11 @@ struct usb_usbvision {
481/* i2c-algo-usb declaration */ 482/* i2c-algo-usb declaration */
482/* --------------------------------------------------------------- */ 483/* --------------------------------------------------------------- */
483 484
484int usbvision_i2c_usb_del_bus(struct i2c_adapter *);
485
486
487/* ----------------------------------------------------------------------- */ 485/* ----------------------------------------------------------------------- */
488/* usbvision specific I2C functions */ 486/* usbvision specific I2C functions */
489/* ----------------------------------------------------------------------- */ 487/* ----------------------------------------------------------------------- */
490int usbvision_init_i2c(struct usb_usbvision *usbvision); 488int usbvision_i2c_register(struct usb_usbvision *usbvision);
489int usbvision_i2c_unregister(struct usb_usbvision *usbvision);
491void call_i2c_clients(struct usb_usbvision *usbvision, unsigned int cmd,void *arg); 490void call_i2c_clients(struct usb_usbvision *usbvision, unsigned int cmd,void *arg);
492 491
493/* defined in usbvision-core.c */ 492/* defined in usbvision-core.c */