1
linux/drivers/media/video
Hans de Goede 314b3e0881 [media] gspca: submit interrupt urbs *after* isoc urbs
Currently gspca supported usb-1.1 webcams for which we support the input
button through an interrupt endpoint won't stream (not enough bandwidth
error) when used through an USB-2.0 hub.

After much debugging I've found out that the cause for this is that the
ehci-sched.c schedeling code does not like it when there are already urb's
scheduled when (large) isoc urbs are queued. By moving the submission
of the interrupt urbs to after submitting the isoc urbs the camera
starts working again through usb-2.0 hubs.

Note that this does not fix isoc. streaming through a usb-hub while another
1.1 usb device (like the microphone of the same cam) is also active
at the same time :(

I've spend a long time analyzing the linux kernel ehci scheduler code,
resulting in this (long) mail:
http://www.spinics.net/lists/linux-usb/msg37982.html

The conclusion of the following mail thread is that yes there are several
issues when using usb-1.1 devices through a usb-2.0 hub, but these are not
easily fixable in the current code. Fixing this in ehci-sched.c requires
an almost full rewrite, which is not bound to happen anytime soon.

So with this patch gspca driven usb-1.1 webcams will atleast work when
connected through an usb-2.0 hub when the microphone is not used.

As an added bonus this patch avoids extra destroy/create input urb cycles
when we end up falling back to a lower speed alt setting because of bandwidth
limitations.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
2010-12-29 08:16:30 -02:00
..
au0828 [media] v4l: Remove module_name argument to the v4l2_i2c_new_subdev* functions 2010-11-22 11:56:26 -02:00
bt8xx Merge branch 'v4l_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6 2010-12-20 10:35:04 -08:00
cpia2 V4L/DVB: cpia2: remove V4L1 support from this driver 2010-10-21 01:06:17 -02:00
cx18 Merge branch 'bkl_removal' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6 2010-12-17 09:28:17 -08:00
cx88 Merge branch 'v4l_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6 2010-12-02 08:05:56 -08:00
cx231xx [media] cx231xx: Add IR support for Pixelview Hybrid SBTVD 2010-12-29 08:16:28 -02:00
cx23885 [media] v4l: Remove module_name argument to the v4l2_i2c_new_subdev* functions 2010-11-22 11:56:26 -02:00
cx25840 [media] IR: initialize ir_raw_event in few more drivers 2010-10-25 18:54:28 -02:00
davinci [media] v4l: Remove module_name argument to the v4l2_i2c_new_subdev* functions 2010-11-22 11:56:26 -02:00
em28xx [media] em28xx: Add support for Leadership ISDB-T 2010-12-29 08:16:26 -02:00
et61x251 [media] et61x251_core: trivial conversion to unlocked_ioctl 2010-12-01 20:10:12 -02:00
gspca [media] gspca: submit interrupt urbs *after* isoc urbs 2010-12-29 08:16:30 -02:00
hdpvr [media] hdpvr: add usb product id 0x4903 2010-10-21 07:56:07 -02:00
ivtv [media] v4l: Remove module_name argument to the v4l2_i2c_new_subdev* functions 2010-11-22 11:56:26 -02:00
omap V4L/DVB: videobuf: add ext_lock argument to the queue init functions (part 2) 2010-10-21 01:06:19 -02:00
pvrusb2 [media] v4l: Remove module_name argument to the v4l2_i2c_new_subdev* functions 2010-11-22 11:56:26 -02:00
pwc BKL: remove extraneous #include <smp_lock.h> 2010-11-17 08:59:32 -08:00
s5p-fimc [media] s5p-fimc: Fix output DMA handling in S5PV310 IP revisions 2010-12-20 14:11:03 -02:00
saa7134 [media] drivers/media: Removed unnecessary KERN_<level>s from dprintk uses 2010-12-29 08:16:29 -02:00
saa7164 BKL: remove extraneous #include <smp_lock.h> 2010-11-17 08:59:32 -08:00
sn9c102 [media] sn9c102: convert to unlocked_ioctl 2010-12-01 20:10:11 -02:00
tlg2300 [media] v4l: kill the BKL 2010-11-08 22:35:57 -02:00
usbvideo [media] v4l: kill the BKL 2010-11-08 22:35:57 -02:00
usbvision Merge branch 'v4l_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6 2010-12-02 08:05:56 -08:00
uvc [media] uvcvideo: Convert to unlocked_ioctl 2010-12-01 20:10:25 -02:00
zoran [media] v4l: Remove module_name argument to the v4l2_i2c_new_subdev* functions 2010-11-22 11:56:26 -02:00
adv7170.c V4L/DVB: adv7170: remove obsolete v4l2-i2c-drv.h header 2010-10-21 01:06:04 -02:00
adv7175.c V4L/DVB: adv7175: remove obsolete v4l2-i2c-drv.h header 2010-10-21 01:06:01 -02:00
adv7180.c V4L/DVB: v4l: remove unused i2c-id.h headers 2010-10-21 01:06:05 -02:00
adv7343_regs.h
adv7343.c
ak881x.c V4L/DVB: mediabus: fix ambiguous pixel code names 2010-08-02 16:43:36 -03:00
arv.c [media] BKL: trivial ioctl -> unlocked_ioctl video driver conversions 2010-12-01 20:10:10 -02:00
bt819.c V4L/DVB: bt819: remove obsolete v4l2-i2c-drv.h header 2010-10-21 01:05:59 -02:00
bt856.c V4L/DVB: bt856: remove obsolete v4l2-i2c-drv.h header 2010-10-21 01:06:02 -02:00
bt866.c V4L/DVB: bt866: remove obsolete v4l2-i2c-drv.h header 2010-10-21 01:06:00 -02:00
btcx-risc.c
btcx-risc.h
bw-qcam.c [media] BKL: trivial ioctl -> unlocked_ioctl video driver conversions 2010-12-01 20:10:10 -02:00
c-qcam.c [media] BKL: trivial ioctl -> unlocked_ioctl video driver conversions 2010-12-01 20:10:10 -02:00
cafe_ccic-regs.h
cafe_ccic.c [media] cafe_ccic: fix colorspace corruption on resume 2010-12-29 08:16:29 -02:00
cs53l32a.c V4L/DVB: cs53l32a: remove obsolete v4l2-i2c-drv.h header 2010-10-21 01:06:03 -02:00
cs5345.c V4L/DVB: cs5345: remove obsolete v4l2-i2c-drv.h header 2010-10-21 01:05:57 -02:00
cs8420.h
cx2341x.c V4L/DVB: cx2341x: convert to the control framework 2010-08-08 23:43:05 -03:00
dabusb.c dabusb: remove the BKL 2010-10-19 11:30:00 +02:00
dabusb.h
fsl-viu.c [media] v4l: Remove module_name argument to the v4l2_i2c_new_subdev* functions 2010-11-22 11:56:26 -02:00
hexium_gemini.c [media] i2c: Stop using I2C_CLASS_TV_ANALOG 2010-10-21 07:54:25 -02:00
hexium_orion.c [media] i2c: Stop using I2C_CLASS_TV_ANALOG 2010-10-21 07:54:25 -02:00
ibmmpeg2.h
imx074.c i2c: Remove obsolete cleanup for clientdata 2010-11-15 22:40:38 +01:00
indycam.c V4L/DVB: indycam: remove obsolete v4l2-i2c-drv.h header 2010-10-21 01:05:59 -02:00
indycam.h
ir-kbd-i2c.c i2c: Drivers shouldn't include <linux/i2c-id.h> 2010-11-15 22:40:38 +01:00
Kconfig media/video: convert Kconfig to use the menu's `visible' keyword 2010-11-22 11:27:34 -02:00
ks0127.c V4L/DVB: ks0127: remove obsolete v4l2_i2c_drv.h header 2010-10-21 01:06:04 -02:00
ks0127.h
m52790.c V4L/DVB: m52790: remove obsolete v4l2-i2c-drv.h header 2010-10-21 01:05:59 -02:00
Makefile [media] Add the via framebuffer camera controller driver 2010-10-21 13:45:28 -02:00
mem2mem_testdev.c V4L/DVB: videobuf: add queue argument to videobuf_waiton() 2010-10-21 01:06:14 -02:00
meye.c [media] BKL: trivial ioctl -> unlocked_ioctl video driver conversions 2010-12-01 20:10:10 -02:00
meye.h V4L/DVB: meye: remove last V4L1 remnants from the code and add v4l2_device 2010-05-18 00:52:36 -03:00
msp3400-driver.c [media] msp3400: fix mute audio regression 2010-10-21 08:56:41 -02:00
msp3400-driver.h V4L/DVB: msp3400: convert to the new control framework 2010-08-08 23:43:04 -03:00
msp3400-kthreads.c V4L/DVB: msp3400: convert to the new control framework 2010-08-08 23:43:04 -03:00
mt9m001.c V4L/DVB: v4l: Use v4l2_get_subdevdata instead of accessing v4l2_subdev::priv 2010-10-21 01:04:51 -02:00
mt9m111.c [media] mt9m111: changed MIN_DARK_COLS to MT9M131 spec count 2010-10-21 07:55:35 -02:00
mt9t031.c V4L/DVB: v4l: Use v4l2_get_subdevdata instead of accessing v4l2_subdev::priv 2010-10-21 01:04:51 -02:00
mt9t112.c V4L/DVB: v4l: Use v4l2_get_subdevdata instead of accessing v4l2_subdev::priv 2010-10-21 01:04:51 -02:00
mt9v011.c V4L/DVB: mt9v011: remove obsolete v4l2-i2c-drv.h header 2010-10-21 01:05:58 -02:00
mt9v011.h
mt9v022.c V4L/DVB: v4l: Use v4l2_get_subdevdata instead of accessing v4l2_subdev::priv 2010-10-21 01:04:51 -02:00
mx1_camera.c V4L/DVB: videobuf: add ext_lock argument to the queue init functions (part 2) 2010-10-21 01:06:19 -02:00
mx2_camera.c [media] mx2_camera: fix pixel clock polarity configuration 2010-12-20 14:10:56 -02:00
mx3_camera.c [media] ARM mx3_camera: check for DMA engine type 2010-11-09 15:07:28 -02:00
mxb.c [media] v4l: Remove module_name argument to the v4l2_i2c_new_subdev* functions 2010-11-22 11:56:26 -02:00
mxb.h
omap1_camera.c [media] SOC Camera: OMAP1: typo fix 2010-11-09 15:15:42 -02:00
omap24xxcam-dma.c
omap24xxcam.c V4L/DVB: videobuf: add ext_lock argument to the queue init functions (part 2) 2010-10-21 01:06:19 -02:00
omap24xxcam.h
ov772x.c V4L/DVB: v4l: Use v4l2_get_subdevdata instead of accessing v4l2_subdev::priv 2010-10-21 01:04:51 -02:00
ov6650.c i2c: Remove obsolete cleanup for clientdata 2010-11-15 22:40:38 +01:00
ov7670.c [media] ov7670: allow configuration of image size, clock speed, and I/O method 2010-10-23 13:09:23 -02:00
ov7670.h [media] ov7670: allow configuration of image size, clock speed, and I/O method 2010-10-23 13:09:23 -02:00
ov9640.c V4L/DVB: v4l: Use v4l2_get_subdevdata instead of accessing v4l2_subdev::priv 2010-10-21 01:04:51 -02:00
ov9640.h
pms.c [media] BKL: trivial ioctl -> unlocked_ioctl video driver conversions 2010-12-01 20:10:10 -02:00
pxa_camera.c V4L/DVB: videobuf: add ext_lock argument to the queue init functions (part 2) 2010-10-21 01:06:19 -02:00
rj54n1cb0c.c V4L/DVB: v4l: Use v4l2_get_subdevdata instead of accessing v4l2_subdev::priv 2010-10-21 01:04:51 -02:00
s2255drv.c BKL: remove extraneous #include <smp_lock.h> 2010-11-17 08:59:32 -08:00
saa711x_regs.h
saa717x.c V4L/DVB: saa717x: remove obsolete v4l2-i2c-drv.h header 2010-10-21 01:05:58 -02:00
saa6588.c [media] [RFC,1/1] V4L2: Use new CAP bits in existing RDS capable drivers 2010-10-22 23:49:47 -02:00
saa7110.c V4L/DVB: saa7110: remove obsolete v4l2-i2c-drv.h header 2010-10-21 01:06:02 -02:00
saa7115.c V4L/DVB: saa7115: remove obsolete v4l2-i2c-drv.h header 2010-10-21 01:05:58 -02:00
saa7121.h
saa7127.c V4L/DVB: saa7127: remove obsolete v4l2-i2c-drv.h header 2010-10-21 01:06:04 -02:00
saa7146.h
saa7146reg.h
saa7185.c V4L/DVB: saa7185: remove obsolete v4l2-i2c-drv.h header 2010-10-21 01:05:59 -02:00
saa7191.c V4L/DVB: saa7191: remove obsolete v4l2-i2c-drv.h header 2010-10-21 01:06:02 -02:00
saa7191.h
se401.c [media] v4l: kill the BKL 2010-11-08 22:35:57 -02:00
se401.h
sh_mobile_ceu_camera.c [media] soc-camera: fix static build of the sh_mobile_csi2.c driver 2010-12-20 14:10:57 -02:00
sh_mobile_csi2.c V4L/DVB: V4L2: soc-camera: add a MIPI CSI-2 driver for SH-Mobile platforms 2010-08-02 16:43:39 -03:00
sh_vou.c Merge branch 'bkl_removal' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6 2010-12-17 09:28:17 -08:00
soc_camera_platform.c V4L/DVB: soc_camera_platform: Add necessary v4l2_subdev_video_ops method 2010-08-02 14:05:37 -03:00
soc_camera.c [media] v4l: soc-camera: fix multiple simultaneous user case 2010-12-25 22:54:49 -02:00
soc_mediabus.c V4L/DVB: mediabus: fix ambiguous pixel code names 2010-08-02 16:43:36 -03:00
sr030pc30.c [media] SR030PC30: Avoid use of uninitialized variables 2010-10-21 11:05:36 -02:00
stk-sensor.c
stk-webcam.c [media] v4l: kill the BKL 2010-11-08 22:35:57 -02:00
stk-webcam.h
tcm825x.c i2c: Remove all i2c_set_clientdata(client, NULL) in drivers 2010-06-03 11:33:58 +02:00
tcm825x.h
tda7432.c V4L/DVB: tda7432: remove obsolete v4l2-i2c-drv.h header 2010-10-21 01:06:03 -02:00
tda9840.c V4L/DVB: tda9840: remove obsolete v4l2-i2c-drv.h header 2010-10-21 01:05:58 -02:00
tda9875.c V4L/DVB: tda9875: remove obsolete v4l2-i2c-drv.h header 2010-10-21 01:06:02 -02:00
tea6415c.c V4L/DVB: tea6415c: remove obsolete v4l2-i2c-drv.h header 2010-10-21 01:06:00 -02:00
tea6415c.h
tea6420.c V4L/DVB: tea6420: remove obsolete v4l2-i2c-drv.h header 2010-10-21 01:06:03 -02:00
tea6420.h
ths7303.c
tlv320aic23b.c V4L/DVB: tlv320aic23b: remove obsolete v4l2-i2c-drv.h header 2010-10-21 01:06:02 -02:00
tuner-core.c [media] tda18271: allow restricting max out to 4 bytes 2010-10-21 01:17:43 -02:00
tvaudio.c V4L/DVB: tvaudio: remove obsolete tda8425 initialization 2010-10-21 01:06:09 -02:00
tveeprom.c V4L/DVB: tveeprom: Add an entry for tuner code 168: a TCL M30WTP-4N-E tuner 2010-07-08 16:49:59 -03:00
tvp514x_regs.h
tvp514x.c V4L/DVB: tvp514x: remove obsolete enum/try/s/g_fmt 2010-10-21 01:04:37 -02:00
tvp5150_reg.h
tvp5150.c [media] tvp5150: COMPOSITE0 input should not force-enable TV mode 2010-10-21 07:54:24 -02:00
tvp7002_reg.h
tvp7002.c V4L/DVB: tvp7002: remove obsolete enum/try/s/g_fmt 2010-10-21 01:04:38 -02:00
tw9910.c V4L/DVB: v4l: Use v4l2_get_subdevdata instead of accessing v4l2_subdev::priv 2010-10-21 01:04:51 -02:00
upd64031a.c V4L/DVB: upd64031a: remove obsolete v4l2-i2c-drv.h header 2010-10-21 01:05:58 -02:00
upd64083.c V4L/DVB: upd64083: remove obsolete v4l2-i2c-drv.h header 2010-10-21 01:06:03 -02:00
v4l1-compat.c [media] Guard a divide in v4l1 compat layer 2010-10-25 18:53:44 -02:00
v4l2-common.c [media] v4l: Remove module_name argument to the v4l2_i2c_new_subdev* functions 2010-11-22 11:56:26 -02:00
v4l2-compat-ioctl32.c BKL: remove extraneous #include <smp_lock.h> 2010-11-17 08:59:32 -08:00
v4l2-ctrls.c V4L/DVB: v4l2: Add illuminator controls 2010-10-21 01:05:54 -02:00
v4l2-dev.c [media] v4l2-dev: fix race condition 2010-12-01 20:10:20 -02:00
v4l2-device.c [media] V4L: improve the BKL replacement heuristic 2010-12-01 20:10:19 -02:00
v4l2-event.c V4L/DVB: v4l2: add core serialization lock 2010-10-21 01:06:14 -02:00
v4l2-fh.c V4L/DVB: V4L: Events: Support event handling in do_ioctl 2010-05-19 12:58:07 -03:00
v4l2-int-device.c
v4l2-ioctl.c V4L/DVB: v4l2: hook up the new control framework into the core framework 2010-08-08 23:43:04 -03:00
v4l2-mem2mem.c V4L/DVB: videobuf: prepare to make locking optional in videobuf 2010-10-21 01:06:14 -02:00
via-camera.c [media] v4l: Remove module_name argument to the v4l2_i2c_new_subdev* functions 2010-11-22 11:56:26 -02:00
via-camera.h [media] Add the via framebuffer camera controller driver 2010-10-21 13:45:28 -02:00
videobuf-core.c V4L/DVB: videobuf: add queue argument to videobuf_waiton() 2010-10-21 01:06:14 -02:00
videobuf-dma-contig.c [media] v4l: videobuf: remove unused is_userptr variable 2010-10-21 07:55:56 -02:00
videobuf-dma-sg.c [media] videobuf-dma-sg: Use min_t(size_t, PAGE_SIZE ..) 2010-10-21 01:17:00 -02:00
videobuf-dvb.c V4L/DVB: videobuf: add queue argument to videobuf_waiton() 2010-10-21 01:06:14 -02:00
videobuf-vmalloc.c V4L/DVB: videobuf: add ext_lock argument to the queue init functions 2010-10-21 01:06:14 -02:00
vino.c [media] v4l: Remove module_name argument to the v4l2_i2c_new_subdev* functions 2010-11-22 11:56:26 -02:00
vino.h
vivi.c V4L/DVB: vivi: remove BKL 2010-10-21 01:06:15 -02:00
vp27smpx.c V4L/DVB: vp27smpx: remove obsolete v4l2-i2c-drv.h header 2010-10-21 01:05:57 -02:00
vpx3220.c V4L/DVB: vpx3220: remove obsolete v4l2-i2c-drv.h header 2010-10-21 01:06:03 -02:00
w9966.c [media] BKL: trivial ioctl -> unlocked_ioctl video driver conversions 2010-12-01 20:10:10 -02:00
wm8739.c V4L/DVB: wm8739: remove obsolete v4l2-i2c-drv.h header 2010-10-21 01:05:57 -02:00
wm8775.c [media] Nova-S-Plus audio line input 2010-10-23 01:17:52 -02:00
zr364xx.c V4L/DVB: videobuf: add ext_lock argument to the queue init functions 2010-10-21 01:06:14 -02:00