diff options
author | Paul Mackerras <paulus@samba.org> | 2007-04-29 22:38:01 -0400 |
---|---|---|
committer | Paul Mackerras <paulus@samba.org> | 2007-04-29 22:38:01 -0400 |
commit | 49e1900d4cc2e7bcecb681fe60f0990bec2dcce8 (patch) | |
tree | 253801ebf57e0a23856a2c7be129c2c178f62fdf /drivers/media/video/usbvision | |
parent | 34f6d749c0a328817d5e36274e53121c1db734dc (diff) | |
parent | b9099ff63c75216d6ca10bce5a1abcd9293c27e6 (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.c | 1165 | ||||
-rw-r--r-- | drivers/media/video/usbvision/usbvision-cards.h | 66 | ||||
-rw-r--r-- | drivers/media/video/usbvision/usbvision-core.c | 10 | ||||
-rw-r--r-- | drivers/media/video/usbvision/usbvision-i2c.c | 104 | ||||
-rw-r--r-- | drivers/media/video/usbvision/usbvision-video.c | 173 | ||||
-rw-r--r-- | drivers/media/video/usbvision/usbvision.h | 39 |
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*/ |
33 | struct usbvision_device_data_st usbvision_device_data[] = { | 34 | struct 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 | }; |
1016 | const int usbvision_device_data_size=ARRAY_SIZE(usbvision_device_data); | ||
92 | 1017 | ||
93 | /* Supported Devices */ | 1018 | /* Supported Devices */ |
94 | 1019 | ||
95 | struct usb_device_id usbvision_table [] = { | 1020 | struct 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 | ||
156 | MODULE_DEVICE_TABLE (usb, usbvision_table); | 1087 | MODULE_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 | |||
66 | extern 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 | ||
44 | static int i2c_debug = 0; | 43 | static 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 | ||
52 | static int usbvision_i2c_write(void *data, unsigned char addr, char *buf, | 51 | static int usbvision_i2c_write(struct usb_usbvision *usbvision, unsigned char addr, char *buf, |
53 | short len); | 52 | short len); |
54 | static int usbvision_i2c_read(void *data, unsigned char addr, char *buf, | 53 | static int usbvision_i2c_read(struct usb_usbvision *usbvision, unsigned char addr, char *buf, |
55 | short len); | 54 | short len); |
56 | 55 | ||
57 | static inline int try_write_address(struct i2c_adapter *i2c_adap, | 56 | static 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, | |||
82 | static inline int try_read_address(struct i2c_adapter *i2c_adap, | 81 | static 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 | ||
154 | static int | 153 | static int |
155 | usb_xfer(struct i2c_adapter *i2c_adap, struct i2c_msg msgs[], int num) | 154 | usbvision_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 | ||
194 | static u32 usb_func(struct i2c_adapter *adap) | 193 | static 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 | ||
202 | static struct i2c_algorithm i2c_usb_algo = { | 201 | static 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 = { | |||
213 | static int usbvision_i2c_usb_add_bus(struct i2c_adapter *adap) | 212 | static 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 | |||
233 | int 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 | /* ----------------------------------------------------------------------- */ |
247 | static struct i2c_adapter i2c_adap_template; | 234 | static struct i2c_adapter i2c_adap_template; |
248 | static struct i2c_client i2c_client_template; | 235 | static struct i2c_client i2c_client_template; |
249 | 236 | ||
250 | int usbvision_init_i2c(struct usb_usbvision *usbvision) | 237 | int 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 | ||
277 | int 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 | |||
290 | void call_i2c_clients(struct usb_usbvision *usbvision, unsigned int cmd, | 287 | void 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 | ||
483 | static int usbvision_i2c_write(void *data, unsigned char addr, char *buf, | 473 | static 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 | ||
506 | static int usbvision_i2c_read(void *data, unsigned char addr, char *buf, | 495 | static 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 | |||
150 | static int video_nr = -1; // Sequential Number of Video Device | 151 | static int video_nr = -1; // Sequential Number of Video Device |
151 | static int radio_nr = -1; // Sequential Number of Radio Device | 152 | static int radio_nr = -1; // Sequential Number of Radio Device |
152 | static int vbi_nr = -1; // Sequential Number of VBI Device | 153 | static int vbi_nr = -1; // Sequential Number of VBI Device |
153 | static 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); | |||
161 | module_param(video_nr, int, 0444); | 161 | module_param(video_nr, int, 0444); |
162 | module_param(radio_nr, int, 0444); | 162 | module_param(radio_nr, int, 0444); |
163 | module_param(vbi_nr, int, 0444); | 163 | module_param(vbi_nr, int, 0444); |
164 | module_param(CustomDevice, charp, 0444); | ||
165 | #else // Old Style | 164 | #else // Old Style |
166 | MODULE_PARAM(isocMode, "i"); | 165 | MODULE_PARAM(isocMode, "i"); |
167 | MODULE_PARM(video_debug, "i"); // Grab the Debug Mode of the device driver | 166 | MODULE_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 | |||
171 | MODULE_PARM(video_nr, "i"); // video_nr option allows to specify a certain /dev/videoX device (like /dev/video0 or /dev/video1 ...) | 170 | MODULE_PARM(video_nr, "i"); // video_nr option allows to specify a certain /dev/videoX device (like /dev/video0 or /dev/video1 ...) |
172 | MODULE_PARM(radio_nr, "i"); // radio_nr option allows to specify a certain /dev/radioX device (like /dev/radio0 or /dev/radio1 ...) | 171 | MODULE_PARM(radio_nr, "i"); // radio_nr option allows to specify a certain /dev/radioX device (like /dev/radio0 or /dev/radio1 ...) |
173 | MODULE_PARM(vbi_nr, "i"); // vbi_nr option allows to specify a certain /dev/vbiX device (like /dev/vbi0 or /dev/vbi1 ...) | 172 | MODULE_PARM(vbi_nr, "i"); // vbi_nr option allows to specify a certain /dev/vbiX device (like /dev/vbi0 or /dev/vbi1 ...) |
174 | MODULE_PARM(CustomDevice, "s"); // .... CustomDevice | ||
175 | #endif | 173 | #endif |
176 | 174 | ||
177 | MODULE_PARM_DESC(isocMode, " Set the default format for ISOC endpoint. Default: 0x60 (Compression On)"); | 175 | MODULE_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 | |||
180 | MODULE_PARM_DESC(video_nr, "Set video device number (/dev/videoX). Default: -1 (autodetect)"); | 178 | MODULE_PARM_DESC(video_nr, "Set video device number (/dev/videoX). Default: -1 (autodetect)"); |
181 | MODULE_PARM_DESC(radio_nr, "Set radio device number (/dev/radioX). Default: -1 (autodetect)"); | 179 | MODULE_PARM_DESC(radio_nr, "Set radio device number (/dev/radioX). Default: -1 (autodetect)"); |
182 | MODULE_PARM_DESC(vbi_nr, "Set vbi device number (/dev/vbiX). Default: -1 (autodetect)"); | 180 | MODULE_PARM_DESC(vbi_nr, "Set vbi device number (/dev/vbiX). Default: -1 (autodetect)"); |
183 | MODULE_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 | */ |
1778 | static int __devinit usbvision_probe(struct usb_interface *intf, const struct usb_device_id *devid) | 1775 | static 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 | */ | ||
1959 | static 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 | ||
344 | struct usbvision_device_data_st { | 344 | struct 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 | ||
484 | int usbvision_i2c_usb_del_bus(struct i2c_adapter *); | ||
485 | |||
486 | |||
487 | /* ----------------------------------------------------------------------- */ | 485 | /* ----------------------------------------------------------------------- */ |
488 | /* usbvision specific I2C functions */ | 486 | /* usbvision specific I2C functions */ |
489 | /* ----------------------------------------------------------------------- */ | 487 | /* ----------------------------------------------------------------------- */ |
490 | int usbvision_init_i2c(struct usb_usbvision *usbvision); | 488 | int usbvision_i2c_register(struct usb_usbvision *usbvision); |
489 | int usbvision_i2c_unregister(struct usb_usbvision *usbvision); | ||
491 | void call_i2c_clients(struct usb_usbvision *usbvision, unsigned int cmd,void *arg); | 490 | void 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 */ |