From patchwork Fri Sep 16 14:36:26 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fabio Estevam X-Patchwork-Id: 9336001 X-Patchwork-Delegate: sboyd@codeaurora.org Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 768956077F for ; Fri, 16 Sep 2016 14:33:22 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 673D629F66 for ; Fri, 16 Sep 2016 14:33:22 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 5B8E129F92; Fri, 16 Sep 2016 14:33:22 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 44F6129F8B for ; Fri, 16 Sep 2016 14:33:20 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S934873AbcIPOdM (ORCPT ); Fri, 16 Sep 2016 10:33:12 -0400 Received: from mail-bl2nam02on0053.outbound.protection.outlook.com ([104.47.38.53]:33030 "EHLO NAM02-BL2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S935374AbcIPOcu (ORCPT ); Fri, 16 Sep 2016 10:32:50 -0400 Received: from DM5PR03CA0014.namprd03.prod.outlook.com (10.175.104.24) by CY1PR0301MB2009.namprd03.prod.outlook.com (10.164.2.15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.619.10; Fri, 16 Sep 2016 14:32:45 +0000 Received: from BL2FFO11FD048.protection.gbl (2a01:111:f400:7c09::147) by DM5PR03CA0014.outlook.office365.com (2603:10b6:3:118::24) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P384) id 15.1.629.8 via Frontend Transport; Fri, 16 Sep 2016 14:32:45 +0000 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; nxp.com; dkim=none (message not signed) header.d=none; Received-SPF: Fail (protection.outlook.com: domain of nxp.com does not designate 192.88.168.50 as permitted sender) receiver=protection.outlook.com; client-ip=192.88.168.50; helo=tx30smr01.am.freescale.net; Received: from tx30smr01.am.freescale.net (192.88.168.50) by BL2FFO11FD048.mail.protection.outlook.com (10.173.161.210) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_RSA_WITH_AES_256_CBC_SHA) id 15.1.619.6 via Frontend Transport; Fri, 16 Sep 2016 14:32:45 +0000 Received: from fabio-OptiPlex-7010.am.freescale.net (fabio-OptiPlex-7010.am.freescale.net [10.29.244.178]) by tx30smr01.am.freescale.net (8.14.3/8.14.0) with ESMTP id u8GEWeFq026994; Fri, 16 Sep 2016 07:32:42 -0700 From: Fabio Estevam To: CC: , , , , , , , , , "Fabio Estevam" Subject: [PATCH 2/3] clk: imx6: Make the LDB_DI0 and LDB_DI1 clocks read-only Date: Fri, 16 Sep 2016 11:36:26 -0300 Message-ID: <1474036587-13819-2-git-send-email-fabio.estevam@nxp.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1474036587-13819-1-git-send-email-fabio.estevam@nxp.com> References: <1474036587-13819-1-git-send-email-fabio.estevam@nxp.com> X-EOPAttributedMessage: 0 X-Matching-Connectors: 131185099658523596; (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)(7916002)(2980300002)(1109001)(1110001)(339900001)(189002)(199003)(81156014)(50466002)(7846002)(189998001)(8676002)(97736004)(2906002)(105606002)(4326007)(92566002)(104016004)(85426001)(586003)(8936002)(110136003)(106466001)(5660300001)(356003)(87936001)(48376002)(50226002)(11100500001)(33646002)(76176999)(50986999)(81166006)(626004)(229853001)(19580405001)(19580395003)(2351001)(77096005)(8666005)(2950100001)(47776003)(86362001)(68736007)(7416002)(5003940100001)(36756003)(305945005)(7059030); DIR:OUT; SFP:1101; SCL:1; SRVR:CY1PR0301MB2009; H:tx30smr01.am.freescale.net; FPR:; SPF:Fail; PTR:InfoDomainNonexistent; MX:1; A:1; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BL2FFO11FD048; 1:P+hA16b071vp5Ub91K+FO3pQCRE1thxHQNuPqNIjvFgpCYxVAKuQF/ck9oJAFA6BEqsL6Qko7GrhqZk9uf/sqDSno92YxHox5zEMOcN1rWukxljms65bK/SOrPXgZ/eajeHrplpa2Gap+JqsJfsN7ua8IIAMwAMZfP3457LaBRXE+pXyqbVz+FgzAAUznB6q597Rw+dG9l+SUmu6Vlb/GGNOT9Fiv9KOnbbJSApmUlGLSDLiFP8+sXHDJUzJf2G3rjBTmvd0fItg7eIMCh0LVdvoV/WBwhpmfcDAJ/6SKkbMaNS6qt99IOrkfXW1AwBXf7Sshv6uaAkuM+c0NBff+O0gQuYfOaDrMO0RHP4qYLECU4JfqbESWf0mOUiGKOKt5cvUHf41Sl5YN/GIzXngjZ7w194Wg8qAYPgsHXEYKIv/fn6V+G/wnrgM7Tnm/cp+OOmMzbhi2fSE10CO7EZWql3r9w+Gd60wSH46gcLgLqExf3yGL6VfbzwX5j3fgjLGWJXRBHXDzE2F7h4ZHaiHbreGsiXvPQvpjaeWGoQ8INLgHdUXY52n8Eho+wHZlx6CVj/aaA9nOaZYrNa8/UO6eZU0V/yuCtDDAZz25m+X3R3U1I7toI14x0LA9sxz+0xzw3b3u+xW2dggyuhSOLM6tOk+bAxtTpwmf9EOpLT//5TwYK5j6g8aeKAZgwDBDejpGCb3oJIDwCiMG5snLwdvt++VM7ULnAR/iQ7AAcxOpE4= MIME-Version: 1.0 X-MS-Office365-Filtering-Correlation-Id: 67a48280-8aab-4852-0787-08d3de3e535a X-Microsoft-Exchange-Diagnostics: 1; CY1PR0301MB2009; 2:VENSVGfgbXgKI8RsEuPPsVOSA0E4HuYLE8lHAqqzy7hw+Y+CNuw6g0e9lCY4A318CnOBSQ8Vd1n8kIBnhckplutDP52f3eZIRdWAZde+d4PRVByIHcfX14l2hQaV+lL7Ily9/NC1Gnt+g0o6yIcEaRu0zXRc9buVL6bcqcyy9YEpHTdb0TGF7OzQxtuLYWfB; 3:o0juKhQe9fjrTY1u1Ecg34u376R3mEuFp31uZvht4UnO+Ask1fK0vSPsQY0wYiiIUVZSmSbTFnCT+yFphTNqUV8G0YT0esxIig7XPmM1dupo1DlXQVL0G983pnXybYiWtpBi24nMbJUzC/rOaQd/nw7tPikJoTuOhOwT0FOlc/X80Z6IZTrXt8A8vDCVOPlST9pt+RlzWhnKnQvd1xLjyRMymq27ojesLVrcSh9ktQo= X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:CY1PR0301MB2009; X-Microsoft-Exchange-Diagnostics: 1; CY1PR0301MB2009; 25:E9gUSYSqLp+BXfqf+MHLrMUpKjObXr/5ZwSJhR0QX9zIO1Olec9+worOkcrxgrC/AlZBOyLGQUjXsDHby/AiguJtxC3KrZ6rUVDPnysNTbuLTYtu6MghxURf4cV+/Q6PcV4jpLxXzlI/JM+sT05RaTvnnoFZbDbeZjnQP3C/T1ZY94uagwt3dgYaZWp+r2Zs2+Lu0gKziivi+YWhXrDtzlneGFyNRpK126GrR+LQmdXOveExert7Yt7hT2zT4zPHV0L3tyQhbKQ2mPbnEqJmzd1oNUMIuGElxG7KuqzdZ4jjprAKCVgS6AXURXM54gKgrCAUZv6mWR03Kpx4dgr1COPnwBC8UxpsMuMU04Dc/TJFoP7YUcgeb1Pa4kfffwv3VrlUUDjO2sXu4dqEc8tuhRe0lk78lPBcwWsZm9BwkPZQk0Vz4TF7cc4Rqszql8DE18iK2YNINUc9Q/nBVNxTH1ToLVdzTcGxmpepbTm1koBqztpl3BDYSp2jlHu5HlMfRgSzOHIbSWROArdLg8rrgYYVsKxDBSyFKx5n1oVsIHNFPLaZnxYSS1Jid1ZBAk8mkHpHpXGFA5BstELBOdMyOSD4ZvsTRku/EDco0RbzhiGGSnR7KrBAyFvypCZeeVJ7VSOWyX6W/xrr0/kSFJzyazPDE0fAPkF0rBTyUTVNxV5aj+WcJLKriW+oGKAelNjg3sUNzZpIB/s508BnnKgMOOcPePOEXVwmIc30G6rN0zc= X-Microsoft-Exchange-Diagnostics: 1; CY1PR0301MB2009; 31:DRVjBm5SjtrtcuhCGf6qsqg3UwdrRqj1jUFxHloBFBTI2jJaXuGl7hkNB71p7LXX8jJHHW/kEWaT+vrv/QlWpu0CJwxcMWK7mjfwHvtJXRdqhTgtGLh27QI3MrSTFu7FSOl/1z0dVhkKbzSGFR921qjuAYJYc+EAByoKB7b7A+XwkeQ8fVEtWOXLKnGe8OmEHuTTFZHFzl2rXfqs6trSTRNnY8dhuJtPgmG+qlJ99BI=; 4:8rXZO2UCIf691jcuH7OXUnc+2zbDjFYSX4tOTLTP7LQeXS2BriA1i9MaK4xsmcSUz7+G74CUXGpOaKyTloNyr0qwM7LOYsKTmWPEnqRxELUYdv1wFOZyCV58bVl8e1y8KADhtJNjqrWaTvYel4JWnZj0/RDN/WL8Z0eenu4L+arcWCKaPUZ3qpNTASHky4dBSXzXvIX8JgVQpnyYx/8GC3Y4KY2vwzIBBYw0u0gS9KyN1eyZYYT3Py2MTALQesGcA4lkSEy81Exgz8GWMXiXksUHRPLq2CrCjcur7ObdJfKY/I4oXyvJz0xVRNXMwzjIhowyYC/0trSW0sMYpx+sS1PsM4t6AbDz9cfDM20XJZM9LnE2O4N3YKFHtpStDMOPOwTbk6/u3LVrrVWkjd2GAiBSUpOAB1K7DdE69PkryV5Mk2Qr3IS3vf0F3OVBEzdcRFjpwxfUeHvBV156FK5/FZquPmT0vakYdUzMfhKd9azYA81H8d0e+bwQTdpwZpGNbeTs4ueJoxc/Oi3d/+Qj9LH/9uTTe53vle0KQ86MQCU= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040176)(601004)(2401047)(5005006)(8121501046)(13017025)(13024025)(13018025)(13015025)(13023025)(3002001)(10201501046)(6055026); SRVR:CY1PR0301MB2009; BCL:0; PCL:0; RULEID:(400006); SRVR:CY1PR0301MB2009; X-Forefront-PRVS: 0067A8BA2A X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; CY1PR0301MB2009; 23:UqqInWgOkuX09htGxB4VHKcT3s4YSoxJnL+tXp2?= =?us-ascii?Q?LbPsDA7xG+TTxiZlWa5+5lv75zJC9znoIU657VP65h59TDOrhx5RdxvUcvKS?= =?us-ascii?Q?WTHw67RsHJ9qTDopOGS/js28kqg2iPiZFx5yGGx9hn2lPgd0S1sg7xmldi7l?= =?us-ascii?Q?PRJtJUyKZvF1rXXa92fUtY2lzTJ5o8ZSf3MuxDwY/4K4DGV9qi9F8vLRu5r6?= =?us-ascii?Q?60re9VNYDt1wDkcrS850FeVqVDpZARtG0RWOhg0BPATK+uqPPjkI4f6bZBLA?= =?us-ascii?Q?XB9BjaLazOP0l68ybleBsNZ8vrZuSPmpCq207AWQlBHe10L6vj5tbyj6iZOD?= =?us-ascii?Q?a4q70Wb+dUYG/Jqob/ARwJBIv1h+fTkf09k9kRM0jnkw8vMg7/+IUgRvgzZh?= =?us-ascii?Q?kqSYZ8xQDeaOGwhpKc/UpxjUbNzzAI2RgsqNvanSOyjuM7mOjJfVgk9gFOI3?= =?us-ascii?Q?55r6S5cP0hwooE2Y5O7X+d5q/t4N+lgArBpH7hwFfCNU/cguKALo0WHQcUpZ?= =?us-ascii?Q?et/D0qhsflCEt6eKT6LYOGCq1adWps0Ox+FKokniHF+fAoOl5ZmMLqsFDdra?= =?us-ascii?Q?qXajf3JAPrpVdJwcAbCqgxXnLDFo3N4eD20iLGBp42foabBkfdebXNUtXi2t?= =?us-ascii?Q?cJn5qidsbhzsv/Dj0OQnjC6XtbC2DH3X3nqjb8u/b2MS9Nr2mMl1iZnWwqDt?= =?us-ascii?Q?bj8DPSiok0afjRn01klbz76ldNBxtpMNxbbA/U24CbeN0Rqvh1GmLIV0bScd?= =?us-ascii?Q?bZY209xKkADrUvq6G0Bmkj74mt5YZUslKkVNTcWwoAjY9ELhZJQl6/dvId5z?= =?us-ascii?Q?AzJjYDHNIWmHoSafbuvkZgkZJMitza0VPG7qGx46vfsgHWDKAFaR1HTGHptC?= =?us-ascii?Q?1/C+k4KcwU27TivaQCtqFozSfHDSQOSZA6IH1raimoFvEPDfoU7DWPaonDUh?= =?us-ascii?Q?8Yvjens+ZHdgFYbNGf2EosDuZmeZZP4tAyw1aZRGieOUb/SbQHFSurVQhC50?= =?us-ascii?Q?aiThEmFUmfFiJwUwPi+hxnwRyHCHqmMK/PZWUZpoA/1CXbyk8Ov4D/FTmNfg?= =?us-ascii?Q?YEroY5D1/5nyjTTV5R/R983UqOBEKhMEs7T8MSbe9h+qKUzA3mvWCe3FHxeR?= =?us-ascii?Q?ddUbVyjO8v4z89+FRpWYrW4zktJBEE+H9c8vie59FeYv5QabYgspZxWyoDfv?= =?us-ascii?Q?9JSrN87gdpSiyMwA=3D?= X-Microsoft-Exchange-Diagnostics: 1; CY1PR0301MB2009; 6:iAQgz1wdwp78ALdzBn94obT80815QqwpM5wh+ONuzhbOP4Laah5G/apMtvT3mVXEI5ay+QFh9tRvVDmA5ulVGbkmtYB4IFVXrVTyPNUq1WJ+y+ckvDB14iwNJM+LDyvIp3XcIr2MThiiq+eonxpKL7C9ajdxWmDeaJDJfgNtHLmFFQGm9XZvF/mNA3lMW1RN+cOMecUwXsH2qv+uIESE59FScXB2G/gICMeWucNyMlXBtyD6qdCI6L3n2Dflun93uazMqETpxWhsDE5vJ4qhWxuIA3iNT1vkdt4+A55Uzjs=; 5:wKX97X6v42VMDgmxzT2Qit02FSDTfdddCIsUCM8tgc43rfi76o/yghds9GDAS6JbFWKYKDtxgO2I+SjdZkAybiYZkI8R5XK6f32S89IGXxS7FCJsk/s9Msg6SFYcdtTuw12TaH3i2vLczV7+fC7RXg3WUtrxNuA5Mppbh0sAJNU=; 24:PYv/sQE9U+6ICsudim7jYAw+AKIp4sVgWpREJITBEP8WVEpsWbn3v7HwvroX6WnvPDzWQdDAI80l2dt55YAmLtrbstuhSt5vL3eDFIjP5gw=; 7:j9RLgAh6YqbzG1g3OE+ZJHmTKp9AY4hNFLoCBrSSvGoux4I7bMIIxTo6P+TtFWlHqzzoVBuOPue5Z4/Skt5FiRHBJmK91mDNRaHeAchXgAI6X62ezpCbUHf4KmrWmo6YEtluhvmwwCbRqNjk65t7f7/H127Qln9o3z9VuKyw96GcQIhukNa/Jlts7b6iAabPUlB+9YcZ/YBe45fx+13lJ4+wveGnICynaLTbBjNV/ijLlwO9yrIqAONj58DBz3rw SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Sep 2016 14:32:45.5247 (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: CY1PR0301MB2009 Sender: linux-clk-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-clk@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Philipp Zabel Due to incorrect placement of the clock gate cell in the ldb_di[x]_clk tree, the glitchy parent mux of ldb_di[x]_clk can cause a glitch to enter the ldb_di_ipu_div divider. If the divider gets locked up, no ldb_di[x]_clk is generated, and the LVDS display will hang when the ipu_di_clk is sourced from ldb_di_clk. To fix the problem, both the new and current parent of the ldb_di_clk should be disabled before the switch. As this can not be guaranteed by the clock framework during runtime, make the ldb_di[x]_sel muxes read-only. A workaround to set the muxes once during boot could be added to the kernel or bootloader. Signed-off-by: Philipp Zabel Signed-off-by: Fabio Estevam --- drivers/clk/imx/clk-imx6q.c | 10 ++-------- drivers/clk/imx/clk.h | 8 ++++++++ 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/drivers/clk/imx/clk-imx6q.c b/drivers/clk/imx/clk-imx6q.c index dd33ebc..9bbc994 100644 --- a/drivers/clk/imx/clk-imx6q.c +++ b/drivers/clk/imx/clk-imx6q.c @@ -340,8 +340,8 @@ static void __init imx6q_clocks_init(struct device_node *ccm_node) clk[IMX6QDL_CLK_GPU3D_SHADER_SEL] = imx_clk_mux("gpu3d_shader_sel", base + 0x18, 8, 2, gpu3d_shader_sels, ARRAY_SIZE(gpu3d_shader_sels)); clk[IMX6QDL_CLK_IPU1_SEL] = imx_clk_mux("ipu1_sel", base + 0x3c, 9, 2, ipu_sels, ARRAY_SIZE(ipu_sels)); clk[IMX6QDL_CLK_IPU2_SEL] = imx_clk_mux("ipu2_sel", base + 0x3c, 14, 2, ipu_sels, ARRAY_SIZE(ipu_sels)); - clk[IMX6QDL_CLK_LDB_DI0_SEL] = imx_clk_mux_flags("ldb_di0_sel", base + 0x2c, 9, 3, ldb_di_sels, ARRAY_SIZE(ldb_di_sels), CLK_SET_RATE_PARENT); - clk[IMX6QDL_CLK_LDB_DI1_SEL] = imx_clk_mux_flags("ldb_di1_sel", base + 0x2c, 12, 3, ldb_di_sels, ARRAY_SIZE(ldb_di_sels), CLK_SET_RATE_PARENT); + clk[IMX6QDL_CLK_LDB_DI0_SEL] = imx_clk_mux_ldb("ldb_di0_sel", base + 0x2c, 9, 3, ldb_di_sels, ARRAY_SIZE(ldb_di_sels)); + clk[IMX6QDL_CLK_LDB_DI1_SEL] = imx_clk_mux_ldb("ldb_di1_sel", base + 0x2c, 12, 3, ldb_di_sels, ARRAY_SIZE(ldb_di_sels)); clk[IMX6QDL_CLK_IPU1_DI0_PRE_SEL] = imx_clk_mux_flags("ipu1_di0_pre_sel", base + 0x34, 6, 3, ipu_di_pre_sels, ARRAY_SIZE(ipu_di_pre_sels), CLK_SET_RATE_PARENT); clk[IMX6QDL_CLK_IPU1_DI1_PRE_SEL] = imx_clk_mux_flags("ipu1_di1_pre_sel", base + 0x34, 15, 3, ipu_di_pre_sels, ARRAY_SIZE(ipu_di_pre_sels), CLK_SET_RATE_PARENT); clk[IMX6QDL_CLK_IPU2_DI0_PRE_SEL] = imx_clk_mux_flags("ipu2_di0_pre_sel", base + 0x38, 6, 3, ipu_di_pre_sels, ARRAY_SIZE(ipu_di_pre_sels), CLK_SET_RATE_PARENT); @@ -593,12 +593,6 @@ static void __init imx6q_clocks_init(struct device_node *ccm_node) clk_register_clkdev(clk[IMX6QDL_CLK_ENET_REF], "enet_ref", NULL); - if ((imx_get_soc_revision() != IMX_CHIP_REVISION_1_0) || - clk_on_imx6dl()) { - clk_set_parent(clk[IMX6QDL_CLK_LDB_DI0_SEL], clk[IMX6QDL_CLK_PLL5_VIDEO_DIV]); - clk_set_parent(clk[IMX6QDL_CLK_LDB_DI1_SEL], clk[IMX6QDL_CLK_PLL5_VIDEO_DIV]); - } - clk_set_rate(clk[IMX6QDL_CLK_PLL3_PFD1_540M], 540000000); if (clk_on_imx6dl()) clk_set_parent(clk[IMX6QDL_CLK_IPU1_SEL], clk[IMX6QDL_CLK_PLL3_PFD1_540M]); diff --git a/drivers/clk/imx/clk.h b/drivers/clk/imx/clk.h index 3799ff8..4afad3b 100644 --- a/drivers/clk/imx/clk.h +++ b/drivers/clk/imx/clk.h @@ -75,6 +75,14 @@ static inline struct clk *imx_clk_fixed(const char *name, int rate) return clk_register_fixed_rate(NULL, name, NULL, 0, rate); } +static inline struct clk *imx_clk_mux_ldb(const char *name, void __iomem *reg, + u8 shift, u8 width, const char **parents, int num_parents) +{ + return clk_register_mux(NULL, name, parents, num_parents, + CLK_SET_RATE_NO_REPARENT | CLK_SET_RATE_PARENT, reg, + shift, width, CLK_MUX_READ_ONLY, &imx_ccm_lock); +} + static inline struct clk *imx_clk_fixed_factor(const char *name, const char *parent, unsigned int mult, unsigned int div) {