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