From patchwork Fri Apr 25 09:08:12 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chanwoo Choi X-Patchwork-Id: 4058331 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 889CFBFF02 for ; Fri, 25 Apr 2014 09:12:00 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id B68AE203A9 for ; Fri, 25 Apr 2014 09:11:59 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id CA5892012E for ; Fri, 25 Apr 2014 09:11:58 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752183AbaDYJL5 (ORCPT ); Fri, 25 Apr 2014 05:11:57 -0400 Received: from mailout3.samsung.com ([203.254.224.33]:48805 "EHLO mailout3.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752307AbaDYJIV (ORCPT ); Fri, 25 Apr 2014 05:08:21 -0400 Received: from epcpsbgr2.samsung.com (u142.gpu120.samsung.co.kr [203.254.230.142]) by mailout3.samsung.com (Oracle Communications Messaging Server 7u4-24.01 (7.0.4.24.0) 64bit (built Nov 17 2011)) with ESMTP id <0N4K009NDXDU0P70@mailout3.samsung.com>; Fri, 25 Apr 2014 18:08:18 +0900 (KST) Received: from epcpsbgm2.samsung.com ( [172.20.52.115]) by epcpsbgr2.samsung.com (EPCPMTA) with SMTP id 78.40.14563.2062A535; Fri, 25 Apr 2014 18:08:18 +0900 (KST) X-AuditID: cbfee68e-b7fd86d0000038e3-7b-535a2602080f Received: from epmmp1.local.host ( [203.254.227.16]) by epcpsbgm2.samsung.com (EPCPMTA) with SMTP id FC.B0.25708.2062A535; Fri, 25 Apr 2014 18:08:18 +0900 (KST) Received: from chan.10.32.193.11 ([10.252.81.195]) by mmp1.samsung.com (Oracle Communications Messaging Server 7u4-24.01 (7.0.4.24.0) 64bit (built Nov 17 2011)) with ESMTPA id <0N4K007UIXDRE270@mmp1.samsung.com>; Fri, 25 Apr 2014 18:08:18 +0900 (KST) From: Chanwoo Choi To: myungjoo.ham@samsung.com, kyungmin.park@samsung.com Cc: rafael.j.wysocki@intel.com, nm@ti.com, cw00.choi@samsung.com, jkosina@suse.cz, labbe.montjoie@gmail.com, linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 3/5] devfreq: Add devm_devfreq_{register,unregister}_opp_notfier function Date: Fri, 25 Apr 2014 18:08:12 +0900 Message-id: <1398416894-6782-4-git-send-email-cw00.choi@samsung.com> X-Mailer: git-send-email 1.8.0 In-reply-to: <1398416894-6782-1-git-send-email-cw00.choi@samsung.com> References: <1398416894-6782-1-git-send-email-cw00.choi@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFmpjkeLIzCtJLcpLzFFi42JZI2JSrMukFhVscHSPqMX1L89ZLXbPWcxi cbbpDbvF+gUL2Swu75rDZvG59wijxe3GFWwWb36cZbJ4vOItuwOnx85Zd9k9Fu95yeTRt2UV o8eZBUfYPY7f2M7k8XmTXABbFJdNSmpOZllqkb5dAlfGnM332QtWSVVMenaTvYGxW6yLkZND QsBE4vnr00wQtpjEhXvr2boYuTiEBJYySuybfosZpqhvxxKoxCJGiV8T2tkhnCYmiXlb9rGD VLEJaEnsf3GDDcQWETCX2LX0J5jNLLCcUWLr3DAQW1ggWuLf0ceMIDaLgKrEz3WzWUFsXgEX iabHP9khtslJfNjzCMzmFHCVaP/5FqxGCKim8fErsMUSAuvYJfYv+sIEMUhA4tvkQyxdjBxA CVmJTQegrpaUOLjiBssERuEFjAyrGEVTC5ILipPSi4z0ihNzi0vz0vWS83M3MQLj4PS/Z307 GG8esD7EmAw0biKzlGhyPjCO8kriDY3NjCxMTUyNjcwtzUgTVhLnXfQwKUhIID2xJDU7NbUg tSi+qDQntfgQIxMHp1QD4zLHluAn305+Omu30fTe/szA/KA7oaGvTd1i93METNlhdmTaxsmx LZOTLdgLlOrclTZ5rAv7ffBom8qpJ8WXaq+zbZ53+MX5M6UmAjwNyRt69AMW190vKDzbKfyI LeLp8X2JlX1bjur5ZPxZvsb76HLvxR0VT7Lv8dSuMbFSnVtuvUPR20p/rhJLcUaioRZzUXEi AIjjO2+ZAgAA X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrMIsWRmVeSWpSXmKPExsVy+t9jAV0mtahggy9reC2uf3nOarF7zmIW i7NNb9gt1i9YyGZxedccNovPvUcYLW43rmCzePPjLJPF4xVv2R04PXbOusvusXjPSyaPvi2r GD3OLDjC7nH8xnYmj8+b5ALYohoYbTJSE1NSixRS85LzUzLz0m2VvIPjneNNzQwMdQ0tLcyV FPISc1NtlVx8AnTdMnOAzlJSKEvMKQUKBSQWFyvp22GaEBripmsB0xih6xsSBNdjZIAGEtYw ZszZfJ+9YJVUxaRnN9kbGLvFuhg5OSQETCT6dixhg7DFJC7cWw9kc3EICSxilPg1oZ0dwmli kpi3ZR87SBWbgJbE/hc3wDpEBMwldi39CWYzCyxnlNg6NwzEFhaIlvh39DEjiM0ioCrxc91s VhCbV8BFounxT3aIbXISH/Y8ArM5BVwl2n++BasRAqppfPyKfQIj7wJGhlWMoqkFyQXFSem5 RnrFibnFpXnpesn5uZsYwVH2THoH46oGi0OMAhyMSjy8E2Qjg4VYE8uKK3MPMUpwMCuJ8M6Q iAoW4k1JrKxKLcqPLyrNSS0+xJgMdNVEZinR5HxgAsgriTc0NjEzsjQyN7QwMjYnTVhJnPdg q3WgkEB6YklqdmpqQWoRzBYmDk6pBsb8FUYRmalPDBn0e7OUnGZofm7QyZzO7H7+2uX1LuH/ Nxubr0le8YL90bP/8gWCUlOOBwk/P/NFvfyfCPeKw1pK3740KbVZe1RFM/Gbie2O/77LTsvJ 4Uvr3sPn/rPnrhUUSTQVDry/t2TmK9aNk+KV69cun80QI5/iJac+b4lmp8QmqV/mqUosxRmJ hlrMRcWJAPRLjAv2AgAA 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 patch add resource-managed function for devfreq opp as following functions. The devm_devfreq_register_opp_notifier() manages automatically the registration of devfreq opp using device resource management. - devm_devfreq_register_opp_notifier - devm_devfreq_unregister_opp_notifier() Signed-off-by: Chanwoo Choi --- drivers/devfreq/devfreq.c | 48 +++++++++++++++++++++++++++++++++++++++++++++++ include/linux/devfreq.h | 14 ++++++++++++++ 2 files changed, 62 insertions(+) diff --git a/drivers/devfreq/devfreq.c b/drivers/devfreq/devfreq.c index 0b80b60..3439406 100644 --- a/drivers/devfreq/devfreq.c +++ b/drivers/devfreq/devfreq.c @@ -1293,6 +1293,54 @@ int devfreq_unregister_opp_notifier(struct device *dev, struct devfreq *devfreq) return ret; } +static void devm_devfreq_opp_release(struct device *dev, void *res) +{ + devfreq_unregister_opp_notifier(dev, *(struct devfreq **)res); +} + +/** + * devm_ devfreq_register_opp_notifier() + * - Resource-managed devfreq_register_opp_notifier() + * @dev: The devfreq user device. (parent of devfreq) + * @devfreq: The devfreq object. + */ +int devm_devfreq_register_opp_notifier(struct device *dev, + struct devfreq *devfreq) +{ + struct devfreq **ptr; + int ret; + + ptr = devres_alloc(devm_devfreq_opp_release, sizeof(*ptr), GFP_KERNEL); + if (!ptr) + return -ENOMEM; + + ret = devfreq_register_opp_notifier(dev, devfreq); + if (ret) { + devres_free(ptr); + return ret; + } + + *ptr = devfreq; + devres_add(dev, ptr); + + return 0; +} +EXPORT_SYMBOL(devm_devfreq_register_opp_notifier); + +/** + * devm_devfreq_unregister_opp_notifier() + * - Resource-managed devfreq_unregister_opp_notifier() + * @dev: The devfreq user device. (parent of devfreq) + * @devfreq: The devfreq object. + */ +void devm_devfreq_unregister_opp_notifier(struct device *dev, + struct devfreq *devfreq) +{ + WARN_ON(devres_release(dev, devm_devfreq_opp_release, + devm_devfreq_dev_match, devfreq)); +} +EXPORT_SYMBOL(devm_devfreq_unregister_opp_notifier); + MODULE_AUTHOR("MyungJoo Ham "); MODULE_DESCRIPTION("devfreq class support"); MODULE_LICENSE("GPL"); diff --git a/include/linux/devfreq.h b/include/linux/devfreq.h index 45c29db..90f95a3 100644 --- a/include/linux/devfreq.h +++ b/include/linux/devfreq.h @@ -241,6 +241,10 @@ extern int devfreq_register_opp_notifier(struct device *dev, struct devfreq *devfreq); extern int devfreq_unregister_opp_notifier(struct device *dev, struct devfreq *devfreq); +extern int devm_devfreq_register_opp_notifier(struct device *dev, + struct devfreq *devfreq); +extern void devm_devfreq_unregister_opp_notifier(struct device *dev, + struct devfreq *devfreq); #if IS_ENABLED(CONFIG_DEVFREQ_GOV_SIMPLE_ONDEMAND) /** @@ -317,6 +321,16 @@ static inline int devfreq_unregister_opp_notifier(struct device *dev, return -EINVAL; } +static inline int devm_devfreq_register_opp_notifier(struct device *dev, + struct devfreq *devfreq) +{ + return -EINVAL; +} + +static inline void devm_devfreq_unregister_opp_notifier(struct device *dev, + struct devfreq *devfreq) +{ +} #endif /* CONFIG_PM_DEVFREQ */ #endif /* __LINUX_DEVFREQ_H__ */