diff options
Diffstat (limited to 'drivers/media')
38 files changed, 85 insertions, 114 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/common/saa7146_i2c.c b/drivers/media/common/saa7146_i2c.c index 3d88542612ea..74ee172b5bc9 100644 --- a/drivers/media/common/saa7146_i2c.c +++ b/drivers/media/common/saa7146_i2c.c | |||
@@ -391,7 +391,6 @@ static int saa7146_i2c_xfer(struct i2c_adapter* adapter, struct i2c_msg *msg, in | |||
391 | 391 | ||
392 | /*****************************************************************************/ | 392 | /*****************************************************************************/ |
393 | /* i2c-adapter helper functions */ | 393 | /* i2c-adapter helper functions */ |
394 | #include <linux/i2c-id.h> | ||
395 | 394 | ||
396 | /* exported algorithm data */ | 395 | /* exported algorithm data */ |
397 | static struct i2c_algorithm saa7146_algo = { | 396 | static struct i2c_algorithm saa7146_algo = { |
diff --git a/drivers/media/dvb/dvb-core/dvb_ca_en50221.c b/drivers/media/dvb/dvb-core/dvb_ca_en50221.c index 4d0646da6087..7ea517b7e186 100644 --- a/drivers/media/dvb/dvb-core/dvb_ca_en50221.c +++ b/drivers/media/dvb/dvb-core/dvb_ca_en50221.c | |||
@@ -36,7 +36,6 @@ | |||
36 | #include <linux/delay.h> | 36 | #include <linux/delay.h> |
37 | #include <linux/spinlock.h> | 37 | #include <linux/spinlock.h> |
38 | #include <linux/sched.h> | 38 | #include <linux/sched.h> |
39 | #include <linux/smp_lock.h> | ||
40 | #include <linux/kthread.h> | 39 | #include <linux/kthread.h> |
41 | 40 | ||
42 | #include "dvb_ca_en50221.h" | 41 | #include "dvb_ca_en50221.h" |
diff --git a/drivers/media/dvb/dvb-core/dvb_frontend.c b/drivers/media/dvb/dvb-core/dvb_frontend.c index 1589d5a5cb46..cad6634610ea 100644 --- a/drivers/media/dvb/dvb-core/dvb_frontend.c +++ b/drivers/media/dvb/dvb-core/dvb_frontend.c | |||
@@ -36,7 +36,6 @@ | |||
36 | #include <linux/list.h> | 36 | #include <linux/list.h> |
37 | #include <linux/freezer.h> | 37 | #include <linux/freezer.h> |
38 | #include <linux/jiffies.h> | 38 | #include <linux/jiffies.h> |
39 | #include <linux/smp_lock.h> | ||
40 | #include <linux/kthread.h> | 39 | #include <linux/kthread.h> |
41 | #include <asm/processor.h> | 40 | #include <asm/processor.h> |
42 | 41 | ||
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/dvb/ngene/ngene-core.c b/drivers/media/dvb/ngene/ngene-core.c index 4caeb163a666..3a7ef71087be 100644 --- a/drivers/media/dvb/ngene/ngene-core.c +++ b/drivers/media/dvb/ngene/ngene-core.c | |||
@@ -34,7 +34,6 @@ | |||
34 | #include <linux/io.h> | 34 | #include <linux/io.h> |
35 | #include <asm/div64.h> | 35 | #include <asm/div64.h> |
36 | #include <linux/pci.h> | 36 | #include <linux/pci.h> |
37 | #include <linux/smp_lock.h> | ||
38 | #include <linux/timer.h> | 37 | #include <linux/timer.h> |
39 | #include <linux/byteorder/generic.h> | 38 | #include <linux/byteorder/generic.h> |
40 | #include <linux/firmware.h> | 39 | #include <linux/firmware.h> |
diff --git a/drivers/media/dvb/ngene/ngene-dvb.c b/drivers/media/dvb/ngene/ngene-dvb.c index 48f980b21d66..3832e5983c19 100644 --- a/drivers/media/dvb/ngene/ngene-dvb.c +++ b/drivers/media/dvb/ngene/ngene-dvb.c | |||
@@ -35,7 +35,6 @@ | |||
35 | #include <linux/io.h> | 35 | #include <linux/io.h> |
36 | #include <asm/div64.h> | 36 | #include <asm/div64.h> |
37 | #include <linux/pci.h> | 37 | #include <linux/pci.h> |
38 | #include <linux/smp_lock.h> | ||
39 | #include <linux/timer.h> | 38 | #include <linux/timer.h> |
40 | #include <linux/byteorder/generic.h> | 39 | #include <linux/byteorder/generic.h> |
41 | #include <linux/firmware.h> | 40 | #include <linux/firmware.h> |
diff --git a/drivers/media/dvb/ngene/ngene-i2c.c b/drivers/media/dvb/ngene/ngene-i2c.c index c3ae956714e7..d28554f8ce99 100644 --- a/drivers/media/dvb/ngene/ngene-i2c.c +++ b/drivers/media/dvb/ngene/ngene-i2c.c | |||
@@ -37,7 +37,6 @@ | |||
37 | #include <asm/div64.h> | 37 | #include <asm/div64.h> |
38 | #include <linux/pci.h> | 38 | #include <linux/pci.h> |
39 | #include <linux/pci_ids.h> | 39 | #include <linux/pci_ids.h> |
40 | #include <linux/smp_lock.h> | ||
41 | #include <linux/timer.h> | 40 | #include <linux/timer.h> |
42 | #include <linux/byteorder/generic.h> | 41 | #include <linux/byteorder/generic.h> |
43 | #include <linux/firmware.h> | 42 | #include <linux/firmware.h> |
diff --git a/drivers/media/radio/radio-mr800.c b/drivers/media/radio/radio-mr800.c index b540e8072e92..e6b2d085a449 100644 --- a/drivers/media/radio/radio-mr800.c +++ b/drivers/media/radio/radio-mr800.c | |||
@@ -58,7 +58,6 @@ | |||
58 | #include <linux/module.h> | 58 | #include <linux/module.h> |
59 | #include <linux/init.h> | 59 | #include <linux/init.h> |
60 | #include <linux/slab.h> | 60 | #include <linux/slab.h> |
61 | #include <linux/smp_lock.h> | ||
62 | #include <linux/input.h> | 61 | #include <linux/input.h> |
63 | #include <linux/videodev2.h> | 62 | #include <linux/videodev2.h> |
64 | #include <media/v4l2-device.h> | 63 | #include <media/v4l2-device.h> |
diff --git a/drivers/media/radio/si470x/radio-si470x.h b/drivers/media/radio/si470x/radio-si470x.h index ea12782359a0..b9914d7a0c9f 100644 --- a/drivers/media/radio/si470x/radio-si470x.h +++ b/drivers/media/radio/si470x/radio-si470x.h | |||
@@ -31,7 +31,6 @@ | |||
31 | #include <linux/init.h> | 31 | #include <linux/init.h> |
32 | #include <linux/sched.h> | 32 | #include <linux/sched.h> |
33 | #include <linux/slab.h> | 33 | #include <linux/slab.h> |
34 | #include <linux/smp_lock.h> | ||
35 | #include <linux/input.h> | 34 | #include <linux/input.h> |
36 | #include <linux/version.h> | 35 | #include <linux/version.h> |
37 | #include <linux/videodev2.h> | 36 | #include <linux/videodev2.h> |
diff --git a/drivers/media/video/bt8xx/bttv-driver.c b/drivers/media/video/bt8xx/bttv-driver.c index 3da6e80e1041..a529619e51f6 100644 --- a/drivers/media/video/bt8xx/bttv-driver.c +++ b/drivers/media/video/bt8xx/bttv-driver.c | |||
@@ -42,7 +42,6 @@ | |||
42 | #include <linux/fs.h> | 42 | #include <linux/fs.h> |
43 | #include <linux/kernel.h> | 43 | #include <linux/kernel.h> |
44 | #include <linux/sched.h> | 44 | #include <linux/sched.h> |
45 | #include <linux/smp_lock.h> | ||
46 | #include <linux/interrupt.h> | 45 | #include <linux/interrupt.h> |
47 | #include <linux/kdev_t.h> | 46 | #include <linux/kdev_t.h> |
48 | #include "bttvp.h" | 47 | #include "bttvp.h" |
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/cx88/cx88-blackbird.c b/drivers/media/video/cx88/cx88-blackbird.c index 417d1d5c73c4..d7c94848249e 100644 --- a/drivers/media/video/cx88/cx88-blackbird.c +++ b/drivers/media/video/cx88/cx88-blackbird.c | |||
@@ -33,7 +33,6 @@ | |||
33 | #include <linux/delay.h> | 33 | #include <linux/delay.h> |
34 | #include <linux/device.h> | 34 | #include <linux/device.h> |
35 | #include <linux/firmware.h> | 35 | #include <linux/firmware.h> |
36 | #include <linux/smp_lock.h> | ||
37 | #include <media/v4l2-common.h> | 36 | #include <media/v4l2-common.h> |
38 | #include <media/v4l2-ioctl.h> | 37 | #include <media/v4l2-ioctl.h> |
39 | #include <media/cx2341x.h> | 38 | #include <media/cx2341x.h> |
diff --git a/drivers/media/video/cx88/cx88-video.c b/drivers/media/video/cx88/cx88-video.c index d2f159daa8b5..88b51194f917 100644 --- a/drivers/media/video/cx88/cx88-video.c +++ b/drivers/media/video/cx88/cx88-video.c | |||
@@ -31,7 +31,6 @@ | |||
31 | #include <linux/kmod.h> | 31 | #include <linux/kmod.h> |
32 | #include <linux/kernel.h> | 32 | #include <linux/kernel.h> |
33 | #include <linux/slab.h> | 33 | #include <linux/slab.h> |
34 | #include <linux/smp_lock.h> | ||
35 | #include <linux/interrupt.h> | 34 | #include <linux/interrupt.h> |
36 | #include <linux/dma-mapping.h> | 35 | #include <linux/dma-mapping.h> |
37 | #include <linux/delay.h> | 36 | #include <linux/delay.h> |
diff --git a/drivers/media/video/imx074.c b/drivers/media/video/imx074.c index 380e459f899d..27b5dfdfbb93 100644 --- a/drivers/media/video/imx074.c +++ b/drivers/media/video/imx074.c | |||
@@ -451,7 +451,6 @@ static int imx074_probe(struct i2c_client *client, | |||
451 | ret = imx074_video_probe(icd, client); | 451 | ret = imx074_video_probe(icd, client); |
452 | if (ret < 0) { | 452 | if (ret < 0) { |
453 | icd->ops = NULL; | 453 | icd->ops = NULL; |
454 | i2c_set_clientdata(client, NULL); | ||
455 | kfree(priv); | 454 | kfree(priv); |
456 | return ret; | 455 | return ret; |
457 | } | 456 | } |
@@ -468,7 +467,6 @@ static int imx074_remove(struct i2c_client *client) | |||
468 | icd->ops = NULL; | 467 | icd->ops = NULL; |
469 | if (icl->free_bus) | 468 | if (icl->free_bus) |
470 | icl->free_bus(icl); | 469 | icl->free_bus(icl); |
471 | i2c_set_clientdata(client, NULL); | ||
472 | client->driver = NULL; | 470 | client->driver = NULL; |
473 | kfree(priv); | 471 | kfree(priv); |
474 | 472 | ||
diff --git a/drivers/media/video/ir-kbd-i2c.c b/drivers/media/video/ir-kbd-i2c.c index 5a000c65ae98..ce4a75375909 100644 --- a/drivers/media/video/ir-kbd-i2c.c +++ b/drivers/media/video/ir-kbd-i2c.c | |||
@@ -44,7 +44,6 @@ | |||
44 | #include <linux/errno.h> | 44 | #include <linux/errno.h> |
45 | #include <linux/slab.h> | 45 | #include <linux/slab.h> |
46 | #include <linux/i2c.h> | 46 | #include <linux/i2c.h> |
47 | #include <linux/i2c-id.h> | ||
48 | #include <linux/workqueue.h> | 47 | #include <linux/workqueue.h> |
49 | 48 | ||
50 | #include <media/ir-core.h> | 49 | #include <media/ir-core.h> |
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..cf93de988068 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; |
@@ -1176,7 +1174,6 @@ static int ov6650_probe(struct i2c_client *client, | |||
1176 | 1174 | ||
1177 | if (ret) { | 1175 | if (ret) { |
1178 | icd->ops = NULL; | 1176 | icd->ops = NULL; |
1179 | i2c_set_clientdata(client, NULL); | ||
1180 | kfree(priv); | 1177 | kfree(priv); |
1181 | } | 1178 | } |
1182 | 1179 | ||
@@ -1187,7 +1184,6 @@ static int ov6650_remove(struct i2c_client *client) | |||
1187 | { | 1184 | { |
1188 | struct ov6650 *priv = to_ov6650(client); | 1185 | struct ov6650 *priv = to_ov6650(client); |
1189 | 1186 | ||
1190 | i2c_set_clientdata(client, NULL); | ||
1191 | kfree(priv); | 1187 | kfree(priv); |
1192 | return 0; | 1188 | return 0; |
1193 | } | 1189 | } |
diff --git a/drivers/media/video/pwc/pwc-if.c b/drivers/media/video/pwc/pwc-if.c index e62beb4efdb4..f3dc89da4c4e 100644 --- a/drivers/media/video/pwc/pwc-if.c +++ b/drivers/media/video/pwc/pwc-if.c | |||
@@ -62,7 +62,6 @@ | |||
62 | #include <linux/module.h> | 62 | #include <linux/module.h> |
63 | #include <linux/poll.h> | 63 | #include <linux/poll.h> |
64 | #include <linux/slab.h> | 64 | #include <linux/slab.h> |
65 | #include <linux/smp_lock.h> | ||
66 | #ifdef CONFIG_USB_PWC_INPUT_EVDEV | 65 | #ifdef CONFIG_USB_PWC_INPUT_EVDEV |
67 | #include <linux/usb/input.h> | 66 | #include <linux/usb/input.h> |
68 | #endif | 67 | #endif |
diff --git a/drivers/media/video/s2255drv.c b/drivers/media/video/s2255drv.c index f5a46c458717..a845753665c1 100644 --- a/drivers/media/video/s2255drv.c +++ b/drivers/media/video/s2255drv.c | |||
@@ -49,7 +49,6 @@ | |||
49 | #include <linux/videodev2.h> | 49 | #include <linux/videodev2.h> |
50 | #include <linux/version.h> | 50 | #include <linux/version.h> |
51 | #include <linux/mm.h> | 51 | #include <linux/mm.h> |
52 | #include <linux/smp_lock.h> | ||
53 | #include <media/videobuf-vmalloc.h> | 52 | #include <media/videobuf-vmalloc.h> |
54 | #include <media/v4l2-common.h> | 53 | #include <media/v4l2-common.h> |
55 | #include <media/v4l2-device.h> | 54 | #include <media/v4l2-device.h> |
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/saa7134/saa7134-empress.c b/drivers/media/video/saa7134/saa7134-empress.c index 1467a30a434f..b890aafe7d64 100644 --- a/drivers/media/video/saa7134/saa7134-empress.c +++ b/drivers/media/video/saa7134/saa7134-empress.c | |||
@@ -21,7 +21,6 @@ | |||
21 | #include <linux/list.h> | 21 | #include <linux/list.h> |
22 | #include <linux/module.h> | 22 | #include <linux/module.h> |
23 | #include <linux/kernel.h> | 23 | #include <linux/kernel.h> |
24 | #include <linux/smp_lock.h> | ||
25 | #include <linux/delay.h> | 24 | #include <linux/delay.h> |
26 | 25 | ||
27 | #include "saa7134-reg.h" | 26 | #include "saa7134-reg.h" |
diff --git a/drivers/media/video/saa7164/saa7164.h b/drivers/media/video/saa7164/saa7164.h index 1d9c5cbbbc52..041ae8e20f68 100644 --- a/drivers/media/video/saa7164/saa7164.h +++ b/drivers/media/video/saa7164/saa7164.h | |||
@@ -58,7 +58,6 @@ | |||
58 | #include <media/tveeprom.h> | 58 | #include <media/tveeprom.h> |
59 | #include <media/videobuf-dma-sg.h> | 59 | #include <media/videobuf-dma-sg.h> |
60 | #include <media/videobuf-dvb.h> | 60 | #include <media/videobuf-dvb.h> |
61 | #include <linux/smp_lock.h> | ||
62 | #include <dvb_demux.h> | 61 | #include <dvb_demux.h> |
63 | #include <dvb_frontend.h> | 62 | #include <dvb_frontend.h> |
64 | #include <dvb_net.h> | 63 | #include <dvb_net.h> |
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/usbvision/usbvision-video.c b/drivers/media/video/usbvision/usbvision-video.c index db6b828594f5..011c0c386995 100644 --- a/drivers/media/video/usbvision/usbvision-video.c +++ b/drivers/media/video/usbvision/usbvision-video.c | |||
@@ -50,7 +50,6 @@ | |||
50 | #include <linux/list.h> | 50 | #include <linux/list.h> |
51 | #include <linux/timer.h> | 51 | #include <linux/timer.h> |
52 | #include <linux/slab.h> | 52 | #include <linux/slab.h> |
53 | #include <linux/smp_lock.h> | ||
54 | #include <linux/mm.h> | 53 | #include <linux/mm.h> |
55 | #include <linux/highmem.h> | 54 | #include <linux/highmem.h> |
56 | #include <linux/vmalloc.h> | 55 | #include <linux/vmalloc.h> |
diff --git a/drivers/media/video/v4l2-compat-ioctl32.c b/drivers/media/video/v4l2-compat-ioctl32.c index 86294ed35c9b..e30e8dfb6205 100644 --- a/drivers/media/video/v4l2-compat-ioctl32.c +++ b/drivers/media/video/v4l2-compat-ioctl32.c | |||
@@ -18,7 +18,6 @@ | |||
18 | #include <linux/videodev.h> | 18 | #include <linux/videodev.h> |
19 | #include <linux/videodev2.h> | 19 | #include <linux/videodev2.h> |
20 | #include <linux/module.h> | 20 | #include <linux/module.h> |
21 | #include <linux/smp_lock.h> | ||
22 | #include <media/v4l2-ioctl.h> | 21 | #include <media/v4l2-ioctl.h> |
23 | 22 | ||
24 | #ifdef CONFIG_COMPAT | 23 | #ifdef CONFIG_COMPAT |
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, |