From patchwork Wed Aug 29 10:48:10 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: 11018 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 32A6E23EFF for ; Wed, 29 Aug 2012 10:30:21 +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 E7205A188FF for ; Wed, 29 Aug 2012 10:29:48 +0000 (UTC) Received: by mail-iy0-f180.google.com with SMTP id j25so734260iaf.11 for ; Wed, 29 Aug 2012 03:30:20 -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=BVmIpa25mywbn40/G5L0CxZU/okVYY8TMojt9lkdd7A=; b=bzfIZNfLbWkOusun8vVUV3vB7KP9swWm1Z0eyClCbNsfyDU2GuGmkZPDGi/qiVxDQB nUhy4rjprsBmqKWzLujXyZaDUAJ7yH84A9mdkTEqyM/A2yqwiyPfeYNrZl1uKnDTCfo5 Gq39gffg5PxqlGb5MrzZgP2ryg4IXRq6kMUUV6v1AaPa2u114Bt6AyfbntXDJYOSzA0y v06tLk7gU2STrya1MewILF0qTMG5h41sN3X4OmABNedhoOwmlwcUC2Hmud+BtsmCbeyO axgKKtTrLKJgygW/16g9reHHuHEPOoCH9QeXQomhEtH8NoKVy4WZ3mMJUVf1Fw4wO+Ie KVVw== Received: by 10.50.237.41 with SMTP id uz9mr1037563igc.43.1346236220630; Wed, 29 Aug 2012 03:30:20 -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 ex8csp77422igc; Wed, 29 Aug 2012 03:30:20 -0700 (PDT) Received: by 10.68.203.34 with SMTP id kn2mr3589327pbc.144.1346236219608; Wed, 29 Aug 2012 03:30:19 -0700 (PDT) Received: from mailout4.samsung.com (mailout4.samsung.com. [203.254.224.34]) by mx.google.com with ESMTP id ip5si41674632pbc.318.2012.08.29.03.30.19; Wed, 29 Aug 2012 03:30:19 -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 epcpsbgm2.samsung.com (epcpsbgm2 [203.254.230.27]) by mailout4.samsung.com (Oracle Communications Messaging Server 7u4-24.01(7.0.4.24.0) 64bit (built Nov 17 2011)) with ESMTP id <0M9I00CPJIHKH311@mailout4.samsung.com>; Wed, 29 Aug 2012 19:30:18 +0900 (KST) X-AuditID: cbfee61b-b7faf6d00000476a-83-503def3aff20 Received: from epmmp2 ( [203.254.227.17]) by epcpsbgm2.samsung.com (EPCPMTA) with SMTP id E8.2F.18282.A3FED305; Wed, 29 Aug 2012 19:30:18 +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 <0M9I004F3IHPXG70@mmp2.samsung.com>; Wed, 29 Aug 2012 19:30:18 +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, 29 Aug 2012 16:18:10 +0530 Message-id: <1346237295-7116-5-git-send-email-thomas.abraham@linaro.org> X-Mailer: git-send-email 1.6.6.rc2 In-reply-to: <1346237295-7116-1-git-send-email-thomas.abraham@linaro.org> References: <1346237295-7116-1-git-send-email-thomas.abraham@linaro.org> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrOJMWRmVeSWpSXmKPExsVy+t9jQV2r97YBBtNOclh8+XqCzWLK4S8s Dkwed67tYQtgjOKySUnNySxLLdK3S+DK6NjUxVbwQ6pi92+OBsaZYl2MnBwSAiYSv+70sEPY YhIX7q1n62Lk4hASmM4osf5tCytIQkigjUmi+VgBiM0mYCDxaOE7sAYRASeJJXMnMIM0MAs0 MklsXLiTDSQhLOAtMXvidCYQm0VAVWLNhHawOK+Ah8TbWeuYIbYpSWzoPQpWwyngKfFu5RU2 iGUeEr/vrWSbwMi7gJFhFaNoakFyQXFSeq6RXnFibnFpXrpecn7uJkaw959J72Bc1WBxiFGA g1GJh/cCt22AEGtiWXFl7iFGCQ5mJRHe1FdAId6UxMqq1KL8+KLSnNTiQ4zSHCxK4rz8fYYB QgLpiSWp2ampBalFMFkmDk6pBkYLw/9JMtqTCy9XBSy+GG1QvOiEw3Szpf37trSKBXR4HH+v 9s/ktYF/07b5HQ1Hn67a1s4XeTV/Z8Xr1H/cE6es2mCnyDrlgPPMr5/1XvR7z/CbdHN9otWt m3MiZ1ZPe5f7ktnavcL/W57m9mitfYeuZv5+a5MkweMpKirz8lyhCc8MpfnHtz1WYinOSDTU Yi4qTgQAmcX9sfoBAAA= X-Gm-Message-State: ALoCoQkUTMZUNgIEwhrZiGWX7LHHeC9VhbkfEvOneq0sszuos+5zT7v2N+4zR8kaerUj5OuCF6xx 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 | 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 227c42e..90c7c7b 100644 --- a/drivers/mmc/host/dw_mmc.c +++ b/drivers/mmc/host/dw_mmc.c @@ -1960,18 +1960,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. @@ -2116,6 +2136,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); @@ -2149,6 +2179,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 */