From dd2311d5a46590540ceb1b542627e85917196192 Mon Sep 17 00:00:00 2001 From: Jonathan Corbet Date: Fri, 16 Mar 2012 19:14:52 -0300 Subject: [PATCH] --- yaml --- r: 295112 b: refs/heads/master c: 482d35c41f2efb0408624e222bbc9efc0b3518eb h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/drivers/media/video/marvell-ccic/mcam-core.c | 10 +++++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/[refs] b/[refs] index 3504d08ef2fe..0a436dbe0c59 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 0770d07f7b33081f68f8d7a291395005d7044c6b +refs/heads/master: 482d35c41f2efb0408624e222bbc9efc0b3518eb diff --git a/trunk/drivers/media/video/marvell-ccic/mcam-core.c b/trunk/drivers/media/video/marvell-ccic/mcam-core.c index b26118246763..050724f8d3e6 100644 --- a/trunk/drivers/media/video/marvell-ccic/mcam-core.c +++ b/trunk/drivers/media/video/marvell-ccic/mcam-core.c @@ -742,7 +742,14 @@ static void mcam_ctlr_stop_dma(struct mcam_camera *cam) mcam_ctlr_stop(cam); cam->state = S_IDLE; spin_unlock_irqrestore(&cam->dev_lock, flags); - msleep(40); + /* + * This is a brutally long sleep, but experience shows that + * it can take the controller a while to get the message that + * it needs to stop grabbing frames. In particular, we can + * sometimes (on mmp) get a frame at the end WITHOUT the + * start-of-frame indication. + */ + msleep(150); if (test_bit(CF_DMA_ACTIVE, &cam->flags)) cam_err(cam, "Timeout waiting for DMA to end\n"); /* This would be bad news - what now? */ @@ -885,6 +892,7 @@ static int mcam_read_setup(struct mcam_camera *cam) * Turn it loose. */ spin_lock_irqsave(&cam->dev_lock, flags); + clear_bit(CF_DMA_ACTIVE, &cam->flags); mcam_reset_buffers(cam); mcam_ctlr_irq_enable(cam); cam->state = S_STREAMING;