]> Pileus Git - ~andy/linux/blob - drivers/media/usb/em28xx/em28xx-core.c
Merge tag 'for-linus-3.11-merge-window-part-2' of git://git.kernel.org/pub/scm/linux...
[~andy/linux] / drivers / media / usb / em28xx / em28xx-core.c
1 /*
2    em28xx-core.c - driver for Empia EM2800/EM2820/2840 USB video capture devices
3
4    Copyright (C) 2005 Ludovico Cavedon <cavedon@sssup.it>
5                       Markus Rechberger <mrechberger@gmail.com>
6                       Mauro Carvalho Chehab <mchehab@infradead.org>
7                       Sascha Sommer <saschasommer@freenet.de>
8    Copyright (C) 2012 Frank Schäfer <fschaefer.oss@googlemail.com>
9
10    This program is free software; you can redistribute it and/or modify
11    it under the terms of the GNU General Public License as published by
12    the Free Software Foundation; either version 2 of the License, or
13    (at your option) any later version.
14
15    This program is distributed in the hope that it will be useful,
16    but WITHOUT ANY WARRANTY; without even the implied warranty of
17    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18    GNU General Public License for more details.
19
20    You should have received a copy of the GNU General Public License
21    along with this program; if not, write to the Free Software
22    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
23  */
24
25 #include <linux/init.h>
26 #include <linux/list.h>
27 #include <linux/module.h>
28 #include <linux/slab.h>
29 #include <linux/usb.h>
30 #include <linux/vmalloc.h>
31 #include <sound/ac97_codec.h>
32 #include <media/v4l2-common.h>
33
34 #include "em28xx.h"
35
36 /* #define ENABLE_DEBUG_ISOC_FRAMES */
37
38 static unsigned int core_debug;
39 module_param(core_debug, int, 0644);
40 MODULE_PARM_DESC(core_debug, "enable debug messages [core]");
41
42 #define em28xx_coredbg(fmt, arg...) do {\
43         if (core_debug) \
44                 printk(KERN_INFO "%s %s :"fmt, \
45                          dev->name, __func__ , ##arg); } while (0)
46
47 static unsigned int reg_debug;
48 module_param(reg_debug, int, 0644);
49 MODULE_PARM_DESC(reg_debug, "enable debug messages [URB reg]");
50
51 #define em28xx_regdbg(fmt, arg...) do {\
52         if (reg_debug) \
53                 printk(KERN_INFO "%s %s :"fmt, \
54                          dev->name, __func__ , ##arg); } while (0)
55
56 static int alt;
57 module_param(alt, int, 0644);
58 MODULE_PARM_DESC(alt, "alternate setting to use for video endpoint");
59
60 static unsigned int disable_vbi;
61 module_param(disable_vbi, int, 0644);
62 MODULE_PARM_DESC(disable_vbi, "disable vbi support");
63
64 /* FIXME */
65 #define em28xx_isocdbg(fmt, arg...) do {\
66         if (core_debug) \
67                 printk(KERN_INFO "%s %s :"fmt, \
68                          dev->name, __func__ , ##arg); } while (0)
69
70 /*
71  * em28xx_read_reg_req()
72  * reads data from the usb device specifying bRequest
73  */
74 int em28xx_read_reg_req_len(struct em28xx *dev, u8 req, u16 reg,
75                                    char *buf, int len)
76 {
77         int ret;
78         int pipe = usb_rcvctrlpipe(dev->udev, 0);
79
80         if (dev->disconnected)
81                 return -ENODEV;
82
83         if (len > URB_MAX_CTRL_SIZE)
84                 return -EINVAL;
85
86         if (reg_debug) {
87                 printk(KERN_DEBUG "(pipe 0x%08x): "
88                         "IN:  %02x %02x %02x %02x %02x %02x %02x %02x ",
89                         pipe,
90                         USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
91                         req, 0, 0,
92                         reg & 0xff, reg >> 8,
93                         len & 0xff, len >> 8);
94         }
95
96         mutex_lock(&dev->ctrl_urb_lock);
97         ret = usb_control_msg(dev->udev, pipe, req,
98                               USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
99                               0x0000, reg, dev->urb_buf, len, HZ);
100         if (ret < 0) {
101                 if (reg_debug)
102                         printk(" failed!\n");
103                 mutex_unlock(&dev->ctrl_urb_lock);
104                 return usb_translate_errors(ret);
105         }
106
107         if (len)
108                 memcpy(buf, dev->urb_buf, len);
109
110         mutex_unlock(&dev->ctrl_urb_lock);
111
112         if (reg_debug) {
113                 int byte;
114
115                 printk("<<<");
116                 for (byte = 0; byte < len; byte++)
117                         printk(" %02x", (unsigned char)buf[byte]);
118                 printk("\n");
119         }
120
121         return ret;
122 }
123
124 /*
125  * em28xx_read_reg_req()
126  * reads data from the usb device specifying bRequest
127  */
128 int em28xx_read_reg_req(struct em28xx *dev, u8 req, u16 reg)
129 {
130         int ret;
131         u8 val;
132
133         ret = em28xx_read_reg_req_len(dev, req, reg, &val, 1);
134         if (ret < 0)
135                 return ret;
136
137         return val;
138 }
139
140 int em28xx_read_reg(struct em28xx *dev, u16 reg)
141 {
142         return em28xx_read_reg_req(dev, USB_REQ_GET_STATUS, reg);
143 }
144 EXPORT_SYMBOL_GPL(em28xx_read_reg);
145
146 /*
147  * em28xx_write_regs_req()
148  * sends data to the usb device, specifying bRequest
149  */
150 int em28xx_write_regs_req(struct em28xx *dev, u8 req, u16 reg, char *buf,
151                                  int len)
152 {
153         int ret;
154         int pipe = usb_sndctrlpipe(dev->udev, 0);
155
156         if (dev->disconnected)
157                 return -ENODEV;
158
159         if ((len < 1) || (len > URB_MAX_CTRL_SIZE))
160                 return -EINVAL;
161
162         if (reg_debug) {
163                 int byte;
164
165                 printk(KERN_DEBUG "(pipe 0x%08x): "
166                         "OUT: %02x %02x %02x %02x %02x %02x %02x %02x >>>",
167                         pipe,
168                         USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
169                         req, 0, 0,
170                         reg & 0xff, reg >> 8,
171                         len & 0xff, len >> 8);
172
173                 for (byte = 0; byte < len; byte++)
174                         printk(" %02x", (unsigned char)buf[byte]);
175                 printk("\n");
176         }
177
178         mutex_lock(&dev->ctrl_urb_lock);
179         memcpy(dev->urb_buf, buf, len);
180         ret = usb_control_msg(dev->udev, pipe, req,
181                               USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
182                               0x0000, reg, dev->urb_buf, len, HZ);
183         mutex_unlock(&dev->ctrl_urb_lock);
184
185         if (ret < 0)
186                 return usb_translate_errors(ret);
187
188         if (dev->wait_after_write)
189                 msleep(dev->wait_after_write);
190
191         return ret;
192 }
193
194 int em28xx_write_regs(struct em28xx *dev, u16 reg, char *buf, int len)
195 {
196         int rc;
197
198         rc = em28xx_write_regs_req(dev, USB_REQ_GET_STATUS, reg, buf, len);
199
200         /* Stores GPO/GPIO values at the cache, if changed
201            Only write values should be stored, since input on a GPIO
202            register will return the input bits.
203            Not sure what happens on reading GPO register.
204          */
205         if (rc >= 0) {
206                 if (reg == dev->reg_gpo_num)
207                         dev->reg_gpo = buf[0];
208                 else if (reg == dev->reg_gpio_num)
209                         dev->reg_gpio = buf[0];
210         }
211
212         return rc;
213 }
214 EXPORT_SYMBOL_GPL(em28xx_write_regs);
215
216 /* Write a single register */
217 int em28xx_write_reg(struct em28xx *dev, u16 reg, u8 val)
218 {
219         return em28xx_write_regs(dev, reg, &val, 1);
220 }
221 EXPORT_SYMBOL_GPL(em28xx_write_reg);
222
223 /*
224  * em28xx_write_reg_bits()
225  * sets only some bits (specified by bitmask) of a register, by first reading
226  * the actual value
227  */
228 int em28xx_write_reg_bits(struct em28xx *dev, u16 reg, u8 val,
229                                  u8 bitmask)
230 {
231         int oldval;
232         u8 newval;
233
234         /* Uses cache for gpo/gpio registers */
235         if (reg == dev->reg_gpo_num)
236                 oldval = dev->reg_gpo;
237         else if (reg == dev->reg_gpio_num)
238                 oldval = dev->reg_gpio;
239         else
240                 oldval = em28xx_read_reg(dev, reg);
241
242         if (oldval < 0)
243                 return oldval;
244
245         newval = (((u8) oldval) & ~bitmask) | (val & bitmask);
246
247         return em28xx_write_regs(dev, reg, &newval, 1);
248 }
249 EXPORT_SYMBOL_GPL(em28xx_write_reg_bits);
250
251 /*
252  * em28xx_is_ac97_ready()
253  * Checks if ac97 is ready
254  */
255 static int em28xx_is_ac97_ready(struct em28xx *dev)
256 {
257         int ret, i;
258
259         /* Wait up to 50 ms for AC97 command to complete */
260         for (i = 0; i < 10; i++, msleep(5)) {
261                 ret = em28xx_read_reg(dev, EM28XX_R43_AC97BUSY);
262                 if (ret < 0)
263                         return ret;
264
265                 if (!(ret & 0x01))
266                         return 0;
267         }
268
269         em28xx_warn("AC97 command still being executed: not handled properly!\n");
270         return -EBUSY;
271 }
272
273 /*
274  * em28xx_read_ac97()
275  * write a 16 bit value to the specified AC97 address (LSB first!)
276  */
277 int em28xx_read_ac97(struct em28xx *dev, u8 reg)
278 {
279         int ret;
280         u8 addr = (reg & 0x7f) | 0x80;
281         u16 val;
282
283         ret = em28xx_is_ac97_ready(dev);
284         if (ret < 0)
285                 return ret;
286
287         ret = em28xx_write_regs(dev, EM28XX_R42_AC97ADDR, &addr, 1);
288         if (ret < 0)
289                 return ret;
290
291         ret = dev->em28xx_read_reg_req_len(dev, 0, EM28XX_R40_AC97LSB,
292                                            (u8 *)&val, sizeof(val));
293
294         if (ret < 0)
295                 return ret;
296         return le16_to_cpu(val);
297 }
298 EXPORT_SYMBOL_GPL(em28xx_read_ac97);
299
300 /*
301  * em28xx_write_ac97()
302  * write a 16 bit value to the specified AC97 address (LSB first!)
303  */
304 int em28xx_write_ac97(struct em28xx *dev, u8 reg, u16 val)
305 {
306         int ret;
307         u8 addr = reg & 0x7f;
308         __le16 value;
309
310         value = cpu_to_le16(val);
311
312         ret = em28xx_is_ac97_ready(dev);
313         if (ret < 0)
314                 return ret;
315
316         ret = em28xx_write_regs(dev, EM28XX_R40_AC97LSB, (u8 *) &value, 2);
317         if (ret < 0)
318                 return ret;
319
320         ret = em28xx_write_regs(dev, EM28XX_R42_AC97ADDR, &addr, 1);
321         if (ret < 0)
322                 return ret;
323
324         return 0;
325 }
326 EXPORT_SYMBOL_GPL(em28xx_write_ac97);
327
328 struct em28xx_vol_itable {
329         enum em28xx_amux mux;
330         u8               reg;
331 };
332
333 static struct em28xx_vol_itable inputs[] = {
334         { EM28XX_AMUX_VIDEO,    AC97_VIDEO      },
335         { EM28XX_AMUX_LINE_IN,  AC97_LINE       },
336         { EM28XX_AMUX_PHONE,    AC97_PHONE      },
337         { EM28XX_AMUX_MIC,      AC97_MIC        },
338         { EM28XX_AMUX_CD,       AC97_CD         },
339         { EM28XX_AMUX_AUX,      AC97_AUX        },
340         { EM28XX_AMUX_PCM_OUT,  AC97_PCM        },
341 };
342
343 static int set_ac97_input(struct em28xx *dev)
344 {
345         int ret, i;
346         enum em28xx_amux amux = dev->ctl_ainput;
347
348         /* EM28XX_AMUX_VIDEO2 is a special case used to indicate that
349            em28xx should point to LINE IN, while AC97 should use VIDEO
350          */
351         if (amux == EM28XX_AMUX_VIDEO2)
352                 amux = EM28XX_AMUX_VIDEO;
353
354         /* Mute all entres but the one that were selected */
355         for (i = 0; i < ARRAY_SIZE(inputs); i++) {
356                 if (amux == inputs[i].mux)
357                         ret = em28xx_write_ac97(dev, inputs[i].reg, 0x0808);
358                 else
359                         ret = em28xx_write_ac97(dev, inputs[i].reg, 0x8000);
360
361                 if (ret < 0)
362                         em28xx_warn("couldn't setup AC97 register %d\n",
363                                      inputs[i].reg);
364         }
365         return 0;
366 }
367
368 static int em28xx_set_audio_source(struct em28xx *dev)
369 {
370         int ret;
371         u8 input;
372
373         if (dev->board.is_em2800) {
374                 if (dev->ctl_ainput == EM28XX_AMUX_VIDEO)
375                         input = EM2800_AUDIO_SRC_TUNER;
376                 else
377                         input = EM2800_AUDIO_SRC_LINE;
378
379                 ret = em28xx_write_regs(dev, EM2800_R08_AUDIOSRC, &input, 1);
380                 if (ret < 0)
381                         return ret;
382         }
383
384         if (dev->board.has_msp34xx)
385                 input = EM28XX_AUDIO_SRC_TUNER;
386         else {
387                 switch (dev->ctl_ainput) {
388                 case EM28XX_AMUX_VIDEO:
389                         input = EM28XX_AUDIO_SRC_TUNER;
390                         break;
391                 default:
392                         input = EM28XX_AUDIO_SRC_LINE;
393                         break;
394                 }
395         }
396
397         if (dev->board.mute_gpio && dev->mute)
398                 em28xx_gpio_set(dev, dev->board.mute_gpio);
399         else
400                 em28xx_gpio_set(dev, INPUT(dev->ctl_input)->gpio);
401
402         ret = em28xx_write_reg_bits(dev, EM28XX_R0E_AUDIOSRC, input, 0xc0);
403         if (ret < 0)
404                 return ret;
405         msleep(5);
406
407         switch (dev->audio_mode.ac97) {
408         case EM28XX_NO_AC97:
409                 break;
410         default:
411                 ret = set_ac97_input(dev);
412         }
413
414         return ret;
415 }
416
417 struct em28xx_vol_otable {
418         enum em28xx_aout mux;
419         u8               reg;
420 };
421
422 static const struct em28xx_vol_otable outputs[] = {
423         { EM28XX_AOUT_MASTER, AC97_MASTER               },
424         { EM28XX_AOUT_LINE,   AC97_HEADPHONE            },
425         { EM28XX_AOUT_MONO,   AC97_MASTER_MONO          },
426         { EM28XX_AOUT_LFE,    AC97_CENTER_LFE_MASTER    },
427         { EM28XX_AOUT_SURR,   AC97_SURROUND_MASTER      },
428 };
429
430 int em28xx_audio_analog_set(struct em28xx *dev)
431 {
432         int ret, i;
433         u8 xclk;
434
435         if (!dev->audio_mode.has_audio)
436                 return 0;
437
438         /* It is assumed that all devices use master volume for output.
439            It would be possible to use also line output.
440          */
441         if (dev->audio_mode.ac97 != EM28XX_NO_AC97) {
442                 /* Mute all outputs */
443                 for (i = 0; i < ARRAY_SIZE(outputs); i++) {
444                         ret = em28xx_write_ac97(dev, outputs[i].reg, 0x8000);
445                         if (ret < 0)
446                                 em28xx_warn("couldn't setup AC97 register %d\n",
447                                      outputs[i].reg);
448                 }
449         }
450
451         xclk = dev->board.xclk & 0x7f;
452         if (!dev->mute)
453                 xclk |= EM28XX_XCLK_AUDIO_UNMUTE;
454
455         ret = em28xx_write_reg(dev, EM28XX_R0F_XCLK, xclk);
456         if (ret < 0)
457                 return ret;
458         msleep(10);
459
460         /* Selects the proper audio input */
461         ret = em28xx_set_audio_source(dev);
462
463         /* Sets volume */
464         if (dev->audio_mode.ac97 != EM28XX_NO_AC97) {
465                 int vol;
466
467                 em28xx_write_ac97(dev, AC97_POWERDOWN, 0x4200);
468                 em28xx_write_ac97(dev, AC97_EXTENDED_STATUS, 0x0031);
469                 em28xx_write_ac97(dev, AC97_PCM_LR_ADC_RATE, 0xbb80);
470
471                 /* LSB: left channel - both channels with the same level */
472                 vol = (0x1f - dev->volume) | ((0x1f - dev->volume) << 8);
473
474                 /* Mute device, if needed */
475                 if (dev->mute)
476                         vol |= 0x8000;
477
478                 /* Sets volume */
479                 for (i = 0; i < ARRAY_SIZE(outputs); i++) {
480                         if (dev->ctl_aoutput & outputs[i].mux)
481                                 ret = em28xx_write_ac97(dev, outputs[i].reg,
482                                                         vol);
483                         if (ret < 0)
484                                 em28xx_warn("couldn't setup AC97 register %d\n",
485                                      outputs[i].reg);
486                 }
487
488                 if (dev->ctl_aoutput & EM28XX_AOUT_PCM_IN) {
489                         int sel = ac97_return_record_select(dev->ctl_aoutput);
490
491                         /* Use the same input for both left and right
492                            channels */
493                         sel |= (sel << 8);
494
495                         em28xx_write_ac97(dev, AC97_REC_SEL, sel);
496                 }
497         }
498
499         return ret;
500 }
501 EXPORT_SYMBOL_GPL(em28xx_audio_analog_set);
502
503 int em28xx_audio_setup(struct em28xx *dev)
504 {
505         int vid1, vid2, feat, cfg;
506         u32 vid;
507
508         if (dev->chip_id == CHIP_ID_EM2870 || dev->chip_id == CHIP_ID_EM2874
509                 || dev->chip_id == CHIP_ID_EM28174) {
510                 /* Digital only device - don't load any alsa module */
511                 dev->audio_mode.has_audio = false;
512                 dev->has_audio_class = false;
513                 dev->has_alsa_audio = false;
514                 return 0;
515         }
516
517         dev->audio_mode.has_audio = true;
518
519         /* See how this device is configured */
520         cfg = em28xx_read_reg(dev, EM28XX_R00_CHIPCFG);
521         em28xx_info("Config register raw data: 0x%02x\n", cfg);
522         if (cfg < 0) {
523                 /* Register read error?  */
524                 cfg = EM28XX_CHIPCFG_AC97; /* Be conservative */
525         } else if ((cfg & EM28XX_CHIPCFG_AUDIOMASK) == 0x00) {
526                 /* The device doesn't have vendor audio at all */
527                 dev->has_alsa_audio = false;
528                 dev->audio_mode.has_audio = false;
529                 return 0;
530         } else if ((cfg & EM28XX_CHIPCFG_AUDIOMASK) ==
531                    EM28XX_CHIPCFG_I2S_3_SAMPRATES) {
532                 em28xx_info("I2S Audio (3 sample rates)\n");
533                 dev->audio_mode.i2s_3rates = 1;
534         } else if ((cfg & EM28XX_CHIPCFG_AUDIOMASK) ==
535                    EM28XX_CHIPCFG_I2S_5_SAMPRATES) {
536                 em28xx_info("I2S Audio (5 sample rates)\n");
537                 dev->audio_mode.i2s_5rates = 1;
538         }
539
540         if ((cfg & EM28XX_CHIPCFG_AUDIOMASK) != EM28XX_CHIPCFG_AC97) {
541                 /* Skip the code that does AC97 vendor detection */
542                 dev->audio_mode.ac97 = EM28XX_NO_AC97;
543                 goto init_audio;
544         }
545
546         dev->audio_mode.ac97 = EM28XX_AC97_OTHER;
547
548         vid1 = em28xx_read_ac97(dev, AC97_VENDOR_ID1);
549         if (vid1 < 0) {
550                 /*
551                  * Device likely doesn't support AC97
552                  * Note: (some) em2800 devices without eeprom reports 0x91 on
553                  *       CHIPCFG register, even not having an AC97 chip
554                  */
555                 em28xx_warn("AC97 chip type couldn't be determined\n");
556                 dev->audio_mode.ac97 = EM28XX_NO_AC97;
557                 dev->has_alsa_audio = false;
558                 dev->audio_mode.has_audio = false;
559                 goto init_audio;
560         }
561
562         vid2 = em28xx_read_ac97(dev, AC97_VENDOR_ID2);
563         if (vid2 < 0)
564                 goto init_audio;
565
566         vid = vid1 << 16 | vid2;
567
568         dev->audio_mode.ac97_vendor_id = vid;
569         em28xx_warn("AC97 vendor ID = 0x%08x\n", vid);
570
571         feat = em28xx_read_ac97(dev, AC97_RESET);
572         if (feat < 0)
573                 goto init_audio;
574
575         dev->audio_mode.ac97_feat = feat;
576         em28xx_warn("AC97 features = 0x%04x\n", feat);
577
578         /* Try to identify what audio processor we have */
579         if (((vid == 0xffffffff) || (vid == 0x83847650)) && (feat == 0x6a90))
580                 dev->audio_mode.ac97 = EM28XX_AC97_EM202;
581         else if ((vid >> 8) == 0x838476)
582                 dev->audio_mode.ac97 = EM28XX_AC97_SIGMATEL;
583
584 init_audio:
585         /* Reports detected AC97 processor */
586         switch (dev->audio_mode.ac97) {
587         case EM28XX_NO_AC97:
588                 em28xx_info("No AC97 audio processor\n");
589                 break;
590         case EM28XX_AC97_EM202:
591                 em28xx_info("Empia 202 AC97 audio processor detected\n");
592                 break;
593         case EM28XX_AC97_SIGMATEL:
594                 em28xx_info("Sigmatel audio processor detected(stac 97%02x)\n",
595                             dev->audio_mode.ac97_vendor_id & 0xff);
596                 break;
597         case EM28XX_AC97_OTHER:
598                 em28xx_warn("Unknown AC97 audio processor detected!\n");
599                 break;
600         default:
601                 break;
602         }
603
604         return em28xx_audio_analog_set(dev);
605 }
606 EXPORT_SYMBOL_GPL(em28xx_audio_setup);
607
608 int em28xx_colorlevels_set_default(struct em28xx *dev)
609 {
610         em28xx_write_reg(dev, EM28XX_R20_YGAIN, CONTRAST_DEFAULT);
611         em28xx_write_reg(dev, EM28XX_R21_YOFFSET, BRIGHTNESS_DEFAULT);
612         em28xx_write_reg(dev, EM28XX_R22_UVGAIN, SATURATION_DEFAULT);
613         em28xx_write_reg(dev, EM28XX_R23_UOFFSET, BLUE_BALANCE_DEFAULT);
614         em28xx_write_reg(dev, EM28XX_R24_VOFFSET, RED_BALANCE_DEFAULT);
615         em28xx_write_reg(dev, EM28XX_R25_SHARPNESS, SHARPNESS_DEFAULT);
616
617         em28xx_write_reg(dev, EM28XX_R14_GAMMA, 0x20);
618         em28xx_write_reg(dev, EM28XX_R15_RGAIN, 0x20);
619         em28xx_write_reg(dev, EM28XX_R16_GGAIN, 0x20);
620         em28xx_write_reg(dev, EM28XX_R17_BGAIN, 0x20);
621         em28xx_write_reg(dev, EM28XX_R18_ROFFSET, 0x00);
622         em28xx_write_reg(dev, EM28XX_R19_GOFFSET, 0x00);
623         return em28xx_write_reg(dev, EM28XX_R1A_BOFFSET, 0x00);
624 }
625
626 int em28xx_capture_start(struct em28xx *dev, int start)
627 {
628         int rc;
629
630         if (dev->chip_id == CHIP_ID_EM2874 ||
631             dev->chip_id == CHIP_ID_EM2884 ||
632             dev->chip_id == CHIP_ID_EM28174) {
633                 /* The Transport Stream Enable Register moved in em2874 */
634                 if (!start) {
635                         rc = em28xx_write_reg_bits(dev, EM2874_R5F_TS_ENABLE,
636                                                    0x00,
637                                                    EM2874_TS1_CAPTURE_ENABLE);
638                         return rc;
639                 }
640
641                 /* Enable Transport Stream */
642                 rc = em28xx_write_reg_bits(dev, EM2874_R5F_TS_ENABLE,
643                                            EM2874_TS1_CAPTURE_ENABLE,
644                                            EM2874_TS1_CAPTURE_ENABLE);
645                 return rc;
646         }
647
648
649         /* FIXME: which is the best order? */
650         /* video registers are sampled by VREF */
651         rc = em28xx_write_reg_bits(dev, EM28XX_R0C_USBSUSP,
652                                    start ? 0x10 : 0x00, 0x10);
653         if (rc < 0)
654                 return rc;
655
656         if (!start) {
657                 /* disable video capture */
658                 rc = em28xx_write_reg(dev, EM28XX_R12_VINENABLE, 0x27);
659                 return rc;
660         }
661
662         if (dev->board.is_webcam)
663                 rc = em28xx_write_reg(dev, 0x13, 0x0c);
664
665         /* enable video capture */
666         rc = em28xx_write_reg(dev, 0x48, 0x00);
667
668         if (dev->mode == EM28XX_ANALOG_MODE)
669                 rc = em28xx_write_reg(dev, EM28XX_R12_VINENABLE, 0x67);
670         else
671                 rc = em28xx_write_reg(dev, EM28XX_R12_VINENABLE, 0x37);
672
673         msleep(6);
674
675         return rc;
676 }
677
678 int em28xx_vbi_supported(struct em28xx *dev)
679 {
680         /* Modprobe option to manually disable */
681         if (disable_vbi == 1)
682                 return 0;
683
684         if (dev->board.is_webcam)
685                 return 0;
686
687         /* FIXME: check subdevices for VBI support */
688
689         if (dev->chip_id == CHIP_ID_EM2860 ||
690             dev->chip_id == CHIP_ID_EM2883)
691                 return 1;
692
693         /* Version of em28xx that does not support VBI */
694         return 0;
695 }
696
697 int em28xx_set_outfmt(struct em28xx *dev)
698 {
699         int ret;
700         u8 fmt, vinctrl;
701
702         fmt = dev->format->reg;
703         if (!dev->is_em25xx)
704                 fmt |= 0x20;
705         /*
706          * NOTE: it's not clear if this is really needed !
707          * The datasheets say bit 5 is a reserved bit and devices seem to work
708          * fine without it. But the Windows driver sets it for em2710/50+em28xx
709          * devices and we've always been setting it, too.
710          *
711          * em2765 (em25xx, em276x/7x/8x) devices do NOT work with this bit set,
712          * it's likely used for an additional (compressed ?) format there.
713          */
714         ret = em28xx_write_reg(dev, EM28XX_R27_OUTFMT, fmt);
715         if (ret < 0)
716                 return ret;
717
718         ret = em28xx_write_reg(dev, EM28XX_R10_VINMODE, dev->vinmode);
719         if (ret < 0)
720                 return ret;
721
722         vinctrl = dev->vinctl;
723         if (em28xx_vbi_supported(dev) == 1) {
724                 vinctrl |= EM28XX_VINCTRL_VBI_RAW;
725                 em28xx_write_reg(dev, EM28XX_R34_VBI_START_H, 0x00);
726                 em28xx_write_reg(dev, EM28XX_R36_VBI_WIDTH, dev->vbi_width/4);
727                 em28xx_write_reg(dev, EM28XX_R37_VBI_HEIGHT, dev->vbi_height);
728                 if (dev->norm & V4L2_STD_525_60) {
729                         /* NTSC */
730                         em28xx_write_reg(dev, EM28XX_R35_VBI_START_V, 0x09);
731                 } else if (dev->norm & V4L2_STD_625_50) {
732                         /* PAL */
733                         em28xx_write_reg(dev, EM28XX_R35_VBI_START_V, 0x07);
734                 }
735         }
736
737         return em28xx_write_reg(dev, EM28XX_R11_VINCTRL, vinctrl);
738 }
739
740 static int em28xx_accumulator_set(struct em28xx *dev, u8 xmin, u8 xmax,
741                                   u8 ymin, u8 ymax)
742 {
743         em28xx_coredbg("em28xx Scale: (%d,%d)-(%d,%d)\n",
744                         xmin, ymin, xmax, ymax);
745
746         em28xx_write_regs(dev, EM28XX_R28_XMIN, &xmin, 1);
747         em28xx_write_regs(dev, EM28XX_R29_XMAX, &xmax, 1);
748         em28xx_write_regs(dev, EM28XX_R2A_YMIN, &ymin, 1);
749         return em28xx_write_regs(dev, EM28XX_R2B_YMAX, &ymax, 1);
750 }
751
752 static void em28xx_capture_area_set(struct em28xx *dev, u8 hstart, u8 vstart,
753                                    u16 width, u16 height)
754 {
755         u8 cwidth = width >> 2;
756         u8 cheight = height >> 2;
757         u8 overflow = (height >> 9 & 0x02) | (width >> 10 & 0x01);
758         /* NOTE: size limit: 2047x1023 = 2MPix */
759
760         em28xx_coredbg("capture area set to (%d,%d): %dx%d\n",
761                        hstart, vstart,
762                        ((overflow & 2) << 9 | cwidth << 2),
763                        ((overflow & 1) << 10 | cheight << 2));
764
765         em28xx_write_regs(dev, EM28XX_R1C_HSTART, &hstart, 1);
766         em28xx_write_regs(dev, EM28XX_R1D_VSTART, &vstart, 1);
767         em28xx_write_regs(dev, EM28XX_R1E_CWIDTH, &cwidth, 1);
768         em28xx_write_regs(dev, EM28XX_R1F_CHEIGHT, &cheight, 1);
769         em28xx_write_regs(dev, EM28XX_R1B_OFLOW, &overflow, 1);
770
771         /* FIXME: function/meaning of these registers ? */
772         /* FIXME: align width+height to multiples of 4 ?! */
773         if (dev->is_em25xx) {
774                 em28xx_write_reg(dev, 0x34, width >> 4);
775                 em28xx_write_reg(dev, 0x35, height >> 4);
776         }
777 }
778
779 static int em28xx_scaler_set(struct em28xx *dev, u16 h, u16 v)
780 {
781         u8 mode;
782         /* the em2800 scaler only supports scaling down to 50% */
783
784         if (dev->board.is_em2800) {
785                 mode = (v ? 0x20 : 0x00) | (h ? 0x10 : 0x00);
786         } else {
787                 u8 buf[2];
788
789                 buf[0] = h;
790                 buf[1] = h >> 8;
791                 em28xx_write_regs(dev, EM28XX_R30_HSCALELOW, (char *)buf, 2);
792
793                 buf[0] = v;
794                 buf[1] = v >> 8;
795                 em28xx_write_regs(dev, EM28XX_R32_VSCALELOW, (char *)buf, 2);
796                 /* it seems that both H and V scalers must be active
797                    to work correctly */
798                 mode = (h || v) ? 0x30 : 0x00;
799         }
800         return em28xx_write_reg_bits(dev, EM28XX_R26_COMPR, mode, 0x30);
801 }
802
803 /* FIXME: this only function read values from dev */
804 int em28xx_resolution_set(struct em28xx *dev)
805 {
806         int width, height;
807         width = norm_maxw(dev);
808         height = norm_maxh(dev);
809
810         /* Properly setup VBI */
811         dev->vbi_width = 720;
812         if (dev->norm & V4L2_STD_525_60)
813                 dev->vbi_height = 12;
814         else
815                 dev->vbi_height = 18;
816
817         em28xx_set_outfmt(dev);
818
819         em28xx_accumulator_set(dev, 1, (width - 4) >> 2, 1, (height - 4) >> 2);
820
821         /* If we don't set the start position to 2 in VBI mode, we end up
822            with line 20/21 being YUYV encoded instead of being in 8-bit
823            greyscale.  The core of the issue is that line 21 (and line 23 for
824            PAL WSS) are inside of active video region, and as a result they
825            get the pixelformatting associated with that area.  So by cropping
826            it out, we end up with the same format as the rest of the VBI
827            region */
828         if (em28xx_vbi_supported(dev) == 1)
829                 em28xx_capture_area_set(dev, 0, 2, width, height);
830         else
831                 em28xx_capture_area_set(dev, 0, 0, width, height);
832
833         return em28xx_scaler_set(dev, dev->hscale, dev->vscale);
834 }
835
836 /* Set USB alternate setting for analog video */
837 int em28xx_set_alternate(struct em28xx *dev)
838 {
839         int errCode;
840         int i;
841         unsigned int min_pkt_size = dev->width * 2 + 4;
842
843         /* NOTE: for isoc transfers, only alt settings > 0 are allowed
844                  bulk transfers seem to work only with alt=0 ! */
845         dev->alt = 0;
846         if ((alt > 0) && (alt < dev->num_alt)) {
847                 em28xx_coredbg("alternate forced to %d\n", dev->alt);
848                 dev->alt = alt;
849                 goto set_alt;
850         }
851         if (dev->analog_xfer_bulk)
852                 goto set_alt;
853
854         /* When image size is bigger than a certain value,
855            the frame size should be increased, otherwise, only
856            green screen will be received.
857          */
858         if (dev->width * 2 * dev->height > 720 * 240 * 2)
859                 min_pkt_size *= 2;
860
861         for (i = 0; i < dev->num_alt; i++) {
862                 /* stop when the selected alt setting offers enough bandwidth */
863                 if (dev->alt_max_pkt_size_isoc[i] >= min_pkt_size) {
864                         dev->alt = i;
865                         break;
866                 /* otherwise make sure that we end up with the maximum bandwidth
867                    because the min_pkt_size equation might be wrong...
868                 */
869                 } else if (dev->alt_max_pkt_size_isoc[i] >
870                            dev->alt_max_pkt_size_isoc[dev->alt])
871                         dev->alt = i;
872         }
873
874 set_alt:
875         /* NOTE: for bulk transfers, we need to call usb_set_interface()
876          * even if the previous settings were the same. Otherwise streaming
877          * fails with all urbs having status = -EOVERFLOW ! */
878         if (dev->analog_xfer_bulk) {
879                 dev->max_pkt_size = 512; /* USB 2.0 spec */
880                 dev->packet_multiplier = EM28XX_BULK_PACKET_MULTIPLIER;
881         } else { /* isoc */
882                 em28xx_coredbg("minimum isoc packet size: %u (alt=%d)\n",
883                                min_pkt_size, dev->alt);
884                 dev->max_pkt_size =
885                                   dev->alt_max_pkt_size_isoc[dev->alt];
886                 dev->packet_multiplier = EM28XX_NUM_ISOC_PACKETS;
887         }
888         em28xx_coredbg("setting alternate %d with wMaxPacketSize=%u\n",
889                        dev->alt, dev->max_pkt_size);
890         errCode = usb_set_interface(dev->udev, 0, dev->alt);
891         if (errCode < 0) {
892                 em28xx_errdev("cannot change alternate number to %d (error=%i)\n",
893                               dev->alt, errCode);
894                 return errCode;
895         }
896         return 0;
897 }
898
899 int em28xx_gpio_set(struct em28xx *dev, struct em28xx_reg_seq *gpio)
900 {
901         int rc = 0;
902
903         if (!gpio)
904                 return rc;
905
906         if (dev->mode != EM28XX_SUSPEND) {
907                 em28xx_write_reg(dev, 0x48, 0x00);
908                 if (dev->mode == EM28XX_ANALOG_MODE)
909                         em28xx_write_reg(dev, EM28XX_R12_VINENABLE, 0x67);
910                 else
911                         em28xx_write_reg(dev, EM28XX_R12_VINENABLE, 0x37);
912                 msleep(6);
913         }
914
915         /* Send GPIO reset sequences specified at board entry */
916         while (gpio->sleep >= 0) {
917                 if (gpio->reg >= 0) {
918                         rc = em28xx_write_reg_bits(dev,
919                                                    gpio->reg,
920                                                    gpio->val,
921                                                    gpio->mask);
922                         if (rc < 0)
923                                 return rc;
924                 }
925                 if (gpio->sleep > 0)
926                         msleep(gpio->sleep);
927
928                 gpio++;
929         }
930         return rc;
931 }
932 EXPORT_SYMBOL_GPL(em28xx_gpio_set);
933
934 int em28xx_set_mode(struct em28xx *dev, enum em28xx_mode set_mode)
935 {
936         if (dev->mode == set_mode)
937                 return 0;
938
939         if (set_mode == EM28XX_SUSPEND) {
940                 dev->mode = set_mode;
941
942                 /* FIXME: add suspend support for ac97 */
943
944                 return em28xx_gpio_set(dev, dev->board.suspend_gpio);
945         }
946
947         dev->mode = set_mode;
948
949         if (dev->mode == EM28XX_DIGITAL_MODE)
950                 return em28xx_gpio_set(dev, dev->board.dvb_gpio);
951         else
952                 return em28xx_gpio_set(dev, INPUT(dev->ctl_input)->gpio);
953 }
954 EXPORT_SYMBOL_GPL(em28xx_set_mode);
955
956 /* ------------------------------------------------------------------
957         URB control
958    ------------------------------------------------------------------*/
959
960 /*
961  * URB completion handler for isoc/bulk transfers
962  */
963 static void em28xx_irq_callback(struct urb *urb)
964 {
965         struct em28xx *dev = urb->context;
966         int i;
967
968         switch (urb->status) {
969         case 0:             /* success */
970         case -ETIMEDOUT:    /* NAK */
971                 break;
972         case -ECONNRESET:   /* kill */
973         case -ENOENT:
974         case -ESHUTDOWN:
975                 return;
976         default:            /* error */
977                 em28xx_isocdbg("urb completition error %d.\n", urb->status);
978                 break;
979         }
980
981         /* Copy data from URB */
982         spin_lock(&dev->slock);
983         dev->usb_ctl.urb_data_copy(dev, urb);
984         spin_unlock(&dev->slock);
985
986         /* Reset urb buffers */
987         for (i = 0; i < urb->number_of_packets; i++) {
988                 /* isoc only (bulk: number_of_packets = 0) */
989                 urb->iso_frame_desc[i].status = 0;
990                 urb->iso_frame_desc[i].actual_length = 0;
991         }
992         urb->status = 0;
993
994         urb->status = usb_submit_urb(urb, GFP_ATOMIC);
995         if (urb->status) {
996                 em28xx_isocdbg("urb resubmit failed (error=%i)\n",
997                                urb->status);
998         }
999 }
1000
1001 /*
1002  * Stop and Deallocate URBs
1003  */
1004 void em28xx_uninit_usb_xfer(struct em28xx *dev, enum em28xx_mode mode)
1005 {
1006         struct urb *urb;
1007         struct em28xx_usb_bufs *usb_bufs;
1008         int i;
1009
1010         em28xx_isocdbg("em28xx: called em28xx_uninit_usb_xfer in mode %d\n",
1011                        mode);
1012
1013         if (mode == EM28XX_DIGITAL_MODE)
1014                 usb_bufs = &dev->usb_ctl.digital_bufs;
1015         else
1016                 usb_bufs = &dev->usb_ctl.analog_bufs;
1017
1018         for (i = 0; i < usb_bufs->num_bufs; i++) {
1019                 urb = usb_bufs->urb[i];
1020                 if (urb) {
1021                         if (!irqs_disabled())
1022                                 usb_kill_urb(urb);
1023                         else
1024                                 usb_unlink_urb(urb);
1025
1026                         if (usb_bufs->transfer_buffer[i]) {
1027                                 usb_free_coherent(dev->udev,
1028                                         urb->transfer_buffer_length,
1029                                         usb_bufs->transfer_buffer[i],
1030                                         urb->transfer_dma);
1031                         }
1032                         usb_free_urb(urb);
1033                         usb_bufs->urb[i] = NULL;
1034                 }
1035                 usb_bufs->transfer_buffer[i] = NULL;
1036         }
1037
1038         kfree(usb_bufs->urb);
1039         kfree(usb_bufs->transfer_buffer);
1040
1041         usb_bufs->urb = NULL;
1042         usb_bufs->transfer_buffer = NULL;
1043         usb_bufs->num_bufs = 0;
1044
1045         em28xx_capture_start(dev, 0);
1046 }
1047 EXPORT_SYMBOL_GPL(em28xx_uninit_usb_xfer);
1048
1049 /*
1050  * Stop URBs
1051  */
1052 void em28xx_stop_urbs(struct em28xx *dev)
1053 {
1054         int i;
1055         struct urb *urb;
1056         struct em28xx_usb_bufs *isoc_bufs = &dev->usb_ctl.digital_bufs;
1057
1058         em28xx_isocdbg("em28xx: called em28xx_stop_urbs\n");
1059
1060         for (i = 0; i < isoc_bufs->num_bufs; i++) {
1061                 urb = isoc_bufs->urb[i];
1062                 if (urb) {
1063                         if (!irqs_disabled())
1064                                 usb_kill_urb(urb);
1065                         else
1066                                 usb_unlink_urb(urb);
1067                 }
1068         }
1069
1070         em28xx_capture_start(dev, 0);
1071 }
1072 EXPORT_SYMBOL_GPL(em28xx_stop_urbs);
1073
1074 /*
1075  * Allocate URBs
1076  */
1077 int em28xx_alloc_urbs(struct em28xx *dev, enum em28xx_mode mode, int xfer_bulk,
1078                       int num_bufs, int max_pkt_size, int packet_multiplier)
1079 {
1080         struct em28xx_usb_bufs *usb_bufs;
1081         int i;
1082         int sb_size, pipe;
1083         struct urb *urb;
1084         int j, k;
1085
1086         em28xx_isocdbg("em28xx: called em28xx_alloc_isoc in mode %d\n", mode);
1087
1088         /* Check mode and if we have an endpoint for the selected
1089            transfer type, select buffer                          */
1090         if (mode == EM28XX_DIGITAL_MODE) {
1091                 if ((xfer_bulk && !dev->dvb_ep_bulk) ||
1092                     (!xfer_bulk && !dev->dvb_ep_isoc)) {
1093                         em28xx_errdev("no endpoint for DVB mode and transfer type %d\n",
1094                                       xfer_bulk > 0);
1095                         return -EINVAL;
1096                 }
1097                 usb_bufs = &dev->usb_ctl.digital_bufs;
1098         } else if (mode == EM28XX_ANALOG_MODE) {
1099                 if ((xfer_bulk && !dev->analog_ep_bulk) ||
1100                     (!xfer_bulk && !dev->analog_ep_isoc)) {
1101                         em28xx_errdev("no endpoint for analog mode and transfer type %d\n",
1102                                        xfer_bulk > 0);
1103                         return -EINVAL;
1104                 }
1105                 usb_bufs = &dev->usb_ctl.analog_bufs;
1106         } else {
1107                 em28xx_errdev("invalid mode selected\n");
1108                 return -EINVAL;
1109         }
1110
1111         /* De-allocates all pending stuff */
1112         em28xx_uninit_usb_xfer(dev, mode);
1113
1114         usb_bufs->num_bufs = num_bufs;
1115
1116         usb_bufs->urb = kzalloc(sizeof(void *)*num_bufs,  GFP_KERNEL);
1117         if (!usb_bufs->urb) {
1118                 em28xx_errdev("cannot alloc memory for usb buffers\n");
1119                 return -ENOMEM;
1120         }
1121
1122         usb_bufs->transfer_buffer = kzalloc(sizeof(void *)*num_bufs,
1123                                              GFP_KERNEL);
1124         if (!usb_bufs->transfer_buffer) {
1125                 em28xx_errdev("cannot allocate memory for usb transfer\n");
1126                 kfree(usb_bufs->urb);
1127                 return -ENOMEM;
1128         }
1129
1130         usb_bufs->max_pkt_size = max_pkt_size;
1131         if (xfer_bulk)
1132                 usb_bufs->num_packets = 0;
1133         else
1134                 usb_bufs->num_packets = packet_multiplier;
1135         dev->usb_ctl.vid_buf = NULL;
1136         dev->usb_ctl.vbi_buf = NULL;
1137
1138         sb_size = packet_multiplier * usb_bufs->max_pkt_size;
1139
1140         /* allocate urbs and transfer buffers */
1141         for (i = 0; i < usb_bufs->num_bufs; i++) {
1142                 urb = usb_alloc_urb(usb_bufs->num_packets, GFP_KERNEL);
1143                 if (!urb) {
1144                         em28xx_err("cannot alloc usb_ctl.urb %i\n", i);
1145                         em28xx_uninit_usb_xfer(dev, mode);
1146                         return -ENOMEM;
1147                 }
1148                 usb_bufs->urb[i] = urb;
1149
1150                 usb_bufs->transfer_buffer[i] = usb_alloc_coherent(dev->udev,
1151                         sb_size, GFP_KERNEL, &urb->transfer_dma);
1152                 if (!usb_bufs->transfer_buffer[i]) {
1153                         em28xx_err("unable to allocate %i bytes for transfer"
1154                                         " buffer %i%s\n",
1155                                         sb_size, i,
1156                                         in_interrupt() ? " while in int" : "");
1157                         em28xx_uninit_usb_xfer(dev, mode);
1158                         return -ENOMEM;
1159                 }
1160                 memset(usb_bufs->transfer_buffer[i], 0, sb_size);
1161
1162                 if (xfer_bulk) { /* bulk */
1163                         pipe = usb_rcvbulkpipe(dev->udev,
1164                                                mode == EM28XX_ANALOG_MODE ?
1165                                                dev->analog_ep_bulk :
1166                                                dev->dvb_ep_bulk);
1167                         usb_fill_bulk_urb(urb, dev->udev, pipe,
1168                                           usb_bufs->transfer_buffer[i], sb_size,
1169                                           em28xx_irq_callback, dev);
1170                         urb->transfer_flags = URB_NO_TRANSFER_DMA_MAP;
1171                 } else { /* isoc */
1172                         pipe = usb_rcvisocpipe(dev->udev,
1173                                                mode == EM28XX_ANALOG_MODE ?
1174                                                dev->analog_ep_isoc :
1175                                                dev->dvb_ep_isoc);
1176                         usb_fill_int_urb(urb, dev->udev, pipe,
1177                                          usb_bufs->transfer_buffer[i], sb_size,
1178                                          em28xx_irq_callback, dev, 1);
1179                         urb->transfer_flags = URB_ISO_ASAP |
1180                                               URB_NO_TRANSFER_DMA_MAP;
1181                         k = 0;
1182                         for (j = 0; j < usb_bufs->num_packets; j++) {
1183                                 urb->iso_frame_desc[j].offset = k;
1184                                 urb->iso_frame_desc[j].length =
1185                                                         usb_bufs->max_pkt_size;
1186                                 k += usb_bufs->max_pkt_size;
1187                         }
1188                 }
1189
1190                 urb->number_of_packets = usb_bufs->num_packets;
1191         }
1192
1193         return 0;
1194 }
1195 EXPORT_SYMBOL_GPL(em28xx_alloc_urbs);
1196
1197 /*
1198  * Allocate URBs and start IRQ
1199  */
1200 int em28xx_init_usb_xfer(struct em28xx *dev, enum em28xx_mode mode,
1201                     int xfer_bulk, int num_bufs, int max_pkt_size,
1202                     int packet_multiplier,
1203                     int (*urb_data_copy) (struct em28xx *dev, struct urb *urb))
1204 {
1205         struct em28xx_dmaqueue *dma_q = &dev->vidq;
1206         struct em28xx_dmaqueue *vbi_dma_q = &dev->vbiq;
1207         struct em28xx_usb_bufs *usb_bufs;
1208         int i;
1209         int rc;
1210         int alloc;
1211
1212         em28xx_isocdbg("em28xx: called em28xx_init_usb_xfer in mode %d\n",
1213                        mode);
1214
1215         dev->usb_ctl.urb_data_copy = urb_data_copy;
1216
1217         if (mode == EM28XX_DIGITAL_MODE) {
1218                 usb_bufs = &dev->usb_ctl.digital_bufs;
1219                 /* no need to free/alloc usb buffers in digital mode */
1220                 alloc = 0;
1221         } else {
1222                 usb_bufs = &dev->usb_ctl.analog_bufs;
1223                 alloc = 1;
1224         }
1225
1226         if (alloc) {
1227                 rc = em28xx_alloc_urbs(dev, mode, xfer_bulk, num_bufs,
1228                                        max_pkt_size, packet_multiplier);
1229                 if (rc)
1230                         return rc;
1231         }
1232
1233         if (xfer_bulk) {
1234                 rc = usb_clear_halt(dev->udev, usb_bufs->urb[0]->pipe);
1235                 if (rc < 0) {
1236                         em28xx_err("failed to clear USB bulk endpoint stall/halt condition (error=%i)\n",
1237                                    rc);
1238                         em28xx_uninit_usb_xfer(dev, mode);
1239                         return rc;
1240                 }
1241         }
1242
1243         init_waitqueue_head(&dma_q->wq);
1244         init_waitqueue_head(&vbi_dma_q->wq);
1245
1246         em28xx_capture_start(dev, 1);
1247
1248         /* submit urbs and enables IRQ */
1249         for (i = 0; i < usb_bufs->num_bufs; i++) {
1250                 rc = usb_submit_urb(usb_bufs->urb[i], GFP_ATOMIC);
1251                 if (rc) {
1252                         em28xx_err("submit of urb %i failed (error=%i)\n", i,
1253                                    rc);
1254                         em28xx_uninit_usb_xfer(dev, mode);
1255                         return rc;
1256                 }
1257         }
1258
1259         return 0;
1260 }
1261 EXPORT_SYMBOL_GPL(em28xx_init_usb_xfer);
1262
1263 /*
1264  * em28xx_wake_i2c()
1265  * configure i2c attached devices
1266  */
1267 void em28xx_wake_i2c(struct em28xx *dev)
1268 {
1269         v4l2_device_call_all(&dev->v4l2_dev, 0, core,  reset, 0);
1270         v4l2_device_call_all(&dev->v4l2_dev, 0, video, s_routing,
1271                         INPUT(dev->ctl_input)->vmux, 0, 0);
1272         v4l2_device_call_all(&dev->v4l2_dev, 0, video, s_stream, 0);
1273 }
1274
1275 /*
1276  * Device control list
1277  */
1278
1279 static LIST_HEAD(em28xx_devlist);
1280 static DEFINE_MUTEX(em28xx_devlist_mutex);
1281
1282 /*
1283  * Extension interface
1284  */
1285
1286 static LIST_HEAD(em28xx_extension_devlist);
1287
1288 int em28xx_register_extension(struct em28xx_ops *ops)
1289 {
1290         struct em28xx *dev = NULL;
1291
1292         mutex_lock(&em28xx_devlist_mutex);
1293         list_add_tail(&ops->next, &em28xx_extension_devlist);
1294         list_for_each_entry(dev, &em28xx_devlist, devlist) {
1295                 ops->init(dev);
1296         }
1297         mutex_unlock(&em28xx_devlist_mutex);
1298         printk(KERN_INFO "Em28xx: Initialized (%s) extension\n", ops->name);
1299         return 0;
1300 }
1301 EXPORT_SYMBOL(em28xx_register_extension);
1302
1303 void em28xx_unregister_extension(struct em28xx_ops *ops)
1304 {
1305         struct em28xx *dev = NULL;
1306
1307         mutex_lock(&em28xx_devlist_mutex);
1308         list_for_each_entry(dev, &em28xx_devlist, devlist) {
1309                 ops->fini(dev);
1310         }
1311         list_del(&ops->next);
1312         mutex_unlock(&em28xx_devlist_mutex);
1313         printk(KERN_INFO "Em28xx: Removed (%s) extension\n", ops->name);
1314 }
1315 EXPORT_SYMBOL(em28xx_unregister_extension);
1316
1317 void em28xx_init_extension(struct em28xx *dev)
1318 {
1319         const struct em28xx_ops *ops = NULL;
1320
1321         mutex_lock(&em28xx_devlist_mutex);
1322         list_add_tail(&dev->devlist, &em28xx_devlist);
1323         list_for_each_entry(ops, &em28xx_extension_devlist, next) {
1324                 if (ops->init)
1325                         ops->init(dev);
1326         }
1327         mutex_unlock(&em28xx_devlist_mutex);
1328 }
1329
1330 void em28xx_close_extension(struct em28xx *dev)
1331 {
1332         const struct em28xx_ops *ops = NULL;
1333
1334         mutex_lock(&em28xx_devlist_mutex);
1335         list_for_each_entry(ops, &em28xx_extension_devlist, next) {
1336                 if (ops->fini)
1337                         ops->fini(dev);
1338         }
1339         list_del(&dev->devlist);
1340         mutex_unlock(&em28xx_devlist_mutex);
1341 }