linux/drivers/media/video
Hans Verkuil eb5b16efb2 [media] v4l2-ctrls: improve discovery of controls of the same cluster
The implementation of VIDIOC_G/S/TRY_EXT_CTRLS in the control framework has
to figure out which controls in the control list belong to the same cluster.
Since controls belonging to the same cluster need to be handled as a unit,
this is important information.

It did that by going over the controls in the list and for each control that
belonged to a multi-control cluster it would walk the remainder of the list
to try and find controls that belong to that same cluster.

This approach has two disadvantages:

1) it was a potentially quadratic algorithm (although highly unlikely that
it would ever be that bad in practice).
2) it took place with the control handler's lock held.

Since we want to make it possible in the future to change control values
from interrupt context, doing a lot of work while holding a lock is not a
good idea.

In the new code the algorithm is no longer quadratic but linear in the
number of controls in the list. Also, it now can be done beforehand.

Another change that was made was to so the try and set at the same time.
Before when S_TRY_EXT_CTRLS was called it would 'try' the controls first,
and then it would 'set' them. The idea was that any 'try' errors would
prevent the 'set' from happening, thus avoiding having partially set
control lists.

However, this caused more problems than it solved because between the 'try'
and the 'set' changes might have happened, so it had to try a second time,
and since actual controls with a try_ctrl op are very rare (and those that
we have just adjust values and do not return an error), I've decided to
drop that two-stage approach and just combine try and set.

Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
2011-07-27 17:53:31 -03:00
..
au0828 [media] Stop using linux/version.h on most video drivers 2011-07-27 17:53:12 -03:00
bt8xx [media] Stop using linux/version.h on most video drivers 2011-07-27 17:53:12 -03:00
cpia2 [media] Stop using linux/version.h on most video drivers 2011-07-27 17:53:12 -03:00
cx18 [media] ivtv,cx18: Use default version control for VIDIOC_QUERYCAP 2011-07-27 17:53:14 -03:00
cx88 [media] Stop using linux/version.h on most video drivers 2011-07-27 17:53:12 -03:00
cx231xx [media] Stop using linux/version.h on most video drivers 2011-07-27 17:53:12 -03:00
cx23885 [media] Stop using linux/version.h on most video drivers 2011-07-27 17:53:12 -03:00
cx25840 Fix common misspellings 2011-03-31 11:26:23 -03:00
davinci [media] Stop using linux/version.h on the remaining video drivers 2011-07-27 17:53:16 -03:00
em28xx [media] Stop using linux/version.h on most video drivers 2011-07-27 17:53:12 -03:00
et61x251 [media] et61x251: Use LINUX_VERSION_CODE for VIDIOC_QUERYCAP 2011-07-27 17:53:15 -03:00
gspca [media] gspca: don't include linux/version.h 2011-07-27 17:53:15 -03:00
hdpvr [media] Stop using linux/version.h on most video drivers 2011-07-27 17:53:12 -03:00
ivtv [media] v4l2-event/ctrls/fh: allocate events per fh and per type instead of just per-fh 2011-07-27 17:53:31 -03:00
m5mols [media] Stop using linux/version.h on the remaining video drivers 2011-07-27 17:53:16 -03:00
marvell-ccic [media] marvell-cam: implement contiguous DMA operation 2011-07-27 17:53:11 -03:00
omap [media] omap_vout: Added check in reqbuf & mmap for buf_size allocation 2011-07-01 15:47:53 -03:00
omap3isp [media] v4l2-event/ctrls/fh: allocate events per fh and per type instead of just per-fh 2011-07-27 17:53:31 -03:00
pvrusb2 [media] pvrusb2: Use LINUX_VERSION_CODE for VIDIOC_QUERYCAP 2011-07-27 17:53:15 -03:00
pwc [media] pwc: Use the default version for VIDIOC_QUERYCAP 2011-07-27 17:53:12 -03:00
s5p-fimc [media] Stop using linux/version.h on the remaining video drivers 2011-07-27 17:53:16 -03:00
saa7134 [media] Stop using linux/version.h on most video drivers 2011-07-27 17:53:12 -03:00
saa7164 [media] Stop using linux/version.h on most video drivers 2011-07-27 17:53:12 -03:00
sn9c102 [media] sn9c102: Use LINUX_VERSION_CODE for VIDIOC_QUERYCAP 2011-07-27 17:53:15 -03:00
tlg2300 [media] Stop using linux/version.h on most video drivers 2011-07-27 17:53:12 -03:00
usbvision [media] Stop using linux/version.h on most video drivers 2011-07-27 17:53:12 -03:00
uvc [media] uvcvideo: Use LINUX_VERSION_CODE for VIDIOC_QUERYCAP 2011-07-27 17:53:15 -03:00
zoran [media] Stop using linux/version.h on most video drivers 2011-07-27 17:53:12 -03:00
adv7170.c V4L/DVB: adv7170: remove obsolete v4l2-i2c-drv.h header 2010-10-21 01:06:04 -02:00
adv7175.c [media] adv7175: support s_power 2011-01-19 11:45:55 -02:00
adv7180.c V4L/DVB: v4l: remove unused i2c-id.h headers 2010-10-21 01:06:05 -02:00
adv7343_regs.h [media] adv7343: use control framework 2011-03-21 20:31:49 -03:00
adv7343.c [media] adv7343: use control framework 2011-03-21 20:31:49 -03:00
ak881x.c V4L/DVB: mediabus: fix ambiguous pixel code names 2010-08-02 16:43:36 -03:00
arv.c [media] Stop using linux/version.h on most video drivers 2011-07-27 17:53:12 -03:00
atmel-isi.c [media] V4L: at91: add Atmel Image Sensor Interface (ISI) support 2011-07-27 17:53:23 -03:00
bt819.c [media] bt819: use control framework 2011-03-21 20:31:49 -03: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] Stop using linux/version.h on most video drivers 2011-07-27 17:53:12 -03:00
c-qcam.c [media] Stop using linux/version.h on most video drivers 2011-07-27 17:53:12 -03:00
cs53l32a.c V4L/DVB: cs53l32a: remove obsolete v4l2-i2c-drv.h header 2010-10-21 01:06:03 -02:00
cs5345.c [media] cs5345: use the control framework 2011-03-21 20:31:49 -03:00
cs8420.h
cx2341x.c [media] v4l2-ctrls: use const char * const * for the menu arrays 2010-12-30 08:02:14 -02:00
fsl-viu.c [media] Stop using linux/version.h on the remaining video drivers 2011-07-27 17:53:16 -03:00
hexium_gemini.c Fix common misspellings 2011-03-31 11:26:23 -03:00
hexium_orion.c [media] v4l: fix handling of v4l2_input.capabilities 2010-12-30 08:02:29 -02:00
ibmmpeg2.h
imx074.c [media] imx074: return a meaningful error code instead of -1 2011-04-13 09:54:35 -03: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 [media] ir-kbd-i2c: pass device code w/key in hauppauge case 2011-03-22 19:24:18 -03:00
Kconfig [media] V4L: at91: add Atmel Image Sensor Interface (ISI) support 2011-07-27 17:53:23 -03: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 [media] v4l: make sure drivers supply a zeroed struct v4l2_subdev 2011-04-29 12:33:28 -03:00
Makefile [media] V4L: at91: add Atmel Image Sensor Interface (ISI) support 2011-07-27 17:53:23 -03:00
mem2mem_testdev.c [media] Stop using linux/version.h on most video drivers 2011-07-27 17:53:12 -03:00
meye.c [media] v4l2-ioctl: add priority handling support 2011-03-22 16:37:59 -03:00
meye.h
msp3400-driver.c [media] msp3400: fill in v4l2_tuner based on vt->type field 2011-07-07 17:28:30 -03:00
msp3400-driver.h V4L/DVB: msp3400: convert to the new control framework 2010-08-08 23:43:04 -03:00
msp3400-kthreads.c Fix common misspellings 2011-03-31 11:26:23 -03:00
mt9m001.c [media] v4l: Rename V4L2_MBUS_FMT_GREY8_1X8 to V4L2_MBUS_FMT_Y8_1X8 2011-03-22 04:53:23 -03:00
mt9m111.c [media] V4L: mt9m111: switch to v4l2-subdev .s_power() method 2011-07-27 17:53:22 -03:00
mt9t031.c [media] media: video: do not clear 'driver' from an i2c_client 2010-12-29 08:16:47 -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 [media] mt9v011: Fixed gain calculation 2011-07-27 17:52:25 -03:00
mt9v022.c [media] V4L: mt9v022: fix pixel clock 2011-05-20 12:07:04 -03:00
mt9v032.c [media] v4l: Add mt9v032 sensor driver 2011-05-20 09:29:49 -03:00
mx1_camera.c [media] Stop using linux/version.h on the remaining video drivers 2011-07-27 17:53:16 -03:00
mx2_camera.c [media] V4L: mx2_camera: .try_fmt shouldn't fail 2011-07-27 17:53:22 -03:00
mx3_camera.c [media] V4L: mx3_camera: remove redundant calculations 2011-07-27 17:53:21 -03:00
mxb.c [media] v4l2-ioctl: add priority handling support 2011-03-22 16:37:59 -03:00
mxb.h
noon010pc30.c [media] Add v4l2 subdev driver for NOON010PC30L image sensor 2011-03-21 20:31:40 -03:00
omap1_camera.c [media] Stop using linux/version.h on the remaining video drivers 2011-07-27 17:53:16 -03:00
omap24xxcam-dma.c
omap24xxcam.c [media] Stop using linux/version.h on the remaining video drivers 2011-07-27 17:53:16 -03:00
omap24xxcam.h
ov772x.c [media] v4l: ov772x: simplify pointer dereference 2010-12-30 22:29:23 -02:00
ov2640.c [media] V4L2: Add a v4l2-subdev (soc-camera) driver for OmniVision OV2640 sensor 2010-12-30 22:29:34 -02:00
ov6650.c Fix common misspellings 2011-03-31 11:26:23 -03:00
ov7670.c [media] marvell-cam: Move cafe-ccic into its own directory 2011-07-27 17:53:00 -03:00
ov9640.c Fix common misspellings 2011-03-31 11:26:23 -03:00
ov9640.h
ov9740.c [media] V4L: ov9740: Add suspend/resume 2011-07-27 17:53:30 -03:00
pms.c [media] Stop using linux/version.h on most video drivers 2011-07-27 17:53:12 -03:00
pxa_camera.c [media] V4L: pxa-camera: switch to using subdev .s_power() core operation 2011-07-27 17:53:21 -03:00
rj54n1cb0c.c [media] media: video: do not clear 'driver' from an i2c_client 2010-12-29 08:16:47 -02:00
s2255drv.c [media] Stop using linux/version.h on the remaining video drivers 2011-07-27 17:53:16 -03: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] saa6588: rename rds.h to saa6588.h 2010-12-29 08:17:18 -02:00
saa7110.c [media] saa7110: use control framework 2011-03-21 20:31:50 -03:00
saa7115.c [media] v4l2-ctrls: fix and improve volatile control handling 2011-07-27 17:53:17 -03: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
sh_mobile_ceu_camera.c [media] V4L: sh_mobile_ceu_camera: remove redundant calculations 2011-07-27 17:53:22 -03:00
sh_mobile_csi2.c [media] sh_mobile_csi2: fix module reloading 2011-04-13 09:55:38 -03:00
sh_vou.c [media] Stop using linux/version.h on the remaining video drivers 2011-07-27 17:53:16 -03:00
soc_camera_platform.c
soc_camera.c [media] V4L: soc-camera: remove several now unused soc-camera client operations 2011-07-27 17:53:23 -03:00
soc_mediabus.c [media] V4L: soc-camera: add more format look-up entries 2011-05-20 12:05:27 -03:00
sr030pc30.c [media] Correct error code from -ENOMEM to -EINVAL. 2011-07-27 17:52:59 -03:00
stk-sensor.c
stk-webcam.c [media] stk-webcam: remove V4L1 compatibility code, replace with V4L2 controls 2010-12-29 08:17:09 -02:00
stk-webcam.h
tcm825x.c Fix common misspellings 2011-03-31 11:26:23 -03:00
tcm825x.h
tda7432.c [media] Correct and add some parameter descriptions 2011-07-27 17:52:59 -03:00
tda9840.c [media] v4l: make sure drivers supply a zeroed struct v4l2_subdev 2011-04-29 12:33:28 -03:00
tea6415c.c [media] v4l: make sure drivers supply a zeroed struct v4l2_subdev 2011-04-29 12:33:28 -03:00
tea6415c.h
tea6420.c [media] v4l: make sure drivers supply a zeroed struct v4l2_subdev 2011-04-29 12:33:28 -03:00
tea6420.h
ths7303.c
timblogiw.c [media] Stop using linux/version.h on most video drivers 2011-07-27 17:53:12 -03:00
tlv320aic23b.c [media] tlv320aic23b: use control framework 2011-03-21 20:31:50 -03:00
tuner-core.c [media] xc4000: removed card_type 2011-07-27 17:52:40 -03:00
tvaudio.c Fix common misspellings 2011-03-31 11:26:23 -03:00
tveeprom.c [media] tveeprom: update hauppauge tuner list thru 174 2011-05-20 09:27:15 -03:00
tvp514x_regs.h
tvp514x.c [media] tvp514x: use the control framework 2011-03-21 20:31:50 -03:00
tvp5150_reg.h
tvp5150.c [media] tvp5150: device detection should be done only once 2011-03-21 20:32:04 -03:00
tvp7002_reg.h
tvp7002.c [media] tvp7002: use control framework 2011-03-21 20:31:50 -03:00
tw9910.c [media] V4L: tw9910: remove bogus ENUMINPUT implementation 2011-07-27 17:53:22 -03:00
upd64031a.c [media] v4l: make sure drivers supply a zeroed struct v4l2_subdev 2011-04-29 12:33:28 -03:00
upd64083.c [media] v4l: make sure drivers supply a zeroed struct v4l2_subdev 2011-04-29 12:33:28 -03:00
v4l2-common.c [media] v4l2_prio: move from v4l2-common to v4l2-dev 2011-03-22 16:37:54 -03:00
v4l2-compat-ioctl32.c [media] v4l2-compat-ioctl32: add VIDIOC_DQEVENT support 2011-07-27 17:53:20 -03:00
v4l2-ctrls.c [media] v4l2-ctrls: improve discovery of controls of the same cluster 2011-07-27 17:53:31 -03:00
v4l2-dev.c [media] v4l: Don't access media entity after is has been destroyed 2011-06-30 23:12:36 -03:00
v4l2-device.c [media] v4l2-subdev: implement per-filehandle control handlers 2011-07-27 17:53:17 -03:00
v4l2-event.c [media] v4l2-event: add optional merge and replace callbacks 2011-07-27 17:53:31 -03:00
v4l2-fh.c [media] v4l2-event/ctrls/fh: allocate events per fh and per type instead of just per-fh 2011-07-27 17:53:31 -03:00
v4l2-int-device.c
v4l2-ioctl.c [media] v4l2-ctrls: add v4l2_fh pointer to the set control functions 2011-07-27 17:53:19 -03:00
v4l2-mem2mem.c [media] Update Pawel Osciak's e-mail address 2011-03-22 04:55:05 -03:00
v4l2-subdev.c [media] v4l2-event/ctrls/fh: allocate events per fh and per type instead of just per-fh 2011-07-27 17:53:31 -03:00
via-camera.c [media] via-camera: add MODULE_ALIAS 2011-05-20 09:30:49 -03:00
via-camera.h [media] Add the via framebuffer camera controller driver 2010-10-21 13:45:28 -02:00
videobuf2-core.c [media] media: vb2: fix allocation failure check 2011-06-30 22:33:47 -03:00
videobuf2-dma-contig.c [media] videobuf2: fix an error message 2011-04-13 09:52:36 -03:00
videobuf2-dma-sg.c [media] media: Convert vmalloc/memset to vzalloc 2011-07-27 17:52:21 -03:00
videobuf2-memops.c [media] V4L/videobuf2-memops: use pr_debug for debug messages 2011-07-27 17:52:23 -03:00
videobuf2-vmalloc.c [media] Update Pawel Osciak's e-mail address 2011-03-22 04:55:05 -03:00
videobuf-core.c [media] V4L: remove V4L1 compatibility mode 2010-12-29 08:17:07 -02:00
videobuf-dma-contig.c Revert "[media] V4L: videobuf, don't use dma addr as physical" 2011-04-19 10:54:44 -07:00
videobuf-dma-sg.c [media] videobuf_pages_to_sg: sglist[0] length problem 2011-07-27 17:52:19 -03: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] Stop using linux/version.h on most video drivers 2011-07-27 17:53:12 -03:00
vino.h
vivi.c [media] v4l2-event/ctrls/fh: allocate events per fh and per type instead of just per-fh 2011-07-27 17:53:31 -03:00
vp27smpx.c V4L/DVB: vp27smpx: remove obsolete v4l2-i2c-drv.h header 2010-10-21 01:05:57 -02:00
vpx3220.c Fix common misspellings 2011-03-31 11:26:23 -03:00
w9966.c [media] Stop using linux/version.h on most video drivers 2011-07-27 17:53:12 -03:00
wm8739.c V4L/DVB: wm8739: remove obsolete v4l2-i2c-drv.h header 2010-10-21 01:05:57 -02:00
wm8775.c [media] Add proper audio support for Nova-S Plus with wm8775 ADC 2011-03-21 20:32:19 -03:00
zr364xx.c [media] Stop using linux/version.h on most video drivers 2011-07-27 17:53:12 -03:00