From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751415AbdIKJZV (ORCPT ); Mon, 11 Sep 2017 05:25:21 -0400 Received: from mail-bn3nam01on0088.outbound.protection.outlook.com ([104.47.33.88]:36224 "EHLO NAM01-BN3-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751114AbdIKJZT (ORCPT ); Mon, 11 Sep 2017 05:25:19 -0400 Authentication-Results: spf=fail (sender IP is 192.88.168.50) smtp.mailfrom=nxp.com; arm.linux.org.uk; dkim=none (message not signed) header.d=none;arm.linux.org.uk; dmarc=fail action=none header.from=nxp.com; From: Dong Aisheng To: CC: , , , , , , Dong Aisheng , Russell King Subject: [PATCH V2 1/1] clk: bulk: add of_clk_bulk_get() Date: Mon, 11 Sep 2017 17:25:08 +0800 Message-ID: <1505121908-5782-1-git-send-email-aisheng.dong@nxp.com> X-Mailer: git-send-email 2.7.4 X-EOPAttributedMessage: 0 X-Matching-Connectors: 131495955158300832;(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)(39860400002)(39380400002)(2980300002)(1109001)(1110001)(339900001)(199003)(189002)(50986999)(6666003)(106466001)(8656003)(47776003)(68736007)(5660300001)(105606002)(86362001)(50466002)(498600001)(5003940100001)(104016004)(33646002)(36756003)(54906002)(48376002)(85426001)(97736004)(81166006)(81156014)(8936002)(4326008)(53936002)(2906002)(50226002)(2351001)(356003)(77096006)(189998001)(305945005)(6916009)(8676002)(110136004);DIR:OUT;SFP:1101;SCL:1;SRVR:CY4PR03MB3319;H:tx30smr01.am.freescale.net;FPR:;SPF:Fail;PTR:InfoDomainNonexistent;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: 1;BN1AFFO11FD031;1:9QqPF3QHzgxojUAiUrTMuwVg3drgDiUIIH/X7WaFZ3crceilJaHtAbggmLZRmB9DjF2FJbPsYir7Vc+ydaUBjBKFDZzWt+BQTSpPHnW2lf1PmP6SpL+8IgtYMHipAfcY MIME-Version: 1.0 Content-Type: text/plain X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 189f683c-7e0b-4252-173f-08d4f8f70311 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(300000500095)(300135000095)(300000501095)(300135300095)(300000502095)(300135100095)(22001)(300000503095)(300135400095)(2017052603199)(201703131430075)(201703131517081)(300000504095)(300135200095)(300000505095)(300135600095)(300000506095)(300135500095);SRVR:CY4PR03MB3319; X-Microsoft-Exchange-Diagnostics: 1;CY4PR03MB3319;3:Y+YYmh+0ihycPac4i3l1nsszzFIFMninFC2X6jhb8jz6O0w3x+F5XwElB4Zh2X8PwdS6E/wnBJA+T3VQ1BXbFNqmu3KmCsUdkhQEn1Og5D6GOUeRKQhgaXQFxvJWf0pmWABKj+vO0x8xitGXq1uMWCKnpzO3AFUX7Re5K1w0pMRgXx4ndBvQFpGi32gu1j1qMs1yd39yStc0PvvwS4wKmA0qj5xEhEunVYR7pNjgbH9GIqjyc94WhZIVlBK1zTEsbykeItTeygvgZiJycIuiVAnu5GQH30dxl0eg4RC9Bn3fqpnZzMyG2OdTpYrelzs1cSDrssIxDcb0/jlOa9UNTIr3iVviH7eRLKIbtK4kUlk=;25:LyEDS22420b2aAEaoTsbStk6qE9JvoMgDLR1KDx7XbpBaTyqlZ9EFmW1hDEpY4Mwl52ZapXAGMHmKgESFSYtSEsOls13GEJ+2mN3OyKSdiNSdEQ079s8zUUo6VMF5YsU39lJKBCeG0nBfUI8AgYPYvXBWfyGKLnfW5f1io4guCl0OpUlq5tDvmumsoED8uDYlsei8T+mXzkv1Js4wE6OC12+/4LWTnwgdhiqk2V4DvwPujPsWFRDwoEM4iCR4vPewOHKtFKgIURhE0G5ilXaM3JEeixA4jFO0LFNhH9v/TjoGhSU3+nPsmUm5Rd9R32a53e6zG/7j4/l/0QFyT4jgg== X-MS-TrafficTypeDiagnostic: CY4PR03MB3319: X-Microsoft-Exchange-Diagnostics: 1;CY4PR03MB3319;31:aY7dKQhIGAs8J8MoxFpkBJxhqiuYYJpm/8VGDLnZaJs8iNqcAZ9SDENGtYHQGhWA9T+UbIpcbKAAiVrcyRRthiIJ6J+34xz6pjeTIUzrMgZ2msOB2+ezqwPV1mU5m8qoWZkUxlReg3VBCADmRYM79viEQfc5rMJPREjAeBJ4sHbhe5/6ElQJfie0wuYYNzWq/ufGI0H0ZIpJsOKckGzppPDle7XHcJeEwo8w/4T36vA=;4:3h4CfMjNobEjUvSVzy7h47QRuhvgrOtH/gCx6Wj8O2LSlgoC5xD6ZYDK/DsmauE2GwPCxjYzSVWx851Lfj921JXcMQaOU0/NWXiy/Obk+KmyZimBvRO2n4rLZPFKnF39sCDWs+XCvzi0zZTxhbFtTExLMOkCGNbig2hrabEZYtHmJwOGxOrT0oTSW5WaG9G7b6RYb7pH0MMb4PCXO1qoBlMstbgm4Pg/br0Ze/LAfwO5cpY2bcBJEbXnhKpIz9atxzGH0VjzagPOtMOXJTS52TThyr8PKfiHOR8DHoyMCrM= X-Exchange-Antispam-Report-Test: UriScan:(185117386973197); X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6095135)(2401047)(5005006)(8121501046)(93006095)(93001095)(100000703101)(100105400095)(3002001)(10201501046)(6055026)(6096035)(20161123559100)(201703131430075)(201703131433075)(201703131448075)(201703161259150)(201703151042153)(20161123565025)(20161123561025)(20161123556025)(20161123563025)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095);SRVR:CY4PR03MB3319;BCL:0;PCL:0;RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(400006)(100000804101)(100110200095)(100000805101)(100110500095);SRVR:CY4PR03MB3319; X-Forefront-PRVS: 04270EF89C X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;CY4PR03MB3319;23:ujYJ4Jy0OCGVyx6nZ27xcVKPcmW1+5UhcGudiArqg?= =?us-ascii?Q?ZLPbdghN3WpkOg6UMNMwPp27O9bGX2xpZ8uyIqpVvLB4/ISn/+GzM781vCW5?= =?us-ascii?Q?QnsOHZtAVQFjxkKF1zsJa8aAKdk7vzikSufQaWwad4w1jE0aHOeKFe61Mydv?= =?us-ascii?Q?NGMwcudJEDPC7+uPUJ/TrjjE6Sn78SlfRE140XzmEtrCLKu6o6zlbJUkv8u5?= =?us-ascii?Q?qp5AvPNIIg0tBtblrCi0TsX/k134NZ3otN3rSJ/fhsd+Y0Wp9bupxeiu7ika?= =?us-ascii?Q?a7+yVAWC5bptfo8PKE4Xiw2MtazynqJXvIauCPLISL0kM9DkAwsYB2J64MCf?= =?us-ascii?Q?ZTUHOFy4KSF2WYLRF60LWxbov8BBCznyuliX68f9YB4CSujSmIDSb5lvbUo/?= =?us-ascii?Q?fUrj9d1x+Dz0213bgMeGOkIQf7T9mJk0wim7703n5Yw1mpK7VHmvweFNTdMe?= =?us-ascii?Q?4voZPMKqzEq+iHLhfa+BTLEEhP+Y+ahaA2hjazZ5hY9kh83r2yb3IJeufdBa?= =?us-ascii?Q?kCwGGG39eK9a8+nxxzP8ds+wr8P/QWJiyD1lQYF+1YfIQhHx/M3tFCQT2j3s?= =?us-ascii?Q?shFPpSFW6yUUHE/oVC0LhPi9qwKIg25KL9MFCjgorq4CJJKj23Fk+XhjkqmO?= =?us-ascii?Q?mzXhV9eBDAELKihLlKY/2zRaguctG7BO/W6E4x9SGnu+58vr+icMQIhaIQCO?= =?us-ascii?Q?RIIRg0He13tmcKS57YkkNz+6nhMdFtnplaHpX12d9WUg97XskMAcKesjNmZN?= =?us-ascii?Q?H99JVDzGKYXQhwWPgpX1dB4x1BawLJoEPWauJqP28CWG79FQmxhIxCJBHkOT?= =?us-ascii?Q?DPV8TdpIWIstmdEtUv8M1sB2/9CyIwnkukrocFodkI/oaFcGNjzrrgJRaGSw?= =?us-ascii?Q?0bp8ytGXlhflcT2/0rLr2Z4Hlg+wNwm3l9mjV8wyXJ/GRlm4560Ilxew6yTp?= =?us-ascii?Q?oUEL+Br+XJiDKYaUZ6W1cRFseDl8k4/qXc5AeEKcI8ZuhEAqr+PHyPJoHsfh?= =?us-ascii?Q?qsHMK7Pm4deWb0HQDvetM6sHWRjz7uE/bodcBYNplyxq5wfjdZwFB1OounlU?= =?us-ascii?Q?vJorWg7clbEu4TDvYOG99WAr/FO?= X-Microsoft-Exchange-Diagnostics: 1;CY4PR03MB3319;6:5ythc4xPkUI/p7EYpYW0AZw59/ZxyPoHxv3kcZRyaDx7ZXNXZ/XOTGafgwntB2bIHVkfCb0bYkz5spTMTvVWskzklq+f6PUX0AhlcmDnegHmFb0/PXRyD6mDprv3No9gYrccQmfyCZxMMwRhY9BXyz28wfbHOYGYiaVtILsKcpk7s3CQVZRj6t5k04iwRalAvH4ZHOiL9F6AQWwu7GlwyTA/BCNMDJgdCjEqwjGxtKQhmug5HiTc4lA4W58dwZNSSI8fxxYtL5o2tj7XpXSFOGVlKf59UzJbozldxH5rVhl9WyEgBoBNNmoXiSrbyEFbBZSkK09HLLIdZxleXnIvBQ==;5:e9OJBMkFIGoCLJMGnoVleGXPxMxyk+UUWLMvKcrcuAvU7fc5PGrUfvIpsTpao9opAVX/D3NhXzbkgiL8MPhUsrB0uKb8yFB1Y08BMO1WGG82Ajgm5gxg3UcWLhuGpEer2UTSPVYfaihscjj96cV2wg==;24:n7QEHqKPHVMH2/AZOcjMtM9ejU56RB6a7A6raEa/K+FdyA4PgI1oelHZAUOVZHtkP6hDKTp1JT+s0Lcg3zB+JefVNebQ0lhccv3fFwy228Q=;7:uezSVBne2Y0ZhMDzWpDNfI3Z9/vp3poCba1C9bQkeo/iAMTnyjsMtpuS6/QioHFAC3XkWK7ApsXS+IKL7NU4QnW5Qr5r6Q8HTsjNAKW4p27iMVOdUjLqkZ3hQZZTJd9OYAVyUJ+KV9Ri8gvk63c53b0eVyxL2n4Z5N5SSMnBqeNmijJioRSzRA+Jh3KMIbBjLlSyKGWdeLry3zQJIxrmmRDxF4CmcQ64IiYxzbY/Ngo= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 Sep 2017 09:25:15.6428 (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: CY4PR03MB3319 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 'clock-names' property is optinal in DT, so of_clk_bulk_get() is introduced here to handle this for DT users without 'clock-names' specified. Cc: Stephen Boyd Cc: Michael Turquette Cc: Russell King Reported-by: Shawn Guo Signed-off-by: Dong Aisheng --- Changes since v1: * using %pOF instead of full_name --- drivers/clk/clk-bulk.c | 31 +++++++++++++++++++++++++++++++ include/linux/clk.h | 8 ++++++++ 2 files changed, 39 insertions(+) diff --git a/drivers/clk/clk-bulk.c b/drivers/clk/clk-bulk.c index c834f5a..896aa3b 100644 --- a/drivers/clk/clk-bulk.c +++ b/drivers/clk/clk-bulk.c @@ -19,6 +19,37 @@ #include #include #include +#include + +#if defined(CONFIG_OF) && defined(CONFIG_COMMON_CLK) +int __must_check of_clk_bulk_get(struct device_node *np, int num_clks, + struct clk_bulk_data *clks) +{ + int ret; + int i; + + for (i = 0; i < num_clks; i++) + clks[i].clk = NULL; + + for (i = 0; i < num_clks; i++) { + clks[i].clk = of_clk_get(np, i); + if (IS_ERR(clks[i].clk)) { + ret = PTR_ERR(clks[i].clk); + pr_err("%pOF: Failed to get clk index: %d ret: %d\n", + np, i, ret); + clks[i].clk = NULL; + goto err; + } + } + + return 0; + +err: + clk_bulk_put(i, clks); + + return ret; +} +#endif void clk_bulk_put(int num_clks, struct clk_bulk_data *clks) { diff --git a/include/linux/clk.h b/include/linux/clk.h index 91bd464..c5281b3 100644 --- a/include/linux/clk.h +++ b/include/linux/clk.h @@ -658,10 +658,18 @@ static inline void clk_disable_unprepare(struct clk *clk) } #if defined(CONFIG_OF) && defined(CONFIG_COMMON_CLK) +int __must_check of_clk_bulk_get(struct device_node *np, int num_clks, + struct clk_bulk_data *clks); struct clk *of_clk_get(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 +static int of_clk_bulk_get(struct device_node *np, int num_clks, + struct clk_bulk_data *clks) +{ + return ERR_PTR(-ENOENT); +} + static inline struct clk *of_clk_get(struct device_node *np, int index) { return ERR_PTR(-ENOENT); -- 2.7.4