aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/media/video/em28xx/em28xx-cards.c203
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};
383const unsigned int em28xx_bcount = ARRAY_SIZE(em28xx_boards); 389const 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 */
386struct usb_device_id em28xx_id_table [] = { 392struct 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};
406MODULE_DEVICE_TABLE (usb, em28xx_id_table); 429MODULE_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 */
409static struct em28xx_hash_table em28xx_eeprom_hash [] = { 432static 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 */
415static struct em28xx_hash_table em28xx_i2c_hash[] = { 438static 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[] = {
423void em28xx_pre_card_setup(struct em28xx *dev) 446void 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
457static void em28xx_config_tuner (struct em28xx *dev) 480static 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}