From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932460AbcK1JdM (ORCPT ); Mon, 28 Nov 2016 04:33:12 -0500 Received: from relmlor2.renesas.com ([210.160.252.172]:35506 "EHLO relmlie1.idc.renesas.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1754284AbcK1JdE (ORCPT ); Mon, 28 Nov 2016 04:33:04 -0500 X-IronPort-AV: E=Sophos;i="5.31,563,1473087600"; d="scan'";a="226465712" Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=kuninori.morimoto.gx@renesas.com; Message-ID: <87vav89chw.wl%kuninori.morimoto.gx@renesas.com> From: Kuninori Morimoto Subject: [PATCH v3] clkdev: add devm_of_clk_get() User-Agent: Wanderlust/2.15.9 Emacs/24.3 Mule/6.0 MIME-Version: 1.0 (generated by SEMI-EPG 1.14.7 - "Harue") To: Russell King - ARM Linux , Stephen Boyd , Rob Herring , Linux-ALSA , Linux-DT , Michael Turquette , Linux-Kernel , Mark Brown , , Linux-ARM Content-Type: text/plain; charset="US-ASCII" Date: Mon, 28 Nov 2016 09:32:51 +0000 X-Originating-IP: [211.11.155.144] X-ClientProxiedBy: TY1PR01CA0137.jpnprd01.prod.outlook.com (10.174.224.141) To HK2PR0601MB1444.apcprd06.prod.outlook.com (10.165.182.150) X-MS-Office365-Filtering-Correlation-Id: cdf178dc-b9ca-4596-fef2-08d4177186c5 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001);SRVR:HK2PR0601MB1444; X-Microsoft-Exchange-Diagnostics: 1;HK2PR0601MB1444;3:pCh1TMoJr9EJRPcZtN+HBu0HTgMNm5vSZKSoE3mlpQdUdNV2g+EufqcQz8h0SAeVE8yoB1H/Ra49ZcliqLqPb5ZukBNOdP8iJ4g/dBcdnVXLzMCu0YTpRuxC8wLkE3REw9Eisw0/YV47UUqaD+g6A2BJ/YALdXhi+85P9nFFgwPxQ2zUzaez2dPIb/qvJMTkH5x4q9s5hSNCZFUkmWTFCGk0guqu2Gy/i71UhK5Hc+yDMPoSvm/1IPPdPZ3YmBkSuLZC9DiSkayMxU/hmyJEKQ==;25:4ygHHJisKFcPPN9CBri5zlcG0Bvxy2CjMRPwZHH7GZk90vV0JnYTp8gpK8hgDA6HxM7gm39REBG6lVtdsBuflk2u1WsTcSESzsbaNVJIGXZ/ISCIHQGGjcISYE9GS3Ya0l+T35xuWOuK6OtYnV6kKEkG69k6nMUQXiqNSqRReVJA0TcQp0ntexIQgUIGOXfbptBFUvJJNfQYxvgy4EnlBljiNF0Jb2PeIQhYt1cbBlNv+4t6TpSOseEgLFwNS7EjXab2v6GIkQgUPebfTE1PefcCVsR3rxfUdZdRJzyHPO70KfSTaTF5ocVG8GroaLYz3rdPHTijxry3TKqr0VSOUtBkIUNG8WMXGfRbS8skmEXHkIuBudzp9Im23LAzzYMG2ixCj6EUuc26IY6wQQHylAql56i/yloF9kW1fn78Yx1DagDIyTjEkHvOQdSmAwut1IxmqEzF0o3E814WOms2Cw== X-Microsoft-Exchange-Diagnostics: 1;HK2PR0601MB1444;31:zsfiZN0t06Vk4B1brCCcpSFwxyXvyJu3U9NbUKFVGBQgKSfpqkSBqihfn4BKdHKN3a8dm9n2eiHROejy9nwzl1YECwIwGhgpcSjgmYr4q11JrcQ5biiyIXw8EpF/szOrOr6+UnQXn1rrF4BNQhxsDzu9lgx7QH9BziqPLJ+0WNQJdSL+xZe+tWH8j8F9DqGEfrMDBl7g5WTSc5gtYv2Ttxd8QORR1EyU2vTbwAQfSRCDEPUDuVRsc5cVy1iUAYy9EpD4xLex0I35MWylVEp9eCa0XNMs6/5p36jivDNeodU=;20:ZtxO9m4RbPJv+P5Dmg5Pbp3OpOjQqccXwFI5Kt/62oWfxmtHQ3qF5udSupKxTGRtLe15jqCHSk3Is4S3eCus2E+gsMQHvQ3Bq6bCh6Q2UBOJiCm43liv6SMM0ZG2s83Iniw+m6aYyASl3Ef/Jh0lTdMNO8M7SVFZcIy5PcKhsSs+GXTsNVij7P6xgBcFkKznirKa8Xr0GgkAAtnB3gAvXFLfJtekVd8UZ0uA9P7EWmdT/BFh9ZZqxPpwEy+tbz91Z8kSs7InfDCK3JTPSPTui94+kK0jOrygoJVeq3iQr3D7dfU9sdJE3mWjsFhb7p/KEJVQ0CJBKzG/TLdJ8+qjhmddD+OfUxBxQDPl3OuALTo7CqP5fue02gcc90JX7EY7hk71NRzaL4B3aLC6PKXOF8ujMu1vGejE100Zz69XHKl3ZEA8k7xAP8k+TNqgoGdC0BwSS6ps5c2NZAKUQLvT0eg+hUi3oRvkSJz+ITP/8UhDE2R0Aw6Zkom0e8xew9Ck X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040361)(6060326)(6045199)(601004)(2401047)(8121501046)(5005006)(10201501046)(3002001)(6055026)(6061324)(6041248)(20161123555025)(20161123560025)(20161123562025)(20161123564025)(20161123558021)(6072148);SRVR:HK2PR0601MB1444;BCL:0;PCL:0;RULEID:;SRVR:HK2PR0601MB1444; X-Microsoft-Exchange-Diagnostics: 1;HK2PR0601MB1444;4:t61Y60D5tvg4KGC8edrLM+SJ/lBoXmvKRELp9ijHaoQlKG5R9YbfT4bUp2YlhYK9EE1kdZo/15rtZASxMwWPNyjYzWrRMvQ0btd9MKhaJbRB8HN8XBjDuHUqLjE+pdrcyLRzRQgGTEpnsj4o5vJrCKouMtIR7JHxvBh5UkNgPB0GHiyA/fDJ5Co/UR16MV3RcfY7IEUTyY/nwI/triD2tDQBQQA0x9aIRNOuWjPyPr7Oj9B2hPzNlBBuPECRVbkM9kaOLRJR+d3wDvhREjBgvu0Ui/5LAudgIfsXt5TiEib3GLjv6Gs091pAh0jFIszaUEwFjn1GOmDn++aOYxyy38juBTdpLLsjreLFgukMYuFRemg1y63QWWnb6UoudNvK0OT/kUDLnl5wiNLMu7hI6rdUBhlusha+U5lam6EcErqVJzez3uGinTCWjV8vP225cwT2c3QcGYv75foC7ZYJg5QfTSwEBr4nfN+mD4EpNe9HRAPXJGcCsDCpw29GXyitlqX55Y16X28TGkaTkkyRs5W4uwE0zhgpMtNrZNIBNNyl58t5MDuSkdckCaD5Danv+uzxR/pMxG9Z1p8knJAzZyRpLdaclafVT1BtNzUUdwpc9S9793m0MbPYOuHckbJLvlPhK+gDFoknmTtl1i+INZZo1UBvrg/ZtcPw1ajJrYvTfUpCwvo9tcO48BY4PPW2 X-Forefront-PRVS: 01401330D1 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(4630300001)(6009001)(7916002)(189002)(199003)(66066001)(305945005)(107886002)(39380400001)(5660300001)(6486002)(39410400001)(33646002)(733004)(39400400001)(50466002)(5001770100001)(68736007)(97736004)(39450400002)(36756003)(4001350100001)(2906002)(23726003)(6116002)(46406003)(7736002)(92566002)(8676002)(83506001)(3846002)(101416001)(38730400001)(86362001)(7846002)(53416004)(42186005)(105586002)(7416002)(106356001)(189998001)(50986999)(54356999)(81156014)(81166006)(47776003)(69596002)(921003)(1121003)(16060500001);DIR:OUT;SFP:1102;SCL:1;SRVR:HK2PR0601MB1444;H:morimoto-PC.renesas.com;FPR:;SPF:None;PTR:InfoNoRecords;MX:1;A:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;HK2PR0601MB1444;23:7ZSFV3pnSFOthABYyXsU+0XScYISrFvu7iIO+9h?= =?us-ascii?Q?PPmMdS2uaxf/FVoos7adK/j8piuYTBX3V8LUsKi9CVe4JcxWLOa+W5IuQNDK?= =?us-ascii?Q?efpsRqftiE8akKXmOP/w57Kzh04I8BX8Q2Xtd3LYtreih9uDMX6B2X7Ma1nx?= =?us-ascii?Q?XI57CrZZXBXfP5Rl1CSbxvoAO6MlpttPnfIifk527uMihS+V5Q3g0DM6qO29?= =?us-ascii?Q?twm1ZfcTJEhj7FSPL+HduB6ZbKJAUovxUurJz5EOhzQTY4K0mPTmYiwLW5eu?= =?us-ascii?Q?zcDAGfEOWWhKwmccPI+ry8IKFEYeCJlqhlU/V/xcUCb9lEKT8JkId8upuxUX?= =?us-ascii?Q?BTr7uABUkdYAIcC6msNonmQzetA7gKRpiAXI8oSVme6es3RjH42dA/TH7eco?= =?us-ascii?Q?lecArtqssEzKxsEYuxjF6AApq5h+4vgdKSdMmG1ny/lIU8lBMzc1+d/vPMIt?= =?us-ascii?Q?zelQEakby3GG7jhj+1XhP5sgNn0iyTxfbEK/ALo3waT02F/N3oQX8vcw+Mmt?= =?us-ascii?Q?MZTR4Vtn8mdgxqrDAO9Z3w7NZjBL5Nj2eSKvQhnT1tLjZ6GlEX4ENd4/XbtI?= =?us-ascii?Q?0y0wQLIpc/XRDA6yeow11JgBopv3geE/PV1953/rND9GCgJPQ6YtlJalNKIU?= =?us-ascii?Q?wZ34+XgJT7gkO9HDFzwKW+AvLxrPQg69W+FsekkXeIHTjvqhy7nGaiAdQIQ0?= =?us-ascii?Q?KT3SOBzLUNQM90XJWPZqnv7h/+e3N0g7O5Isj8lpCET7ZN13dljdoMlGR2uP?= =?us-ascii?Q?VhZMb5pjL6wnUUXlkHxFlXp6/EV8L7soDGcnlWZbRZR6q7x14w+nbdM/CWnC?= =?us-ascii?Q?OL1507u/DcEpDPY8O/9Nm7ynLMLg/yKyvXzJmTNv862iOPECz1qM71Y6Y5Jj?= =?us-ascii?Q?6GQNm2IE10ojFZHTahps9wFJmUQpzcUWWmqykd2JXRCEqKHQutR7JbJqQgVM?= =?us-ascii?Q?4C4mCMzOWJtkVpKtsDUx19RDnmxArN7v3hBKwj18J8krWcq2F2Ozs7+J8sG3?= =?us-ascii?Q?FzrjaACuK3D3HgtrEQH2WS//kAxjCQL/1IjgkcY9BrAGaaUwQGbvq6RIzj98?= =?us-ascii?Q?XkttmT42LkPkdCjy7Xj0kyxkhF62PWB33pCwbgJ0pGQPrQb14nmFNNv/BKEe?= =?us-ascii?Q?QVoUBJvWWC9velQOiz1uG10eeVYT8CdZ5d0F2McJBiS10c0fhC3hNNuFs3Fj?= =?us-ascii?Q?M7pU33gQrXlM1VTk275YTNMjYZaadFvTuKpKdMxr3CsKjk7Ii83KD5xDo5w?= =?us-ascii?Q?=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1;HK2PR0601MB1444;6:nMzbm7IAWzbOcrD5kF+49k5Xkpz+1dfVmomHhzq351shVC6+Rfid5hU8owULvvohYxPxnBfVneftir2QZAryq+C+IL1HpGQ9HDvPDKwptrjdocWPpa5xLl1umurXsBXw9XasBhZ6aqYUwZHIfXLivHJFOHyjVpuA1lf9hYNE86tGceBz0EY8+8QbWND8q5GGfrq1XO4GrlNVyRsFCjyXtoUUMKDOU1INRpUkEefszP55jib7wV7fay8K3Xedewvm0ALmsbyNNywCYA2QdJCFOnQ5hAjXSCOHAScr4tG5l8t7ppCK8v7pcSBwZOe3DFA3E4DZDmCWu1BJlHDQ5izRWcbUoR8SBbwopKEBScqNgqh2M3RLVo24kkZMEZchRfW00/fSaSGGvZ+/lUuh0SrmNCpwuqzlGjbYL3SGSeKryMJPlyyRNL86C2qfhVaZXt1ZyNxQ55GIUGqdpdWN4b3N71bx3/tPaUByemzuoMzYyk0w6yNadcqPzY3jB/bTyejD;5:5ngL3NEFR0SyUdJKEkdD3U1hXqUhvPn9YrWLk/hgWoQA0SmjISqGneeb76IYGf/GlotCZ+mm9R4QO6Kdhpr4WsWm8qS2qePMWvUgNijijAkdRjXSeghmXtQCkVpzx5Q5eRIInHnzAPTd22fhbC3Aow==;24:ZMOjcFvQH3DvIV5iv7wsOyipAqLpCmxDV425qMEMloqBC0fsOYkWC3BLZ4ddnItxaj3kWHuNxIhia6gi+4OEfQsJ9ERj9RMv+iDOwqiG1Ec= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;HK2PR0601MB1444;7:94zycvCgqopGvkbBpQbOyq9zwkUEHVdL4T68k7mAkjDXYRTKVksYuQnDRFy1tOIh6HCxLt3aLgcXZVoWJG7/1wXo+yAA81r8qnCuCR5nD7AqzE73qGJxhqG49b/4xhst1ipXuYoMkkDffSBBkCDu94/LAshx7uh7V8exkDPLGgRm9bePvF/gXFe5yxdYVPUsB5WRJOnRhQhl9fcz+6SK6H51gv0j3ZP0uD6lce+HtZ+S+DalnUrq5PcRbiPmonQNiV+Kg3QdaiH9kwjPUVFVLzo2ziNy32EC00dD0kBIYVi+zBbyJkseltgWoPKCXAue5z2uPJ6/oKr7wGWvo2t05Ufhnl1YxYOI1Sg1jlwSA2kd4+L6bOkinKyJEspljN0srAOk+Me2z9EoUl/0uSOpBRHT2VO2sC5FGWC74boUC5chh1MDk+9jTP5mh9v5dpVVhu6BxBFu5ze3ESRWInAYQw==;20:G3BS8u6raO6hp4DBLKw0Qxmnl3cuz6KZCLpEB5J/FXKmd44+/Kc4+RHzsA7FVXU0blN88q5n38AzXIFzxGIiyq+br8cDIyUNI37v/9kju3C2hKUZjRrwBSwKyexBa2eJ9qS5CQc7EERR1cLYpXwTMyxuRI2wb0VrFcIvJtLi1V4= X-OriginatorOrg: renesas.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Nov 2016 09:32:51.8752 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: HK2PR0601MB1444 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Kuninori Morimoto Current Linux has of_clk_get(), but doesn't have devm_of_clk_get(). This patch adds it. Signed-off-by: Kuninori Morimoto --- v2 -> v3 - implement in clk-devres.c, and reused existing devm_clk_release() drivers/clk/clk-devres.c | 21 +++++++++++++++++++++ include/linux/clk.h | 7 +++++++ 2 files changed, 28 insertions(+) diff --git a/drivers/clk/clk-devres.c b/drivers/clk/clk-devres.c index 8f57154..2449b25 100644 --- a/drivers/clk/clk-devres.c +++ b/drivers/clk/clk-devres.c @@ -53,3 +53,24 @@ void devm_clk_put(struct device *dev, struct clk *clk) WARN_ON(ret); } EXPORT_SYMBOL(devm_clk_put); + +struct clk *devm_of_clk_get(struct device *dev, + struct device_node *np, int index) +{ + struct clk **ptr, *clk; + + ptr = devres_alloc(devm_clk_release, sizeof(*ptr), GFP_KERNEL); + if (!ptr) + return ERR_PTR(-ENOMEM); + + clk = of_clk_get(np, index); + if (!IS_ERR(clk)) { + *ptr = clk; + devres_add(dev, ptr); + } else { + devres_free(ptr); + } + + return clk; +} +EXPORT_SYMBOL(devm_of_clk_get); diff --git a/include/linux/clk.h b/include/linux/clk.h index 123c027..1b713db 100644 --- a/include/linux/clk.h +++ b/include/linux/clk.h @@ -506,6 +506,8 @@ static inline void clk_disable_unprepare(struct clk *clk) #if defined(CONFIG_OF) && defined(CONFIG_COMMON_CLK) struct clk *of_clk_get(struct device_node *np, int index); +struct clk *devm_of_clk_get(struct device *dev, + struct device_node *np, int index); struct clk *of_clk_get_by_name(struct device_node *np, const char *name); struct clk *of_clk_get_from_provider(struct of_phandle_args *clkspec); #else @@ -513,6 +515,11 @@ static inline struct clk *of_clk_get(struct device_node *np, int index) { return ERR_PTR(-ENOENT); } +static inline struct clk *devm_of_clk_get(struct device *dev, + struct device_node *np, int index) +{ + return ERR_PTR(-ENOENT); +} static inline struct clk *of_clk_get_by_name(struct device_node *np, const char *name) { -- 1.9.1