From patchwork Fri Sep 7 09:39:16 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: 11224 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 5C4B223EFF for ; Fri, 7 Sep 2012 09:20:37 +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 CD22DA18D66 for ; Fri, 7 Sep 2012 09:20:36 +0000 (UTC) Received: by ieak11 with SMTP id k11so4359132iea.11 for ; Fri, 07 Sep 2012 02:20:36 -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=uliWuAQ6P8YsWJuD2wIKYSCqdSkn54d+X/an8ols9xM=; b=DML4tXw+Ucctr7RPFMNFFnbAUnN42St3XBE8GZSofpaSUjU26ulQ7YNabLaLJtbJTr CPDTBQTBsV2DDOOaKpR+enNaW1kw5GJ/ex4w9g4bhr1TMb7FE5o3wGRfYRgKPrQtB7BX F2jWXhPkAkH+PnxwviZKN0Wj1zG/fyjt9L3yMGefsL7DkEnxtq2y8AdeTgGkr6umMMbS JY5ik93E5jncTlh9Ue1dL3fs+OtiHKvttBGV72nVnlajfGU15Vxe7mG+a4Y6VIk70zqq IMj2YXATfvgJnJZ2CVoDBeUwdcVrXM7DOrFLubAmyd6hA1MtEZdib7m057dSA4Vgek0c 2bLw== Received: by 10.50.45.162 with SMTP id o2mr7642155igm.0.1347009636249; Fri, 07 Sep 2012 02:20:36 -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 ex8csp368489igc; Fri, 7 Sep 2012 02:20:35 -0700 (PDT) Received: by 10.66.85.133 with SMTP id h5mr7885117paz.10.1347009634377; Fri, 07 Sep 2012 02:20:34 -0700 (PDT) Received: from mailout4.samsung.com (mailout4.samsung.com. [203.254.224.34]) by mx.google.com with ESMTP id sb7si8031109pbc.31.2012.09.07.02.20.33; Fri, 07 Sep 2012 02:20:34 -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 <0M9Z00A573A7ZYK0@mailout4.samsung.com>; Fri, 07 Sep 2012 18:20:33 +0900 (KST) X-AuditID: cbfee61b-b7f586d000007adc-3e-5049bc60cb28 Received: from epmmp1.local.host ( [203.254.227.16]) by epcpsbgm2.samsung.com (EPCPMTA) with SMTP id 0B.77.31452.06CB9405; Fri, 07 Sep 2012 18:20:32 +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 <0M9Z00FM9395F060@mmp1.samsung.com>; Fri, 07 Sep 2012 18:20:32 +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: Fri, 07 Sep 2012 15:09:16 +0530 Message-id: <1347010756-9773-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+t9jAd2EPZ4BBtfvWVt8+XqCzWLK4S8s Dkwed67tYQtgjOKySUnNySxLLdK3S+DKuDbpJXPBHemKtltHmRoY74p1MXJySAiYSMx4eoYR whaTuHBvPVsXIxeHkMAiRoklCxezgCSEBNqYJPZPzwOx2QQMJB4tfMcOYosIOEksmTuBGaSB WaCRSWLjwp1sIAlhAW+J2ROnM4HYLAKqEr2r5jGD2LwCHhL/F99hh9imJLGh9yhYDadAsMTT M3NYIZYFSFx6NIFtAiPvAkaGVYyiqQXJBcVJ6blGesWJucWleel6yfm5mxjB/n8mvYNxVYPF IUYBDkYlHl6LKx4BQqyJZcWVuYcYJTiYlUR4v2zzDBDiTUmsrEotyo8vKs1JLT7EKM3BoiTO 63TOLkBIID2xJDU7NbUgtQgmy8TBKdXAyPnxh1tR4tYPXR5nnL5JyUr6rvVh7/bK933J8Kp9 w2z1xTmXJrYK/t5+s/DnBEeuXSLmMx/HpJUGcZRMZHr94abi7vh5gbd/VmdHsE75tDXZrqEs ZJPE1zj5zOsJYsf2hP93vh8WsWhTgeW5S1vUc9sPTWuOk1eaocO57bzdHfEZkUtn8fQsU2Ip zkg01GIuKk4EAFDZztz7AQAA X-Gm-Message-State: ALoCoQlZqtfxmQ80X23FAIBg9yA+6EPI9ZFH7pZVS6yMdAXsU7InK7d6huQg4hcSxwTdh2Z7W7QW 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 | 52 +++++++++++++++++++++++++++++++++++++++++-- include/linux/mmc/dw_mmc.h | 4 +++ 2 files changed, 53 insertions(+), 3 deletions(-) diff --git a/drivers/mmc/host/dw_mmc.c b/drivers/mmc/host/dw_mmc.c index 227c42e..de45ad2 100644 --- a/drivers/mmc/host/dw_mmc.c +++ b/drivers/mmc/host/dw_mmc.c @@ -1960,13 +1960,42 @@ 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"); + clk_put(host->biu_clk); + 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"); + clk_put(host->ciu_clk); + 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 +2145,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 +2189,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 */