From patchwork Mon Nov 3 03:53:02 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Amit Kachhap X-Patchwork-Id: 5213671 Return-Path: X-Original-To: patchwork-linux-pm@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.19.201]) by patchwork2.web.kernel.org (Postfix) with ESMTP id 207A5C11AC for ; Mon, 3 Nov 2014 04:01:50 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 3F279201BB for ; Mon, 3 Nov 2014 04:01:49 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 8637F201E4 for ; Mon, 3 Nov 2014 04:01:47 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752365AbaKCEBp (ORCPT ); Sun, 2 Nov 2014 23:01:45 -0500 Received: from mailout1.samsung.com ([203.254.224.24]:60926 "EHLO mailout1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752033AbaKCEBp (ORCPT ); Sun, 2 Nov 2014 23:01:45 -0500 Received: from epcpsbgr3.samsung.com (u143.gpu120.samsung.co.kr [203.254.230.143]) by mailout1.samsung.com (Oracle Communications Messaging Server 7u4-24.01 (7.0.4.24.0) 64bit (built Nov 17 2011)) with ESMTP id <0NEG00E9Z36V6OE0@mailout1.samsung.com>; Mon, 03 Nov 2014 13:01:43 +0900 (KST) Received: from epcpsbgm2.samsung.com ( [172.20.52.123]) by epcpsbgr3.samsung.com (EPCPMTA) with SMTP id 6A.EE.18484.62EF6545; Mon, 03 Nov 2014 13:01:43 +0900 (KST) X-AuditID: cbfee68f-f791c6d000004834-da-5456fe267a8a Received: from epmmp2 ( [203.254.227.17]) by epcpsbgm2.samsung.com (EPCPMTA) with SMTP id E5.79.09430.62EF6545; Mon, 03 Nov 2014 13:01:42 +0900 (KST) Received: from chromebld-server.sisodomain.com ([107.108.73.106]) by mmp2.samsung.com (Oracle Communications Messaging Server 7u4-24.01(7.0.4.24.0) 64bit (built Nov 17 2011)) with ESMTPA id <0NEG00BUJ320LR40@mmp2.samsung.com>; Mon, 03 Nov 2014 13:01:42 +0900 (KST) From: Amit Daniel Kachhap To: linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, linux-pm@vger.kernel.org Cc: kgene.kim@samsung.com, pankaj.dubey@samsung.com, Amit Daniel Kachhap , Lee Jones Subject: [PATCH 04/12] mfd: exynos-pmu: Register exynos-pmu driver as a mfd driver Date: Mon, 03 Nov 2014 09:23:02 +0530 Message-id: <1414986790-11940-5-git-send-email-amit.daniel@samsung.com> X-Mailer: git-send-email 1.7.9.5 In-reply-to: <1414986790-11940-1-git-send-email-amit.daniel@samsung.com> References: <1414986790-11940-1-git-send-email-amit.daniel@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFrrKLMWRmVeSWpSXmKPExsWyRsSkWlf9X1iIwczzzBYNV0MsehdcZbO4 //Uoo8Wmx9dYLT73HmG0mHF+H5PFoq1f2B3YPe5c28PmsXlJvUffllWMHp83yQWwRHHZpKTm ZJalFunbJXBl9E45yVqwTLLi2551LA2M00W7GDk5JARMJH68OscIYYtJXLi3nq2LkYtDSGAp o8SNSauYYYquvd7DApGYzihxdN8mqKoJTBJrl14Cq2ITMJb4uXM/O4gtIpAusWbRbrAiZoE2 RokZnR0sIAlhgRCJk+cfgTWwCKhKrJ23E8zmFXCXOLfqCWsXIwfQOgWJOZNsQMKcAh4SJ/uu s4LYQkAlk949ZwKZKSHQzy4x+8ZGqDkCEt8mH2KB6JWV2HQA6mpJiYMrbrBMYBRewMiwilE0 tSC5oDgpvchYrzgxt7g0L10vOT93EyMwtE//e9a/g/HuAetDjAIcjEo8vAXbw0KEWBPLiitz DzGaAm2YyCwlmpwPjKC8knhDYzMjC1MTU2Mjc0szJXHehVI/g4UE0hNLUrNTUwtSi+KLSnNS iw8xMnFwSjUwnkrv4LzwZ2ay7t/+c0VHLb1fS6eZWNv9fJx5dabqh2XMJlaPbzNYrDQ3cT4n 9TmW4d93v2UMK18kWjTX91xhnuR5qVNh06KSVR6r7SesXlDC8LmqhNF+g+wMTWOhtY8j55yb s4JZLN9zz9pekykrlvX1vX3RsG/n7q0Zf5VqZz0qOnpJP3r6FSWW4oxEQy3mouJEAKi1pSpo AgAA X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFprPIsWRmVeSWpSXmKPExsVy+t9jQV21f2EhBu+uW1g0XA2x6F1wlc3i /tejjBabHl9jtfjce4TRYsb5fUwWi7Z+YXdg97hzbQ+bx+Yl9R59W1YxenzeJBfAEtXAaJOR mpiSWqSQmpecn5KZl26r5B0c7xxvamZgqGtoaWGupJCXmJtqq+TiE6DrlpkDdICSQlliTilQ KCCxuFhJ3w7ThNAQN10LmMYIXd+QILgeIwM0kLCGMaN3yknWgmWSFd/2rGNpYJwu2sXIySEh YCJx7fUeFghbTOLCvfVsXYxcHEIC0xklju7bBOVMYJJYu/QSM0gVm4CxxM+d+9lBbBGBdIk1 i3aDFTELtDFKzOjsABslLBAicfL8I7AGFgFVibXzdoLZvALuEudWPWHtYuQAWqcgMWeSDUiY U8BD4mTfdVYQWwioZNK750wTGHkXMDKsYhRNLUguKE5KzzXSK07MLS7NS9dLzs/dxAiOnGfS OxhXNVgcYhTgYFTi4S3YHhYixJpYVlyZe4hRgoNZSYS3ci1QiDclsbIqtSg/vqg0J7X4EKMp 0FETmaVEk/OBUZ1XEm9obGJuamxqaWJhYmapJM57sNU6UEggPbEkNTs1tSC1CKaPiYNTqoGx dfHBYzt2Fc85uX2ndoafQndTF/uFObevvRM4yfZzFlevhf2CRzX1G5f535k9sXli5w+N7Rbx vPPUH7g1HTPQbVr4cUnR4l979v2ola0+en1Od1XJtzLdxSed5q/6LJVUv/1Xjb+jIs+PhSp/ dyw4vjAgnoOvn/964lcpL3fJJCvOxrnLJx01UWIpzkg01GIuKk4EAGoPwWSyAgAA DLP-Filter: Pass X-MTR: 20000000000000000@CPGS X-CFilter-Loop: Reflected Sender: linux-pm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pm@vger.kernel.org X-Spam-Status: No, score=-7.5 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_HI, RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP This can be used later to probe and configure PMU client drivers like pm_domain etc. A global structure pmu_dev_client_data is created to pass exynos-pmu platform data to all the clients. Currently the data passed is register base addresses. Although the exynos-pmu driver also provides the sysreg interfaces to provide register base addresses but this is costlier than readl/writel, so both the interfaces are provided to mfd based exynos-pmu client drivers. Cc: Lee Jones Reviewed-by: Pankaj Dubey Signed-off-by: Amit Daniel Kachhap --- drivers/mfd/exynos-pmu.c | 25 +++++++++++++++++++++++++ include/linux/mfd/samsung/exynos-pmu.h | 5 +++++ 2 files changed, 30 insertions(+) diff --git a/drivers/mfd/exynos-pmu.c b/drivers/mfd/exynos-pmu.c index 07019f0..c46f3f5 100644 --- a/drivers/mfd/exynos-pmu.c +++ b/drivers/mfd/exynos-pmu.c @@ -11,12 +11,19 @@ #include #include +#include #include +#include #include #include #define PMU_TABLE_END (-1U) +enum pmu_mfd_list { + MFD_POWER_DOMAIN, + MFD_MAX, +}; + struct exynos_pmu_conf { unsigned int offset; unsigned int val[NUM_SYS_POWERDOWN]; @@ -33,6 +40,8 @@ struct exynos_pmu_data { struct exynos_pmu_context { struct device *dev; const struct exynos_pmu_data *pmu_data; + struct mfd_cell cells[MFD_MAX]; + struct pmu_dev_client_data mfd_data; }; static void __iomem *pmu_base_addr; @@ -482,6 +491,8 @@ static int exynos_pmu_probe(struct platform_device *pdev) const struct of_device_id *match; struct device *dev = &pdev->dev; struct resource *res; + struct mfd_cell *cell; + int ret; res = platform_get_resource(pdev, IORESOURCE_MEM, 0); pmu_base_addr = devm_ioremap_resource(dev, res); @@ -506,6 +517,20 @@ static int exynos_pmu_probe(struct platform_device *pdev) platform_set_drvdata(pdev, pmu_context); + /* Initialize and invoke mfd clients */ + cell = &pmu_context->cells[MFD_POWER_DOMAIN]; + cell->name = "exynos-pmu-domain"; + pmu_context->mfd_data.mem_base_addr = pmu_base_addr; + pmu_context->mfd_data.mem_size = resource_size(res); + cell->platform_data = &pmu_context->mfd_data; + cell->pdata_size = sizeof(pmu_context->mfd_data); + ret = mfd_add_devices(&pdev->dev, pdev->id, pmu_context->cells, MFD_MAX, + NULL, 0, NULL); + if (ret) { + dev_err(&pdev->dev, "fail to register client devices\n"); + return ret; + } + dev_dbg(dev, "Exynos PMU Driver probe done\n"); return 0; } diff --git a/include/linux/mfd/samsung/exynos-pmu.h b/include/linux/mfd/samsung/exynos-pmu.h index a2ab0d5..d2f4083 100644 --- a/include/linux/mfd/samsung/exynos-pmu.h +++ b/include/linux/mfd/samsung/exynos-pmu.h @@ -19,6 +19,11 @@ enum sys_powerdown { NUM_SYS_POWERDOWN, }; +struct pmu_dev_client_data { + void __iomem *mem_base_addr; + unsigned int mem_size; +}; + extern void exynos_sys_powerdown_conf(enum sys_powerdown mode); #endif /* __EXYNOS_PMU_H */