From patchwork Tue Jul 17 10:38:58 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: 10045 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 BD4C123E3D for ; Tue, 17 Jul 2012 10:24:40 +0000 (UTC) Received: from mail-yx0-f180.google.com (mail-yx0-f180.google.com [209.85.213.180]) by fiordland.canonical.com (Postfix) with ESMTP id 768DBA18635 for ; Tue, 17 Jul 2012 10:24:40 +0000 (UTC) Received: by yenq6 with SMTP id q6so199708yen.11 for ; Tue, 17 Jul 2012 03:24:40 -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=B8c3LOjCfxo4k4g1bkHkHjXpRaKSpau3bmdNB/1BDsw=; b=XDo4A6bpqyw0QjUyfzD4+rKJo1ZPFxS8teHXCNO7kA7zMCx3r5gyul2fUSH8W4HRQD xMSfsNJtpXrCgROaysMplMG865fde5Ssjrge2Lz088VNwTEvDoUSh/RRyc1Kiln/JlO+ +kORXZU6Il41e3PfWKQ4cuDVZJYXYP1uKtxF8KChLQ5t+zzqQrcuScHBaFLBlO87oxpR NFXlAXHa1z24/2bJCRJIQ89gLsFEwy9VCiy3IanE/d5crgyPzrOgwN+gvAa6eDF3F3fj X7qJnVvaWbrlxiNopiEx6je6XNcVZ5dQW6GEcbdLShcKQ4+pprXTNbvFw+MYs7RMjSUE ukKQ== Received: by 10.50.193.196 with SMTP id hq4mr793511igc.57.1342520679827; Tue, 17 Jul 2012 03:24:39 -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 lc2csp17460ibb; Tue, 17 Jul 2012 03:24:39 -0700 (PDT) Received: by 10.68.223.138 with SMTP id qu10mr5305176pbc.50.1342520678791; Tue, 17 Jul 2012 03:24:38 -0700 (PDT) Received: from mailout2.samsung.com (mailout2.samsung.com. [203.254.224.25]) by mx.google.com with ESMTP id tv8si22530753pbc.182.2012.07.17.03.24.38; Tue, 17 Jul 2012 03:24:38 -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 (mailout2.samsung.com [203.254.224.25]) by mailout2.samsung.com (Oracle Communications Messaging Server 7u4-24.01(7.0.4.24.0) 64bit (built Nov 17 2011)) with ESMTP id <0M7A008UZVL1BIL0@mailout2.samsung.com> for patches@linaro.org; Tue, 17 Jul 2012 19:24:37 +0900 (KST) X-AuditID: cbfee61b-b7f566d000005c8a-f9-50053d656bd5 Received: from epmmp1.local.host ( [203.254.227.16]) by epcpsbgm2.samsung.com (EPCPMTA) with SMTP id 1A.9C.23690.56D35005; Tue, 17 Jul 2012 19:24:37 +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 <0M7A00HRCVKVG150@mmp1.samsung.com> for patches@linaro.org; Tue, 17 Jul 2012 19:24:37 +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 3/9] mmc: dw_mmc: lookup for optional biu and ciu clocks Date: Tue, 17 Jul 2012 16:08:58 +0530 Message-id: <1342521538-12790-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+NgFnrMJMWRmVeSWpSXmKPExsVy+t9jAd1UW9YAg7WbRS2mHP7C4sDocefa HrYAxigum5TUnMyy1CJ9uwSujN8r1jIWfJKo2HN9AlsD4wmRLkYODgkBE4nd58y7GDmBTDGJ C/fWs3UxcnEICSxilDjyfjUrhDOXSWLb/EPsIFVsAgYSjxa+A7NFBJwklsydwAxSxCxwh1Hi 0ayTjCAJYQEPib3rZjOD2CwCqhKPX9wAa+AV8JT4f2AtM8Q6JYkNvUeZQGxOgWCJ0833wWqE BAIkvi1rZ5rAyLuAkWEVo2hqQXJBcVJ6rpFecWJucWleul5yfu4mRrDXn0nvYFzVYHGIUYCD UYmH94cla4AQa2JZcWXuIUYJDmYlEd7VJkAh3pTEyqrUovz4otKc1OJDjNIcLErivCbeX/2F BNITS1KzU1MLUotgskwcnFINjK6+7GfPi7bpuMQ6lwUvKBbVtJv0v/2Q9ZzzBo3ijPdfht1M 9FL5J20b82vhefXE+CsnHQ8Vee2yd2xy+Ldb51r6puPmX0tKnW/N+yCx5GZZucr9C/LXTY4p dq7pnqikaHrwRZKFX62Yf3vxCrUpB0yVFi0sN6i7lyG76k7nt2jdVYs28G1Zp8RSnJFoqMVc VJwIAE4HXy/2AQAA X-TM-AS-MML: No X-Gm-Message-State: ALoCoQlkESM2QkxN3peaswTcAI6ifbqWO19o/GYsyYay76KqOGlVYNViADhWlg2fNDIgoAc/zkx+ 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 | 39 ++++++++++++++++++++++++++++++++++++--- include/linux/mmc/dw_mmc.h | 4 ++++ 2 files changed, 40 insertions(+), 3 deletions(-) diff --git a/drivers/mmc/host/dw_mmc.c b/drivers/mmc/host/dw_mmc.c index cd58063..ebd22d8 100644 --- a/drivers/mmc/host/dw_mmc.c +++ b/drivers/mmc/host/dw_mmc.c @@ -1953,13 +1953,30 @@ 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); @@ -2109,6 +2126,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 +2169,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 */