From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754963AbdEHOEb (ORCPT ); Mon, 8 May 2017 10:04:31 -0400 Received: from mail-bn3nam01on0062.outbound.protection.outlook.com ([104.47.33.62]:54139 "EHLO NAM01-BN3-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1750925AbdEHOE1 (ORCPT ); Mon, 8 May 2017 10:04:27 -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: , , , , , , , , , , , , , , , , , , , Russell King Subject: [PATCH V2 3/3] cpufreq: imx6q: refine clk operations Date: Mon, 8 May 2017 22:03:53 +0800 Message-ID: <1494252233-21074-4-git-send-email-aisheng.dong@nxp.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1494252233-21074-1-git-send-email-aisheng.dong@nxp.com> References: <1494252233-21074-1-git-send-email-aisheng.dong@nxp.com> X-EOPAttributedMessage: 0 X-Matching-Connectors: 131387258628365092;(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)(39380400002)(39400400002)(39860400002)(39410400002)(39850400002)(39840400002)(39450400003)(2980300002)(1109001)(1110001)(339900001)(199003)(189002)(54534003)(9170700003)(85426001)(7416002)(2906002)(305945005)(498600001)(189998001)(54906002)(5660300001)(104016004)(8656002)(38730400002)(110136004)(48376002)(5003940100001)(53936002)(50466002)(77096006)(105606002)(2351001)(106466001)(33646002)(356003)(8936002)(50226002)(86362001)(6666003)(39060400002)(2950100002)(76176999)(50986999)(6916009)(81166006)(47776003)(4326008)(36756003)(8676002)(32563001);DIR:OUT;SFP:1101;SCL:1;SRVR:BN3PR0301MB0899;H:tx30smr01.am.freescale.net;FPR:;SPF:Fail;MLV:ovrnspm;A:1;MX:1;PTR:InfoDomainNonexistent;LANG:en; X-Microsoft-Exchange-Diagnostics: 1;BN1BFFO11FD004;1:wB5g+ZsG9DU9GMAYsy240wzJfgALKCX9Xh8GN1yWA63QEePTt2f7AGj0TfUHb8bwhG67jBUpBGvRwb4TXUnZsy3+BrbZ5EXlqqMNpkW+bGdLcxrRC5bZIctsAevbeDf1Szzmmz7+jkXxi6/RNk8eh1ijONe5b8+z9fhmpMoDDRdHrVcB4tYKAZ/3ncG5N8OT7ir5tvBt0KmBOS0tCmS8ZKcgf78ucB18VvqSdzA5bBZHDfe9XHSaJ1rcjOvYIYkOFUfAQBugUwV1d+pv9bxFA+3a152FdQ1E1wLLjrbB1JDSLLyD2LADmEGJhP/0914u/VQ7DazO6UQNVuzipcB01vBJkIRUe97lM9Dnod5+1eBk7klr4CnjdUO1gYrXzKkENe3y9enXLiSlT8yslmVTYARTqCn4guBJt7A0f9Fj6IWE5Uy6CoWI7WQ7VDpzRBqc7j79ajag+sbG+LpwzUdkRrRf1cdWZwvtEEz57/Snn/7J/n1qS8Fq1DD7BIeMzRUJ+BHarRUPpMDWBC0ZmKGVGJJhIRti51BoyA0n4Bk2b+j1QuufGD7pIR9awMP1+gUYHIgjVhTS2MFHdpgPEXAwA1hFcPci8kzr+I6oFU6zKDXWDfDQkH85cyQs3517ywDs MIME-Version: 1.0 Content-Type: text/plain X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 8b51b26e-cc9f-4f5f-501c-08d4961b20f2 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(201703131430075)(201703131517081);SRVR:BN3PR0301MB0899; X-Microsoft-Exchange-Diagnostics: 1;BN3PR0301MB0899;3:oCJUMWY8lvb+aPua8Vv9Ht2ktTj86WooycwIiR0+zPSdI5Ow9jrfXASQqnxswPNxPx54nVsmFUsXKASiK1tiZIoSRo91Ge68ehiDDO5vTdebxnq0NzvUHghahobtCHpk0pfdFl1uZEmc0GahBRrbvDlE0YJN1hYXRiSt20zKEjqji6TJE8PkP/1xgf7snrGAfOStj3grA7QAXBENbbA+69Gj+2HVR1XLZ6ZamlLcX2A2yytJk42wOFBbgPy+R5upZ9FUVQ6VVr6MkSo4rVGabqM5x1LrSFzsxutng5sKBmmESk8UDIBYMTJ0uYw8fW+i/JQ/sqKwv2+vy14QZT9HOsPXE+36nTJFEN3rGNTcUxI+6bYM1tFM7JG8XQZTMuU6exTh0GtjtegL12xvWIhLVrkcUM0lGmWrUqTlM4PU4uHqAuZ2MdIWUW8oENxLG96w;25:EsEXu+gnxOK1Bw4UOAadCPyncrU3OUg0aRpwU7vTeSbBumEQSHIND6t41/SPECz8EBoGa0lhQ1wAkIZEGadYP8AMRVvX9ZLZ1GBf7cyUBZ3foidsgxSo/JLvIT8Z5Mwd5H6BMGnbs6QcAIAsmwDalLvlfbpvBKomMac2FKfRvJznFZMy0482kxqQAs6G3DmOA0dxTrSV8VofNEhOT+OjUob6KeTwaIaNHy+GwFvZtKAX+xSiWJ6f9KcJo2mgNmbY9D8JHO6rY5uDsuWBikr6FFF9SBEPzJDw6hmtl9CH4cE3awRcwPzBZK5lsjt5lKEtNLGrcPqLG4MjVs4UaRMge6hTBYxBdDWbadYGXo4l3zXi2SUY6Ftug+YJBFvPkfOSN5/7AuzIHML7NxYhqgo99GUzYr8xC92yZd8w33iVPb/atjJAwOKIkxlZfms9dcI3QgdXRjZsB0HlLA+u25Zk/w== X-Microsoft-Exchange-Diagnostics: 1;BN3PR0301MB0899;31:ZbZc7Ed0PQHweC9gQOUt5u/WYSn0vsifK+19G678uBcclZb704tmkPvgseHLWT6SaSvKoyzG3sgQf3N7icYLtulvWvGwnLjO1K6KXs/uEMIBkzHCLA0+r+rZa+JZodb7fjZ4ZPrunVwIF5P3fKfb3lhtNd7z99eQpaZkiW6mlGmMGGSr/+fZ/cdt4+cO7X/5B5vL9UKAnKruEQJL+UWSTc1TTBRATwUDIX91iq6MWpZeMwtk9XnNx+GOQ+Pr7XB6DbqUd1lVHgeIl9xvcNKPcA== 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)(5005006)(13017025)(13024025)(13023025)(13015025)(13018025)(8121501046)(3002001)(93006095)(93001095)(10201501046)(6055026)(6096035)(20161123565025)(201703131430075)(201703131448075)(201703131433075)(201703161259150)(201703151042153)(20161123561025)(20161123559100)(20161123556025)(20161123563025);SRVR:BN3PR0301MB0899;BCL:0;PCL:0;RULEID:(400006);SRVR:BN3PR0301MB0899; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;BN3PR0301MB0899;4:kf65T/8Xy3aBVyLU1nS7UvDlYrj9E+rYQF4PaA29?= =?us-ascii?Q?+uwjZVctAXM8S0LK4SNW0TSzNtfbBktBtvW/yG5kwIL31kJABt1ntgedc2zT?= =?us-ascii?Q?p0PlMLIFyDEcUdy+DrcxdrfJoh+X4r32nqsLlocbCsfPH78f92pX2LCcRNaU?= =?us-ascii?Q?ypDfe8ghlhnulO2YDOW3OlK5N/CPXzDR6h0yGefTEgzWTZHl4hSR0XwIFGXm?= =?us-ascii?Q?Lr9e9pndGe/hkiLV4oSeESS7lQu8eqGlxIg7XXnEtTsvFYa0WNUpMCYeo/eu?= =?us-ascii?Q?Bs7vSdWK55pL5LB7FWeWvjZA62GbfvKcSkDK/LBAmhXqhPoKST/+7ifidqlN?= =?us-ascii?Q?2QxeupeMaf/jkggmP6e/Rmd3/RJEkGKwGtgdw3VeCwlnNwgJgA80pYl3D3c0?= =?us-ascii?Q?awW6N1bgPAvHT/vj0aMGu8vuDHrIo6FUSBqRDNrqfUToESyRj3EkhN7PJ/4/?= =?us-ascii?Q?zrjBKPw+kae5MMXi+y7ZP9tGlv0C5xapmDijSBWvgo4j5g7kXnzGif5aM6gL?= =?us-ascii?Q?1txTopBuMfH99rwW+MypDhR6ZQ8ISQxaugmKS7bIj8iTLsxtDxDrgKYljMqI?= =?us-ascii?Q?6Nb+hf+mzqw1PL+Gi6iGeES+YJ3GFWs+Gr2ieC7zv8FGY8J65REGQ55SoUWj?= =?us-ascii?Q?R655CrQSwsEVMSJbuDkqzGIITBHp79gv3HocfYJUwxYsMbvWJUNl3peflOja?= =?us-ascii?Q?Ai0Q7GhZ3NqpTpvE3Ci2eKeF5iG/EDOrpgC2Q0JxiigoeVgt6vD1GauzdW3B?= =?us-ascii?Q?oTGUpT4vGDAVhW/yM3PviZy+hH9Gep71QdSkPJRFunnBAPNcY8JOutzeJjAG?= =?us-ascii?Q?XuG/WedB9uvMKohDP34Ge5usukRGEmaAK8XhwmnoUMGymQ+LX7QYv9akxCPn?= =?us-ascii?Q?bNEiUzh/oHcV03Y3ZNqq6Y2PPkfEEhZmQtHgFXrzcObt4FA8nlwN6R35koEv?= =?us-ascii?Q?wEI+uFdqpP+r1Sxa19ypz1Sl8dikbISVb2N8HCcp2w=3D=3D?= X-Forefront-PRVS: 0301360BF5 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;BN3PR0301MB0899;23:8czQ2WWjiZpRq23mve4HjC7QEnC8SZrh3Bwhins?= =?us-ascii?Q?WL9PcJoJdfuveZbxCFWnYFJjZ/ZJMxm+ImIlZWlSLichXE9EImZSMzviymh+?= =?us-ascii?Q?xad+wPtRdk4IVp3iz3bkurdhe9iqIduA3QvBCT421mi0FbKugPBBXf6YXt28?= =?us-ascii?Q?OQvk2p8Ybfy30u5Tf58xYw2RObUkcyZqNGFM4CLVq2dKoGfsdfC/466L+Zxg?= =?us-ascii?Q?EfxQR8ZumRNvXYtQkrlnkrs9mml9wEr9q6Croz0UA7JHhPkCd4TC/LQhmpC2?= =?us-ascii?Q?6x4FCpngCfwuEwgiQo4/MQ+mTp/kLELg9GYaJc4Q0ekSuFeNyzzJLjup5y1c?= =?us-ascii?Q?kDG3po7vBxi78wiPPMYa6RsoJx1yHoXm/oo2vRA9SSAzPMhu+n8JmyDUlUt9?= =?us-ascii?Q?wjIf367ke4QDwjt9igipOkWRjseME2ti3uXiiXiIXenj9MFuI6laU+D6zIiN?= =?us-ascii?Q?AQ3eOPy0YwkCJLYF3NVBEaWSNp3Dyi2bzc/He+ClDiEKrL1bWB3IHaHyXPs7?= =?us-ascii?Q?ROklQTLUolRSVw5ummkYm7LFut2Dx6yQgN+0QT7kh1jSnQdXXBXGivkDi9v+?= =?us-ascii?Q?JVH6dfYpUqglL1VvGBfsTaC16q9JSp5+Te/WA4ihfl6Ta+JHxapbbKykRCno?= =?us-ascii?Q?lQHMEkjcDeBcoRzGczx+e347kJ+aMZB8Zggh9TsSHSPClI9NmHBKavHY38kd?= =?us-ascii?Q?ILmPEPbq4P6dJQk1oLMIdsZSwLfpOyEF++5HZVyMRcq+oGkoGvPy9I/gYyf7?= =?us-ascii?Q?GVGN6gzhKa6ET9sbLoqOrVAoIJETjds10GZDfjHVCBZd+Qgv2ZUNle8QkGZG?= =?us-ascii?Q?rP3J8TFm2Fm3kjGGZuUYkXyv/IFx3B2wk3FFdms19VVBfWuItIhpapMOxlZw?= =?us-ascii?Q?p5IibR794h/oPYGNGt3mcj/dI0mlpUUfeAF25+lE/+b6BwCOjNRU3zlS/HrJ?= =?us-ascii?Q?PxvqnlhwsZzbKhVShy0g9Vt7MD1SNWaeOPb2ZdcCtyGep8n+xjSsKlkxR+/Y?= =?us-ascii?Q?vU21RYoqx843pqDQofB0eykZOWRt1Rck9/Fz4jUQ7GG6U4yl2lXEkxvGMyAl?= =?us-ascii?Q?ZOEhsLfHY77II1rAoRMeC3Ddc5cNuODUjKid5gihx7/bLbv2L57Ro6GKC+AY?= =?us-ascii?Q?t3aN0Xl11a8UrStAdXNUKdLZMu/TbLgq2diekX+GI0h9dOXWcsib7b1Mx+HA?= =?us-ascii?Q?rvd0/Mc2x7Z56PO7Not7ccXS0vLMU3eLonLTJnhxnkUlWehP+lVd6PZ0uHuq?= =?us-ascii?Q?beKep9C3cnU9bxuDlFUiqlmXUG6xsII8PXnSnFCCTmcvKK6j7AQVedqT8+GT?= =?us-ascii?Q?i8FeZsZeJCC020UR+t3Z8pjteSlAHgfVrqFq5wbsfsU6c?= X-Microsoft-Exchange-Diagnostics: 1;BN3PR0301MB0899;6:o9Q7WcmWm3eTNVqjuDJN+a21hD8O9iwJqdH4c7r2vReqkKDz5p2BU7B9go01YgSzLa4KoZpVPmkAom/WGzSCZtUhGerOMEEpSCYBJXIt2VcMoJZCDYnqVgXuD8MuhJnk4vXIkJN2Zeqx0AGPbsRpNP+9JGTOOpkTwe/Q+smtqlz48lIrLb6bhqaCcW2P3Vxyk+YX5fv4Sqivfvcr30sSFU33KGCXvNcetS0cPH685I97RyrKUvLSZPrrEt7kM4ufWsDJnPOS28h0HQ9mEPCd9RPSziRSNktv3c7c+FMCLH2YTxQpGcj3GMTZOCoofUFIRvZVDcfAOnf2X12MeN31dKtEHFwUvV7QB6ttGEI52koNgB3yfx1QRTOz2FrOs5hbd+i5lmHHHVzN8Y1KP2RMqmoNpRAVTJ+GrZcW7eg1/h3ZB+drUfeRMXpsh6bAVqUTPmJtYPOY0IaSoH8bXFMM8AWXs6ptNKylLgxh4TN4/jtd6QtRVMIJTpjpQD3rJ+/r;5:muoAQ2jhi2/h4Ayi84SHTkNh7NTB97OapPpqds7RhA1EERj6Ynxfv8s3tcb0yniljJQnW6gBb9N5yN4L7h4CX6Jq7q+LnlItjF9FyKi7k7JzFPXhLFsWt9HfHAKTHRO+Y2LPSv+RwtT8lBKFGbcWn+CaVDB553LhQM+Q/RhTvI3XkCk02McQTzAdeO2gfDIZ;24:NmXV6K1Ag32aZ6KNF4DfzGhSfHgGM6hxTan3B0oEI8VEBQ00uOru4/9wViaqfQBpPd4MrfCROrmJsD/VSPjQbVQp5AxjcH2wBNXWuQm6nBk= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;BN3PR0301MB0899;7:ybh9Ht0xpPU5QoBA2LKvlf2vOpJRjMXMAXGaT4n9EWDd3eqrarb0DGqEolM3Cjl4JICvuW9kM6382FS3PyqNGWoSoDKh8sDk7muFWZP3PLoUsGRUnFtPLwKHDeY89+wol310ckDKZ5dty11wPJJ4/YZuJAKoYosAkHdrIHD+F3FuSh0NYRkagcIC9tTAbwrNj98/VIk7kZyHOdVMhoguHxkUOIhWYkY9rGe1bdd5tHbu61iSiIZgzcW0rTMvKlthek5lLY4dJyG9pK7N8xzzBbu7B6bDH2m3kE556xWJ9ZG6O3n+mzOhuFU1h4m1aXSEMCGokFktM7heX4EaKg88bQ== X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 May 2017 14:04:22.3217 (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: BN3PR0301MB0899 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Use clk_bulk_get to ease the driver clocks handling. Cc: Michael Turquette Cc: Stephen Boyd Cc: Russell King Cc: Geert Uytterhoeven Cc: Florian Fainelli 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 --- ChangeLog: v1->v2: No changes --- drivers/cpufreq/imx6q-cpufreq.c | 119 ++++++++++++++++++---------------------- 1 file changed, 53 insertions(+), 66 deletions(-) diff --git a/drivers/cpufreq/imx6q-cpufreq.c b/drivers/cpufreq/imx6q-cpufreq.c index 7719b02..6158910 100644 --- a/drivers/cpufreq/imx6q-cpufreq.c +++ b/drivers/cpufreq/imx6q-cpufreq.c @@ -24,15 +24,29 @@ static struct regulator *arm_reg; static struct regulator *pu_reg; static struct regulator *soc_reg; -static struct clk *arm_clk; -static struct clk *pll1_sys_clk; -static struct clk *pll1_sw_clk; -static struct clk *step_clk; -static struct clk *pll2_pfd2_396m_clk; - -/* clk used by i.MX6UL */ -static struct clk *pll2_bus_clk; -static struct clk *secondary_sel_clk; +enum IMX6_CPUFREQ_CLKS { + ARM, + PLL1_SYS, + STEP, + PLL1_SW, + PLL2_PFD2_396M, + /* MX6UL requires two more clks */ + PLL2_BUS, + SECONDARY_SEL, +}; +#define IMX6Q_CPUFREQ_CLK_NUM 5 +#define IMX6UL_CPUFREQ_CLK_NUM 7 + +static int num_clks; +static struct clk_bulk_data clks[] = { + { .id = "arm" }, + { .id = "pll1_sys" }, + { .id = "step" }, + { .id = "pll1_sw" }, + { .id = "pll2_pfd2_396m" }, + { .id = "pll2_bus" }, + { .id = "secondary_sel" }, +}; static struct device *cpu_dev; static bool free_opp; @@ -51,7 +65,7 @@ static int imx6q_set_target(struct cpufreq_policy *policy, unsigned int index) new_freq = freq_table[index].frequency; freq_hz = new_freq * 1000; - old_freq = clk_get_rate(arm_clk) / 1000; + old_freq = clk_get_rate(clks[ARM].clk) / 1000; opp = dev_pm_opp_find_freq_ceil(cpu_dev, &freq_hz); if (IS_ERR(opp)) { @@ -109,25 +123,27 @@ static int imx6q_set_target(struct cpufreq_policy *policy, unsigned int index) * voltage of 528MHz, so lower the CPU frequency to one * half before changing CPU frequency. */ - clk_set_rate(arm_clk, (old_freq >> 1) * 1000); - clk_set_parent(pll1_sw_clk, pll1_sys_clk); - if (freq_hz > clk_get_rate(pll2_pfd2_396m_clk)) - clk_set_parent(secondary_sel_clk, pll2_bus_clk); + clk_set_rate(clks[ARM].clk, (old_freq >> 1) * 1000); + clk_set_parent(clks[PLL1_SW].clk, clks[PLL1_SYS].clk); + if (freq_hz > clk_get_rate(clks[PLL2_PFD2_396M].clk)) + clk_set_parent(clks[SECONDARY_SEL].clk, + clks[PLL2_BUS].clk); else - clk_set_parent(secondary_sel_clk, pll2_pfd2_396m_clk); - clk_set_parent(step_clk, secondary_sel_clk); - clk_set_parent(pll1_sw_clk, step_clk); + clk_set_parent(clks[SECONDARY_SEL].clk, + clks[PLL2_PFD2_396M].clk); + clk_set_parent(clks[STEP].clk, clks[SECONDARY_SEL].clk); + clk_set_parent(clks[PLL1_SW].clk, clks[STEP].clk); } else { - clk_set_parent(step_clk, pll2_pfd2_396m_clk); - clk_set_parent(pll1_sw_clk, step_clk); - if (freq_hz > clk_get_rate(pll2_pfd2_396m_clk)) { - clk_set_rate(pll1_sys_clk, new_freq * 1000); - clk_set_parent(pll1_sw_clk, pll1_sys_clk); + clk_set_parent(clks[STEP].clk, clks[PLL2_PFD2_396M].clk); + clk_set_parent(clks[PLL1_SW].clk, clks[STEP].clk); + if (freq_hz > clk_get_rate(clks[PLL2_PFD2_396M].clk)) { + clk_set_rate(clks[PLL1_SYS].clk, new_freq * 1000); + clk_set_parent(clks[PLL1_SW].clk, clks[PLL1_SYS].clk); } } /* Ensure the arm clock divider is what we expect */ - ret = clk_set_rate(arm_clk, new_freq * 1000); + ret = clk_set_rate(clks[ARM].clk, new_freq * 1000); if (ret) { dev_err(cpu_dev, "failed to set clock rate: %d\n", ret); regulator_set_voltage_tol(arm_reg, volt_old, 0); @@ -161,7 +177,7 @@ static int imx6q_set_target(struct cpufreq_policy *policy, unsigned int index) static int imx6q_cpufreq_init(struct cpufreq_policy *policy) { - policy->clk = arm_clk; + policy->clk = clks[ARM].clk; return cpufreq_generic_init(policy, freq_table, transition_latency); } @@ -197,27 +213,14 @@ static int imx6q_cpufreq_probe(struct platform_device *pdev) return -ENOENT; } - arm_clk = clk_get(cpu_dev, "arm"); - pll1_sys_clk = clk_get(cpu_dev, "pll1_sys"); - pll1_sw_clk = clk_get(cpu_dev, "pll1_sw"); - step_clk = clk_get(cpu_dev, "step"); - pll2_pfd2_396m_clk = clk_get(cpu_dev, "pll2_pfd2_396m"); - if (IS_ERR(arm_clk) || IS_ERR(pll1_sys_clk) || IS_ERR(pll1_sw_clk) || - IS_ERR(step_clk) || IS_ERR(pll2_pfd2_396m_clk)) { - dev_err(cpu_dev, "failed to get clocks\n"); - ret = -ENOENT; - goto put_clk; - } + if (of_machine_is_compatible("fsl,imx6ul")) + num_clks = IMX6UL_CPUFREQ_CLK_NUM; + else + num_clks = IMX6Q_CPUFREQ_CLK_NUM; - if (of_machine_is_compatible("fsl,imx6ul")) { - pll2_bus_clk = clk_get(cpu_dev, "pll2_bus"); - secondary_sel_clk = clk_get(cpu_dev, "secondary_sel"); - if (IS_ERR(pll2_bus_clk) || IS_ERR(secondary_sel_clk)) { - dev_err(cpu_dev, "failed to get clocks specific to imx6ul\n"); - ret = -ENOENT; - goto put_clk; - } - } + ret = clk_bulk_get(cpu_dev, num_clks, clks); + if (ret) + goto put_node; arm_reg = regulator_get(cpu_dev, "arm"); pu_reg = regulator_get_optional(cpu_dev, "pu"); @@ -354,22 +357,11 @@ static int imx6q_cpufreq_probe(struct platform_device *pdev) regulator_put(pu_reg); if (!IS_ERR(soc_reg)) regulator_put(soc_reg); -put_clk: - if (!IS_ERR(arm_clk)) - clk_put(arm_clk); - if (!IS_ERR(pll1_sys_clk)) - clk_put(pll1_sys_clk); - if (!IS_ERR(pll1_sw_clk)) - clk_put(pll1_sw_clk); - if (!IS_ERR(step_clk)) - clk_put(step_clk); - if (!IS_ERR(pll2_pfd2_396m_clk)) - clk_put(pll2_pfd2_396m_clk); - if (!IS_ERR(pll2_bus_clk)) - clk_put(pll2_bus_clk); - if (!IS_ERR(secondary_sel_clk)) - clk_put(secondary_sel_clk); + + clk_bulk_put(num_clks, clks); +put_node: of_node_put(np); + return ret; } @@ -383,13 +375,8 @@ static int imx6q_cpufreq_remove(struct platform_device *pdev) if (!IS_ERR(pu_reg)) regulator_put(pu_reg); regulator_put(soc_reg); - clk_put(arm_clk); - clk_put(pll1_sys_clk); - clk_put(pll1_sw_clk); - clk_put(step_clk); - clk_put(pll2_pfd2_396m_clk); - clk_put(pll2_bus_clk); - clk_put(secondary_sel_clk); + + clk_bulk_put(num_clks, clks); return 0; } -- 2.7.4