diff options
Diffstat (limited to 'drivers/media/video/pxa_camera.c')
| -rw-r--r-- | drivers/media/video/pxa_camera.c | 12 | 
1 files changed, 7 insertions, 5 deletions
diff --git a/drivers/media/video/pxa_camera.c b/drivers/media/video/pxa_camera.c index 322ac4eecf0..04bf5c11308 100644 --- a/drivers/media/video/pxa_camera.c +++ b/drivers/media/video/pxa_camera.c @@ -27,6 +27,7 @@  #include <linux/platform_device.h>  #include <linux/clk.h>  #include <linux/sched.h> +#include <linux/slab.h>  #include <media/v4l2-common.h>  #include <media/v4l2-dev.h> @@ -608,12 +609,9 @@ static void pxa_dma_add_tail_buf(struct pxa_camera_dev *pcdev,   */  static void pxa_camera_start_capture(struct pxa_camera_dev *pcdev)  { -	unsigned long cicr0, cifr; +	unsigned long cicr0;  	dev_dbg(pcdev->soc_host.v4l2_dev.dev, "%s\n", __func__); -	/* Reset the FIFOs */ -	cifr = __raw_readl(pcdev->base + CIFR) | CIFR_RESET_F; -	__raw_writel(cifr, pcdev->base + CIFR);  	/* Enable End-Of-Frame Interrupt */  	cicr0 = __raw_readl(pcdev->base + CICR0) | CICR0_ENB;  	cicr0 &= ~CICR0_EOFM; @@ -934,7 +932,7 @@ static void pxa_camera_deactivate(struct pxa_camera_dev *pcdev)  static irqreturn_t pxa_camera_irq(int irq, void *data)  {  	struct pxa_camera_dev *pcdev = data; -	unsigned long status, cicr0; +	unsigned long status, cifr, cicr0;  	struct pxa_buffer *buf;  	struct videobuf_buffer *vb; @@ -948,6 +946,10 @@ static irqreturn_t pxa_camera_irq(int irq, void *data)  	__raw_writel(status, pcdev->base + CISR);  	if (status & CISR_EOF) { +		/* Reset the FIFOs */ +		cifr = __raw_readl(pcdev->base + CIFR) | CIFR_RESET_F; +		__raw_writel(cifr, pcdev->base + CIFR); +  		pcdev->active = list_first_entry(&pcdev->capture,  					   struct pxa_buffer, vb.queue);  		vb = &pcdev->active->vb;  |