From patchwork Sun Aug 26 11:52:02 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: 10954 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 A346523EFE for ; Sun, 26 Aug 2012 11:34:22 +0000 (UTC) Received: from mail-iy0-f180.google.com (mail-iy0-f180.google.com [209.85.210.180]) by fiordland.canonical.com (Postfix) with ESMTP id 36ABEA182BD for ; Sun, 26 Aug 2012 11:33:59 +0000 (UTC) Received: by mail-iy0-f180.google.com with SMTP id j25so3776090iaf.11 for ; Sun, 26 Aug 2012 04:34:22 -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=ZrK/gCSkDM+7Tz8IywdnVrxfGHi+3LXtCWIaReFYxlA=; b=pMkJ8jxWgPNjPx+/TQgoeWWPfY96lhrO/ZhdvBPRVnpd6O6JSIn3Cvw7zZ+IT/Xx6C sc5C5nYlrgJipbhtrkDJEHU2ZKtZthzHH8Pc7BqTkFlJHMCWLaHUSNDPyA7m3ztXpEty MlgG4ss63yomlPoFCmVeDgeHvgjAUsiX/PphHnP3LgEelzz808tWhSozzzxvo58uFYHJ IPRot70T4KRxE6ya8I/vxzIfwOmZEz6aIzBaWe8ny8KRN3hbRNkRZ8deYDguY8xC+k1P 2Pxvp9PFk+7i9bWUB6oiwCJqkQlNMpBmwJNXwMAWBVJcfjNGignnD9Rn/Dh+5SIYQcpV 873w== Received: by 10.50.45.162 with SMTP id o2mr7293311igm.0.1345980861998; Sun, 26 Aug 2012 04:34:21 -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 ex8csp396428igc; Sun, 26 Aug 2012 04:34:21 -0700 (PDT) Received: by 10.68.228.100 with SMTP id sh4mr26433912pbc.45.1345980861350; Sun, 26 Aug 2012 04:34:21 -0700 (PDT) Received: from mailout2.samsung.com (mailout2.samsung.com. [203.254.224.25]) by mx.google.com with ESMTP id rv1si27251664pbc.2.2012.08.26.04.34.20; Sun, 26 Aug 2012 04:34:21 -0700 (PDT) Received-SPF: neutral (google.com: 203.254.224.25 is neither permitted nor denied by best guess record for domain of thomas.abraham@linaro.org) client-ip=203.254.224.25; Authentication-Results: mx.google.com; spf=neutral (google.com: 203.254.224.25 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 mailout2.samsung.com (Oracle Communications Messaging Server 7u4-24.01(7.0.4.24.0) 64bit (built Nov 17 2011)) with ESMTP id <0M9D008041GZU0C0@mailout2.samsung.com>; Sun, 26 Aug 2012 20:34:20 +0900 (KST) X-AuditID: cbfee61b-b7faf6d00000476a-b5-503a09bcd9fd Received: from epmmp1.local.host ( [203.254.227.16]) by epcpsbgm2.samsung.com (EPCPMTA) with SMTP id 14.E9.18282.CB90A305; Sun, 26 Aug 2012 20:34:20 +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 <0M9D00AQQ1GN7UA0@mmp1.samsung.com>; Sun, 26 Aug 2012 20:34:20 +0900 (KST) From: Thomas Abraham To: linux-mmc@vger.kernel.org, devicetree-discuss@lists.ozlabs.org Cc: 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 v4 4/9] mmc: dw_mmc: lookup for optional biu and ciu clocks Date: Sun, 26 Aug 2012 17:22:02 +0530 Message-id: <1345981927-26359-5-git-send-email-thomas.abraham@linaro.org> X-Mailer: git-send-email 1.6.6.rc2 In-reply-to: <1345981927-26359-1-git-send-email-thomas.abraham@linaro.org> References: <1345981927-26359-1-git-send-email-thomas.abraham@linaro.org> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrJJMWRmVeSWpSXmKPExsVy+t9jAd09nFYBBg8beSy+fD3BZjHl8BcW ByaPO9f2sAUwRnHZpKTmZJalFunbJXBlfGjvYS44IVVxvaOFsYHxnWgXIyeHhICJxJ7Lz5gh bDGJC/fWs3UxcnEICSxilFjR9QPKaWOSmPDnA1gVm4CBxKOF79hBbBEBJ4klcycwgxQxC7xk lJi5ayYbSEJYwFtiZf9SsAYWAVWJA/c+MYHYvAKeEktv7GCDWKcksaH3KFicU8BL4saiVrCh QkA1x2d8Z5zAyLuAkWEVo2hqQXJBcVJ6rpFecWJucWleul5yfu4mRnAAPJPewbiqweIQowAH oxIPr0CpZYAQa2JZcWXuIUYJDmYlEd7v+4FCvCmJlVWpRfnxRaU5qcWHGKU5WJTEefn7DAOE BNITS1KzU1MLUotgskwcnFINjEY/U3Rk6/dX7a6NWHXdIEwvKZN/6R9b762aVc27e8VlmpzX fpspoxOU4MAqs/fPR39XuU9y3j92+jVVJR9+m2975vKhR/9SKmLDKh+8cS+2U659fexzsk2r hKXTy3D9P3phPDklq55JC/Zt1mljejrBxHmGZ9wzf7tqddW7r4ymJUyRSfmjxFKckWioxVxU nAgA3CH7cPwBAAA= X-Gm-Message-State: ALoCoQnwEVNVXTz/2SQ61e9LOTmwq3x3F0A7vl0oJ25XhoE+PGEM9q3S6AFgiC+5tQPGFQcB9zTD 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 */