diff options
author | Magnus Damm <magnus.damm@gmail.com> | 2008-07-11 19:59:34 -0400 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@infradead.org> | 2008-07-20 06:25:21 -0400 |
commit | a034d1b76b173b37f9a3646aa8f50a2c14a0f3ea (patch) | |
tree | 318a5ccff6e07d0849c21a2d536ebadb96a767a7 /drivers/media/video/pxa_camera.c | |
parent | 092d3921195c4553a1818e698cee7a281ab361f4 (diff) |
V4L/DVB (8338): soc_camera: Move spinlocks
This patch moves the spinlock handling from soc_camera.c to the actual
camera host driver. The spinlock_alloc/free callbacks are replaced with
code in init_videobuf(). So far all camera host drivers implement their
own spinlock_alloc/free methods anyway, and videobuf_queue_core_init()
BUGs on a NULL spinlock argument, so, new camera host drivers will not
forget to provide a spinlock when initialising their videobuf queues.
Signed-off-by: Magnus Damm <damm@igel.co.jp>
Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@pengutronix.de>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
Diffstat (limited to 'drivers/media/video/pxa_camera.c')
-rw-r--r-- | drivers/media/video/pxa_camera.c | 17 |
1 files changed, 5 insertions, 12 deletions
diff --git a/drivers/media/video/pxa_camera.c b/drivers/media/video/pxa_camera.c index c3a7d476dc4b..b15f82c49766 100644 --- a/drivers/media/video/pxa_camera.c +++ b/drivers/media/video/pxa_camera.c | |||
@@ -583,12 +583,15 @@ static struct videobuf_queue_ops pxa_videobuf_ops = { | |||
583 | .buf_release = pxa_videobuf_release, | 583 | .buf_release = pxa_videobuf_release, |
584 | }; | 584 | }; |
585 | 585 | ||
586 | static void pxa_camera_init_videobuf(struct videobuf_queue *q, spinlock_t *lock, | 586 | static void pxa_camera_init_videobuf(struct videobuf_queue *q, |
587 | struct soc_camera_device *icd) | 587 | struct soc_camera_device *icd) |
588 | { | 588 | { |
589 | struct soc_camera_host *ici = to_soc_camera_host(icd->dev.parent); | ||
590 | struct pxa_camera_dev *pcdev = ici->priv; | ||
591 | |||
589 | /* We must pass NULL as dev pointer, then all pci_* dma operations | 592 | /* We must pass NULL as dev pointer, then all pci_* dma operations |
590 | * transform to normal dma_* ones. */ | 593 | * transform to normal dma_* ones. */ |
591 | videobuf_queue_sg_init(q, &pxa_videobuf_ops, NULL, lock, | 594 | videobuf_queue_sg_init(q, &pxa_videobuf_ops, NULL, &pcdev->lock, |
592 | V4L2_BUF_TYPE_VIDEO_CAPTURE, V4L2_FIELD_NONE, | 595 | V4L2_BUF_TYPE_VIDEO_CAPTURE, V4L2_FIELD_NONE, |
593 | sizeof(struct pxa_buffer), icd); | 596 | sizeof(struct pxa_buffer), icd); |
594 | } | 597 | } |
@@ -994,15 +997,6 @@ static int pxa_camera_querycap(struct soc_camera_host *ici, | |||
994 | return 0; | 997 | return 0; |
995 | } | 998 | } |
996 | 999 | ||
997 | static spinlock_t *pxa_camera_spinlock_alloc(struct soc_camera_file *icf) | ||
998 | { | ||
999 | struct soc_camera_host *ici = | ||
1000 | to_soc_camera_host(icf->icd->dev.parent); | ||
1001 | struct pxa_camera_dev *pcdev = ici->priv; | ||
1002 | |||
1003 | return &pcdev->lock; | ||
1004 | } | ||
1005 | |||
1006 | static struct soc_camera_host_ops pxa_soc_camera_host_ops = { | 1000 | static struct soc_camera_host_ops pxa_soc_camera_host_ops = { |
1007 | .owner = THIS_MODULE, | 1001 | .owner = THIS_MODULE, |
1008 | .add = pxa_camera_add_device, | 1002 | .add = pxa_camera_add_device, |
@@ -1015,7 +1009,6 @@ static struct soc_camera_host_ops pxa_soc_camera_host_ops = { | |||
1015 | .querycap = pxa_camera_querycap, | 1009 | .querycap = pxa_camera_querycap, |
1016 | .try_bus_param = pxa_camera_try_bus_param, | 1010 | .try_bus_param = pxa_camera_try_bus_param, |
1017 | .set_bus_param = pxa_camera_set_bus_param, | 1011 | .set_bus_param = pxa_camera_set_bus_param, |
1018 | .spinlock_alloc = pxa_camera_spinlock_alloc, | ||
1019 | }; | 1012 | }; |
1020 | 1013 | ||
1021 | /* Should be allocated dynamically too, but we have only one. */ | 1014 | /* Should be allocated dynamically too, but we have only one. */ |