From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754741AbdDKMHN (ORCPT ); Tue, 11 Apr 2017 08:07:13 -0400 Received: from mail-sn1nam01on0081.outbound.protection.outlook.com ([104.47.32.81]:17136 "EHLO NAM01-SN1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1754370AbdDKMHH (ORCPT ); Tue, 11 Apr 2017 08:07:07 -0400 Authentication-Results: spf=fail (sender IP is 192.88.168.50) smtp.mailfrom=nxp.com; nxp.com; dkim=none (message not signed) header.d=none;nxp.com; dmarc=fail action=none header.from=nxp.com; From: Dong Aisheng To: CC: , , , , , , , , , , , , , , , Subject: [RFC PATCH 2/3] clk: add managed version of clk_bulk_get Date: Wed, 12 Apr 2017 12:03:28 +0800 Message-ID: <1491969809-20154-3-git-send-email-aisheng.dong@nxp.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1491969809-20154-1-git-send-email-aisheng.dong@nxp.com> References: <1491969809-20154-1-git-send-email-aisheng.dong@nxp.com> X-EOPAttributedMessage: 0 X-Matching-Connectors: 131363860197692745;(91ab9b29-cfa4-454e-5278-08d120cd25b8);() X-Forefront-Antispam-Report: CIP:192.88.168.50;IPV:NLI;CTRY:US;EFV:NLI;SFV:NSPM;SFS:(10009020)(6009001)(336005)(39840400002)(39850400002)(39400400002)(39860400002)(39410400002)(39380400002)(39450400003)(2980300002)(1110001)(1109001)(339900001)(189002)(199003)(9170700003)(105606002)(6916009)(2351001)(2950100002)(106466001)(50226002)(33646002)(86362001)(305945005)(5660300001)(36756003)(76176999)(50466002)(8936002)(48376002)(356003)(53936002)(50986999)(7416002)(38730400002)(110136004)(81166006)(8676002)(97736004)(189998001)(5003940100001)(85426001)(47776003)(77096006)(104016004)(2906002)(4326008)(6666003)(8656002)(54906002)(217873001);DIR:OUT;SFP:1101;SCL:1;SRVR:CY1PR0301MB1291;H:tx30smr01.am.freescale.net;FPR:;SPF:Fail;MLV:ovrnspm;MX:1;A:1;PTR:InfoDomainNonexistent;LANG:en; X-Microsoft-Exchange-Diagnostics: 1;BL2FFO11FD017;1:ugXKwNe+uzT3ztpoRIZrI7ZOKGvEH5GzfPOW71FuM56Lyxq7IDFkst/sKVmDxfdqt3l0ULyurNj5On/aCyCHjiPmYZ3DotakIxkoY+4WYKPte50OVOQC8G9Us15dRqxY3fDhyYS2fFjQCQebYtdYSWPjWqSapE5u+9HpVOcptNffX3ZGs5p5OKCmD+UEUVPowuULNYpx5Krg0MlW3OZbm0DByjKC3DzGKBCQA3evtDP18IgERk5VA9d3zFTnqiSBwFU7fUA613u7WAUDacMjAuTQikg6EZNb5mqp1oIJzfbggqU71EkBJILjzBPc4DftIV8ARP71DVACb3hA86UmlHnh/pRP8pB6u/P+l7mKxMH80twgwkycafdqnbn+4DMIyEIfZo/4V3PH7/jtB5wES5AsJFm80OMqT1MbgOSj1GNoHkiDMEPraSx4RewAip+wgagWNpS+LLZglsdPwmmBQm8LSkhc3+FBYHYsT8F6++VJmPB1uvW5Bw9Q8otiPcIMtkh+Q02j4SfV3xu4yDnR6/EH6bGhlB6TpKa3ElkBk7ja8LS68FZYUL4EevejYfDy1piZUsdVJ2zbPUFrKZ9i0trjk8hgHDFcOmFSx6HJlSsAY6DxMYBN/vukGd5htAcW8pxTuP14ZJO9huZjN8TdPziQy6E5HaG/Ft7BCZ6oMpZhArOsQWztYfOLUz8k6LIjvVlUg3VkM6pN0/pAqW/1f4pg3ahPk2zOxactfFDOypQ= MIME-Version: 1.0 Content-Type: text/plain X-MS-Office365-Filtering-Correlation-Id: 27480851-96ca-41e0-5549-08d480d341df X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(2017030255120)(201703131430075)(201703131517081);SRVR:CY1PR0301MB1291; X-Microsoft-Exchange-Diagnostics: 1;CY1PR0301MB1291;3:o0O0h/+r2w8/mCBEgA/mrZ2aXQaLb6fhws29OKMGj5NiNaXRaqqfLCZd/Uwi66dQytL5NB/1GsDo+ucSN/IUCIgllWrIqLxqgbC/ib6zY76v5eJtcBAvhC94wKhl0YOwMAeDoWbBwwxGaYs9BfCiKtOFJ0g2Qz9O6LV4kGUiB3pRGMGWB+IRPrdP0InrHu0gafeg+R9swFkHMHRgrabrYJLRv9gwlQDle8n24Jh4jDE+mxmjSVOY6YtNAu7KOOBDpfAA5q03ki4zNy6RJJK6twrpStBpl/lcABxt/9I+EZOK0Zt1stt7zZ2/jZmcRlMtLfQ+2YUda0YFL/Lw6/yBHIwP5xwsPjl9D+YXbe2AitK6wO0WUkMNzY1wQ7biaUBskZRW+J5yZBuTbw4jaUyJJEJuVDSuB5ArzrKPGeZ+wa2yJrRQP7ygKVmGXH2TS74SGWi4PTW0RzfTw1LPe+7+JA== X-Microsoft-Exchange-Diagnostics: 1;CY1PR0301MB1291;25:lr6vz5l4OEXlXgl9/m+fhuqbEhj+HGw2QEZsIJbHWupwIj1oeNcagAQfBNiERqwn6xaqn5RlZ2cfycY7eEtbdT9Cza06uDes6aMxSQL4/QPUpXFWQW7uu8Piszk5cUvvOJ6j/iD/DFGb3a/6WBCJRR2ggGFjC/+XFoTM2SPM7D5EyMN0DlYEvCQ49GljhPKghhlGY4Tkzx3LLWgaOrERqp1VFeZo6vMe5iWV7Wwnn9L3JSJHB8fZEpia6t2z3sx2LWaLU/zp/NXfe+7keYKxHp6iEI0YLsOKeVKfI1PExPAL6NY+aKng8nt5kQRYpjm3u+iXYYexIs66oglWuRfdHweJkFGJ1+hE2gri5kzdjdViP1IfFHvVcGqN7NlOKx/WI1vJ4QSssiNYg7Piyqn4Bo4f921ZEyiz1mU39+ykeWA1yea7rvFhQo9JPbEXg0wsUcWYFuft4lpyeOFReq6/zQ==;31:02k2n5VXSF+m6VVU6txzFL9NuGWd5quDLOrHolw4gbvOjVtuCiaDqcbd3+2+YPJ0wZD+47sxUX4aVbUtTauxlmzZ3bNdnOCBeFeAUU6FqBs7I8mzVCQUXaIiE/uJ0CAo5o0fHNA78VRPC4zjm+Lpyn/wA1hxU+8po9gEedXhyouU8fXpB3bgV9I8xB2JEqhh6X47zKVCLrgUwOG8vpFM0J5zauhK1lFdTsm9H4sO5M018pDVYwHdDnmS1zeSlYqJad9/UO01PkGpRdRbzW/fveT1Ow0CDEDnVLsixLzAox4= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6095135)(601004)(2401047)(13017025)(13023025)(13018025)(13024025)(13015025)(5005006)(8121501046)(3002001)(10201501046)(93006095)(93001095)(6055026)(6096035)(201703131430075)(201703131448075)(201703131433075)(201703161259075)(20161123556025)(20161123565025)(20161123561025)(20161123563025);SRVR:CY1PR0301MB1291;BCL:0;PCL:0;RULEID:(400006);SRVR:CY1PR0301MB1291; X-Microsoft-Exchange-Diagnostics: 1;CY1PR0301MB1291;4:Zwyag9ZtWzBYTtsoUnA6g8SF/n6SGAXJekbxaU4/ghyjlBoHF6a5EfNaHOIpMV77BAZeedSYfJJnHX5VoTXh8zRcCFFmBhv9VcJugwHHV0vDgNZPJEZroTgNgtAINMxhIM6r2L1Udfdt9UGAcRU+zVGlIPpz3jzuESgCj8yW0RuFzH3rIIV5cAyFUaayvdk2Aj0LAETHED2LCF163tWPJ1uK5Fy283GPIvlC6gnsZ+j/SbnmL+PhEkGk26MHLoSwYIDHXUtlA2cdH1C3NUI9TTBqmTI90ZS65gOUroh1/6ZoH3dLqqVDdMpgolh7meMHbJ1b2gzkPs0qM5OB9yDAvGKhh5bIQ2mkm5k/7omfqOhV50zt4TwSCjnoRzVB7VKxZUfuPHER03X1nNZ5JD3VkrDx8j8/91EAj7TvnZ/QnIy+UNcdkG/kJGi6afDeMGD11SNoJtzk+lcdN8SgNiQgVyJYJzgKMXD27Eur3a9h85O2/jGSZl5mgAxru8XvQS6ihGXZr2uwxyGGEB451MqzGmaPy3/RqtBpKcpEYGKgv1LsuRf1IPROK+2uEDhlewgbQ3RPd/KQFPv250iuqjS7azGmtCcpHiql9mG6F/SGCZWqjbPwVtuz3/xb6ExUTBYM7bZzmw7UX3TgYpl9FpOa0HPdDC+Yr7QVOYlT8699hc4hXP7+HymGIS+n3rfFWDtSZCCziCXyQIdIPi0Bh5LIp3vSsOwVSQMLM0FyZAE2VqiajQsvuZ7+JlOkbEl0DLQ/ETIG9lKEOTN4GUWrUBVcTfLgrvpXlDhqChzdhPmOGKugvh8jiOdgaZ8TraTlWWMSslpyH0Jv/k5kSm0H5ZWeQNq4VljNMSEo5+tubF4qLGn8UnhKy3CWOtWdn4uArn49AGNyFmicko+dAAFotMpjQA== X-Forefront-PRVS: 0274272F87 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;CY1PR0301MB1291;23:uvvoMrLDfoX340dvxtxitdDOreQkRRA4wCiQ41j?= =?us-ascii?Q?BfiIEjk1U1yQRY43yWXxWzhxWstPqd1tEEV4Hno74CI0yyF+YTjSWfQLMFwo?= =?us-ascii?Q?a3NWUJbO8G7b+HaMvZyVZMmMvT2wDZg3AKy+tgWGZnU1gc4JXK6IW58ds1tZ?= =?us-ascii?Q?P4u5YJicZNNUuiZ31d/bwgsKeru1e6FbPoKB+RS8IrtJI3FTnwz/4T77Vjy+?= =?us-ascii?Q?kPjEo7zCSbLhH2Gl0+lFeeRW2YZc7ySBhZgAoxuVS/yCJL8Fp6y8+phYfQNZ?= =?us-ascii?Q?l5v7NZiO+nUBs3kLL4jdOOV+pzbpMkxPzzmKGP7lkttctVew7Fn1BDm5HQ5w?= =?us-ascii?Q?9T/zRFHQ8xdQTRgXW42mA2Cm9hrV4wmwfluYfOKGDmVFObZSs8DiPwNe6/5H?= =?us-ascii?Q?37r39LBmjzjJ1p3BknE++jhOoN7IaB9xVEvNUA2HSBCphqFOEd2HIsA/AFvX?= =?us-ascii?Q?eaVUSMI6pmYgLGmAI2KHdZh35M/T7gJHFSj0L/hTc0jRiaj9xXKfc6+6MU/S?= =?us-ascii?Q?YdubWIo7l0S8WXOGccVrMoJguqEG6odu24uW1HL4jNyv/UY37tjB/XvWTkIJ?= =?us-ascii?Q?MFAJGSuudNqzqz9ZolCrYioj8GAjwc2uA/xEg9KpkOxhDS7MbTFInFnKdiP8?= =?us-ascii?Q?+3e1gLRA+JfBwj5hieCJ9ePnEowxXz/O0ygy8M4qHqoVA4b28uT7plyjl2vm?= =?us-ascii?Q?RxlfQZu6XrLgdh+vI+K55/Bm9TcSa5KK+a5utT8KFgYBMwbm1DkG/cOAtmcz?= =?us-ascii?Q?GKS6EeWAxBAoPOucT3Vd6f7lGM3OMgBp9GsS481eMuzxjFjj/quEC/cE+Umh?= =?us-ascii?Q?0cBwIJspvv1/LTstThM/RQjPB34SVaVWb8LuOwx1V08ek0qTCqftrwo3VrVz?= =?us-ascii?Q?HGZDr/aVJ9f9qjemRtetpjB3DvtjmZvCTa4Ls01TUwsWO7It3t/IgiHWfLMl?= =?us-ascii?Q?r9q8S7QmOwUdCtlPDkEkAnmfCz/s1WGlB3yjLV44O6b4lZCUp51AyrvK0rHz?= =?us-ascii?Q?0qAirRLogY6vgrxcZAZQhBoDUFo7Vtmn637HuBovuYMWTgUmLITj7GihEiO3?= =?us-ascii?Q?VyIMJcq6d6KxkjYSt215jPtJ5UVVonH04cShXy7AchShkvvwa4nF1WLqshp1?= =?us-ascii?Q?Od51uC7Cpx/uDMhCdjTHatGtc9Ozcmftn/B25LAJB4/WF0qyxIk79mXn+cyy?= =?us-ascii?Q?HEfxTBh7atjTJFa/3Xx5RIcx2OuanWCPGwOnSfdmQqOH89ASG48BLF8kyFUC?= =?us-ascii?Q?A8TzKcg9ct3GSnikgPwpTrXvuoXbLMswMuo/NvTDf?= X-Microsoft-Exchange-Diagnostics: 1;CY1PR0301MB1291;6:zUK6y5W4FOoNhz+VvQ63OqGxQYdvnTRrjEitwosDAnzDrT6Vpcxqc0+7qS/N7GAH/KPn5hpAgJVGBkm9W7rBPvjVtqafqY9GMow7xrC6KnXE+WXj3WfXD/pN3mALPLi9Wh+P6/Y4tUdlmqjpmJ6Zc/8w/EgvEmwbpoPtQnYLILPjeiLdt7LLDCIe3Ek0vbx/XQd3MChvq84aWLt++r0Dy7PBx1osaZFH6vvn/AhUqydv31VSDJjZFreaNjeqp/uYMlQPGA7eByCDFZzj2FUBHHVpt9kdJLNUk6UEBB9LfiaN69Lb3rQn08bvamZig7OJq4hCmYIBGF/mrllgsJXMlMqhbqHzDBQhs0Bb/Mr3dd9KOw+9YjWZS4u6XxzIcK4FDMiCw+PHg36E+a7T4oQCdIz+BVH14Ze0MDNn1T0D7zXSW3IGNP7FfL1jn9o45hQ9vc3EQDQLDqKESzlMPsEOOQ==;5:N+sffoNNviohEVaAoHILLxheHb1rwRGr+sWV+WtY5x3CJpfuzU4gf5WhnKNk7YlQaplL+8xf7Dx9rq8qk/u0sojhMPDA3FHoc9SRsof4wIWRScCi/FOY1C48qiyZ2Y7dGaEhYNmeyTkI/mlmYo1+Te/z75E/XJNk+Ki18086lrK4kiSMVCbvEIzVyz9WyPMW;24:3MIE9BAvXY5xlfEYKJm66eg2TqEYR8ad3WoNvq1WKTr4C60CUjcuEGqxQrplsA6sS47+wqdfXDQbqr5ZiqdpXaon4gAzIcls64bshUgCBCo= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;CY1PR0301MB1291;7:EQCafYUXqHeCZX8/D86I+FK5Qq+Xa1er6/p5zpRmTvZIWEUueR6jxREM/VnKEPRd5cVrUKS5NK7u4uyLnoqEyvYbmi2k8Nxm/j+hcycZvA1lBHwUN8Vlo94T2GOVMOzaRdV6ECDfQXP54DDMotERzlQIH5ryoY47jnioqfxNy6gMAxjH5CqT+saEhKbbhmY8TVHqN8mZKO+xFymlZ720G5qC7xCGrbriiDTQsHzKY/YKyGHNnTmxUFHHJaxptRhjnIXhoSBII5UAlWYgIpru3CocjvlwPKDPZXuRfo43x2Qq0n3xxo8VAE9yzd9euUpa6tCy7G77WaqGwUlekB7Cvg== X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 Apr 2017 12:06:59.5508 (UTC) X-MS-Exchange-CrossTenant-Id: 5afe0b00-7697-4969-b663-5eab37d5f47e X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=5afe0b00-7697-4969-b663-5eab37d5f47e;Ip=[192.88.168.50];Helo=[tx30smr01.am.freescale.net] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY1PR0301MB1291 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This patch introduces the managed version of clk_bulk_get. Cc: Michael Turquette Cc: Stephen Boyd Cc: "Rafael J. Wysocki" Cc: Viresh Kumar Cc: Mark Brown Cc: Shawn Guo Cc: Fabio Estevam Cc: Sascha Hauer Cc: Anson Huang Cc: Robin Gong Cc: Bai Ping Cc: Leonard Crestez Cc: Octavian Purdila Signed-off-by: Dong Aisheng --- drivers/clk/clk-devres.c | 36 ++++++++++++++++++++++++++++++++++++ include/linux/clk.h | 22 +++++++++++++++++++++- 2 files changed, 57 insertions(+), 1 deletion(-) diff --git a/drivers/clk/clk-devres.c b/drivers/clk/clk-devres.c index 3a218c3..c7fb31d 100644 --- a/drivers/clk/clk-devres.c +++ b/drivers/clk/clk-devres.c @@ -34,6 +34,42 @@ struct clk *devm_clk_get(struct device *dev, const char *id) } EXPORT_SYMBOL(devm_clk_get); +struct clk_bulk_devres { + struct clk_bulk_data *clks; + int num_clks; +}; + +static void devm_clk_bulk_release(struct device *dev, void *res) +{ + struct clk_bulk_devres *devres = res; + + clk_bulk_put(devres->num_clks, devres->clks); +} + +int devm_clk_bulk_get(struct device *dev, int num_clks, + struct clk_bulk_data *clks) +{ + struct clk_bulk_devres *devres; + int ret; + + devres = devres_alloc(devm_clk_bulk_release, + sizeof(*devres), GFP_KERNEL); + if (!devres) + return -ENOMEM; + + ret = clk_bulk_get(dev, num_clks, clks); + if (!ret) { + devres->clks = clks; + devres->num_clks = num_clks; + devres_add(dev, devres); + } else { + devres_free(devres); + } + + return ret; +} +EXPORT_SYMBOL_GPL(devm_clk_bulk_get); + static int devm_clk_match(struct device *dev, void *res, void *data) { struct clk **c = res; diff --git a/include/linux/clk.h b/include/linux/clk.h index 1d05b66..3fc6010 100644 --- a/include/linux/clk.h +++ b/include/linux/clk.h @@ -278,11 +278,25 @@ struct clk *clk_get(struct device *dev, const char *id); * * clk_bulk_get should not be called from within interrupt context. */ - int __must_check clk_bulk_get(struct device *dev, int num_clks, struct clk_bulk_data *clks); /** + * devm_clk_bulk_get - managed get multiple clk consumers + * @dev: device for clock "consumer" + * @num_clks: the number of clk_bulk_data + * @clks: the clk_bulk_data table of consumer + * + * Return 0 on success, an errno on failure. + * + * This helper function allows drivers to get several regulator + * consumers in one operation with management, the clks will + * automatically be freed when the device is unbound. + */ +int __must_check devm_clk_bulk_get(struct device *dev, int num_clks, + struct clk_bulk_data *clks); + +/** * devm_clk_get - lookup and obtain a managed reference to a clock producer. * @dev: device for clock "consumer" * @id: clock consumer ID @@ -554,6 +568,12 @@ static inline struct clk *devm_clk_get(struct device *dev, const char *id) return NULL; } +static inline int devm_clk_bulk_get(struct device *dev, int num_clks, + struct clk_bulk_data *clks) +{ + return NULL; +} + static inline struct clk *devm_get_clk_from_child(struct device *dev, struct device_node *np, const char *con_id) { -- 2.7.4 From mboxrd@z Thu Jan 1 00:00:00 1970 From: aisheng.dong@nxp.com (Dong Aisheng) Date: Wed, 12 Apr 2017 12:03:28 +0800 Subject: [RFC PATCH 2/3] clk: add managed version of clk_bulk_get In-Reply-To: <1491969809-20154-1-git-send-email-aisheng.dong@nxp.com> References: <1491969809-20154-1-git-send-email-aisheng.dong@nxp.com> Message-ID: <1491969809-20154-3-git-send-email-aisheng.dong@nxp.com> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org This patch introduces the managed version of clk_bulk_get. Cc: Michael Turquette Cc: Stephen Boyd Cc: "Rafael J. Wysocki" Cc: Viresh Kumar Cc: Mark Brown Cc: Shawn Guo Cc: Fabio Estevam Cc: Sascha Hauer Cc: Anson Huang Cc: Robin Gong Cc: Bai Ping Cc: Leonard Crestez Cc: Octavian Purdila Signed-off-by: Dong Aisheng --- drivers/clk/clk-devres.c | 36 ++++++++++++++++++++++++++++++++++++ include/linux/clk.h | 22 +++++++++++++++++++++- 2 files changed, 57 insertions(+), 1 deletion(-) diff --git a/drivers/clk/clk-devres.c b/drivers/clk/clk-devres.c index 3a218c3..c7fb31d 100644 --- a/drivers/clk/clk-devres.c +++ b/drivers/clk/clk-devres.c @@ -34,6 +34,42 @@ struct clk *devm_clk_get(struct device *dev, const char *id) } EXPORT_SYMBOL(devm_clk_get); +struct clk_bulk_devres { + struct clk_bulk_data *clks; + int num_clks; +}; + +static void devm_clk_bulk_release(struct device *dev, void *res) +{ + struct clk_bulk_devres *devres = res; + + clk_bulk_put(devres->num_clks, devres->clks); +} + +int devm_clk_bulk_get(struct device *dev, int num_clks, + struct clk_bulk_data *clks) +{ + struct clk_bulk_devres *devres; + int ret; + + devres = devres_alloc(devm_clk_bulk_release, + sizeof(*devres), GFP_KERNEL); + if (!devres) + return -ENOMEM; + + ret = clk_bulk_get(dev, num_clks, clks); + if (!ret) { + devres->clks = clks; + devres->num_clks = num_clks; + devres_add(dev, devres); + } else { + devres_free(devres); + } + + return ret; +} +EXPORT_SYMBOL_GPL(devm_clk_bulk_get); + static int devm_clk_match(struct device *dev, void *res, void *data) { struct clk **c = res; diff --git a/include/linux/clk.h b/include/linux/clk.h index 1d05b66..3fc6010 100644 --- a/include/linux/clk.h +++ b/include/linux/clk.h @@ -278,11 +278,25 @@ struct clk *clk_get(struct device *dev, const char *id); * * clk_bulk_get should not be called from within interrupt context. */ - int __must_check clk_bulk_get(struct device *dev, int num_clks, struct clk_bulk_data *clks); /** + * devm_clk_bulk_get - managed get multiple clk consumers + * @dev: device for clock "consumer" + * @num_clks: the number of clk_bulk_data + * @clks: the clk_bulk_data table of consumer + * + * Return 0 on success, an errno on failure. + * + * This helper function allows drivers to get several regulator + * consumers in one operation with management, the clks will + * automatically be freed when the device is unbound. + */ +int __must_check devm_clk_bulk_get(struct device *dev, int num_clks, + struct clk_bulk_data *clks); + +/** * devm_clk_get - lookup and obtain a managed reference to a clock producer. * @dev: device for clock "consumer" * @id: clock consumer ID @@ -554,6 +568,12 @@ static inline struct clk *devm_clk_get(struct device *dev, const char *id) return NULL; } +static inline int devm_clk_bulk_get(struct device *dev, int num_clks, + struct clk_bulk_data *clks) +{ + return NULL; +} + static inline struct clk *devm_get_clk_from_child(struct device *dev, struct device_node *np, const char *con_id) { -- 2.7.4