diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2010-11-13 12:55:19 -0500 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2010-11-13 12:55:19 -0500 |
| commit | c22cff08db00ef0411be088956d7934681a1f988 (patch) | |
| tree | 74f601d0843e8f367002146a39bedb03b79384ad | |
| parent | 6b4e81db2552bad04100e7d5ddeed7e848f53b48 (diff) | |
| parent | 6b101926f98b54549128db4d34f4a73b5f03fecc (diff) | |
Merge branch 'v4l_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6
* 'v4l_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6:
[media] soc-camera: Compile fixes for mx2-camera
[media] SoC Camera: ov6650: minor cleanups
[media] SOC Camera: OMAP1: typo fix
[media] SoC Camera: OMAP1: update for recent videobuf changes
[media] SoC Camera: OMAP1: update for recent framework changes
[media] ARM mx3_camera: check for DMA engine type
[media] tm6000: bugfix set tv standards
[media] cafe_ccic: fix subdev configuration
[media] saa7134: Fix autodetect for Behold A7 and H7 TV cards
[media] v4l: kill the BKL
[media] BZ#22292: dibx000_common: Restore i2c algo pointer
| -rw-r--r-- | drivers/media/Kconfig | 1 | ||||
| -rw-r--r-- | drivers/media/dvb/frontends/dibx000_common.c | 1 | ||||
| -rw-r--r-- | drivers/media/video/cafe_ccic.c | 5 | ||||
| -rw-r--r-- | drivers/media/video/cx231xx/cx231xx-417.c | 6 | ||||
| -rw-r--r-- | drivers/media/video/cx23885/cx23885-417.c | 9 | ||||
| -rw-r--r-- | drivers/media/video/cx23885/cx23885-video.c | 5 | ||||
| -rw-r--r-- | drivers/media/video/mx2_camera.c | 13 | ||||
| -rw-r--r-- | drivers/media/video/mx3_camera.c | 4 | ||||
| -rw-r--r-- | drivers/media/video/omap1_camera.c | 16 | ||||
| -rw-r--r-- | drivers/media/video/ov6650.c | 4 | ||||
| -rw-r--r-- | drivers/media/video/saa7134/saa7134-cards.c | 24 | ||||
| -rw-r--r-- | drivers/media/video/se401.c | 7 | ||||
| -rw-r--r-- | drivers/media/video/stk-webcam.c | 4 | ||||
| -rw-r--r-- | drivers/media/video/tlg2300/pd-main.c | 13 | ||||
| -rw-r--r-- | drivers/media/video/usbvideo/vicam.c | 29 | ||||
| -rw-r--r-- | drivers/media/video/v4l2-dev.c | 7 | ||||
| -rw-r--r-- | drivers/media/video/zoran/zoran.h | 1 | ||||
| -rw-r--r-- | drivers/media/video/zoran/zoran_card.c | 1 | ||||
| -rw-r--r-- | drivers/media/video/zoran/zoran_driver.c | 27 | ||||
| -rw-r--r-- | drivers/staging/tm6000/tm6000-video.c | 1 |
20 files changed, 86 insertions, 92 deletions
diff --git a/drivers/media/Kconfig b/drivers/media/Kconfig index bad2cedb8d96..a28541b2b1a2 100644 --- a/drivers/media/Kconfig +++ b/drivers/media/Kconfig | |||
| @@ -19,7 +19,6 @@ comment "Multimedia core support" | |||
| 19 | 19 | ||
| 20 | config VIDEO_DEV | 20 | config VIDEO_DEV |
| 21 | tristate "Video For Linux" | 21 | tristate "Video For Linux" |
| 22 | depends on BKL # used in many drivers for ioctl handling, need to kill | ||
| 23 | ---help--- | 22 | ---help--- |
| 24 | V4L core support for video capture and overlay devices, webcams and | 23 | V4L core support for video capture and overlay devices, webcams and |
| 25 | AM/FM radio cards. | 24 | AM/FM radio cards. |
diff --git a/drivers/media/dvb/frontends/dibx000_common.c b/drivers/media/dvb/frontends/dibx000_common.c index a4991026254d..2311c0a3406c 100644 --- a/drivers/media/dvb/frontends/dibx000_common.c +++ b/drivers/media/dvb/frontends/dibx000_common.c | |||
| @@ -130,6 +130,7 @@ static int i2c_adapter_init(struct i2c_adapter *i2c_adap, | |||
| 130 | struct dibx000_i2c_master *mst) | 130 | struct dibx000_i2c_master *mst) |
| 131 | { | 131 | { |
| 132 | strncpy(i2c_adap->name, name, sizeof(i2c_adap->name)); | 132 | strncpy(i2c_adap->name, name, sizeof(i2c_adap->name)); |
| 133 | i2c_adap->algo = algo; | ||
| 133 | i2c_adap->algo_data = NULL; | 134 | i2c_adap->algo_data = NULL; |
| 134 | i2c_set_adapdata(i2c_adap, mst); | 135 | i2c_set_adapdata(i2c_adap, mst); |
| 135 | if (i2c_add_adapter(i2c_adap) < 0) | 136 | if (i2c_add_adapter(i2c_adap) < 0) |
diff --git a/drivers/media/video/cafe_ccic.c b/drivers/media/video/cafe_ccic.c index 2934770dacc3..7bc36670071a 100644 --- a/drivers/media/video/cafe_ccic.c +++ b/drivers/media/video/cafe_ccic.c | |||
| @@ -2065,8 +2065,9 @@ static int cafe_pci_probe(struct pci_dev *pdev, | |||
| 2065 | sensor_cfg.clock_speed = 45; | 2065 | sensor_cfg.clock_speed = 45; |
| 2066 | 2066 | ||
| 2067 | cam->sensor_addr = 0x42; | 2067 | cam->sensor_addr = 0x42; |
| 2068 | cam->sensor = v4l2_i2c_new_subdev(&cam->v4l2_dev, &cam->i2c_adapter, | 2068 | cam->sensor = v4l2_i2c_new_subdev_cfg(&cam->v4l2_dev, &cam->i2c_adapter, |
| 2069 | NULL, "ov7670", cam->sensor_addr, NULL); | 2069 | "ov7670", "ov7670", 0, &sensor_cfg, cam->sensor_addr, |
| 2070 | NULL); | ||
| 2070 | if (cam->sensor == NULL) { | 2071 | if (cam->sensor == NULL) { |
| 2071 | ret = -ENODEV; | 2072 | ret = -ENODEV; |
| 2072 | goto out_smbus; | 2073 | goto out_smbus; |
diff --git a/drivers/media/video/cx231xx/cx231xx-417.c b/drivers/media/video/cx231xx/cx231xx-417.c index aab21f3ce472..4c7cac3b6254 100644 --- a/drivers/media/video/cx231xx/cx231xx-417.c +++ b/drivers/media/video/cx231xx/cx231xx-417.c | |||
| @@ -31,7 +31,6 @@ | |||
| 31 | #include <linux/delay.h> | 31 | #include <linux/delay.h> |
| 32 | #include <linux/device.h> | 32 | #include <linux/device.h> |
| 33 | #include <linux/firmware.h> | 33 | #include <linux/firmware.h> |
| 34 | #include <linux/smp_lock.h> | ||
| 35 | #include <linux/vmalloc.h> | 34 | #include <linux/vmalloc.h> |
| 36 | #include <media/v4l2-common.h> | 35 | #include <media/v4l2-common.h> |
| 37 | #include <media/v4l2-ioctl.h> | 36 | #include <media/v4l2-ioctl.h> |
| @@ -1927,10 +1926,9 @@ static int mpeg_open(struct file *file) | |||
| 1927 | dev = h; | 1926 | dev = h; |
| 1928 | } | 1927 | } |
| 1929 | 1928 | ||
| 1930 | if (dev == NULL) { | 1929 | if (dev == NULL) |
| 1931 | unlock_kernel(); | ||
| 1932 | return -ENODEV; | 1930 | return -ENODEV; |
| 1933 | } | 1931 | |
| 1934 | mutex_lock(&dev->lock); | 1932 | mutex_lock(&dev->lock); |
| 1935 | 1933 | ||
| 1936 | /* allocate + initialize per filehandle data */ | 1934 | /* allocate + initialize per filehandle data */ |
diff --git a/drivers/media/video/cx23885/cx23885-417.c b/drivers/media/video/cx23885/cx23885-417.c index a6cc12f8736c..9a98dc55f657 100644 --- a/drivers/media/video/cx23885/cx23885-417.c +++ b/drivers/media/video/cx23885/cx23885-417.c | |||
| @@ -31,7 +31,6 @@ | |||
| 31 | #include <linux/delay.h> | 31 | #include <linux/delay.h> |
| 32 | #include <linux/device.h> | 32 | #include <linux/device.h> |
| 33 | #include <linux/firmware.h> | 33 | #include <linux/firmware.h> |
| 34 | #include <linux/smp_lock.h> | ||
| 35 | #include <linux/slab.h> | 34 | #include <linux/slab.h> |
| 36 | #include <media/v4l2-common.h> | 35 | #include <media/v4l2-common.h> |
| 37 | #include <media/v4l2-ioctl.h> | 36 | #include <media/v4l2-ioctl.h> |
| @@ -1576,12 +1575,8 @@ static int mpeg_open(struct file *file) | |||
| 1576 | 1575 | ||
| 1577 | /* allocate + initialize per filehandle data */ | 1576 | /* allocate + initialize per filehandle data */ |
| 1578 | fh = kzalloc(sizeof(*fh), GFP_KERNEL); | 1577 | fh = kzalloc(sizeof(*fh), GFP_KERNEL); |
| 1579 | if (NULL == fh) { | 1578 | if (!fh) |
| 1580 | unlock_kernel(); | ||
| 1581 | return -ENOMEM; | 1579 | return -ENOMEM; |
| 1582 | } | ||
| 1583 | |||
| 1584 | lock_kernel(); | ||
| 1585 | 1580 | ||
| 1586 | file->private_data = fh; | 1581 | file->private_data = fh; |
| 1587 | fh->dev = dev; | 1582 | fh->dev = dev; |
| @@ -1592,8 +1587,6 @@ static int mpeg_open(struct file *file) | |||
| 1592 | V4L2_FIELD_INTERLACED, | 1587 | V4L2_FIELD_INTERLACED, |
| 1593 | sizeof(struct cx23885_buffer), | 1588 | sizeof(struct cx23885_buffer), |
| 1594 | fh, NULL); | 1589 | fh, NULL); |
| 1595 | unlock_kernel(); | ||
| 1596 | |||
| 1597 | return 0; | 1590 | return 0; |
| 1598 | } | 1591 | } |
| 1599 | 1592 | ||
diff --git a/drivers/media/video/cx23885/cx23885-video.c b/drivers/media/video/cx23885/cx23885-video.c index 93af9c65b484..3cc9f462d08d 100644 --- a/drivers/media/video/cx23885/cx23885-video.c +++ b/drivers/media/video/cx23885/cx23885-video.c | |||
| @@ -26,7 +26,6 @@ | |||
| 26 | #include <linux/kmod.h> | 26 | #include <linux/kmod.h> |
| 27 | #include <linux/kernel.h> | 27 | #include <linux/kernel.h> |
| 28 | #include <linux/slab.h> | 28 | #include <linux/slab.h> |
| 29 | #include <linux/smp_lock.h> | ||
| 30 | #include <linux/interrupt.h> | 29 | #include <linux/interrupt.h> |
| 31 | #include <linux/delay.h> | 30 | #include <linux/delay.h> |
| 32 | #include <linux/kthread.h> | 31 | #include <linux/kthread.h> |
| @@ -743,8 +742,6 @@ static int video_open(struct file *file) | |||
| 743 | if (NULL == fh) | 742 | if (NULL == fh) |
| 744 | return -ENOMEM; | 743 | return -ENOMEM; |
| 745 | 744 | ||
| 746 | lock_kernel(); | ||
| 747 | |||
| 748 | file->private_data = fh; | 745 | file->private_data = fh; |
| 749 | fh->dev = dev; | 746 | fh->dev = dev; |
| 750 | fh->radio = radio; | 747 | fh->radio = radio; |
| @@ -762,8 +759,6 @@ static int video_open(struct file *file) | |||
| 762 | 759 | ||
| 763 | dprintk(1, "post videobuf_queue_init()\n"); | 760 | dprintk(1, "post videobuf_queue_init()\n"); |
| 764 | 761 | ||
| 765 | unlock_kernel(); | ||
| 766 | |||
| 767 | return 0; | 762 | return 0; |
| 768 | } | 763 | } |
| 769 | 764 | ||
diff --git a/drivers/media/video/mx2_camera.c b/drivers/media/video/mx2_camera.c index 4a27862da30d..072bd2d1cfad 100644 --- a/drivers/media/video/mx2_camera.c +++ b/drivers/media/video/mx2_camera.c | |||
| @@ -31,6 +31,7 @@ | |||
| 31 | 31 | ||
| 32 | #include <media/v4l2-common.h> | 32 | #include <media/v4l2-common.h> |
| 33 | #include <media/v4l2-dev.h> | 33 | #include <media/v4l2-dev.h> |
| 34 | #include <media/videobuf-core.h> | ||
| 34 | #include <media/videobuf-dma-contig.h> | 35 | #include <media/videobuf-dma-contig.h> |
| 35 | #include <media/soc_camera.h> | 36 | #include <media/soc_camera.h> |
| 36 | #include <media/soc_mediabus.h> | 37 | #include <media/soc_mediabus.h> |
| @@ -903,8 +904,6 @@ static int mx2_camera_set_crop(struct soc_camera_device *icd, | |||
| 903 | static int mx2_camera_set_fmt(struct soc_camera_device *icd, | 904 | static int mx2_camera_set_fmt(struct soc_camera_device *icd, |
| 904 | struct v4l2_format *f) | 905 | struct v4l2_format *f) |
| 905 | { | 906 | { |
| 906 | struct soc_camera_host *ici = to_soc_camera_host(icd->dev.parent); | ||
| 907 | struct mx2_camera_dev *pcdev = ici->priv; | ||
| 908 | struct v4l2_subdev *sd = soc_camera_to_subdev(icd); | 907 | struct v4l2_subdev *sd = soc_camera_to_subdev(icd); |
| 909 | const struct soc_camera_format_xlate *xlate; | 908 | const struct soc_camera_format_xlate *xlate; |
| 910 | struct v4l2_pix_format *pix = &f->fmt.pix; | 909 | struct v4l2_pix_format *pix = &f->fmt.pix; |
| @@ -943,8 +942,6 @@ static int mx2_camera_set_fmt(struct soc_camera_device *icd, | |||
| 943 | static int mx2_camera_try_fmt(struct soc_camera_device *icd, | 942 | static int mx2_camera_try_fmt(struct soc_camera_device *icd, |
| 944 | struct v4l2_format *f) | 943 | struct v4l2_format *f) |
| 945 | { | 944 | { |
| 946 | struct soc_camera_host *ici = to_soc_camera_host(icd->dev.parent); | ||
| 947 | struct mx2_camera_dev *pcdev = ici->priv; | ||
| 948 | struct v4l2_subdev *sd = soc_camera_to_subdev(icd); | 945 | struct v4l2_subdev *sd = soc_camera_to_subdev(icd); |
| 949 | const struct soc_camera_format_xlate *xlate; | 946 | const struct soc_camera_format_xlate *xlate; |
| 950 | struct v4l2_pix_format *pix = &f->fmt.pix; | 947 | struct v4l2_pix_format *pix = &f->fmt.pix; |
| @@ -1024,13 +1021,13 @@ static int mx2_camera_querycap(struct soc_camera_host *ici, | |||
| 1024 | return 0; | 1021 | return 0; |
| 1025 | } | 1022 | } |
| 1026 | 1023 | ||
| 1027 | static int mx2_camera_reqbufs(struct soc_camera_file *icf, | 1024 | static int mx2_camera_reqbufs(struct soc_camera_device *icd, |
| 1028 | struct v4l2_requestbuffers *p) | 1025 | struct v4l2_requestbuffers *p) |
| 1029 | { | 1026 | { |
| 1030 | int i; | 1027 | int i; |
| 1031 | 1028 | ||
| 1032 | for (i = 0; i < p->count; i++) { | 1029 | for (i = 0; i < p->count; i++) { |
| 1033 | struct mx2_buffer *buf = container_of(icf->vb_vidq.bufs[i], | 1030 | struct mx2_buffer *buf = container_of(icd->vb_vidq.bufs[i], |
| 1034 | struct mx2_buffer, vb); | 1031 | struct mx2_buffer, vb); |
| 1035 | INIT_LIST_HEAD(&buf->vb.queue); | 1032 | INIT_LIST_HEAD(&buf->vb.queue); |
| 1036 | } | 1033 | } |
| @@ -1151,9 +1148,9 @@ err_out: | |||
| 1151 | 1148 | ||
| 1152 | static unsigned int mx2_camera_poll(struct file *file, poll_table *pt) | 1149 | static unsigned int mx2_camera_poll(struct file *file, poll_table *pt) |
| 1153 | { | 1150 | { |
| 1154 | struct soc_camera_file *icf = file->private_data; | 1151 | struct soc_camera_device *icd = file->private_data; |
| 1155 | 1152 | ||
| 1156 | return videobuf_poll_stream(file, &icf->vb_vidq, pt); | 1153 | return videobuf_poll_stream(file, &icd->vb_vidq, pt); |
| 1157 | } | 1154 | } |
| 1158 | 1155 | ||
| 1159 | static struct soc_camera_host_ops mx2_soc_camera_host_ops = { | 1156 | static struct soc_camera_host_ops mx2_soc_camera_host_ops = { |
diff --git a/drivers/media/video/mx3_camera.c b/drivers/media/video/mx3_camera.c index 29c5fc348133..aa871c2936b3 100644 --- a/drivers/media/video/mx3_camera.c +++ b/drivers/media/video/mx3_camera.c | |||
| @@ -27,6 +27,7 @@ | |||
| 27 | 27 | ||
| 28 | #include <mach/ipu.h> | 28 | #include <mach/ipu.h> |
| 29 | #include <mach/mx3_camera.h> | 29 | #include <mach/mx3_camera.h> |
| 30 | #include <mach/dma.h> | ||
| 30 | 31 | ||
| 31 | #define MX3_CAM_DRV_NAME "mx3-camera" | 32 | #define MX3_CAM_DRV_NAME "mx3-camera" |
| 32 | 33 | ||
| @@ -638,6 +639,9 @@ static bool chan_filter(struct dma_chan *chan, void *arg) | |||
| 638 | struct dma_chan_request *rq = arg; | 639 | struct dma_chan_request *rq = arg; |
| 639 | struct mx3_camera_pdata *pdata; | 640 | struct mx3_camera_pdata *pdata; |
| 640 | 641 | ||
| 642 | if (!imx_dma_is_ipu(chan)) | ||
| 643 | return false; | ||
| 644 | |||
| 641 | if (!rq) | 645 | if (!rq) |
| 642 | return false; | 646 | return false; |
| 643 | 647 | ||
diff --git a/drivers/media/video/omap1_camera.c b/drivers/media/video/omap1_camera.c index 7c30e62b50db..cbfd07f2d9da 100644 --- a/drivers/media/video/omap1_camera.c +++ b/drivers/media/video/omap1_camera.c | |||
| @@ -235,7 +235,7 @@ static void free_buffer(struct videobuf_queue *vq, struct omap1_cam_buf *buf, | |||
| 235 | 235 | ||
| 236 | BUG_ON(in_interrupt()); | 236 | BUG_ON(in_interrupt()); |
| 237 | 237 | ||
| 238 | videobuf_waiton(vb, 0, 0); | 238 | videobuf_waiton(vq, vb, 0, 0); |
| 239 | 239 | ||
| 240 | if (vb_mode == OMAP1_CAM_DMA_CONTIG) { | 240 | if (vb_mode == OMAP1_CAM_DMA_CONTIG) { |
| 241 | videobuf_dma_contig_free(vq, vb); | 241 | videobuf_dma_contig_free(vq, vb); |
| @@ -504,7 +504,7 @@ static void omap1_videobuf_queue(struct videobuf_queue *vq, | |||
| 504 | * empty. Since the transfer of the DMA programming register set | 504 | * empty. Since the transfer of the DMA programming register set |
| 505 | * content to the DMA working register set is done automatically | 505 | * content to the DMA working register set is done automatically |
| 506 | * by the DMA hardware, this can pretty well happen while we | 506 | * by the DMA hardware, this can pretty well happen while we |
| 507 | * are keeping the lock here. Levae fetching it from the queue | 507 | * are keeping the lock here. Leave fetching it from the queue |
| 508 | * to be done when a next DMA interrupt occures instead. | 508 | * to be done when a next DMA interrupt occures instead. |
| 509 | */ | 509 | */ |
| 510 | return; | 510 | return; |
| @@ -1365,12 +1365,12 @@ static void omap1_cam_init_videobuf(struct videobuf_queue *q, | |||
| 1365 | videobuf_queue_dma_contig_init(q, &omap1_videobuf_ops, | 1365 | videobuf_queue_dma_contig_init(q, &omap1_videobuf_ops, |
| 1366 | icd->dev.parent, &pcdev->lock, | 1366 | icd->dev.parent, &pcdev->lock, |
| 1367 | V4L2_BUF_TYPE_VIDEO_CAPTURE, V4L2_FIELD_NONE, | 1367 | V4L2_BUF_TYPE_VIDEO_CAPTURE, V4L2_FIELD_NONE, |
| 1368 | sizeof(struct omap1_cam_buf), icd); | 1368 | sizeof(struct omap1_cam_buf), icd, NULL); |
| 1369 | else | 1369 | else |
| 1370 | videobuf_queue_sg_init(q, &omap1_videobuf_ops, | 1370 | videobuf_queue_sg_init(q, &omap1_videobuf_ops, |
| 1371 | icd->dev.parent, &pcdev->lock, | 1371 | icd->dev.parent, &pcdev->lock, |
| 1372 | V4L2_BUF_TYPE_VIDEO_CAPTURE, V4L2_FIELD_NONE, | 1372 | V4L2_BUF_TYPE_VIDEO_CAPTURE, V4L2_FIELD_NONE, |
| 1373 | sizeof(struct omap1_cam_buf), icd); | 1373 | sizeof(struct omap1_cam_buf), icd, NULL); |
| 1374 | 1374 | ||
| 1375 | /* use videobuf mode (auto)selected with the module parameter */ | 1375 | /* use videobuf mode (auto)selected with the module parameter */ |
| 1376 | pcdev->vb_mode = sg_mode ? OMAP1_CAM_DMA_SG : OMAP1_CAM_DMA_CONTIG; | 1376 | pcdev->vb_mode = sg_mode ? OMAP1_CAM_DMA_SG : OMAP1_CAM_DMA_CONTIG; |
| @@ -1386,7 +1386,7 @@ static void omap1_cam_init_videobuf(struct videobuf_queue *q, | |||
| 1386 | } | 1386 | } |
| 1387 | } | 1387 | } |
| 1388 | 1388 | ||
| 1389 | static int omap1_cam_reqbufs(struct soc_camera_file *icf, | 1389 | static int omap1_cam_reqbufs(struct soc_camera_device *icd, |
| 1390 | struct v4l2_requestbuffers *p) | 1390 | struct v4l2_requestbuffers *p) |
| 1391 | { | 1391 | { |
| 1392 | int i; | 1392 | int i; |
| @@ -1398,7 +1398,7 @@ static int omap1_cam_reqbufs(struct soc_camera_file *icf, | |||
| 1398 | * it hadn't triggered | 1398 | * it hadn't triggered |
| 1399 | */ | 1399 | */ |
| 1400 | for (i = 0; i < p->count; i++) { | 1400 | for (i = 0; i < p->count; i++) { |
| 1401 | struct omap1_cam_buf *buf = container_of(icf->vb_vidq.bufs[i], | 1401 | struct omap1_cam_buf *buf = container_of(icd->vb_vidq.bufs[i], |
| 1402 | struct omap1_cam_buf, vb); | 1402 | struct omap1_cam_buf, vb); |
| 1403 | buf->inwork = 0; | 1403 | buf->inwork = 0; |
| 1404 | INIT_LIST_HEAD(&buf->vb.queue); | 1404 | INIT_LIST_HEAD(&buf->vb.queue); |
| @@ -1485,10 +1485,10 @@ static int omap1_cam_set_bus_param(struct soc_camera_device *icd, | |||
| 1485 | 1485 | ||
| 1486 | static unsigned int omap1_cam_poll(struct file *file, poll_table *pt) | 1486 | static unsigned int omap1_cam_poll(struct file *file, poll_table *pt) |
| 1487 | { | 1487 | { |
| 1488 | struct soc_camera_file *icf = file->private_data; | 1488 | struct soc_camera_device *icd = file->private_data; |
| 1489 | struct omap1_cam_buf *buf; | 1489 | struct omap1_cam_buf *buf; |
| 1490 | 1490 | ||
| 1491 | buf = list_entry(icf->vb_vidq.stream.next, struct omap1_cam_buf, | 1491 | buf = list_entry(icd->vb_vidq.stream.next, struct omap1_cam_buf, |
| 1492 | vb.stream); | 1492 | vb.stream); |
| 1493 | 1493 | ||
| 1494 | poll_wait(file, &buf->vb.done, pt); | 1494 | poll_wait(file, &buf->vb.done, pt); |
diff --git a/drivers/media/video/ov6650.c b/drivers/media/video/ov6650.c index b7cfeab0948c..31f19373bbae 100644 --- a/drivers/media/video/ov6650.c +++ b/drivers/media/video/ov6650.c | |||
| @@ -754,7 +754,7 @@ static int ov6650_g_fmt(struct v4l2_subdev *sd, | |||
| 754 | 754 | ||
| 755 | static bool is_unscaled_ok(int width, int height, struct v4l2_rect *rect) | 755 | static bool is_unscaled_ok(int width, int height, struct v4l2_rect *rect) |
| 756 | { | 756 | { |
| 757 | return (width > rect->width >> 1 || height > rect->height >> 1); | 757 | return width > rect->width >> 1 || height > rect->height >> 1; |
| 758 | } | 758 | } |
| 759 | 759 | ||
| 760 | static u8 to_clkrc(struct v4l2_fract *timeperframe, | 760 | static u8 to_clkrc(struct v4l2_fract *timeperframe, |
| @@ -840,8 +840,6 @@ static int ov6650_s_fmt(struct v4l2_subdev *sd, struct v4l2_mbus_framefmt *mf) | |||
| 840 | coma_mask |= COMA_BW | COMA_BYTE_SWAP | COMA_WORD_SWAP; | 840 | coma_mask |= COMA_BW | COMA_BYTE_SWAP | COMA_WORD_SWAP; |
| 841 | coma_set |= COMA_RAW_RGB | COMA_RGB; | 841 | coma_set |= COMA_RAW_RGB | COMA_RGB; |
| 842 | break; | 842 | break; |
| 843 | case 0: | ||
| 844 | break; | ||
| 845 | default: | 843 | default: |
| 846 | dev_err(&client->dev, "Pixel format not handled: 0x%x\n", code); | 844 | dev_err(&client->dev, "Pixel format not handled: 0x%x\n", code); |
| 847 | return -EINVAL; | 845 | return -EINVAL; |
diff --git a/drivers/media/video/saa7134/saa7134-cards.c b/drivers/media/video/saa7134/saa7134-cards.c index 10a6cbf6a790..0911cb580e18 100644 --- a/drivers/media/video/saa7134/saa7134-cards.c +++ b/drivers/media/video/saa7134/saa7134-cards.c | |||
| @@ -6661,6 +6661,18 @@ struct pci_device_id saa7134_pci_tbl[] = { | |||
| 6661 | .subdevice = 0x2804, | 6661 | .subdevice = 0x2804, |
| 6662 | .driver_data = SAA7134_BOARD_TECHNOTREND_BUDGET_T3000, | 6662 | .driver_data = SAA7134_BOARD_TECHNOTREND_BUDGET_T3000, |
| 6663 | }, { | 6663 | }, { |
| 6664 | .vendor = PCI_VENDOR_ID_PHILIPS, | ||
| 6665 | .device = PCI_DEVICE_ID_PHILIPS_SAA7133, | ||
| 6666 | .subvendor = 0x5ace, /* Beholder Intl. Ltd. */ | ||
| 6667 | .subdevice = 0x7190, | ||
| 6668 | .driver_data = SAA7134_BOARD_BEHOLD_H7, | ||
| 6669 | }, { | ||
| 6670 | .vendor = PCI_VENDOR_ID_PHILIPS, | ||
| 6671 | .device = PCI_DEVICE_ID_PHILIPS_SAA7133, | ||
| 6672 | .subvendor = 0x5ace, /* Beholder Intl. Ltd. */ | ||
| 6673 | .subdevice = 0x7090, | ||
| 6674 | .driver_data = SAA7134_BOARD_BEHOLD_A7, | ||
| 6675 | }, { | ||
| 6664 | /* --- boards without eeprom + subsystem ID --- */ | 6676 | /* --- boards without eeprom + subsystem ID --- */ |
| 6665 | .vendor = PCI_VENDOR_ID_PHILIPS, | 6677 | .vendor = PCI_VENDOR_ID_PHILIPS, |
| 6666 | .device = PCI_DEVICE_ID_PHILIPS_SAA7134, | 6678 | .device = PCI_DEVICE_ID_PHILIPS_SAA7134, |
| @@ -6698,18 +6710,6 @@ struct pci_device_id saa7134_pci_tbl[] = { | |||
| 6698 | .subvendor = PCI_ANY_ID, | 6710 | .subvendor = PCI_ANY_ID, |
| 6699 | .subdevice = PCI_ANY_ID, | 6711 | .subdevice = PCI_ANY_ID, |
| 6700 | .driver_data = SAA7134_BOARD_UNKNOWN, | 6712 | .driver_data = SAA7134_BOARD_UNKNOWN, |
| 6701 | }, { | ||
| 6702 | .vendor = PCI_VENDOR_ID_PHILIPS, | ||
| 6703 | .device = PCI_DEVICE_ID_PHILIPS_SAA7133, | ||
| 6704 | .subvendor = 0x5ace, /* Beholder Intl. Ltd. */ | ||
| 6705 | .subdevice = 0x7190, | ||
| 6706 | .driver_data = SAA7134_BOARD_BEHOLD_H7, | ||
| 6707 | }, { | ||
| 6708 | .vendor = PCI_VENDOR_ID_PHILIPS, | ||
| 6709 | .device = PCI_DEVICE_ID_PHILIPS_SAA7133, | ||
| 6710 | .subvendor = 0x5ace, /* Beholder Intl. Ltd. */ | ||
| 6711 | .subdevice = 0x7090, | ||
| 6712 | .driver_data = SAA7134_BOARD_BEHOLD_A7, | ||
| 6713 | },{ | 6713 | },{ |
| 6714 | /* --- end of list --- */ | 6714 | /* --- end of list --- */ |
| 6715 | } | 6715 | } |
diff --git a/drivers/media/video/se401.c b/drivers/media/video/se401.c index 41d0166c0f95..41360d7c3e96 100644 --- a/drivers/media/video/se401.c +++ b/drivers/media/video/se401.c | |||
| @@ -31,7 +31,6 @@ static const char version[] = "0.24"; | |||
| 31 | #include <linux/init.h> | 31 | #include <linux/init.h> |
| 32 | #include <linux/vmalloc.h> | 32 | #include <linux/vmalloc.h> |
| 33 | #include <linux/slab.h> | 33 | #include <linux/slab.h> |
| 34 | #include <linux/smp_lock.h> | ||
| 35 | #include <linux/pagemap.h> | 34 | #include <linux/pagemap.h> |
| 36 | #include <linux/usb.h> | 35 | #include <linux/usb.h> |
| 37 | #include "se401.h" | 36 | #include "se401.h" |
| @@ -951,9 +950,9 @@ static int se401_open(struct file *file) | |||
| 951 | struct usb_se401 *se401 = (struct usb_se401 *)dev; | 950 | struct usb_se401 *se401 = (struct usb_se401 *)dev; |
| 952 | int err = 0; | 951 | int err = 0; |
| 953 | 952 | ||
| 954 | lock_kernel(); | 953 | mutex_lock(&se401->lock); |
| 955 | if (se401->user) { | 954 | if (se401->user) { |
| 956 | unlock_kernel(); | 955 | mutex_unlock(&se401->lock); |
| 957 | return -EBUSY; | 956 | return -EBUSY; |
| 958 | } | 957 | } |
| 959 | se401->fbuf = rvmalloc(se401->maxframesize * SE401_NUMFRAMES); | 958 | se401->fbuf = rvmalloc(se401->maxframesize * SE401_NUMFRAMES); |
| @@ -962,7 +961,7 @@ static int se401_open(struct file *file) | |||
| 962 | else | 961 | else |
| 963 | err = -ENOMEM; | 962 | err = -ENOMEM; |
| 964 | se401->user = !err; | 963 | se401->user = !err; |
| 965 | unlock_kernel(); | 964 | mutex_unlock(&se401->lock); |
| 966 | 965 | ||
| 967 | return err; | 966 | return err; |
| 968 | } | 967 | } |
diff --git a/drivers/media/video/stk-webcam.c b/drivers/media/video/stk-webcam.c index f07a0f6b71c4..b5afe5f841ce 100644 --- a/drivers/media/video/stk-webcam.c +++ b/drivers/media/video/stk-webcam.c | |||
| @@ -27,7 +27,6 @@ | |||
| 27 | #include <linux/kernel.h> | 27 | #include <linux/kernel.h> |
| 28 | #include <linux/errno.h> | 28 | #include <linux/errno.h> |
| 29 | #include <linux/slab.h> | 29 | #include <linux/slab.h> |
| 30 | #include <linux/smp_lock.h> | ||
| 31 | 30 | ||
| 32 | #include <linux/usb.h> | 31 | #include <linux/usb.h> |
| 33 | #include <linux/mm.h> | 32 | #include <linux/mm.h> |
| @@ -673,14 +672,11 @@ static int v4l_stk_open(struct file *fp) | |||
| 673 | vdev = video_devdata(fp); | 672 | vdev = video_devdata(fp); |
| 674 | dev = vdev_to_camera(vdev); | 673 | dev = vdev_to_camera(vdev); |
| 675 | 674 | ||
| 676 | lock_kernel(); | ||
| 677 | if (dev == NULL || !is_present(dev)) { | 675 | if (dev == NULL || !is_present(dev)) { |
| 678 | unlock_kernel(); | ||
| 679 | return -ENXIO; | 676 | return -ENXIO; |
| 680 | } | 677 | } |
| 681 | fp->private_data = dev; | 678 | fp->private_data = dev; |
| 682 | usb_autopm_get_interface(dev->interface); | 679 | usb_autopm_get_interface(dev->interface); |
| 683 | unlock_kernel(); | ||
| 684 | 680 | ||
| 685 | return 0; | 681 | return 0; |
| 686 | } | 682 | } |
diff --git a/drivers/media/video/tlg2300/pd-main.c b/drivers/media/video/tlg2300/pd-main.c index 4555f4a5f4c8..c91424c0c135 100644 --- a/drivers/media/video/tlg2300/pd-main.c +++ b/drivers/media/video/tlg2300/pd-main.c | |||
| @@ -36,7 +36,6 @@ | |||
| 36 | #include <linux/string.h> | 36 | #include <linux/string.h> |
| 37 | #include <linux/types.h> | 37 | #include <linux/types.h> |
| 38 | #include <linux/firmware.h> | 38 | #include <linux/firmware.h> |
| 39 | #include <linux/smp_lock.h> | ||
| 40 | 39 | ||
| 41 | #include "vendorcmds.h" | 40 | #include "vendorcmds.h" |
| 42 | #include "pd-common.h" | 41 | #include "pd-common.h" |
| @@ -485,15 +484,11 @@ static void poseidon_disconnect(struct usb_interface *interface) | |||
| 485 | /*unregister v4l2 device */ | 484 | /*unregister v4l2 device */ |
| 486 | v4l2_device_unregister(&pd->v4l2_dev); | 485 | v4l2_device_unregister(&pd->v4l2_dev); |
| 487 | 486 | ||
| 488 | lock_kernel(); | 487 | pd_dvb_usb_device_exit(pd); |
| 489 | { | 488 | poseidon_fm_exit(pd); |
| 490 | pd_dvb_usb_device_exit(pd); | ||
| 491 | poseidon_fm_exit(pd); | ||
| 492 | 489 | ||
| 493 | poseidon_audio_free(pd); | 490 | poseidon_audio_free(pd); |
| 494 | pd_video_exit(pd); | 491 | pd_video_exit(pd); |
| 495 | } | ||
| 496 | unlock_kernel(); | ||
| 497 | 492 | ||
| 498 | usb_set_intfdata(interface, NULL); | 493 | usb_set_intfdata(interface, NULL); |
| 499 | kref_put(&pd->kref, poseidon_delete); | 494 | kref_put(&pd->kref, poseidon_delete); |
diff --git a/drivers/media/video/usbvideo/vicam.c b/drivers/media/video/usbvideo/vicam.c index 5d6fd01f918a..dc17cce2fbb6 100644 --- a/drivers/media/video/usbvideo/vicam.c +++ b/drivers/media/video/usbvideo/vicam.c | |||
| @@ -43,7 +43,6 @@ | |||
| 43 | #include <linux/vmalloc.h> | 43 | #include <linux/vmalloc.h> |
| 44 | #include <linux/mm.h> | 44 | #include <linux/mm.h> |
| 45 | #include <linux/slab.h> | 45 | #include <linux/slab.h> |
| 46 | #include <linux/smp_lock.h> | ||
| 47 | #include <linux/mutex.h> | 46 | #include <linux/mutex.h> |
| 48 | #include <linux/firmware.h> | 47 | #include <linux/firmware.h> |
| 49 | #include <linux/ihex.h> | 48 | #include <linux/ihex.h> |
| @@ -483,29 +482,28 @@ vicam_open(struct file *file) | |||
| 483 | return -EINVAL; | 482 | return -EINVAL; |
| 484 | } | 483 | } |
| 485 | 484 | ||
| 486 | /* the videodev_lock held above us protects us from | 485 | /* cam_lock/open_count protects us from simultaneous opens |
| 487 | * simultaneous opens...for now. we probably shouldn't | 486 | * ... for now. we probably shouldn't rely on this fact forever. |
| 488 | * rely on this fact forever. | ||
| 489 | */ | 487 | */ |
| 490 | 488 | ||
| 491 | lock_kernel(); | 489 | mutex_lock(&cam->cam_lock); |
| 492 | if (cam->open_count > 0) { | 490 | if (cam->open_count > 0) { |
| 493 | printk(KERN_INFO | 491 | printk(KERN_INFO |
| 494 | "vicam_open called on already opened camera"); | 492 | "vicam_open called on already opened camera"); |
| 495 | unlock_kernel(); | 493 | mutex_unlock(&cam->cam_lock); |
| 496 | return -EBUSY; | 494 | return -EBUSY; |
| 497 | } | 495 | } |
| 498 | 496 | ||
| 499 | cam->raw_image = kmalloc(VICAM_MAX_READ_SIZE, GFP_KERNEL); | 497 | cam->raw_image = kmalloc(VICAM_MAX_READ_SIZE, GFP_KERNEL); |
| 500 | if (!cam->raw_image) { | 498 | if (!cam->raw_image) { |
| 501 | unlock_kernel(); | 499 | mutex_unlock(&cam->cam_lock); |
| 502 | return -ENOMEM; | 500 | return -ENOMEM; |
| 503 | } | 501 | } |
| 504 | 502 | ||
| 505 | cam->framebuf = rvmalloc(VICAM_MAX_FRAME_SIZE * VICAM_FRAMES); | 503 | cam->framebuf = rvmalloc(VICAM_MAX_FRAME_SIZE * VICAM_FRAMES); |
| 506 | if (!cam->framebuf) { | 504 | if (!cam->framebuf) { |
| 507 | kfree(cam->raw_image); | 505 | kfree(cam->raw_image); |
| 508 | unlock_kernel(); | 506 | mutex_unlock(&cam->cam_lock); |
| 509 | return -ENOMEM; | 507 | return -ENOMEM; |
| 510 | } | 508 | } |
| 511 | 509 | ||
| @@ -513,10 +511,17 @@ vicam_open(struct file *file) | |||
| 513 | if (!cam->cntrlbuf) { | 511 | if (!cam->cntrlbuf) { |
| 514 | kfree(cam->raw_image); | 512 | kfree(cam->raw_image); |
| 515 | rvfree(cam->framebuf, VICAM_MAX_FRAME_SIZE * VICAM_FRAMES); | 513 | rvfree(cam->framebuf, VICAM_MAX_FRAME_SIZE * VICAM_FRAMES); |
| 516 | unlock_kernel(); | 514 | mutex_unlock(&cam->cam_lock); |
| 517 | return -ENOMEM; | 515 | return -ENOMEM; |
| 518 | } | 516 | } |
| 519 | 517 | ||
| 518 | cam->needsDummyRead = 1; | ||
| 519 | cam->open_count++; | ||
| 520 | |||
| 521 | file->private_data = cam; | ||
| 522 | mutex_unlock(&cam->cam_lock); | ||
| 523 | |||
| 524 | |||
| 520 | // First upload firmware, then turn the camera on | 525 | // First upload firmware, then turn the camera on |
| 521 | 526 | ||
| 522 | if (!cam->is_initialized) { | 527 | if (!cam->is_initialized) { |
| @@ -527,12 +532,6 @@ vicam_open(struct file *file) | |||
| 527 | 532 | ||
| 528 | set_camera_power(cam, 1); | 533 | set_camera_power(cam, 1); |
| 529 | 534 | ||
| 530 | cam->needsDummyRead = 1; | ||
| 531 | cam->open_count++; | ||
| 532 | |||
| 533 | file->private_data = cam; | ||
| 534 | unlock_kernel(); | ||
| 535 | |||
| 536 | return 0; | 535 | return 0; |
| 537 | } | 536 | } |
| 538 | 537 | ||
diff --git a/drivers/media/video/v4l2-dev.c b/drivers/media/video/v4l2-dev.c index 0ca7978654b5..03f7f4670e9b 100644 --- a/drivers/media/video/v4l2-dev.c +++ b/drivers/media/video/v4l2-dev.c | |||
| @@ -25,7 +25,6 @@ | |||
| 25 | #include <linux/init.h> | 25 | #include <linux/init.h> |
| 26 | #include <linux/kmod.h> | 26 | #include <linux/kmod.h> |
| 27 | #include <linux/slab.h> | 27 | #include <linux/slab.h> |
| 28 | #include <linux/smp_lock.h> | ||
| 29 | #include <asm/uaccess.h> | 28 | #include <asm/uaccess.h> |
| 30 | #include <asm/system.h> | 29 | #include <asm/system.h> |
| 31 | 30 | ||
| @@ -247,10 +246,12 @@ static long v4l2_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) | |||
| 247 | mutex_unlock(vdev->lock); | 246 | mutex_unlock(vdev->lock); |
| 248 | } else if (vdev->fops->ioctl) { | 247 | } else if (vdev->fops->ioctl) { |
| 249 | /* TODO: convert all drivers to unlocked_ioctl */ | 248 | /* TODO: convert all drivers to unlocked_ioctl */ |
| 250 | lock_kernel(); | 249 | static DEFINE_MUTEX(v4l2_ioctl_mutex); |
| 250 | |||
| 251 | mutex_lock(&v4l2_ioctl_mutex); | ||
| 251 | if (video_is_registered(vdev)) | 252 | if (video_is_registered(vdev)) |
| 252 | ret = vdev->fops->ioctl(filp, cmd, arg); | 253 | ret = vdev->fops->ioctl(filp, cmd, arg); |
| 253 | unlock_kernel(); | 254 | mutex_unlock(&v4l2_ioctl_mutex); |
| 254 | } else | 255 | } else |
| 255 | ret = -ENOTTY; | 256 | ret = -ENOTTY; |
| 256 | 257 | ||
diff --git a/drivers/media/video/zoran/zoran.h b/drivers/media/video/zoran/zoran.h index 37fe16181e3c..27f05551183f 100644 --- a/drivers/media/video/zoran/zoran.h +++ b/drivers/media/video/zoran/zoran.h | |||
| @@ -388,6 +388,7 @@ struct zoran { | |||
| 388 | struct videocodec *vfe; /* video front end */ | 388 | struct videocodec *vfe; /* video front end */ |
| 389 | 389 | ||
| 390 | struct mutex resource_lock; /* prevent evil stuff */ | 390 | struct mutex resource_lock; /* prevent evil stuff */ |
| 391 | struct mutex other_lock; /* please merge with above */ | ||
| 391 | 392 | ||
| 392 | u8 initialized; /* flag if zoran has been correctly initialized */ | 393 | u8 initialized; /* flag if zoran has been correctly initialized */ |
| 393 | int user; /* number of current users */ | 394 | int user; /* number of current users */ |
diff --git a/drivers/media/video/zoran/zoran_card.c b/drivers/media/video/zoran/zoran_card.c index 0aac376c3f7a..7e6d62467eaa 100644 --- a/drivers/media/video/zoran/zoran_card.c +++ b/drivers/media/video/zoran/zoran_card.c | |||
| @@ -1227,6 +1227,7 @@ static int __devinit zoran_probe(struct pci_dev *pdev, | |||
| 1227 | snprintf(ZR_DEVNAME(zr), sizeof(ZR_DEVNAME(zr)), "MJPEG[%u]", zr->id); | 1227 | snprintf(ZR_DEVNAME(zr), sizeof(ZR_DEVNAME(zr)), "MJPEG[%u]", zr->id); |
| 1228 | spin_lock_init(&zr->spinlock); | 1228 | spin_lock_init(&zr->spinlock); |
| 1229 | mutex_init(&zr->resource_lock); | 1229 | mutex_init(&zr->resource_lock); |
| 1230 | mutex_init(&zr->other_lock); | ||
| 1230 | if (pci_enable_device(pdev)) | 1231 | if (pci_enable_device(pdev)) |
| 1231 | goto zr_unreg; | 1232 | goto zr_unreg; |
| 1232 | pci_read_config_byte(zr->pci_dev, PCI_CLASS_REVISION, &zr->revision); | 1233 | pci_read_config_byte(zr->pci_dev, PCI_CLASS_REVISION, &zr->revision); |
diff --git a/drivers/media/video/zoran/zoran_driver.c b/drivers/media/video/zoran/zoran_driver.c index 401082b853f0..67a52e844ae6 100644 --- a/drivers/media/video/zoran/zoran_driver.c +++ b/drivers/media/video/zoran/zoran_driver.c | |||
| @@ -49,7 +49,6 @@ | |||
| 49 | #include <linux/module.h> | 49 | #include <linux/module.h> |
| 50 | #include <linux/delay.h> | 50 | #include <linux/delay.h> |
| 51 | #include <linux/slab.h> | 51 | #include <linux/slab.h> |
| 52 | #include <linux/smp_lock.h> | ||
| 53 | #include <linux/pci.h> | 52 | #include <linux/pci.h> |
| 54 | #include <linux/vmalloc.h> | 53 | #include <linux/vmalloc.h> |
| 55 | #include <linux/wait.h> | 54 | #include <linux/wait.h> |
| @@ -913,7 +912,7 @@ static int zoran_open(struct file *file) | |||
| 913 | dprintk(2, KERN_INFO "%s: %s(%s, pid=[%d]), users(-)=%d\n", | 912 | dprintk(2, KERN_INFO "%s: %s(%s, pid=[%d]), users(-)=%d\n", |
| 914 | ZR_DEVNAME(zr), __func__, current->comm, task_pid_nr(current), zr->user + 1); | 913 | ZR_DEVNAME(zr), __func__, current->comm, task_pid_nr(current), zr->user + 1); |
| 915 | 914 | ||
| 916 | lock_kernel(); | 915 | mutex_lock(&zr->other_lock); |
| 917 | 916 | ||
| 918 | if (zr->user >= 2048) { | 917 | if (zr->user >= 2048) { |
| 919 | dprintk(1, KERN_ERR "%s: too many users (%d) on device\n", | 918 | dprintk(1, KERN_ERR "%s: too many users (%d) on device\n", |
| @@ -963,14 +962,14 @@ static int zoran_open(struct file *file) | |||
| 963 | file->private_data = fh; | 962 | file->private_data = fh; |
| 964 | fh->zr = zr; | 963 | fh->zr = zr; |
| 965 | zoran_open_init_session(fh); | 964 | zoran_open_init_session(fh); |
| 966 | unlock_kernel(); | 965 | mutex_unlock(&zr->other_lock); |
| 967 | 966 | ||
| 968 | return 0; | 967 | return 0; |
| 969 | 968 | ||
| 970 | fail_fh: | 969 | fail_fh: |
| 971 | kfree(fh); | 970 | kfree(fh); |
| 972 | fail_unlock: | 971 | fail_unlock: |
| 973 | unlock_kernel(); | 972 | mutex_unlock(&zr->other_lock); |
| 974 | 973 | ||
| 975 | dprintk(2, KERN_INFO "%s: open failed (%d), users(-)=%d\n", | 974 | dprintk(2, KERN_INFO "%s: open failed (%d), users(-)=%d\n", |
| 976 | ZR_DEVNAME(zr), res, zr->user); | 975 | ZR_DEVNAME(zr), res, zr->user); |
| @@ -989,7 +988,7 @@ zoran_close(struct file *file) | |||
| 989 | 988 | ||
| 990 | /* kernel locks (fs/device.c), so don't do that ourselves | 989 | /* kernel locks (fs/device.c), so don't do that ourselves |
| 991 | * (prevents deadlocks) */ | 990 | * (prevents deadlocks) */ |
| 992 | /*mutex_lock(&zr->resource_lock);*/ | 991 | mutex_lock(&zr->other_lock); |
| 993 | 992 | ||
| 994 | zoran_close_end_session(fh); | 993 | zoran_close_end_session(fh); |
| 995 | 994 | ||
| @@ -1023,6 +1022,7 @@ zoran_close(struct file *file) | |||
| 1023 | encoder_call(zr, video, s_routing, 2, 0, 0); | 1022 | encoder_call(zr, video, s_routing, 2, 0, 0); |
| 1024 | } | 1023 | } |
| 1025 | } | 1024 | } |
| 1025 | mutex_unlock(&zr->other_lock); | ||
| 1026 | 1026 | ||
| 1027 | file->private_data = NULL; | 1027 | file->private_data = NULL; |
| 1028 | kfree(fh->overlay_mask); | 1028 | kfree(fh->overlay_mask); |
| @@ -3370,11 +3370,26 @@ static const struct v4l2_ioctl_ops zoran_ioctl_ops = { | |||
| 3370 | #endif | 3370 | #endif |
| 3371 | }; | 3371 | }; |
| 3372 | 3372 | ||
| 3373 | /* please use zr->resource_lock consistently and kill this wrapper */ | ||
| 3374 | static long zoran_ioctl(struct file *file, unsigned int cmd, | ||
| 3375 | unsigned long arg) | ||
| 3376 | { | ||
| 3377 | struct zoran_fh *fh = file->private_data; | ||
| 3378 | struct zoran *zr = fh->zr; | ||
| 3379 | int ret; | ||
| 3380 | |||
| 3381 | mutex_lock(&zr->other_lock); | ||
| 3382 | ret = video_ioctl2(file, cmd, arg); | ||
| 3383 | mutex_unlock(&zr->other_lock); | ||
| 3384 | |||
| 3385 | return ret; | ||
| 3386 | } | ||
| 3387 | |||
| 3373 | static const struct v4l2_file_operations zoran_fops = { | 3388 | static const struct v4l2_file_operations zoran_fops = { |
| 3374 | .owner = THIS_MODULE, | 3389 | .owner = THIS_MODULE, |
| 3375 | .open = zoran_open, | 3390 | .open = zoran_open, |
| 3376 | .release = zoran_close, | 3391 | .release = zoran_close, |
| 3377 | .ioctl = video_ioctl2, | 3392 | .unlocked_ioctl = zoran_ioctl, |
| 3378 | .read = zoran_read, | 3393 | .read = zoran_read, |
| 3379 | .write = zoran_write, | 3394 | .write = zoran_write, |
| 3380 | .mmap = zoran_mmap, | 3395 | .mmap = zoran_mmap, |
diff --git a/drivers/staging/tm6000/tm6000-video.c b/drivers/staging/tm6000/tm6000-video.c index 9ec82796634e..c5690b2a8924 100644 --- a/drivers/staging/tm6000/tm6000-video.c +++ b/drivers/staging/tm6000/tm6000-video.c | |||
| @@ -1032,6 +1032,7 @@ static int vidioc_s_std (struct file *file, void *priv, v4l2_std_id *norm) | |||
| 1032 | struct tm6000_fh *fh=priv; | 1032 | struct tm6000_fh *fh=priv; |
| 1033 | struct tm6000_core *dev = fh->dev; | 1033 | struct tm6000_core *dev = fh->dev; |
| 1034 | 1034 | ||
| 1035 | dev->norm = *norm; | ||
| 1035 | rc = tm6000_init_analog_mode(dev); | 1036 | rc = tm6000_init_analog_mode(dev); |
| 1036 | 1037 | ||
| 1037 | fh->width = dev->width; | 1038 | fh->width = dev->width; |
