From patchwork Thu Jul 12 12:54:25 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: 9957 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 7BA4A23E3D for ; Thu, 12 Jul 2012 12:40:50 +0000 (UTC) Received: from mail-yw0-f52.google.com (mail-yw0-f52.google.com [209.85.213.52]) by fiordland.canonical.com (Postfix) with ESMTP id 356E7A186C9 for ; Thu, 12 Jul 2012 12:40:50 +0000 (UTC) Received: by yhpp61 with SMTP id p61so2657130yhp.11 for ; Thu, 12 Jul 2012 05:40:49 -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-tm-as-mml:x-gm-message-state; bh=ZrK/gCSkDM+7Tz8IywdnVrxfGHi+3LXtCWIaReFYxlA=; b=XX5vPWLa2XbiCCks3a2VmZFuAVjj3G8JoqJCoGv0aBAltJvdMF1XXBmyifnyoR5Job 0mQxEwIvA4VJrBsffoXMvrGPdgqUYngmc4y7zDSmkxzwDSosyeTzE9SqV2d0OzPbXaeJ xTJxBEGthMeUxhCbESwWVZx7KkzD+wBEkVu7uMLL7RcGWakr8Zr6Z+LbHYt8k2/hCy6I OOrwk6xeqJQY4YlTw72TdgN1wthFXumvsyrP+RJxsu8R4869DaLG6wFu7FOprb1mwNMT FvkM42HFFLJVzWN4DVcpb5mwWRenAG7bklhDnRP32c/be27+oeblSuZ5W5hISzPjk066 GS5g== Received: by 10.50.195.234 with SMTP id ih10mr17501634igc.0.1342096849379; Thu, 12 Jul 2012 05:40:49 -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.231.241.2 with SMTP id lc2csp2590ibb; Thu, 12 Jul 2012 05:40:48 -0700 (PDT) Received: by 10.68.190.102 with SMTP id gp6mr5415301pbc.5.1342096848537; Thu, 12 Jul 2012 05:40:48 -0700 (PDT) Received: from mailout4.samsung.com (mailout4.samsung.com. [203.254.224.34]) by mx.google.com with ESMTP id ip10si8888357pbc.66.2012.07.12.05.40.48; Thu, 12 Jul 2012 05:40:48 -0700 (PDT) Received-SPF: neutral (google.com: 203.254.224.34 is neither permitted nor denied by best guess record for domain of thomas.abraham@linaro.org) client-ip=203.254.224.34; Authentication-Results: mx.google.com; spf=neutral (google.com: 203.254.224.34 is neither permitted nor denied by best guess record for domain of thomas.abraham@linaro.org) smtp.mail=thomas.abraham@linaro.org Received: from epcpsbgm1.samsung.com (mailout4.samsung.com [203.254.224.34]) by mailout4.samsung.com (Oracle Communications Messaging Server 7u4-24.01(7.0.4.24.0) 64bit (built Nov 17 2011)) with ESMTP id <0M71007D1SJSWY50@mailout4.samsung.com> for patches@linaro.org; Thu, 12 Jul 2012 21:40:47 +0900 (KST) X-AuditID: cbfee61a-b7f616d000004b7e-19-4ffec5cfa2ba Received: from epmmp1.local.host ( [203.254.227.16]) by epcpsbgm1.samsung.com (EPCPMTA) with SMTP id CA.9B.19326.FC5CEFF4; Thu, 12 Jul 2012 21:40:47 +0900 (KST) Received: from localhost.localdomain ([107.108.73.37]) by mmp1.samsung.com (Oracle Communications Messaging Server 7u4-24.01 (7.0.4.24.0) 64bit (built Nov 17 2011)) with ESMTPA id <0M7100BYUSJJH720@mmp1.samsung.com> for patches@linaro.org; Thu, 12 Jul 2012 21:40:47 +0900 (KST) From: Thomas Abraham To: linux-mmc@vger.kernel.org, devicetree-discuss@lists.ozlabs.org Cc: linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, cjb@laptop.org, grant.likely@secretlab.ca, rob.herring@calxeda.com, linux-samsung-soc@vger.kernel.org, kgene.kim@samsung.com, patches@linaro.org Subject: [PATCH v3 3/6] mmc: dw_mmc: lookup for optional biu and ciu clocks Date: Thu, 12 Jul 2012 18:24:25 +0530 Message-id: <1342097668-25243-4-git-send-email-thomas.abraham@linaro.org> X-Mailer: git-send-email 1.6.6.rc2 In-reply-to: <1342097668-25243-1-git-send-email-thomas.abraham@linaro.org> References: <1342097668-25243-1-git-send-email-thomas.abraham@linaro.org> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrIJMWRmVeSWpSXmKPExsVy+t9jAd3zR//5G3TfFLSYcvgLiwOjx51r e9gCGKO4bFJSczLLUov07RK4Mj609zAXnJCquN7RwtjA+E60i5GTQ0LARGLOuQ4mCFtM4sK9 9WxdjFwcQgKLGCVOnHnIDJIQEpjLJHHiqhWIzSZgIPFo4Tt2EFtEwEliydwJzCANzAJ3GCUe zTrJCJIQFvCW2Pb6AQuIzSKgKvFyxiWgIg4OXgFPiXMzOCCWKUls6D0KtphTwEvi+soWVpAS IaCSV38cJjDyLmBkWMUomlqQXFCclJ5rqFecmFtcmpeul5yfu4kR7PFnUjsYVzZYHGIU4GBU 4uH9cOCfvxBrYllxZe4hRgkOZiUR3v5coBBvSmJlVWpRfnxRaU5q8SFGaQ4WJXFeY++v/kIC 6YklqdmpqQWpRTBZJg5OqQbGo39U02IVHb0+LDzx4+eshIk1Saoelwo44rYxBFzXej5Vf2uI Vp/BX6eraiKma/6+sci7ebnhgnzPxOPBt19O0LTV4yucvXv+dC4+9bIylggnxhvFU2bNKdc4 Jc+j8ND00MLbyoXTN/wOF13OX8pXYm2nZ7zfbtX7RY+tDV2Nb3R+73/x59pnJZbijERDLeai 4kQAUPreOfQBAAA= X-TM-AS-MML: No X-Gm-Message-State: ALoCoQkSxDucFXVMqVpSOTRrs0N8uQh0AOLXU85/s4ySLpTA39tMI2ei3kFLh5y2ytOcV9fxrgED 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 --- drivers/mmc/host/dw_mmc.c | 42 +++++++++++++++++++++++++++++++++++++++--- include/linux/mmc/dw_mmc.h | 4 ++++ 2 files changed, 43 insertions(+), 3 deletions(-) diff --git a/drivers/mmc/host/dw_mmc.c b/drivers/mmc/host/dw_mmc.c index cd58063..679473c 100644 --- a/drivers/mmc/host/dw_mmc.c +++ b/drivers/mmc/host/dw_mmc.c @@ -1953,18 +1953,38 @@ 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 + clk_prepare_enable(host->biu_clk); + + host->ciu_clk = clk_get(host->dev, "ciu"); + if (IS_ERR(host->ciu_clk)) + dev_dbg(host->dev, "ciu clock not available\n"); + else + clk_prepare_enable(host->ciu_clk); + + 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; } - host->bus_hz = host->pdata->bus_hz; host->quirks = host->pdata->quirks; spin_lock_init(&host->lock); INIT_LIST_HEAD(&host->queue); + host->dma_ops = host->pdata->dma_ops; + dw_mci_init_dma(host); + /* * Get the host data width - this assumes that HCON has been set with * the correct values. @@ -2109,6 +2129,16 @@ err_dmaunmap: regulator_disable(host->vmmc); regulator_put(host->vmmc); } + +err_clk: + if (!IS_ERR(host->ciu_clk)) { + clk_disable_unprepare(host->ciu_clk); + clk_put(host->ciu_clk); + } + if (!IS_ERR(host->biu_clk)) { + clk_disable_unprepare(host->biu_clk); + clk_put(host->biu_clk); + } return ret; } EXPORT_SYMBOL(dw_mci_probe); @@ -2142,6 +2172,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 */