From patchwork Wed Nov 18 11:35:01 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Hiremath, Vaibhav" X-Patchwork-Id: 2103 Return-path: Envelope-to: mchehab@infradead.org Delivery-date: Wed, 18 Nov 2009 11:35:10 +0000 Received: from bombadil.infradead.org [18.85.46.34] by pedra.chehab.org with IMAP (fetchmail-6.3.6) for (single-drop); Wed, 18 Nov 2009 09:35:19 -0200 (BRST) Received: from vger.kernel.org ([209.132.176.167]) by bombadil.infradead.org with esmtp (Exim 4.69 #1 (Red Hat Linux)) id 1NAioY-0004ts-49; Wed, 18 Nov 2009 11:35:10 +0000 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751496AbZKRLfC (ORCPT + 1 other); Wed, 18 Nov 2009 06:35:02 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1751473AbZKRLfB (ORCPT ); Wed, 18 Nov 2009 06:35:01 -0500 Received: from devils.ext.ti.com ([198.47.26.153]:34173 "EHLO devils.ext.ti.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751126AbZKRLfB (ORCPT ); Wed, 18 Nov 2009 06:35:01 -0500 Received: from dbdp31.itg.ti.com ([172.24.170.98]) by devils.ext.ti.com (8.13.7/8.13.7) with ESMTP id nAIBZ4uD010816 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Wed, 18 Nov 2009 05:35:07 -0600 Received: from localhost.localdomain (localhost [127.0.0.1]) by dbdp31.itg.ti.com (8.13.8/8.13.8) with ESMTP id nAIBZ1Jw013180; Wed, 18 Nov 2009 17:05:01 +0530 (IST) From: hvaibhav@ti.com To: linux-media@vger.kernel.org Cc: hverkuil@xs4all.nl, m-karicheri2@ti.com, Vaibhav Hiremath Subject: [PATCH] VPFE Capture: Add call back function for interrupt clear to vpfe_cfg Date: Wed, 18 Nov 2009 17:05:01 +0530 Message-Id: <1258544101-28830-1-git-send-email-hvaibhav@ti.com> X-Mailer: git-send-email 1.6.2.4 In-Reply-To: References: Sender: linux-media-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-media@vger.kernel.org From: Vaibhav Hiremath For the devices like AM3517, it is expected that driver clears the interrupt in ISR. Since this is device spcific, callback function added to the platform_data. Signed-off-by: Vaibhav Hiremath --- drivers/media/video/davinci/vpfe_capture.c | 26 ++++++++++++++++++++++++-- include/media/davinci/vpfe_capture.h | 2 ++ 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/drivers/media/video/davinci/vpfe_capture.c b/drivers/media/video/davinci/vpfe_capture.c index 9b6b254..4c5152e 100644 --- a/drivers/media/video/davinci/vpfe_capture.c +++ b/drivers/media/video/davinci/vpfe_capture.c @@ -563,6 +563,11 @@ static int vpfe_initialize_device(struct vpfe_device *vpfe_dev) ret = ccdc_dev->hw_ops.open(vpfe_dev->pdev); if (!ret) vpfe_dev->initialized = 1; + + /* Clear all VPFE/CCDC interrupts */ + if (vpfe_dev->cfg->clr_intr) + vpfe_dev->cfg->clr_intr(-1); + unlock: mutex_unlock(&ccdc_lock); return ret; @@ -663,8 +668,11 @@ static irqreturn_t vpfe_isr(int irq, void *dev_id) field = vpfe_dev->fmt.fmt.pix.field; /* if streaming not started, don't do anything */ - if (!vpfe_dev->started) + if (!vpfe_dev->started) { + if (vpfe_dev->cfg->clr_intr) + vpfe_dev->cfg->clr_intr(irq); return IRQ_HANDLED; + } /* only for 6446 this will be applicable */ if (NULL != ccdc_dev->hw_ops.reset) @@ -676,6 +684,8 @@ static irqreturn_t vpfe_isr(int irq, void *dev_id) "frame format is progressive...\n"); if (vpfe_dev->cur_frm != vpfe_dev->next_frm) vpfe_process_buffer_complete(vpfe_dev); + if (vpfe_dev->cfg->clr_intr) + vpfe_dev->cfg->clr_intr(irq); return IRQ_HANDLED; } @@ -703,6 +713,8 @@ static irqreturn_t vpfe_isr(int irq, void *dev_id) if (field == V4L2_FIELD_SEQ_TB) vpfe_schedule_bottom_field(vpfe_dev); + if (vpfe_dev->cfg->clr_intr) + vpfe_dev->cfg->clr_intr(irq); return IRQ_HANDLED; } /* @@ -723,6 +735,9 @@ static irqreturn_t vpfe_isr(int irq, void *dev_id) */ vpfe_dev->field_id = fid; } + if (vpfe_dev->cfg->clr_intr) + vpfe_dev->cfg->clr_intr(irq); + return IRQ_HANDLED; } @@ -734,8 +749,11 @@ static irqreturn_t vdint1_isr(int irq, void *dev_id) v4l2_dbg(1, debug, &vpfe_dev->v4l2_dev, "\nInside vdint1_isr...\n"); /* if streaming not started, don't do anything */ - if (!vpfe_dev->started) + if (!vpfe_dev->started) { + if (vpfe_dev->cfg->clr_intr) + vpfe_dev->cfg->clr_intr(irq); return IRQ_HANDLED; + } spin_lock(&vpfe_dev->dma_queue_lock); if ((vpfe_dev->fmt.fmt.pix.field == V4L2_FIELD_NONE) && @@ -743,6 +761,10 @@ static irqreturn_t vdint1_isr(int irq, void *dev_id) vpfe_dev->cur_frm == vpfe_dev->next_frm) vpfe_schedule_next_buffer(vpfe_dev); spin_unlock(&vpfe_dev->dma_queue_lock); + + if (vpfe_dev->cfg->clr_intr) + vpfe_dev->cfg->clr_intr(irq); + return IRQ_HANDLED; } diff --git a/include/media/davinci/vpfe_capture.h b/include/media/davinci/vpfe_capture.h index fc83d98..5a21265 100644 --- a/include/media/davinci/vpfe_capture.h +++ b/include/media/davinci/vpfe_capture.h @@ -104,6 +104,8 @@ struct vpfe_config { char *ccdc; /* setup function for the input path */ int (*setup_input)(enum vpfe_subdev_id id); + /* Function for Clearing the interrupt */ + void (*clr_intr)(int vdint); /* number of clocks */ int num_clocks; /* clocks used for vpfe capture */