From patchwork Mon Jul 30 08:37:30 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Javier Martin X-Patchwork-Id: 1253691 Return-Path: X-Original-To: patchwork-linux-media@patchwork.kernel.org Delivered-To: patchwork-process-083081@patchwork2.kernel.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by patchwork2.kernel.org (Postfix) with ESMTP id 2C389DF24C for ; Mon, 30 Jul 2012 08:37:47 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754143Ab2G3Ihm (ORCPT ); Mon, 30 Jul 2012 04:37:42 -0400 Received: from mail-wi0-f170.google.com ([209.85.212.170]:47947 "EHLO mail-wi0-f170.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751351Ab2G3Ihl (ORCPT ); Mon, 30 Jul 2012 04:37:41 -0400 Received: by wibhq12 with SMTP id hq12so2248157wib.1 for ; Mon, 30 Jul 2012 01:37:40 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=from:to:cc:subject:date:message-id:x-mailer:x-gm-message-state; bh=irsz5AO30Mi0OfRDNBRzCIOJLPkUl4ZwMlRsDrhM1UU=; b=VltuePRcjCYyLl1jQIlfhLJmBj+6xbpFHL5gptNrKqNEekmXh2kRR6UOEt+jv4zE3e Ot9VkUuV1X0oGnaSvlgb4BRYBMdwnfKLoZCA9xYy8GbGUr5wpotzWUTRd3ZUA+3O0so0 pxIxQ9ywlCZC4RHBiJPXuBnTmQgSaNr5i8s1ET4hzmUhzIo2vDp3CrEXN1gNp+amXI6U xL/YECusni9KtiVN6mDCsLltAEJJC1xI9PIFzjj9w4LD8/O9KE1ADhuK47cJZz8J0G8S JSxOZT03iuit2TL9R47IMtsniCSTrBL+tP4cFY7sM0kUn7n8DuaZs/OsSK//FQSusI03 GxFQ== Received: by 10.180.14.8 with SMTP id l8mr24783527wic.6.1343637460005; Mon, 30 Jul 2012 01:37:40 -0700 (PDT) Received: from piscis.vsilicon.net (96.252.106.212.dynamic.jazztel.es. [212.106.252.96]) by mx.google.com with ESMTPS id ep14sm22075711wid.0.2012.07.30.01.37.38 (version=TLSv1/SSLv3 cipher=OTHER); Mon, 30 Jul 2012 01:37:39 -0700 (PDT) From: Javier Martin To: linux-media@vger.kernel.org Cc: mchehab@infradead.org, hdegoede@redhat.com, s.nawrocki@samsung.com, hans.verkuil@cisco.com, Javier Martin Subject: [PATCH] media: i.MX27: Fix mx2_emmaprp mem2mem driver clocks. Date: Mon, 30 Jul 2012 10:37:30 +0200 Message-Id: <1343637450-5562-1-git-send-email-javier.martin@vista-silicon.com> X-Mailer: git-send-email 1.7.9.5 X-Gm-Message-State: ALoCoQlGa0W+rL0sRGtweBBvbSlJurvi9UQtXRQvsoROd4ngTiYFLV/oNoKNCoCj66f4+gLwrKwB Sender: linux-media-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-media@vger.kernel.org This driver wasn't converted to the new clock framework (e038ed50a4a767add205094c035b6943e7b30140). Signed-off-by: Javier Martin --- This is broken in current stable 3.5 too. So it should be applied to both stable and 3.6. --- drivers/media/video/mx2_emmaprp.c | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/drivers/media/video/mx2_emmaprp.c b/drivers/media/video/mx2_emmaprp.c index 0bd5815..2614a89 100644 --- a/drivers/media/video/mx2_emmaprp.c +++ b/drivers/media/video/mx2_emmaprp.c @@ -209,7 +209,7 @@ struct emmaprp_dev { int irq_emma; void __iomem *base_emma; - struct clk *clk_emma; + struct clk *clk_emma_ahb, *clk_emma_ipg; struct resource *res_emma; struct v4l2_m2m_dev *m2m_dev; @@ -800,7 +800,8 @@ static int emmaprp_open(struct file *file) return ret; } - clk_enable(pcdev->clk_emma); + clk_prepare_enable(pcdev->clk_emma_ipg); + clk_prepare_enable(pcdev->clk_emma_ahb); ctx->q_data[V4L2_M2M_SRC].fmt = &formats[1]; ctx->q_data[V4L2_M2M_DST].fmt = &formats[0]; @@ -816,7 +817,8 @@ static int emmaprp_release(struct file *file) dprintk(pcdev, "Releasing instance %p\n", ctx); - clk_disable(pcdev->clk_emma); + clk_disable_unprepare(pcdev->clk_emma_ahb); + clk_disable_unprepare(pcdev->clk_emma_ipg); v4l2_m2m_ctx_release(ctx->m2m_ctx); kfree(ctx); @@ -876,9 +878,15 @@ static int emmaprp_probe(struct platform_device *pdev) spin_lock_init(&pcdev->irqlock); - pcdev->clk_emma = clk_get(&pdev->dev, NULL); - if (IS_ERR(pcdev->clk_emma)) { - ret = PTR_ERR(pcdev->clk_emma); + pcdev->clk_emma_ipg = devm_clk_get(&pdev->dev, "ipg"); + if (IS_ERR(pcdev->clk_emma_ipg)) { + ret = PTR_ERR(pcdev->clk_emma_ipg); + goto free_dev; + } + + pcdev->clk_emma_ahb = devm_clk_get(&pdev->dev, "ahb"); + if (IS_ERR(pcdev->clk_emma_ipg)) { + ret = PTR_ERR(pcdev->clk_emma_ahb); goto free_dev; } @@ -887,12 +895,12 @@ static int emmaprp_probe(struct platform_device *pdev) if (irq_emma < 0 || res_emma == NULL) { dev_err(&pdev->dev, "Missing platform resources data\n"); ret = -ENODEV; - goto free_clk; + goto free_dev; } ret = v4l2_device_register(&pdev->dev, &pcdev->v4l2_dev); if (ret) - goto free_clk; + goto free_dev; mutex_init(&pcdev->dev_mutex); @@ -965,8 +973,6 @@ rel_vdev: video_device_release(vfd); unreg_dev: v4l2_device_unregister(&pcdev->v4l2_dev); -free_clk: - clk_put(pcdev->clk_emma); free_dev: kfree(pcdev); @@ -983,7 +989,6 @@ static int emmaprp_remove(struct platform_device *pdev) v4l2_m2m_release(pcdev->m2m_dev); vb2_dma_contig_cleanup_ctx(pcdev->alloc_ctx); v4l2_device_unregister(&pcdev->v4l2_dev); - clk_put(pcdev->clk_emma); kfree(pcdev); return 0;