From patchwork Fri Mar 25 08:32:16 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Guennadi Liakhovetski X-Patchwork-Id: 661141 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by demeter1.kernel.org (8.14.4/8.14.3) with ESMTP id p2P8WOMK019606 for ; Fri, 25 Mar 2011 08:32:24 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933465Ab1CYIcW (ORCPT ); Fri, 25 Mar 2011 04:32:22 -0400 Received: from moutng.kundenserver.de ([212.227.17.9]:64739 "EHLO moutng.kundenserver.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933242Ab1CYIcT (ORCPT ); Fri, 25 Mar 2011 04:32:19 -0400 Received: from axis700.grange (pD9EB8EC2.dip0.t-ipconnect.de [217.235.142.194]) by mrelayeu.kundenserver.de (node=mrbap3) with ESMTP (Nemesis) id 0Lu4L0-1PtnMd1S6A-011RlU; Fri, 25 Mar 2011 09:32:17 +0100 Received: by axis700.grange (Postfix, from userid 1000) id F276C189B86; Fri, 25 Mar 2011 09:32:16 +0100 (CET) Received: from localhost (localhost [127.0.0.1]) by axis700.grange (Postfix) with ESMTP id F039C189B85; Fri, 25 Mar 2011 09:32:16 +0100 (CET) Date: Fri, 25 Mar 2011 09:32:16 +0100 (CET) From: Guennadi Liakhovetski X-X-Sender: lyakh@axis700.grange To: Linux Media Mailing List cc: Pawel Osciak Subject: [PATCH] V4L: sh_mobile_ceu_camera: implement .stop_streaming() Message-ID: MIME-Version: 1.0 X-Provags-ID: V02:K0:3/vnT4zrajGR6aELwaknD/NxbWSkR3lexwoKHYKKEGC V+T1DQLBbUkYTaB1H5FdobW8Weo7rk2W2GyzEItfVNBUDW82n8 MJCZGKPRsd5oWNOMh5/AhOVdJh4vvCt+GbwiUJiclMNyfeiHsk JJEcGPqRHTHI+VSmhnIGmhZeaS0FLMp+kCZaDs6PB7uekt2/hX m8Z6D7AsD648DVVLdhnwFm7eYEPvSDKQl+nDIZF5qU= Sender: linux-media-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-media@vger.kernel.org X-Greylist: IP, sender and recipient auto-whitelisted, not delayed by milter-greylist-4.2.6 (demeter1.kernel.org [140.211.167.41]); Fri, 25 Mar 2011 08:32:24 +0000 (UTC) diff --git a/drivers/media/video/sh_mobile_ceu_camera.c b/drivers/media/video/sh_mobile_ceu_camera.c index 61f3701..0a75a4c 100644 --- a/drivers/media/video/sh_mobile_ceu_camera.c +++ b/drivers/media/video/sh_mobile_ceu_camera.c @@ -429,6 +429,26 @@ static int sh_mobile_ceu_videobuf_init(struct vb2_buffer *vb) return 0; } +static int sh_mobile_ceu_stop_streaming(struct vb2_queue *q) +{ + struct soc_camera_device *icd = container_of(q, struct soc_camera_device, vb2_vidq); + struct soc_camera_host *ici = to_soc_camera_host(icd->dev.parent); + struct sh_mobile_ceu_dev *pcdev = ici->priv; + struct list_head *buf_head, *tmp; + unsigned long flags; + + spin_lock_irqsave(&pcdev->lock, flags); + + pcdev->active = NULL; + + list_for_each_safe(buf_head, tmp, &pcdev->capture) + list_del_init(buf_head); + + spin_unlock_irqrestore(&pcdev->lock, flags); + + return sh_mobile_ceu_soft_reset(pcdev); +} + static struct vb2_ops sh_mobile_ceu_videobuf_ops = { .queue_setup = sh_mobile_ceu_videobuf_setup, .buf_prepare = sh_mobile_ceu_videobuf_prepare, @@ -437,6 +457,7 @@ static struct vb2_ops sh_mobile_ceu_videobuf_ops = { .buf_init = sh_mobile_ceu_videobuf_init, .wait_prepare = soc_camera_unlock, .wait_finish = soc_camera_lock, + .stop_streaming = sh_mobile_ceu_stop_streaming, }; static irqreturn_t sh_mobile_ceu_irq(int irq, void *data)