From patchwork Tue Sep 4 19:46:08 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: thomas.abraham@linaro.org X-Patchwork-Id: 11169 Return-Path: X-Original-To: patchwork@peony.canonical.com Delivered-To: patchwork@peony.canonical.com Received: from fiordland.canonical.com (fiordland.canonical.com [91.189.94.145]) by peony.canonical.com (Postfix) with ESMTP id 5477323EFE for ; Tue, 4 Sep 2012 19:27:15 +0000 (UTC) Received: from mail-ie0-f180.google.com (mail-ie0-f180.google.com [209.85.223.180]) by fiordland.canonical.com (Postfix) with ESMTP id E6890A18B10 for ; Tue, 4 Sep 2012 19:26:23 +0000 (UTC) Received: by ieak11 with SMTP id k11so5367351iea.11 for ; Tue, 04 Sep 2012 12:27:14 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=x-forwarded-to:x-forwarded-for:delivered-to:received-spf:x-auditid :from:to:cc:subject:date:message-id:x-mailer:in-reply-to:references :x-brightmail-tracker:x-gm-message-state; bh=dkUnkUr+3iLdRM/gs80esUjNXcwPRTRqN2lZ57usIZE=; b=P0XyxSPdXhzKYc9MN2GbUjCHORMVRGd/smhCD71jHCSqG3ukbmUozwEXqxy9CkZ7af MXkbD5reJo7ihOnX9WbOw3z1iNExAcc3Qw69I5j3eKf5Pc6VXo7PXiz7aX0hSVwHKPlU RcL4TZqDgs0AZ2MJ9o1Wz8PO8LT6e6SXA2kCFfcwWKGSliC9fHKpSTwaZF2kg5WmsQyC Gs8G25oT1R1lQLg5lhVXZnBBzAsQbQ/TokWBovx3M2rI8LFGWarcgvNrEWt/fL1Hkzcu PkJAcjGOiOAh7lRt30UjFdSinlXgNzyHD9PzH4A1YFs64IXqbVkJOiyDilFqTL1W7NU6 6NZA== Received: by 10.42.109.194 with SMTP id m2mr18737848icp.48.1346786834112; Tue, 04 Sep 2012 12:27:14 -0700 (PDT) X-Forwarded-To: linaro-patchwork@canonical.com X-Forwarded-For: patch@linaro.org linaro-patchwork@canonical.com Delivered-To: patches@linaro.org Received: by 10.50.184.232 with SMTP id ex8csp209284igc; Tue, 4 Sep 2012 12:27:13 -0700 (PDT) Received: by 10.66.88.198 with SMTP id bi6mr43381837pab.23.1346786832414; Tue, 04 Sep 2012 12:27:12 -0700 (PDT) Received: from mailout1.samsung.com (mailout1.samsung.com. [203.254.224.24]) by mx.google.com with ESMTP id kt9si28852848pbc.140.2012.09.04.12.27.11; Tue, 04 Sep 2012 12:27:12 -0700 (PDT) Received-SPF: neutral (google.com: 203.254.224.24 is neither permitted nor denied by best guess record for domain of thomas.abraham@linaro.org) client-ip=203.254.224.24; Authentication-Results: mx.google.com; spf=neutral (google.com: 203.254.224.24 is neither permitted nor denied by best guess record for domain of thomas.abraham@linaro.org) smtp.mail=thomas.abraham@linaro.org Received: from epcpsbgm2.samsung.com (epcpsbgm2 [203.254.230.27]) by mailout1.samsung.com (Oracle Communications Messaging Server 7u4-24.01(7.0.4.24.0) 64bit (built Nov 17 2011)) with ESMTP id <0M9U00IO1BDAUBN0@mailout1.samsung.com>; Wed, 05 Sep 2012 04:27:10 +0900 (KST) X-AuditID: cbfee61b-b7f056d000002c30-2a-5046560ec4b0 Received: from epmmp2 ( [203.254.227.17]) by epcpsbgm2.samsung.com (EPCPMTA) with SMTP id 7B.A6.11312.E0656405; Wed, 05 Sep 2012 04:27:10 +0900 (KST) Received: from localhost.localdomain ([107.108.73.37]) by mmp2.samsung.com (Oracle Communications Messaging Server 7u4-24.01 (7.0.4.24.0) 64bit (built Nov 17 2011)) with ESMTPA id <0M9U00HKIBD0A530@mmp2.samsung.com>; Wed, 05 Sep 2012 04:27:10 +0900 (KST) From: Thomas Abraham To: linux-mmc@vger.kernel.org, devicetree-discuss@lists.ozlabs.org Cc: will.newton@imgtec.com, cjb@laptop.org, grant.likely@secretlab.ca, rob.herring@calxeda.com, linux-samsung-soc@vger.kernel.org, kgene.kim@samsung.com, girish.shivananjappa@linaro.org, jh80.chung@samsung.com, tgih.jun@samsung.com, patches@linaro.org Subject: [PATCH v5 4/9] mmc: dw_mmc: lookup for optional biu and ciu clocks Date: Wed, 05 Sep 2012 01:16:08 +0530 Message-id: <1346787968-23709-1-git-send-email-thomas.abraham@linaro.org> X-Mailer: git-send-email 1.6.6.rc2 In-reply-to: References: X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrBJMWRmVeSWpSXmKPExsVy+t9jQV2+MLcAg1UbVSy+fD3BZjHl8BcW ByaPO9f2sAUwRnHZpKTmZJalFunbJXBlvF/ymqlgkXTFiXsHWBoY14p1MXJySAiYSHzo2s0I YYtJXLi3nq2LkYtDSGA6o8TZjbPYIZw2Jomu58+ZQarYBAwkHi18xw5iiwg4SSyZO4EZpIhZ oJFJYuPCnWwgCWEBb4nZE6czgdgsAqoSLxf1sYDYvAKeElP+ToFapySxofcoUA0HB6dAsMTS R84gYSGBAIkJK76zTGDkXcDIsIpRNLUguaA4KT3XSK84Mbe4NC9dLzk/dxMj2P/PpHcwrmqw OMQowMGoxMPL4O0WIMSaWFZcmXuIUYKDWUmE9/Zq1wAh3pTEyqrUovz4otKc1OJDjNIcLEri vE7n7AKEBNITS1KzU1MLUotgskwcnFINjKq3hO7EtYUFz5U6vr7p1iqRk4oLjDfFHgvz47YW 5FSIvJe78td3hSKRK70/79X360TLffyyb5ZOlPf93GdSJdsrHcV5lU6wOjmozZ+uLRu3gm32 YqevLBZGkxYvWSZzcLr9jg939l49wGvxre1lHPsaYZ2wl08vR2Xr61XbJrXNWByZVB+mo8RS nJFoqMVcVJwIAB+PXGP7AQAA X-Gm-Message-State: ALoCoQlonDfgJXiX+6TDYnY7ZkGCE4OVFuETpHHeD6rQn0tbqSwV5QFcoxYlqgA2JF/Tfy+Rv9Zi Some platforms allow for clock gating and control of bus interface unit clock and card interface unit clock. Add support for clock lookup of optional biu and ciu clocks for clock gating and clock speed determination. Signed-off-by: Abhilash Kesavan Signed-off-by: Thomas Abraham Acked-by: Will Newton --- drivers/mmc/host/dw_mmc.c | 50 +++++++++++++++++++++++++++++++++++++++++-- include/linux/mmc/dw_mmc.h | 4 +++ 2 files changed, 51 insertions(+), 3 deletions(-) diff --git a/drivers/mmc/host/dw_mmc.c b/drivers/mmc/host/dw_mmc.c index 227c42e..e8c8491 100644 --- a/drivers/mmc/host/dw_mmc.c +++ b/drivers/mmc/host/dw_mmc.c @@ -1960,13 +1960,40 @@ int dw_mci_probe(struct dw_mci *host) return -ENODEV; } - if (!host->pdata->bus_hz) { + host->biu_clk = clk_get(host->dev, "biu"); + if (IS_ERR(host->biu_clk)) { + dev_dbg(host->dev, "biu clock not available\n"); + } else { + ret = clk_prepare_enable(host->biu_clk); + if (ret) { + dev_err(host->dev, "failed to enable biu clock\n"); + return ret; + } + } + + host->ciu_clk = clk_get(host->dev, "ciu"); + if (IS_ERR(host->ciu_clk)) { + dev_dbg(host->dev, "ciu clock not available\n"); + } else { + ret = clk_prepare_enable(host->ciu_clk); + if (ret) { + dev_err(host->dev, "failed to enable ciu clock\n"); + goto err_clk_biu; + } + } + + if (IS_ERR(host->ciu_clk)) + host->bus_hz = host->pdata->bus_hz; + else + host->bus_hz = clk_get_rate(host->ciu_clk); + + if (!host->bus_hz) { dev_err(host->dev, "Platform data must supply bus speed\n"); - return -ENODEV; + ret = -ENODEV; + goto err_clk_ciu; } - host->bus_hz = host->pdata->bus_hz; host->quirks = host->pdata->quirks; spin_lock_init(&host->lock); @@ -2116,6 +2143,17 @@ err_dmaunmap: regulator_disable(host->vmmc); regulator_put(host->vmmc); } + +err_clk_ciu: + if (!IS_ERR(host->ciu_clk)) { + clk_disable_unprepare(host->ciu_clk); + clk_put(host->ciu_clk); + } +err_clk_biu: + if (!IS_ERR(host->biu_clk)) { + clk_disable_unprepare(host->biu_clk); + clk_put(host->biu_clk); + } return ret; } EXPORT_SYMBOL(dw_mci_probe); @@ -2149,6 +2187,12 @@ void dw_mci_remove(struct dw_mci *host) regulator_put(host->vmmc); } + if (!IS_ERR(host->ciu_clk)) + clk_disable_unprepare(host->ciu_clk); + if (!IS_ERR(host->biu_clk)) + clk_disable_unprepare(host->biu_clk); + clk_put(host->ciu_clk); + clk_put(host->biu_clk); } EXPORT_SYMBOL(dw_mci_remove); diff --git a/include/linux/mmc/dw_mmc.h b/include/linux/mmc/dw_mmc.h index a37a573..787ad56 100644 --- a/include/linux/mmc/dw_mmc.h +++ b/include/linux/mmc/dw_mmc.h @@ -78,6 +78,8 @@ struct mmc_data; * @data_offset: Set the offset of DATA register according to VERID. * @dev: Device associated with the MMC controller. * @pdata: Platform data associated with the MMC controller. + * @biu_clk: Pointer to bus interface unit clock instance. + * @ciu_clk: Pointer to card interface unit clock instance. * @slot: Slots sharing this MMC controller. * @fifo_depth: depth of FIFO. * @data_shift: log2 of FIFO item size. @@ -158,6 +160,8 @@ struct dw_mci { u16 data_offset; struct device *dev; struct dw_mci_board *pdata; + struct clk *biu_clk; + struct clk *ciu_clk; struct dw_mci_slot *slot[MAX_MCI_SLOTS]; /* FIFO push and pull */