diff options
-rw-r--r-- | drivers/media/video/em28xx/em28xx-cards.c | 203 |
1 files changed, 113 insertions, 90 deletions
diff --git a/drivers/media/video/em28xx/em28xx-cards.c b/drivers/media/video/em28xx/em28xx-cards.c index 29e935f41098..c4204c90fb01 100644 --- a/drivers/media/video/em28xx/em28xx-cards.c +++ b/drivers/media/video/em28xx/em28xx-cards.c | |||
@@ -1,5 +1,6 @@ | |||
1 | /* | 1 | /* |
2 | em28xx-cards.c - driver for Empia EM2800/EM2820/2840 USB video capture devices | 2 | em28xx-cards.c - driver for Empia EM2800/EM2820/2840 USB |
3 | video capture devices | ||
3 | 4 | ||
4 | Copyright (C) 2005 Ludovico Cavedon <cavedon@sssup.it> | 5 | Copyright (C) 2005 Ludovico Cavedon <cavedon@sssup.it> |
5 | Markus Rechberger <mrechberger@gmail.com> | 6 | Markus Rechberger <mrechberger@gmail.com> |
@@ -55,15 +56,15 @@ struct em28xx_board em28xx_boards[] = { | |||
55 | .tda9887_conf = TDA9887_PRESENT, | 56 | .tda9887_conf = TDA9887_PRESENT, |
56 | .has_tuner = 1, | 57 | .has_tuner = 1, |
57 | .decoder = EM28XX_SAA7113, | 58 | .decoder = EM28XX_SAA7113, |
58 | .input = {{ | 59 | .input = { { |
59 | .type = EM28XX_VMUX_COMPOSITE1, | 60 | .type = EM28XX_VMUX_COMPOSITE1, |
60 | .vmux = SAA7115_COMPOSITE0, | 61 | .vmux = SAA7115_COMPOSITE0, |
61 | .amux = 1, | 62 | .amux = 1, |
62 | },{ | 63 | }, { |
63 | .type = EM28XX_VMUX_SVIDEO, | 64 | .type = EM28XX_VMUX_SVIDEO, |
64 | .vmux = SAA7115_SVIDEO3, | 65 | .vmux = SAA7115_SVIDEO3, |
65 | .amux = 1, | 66 | .amux = 1, |
66 | }}, | 67 | } }, |
67 | }, | 68 | }, |
68 | [EM2820_BOARD_UNKNOWN] = { | 69 | [EM2820_BOARD_UNKNOWN] = { |
69 | .name = "Unknown EM2750/28xx video grabber", | 70 | .name = "Unknown EM2750/28xx video grabber", |
@@ -76,15 +77,15 @@ struct em28xx_board em28xx_boards[] = { | |||
76 | .tda9887_conf = TDA9887_PRESENT, | 77 | .tda9887_conf = TDA9887_PRESENT, |
77 | .has_tuner = 1, | 78 | .has_tuner = 1, |
78 | .decoder = EM28XX_SAA7113, | 79 | .decoder = EM28XX_SAA7113, |
79 | .input = {{ | 80 | .input = { { |
80 | .type = EM28XX_VMUX_COMPOSITE1, | 81 | .type = EM28XX_VMUX_COMPOSITE1, |
81 | .vmux = SAA7115_COMPOSITE0, | 82 | .vmux = SAA7115_COMPOSITE0, |
82 | .amux = 1, | 83 | .amux = 1, |
83 | },{ | 84 | }, { |
84 | .type = EM28XX_VMUX_SVIDEO, | 85 | .type = EM28XX_VMUX_SVIDEO, |
85 | .vmux = SAA7115_SVIDEO3, | 86 | .vmux = SAA7115_SVIDEO3, |
86 | .amux = 1, | 87 | .amux = 1, |
87 | }}, | 88 | } }, |
88 | }, | 89 | }, |
89 | [EM2820_BOARD_TERRATEC_CINERGY_250] = { | 90 | [EM2820_BOARD_TERRATEC_CINERGY_250] = { |
90 | .name = "Terratec Cinergy 250 USB", | 91 | .name = "Terratec Cinergy 250 USB", |
@@ -93,19 +94,19 @@ struct em28xx_board em28xx_boards[] = { | |||
93 | .tda9887_conf = TDA9887_PRESENT, | 94 | .tda9887_conf = TDA9887_PRESENT, |
94 | .has_tuner = 1, | 95 | .has_tuner = 1, |
95 | .decoder = EM28XX_SAA7113, | 96 | .decoder = EM28XX_SAA7113, |
96 | .input = {{ | 97 | .input = { { |
97 | .type = EM28XX_VMUX_TELEVISION, | 98 | .type = EM28XX_VMUX_TELEVISION, |
98 | .vmux = SAA7115_COMPOSITE2, | 99 | .vmux = SAA7115_COMPOSITE2, |
99 | .amux = 1, | 100 | .amux = 1, |
100 | },{ | 101 | }, { |
101 | .type = EM28XX_VMUX_COMPOSITE1, | 102 | .type = EM28XX_VMUX_COMPOSITE1, |
102 | .vmux = SAA7115_COMPOSITE0, | 103 | .vmux = SAA7115_COMPOSITE0, |
103 | .amux = 1, | 104 | .amux = 1, |
104 | },{ | 105 | }, { |
105 | .type = EM28XX_VMUX_SVIDEO, | 106 | .type = EM28XX_VMUX_SVIDEO, |
106 | .vmux = SAA7115_SVIDEO3, | 107 | .vmux = SAA7115_SVIDEO3, |
107 | .amux = 1, | 108 | .amux = 1, |
108 | }}, | 109 | } }, |
109 | }, | 110 | }, |
110 | [EM2820_BOARD_PINNACLE_USB_2] = { | 111 | [EM2820_BOARD_PINNACLE_USB_2] = { |
111 | .name = "Pinnacle PCTV USB 2", | 112 | .name = "Pinnacle PCTV USB 2", |
@@ -114,39 +115,41 @@ struct em28xx_board em28xx_boards[] = { | |||
114 | .tda9887_conf = TDA9887_PRESENT, | 115 | .tda9887_conf = TDA9887_PRESENT, |
115 | .has_tuner = 1, | 116 | .has_tuner = 1, |
116 | .decoder = EM28XX_SAA7113, | 117 | .decoder = EM28XX_SAA7113, |
117 | .input = {{ | 118 | .input = { { |
118 | .type = EM28XX_VMUX_TELEVISION, | 119 | .type = EM28XX_VMUX_TELEVISION, |
119 | .vmux = SAA7115_COMPOSITE2, | 120 | .vmux = SAA7115_COMPOSITE2, |
120 | .amux = 0, | 121 | .amux = 0, |
121 | },{ | 122 | }, { |
122 | .type = EM28XX_VMUX_COMPOSITE1, | 123 | .type = EM28XX_VMUX_COMPOSITE1, |
123 | .vmux = SAA7115_COMPOSITE0, | 124 | .vmux = SAA7115_COMPOSITE0, |
124 | .amux = 1, | 125 | .amux = 1, |
125 | },{ | 126 | }, { |
126 | .type = EM28XX_VMUX_SVIDEO, | 127 | .type = EM28XX_VMUX_SVIDEO, |
127 | .vmux = SAA7115_SVIDEO3, | 128 | .vmux = SAA7115_SVIDEO3, |
128 | .amux = 1, | 129 | .amux = 1, |
129 | }}, | 130 | } }, |
130 | }, | 131 | }, |
131 | [EM2820_BOARD_HAUPPAUGE_WINTV_USB_2] = { | 132 | [EM2820_BOARD_HAUPPAUGE_WINTV_USB_2] = { |
132 | .name = "Hauppauge WinTV USB 2", | 133 | .name = "Hauppauge WinTV USB 2", |
133 | .vchannels = 3, | 134 | .vchannels = 3, |
134 | .tuner_type = TUNER_PHILIPS_FM1236_MK3, | 135 | .tuner_type = TUNER_PHILIPS_FM1236_MK3, |
135 | .tda9887_conf = TDA9887_PRESENT|TDA9887_PORT1_ACTIVE|TDA9887_PORT2_ACTIVE, | 136 | .tda9887_conf = TDA9887_PRESENT | |
137 | TDA9887_PORT1_ACTIVE| | ||
138 | TDA9887_PORT2_ACTIVE, | ||
136 | .has_tuner = 1, | 139 | .has_tuner = 1, |
137 | .decoder = EM28XX_TVP5150, | 140 | .decoder = EM28XX_TVP5150, |
138 | .has_msp34xx = 1, | 141 | .has_msp34xx = 1, |
139 | /*FIXME: S-Video not tested */ | 142 | /*FIXME: S-Video not tested */ |
140 | .input = {{ | 143 | .input = { { |
141 | .type = EM28XX_VMUX_TELEVISION, | 144 | .type = EM28XX_VMUX_TELEVISION, |
142 | .vmux = TVP5150_COMPOSITE0, | 145 | .vmux = TVP5150_COMPOSITE0, |
143 | .amux = MSP_INPUT_DEFAULT, | 146 | .amux = MSP_INPUT_DEFAULT, |
144 | },{ | 147 | }, { |
145 | .type = EM28XX_VMUX_SVIDEO, | 148 | .type = EM28XX_VMUX_SVIDEO, |
146 | .vmux = TVP5150_SVIDEO, | 149 | .vmux = TVP5150_SVIDEO, |
147 | .amux = MSP_INPUT(MSP_IN_SCART1, MSP_IN_TUNER1, | 150 | .amux = MSP_INPUT(MSP_IN_SCART1, MSP_IN_TUNER1, |
148 | MSP_DSP_IN_SCART, MSP_DSP_IN_SCART), | 151 | MSP_DSP_IN_SCART, MSP_DSP_IN_SCART), |
149 | }}, | 152 | } }, |
150 | }, | 153 | }, |
151 | [EM2880_BOARD_HAUPPAUGE_WINTV_HVR_900] = { | 154 | [EM2880_BOARD_HAUPPAUGE_WINTV_HVR_900] = { |
152 | .name = "Hauppauge WinTV HVR 900", | 155 | .name = "Hauppauge WinTV HVR 900", |
@@ -156,19 +159,19 @@ struct em28xx_board em28xx_boards[] = { | |||
156 | .has_tuner = 1, | 159 | .has_tuner = 1, |
157 | .mts_firmware = 1, | 160 | .mts_firmware = 1, |
158 | .decoder = EM28XX_TVP5150, | 161 | .decoder = EM28XX_TVP5150, |
159 | .input = {{ | 162 | .input = { { |
160 | .type = EM28XX_VMUX_TELEVISION, | 163 | .type = EM28XX_VMUX_TELEVISION, |
161 | .vmux = TVP5150_COMPOSITE0, | 164 | .vmux = TVP5150_COMPOSITE0, |
162 | .amux = 0, | 165 | .amux = 0, |
163 | },{ | 166 | }, { |
164 | .type = EM28XX_VMUX_COMPOSITE1, | 167 | .type = EM28XX_VMUX_COMPOSITE1, |
165 | .vmux = TVP5150_COMPOSITE1, | 168 | .vmux = TVP5150_COMPOSITE1, |
166 | .amux = 1, | 169 | .amux = 1, |
167 | },{ | 170 | }, { |
168 | .type = EM28XX_VMUX_SVIDEO, | 171 | .type = EM28XX_VMUX_SVIDEO, |
169 | .vmux = TVP5150_SVIDEO, | 172 | .vmux = TVP5150_SVIDEO, |
170 | .amux = 1, | 173 | .amux = 1, |
171 | }}, | 174 | } }, |
172 | }, | 175 | }, |
173 | [EM2880_BOARD_HAUPPAUGE_WINTV_HVR_950] = { | 176 | [EM2880_BOARD_HAUPPAUGE_WINTV_HVR_950] = { |
174 | .name = "Hauppauge WinTV HVR 950", | 177 | .name = "Hauppauge WinTV HVR 950", |
@@ -177,19 +180,19 @@ struct em28xx_board em28xx_boards[] = { | |||
177 | .tuner_type = TUNER_XC2028, | 180 | .tuner_type = TUNER_XC2028, |
178 | .has_tuner = 1, | 181 | .has_tuner = 1, |
179 | .decoder = EM28XX_TVP5150, | 182 | .decoder = EM28XX_TVP5150, |
180 | .input = {{ | 183 | .input = { { |
181 | .type = EM28XX_VMUX_TELEVISION, | 184 | .type = EM28XX_VMUX_TELEVISION, |
182 | .vmux = TVP5150_COMPOSITE0, | 185 | .vmux = TVP5150_COMPOSITE0, |
183 | .amux = 0, | 186 | .amux = 0, |
184 | },{ | 187 | }, { |
185 | .type = EM28XX_VMUX_COMPOSITE1, | 188 | .type = EM28XX_VMUX_COMPOSITE1, |
186 | .vmux = TVP5150_COMPOSITE1, | 189 | .vmux = TVP5150_COMPOSITE1, |
187 | .amux = 1, | 190 | .amux = 1, |
188 | },{ | 191 | }, { |
189 | .type = EM28XX_VMUX_SVIDEO, | 192 | .type = EM28XX_VMUX_SVIDEO, |
190 | .vmux = TVP5150_SVIDEO, | 193 | .vmux = TVP5150_SVIDEO, |
191 | .amux = 1, | 194 | .amux = 1, |
192 | }}, | 195 | } }, |
193 | }, | 196 | }, |
194 | [EM2880_BOARD_TERRATEC_HYBRID_XS] = { | 197 | [EM2880_BOARD_TERRATEC_HYBRID_XS] = { |
195 | .name = "Terratec Hybrid XS", | 198 | .name = "Terratec Hybrid XS", |
@@ -198,22 +201,23 @@ struct em28xx_board em28xx_boards[] = { | |||
198 | .has_tuner = 1, | 201 | .has_tuner = 1, |
199 | .tuner_type = TUNER_XC2028, | 202 | .tuner_type = TUNER_XC2028, |
200 | .decoder = EM28XX_TVP5150, | 203 | .decoder = EM28XX_TVP5150, |
201 | .input = {{ | 204 | .input = { { |
202 | .type = EM28XX_VMUX_TELEVISION, | 205 | .type = EM28XX_VMUX_TELEVISION, |
203 | .vmux = TVP5150_COMPOSITE0, | 206 | .vmux = TVP5150_COMPOSITE0, |
204 | .amux = 0, | 207 | .amux = 0, |
205 | },{ | 208 | }, { |
206 | .type = EM28XX_VMUX_COMPOSITE1, | 209 | .type = EM28XX_VMUX_COMPOSITE1, |
207 | .vmux = TVP5150_COMPOSITE1, | 210 | .vmux = TVP5150_COMPOSITE1, |
208 | .amux = 1, | 211 | .amux = 1, |
209 | },{ | 212 | }, { |
210 | .type = EM28XX_VMUX_SVIDEO, | 213 | .type = EM28XX_VMUX_SVIDEO, |
211 | .vmux = TVP5150_SVIDEO, | 214 | .vmux = TVP5150_SVIDEO, |
212 | .amux = 1, | 215 | .amux = 1, |
213 | }}, | 216 | } }, |
214 | }, | 217 | }, |
215 | /* maybe there's a reason behind it why Terratec sells the Hybrid XS as Prodigy XS with a | 218 | /* maybe there's a reason behind it why Terratec sells the Hybrid XS |
216 | * different PID, let's keep it separated for now maybe we'll need it lateron */ | 219 | as Prodigy XS with a different PID, let's keep it separated for now |
220 | maybe we'll need it lateron */ | ||
217 | [EM2880_BOARD_TERRATEC_PRODIGY_XS] = { | 221 | [EM2880_BOARD_TERRATEC_PRODIGY_XS] = { |
218 | .name = "Terratec Prodigy XS", | 222 | .name = "Terratec Prodigy XS", |
219 | .vchannels = 3, | 223 | .vchannels = 3, |
@@ -221,40 +225,42 @@ struct em28xx_board em28xx_boards[] = { | |||
221 | .has_tuner = 1, | 225 | .has_tuner = 1, |
222 | .tuner_type = TUNER_XC2028, | 226 | .tuner_type = TUNER_XC2028, |
223 | .decoder = EM28XX_TVP5150, | 227 | .decoder = EM28XX_TVP5150, |
224 | .input = {{ | 228 | .input = { { |
225 | .type = EM28XX_VMUX_TELEVISION, | 229 | .type = EM28XX_VMUX_TELEVISION, |
226 | .vmux = TVP5150_COMPOSITE0, | 230 | .vmux = TVP5150_COMPOSITE0, |
227 | .amux = 0, | 231 | .amux = 0, |
228 | },{ | 232 | }, { |
229 | .type = EM28XX_VMUX_COMPOSITE1, | 233 | .type = EM28XX_VMUX_COMPOSITE1, |
230 | .vmux = TVP5150_COMPOSITE1, | 234 | .vmux = TVP5150_COMPOSITE1, |
231 | .amux = 1, | 235 | .amux = 1, |
232 | },{ | 236 | }, { |
233 | .type = EM28XX_VMUX_SVIDEO, | 237 | .type = EM28XX_VMUX_SVIDEO, |
234 | .vmux = TVP5150_SVIDEO, | 238 | .vmux = TVP5150_SVIDEO, |
235 | .amux = 1, | 239 | .amux = 1, |
236 | }}, | 240 | } }, |
237 | }, | 241 | }, |
238 | [EM2820_BOARD_MSI_VOX_USB_2] = { | 242 | [EM2820_BOARD_MSI_VOX_USB_2] = { |
239 | .name = "MSI VOX USB 2.0", | 243 | .name = "MSI VOX USB 2.0", |
240 | .vchannels = 3, | 244 | .vchannels = 3, |
241 | .tuner_type = TUNER_LG_PAL_NEW_TAPC, | 245 | .tuner_type = TUNER_LG_PAL_NEW_TAPC, |
242 | .tda9887_conf = TDA9887_PRESENT|TDA9887_PORT1_ACTIVE|TDA9887_PORT2_ACTIVE, | 246 | .tda9887_conf = TDA9887_PRESENT | |
247 | TDA9887_PORT1_ACTIVE | | ||
248 | TDA9887_PORT2_ACTIVE, | ||
243 | .has_tuner = 1, | 249 | .has_tuner = 1, |
244 | .decoder = EM28XX_SAA7114, | 250 | .decoder = EM28XX_SAA7114, |
245 | .input = {{ | 251 | .input = { { |
246 | .type = EM28XX_VMUX_TELEVISION, | 252 | .type = EM28XX_VMUX_TELEVISION, |
247 | .vmux = SAA7115_COMPOSITE4, | 253 | .vmux = SAA7115_COMPOSITE4, |
248 | .amux = 0, | 254 | .amux = 0, |
249 | },{ | 255 | }, { |
250 | .type = EM28XX_VMUX_COMPOSITE1, | 256 | .type = EM28XX_VMUX_COMPOSITE1, |
251 | .vmux = SAA7115_COMPOSITE0, | 257 | .vmux = SAA7115_COMPOSITE0, |
252 | .amux = 1, | 258 | .amux = 1, |
253 | },{ | 259 | }, { |
254 | .type = EM28XX_VMUX_SVIDEO, | 260 | .type = EM28XX_VMUX_SVIDEO, |
255 | .vmux = SAA7115_SVIDEO3, | 261 | .vmux = SAA7115_SVIDEO3, |
256 | .amux = 1, | 262 | .amux = 1, |
257 | }}, | 263 | } }, |
258 | }, | 264 | }, |
259 | [EM2800_BOARD_TERRATEC_CINERGY_200] = { | 265 | [EM2800_BOARD_TERRATEC_CINERGY_200] = { |
260 | .name = "Terratec Cinergy 200 USB", | 266 | .name = "Terratec Cinergy 200 USB", |
@@ -264,19 +270,19 @@ struct em28xx_board em28xx_boards[] = { | |||
264 | .tda9887_conf = TDA9887_PRESENT, | 270 | .tda9887_conf = TDA9887_PRESENT, |
265 | .has_tuner = 1, | 271 | .has_tuner = 1, |
266 | .decoder = EM28XX_SAA7113, | 272 | .decoder = EM28XX_SAA7113, |
267 | .input = {{ | 273 | .input = { { |
268 | .type = EM28XX_VMUX_TELEVISION, | 274 | .type = EM28XX_VMUX_TELEVISION, |
269 | .vmux = SAA7115_COMPOSITE2, | 275 | .vmux = SAA7115_COMPOSITE2, |
270 | .amux = 0, | 276 | .amux = 0, |
271 | },{ | 277 | }, { |
272 | .type = EM28XX_VMUX_COMPOSITE1, | 278 | .type = EM28XX_VMUX_COMPOSITE1, |
273 | .vmux = SAA7115_COMPOSITE0, | 279 | .vmux = SAA7115_COMPOSITE0, |
274 | .amux = 1, | 280 | .amux = 1, |
275 | },{ | 281 | }, { |
276 | .type = EM28XX_VMUX_SVIDEO, | 282 | .type = EM28XX_VMUX_SVIDEO, |
277 | .vmux = SAA7115_SVIDEO3, | 283 | .vmux = SAA7115_SVIDEO3, |
278 | .amux = 1, | 284 | .amux = 1, |
279 | }}, | 285 | } }, |
280 | }, | 286 | }, |
281 | [EM2800_BOARD_LEADTEK_WINFAST_USBII] = { | 287 | [EM2800_BOARD_LEADTEK_WINFAST_USBII] = { |
282 | .name = "Leadtek Winfast USB II", | 288 | .name = "Leadtek Winfast USB II", |
@@ -286,19 +292,19 @@ struct em28xx_board em28xx_boards[] = { | |||
286 | .tda9887_conf = TDA9887_PRESENT, | 292 | .tda9887_conf = TDA9887_PRESENT, |
287 | .has_tuner = 1, | 293 | .has_tuner = 1, |
288 | .decoder = EM28XX_SAA7113, | 294 | .decoder = EM28XX_SAA7113, |
289 | .input = {{ | 295 | .input = { { |
290 | .type = EM28XX_VMUX_TELEVISION, | 296 | .type = EM28XX_VMUX_TELEVISION, |
291 | .vmux = SAA7115_COMPOSITE2, | 297 | .vmux = SAA7115_COMPOSITE2, |
292 | .amux = 0, | 298 | .amux = 0, |
293 | },{ | 299 | }, { |
294 | .type = EM28XX_VMUX_COMPOSITE1, | 300 | .type = EM28XX_VMUX_COMPOSITE1, |
295 | .vmux = SAA7115_COMPOSITE0, | 301 | .vmux = SAA7115_COMPOSITE0, |
296 | .amux = 1, | 302 | .amux = 1, |
297 | },{ | 303 | }, { |
298 | .type = EM28XX_VMUX_SVIDEO, | 304 | .type = EM28XX_VMUX_SVIDEO, |
299 | .vmux = SAA7115_SVIDEO3, | 305 | .vmux = SAA7115_SVIDEO3, |
300 | .amux = 1, | 306 | .amux = 1, |
301 | }}, | 307 | } }, |
302 | }, | 308 | }, |
303 | [EM2800_BOARD_KWORLD_USB2800] = { | 309 | [EM2800_BOARD_KWORLD_USB2800] = { |
304 | .name = "Kworld USB2800", | 310 | .name = "Kworld USB2800", |
@@ -308,34 +314,34 @@ struct em28xx_board em28xx_boards[] = { | |||
308 | .tda9887_conf = TDA9887_PRESENT, | 314 | .tda9887_conf = TDA9887_PRESENT, |
309 | .has_tuner = 1, | 315 | .has_tuner = 1, |
310 | .decoder = EM28XX_SAA7113, | 316 | .decoder = EM28XX_SAA7113, |
311 | .input = {{ | 317 | .input = { { |
312 | .type = EM28XX_VMUX_TELEVISION, | 318 | .type = EM28XX_VMUX_TELEVISION, |
313 | .vmux = SAA7115_COMPOSITE2, | 319 | .vmux = SAA7115_COMPOSITE2, |
314 | .amux = 0, | 320 | .amux = 0, |
315 | },{ | 321 | }, { |
316 | .type = EM28XX_VMUX_COMPOSITE1, | 322 | .type = EM28XX_VMUX_COMPOSITE1, |
317 | .vmux = SAA7115_COMPOSITE0, | 323 | .vmux = SAA7115_COMPOSITE0, |
318 | .amux = 1, | 324 | .amux = 1, |
319 | },{ | 325 | }, { |
320 | .type = EM28XX_VMUX_SVIDEO, | 326 | .type = EM28XX_VMUX_SVIDEO, |
321 | .vmux = SAA7115_SVIDEO3, | 327 | .vmux = SAA7115_SVIDEO3, |
322 | .amux = 1, | 328 | .amux = 1, |
323 | }}, | 329 | } }, |
324 | }, | 330 | }, |
325 | [EM2820_BOARD_PINNACLE_DVC_90] = { | 331 | [EM2820_BOARD_PINNACLE_DVC_90] = { |
326 | .name = "Pinnacle Dazzle DVC 90", | 332 | .name = "Pinnacle Dazzle DVC 90", |
327 | .vchannels = 3, | 333 | .vchannels = 3, |
328 | .has_tuner = 0, | 334 | .has_tuner = 0, |
329 | .decoder = EM28XX_SAA7113, | 335 | .decoder = EM28XX_SAA7113, |
330 | .input = {{ | 336 | .input = { { |
331 | .type = EM28XX_VMUX_COMPOSITE1, | 337 | .type = EM28XX_VMUX_COMPOSITE1, |
332 | .vmux = SAA7115_COMPOSITE0, | 338 | .vmux = SAA7115_COMPOSITE0, |
333 | .amux = 1, | 339 | .amux = 1, |
334 | },{ | 340 | }, { |
335 | .type = EM28XX_VMUX_SVIDEO, | 341 | .type = EM28XX_VMUX_SVIDEO, |
336 | .vmux = SAA7115_SVIDEO3, | 342 | .vmux = SAA7115_SVIDEO3, |
337 | .amux = 1, | 343 | .amux = 1, |
338 | }}, | 344 | } }, |
339 | }, | 345 | }, |
340 | [EM2800_BOARD_VGEAR_POCKETTV] = { | 346 | [EM2800_BOARD_VGEAR_POCKETTV] = { |
341 | .name = "V-Gear PocketTV", | 347 | .name = "V-Gear PocketTV", |
@@ -345,19 +351,19 @@ struct em28xx_board em28xx_boards[] = { | |||
345 | .tda9887_conf = TDA9887_PRESENT, | 351 | .tda9887_conf = TDA9887_PRESENT, |
346 | .has_tuner = 1, | 352 | .has_tuner = 1, |
347 | .decoder = EM28XX_SAA7113, | 353 | .decoder = EM28XX_SAA7113, |
348 | .input = {{ | 354 | .input = { { |
349 | .type = EM28XX_VMUX_TELEVISION, | 355 | .type = EM28XX_VMUX_TELEVISION, |
350 | .vmux = SAA7115_COMPOSITE2, | 356 | .vmux = SAA7115_COMPOSITE2, |
351 | .amux = 0, | 357 | .amux = 0, |
352 | },{ | 358 | }, { |
353 | .type = EM28XX_VMUX_COMPOSITE1, | 359 | .type = EM28XX_VMUX_COMPOSITE1, |
354 | .vmux = SAA7115_COMPOSITE0, | 360 | .vmux = SAA7115_COMPOSITE0, |
355 | .amux = 1, | 361 | .amux = 1, |
356 | },{ | 362 | }, { |
357 | .type = EM28XX_VMUX_SVIDEO, | 363 | .type = EM28XX_VMUX_SVIDEO, |
358 | .vmux = SAA7115_SVIDEO3, | 364 | .vmux = SAA7115_SVIDEO3, |
359 | .amux = 1, | 365 | .amux = 1, |
360 | }}, | 366 | } }, |
361 | }, | 367 | }, |
362 | [EM2820_BOARD_PROLINK_PLAYTV_USB2] = { | 368 | [EM2820_BOARD_PROLINK_PLAYTV_USB2] = { |
363 | .name = "Pixelview Prolink PlayTV USB 2.0", | 369 | .name = "Pixelview Prolink PlayTV USB 2.0", |
@@ -365,56 +371,73 @@ struct em28xx_board em28xx_boards[] = { | |||
365 | .tda9887_conf = TDA9887_PRESENT, | 371 | .tda9887_conf = TDA9887_PRESENT, |
366 | .has_tuner = 1, | 372 | .has_tuner = 1, |
367 | .decoder = EM28XX_SAA7113, | 373 | .decoder = EM28XX_SAA7113, |
368 | .input = {{ | 374 | .input = { { |
369 | .type = EM28XX_VMUX_TELEVISION, | 375 | .type = EM28XX_VMUX_TELEVISION, |
370 | .vmux = SAA7115_COMPOSITE2, | 376 | .vmux = SAA7115_COMPOSITE2, |
371 | .amux = 1, | 377 | .amux = 1, |
372 | },{ | 378 | }, { |
373 | .type = EM28XX_VMUX_COMPOSITE1, | 379 | .type = EM28XX_VMUX_COMPOSITE1, |
374 | .vmux = SAA7115_COMPOSITE0, | 380 | .vmux = SAA7115_COMPOSITE0, |
375 | .amux = 1, | 381 | .amux = 1, |
376 | },{ | 382 | }, { |
377 | .type = EM28XX_VMUX_SVIDEO, | 383 | .type = EM28XX_VMUX_SVIDEO, |
378 | .vmux = SAA7115_SVIDEO3, | 384 | .vmux = SAA7115_SVIDEO3, |
379 | .amux = 1, | 385 | .amux = 1, |
380 | }}, | 386 | } }, |
381 | }, | 387 | }, |
382 | }; | 388 | }; |
383 | const unsigned int em28xx_bcount = ARRAY_SIZE(em28xx_boards); | 389 | const unsigned int em28xx_bcount = ARRAY_SIZE(em28xx_boards); |
384 | 390 | ||
385 | /* table of devices that work with this driver */ | 391 | /* table of devices that work with this driver */ |
386 | struct usb_device_id em28xx_id_table [] = { | 392 | struct usb_device_id em28xx_id_table [] = { |
387 | { USB_DEVICE(0xeb1a, 0x2750), .driver_info = EM2820_BOARD_UNKNOWN }, | 393 | { USB_DEVICE(0xeb1a, 0x2750), |
388 | { USB_DEVICE(0xeb1a, 0x2800), .driver_info = EM2800_BOARD_UNKNOWN }, | 394 | .driver_info = EM2820_BOARD_UNKNOWN }, |
389 | { USB_DEVICE(0xeb1a, 0x2820), .driver_info = EM2820_BOARD_UNKNOWN }, | 395 | { USB_DEVICE(0xeb1a, 0x2800), |
390 | { USB_DEVICE(0xeb1a, 0x2821), .driver_info = EM2820_BOARD_UNKNOWN }, | 396 | .driver_info = EM2800_BOARD_UNKNOWN }, |
391 | { USB_DEVICE(0xeb1a, 0x2860), .driver_info = EM2820_BOARD_UNKNOWN }, | 397 | { USB_DEVICE(0xeb1a, 0x2820), |
392 | { USB_DEVICE(0xeb1a, 0x2861), .driver_info = EM2820_BOARD_UNKNOWN }, | 398 | .driver_info = EM2820_BOARD_UNKNOWN }, |
393 | { USB_DEVICE(0xeb1a, 0x2870), .driver_info = EM2820_BOARD_UNKNOWN }, | 399 | { USB_DEVICE(0xeb1a, 0x2821), |
394 | { USB_DEVICE(0xeb1a, 0x2881), .driver_info = EM2820_BOARD_UNKNOWN }, | 400 | .driver_info = EM2820_BOARD_UNKNOWN }, |
395 | { USB_DEVICE(0xeb1a, 0x2883), .driver_info = EM2820_BOARD_UNKNOWN }, | 401 | { USB_DEVICE(0xeb1a, 0x2860), |
396 | { USB_DEVICE(0x0ccd, 0x0036), .driver_info = EM2820_BOARD_TERRATEC_CINERGY_250 }, | 402 | .driver_info = EM2820_BOARD_UNKNOWN }, |
397 | { USB_DEVICE(0x2304, 0x0208), .driver_info = EM2820_BOARD_PINNACLE_USB_2 }, | 403 | { USB_DEVICE(0xeb1a, 0x2861), |
398 | { USB_DEVICE(0x2040, 0x4200), .driver_info = EM2820_BOARD_HAUPPAUGE_WINTV_USB_2 }, | 404 | .driver_info = EM2820_BOARD_UNKNOWN }, |
399 | { USB_DEVICE(0x2304, 0x0207), .driver_info = EM2820_BOARD_PINNACLE_DVC_90 }, | 405 | { USB_DEVICE(0xeb1a, 0x2870), |
400 | { USB_DEVICE(0x2040, 0x6500), .driver_info = EM2880_BOARD_HAUPPAUGE_WINTV_HVR_900 }, | 406 | .driver_info = EM2820_BOARD_UNKNOWN }, |
401 | { USB_DEVICE(0x2040, 0x6513), .driver_info = EM2880_BOARD_HAUPPAUGE_WINTV_HVR_950 }, | 407 | { USB_DEVICE(0xeb1a, 0x2881), |
402 | { USB_DEVICE(0x0ccd, 0x0042), .driver_info = EM2880_BOARD_TERRATEC_HYBRID_XS }, | 408 | .driver_info = EM2820_BOARD_UNKNOWN }, |
403 | { USB_DEVICE(0x0ccd, 0x0047), .driver_info = EM2880_BOARD_TERRATEC_PRODIGY_XS }, | 409 | { USB_DEVICE(0xeb1a, 0x2883), |
410 | .driver_info = EM2820_BOARD_UNKNOWN }, | ||
411 | { USB_DEVICE(0x0ccd, 0x0036), | ||
412 | .driver_info = EM2820_BOARD_TERRATEC_CINERGY_250 }, | ||
413 | { USB_DEVICE(0x2304, 0x0208), | ||
414 | .driver_info = EM2820_BOARD_PINNACLE_USB_2 }, | ||
415 | { USB_DEVICE(0x2040, 0x4200), | ||
416 | .driver_info = EM2820_BOARD_HAUPPAUGE_WINTV_USB_2 }, | ||
417 | { USB_DEVICE(0x2304, 0x0207), | ||
418 | .driver_info = EM2820_BOARD_PINNACLE_DVC_90 }, | ||
419 | { USB_DEVICE(0x2040, 0x6500), | ||
420 | .driver_info = EM2880_BOARD_HAUPPAUGE_WINTV_HVR_900 }, | ||
421 | { USB_DEVICE(0x2040, 0x6513), | ||
422 | .driver_info = EM2880_BOARD_HAUPPAUGE_WINTV_HVR_950 }, | ||
423 | { USB_DEVICE(0x0ccd, 0x0042), | ||
424 | .driver_info = EM2880_BOARD_TERRATEC_HYBRID_XS }, | ||
425 | { USB_DEVICE(0x0ccd, 0x0047), | ||
426 | .driver_info = EM2880_BOARD_TERRATEC_PRODIGY_XS }, | ||
404 | { }, | 427 | { }, |
405 | }; | 428 | }; |
406 | MODULE_DEVICE_TABLE (usb, em28xx_id_table); | 429 | MODULE_DEVICE_TABLE(usb, em28xx_id_table); |
407 | 430 | ||
408 | /* EEPROM hash table for devices with generic USB IDs */ | 431 | /* EEPROM hash table for devices with generic USB IDs */ |
409 | static struct em28xx_hash_table em28xx_eeprom_hash [] = { | 432 | static struct em28xx_hash_table em28xx_eeprom_hash [] = { |
410 | /* P/N: SA 60002070465 Tuner: TVF7533-MF */ | 433 | /* P/N: SA 60002070465 Tuner: TVF7533-MF */ |
411 | { 0x6ce05a8f, EM2820_BOARD_PROLINK_PLAYTV_USB2, TUNER_YMEC_TVF_5533MF }, | 434 | {0x6ce05a8f, EM2820_BOARD_PROLINK_PLAYTV_USB2, TUNER_YMEC_TVF_5533MF}, |
412 | }; | 435 | }; |
413 | 436 | ||
414 | /* I2C devicelist hash table for devices with generic USB IDs */ | 437 | /* I2C devicelist hash table for devices with generic USB IDs */ |
415 | static struct em28xx_hash_table em28xx_i2c_hash[] = { | 438 | static struct em28xx_hash_table em28xx_i2c_hash[] = { |
416 | { 0xb06a32c3, EM2800_BOARD_TERRATEC_CINERGY_200, TUNER_LG_PAL_NEW_TAPC }, | 439 | {0xb06a32c3, EM2800_BOARD_TERRATEC_CINERGY_200, TUNER_LG_PAL_NEW_TAPC}, |
417 | { 0xf51200e3, EM2800_BOARD_VGEAR_POCKETTV, TUNER_LG_PAL_NEW_TAPC }, | 440 | {0xf51200e3, EM2800_BOARD_VGEAR_POCKETTV, TUNER_LG_PAL_NEW_TAPC}, |
418 | }; | 441 | }; |
419 | 442 | ||
420 | /* Since em28xx_pre_card_setup() requires a proper dev->model, | 443 | /* Since em28xx_pre_card_setup() requires a proper dev->model, |
@@ -423,7 +446,7 @@ static struct em28xx_hash_table em28xx_i2c_hash[] = { | |||
423 | void em28xx_pre_card_setup(struct em28xx *dev) | 446 | void em28xx_pre_card_setup(struct em28xx *dev) |
424 | { | 447 | { |
425 | /* request some modules */ | 448 | /* request some modules */ |
426 | switch(dev->model){ | 449 | switch (dev->model) { |
427 | case EM2880_BOARD_TERRATEC_PRODIGY_XS: | 450 | case EM2880_BOARD_TERRATEC_PRODIGY_XS: |
428 | case EM2880_BOARD_HAUPPAUGE_WINTV_HVR_900: | 451 | case EM2880_BOARD_HAUPPAUGE_WINTV_HVR_900: |
429 | case EM2880_BOARD_HAUPPAUGE_WINTV_HVR_950: | 452 | case EM2880_BOARD_HAUPPAUGE_WINTV_HVR_950: |
@@ -454,7 +477,7 @@ static int em28xx_tuner_callback(void *ptr, int command, int arg) | |||
454 | return rc; | 477 | return rc; |
455 | } | 478 | } |
456 | 479 | ||
457 | static void em28xx_config_tuner (struct em28xx *dev) | 480 | static void em28xx_config_tuner(struct em28xx *dev) |
458 | { | 481 | { |
459 | struct v4l2_priv_tun_config xc2028_cfg; | 482 | struct v4l2_priv_tun_config xc2028_cfg; |
460 | struct xc2028_ctrl ctl; | 483 | struct xc2028_ctrl ctl; |
@@ -472,7 +495,7 @@ static void em28xx_config_tuner (struct em28xx *dev) | |||
472 | em28xx_i2c_call_clients(dev, TUNER_SET_TYPE_ADDR, &tun_setup); | 495 | em28xx_i2c_call_clients(dev, TUNER_SET_TYPE_ADDR, &tun_setup); |
473 | 496 | ||
474 | if (dev->tuner_type == TUNER_XC2028) { | 497 | if (dev->tuner_type == TUNER_XC2028) { |
475 | memset (&ctl, 0, sizeof(ctl)); | 498 | memset(&ctl, 0, sizeof(ctl)); |
476 | 499 | ||
477 | ctl.fname = XC2028_DEFAULT_FIRMWARE; | 500 | ctl.fname = XC2028_DEFAULT_FIRMWARE; |
478 | ctl.max_len = 64; | 501 | ctl.max_len = 64; |
@@ -648,5 +671,5 @@ void em28xx_card_setup(struct em28xx *dev) | |||
648 | request_module("tuner"); | 671 | request_module("tuner"); |
649 | #endif | 672 | #endif |
650 | 673 | ||
651 | em28xx_config_tuner (dev); | 674 | em28xx_config_tuner(dev); |
652 | } | 675 | } |