162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * Copyright (c) 2022 MediaTek Inc.
462306a36Sopenharmony_ci * Author: Garmin Chang <garmin.chang@mediatek.com>
562306a36Sopenharmony_ci */
662306a36Sopenharmony_ci
762306a36Sopenharmony_ci#include <dt-bindings/clock/mediatek,mt8188-clk.h>
862306a36Sopenharmony_ci#include <linux/mod_devicetable.h>
962306a36Sopenharmony_ci#include <linux/platform_device.h>
1062306a36Sopenharmony_ci
1162306a36Sopenharmony_ci#include "clk-gate.h"
1262306a36Sopenharmony_ci#include "clk-mtk.h"
1362306a36Sopenharmony_ci#include "clk-mux.h"
1462306a36Sopenharmony_ci
1562306a36Sopenharmony_cistatic DEFINE_SPINLOCK(mt8188_clk_lock);
1662306a36Sopenharmony_ci
1762306a36Sopenharmony_cistatic const struct mtk_fixed_clk top_fixed_clks[] = {
1862306a36Sopenharmony_ci	FIXED_CLK(CLK_TOP_ULPOSC1, "ulposc_ck1", NULL, 260000000),
1962306a36Sopenharmony_ci	FIXED_CLK(CLK_TOP_MPHONE_SLAVE_BCK, "mphone_slave_bck", NULL, 49152000),
2062306a36Sopenharmony_ci	FIXED_CLK(CLK_TOP_PAD_FPC, "pad_fpc_ck", NULL, 50000000),
2162306a36Sopenharmony_ci	FIXED_CLK(CLK_TOP_466M_FMEM, "hd_466m_fmem_ck", NULL, 533000000),
2262306a36Sopenharmony_ci	FIXED_CLK(CLK_TOP_PEXTP_PIPE, "pextp_pipe", NULL, 250000000),
2362306a36Sopenharmony_ci	FIXED_CLK(CLK_TOP_DSI_PHY, "dsi_phy", NULL, 500000000),
2462306a36Sopenharmony_ci};
2562306a36Sopenharmony_ci
2662306a36Sopenharmony_cistatic const struct mtk_fixed_factor top_divs[] = {
2762306a36Sopenharmony_ci	FACTOR(CLK_TOP_MAINPLL_D3, "mainpll_d3", "mainpll", 1, 3),
2862306a36Sopenharmony_ci	FACTOR(CLK_TOP_MAINPLL_D4, "mainpll_d4", "mainpll", 1, 4),
2962306a36Sopenharmony_ci	FACTOR(CLK_TOP_MAINPLL_D4_D2, "mainpll_d4_d2", "mainpll_d4", 1, 2),
3062306a36Sopenharmony_ci	FACTOR(CLK_TOP_MAINPLL_D4_D4, "mainpll_d4_d4", "mainpll_d4", 1, 4),
3162306a36Sopenharmony_ci	FACTOR(CLK_TOP_MAINPLL_D4_D8, "mainpll_d4_d8", "mainpll_d4", 1, 8),
3262306a36Sopenharmony_ci	FACTOR(CLK_TOP_MAINPLL_D5, "mainpll_d5", "mainpll", 1, 5),
3362306a36Sopenharmony_ci	FACTOR(CLK_TOP_MAINPLL_D5_D2, "mainpll_d5_d2", "mainpll_d5", 1, 2),
3462306a36Sopenharmony_ci	FACTOR(CLK_TOP_MAINPLL_D5_D4, "mainpll_d5_d4", "mainpll_d5", 1, 4),
3562306a36Sopenharmony_ci	FACTOR(CLK_TOP_MAINPLL_D5_D8, "mainpll_d5_d8", "mainpll_d5", 1, 8),
3662306a36Sopenharmony_ci	FACTOR(CLK_TOP_MAINPLL_D6, "mainpll_d6", "mainpll", 1, 6),
3762306a36Sopenharmony_ci	FACTOR(CLK_TOP_MAINPLL_D6_D2, "mainpll_d6_d2", "mainpll_d6", 1, 2),
3862306a36Sopenharmony_ci	FACTOR(CLK_TOP_MAINPLL_D6_D4, "mainpll_d6_d4", "mainpll_d6", 1, 4),
3962306a36Sopenharmony_ci	FACTOR(CLK_TOP_MAINPLL_D6_D8, "mainpll_d6_d8", "mainpll_d6", 1, 8),
4062306a36Sopenharmony_ci	FACTOR(CLK_TOP_MAINPLL_D7, "mainpll_d7", "mainpll", 1, 7),
4162306a36Sopenharmony_ci	FACTOR(CLK_TOP_MAINPLL_D7_D2, "mainpll_d7_d2", "mainpll_d7", 1, 2),
4262306a36Sopenharmony_ci	FACTOR(CLK_TOP_MAINPLL_D7_D4, "mainpll_d7_d4", "mainpll_d7", 1, 4),
4362306a36Sopenharmony_ci	FACTOR(CLK_TOP_MAINPLL_D7_D8, "mainpll_d7_d8", "mainpll_d7", 1, 8),
4462306a36Sopenharmony_ci	FACTOR(CLK_TOP_MAINPLL_D9, "mainpll_d9", "mainpll", 1, 9),
4562306a36Sopenharmony_ci	FACTOR(CLK_TOP_UNIVPLL_D2, "univpll_d2", "univpll", 1, 2),
4662306a36Sopenharmony_ci	FACTOR(CLK_TOP_UNIVPLL_D3, "univpll_d3", "univpll", 1, 3),
4762306a36Sopenharmony_ci	FACTOR(CLK_TOP_UNIVPLL_D4, "univpll_d4", "univpll", 1, 4),
4862306a36Sopenharmony_ci	FACTOR(CLK_TOP_UNIVPLL_D4_D2, "univpll_d4_d2", "univpll_d4", 1, 2),
4962306a36Sopenharmony_ci	FACTOR(CLK_TOP_UNIVPLL_D4_D4, "univpll_d4_d4", "univpll_d4", 1, 4),
5062306a36Sopenharmony_ci	FACTOR(CLK_TOP_UNIVPLL_D4_D8, "univpll_d4_d8", "univpll_d4", 1, 8),
5162306a36Sopenharmony_ci	FACTOR(CLK_TOP_UNIVPLL_D5, "univpll_d5", "univpll", 1, 5),
5262306a36Sopenharmony_ci	FACTOR(CLK_TOP_UNIVPLL_D5_D2, "univpll_d5_d2", "univpll_d5", 1, 2),
5362306a36Sopenharmony_ci	FACTOR(CLK_TOP_UNIVPLL_D5_D4, "univpll_d5_d4", "univpll_d5", 1, 4),
5462306a36Sopenharmony_ci	FACTOR(CLK_TOP_UNIVPLL_D5_D8, "univpll_d5_d8", "univpll_d5", 1, 8),
5562306a36Sopenharmony_ci	FACTOR(CLK_TOP_UNIVPLL_D6, "univpll_d6", "univpll", 1, 6),
5662306a36Sopenharmony_ci	FACTOR(CLK_TOP_UNIVPLL_D6_D2, "univpll_d6_d2", "univpll_d6", 1, 2),
5762306a36Sopenharmony_ci	FACTOR(CLK_TOP_UNIVPLL_D6_D4, "univpll_d6_d4", "univpll_d6", 1, 4),
5862306a36Sopenharmony_ci	FACTOR(CLK_TOP_UNIVPLL_D6_D8, "univpll_d6_d8", "univpll_d6", 1, 8),
5962306a36Sopenharmony_ci	FACTOR(CLK_TOP_UNIVPLL_D7, "univpll_d7", "univpll", 1, 7),
6062306a36Sopenharmony_ci	FACTOR(CLK_TOP_UNIVPLL_192M, "univpll_192m", "univpll", 1, 13),
6162306a36Sopenharmony_ci	FACTOR(CLK_TOP_UNIVPLL_192M_D4, "univpll_192m_d4", "univpll_192m", 1, 4),
6262306a36Sopenharmony_ci	FACTOR(CLK_TOP_UNIVPLL_192M_D8, "univpll_192m_d8", "univpll_192m", 1, 8),
6362306a36Sopenharmony_ci	FACTOR(CLK_TOP_UNIVPLL_192M_D10, "univpll_192m_d10", "univpll_192m", 1, 10),
6462306a36Sopenharmony_ci	FACTOR(CLK_TOP_UNIVPLL_192M_D16, "univpll_192m_d16", "univpll_192m", 1, 16),
6562306a36Sopenharmony_ci	FACTOR(CLK_TOP_UNIVPLL_192M_D32, "univpll_192m_d32", "univpll_192m", 1, 32),
6662306a36Sopenharmony_ci	FACTOR(CLK_TOP_APLL1_D3, "apll1_d3", "apll1", 1, 3),
6762306a36Sopenharmony_ci	FACTOR(CLK_TOP_APLL1_D4, "apll1_d4", "apll1", 1, 4),
6862306a36Sopenharmony_ci	FACTOR(CLK_TOP_APLL2_D3, "apll2_d3", "apll2", 1, 3),
6962306a36Sopenharmony_ci	FACTOR(CLK_TOP_APLL2_D4, "apll2_d4", "apll2", 1, 4),
7062306a36Sopenharmony_ci	FACTOR(CLK_TOP_APLL3_D4, "apll3_d4", "apll3", 1, 4),
7162306a36Sopenharmony_ci	FACTOR(CLK_TOP_APLL4_D4, "apll4_d4", "apll4", 1, 4),
7262306a36Sopenharmony_ci	FACTOR(CLK_TOP_APLL5_D4, "apll5_d4", "apll5", 1, 4),
7362306a36Sopenharmony_ci	FACTOR(CLK_TOP_MMPLL_D4, "mmpll_d4", "mmpll", 1, 4),
7462306a36Sopenharmony_ci	FACTOR(CLK_TOP_MMPLL_D4_D2, "mmpll_d4_d2", "mmpll_d4", 1, 2),
7562306a36Sopenharmony_ci	FACTOR(CLK_TOP_MMPLL_D5, "mmpll_d5", "mmpll", 1, 5),
7662306a36Sopenharmony_ci	FACTOR(CLK_TOP_MMPLL_D5_D2, "mmpll_d5_d2", "mmpll_d5", 1, 2),
7762306a36Sopenharmony_ci	FACTOR(CLK_TOP_MMPLL_D5_D4, "mmpll_d5_d4", "mmpll_d5", 1, 4),
7862306a36Sopenharmony_ci	FACTOR(CLK_TOP_MMPLL_D6, "mmpll_d6", "mmpll", 1, 6),
7962306a36Sopenharmony_ci	FACTOR(CLK_TOP_MMPLL_D6_D2, "mmpll_d6_d2", "mmpll_d6", 1, 2),
8062306a36Sopenharmony_ci	FACTOR(CLK_TOP_MMPLL_D7, "mmpll_d7", "mmpll", 1, 7),
8162306a36Sopenharmony_ci	FACTOR(CLK_TOP_MMPLL_D9, "mmpll_d9", "mmpll", 1, 9),
8262306a36Sopenharmony_ci	FACTOR(CLK_TOP_TVDPLL1_D2, "tvdpll1_d2", "tvdpll1", 1, 2),
8362306a36Sopenharmony_ci	FACTOR(CLK_TOP_TVDPLL1_D4, "tvdpll1_d4", "tvdpll1", 1, 4),
8462306a36Sopenharmony_ci	FACTOR(CLK_TOP_TVDPLL1_D8, "tvdpll1_d8", "tvdpll1", 1, 8),
8562306a36Sopenharmony_ci	FACTOR(CLK_TOP_TVDPLL1_D16, "tvdpll1_d16", "tvdpll1", 1, 16),
8662306a36Sopenharmony_ci	FACTOR(CLK_TOP_TVDPLL2_D2, "tvdpll2_d2", "tvdpll2", 1, 2),
8762306a36Sopenharmony_ci	FACTOR(CLK_TOP_TVDPLL2_D4, "tvdpll2_d4", "tvdpll2", 1, 4),
8862306a36Sopenharmony_ci	FACTOR(CLK_TOP_TVDPLL2_D8, "tvdpll2_d8", "tvdpll2", 1, 8),
8962306a36Sopenharmony_ci	FACTOR(CLK_TOP_TVDPLL2_D16, "tvdpll2_d16", "tvdpll2", 1, 16),
9062306a36Sopenharmony_ci	FACTOR(CLK_TOP_MSDCPLL_D2, "msdcpll_d2", "msdcpll", 1, 2),
9162306a36Sopenharmony_ci	FACTOR(CLK_TOP_MSDCPLL_D16, "msdcpll_d16", "msdcpll", 1, 16),
9262306a36Sopenharmony_ci	FACTOR(CLK_TOP_ETHPLL_D2, "ethpll_d2", "ethpll", 1, 2),
9362306a36Sopenharmony_ci	FACTOR(CLK_TOP_ETHPLL_D4, "ethpll_d4", "ethpll", 1, 4),
9462306a36Sopenharmony_ci	FACTOR(CLK_TOP_ETHPLL_D8, "ethpll_d8", "ethpll", 1, 8),
9562306a36Sopenharmony_ci	FACTOR(CLK_TOP_ETHPLL_D10, "ethpll_d10", "ethpll", 1, 10),
9662306a36Sopenharmony_ci	FACTOR(CLK_TOP_ADSPPLL_D2, "adsppll_d2", "adsppll", 1, 2),
9762306a36Sopenharmony_ci	FACTOR(CLK_TOP_ADSPPLL_D4, "adsppll_d4", "adsppll", 1, 4),
9862306a36Sopenharmony_ci	FACTOR(CLK_TOP_ADSPPLL_D8, "adsppll_d8", "adsppll", 1, 8),
9962306a36Sopenharmony_ci	FACTOR(CLK_TOP_ULPOSC1_D2, "ulposc1_d2", "ulposc_ck1", 1, 2),
10062306a36Sopenharmony_ci	FACTOR(CLK_TOP_ULPOSC1_D4, "ulposc1_d4", "ulposc_ck1", 1, 4),
10162306a36Sopenharmony_ci	FACTOR(CLK_TOP_ULPOSC1_D8, "ulposc1_d8", "ulposc_ck1", 1, 8),
10262306a36Sopenharmony_ci	FACTOR(CLK_TOP_ULPOSC1_D7, "ulposc1_d7", "ulposc_ck1", 1, 7),
10362306a36Sopenharmony_ci	FACTOR(CLK_TOP_ULPOSC1_D10, "ulposc1_d10", "ulposc_ck1", 1, 10),
10462306a36Sopenharmony_ci	FACTOR(CLK_TOP_ULPOSC1_D16, "ulposc1_d16", "ulposc_ck1", 1, 16),
10562306a36Sopenharmony_ci};
10662306a36Sopenharmony_ci
10762306a36Sopenharmony_cistatic const char * const axi_parents[] = {
10862306a36Sopenharmony_ci	"clk26m",
10962306a36Sopenharmony_ci	"mainpll_d4_d4",
11062306a36Sopenharmony_ci	"mainpll_d7_d2",
11162306a36Sopenharmony_ci	"mainpll_d4_d2",
11262306a36Sopenharmony_ci	"mainpll_d5_d2",
11362306a36Sopenharmony_ci	"mainpll_d6_d2",
11462306a36Sopenharmony_ci	"ulposc1_d4"
11562306a36Sopenharmony_ci};
11662306a36Sopenharmony_ci
11762306a36Sopenharmony_cistatic const char * const spm_parents[] = {
11862306a36Sopenharmony_ci	"clk26m",
11962306a36Sopenharmony_ci	"ulposc1_d10",
12062306a36Sopenharmony_ci	"mainpll_d7_d4",
12162306a36Sopenharmony_ci	"clk32k"
12262306a36Sopenharmony_ci};
12362306a36Sopenharmony_ci
12462306a36Sopenharmony_cistatic const char * const scp_parents[] = {
12562306a36Sopenharmony_ci	"clk26m",
12662306a36Sopenharmony_ci	"univpll_d4",
12762306a36Sopenharmony_ci	"mainpll_d6",
12862306a36Sopenharmony_ci	"univpll_d6",
12962306a36Sopenharmony_ci	"univpll_d4_d2",
13062306a36Sopenharmony_ci	"mainpll_d4_d2",
13162306a36Sopenharmony_ci	"univpll_d3",
13262306a36Sopenharmony_ci	"mainpll_d3"
13362306a36Sopenharmony_ci};
13462306a36Sopenharmony_ci
13562306a36Sopenharmony_cistatic const char * const bus_aximem_parents[] = {
13662306a36Sopenharmony_ci	"clk26m",
13762306a36Sopenharmony_ci	"mainpll_d7_d2",
13862306a36Sopenharmony_ci	"mainpll_d4_d2",
13962306a36Sopenharmony_ci	"mainpll_d5_d2",
14062306a36Sopenharmony_ci	"mainpll_d6"
14162306a36Sopenharmony_ci};
14262306a36Sopenharmony_ci
14362306a36Sopenharmony_cistatic const char * const vpp_parents[] = {
14462306a36Sopenharmony_ci	"clk26m",
14562306a36Sopenharmony_ci	"univpll_d6_d2",
14662306a36Sopenharmony_ci	"mainpll_d5_d2",
14762306a36Sopenharmony_ci	"mmpll_d6_d2",
14862306a36Sopenharmony_ci	"univpll_d5_d2",
14962306a36Sopenharmony_ci	"univpll_d4_d2",
15062306a36Sopenharmony_ci	"mmpll_d4_d2",
15162306a36Sopenharmony_ci	"mmpll_d7",
15262306a36Sopenharmony_ci	"univpll_d6",
15362306a36Sopenharmony_ci	"mainpll_d4",
15462306a36Sopenharmony_ci	"mmpll_d5",
15562306a36Sopenharmony_ci	"tvdpll1",
15662306a36Sopenharmony_ci	"tvdpll2",
15762306a36Sopenharmony_ci	"univpll_d4",
15862306a36Sopenharmony_ci	"mmpll_d4"
15962306a36Sopenharmony_ci};
16062306a36Sopenharmony_ci
16162306a36Sopenharmony_cistatic const char * const ethdr_parents[] = {
16262306a36Sopenharmony_ci	"clk26m",
16362306a36Sopenharmony_ci	"univpll_d6_d2",
16462306a36Sopenharmony_ci	"mainpll_d5_d2",
16562306a36Sopenharmony_ci	"mmpll_d6_d2",
16662306a36Sopenharmony_ci	"univpll_d5_d2",
16762306a36Sopenharmony_ci	"univpll_d4_d2",
16862306a36Sopenharmony_ci	"mmpll_d4_d2",
16962306a36Sopenharmony_ci	"mmpll_d7",
17062306a36Sopenharmony_ci	"univpll_d6",
17162306a36Sopenharmony_ci	"mainpll_d4",
17262306a36Sopenharmony_ci	"mmpll_d5_d4",
17362306a36Sopenharmony_ci	"tvdpll1",
17462306a36Sopenharmony_ci	"tvdpll2",
17562306a36Sopenharmony_ci	"univpll_d4",
17662306a36Sopenharmony_ci	"mmpll_d4"
17762306a36Sopenharmony_ci};
17862306a36Sopenharmony_ci
17962306a36Sopenharmony_cistatic const char * const ipe_parents[] = {
18062306a36Sopenharmony_ci	"clk26m",
18162306a36Sopenharmony_ci	"imgpll",
18262306a36Sopenharmony_ci	"mainpll_d4",
18362306a36Sopenharmony_ci	"mmpll_d6",
18462306a36Sopenharmony_ci	"univpll_d6",
18562306a36Sopenharmony_ci	"mainpll_d6",
18662306a36Sopenharmony_ci	"mmpll_d4_d2",
18762306a36Sopenharmony_ci	"univpll_d4_d2",
18862306a36Sopenharmony_ci	"mainpll_d4_d2",
18962306a36Sopenharmony_ci	"mmpll_d6_d2",
19062306a36Sopenharmony_ci	"univpll_d5_d2",
19162306a36Sopenharmony_ci	"mainpll_d7"
19262306a36Sopenharmony_ci};
19362306a36Sopenharmony_ci
19462306a36Sopenharmony_cistatic const char * const cam_parents[] = {
19562306a36Sopenharmony_ci	"clk26m",
19662306a36Sopenharmony_ci	"tvdpll1",
19762306a36Sopenharmony_ci	"mainpll_d4",
19862306a36Sopenharmony_ci	"mmpll_d4",
19962306a36Sopenharmony_ci	"univpll_d4",
20062306a36Sopenharmony_ci	"univpll_d5",
20162306a36Sopenharmony_ci	"univpll_d6",
20262306a36Sopenharmony_ci	"mmpll_d7",
20362306a36Sopenharmony_ci	"univpll_d4_d2",
20462306a36Sopenharmony_ci	"mainpll_d4_d2",
20562306a36Sopenharmony_ci	"imgpll"
20662306a36Sopenharmony_ci};
20762306a36Sopenharmony_ci
20862306a36Sopenharmony_cistatic const char * const ccu_parents[] = {
20962306a36Sopenharmony_ci	"clk26m",
21062306a36Sopenharmony_ci	"univpll_d6",
21162306a36Sopenharmony_ci	"mainpll_d4_d2",
21262306a36Sopenharmony_ci	"mainpll_d4",
21362306a36Sopenharmony_ci	"univpll_d5",
21462306a36Sopenharmony_ci	"mainpll_d6",
21562306a36Sopenharmony_ci	"mmpll_d6",
21662306a36Sopenharmony_ci	"mmpll_d7",
21762306a36Sopenharmony_ci	"univpll_d4_d2",
21862306a36Sopenharmony_ci	"univpll_d7"
21962306a36Sopenharmony_ci};
22062306a36Sopenharmony_ci
22162306a36Sopenharmony_cistatic const char * const ccu_ahb_parents[] = {
22262306a36Sopenharmony_ci	"clk26m",
22362306a36Sopenharmony_ci	"univpll_d6",
22462306a36Sopenharmony_ci	"mainpll_d4_d2",
22562306a36Sopenharmony_ci	"mainpll_d4",
22662306a36Sopenharmony_ci	"univpll_d5",
22762306a36Sopenharmony_ci	"mainpll_d6",
22862306a36Sopenharmony_ci	"mmpll_d6",
22962306a36Sopenharmony_ci	"mmpll_d7",
23062306a36Sopenharmony_ci	"univpll_d4_d2",
23162306a36Sopenharmony_ci	"univpll_d7"
23262306a36Sopenharmony_ci};
23362306a36Sopenharmony_ci
23462306a36Sopenharmony_cistatic const char * const img_parents[] = {
23562306a36Sopenharmony_ci	"clk26m",
23662306a36Sopenharmony_ci	"imgpll",
23762306a36Sopenharmony_ci	"univpll_d4",
23862306a36Sopenharmony_ci	"mainpll_d4",
23962306a36Sopenharmony_ci	"univpll_d5",
24062306a36Sopenharmony_ci	"mmpll_d6",
24162306a36Sopenharmony_ci	"mmpll_d7",
24262306a36Sopenharmony_ci	"univpll_d6",
24362306a36Sopenharmony_ci	"mainpll_d6",
24462306a36Sopenharmony_ci	"mmpll_d4_d2",
24562306a36Sopenharmony_ci	"univpll_d4_d2",
24662306a36Sopenharmony_ci	"mainpll_d4_d2",
24762306a36Sopenharmony_ci	"univpll_d5_d2"
24862306a36Sopenharmony_ci};
24962306a36Sopenharmony_ci
25062306a36Sopenharmony_cistatic const char * const camtm_parents[] = {
25162306a36Sopenharmony_ci	"clk26m",
25262306a36Sopenharmony_ci	"univpll_d4_d4",
25362306a36Sopenharmony_ci	"univpll_d6_d2",
25462306a36Sopenharmony_ci	"univpll_d6_d4"
25562306a36Sopenharmony_ci};
25662306a36Sopenharmony_ci
25762306a36Sopenharmony_cistatic const char * const dsp_parents[] = {
25862306a36Sopenharmony_ci	"clk26m",
25962306a36Sopenharmony_ci	"univpll_d6_d2",
26062306a36Sopenharmony_ci	"univpll_d4_d2",
26162306a36Sopenharmony_ci	"univpll_d5",
26262306a36Sopenharmony_ci	"univpll_d4",
26362306a36Sopenharmony_ci	"mmpll_d4",
26462306a36Sopenharmony_ci	"mainpll_d3",
26562306a36Sopenharmony_ci	"univpll_d3"
26662306a36Sopenharmony_ci};
26762306a36Sopenharmony_ci
26862306a36Sopenharmony_cistatic const char * const dsp1_parents[] = {
26962306a36Sopenharmony_ci	"clk26m",
27062306a36Sopenharmony_ci	"univpll_d6_d2",
27162306a36Sopenharmony_ci	"mainpll_d4_d2",
27262306a36Sopenharmony_ci	"univpll_d5",
27362306a36Sopenharmony_ci	"mmpll_d5",
27462306a36Sopenharmony_ci	"univpll_d4",
27562306a36Sopenharmony_ci	"mainpll_d3",
27662306a36Sopenharmony_ci	"univpll_d3"
27762306a36Sopenharmony_ci};
27862306a36Sopenharmony_ci
27962306a36Sopenharmony_cistatic const char * const dsp2_parents[] = {
28062306a36Sopenharmony_ci	"clk26m",
28162306a36Sopenharmony_ci	"univpll_d6_d2",
28262306a36Sopenharmony_ci	"mainpll_d4_d2",
28362306a36Sopenharmony_ci	"univpll_d5",
28462306a36Sopenharmony_ci	"mmpll_d5",
28562306a36Sopenharmony_ci	"univpll_d4",
28662306a36Sopenharmony_ci	"mainpll_d3",
28762306a36Sopenharmony_ci	"univpll_d3"
28862306a36Sopenharmony_ci};
28962306a36Sopenharmony_ci
29062306a36Sopenharmony_cistatic const char * const dsp3_parents[] = {
29162306a36Sopenharmony_ci	"clk26m",
29262306a36Sopenharmony_ci	"univpll_d6_d2",
29362306a36Sopenharmony_ci	"mainpll_d4_d2",
29462306a36Sopenharmony_ci	"univpll_d5",
29562306a36Sopenharmony_ci	"mmpll_d5",
29662306a36Sopenharmony_ci	"univpll_d4",
29762306a36Sopenharmony_ci	"mainpll_d3",
29862306a36Sopenharmony_ci	"univpll_d3"
29962306a36Sopenharmony_ci};
30062306a36Sopenharmony_ci
30162306a36Sopenharmony_cistatic const char * const dsp4_parents[] = {
30262306a36Sopenharmony_ci	"clk26m",
30362306a36Sopenharmony_ci	"univpll_d6_d2",
30462306a36Sopenharmony_ci	"univpll_d4_d2",
30562306a36Sopenharmony_ci	"mainpll_d4",
30662306a36Sopenharmony_ci	"univpll_d4",
30762306a36Sopenharmony_ci	"mmpll_d4",
30862306a36Sopenharmony_ci	"mainpll_d3",
30962306a36Sopenharmony_ci	"univpll_d3"
31062306a36Sopenharmony_ci};
31162306a36Sopenharmony_ci
31262306a36Sopenharmony_cistatic const char * const dsp5_parents[] = {
31362306a36Sopenharmony_ci	"clk26m",
31462306a36Sopenharmony_ci	"univpll_d6_d2",
31562306a36Sopenharmony_ci	"univpll_d4_d2",
31662306a36Sopenharmony_ci	"mainpll_d4",
31762306a36Sopenharmony_ci	"univpll_d4",
31862306a36Sopenharmony_ci	"mmpll_d4",
31962306a36Sopenharmony_ci	"mainpll_d3",
32062306a36Sopenharmony_ci	"univpll_d3"
32162306a36Sopenharmony_ci};
32262306a36Sopenharmony_ci
32362306a36Sopenharmony_cistatic const char * const dsp6_parents[] = {
32462306a36Sopenharmony_ci	"clk26m",
32562306a36Sopenharmony_ci	"univpll_d6_d2",
32662306a36Sopenharmony_ci	"univpll_d4_d2",
32762306a36Sopenharmony_ci	"mainpll_d4",
32862306a36Sopenharmony_ci	"univpll_d4",
32962306a36Sopenharmony_ci	"mmpll_d4",
33062306a36Sopenharmony_ci	"mainpll_d3",
33162306a36Sopenharmony_ci	"univpll_d3"
33262306a36Sopenharmony_ci};
33362306a36Sopenharmony_ci
33462306a36Sopenharmony_cistatic const char * const dsp7_parents[] = {
33562306a36Sopenharmony_ci	"clk26m",
33662306a36Sopenharmony_ci	"univpll_d6_d2",
33762306a36Sopenharmony_ci	"univpll_d4_d2",
33862306a36Sopenharmony_ci	"univpll_d5",
33962306a36Sopenharmony_ci	"univpll_d4",
34062306a36Sopenharmony_ci	"mmpll_d4",
34162306a36Sopenharmony_ci	"mainpll_d3",
34262306a36Sopenharmony_ci	"univpll_d3"
34362306a36Sopenharmony_ci};
34462306a36Sopenharmony_ci
34562306a36Sopenharmony_cistatic const char * const mfg_core_tmp_parents[] = {
34662306a36Sopenharmony_ci	"clk26m",
34762306a36Sopenharmony_ci	"mainpll_d5_d2",
34862306a36Sopenharmony_ci	"univpll_d6",
34962306a36Sopenharmony_ci	"univpll_d7"
35062306a36Sopenharmony_ci};
35162306a36Sopenharmony_ci
35262306a36Sopenharmony_cistatic const char * const camtg_parents[] = {
35362306a36Sopenharmony_ci	"clk26m",
35462306a36Sopenharmony_ci	"univpll_192m_d8",
35562306a36Sopenharmony_ci	"univpll_d6_d8",
35662306a36Sopenharmony_ci	"univpll_192m_d4",
35762306a36Sopenharmony_ci	"univpll_192m_d10",
35862306a36Sopenharmony_ci	"clk13m",
35962306a36Sopenharmony_ci	"univpll_192m_d16",
36062306a36Sopenharmony_ci	"univpll_192m_d32"
36162306a36Sopenharmony_ci};
36262306a36Sopenharmony_ci
36362306a36Sopenharmony_cistatic const char * const camtg2_parents[] = {
36462306a36Sopenharmony_ci	"clk26m",
36562306a36Sopenharmony_ci	"univpll_192m_d8",
36662306a36Sopenharmony_ci	"univpll_d6_d8",
36762306a36Sopenharmony_ci	"univpll_192m_d4",
36862306a36Sopenharmony_ci	"univpll_192m_d10",
36962306a36Sopenharmony_ci	"clk13m",
37062306a36Sopenharmony_ci	"univpll_192m_d16",
37162306a36Sopenharmony_ci	"univpll_192m_d32"
37262306a36Sopenharmony_ci};
37362306a36Sopenharmony_ci
37462306a36Sopenharmony_cistatic const char * const camtg3_parents[] = {
37562306a36Sopenharmony_ci	"clk26m",
37662306a36Sopenharmony_ci	"univpll_192m_d8",
37762306a36Sopenharmony_ci	"univpll_d6_d8",
37862306a36Sopenharmony_ci	"univpll_192m_d4",
37962306a36Sopenharmony_ci	"univpll_192m_d10",
38062306a36Sopenharmony_ci	"clk13m",
38162306a36Sopenharmony_ci	"univpll_192m_d16",
38262306a36Sopenharmony_ci	"univpll_192m_d32"
38362306a36Sopenharmony_ci};
38462306a36Sopenharmony_ci
38562306a36Sopenharmony_cistatic const char * const uart_parents[] = {
38662306a36Sopenharmony_ci	"clk26m",
38762306a36Sopenharmony_ci	"univpll_d6_d8"
38862306a36Sopenharmony_ci};
38962306a36Sopenharmony_ci
39062306a36Sopenharmony_cistatic const char * const spi_parents[] = {
39162306a36Sopenharmony_ci	"clk26m",
39262306a36Sopenharmony_ci	"mainpll_d5_d4",
39362306a36Sopenharmony_ci	"mainpll_d6_d4",
39462306a36Sopenharmony_ci	"univpll_d6_d4",
39562306a36Sopenharmony_ci	"univpll_d6_d2",
39662306a36Sopenharmony_ci	"mainpll_d6_d2",
39762306a36Sopenharmony_ci	"mainpll_d4_d4",
39862306a36Sopenharmony_ci	"univpll_d5_d4"
39962306a36Sopenharmony_ci};
40062306a36Sopenharmony_ci
40162306a36Sopenharmony_cistatic const char * const msdc5hclk_parents[] = {
40262306a36Sopenharmony_ci	"clk26m",
40362306a36Sopenharmony_ci	"mainpll_d4_d2",
40462306a36Sopenharmony_ci	"mainpll_d6_d2"
40562306a36Sopenharmony_ci};
40662306a36Sopenharmony_ci
40762306a36Sopenharmony_cistatic const char * const msdc50_0_parents[] = {
40862306a36Sopenharmony_ci	"clk26m",
40962306a36Sopenharmony_ci	"msdcpll",
41062306a36Sopenharmony_ci	"msdcpll_d2",
41162306a36Sopenharmony_ci	"univpll_d4_d4",
41262306a36Sopenharmony_ci	"mainpll_d6_d2",
41362306a36Sopenharmony_ci	"univpll_d4_d2"
41462306a36Sopenharmony_ci};
41562306a36Sopenharmony_ci
41662306a36Sopenharmony_cistatic const char * const msdc30_1_parents[] = {
41762306a36Sopenharmony_ci	"clk26m",
41862306a36Sopenharmony_ci	"univpll_d6_d2",
41962306a36Sopenharmony_ci	"mainpll_d6_d2",
42062306a36Sopenharmony_ci	"mainpll_d7_d2",
42162306a36Sopenharmony_ci	"msdcpll_d2"
42262306a36Sopenharmony_ci};
42362306a36Sopenharmony_ci
42462306a36Sopenharmony_cistatic const char * const msdc30_2_parents[] = {
42562306a36Sopenharmony_ci	"clk26m",
42662306a36Sopenharmony_ci	"univpll_d6_d2",
42762306a36Sopenharmony_ci	"mainpll_d6_d2",
42862306a36Sopenharmony_ci	"mainpll_d7_d2",
42962306a36Sopenharmony_ci	"msdcpll_d2"
43062306a36Sopenharmony_ci};
43162306a36Sopenharmony_ci
43262306a36Sopenharmony_cistatic const char * const intdir_parents[] = {
43362306a36Sopenharmony_ci	"clk26m",
43462306a36Sopenharmony_ci	"univpll_d6",
43562306a36Sopenharmony_ci	"mainpll_d4",
43662306a36Sopenharmony_ci	"univpll_d4"
43762306a36Sopenharmony_ci};
43862306a36Sopenharmony_ci
43962306a36Sopenharmony_cistatic const char * const aud_intbus_parents[] = {
44062306a36Sopenharmony_ci	"clk26m",
44162306a36Sopenharmony_ci	"mainpll_d4_d4",
44262306a36Sopenharmony_ci	"mainpll_d7_d4"
44362306a36Sopenharmony_ci};
44462306a36Sopenharmony_ci
44562306a36Sopenharmony_cistatic const char * const audio_h_parents[] = {
44662306a36Sopenharmony_ci	"clk26m",
44762306a36Sopenharmony_ci	"univpll_d7",
44862306a36Sopenharmony_ci	"apll1",
44962306a36Sopenharmony_ci	"apll2"
45062306a36Sopenharmony_ci};
45162306a36Sopenharmony_ci
45262306a36Sopenharmony_cistatic const char * const pwrap_ulposc_parents[] = {
45362306a36Sopenharmony_ci	"clk26m",
45462306a36Sopenharmony_ci	"ulposc1_d10",
45562306a36Sopenharmony_ci	"ulposc1_d7",
45662306a36Sopenharmony_ci	"ulposc1_d8",
45762306a36Sopenharmony_ci	"ulposc1_d16",
45862306a36Sopenharmony_ci	"mainpll_d4_d8",
45962306a36Sopenharmony_ci	"univpll_d5_d8",
46062306a36Sopenharmony_ci	"tvdpll1_d16"
46162306a36Sopenharmony_ci};
46262306a36Sopenharmony_ci
46362306a36Sopenharmony_cistatic const char * const atb_parents[] = {
46462306a36Sopenharmony_ci	"clk26m",
46562306a36Sopenharmony_ci	"mainpll_d4_d2",
46662306a36Sopenharmony_ci	"mainpll_d5_d2"
46762306a36Sopenharmony_ci};
46862306a36Sopenharmony_ci
46962306a36Sopenharmony_cistatic const char * const sspm_parents[] = {
47062306a36Sopenharmony_ci	"clk26m",
47162306a36Sopenharmony_ci	"mainpll_d7_d2",
47262306a36Sopenharmony_ci	"mainpll_d6_d2",
47362306a36Sopenharmony_ci	"mainpll_d5_d2",
47462306a36Sopenharmony_ci	"mainpll_d9",
47562306a36Sopenharmony_ci	"mainpll_d4_d2"
47662306a36Sopenharmony_ci};
47762306a36Sopenharmony_ci
47862306a36Sopenharmony_cistatic const char * const dp_parents[] = {
47962306a36Sopenharmony_ci	"clk26m",
48062306a36Sopenharmony_ci	"tvdpll1_d2",
48162306a36Sopenharmony_ci	"tvdpll2_d2",
48262306a36Sopenharmony_ci	"tvdpll1_d4",
48362306a36Sopenharmony_ci	"tvdpll2_d4",
48462306a36Sopenharmony_ci	"tvdpll1_d8",
48562306a36Sopenharmony_ci	"tvdpll2_d8",
48662306a36Sopenharmony_ci	"tvdpll1_d16",
48762306a36Sopenharmony_ci	"tvdpll2_d16"
48862306a36Sopenharmony_ci};
48962306a36Sopenharmony_ci
49062306a36Sopenharmony_cistatic const char * const edp_parents[] = {
49162306a36Sopenharmony_ci	"clk26m",
49262306a36Sopenharmony_ci	"tvdpll1_d2",
49362306a36Sopenharmony_ci	"tvdpll2_d2",
49462306a36Sopenharmony_ci	"tvdpll1_d4",
49562306a36Sopenharmony_ci	"tvdpll2_d4",
49662306a36Sopenharmony_ci	"tvdpll1_d8",
49762306a36Sopenharmony_ci	"tvdpll2_d8",
49862306a36Sopenharmony_ci	"tvdpll1_d16",
49962306a36Sopenharmony_ci	"tvdpll2_d16"
50062306a36Sopenharmony_ci};
50162306a36Sopenharmony_ci
50262306a36Sopenharmony_cistatic const char * const dpi_parents[] = {
50362306a36Sopenharmony_ci	"clk26m",
50462306a36Sopenharmony_ci	"tvdpll1_d2",
50562306a36Sopenharmony_ci	"tvdpll2_d2",
50662306a36Sopenharmony_ci	"tvdpll1_d4",
50762306a36Sopenharmony_ci	"tvdpll2_d4",
50862306a36Sopenharmony_ci	"tvdpll1_d8",
50962306a36Sopenharmony_ci	"tvdpll2_d8",
51062306a36Sopenharmony_ci	"tvdpll1_d16",
51162306a36Sopenharmony_ci	"tvdpll2_d16"
51262306a36Sopenharmony_ci};
51362306a36Sopenharmony_ci
51462306a36Sopenharmony_cistatic const char * const disp_pwm0_parents[] = {
51562306a36Sopenharmony_ci	"clk26m",
51662306a36Sopenharmony_ci	"univpll_d6_d4",
51762306a36Sopenharmony_ci	"ulposc1_d2",
51862306a36Sopenharmony_ci	"ulposc1_d4",
51962306a36Sopenharmony_ci	"ulposc1_d16",
52062306a36Sopenharmony_ci	"ethpll_d4"
52162306a36Sopenharmony_ci};
52262306a36Sopenharmony_ci
52362306a36Sopenharmony_cistatic const char * const disp_pwm1_parents[] = {
52462306a36Sopenharmony_ci	"clk26m",
52562306a36Sopenharmony_ci	"univpll_d6_d4",
52662306a36Sopenharmony_ci	"ulposc1_d2",
52762306a36Sopenharmony_ci	"ulposc1_d4",
52862306a36Sopenharmony_ci	"ulposc1_d16"
52962306a36Sopenharmony_ci};
53062306a36Sopenharmony_ci
53162306a36Sopenharmony_cistatic const char * const usb_parents[] = {
53262306a36Sopenharmony_ci	"clk26m",
53362306a36Sopenharmony_ci	"univpll_d5_d4",
53462306a36Sopenharmony_ci	"univpll_d6_d4",
53562306a36Sopenharmony_ci	"univpll_d5_d2"
53662306a36Sopenharmony_ci};
53762306a36Sopenharmony_ci
53862306a36Sopenharmony_cistatic const char * const ssusb_xhci_parents[] = {
53962306a36Sopenharmony_ci	"clk26m",
54062306a36Sopenharmony_ci	"univpll_d5_d4",
54162306a36Sopenharmony_ci	"univpll_d6_d4",
54262306a36Sopenharmony_ci	"univpll_d5_d2"
54362306a36Sopenharmony_ci};
54462306a36Sopenharmony_ci
54562306a36Sopenharmony_cistatic const char * const usb_2p_parents[] = {
54662306a36Sopenharmony_ci	"clk26m",
54762306a36Sopenharmony_ci	"univpll_d5_d4",
54862306a36Sopenharmony_ci	"univpll_d6_d4",
54962306a36Sopenharmony_ci	"univpll_d5_d2"
55062306a36Sopenharmony_ci};
55162306a36Sopenharmony_ci
55262306a36Sopenharmony_cistatic const char * const ssusb_xhci_2p_parents[] = {
55362306a36Sopenharmony_ci	"clk26m",
55462306a36Sopenharmony_ci	"univpll_d5_d4",
55562306a36Sopenharmony_ci	"univpll_d6_d4",
55662306a36Sopenharmony_ci	"univpll_d5_d2"
55762306a36Sopenharmony_ci};
55862306a36Sopenharmony_ci
55962306a36Sopenharmony_cistatic const char * const usb_3p_parents[] = {
56062306a36Sopenharmony_ci	"clk26m",
56162306a36Sopenharmony_ci	"univpll_d5_d4",
56262306a36Sopenharmony_ci	"univpll_d6_d4",
56362306a36Sopenharmony_ci	"univpll_d5_d2"
56462306a36Sopenharmony_ci};
56562306a36Sopenharmony_ci
56662306a36Sopenharmony_cistatic const char * const ssusb_xhci_3p_parents[] = {
56762306a36Sopenharmony_ci	"clk26m",
56862306a36Sopenharmony_ci	"univpll_d5_d4",
56962306a36Sopenharmony_ci	"univpll_d6_d4",
57062306a36Sopenharmony_ci	"univpll_d5_d2"
57162306a36Sopenharmony_ci};
57262306a36Sopenharmony_ci
57362306a36Sopenharmony_cistatic const char * const i2c_parents[] = {
57462306a36Sopenharmony_ci	"clk26m",
57562306a36Sopenharmony_ci	"mainpll_d4_d8",
57662306a36Sopenharmony_ci	"univpll_d5_d4"
57762306a36Sopenharmony_ci};
57862306a36Sopenharmony_ci
57962306a36Sopenharmony_cistatic const char * const seninf_parents[] = {
58062306a36Sopenharmony_ci	"clk26m",
58162306a36Sopenharmony_ci	"univpll_d4_d4",
58262306a36Sopenharmony_ci	"univpll_d6_d2",
58362306a36Sopenharmony_ci	"mainpll_d4_d2",
58462306a36Sopenharmony_ci	"univpll_d7",
58562306a36Sopenharmony_ci	"univpll_d6",
58662306a36Sopenharmony_ci	"mmpll_d6",
58762306a36Sopenharmony_ci	"univpll_d5"
58862306a36Sopenharmony_ci};
58962306a36Sopenharmony_ci
59062306a36Sopenharmony_cistatic const char * const seninf1_parents[] = {
59162306a36Sopenharmony_ci	"clk26m",
59262306a36Sopenharmony_ci	"univpll_d4_d4",
59362306a36Sopenharmony_ci	"univpll_d6_d2",
59462306a36Sopenharmony_ci	"mainpll_d4_d2",
59562306a36Sopenharmony_ci	"univpll_d7",
59662306a36Sopenharmony_ci	"univpll_d6",
59762306a36Sopenharmony_ci	"mmpll_d6",
59862306a36Sopenharmony_ci	"univpll_d5"
59962306a36Sopenharmony_ci};
60062306a36Sopenharmony_ci
60162306a36Sopenharmony_cistatic const char * const gcpu_parents[] = {
60262306a36Sopenharmony_ci	"clk26m",
60362306a36Sopenharmony_ci	"mainpll_d6",
60462306a36Sopenharmony_ci	"univpll_d4_d2",
60562306a36Sopenharmony_ci	"mmpll_d5_d2",
60662306a36Sopenharmony_ci	"univpll_d5_d2"
60762306a36Sopenharmony_ci};
60862306a36Sopenharmony_ci
60962306a36Sopenharmony_cistatic const char * const venc_parents[] = {
61062306a36Sopenharmony_ci	"clk26m",
61162306a36Sopenharmony_ci	"mmpll_d4_d2",
61262306a36Sopenharmony_ci	"mainpll_d6",
61362306a36Sopenharmony_ci	"univpll_d4_d2",
61462306a36Sopenharmony_ci	"mainpll_d4_d2",
61562306a36Sopenharmony_ci	"univpll_d6",
61662306a36Sopenharmony_ci	"mmpll_d6",
61762306a36Sopenharmony_ci	"mainpll_d5_d2",
61862306a36Sopenharmony_ci	"mainpll_d6_d2",
61962306a36Sopenharmony_ci	"mmpll_d9",
62062306a36Sopenharmony_ci	"univpll_d4_d4",
62162306a36Sopenharmony_ci	"mainpll_d4",
62262306a36Sopenharmony_ci	"univpll_d4",
62362306a36Sopenharmony_ci	"univpll_d5",
62462306a36Sopenharmony_ci	"univpll_d5_d2",
62562306a36Sopenharmony_ci	"mainpll_d5"
62662306a36Sopenharmony_ci};
62762306a36Sopenharmony_ci
62862306a36Sopenharmony_cistatic const char * const vdec_parents[] = {
62962306a36Sopenharmony_ci	"clk26m",
63062306a36Sopenharmony_ci	"mainpll_d5_d2",
63162306a36Sopenharmony_ci	"mmpll_d6_d2",
63262306a36Sopenharmony_ci	"univpll_d5_d2",
63362306a36Sopenharmony_ci	"univpll_d4_d2",
63462306a36Sopenharmony_ci	"mmpll_d4_d2",
63562306a36Sopenharmony_ci	"univpll_d6",
63662306a36Sopenharmony_ci	"mainpll_d5",
63762306a36Sopenharmony_ci	"univpll_d5",
63862306a36Sopenharmony_ci	"mmpll_d6",
63962306a36Sopenharmony_ci	"mainpll_d4",
64062306a36Sopenharmony_ci	"tvdpll2",
64162306a36Sopenharmony_ci	"univpll_d4",
64262306a36Sopenharmony_ci	"imgpll",
64362306a36Sopenharmony_ci	"univpll_d6_d2",
64462306a36Sopenharmony_ci	"mmpll_d9"
64562306a36Sopenharmony_ci};
64662306a36Sopenharmony_ci
64762306a36Sopenharmony_cistatic const char * const pwm_parents[] = {
64862306a36Sopenharmony_ci	"clk32k",
64962306a36Sopenharmony_ci	"clk26m",
65062306a36Sopenharmony_ci	"univpll_d4_d8",
65162306a36Sopenharmony_ci	"univpll_d6_d4"
65262306a36Sopenharmony_ci};
65362306a36Sopenharmony_ci
65462306a36Sopenharmony_cistatic const char * const mcupm_parents[] = {
65562306a36Sopenharmony_ci	"clk26m",
65662306a36Sopenharmony_ci	"mainpll_d6_d2",
65762306a36Sopenharmony_ci	"mainpll_d7_d4"
65862306a36Sopenharmony_ci};
65962306a36Sopenharmony_ci
66062306a36Sopenharmony_cistatic const char * const spmi_p_mst_parents[] = {
66162306a36Sopenharmony_ci	"clk26m",
66262306a36Sopenharmony_ci	"clk13m",
66362306a36Sopenharmony_ci	"ulposc1_d8",
66462306a36Sopenharmony_ci	"ulposc1_d10",
66562306a36Sopenharmony_ci	"ulposc1_d16",
66662306a36Sopenharmony_ci	"ulposc1_d7",
66762306a36Sopenharmony_ci	"clk32k",
66862306a36Sopenharmony_ci	"mainpll_d7_d8",
66962306a36Sopenharmony_ci	"mainpll_d6_d8",
67062306a36Sopenharmony_ci	"mainpll_d5_d8"
67162306a36Sopenharmony_ci};
67262306a36Sopenharmony_ci
67362306a36Sopenharmony_cistatic const char * const spmi_m_mst_parents[] = {
67462306a36Sopenharmony_ci	"clk26m",
67562306a36Sopenharmony_ci	"clk13m",
67662306a36Sopenharmony_ci	"ulposc1_d8",
67762306a36Sopenharmony_ci	"ulposc1_d10",
67862306a36Sopenharmony_ci	"ulposc1_d16",
67962306a36Sopenharmony_ci	"ulposc1_d7",
68062306a36Sopenharmony_ci	"clk32k",
68162306a36Sopenharmony_ci	"mainpll_d7_d8",
68262306a36Sopenharmony_ci	"mainpll_d6_d8",
68362306a36Sopenharmony_ci	"mainpll_d5_d8"
68462306a36Sopenharmony_ci};
68562306a36Sopenharmony_ci
68662306a36Sopenharmony_cistatic const char * const dvfsrc_parents[] = {
68762306a36Sopenharmony_ci	"clk26m",
68862306a36Sopenharmony_ci	"ulposc1_d10",
68962306a36Sopenharmony_ci	"univpll_d6_d8",
69062306a36Sopenharmony_ci	"msdcpll_d16"
69162306a36Sopenharmony_ci};
69262306a36Sopenharmony_ci
69362306a36Sopenharmony_cistatic const char * const tl_parents[] = {
69462306a36Sopenharmony_ci	"clk26m",
69562306a36Sopenharmony_ci	"univpll_d5_d4",
69662306a36Sopenharmony_ci	"mainpll_d4_d4"
69762306a36Sopenharmony_ci};
69862306a36Sopenharmony_ci
69962306a36Sopenharmony_cistatic const char * const aes_msdcfde_parents[] = {
70062306a36Sopenharmony_ci	"clk26m",
70162306a36Sopenharmony_ci	"mainpll_d4_d2",
70262306a36Sopenharmony_ci	"mainpll_d6",
70362306a36Sopenharmony_ci	"mainpll_d4_d4",
70462306a36Sopenharmony_ci	"univpll_d4_d2",
70562306a36Sopenharmony_ci	"univpll_d6"
70662306a36Sopenharmony_ci};
70762306a36Sopenharmony_ci
70862306a36Sopenharmony_cistatic const char * const dsi_occ_parents[] = {
70962306a36Sopenharmony_ci	"clk26m",
71062306a36Sopenharmony_ci	"univpll_d6_d2",
71162306a36Sopenharmony_ci	"univpll_d5_d2",
71262306a36Sopenharmony_ci	"univpll_d4_d2"
71362306a36Sopenharmony_ci};
71462306a36Sopenharmony_ci
71562306a36Sopenharmony_cistatic const char * const wpe_vpp_parents[] = {
71662306a36Sopenharmony_ci	"clk26m",
71762306a36Sopenharmony_ci	"mainpll_d5_d2",
71862306a36Sopenharmony_ci	"mmpll_d6_d2",
71962306a36Sopenharmony_ci	"univpll_d5_d2",
72062306a36Sopenharmony_ci	"mainpll_d4_d2",
72162306a36Sopenharmony_ci	"univpll_d4_d2",
72262306a36Sopenharmony_ci	"mmpll_d4_d2",
72362306a36Sopenharmony_ci	"mainpll_d6",
72462306a36Sopenharmony_ci	"mmpll_d7",
72562306a36Sopenharmony_ci	"univpll_d6",
72662306a36Sopenharmony_ci	"mainpll_d5",
72762306a36Sopenharmony_ci	"univpll_d5",
72862306a36Sopenharmony_ci	"mainpll_d4",
72962306a36Sopenharmony_ci	"tvdpll1",
73062306a36Sopenharmony_ci	"univpll_d4"
73162306a36Sopenharmony_ci};
73262306a36Sopenharmony_ci
73362306a36Sopenharmony_cistatic const char * const hdcp_parents[] = {
73462306a36Sopenharmony_ci	"clk26m",
73562306a36Sopenharmony_ci	"univpll_d4_d8",
73662306a36Sopenharmony_ci	"mainpll_d5_d8",
73762306a36Sopenharmony_ci	"univpll_d6_d4"
73862306a36Sopenharmony_ci};
73962306a36Sopenharmony_ci
74062306a36Sopenharmony_cistatic const char * const hdcp_24m_parents[] = {
74162306a36Sopenharmony_ci	"clk26m",
74262306a36Sopenharmony_ci	"univpll_192m_d4",
74362306a36Sopenharmony_ci	"univpll_192m_d8",
74462306a36Sopenharmony_ci	"univpll_d6_d8"
74562306a36Sopenharmony_ci};
74662306a36Sopenharmony_ci
74762306a36Sopenharmony_cistatic const char * const hdmi_apb_parents[] = {
74862306a36Sopenharmony_ci	"clk26m",
74962306a36Sopenharmony_ci	"univpll_d6_d4",
75062306a36Sopenharmony_ci	"msdcpll_d2"
75162306a36Sopenharmony_ci};
75262306a36Sopenharmony_ci
75362306a36Sopenharmony_cistatic const char * const snps_eth_250m_parents[] = {
75462306a36Sopenharmony_ci	"clk26m",
75562306a36Sopenharmony_ci	"ethpll_d2"
75662306a36Sopenharmony_ci};
75762306a36Sopenharmony_ci
75862306a36Sopenharmony_cistatic const char * const snps_eth_62p4m_ptp_parents[] = {
75962306a36Sopenharmony_ci	"apll2_d3",
76062306a36Sopenharmony_ci	"apll1_d3",
76162306a36Sopenharmony_ci	"clk26m",
76262306a36Sopenharmony_ci	"ethpll_d8"
76362306a36Sopenharmony_ci};
76462306a36Sopenharmony_ci
76562306a36Sopenharmony_cistatic const char * const snps_eth_50m_rmii_parents[] = {
76662306a36Sopenharmony_ci	"clk26m",
76762306a36Sopenharmony_ci	"ethpll_d10"
76862306a36Sopenharmony_ci};
76962306a36Sopenharmony_ci
77062306a36Sopenharmony_cistatic const char * const adsp_parents[] = {
77162306a36Sopenharmony_ci	"clk26m",
77262306a36Sopenharmony_ci	"clk13m",
77362306a36Sopenharmony_ci	"mainpll_d6",
77462306a36Sopenharmony_ci	"mainpll_d5_d2",
77562306a36Sopenharmony_ci	"univpll_d4_d4",
77662306a36Sopenharmony_ci	"univpll_d4",
77762306a36Sopenharmony_ci	"ulposc1_d2",
77862306a36Sopenharmony_ci	"ulposc1_ck1",
77962306a36Sopenharmony_ci	"adsppll",
78062306a36Sopenharmony_ci	"adsppll_d2",
78162306a36Sopenharmony_ci	"adsppll_d4",
78262306a36Sopenharmony_ci	"adsppll_d8"
78362306a36Sopenharmony_ci};
78462306a36Sopenharmony_ci
78562306a36Sopenharmony_cistatic const char * const audio_local_bus_parents[] = {
78662306a36Sopenharmony_ci	"clk26m",
78762306a36Sopenharmony_ci	"clk13m",
78862306a36Sopenharmony_ci	"mainpll_d4_d4",
78962306a36Sopenharmony_ci	"mainpll_d7_d2",
79062306a36Sopenharmony_ci	"mainpll_d5_d2",
79162306a36Sopenharmony_ci	"mainpll_d4_d2",
79262306a36Sopenharmony_ci	"mainpll_d7",
79362306a36Sopenharmony_ci	"mainpll_d4",
79462306a36Sopenharmony_ci	"univpll_d6",
79562306a36Sopenharmony_ci	"ulposc1_ck1",
79662306a36Sopenharmony_ci	"ulposc1_d4",
79762306a36Sopenharmony_ci	"ulposc1_d2"
79862306a36Sopenharmony_ci};
79962306a36Sopenharmony_ci
80062306a36Sopenharmony_cistatic const char * const asm_h_parents[] = {
80162306a36Sopenharmony_ci	"clk26m",
80262306a36Sopenharmony_ci	"univpll_d6_d4",
80362306a36Sopenharmony_ci	"univpll_d6_d2",
80462306a36Sopenharmony_ci	"mainpll_d5_d2"
80562306a36Sopenharmony_ci};
80662306a36Sopenharmony_ci
80762306a36Sopenharmony_cistatic const char * const asm_l_parents[] = {
80862306a36Sopenharmony_ci	"clk26m",
80962306a36Sopenharmony_ci	"univpll_d6_d4",
81062306a36Sopenharmony_ci	"univpll_d6_d2",
81162306a36Sopenharmony_ci	"mainpll_d5_d2"
81262306a36Sopenharmony_ci};
81362306a36Sopenharmony_ci
81462306a36Sopenharmony_cistatic const char * const apll1_parents[] = {
81562306a36Sopenharmony_ci	"clk26m",
81662306a36Sopenharmony_ci	"apll1_d4"
81762306a36Sopenharmony_ci};
81862306a36Sopenharmony_ci
81962306a36Sopenharmony_cistatic const char * const apll2_parents[] = {
82062306a36Sopenharmony_ci	"clk26m",
82162306a36Sopenharmony_ci	"apll2_d4"
82262306a36Sopenharmony_ci};
82362306a36Sopenharmony_ci
82462306a36Sopenharmony_cistatic const char * const apll3_parents[] = {
82562306a36Sopenharmony_ci	"clk26m",
82662306a36Sopenharmony_ci	"apll3_d4"
82762306a36Sopenharmony_ci};
82862306a36Sopenharmony_ci
82962306a36Sopenharmony_cistatic const char * const apll4_parents[] = {
83062306a36Sopenharmony_ci	"clk26m",
83162306a36Sopenharmony_ci	"apll4_d4"
83262306a36Sopenharmony_ci};
83362306a36Sopenharmony_ci
83462306a36Sopenharmony_cistatic const char * const apll5_parents[] = {
83562306a36Sopenharmony_ci	"clk26m",
83662306a36Sopenharmony_ci	"apll5_d4"
83762306a36Sopenharmony_ci};
83862306a36Sopenharmony_ci
83962306a36Sopenharmony_cistatic const char * const i2so1_parents[] = {
84062306a36Sopenharmony_ci	"clk26m",
84162306a36Sopenharmony_ci	"apll1",
84262306a36Sopenharmony_ci	"apll2",
84362306a36Sopenharmony_ci	"apll3",
84462306a36Sopenharmony_ci	"apll4",
84562306a36Sopenharmony_ci	"apll5"
84662306a36Sopenharmony_ci};
84762306a36Sopenharmony_ci
84862306a36Sopenharmony_cistatic const char * const i2so2_parents[] = {
84962306a36Sopenharmony_ci	"clk26m",
85062306a36Sopenharmony_ci	"apll1",
85162306a36Sopenharmony_ci	"apll2",
85262306a36Sopenharmony_ci	"apll3",
85362306a36Sopenharmony_ci	"apll4",
85462306a36Sopenharmony_ci	"apll5"
85562306a36Sopenharmony_ci};
85662306a36Sopenharmony_ci
85762306a36Sopenharmony_cistatic const char * const i2si1_parents[] = {
85862306a36Sopenharmony_ci	"clk26m",
85962306a36Sopenharmony_ci	"apll1",
86062306a36Sopenharmony_ci	"apll2",
86162306a36Sopenharmony_ci	"apll3",
86262306a36Sopenharmony_ci	"apll4",
86362306a36Sopenharmony_ci	"apll5"
86462306a36Sopenharmony_ci};
86562306a36Sopenharmony_ci
86662306a36Sopenharmony_cistatic const char * const i2si2_parents[] = {
86762306a36Sopenharmony_ci	"clk26m",
86862306a36Sopenharmony_ci	"apll1",
86962306a36Sopenharmony_ci	"apll2",
87062306a36Sopenharmony_ci	"apll3",
87162306a36Sopenharmony_ci	"apll4",
87262306a36Sopenharmony_ci	"apll5"
87362306a36Sopenharmony_ci};
87462306a36Sopenharmony_ci
87562306a36Sopenharmony_cistatic const char * const dptx_parents[] = {
87662306a36Sopenharmony_ci	"clk26m",
87762306a36Sopenharmony_ci	"apll1",
87862306a36Sopenharmony_ci	"apll2",
87962306a36Sopenharmony_ci	"apll3",
88062306a36Sopenharmony_ci	"apll4",
88162306a36Sopenharmony_ci	"apll5"
88262306a36Sopenharmony_ci};
88362306a36Sopenharmony_ci
88462306a36Sopenharmony_cistatic const char * const aud_iec_parents[] = {
88562306a36Sopenharmony_ci	"clk26m",
88662306a36Sopenharmony_ci	"apll1",
88762306a36Sopenharmony_ci	"apll2",
88862306a36Sopenharmony_ci	"apll3",
88962306a36Sopenharmony_ci	"apll4",
89062306a36Sopenharmony_ci	"apll5"
89162306a36Sopenharmony_ci};
89262306a36Sopenharmony_ci
89362306a36Sopenharmony_cistatic const char * const a1sys_hp_parents[] = {
89462306a36Sopenharmony_ci	"clk26m",
89562306a36Sopenharmony_ci	"apll1_d4"
89662306a36Sopenharmony_ci};
89762306a36Sopenharmony_ci
89862306a36Sopenharmony_cistatic const char * const a2sys_parents[] = {
89962306a36Sopenharmony_ci	"clk26m",
90062306a36Sopenharmony_ci	"apll2_d4"
90162306a36Sopenharmony_ci};
90262306a36Sopenharmony_ci
90362306a36Sopenharmony_cistatic const char * const a3sys_parents[] = {
90462306a36Sopenharmony_ci	"clk26m",
90562306a36Sopenharmony_ci	"apll3_d4",
90662306a36Sopenharmony_ci	"apll4_d4",
90762306a36Sopenharmony_ci	"apll5_d4"
90862306a36Sopenharmony_ci};
90962306a36Sopenharmony_ci
91062306a36Sopenharmony_cistatic const char * const a4sys_parents[] = {
91162306a36Sopenharmony_ci	"clk26m",
91262306a36Sopenharmony_ci	"apll3_d4",
91362306a36Sopenharmony_ci	"apll4_d4",
91462306a36Sopenharmony_ci	"apll5_d4"
91562306a36Sopenharmony_ci};
91662306a36Sopenharmony_ci
91762306a36Sopenharmony_cistatic const char * const ecc_parents[] = {
91862306a36Sopenharmony_ci	"clk26m",
91962306a36Sopenharmony_ci	"mainpll_d4_d4",
92062306a36Sopenharmony_ci	"mainpll_d5_d2",
92162306a36Sopenharmony_ci	"mainpll_d4_d2",
92262306a36Sopenharmony_ci	"mainpll_d6",
92362306a36Sopenharmony_ci	"univpll_d6"
92462306a36Sopenharmony_ci};
92562306a36Sopenharmony_ci
92662306a36Sopenharmony_cistatic const char * const spinor_parents[] = {
92762306a36Sopenharmony_ci	"clk26m",
92862306a36Sopenharmony_ci	"clk13m",
92962306a36Sopenharmony_ci	"mainpll_d7_d8",
93062306a36Sopenharmony_ci	"univpll_d6_d8"
93162306a36Sopenharmony_ci};
93262306a36Sopenharmony_ci
93362306a36Sopenharmony_cistatic const char * const ulposc_parents[] = {
93462306a36Sopenharmony_ci	"ulposc_ck1",
93562306a36Sopenharmony_ci	"ethpll_d2",
93662306a36Sopenharmony_ci	"mainpll_d4_d2",
93762306a36Sopenharmony_ci	"ethpll_d10"
93862306a36Sopenharmony_ci};
93962306a36Sopenharmony_ci
94062306a36Sopenharmony_cistatic const char * const srck_parents[] = {
94162306a36Sopenharmony_ci	"ulposc1_d10",
94262306a36Sopenharmony_ci	"clk26m"
94362306a36Sopenharmony_ci};
94462306a36Sopenharmony_ci
94562306a36Sopenharmony_cistatic const char * const mfg_fast_ref_parents[] = {
94662306a36Sopenharmony_ci	"top_mfg_core_tmp",
94762306a36Sopenharmony_ci	"mfgpll"
94862306a36Sopenharmony_ci};
94962306a36Sopenharmony_ci
95062306a36Sopenharmony_cistatic const struct mtk_mux top_mtk_muxes[] = {
95162306a36Sopenharmony_ci	/*
95262306a36Sopenharmony_ci	 * CLK_CFG_0
95362306a36Sopenharmony_ci	 * axi_sel and bus_aximem_sel are bus clocks, should not be closed by Linux.
95462306a36Sopenharmony_ci	 * spm_sel and scp_sel are main clocks in always-on co-processor.
95562306a36Sopenharmony_ci	 */
95662306a36Sopenharmony_ci	MUX_GATE_CLR_SET_UPD_FLAGS(CLK_TOP_AXI, "top_axi", axi_parents,
95762306a36Sopenharmony_ci				   0x020, 0x024, 0x028, 0, 4, 7, 0x04, 0,
95862306a36Sopenharmony_ci				   CLK_IS_CRITICAL | CLK_SET_RATE_PARENT),
95962306a36Sopenharmony_ci	MUX_GATE_CLR_SET_UPD_FLAGS(CLK_TOP_SPM, "top_spm", spm_parents,
96062306a36Sopenharmony_ci				   0x020, 0x024, 0x028, 8, 4, 15, 0x04, 1,
96162306a36Sopenharmony_ci				   CLK_IS_CRITICAL | CLK_SET_RATE_PARENT),
96262306a36Sopenharmony_ci	MUX_GATE_CLR_SET_UPD_FLAGS(CLK_TOP_SCP, "top_scp", scp_parents,
96362306a36Sopenharmony_ci				   0x020, 0x024, 0x028, 16, 4, 23, 0x04, 2,
96462306a36Sopenharmony_ci				   CLK_IS_CRITICAL | CLK_SET_RATE_PARENT),
96562306a36Sopenharmony_ci	MUX_GATE_CLR_SET_UPD_FLAGS(CLK_TOP_BUS_AXIMEM, "top_bus_aximem", bus_aximem_parents,
96662306a36Sopenharmony_ci				   0x020, 0x024, 0x028, 24, 4, 31, 0x04, 3,
96762306a36Sopenharmony_ci				   CLK_IS_CRITICAL | CLK_SET_RATE_PARENT),
96862306a36Sopenharmony_ci	/* CLK_CFG_1 */
96962306a36Sopenharmony_ci	MUX_GATE_CLR_SET_UPD(CLK_TOP_VPP, "top_vpp",
97062306a36Sopenharmony_ci			     vpp_parents, 0x02C, 0x030, 0x034, 0, 4, 7, 0x04, 4),
97162306a36Sopenharmony_ci	MUX_GATE_CLR_SET_UPD(CLK_TOP_ETHDR, "top_ethdr",
97262306a36Sopenharmony_ci			     ethdr_parents, 0x02C, 0x030, 0x034, 8, 4, 15, 0x04, 5),
97362306a36Sopenharmony_ci	MUX_GATE_CLR_SET_UPD(CLK_TOP_IPE, "top_ipe",
97462306a36Sopenharmony_ci			     ipe_parents, 0x02C, 0x030, 0x034, 16, 4, 23, 0x04, 6),
97562306a36Sopenharmony_ci	MUX_GATE_CLR_SET_UPD(CLK_TOP_CAM, "top_cam",
97662306a36Sopenharmony_ci			     cam_parents, 0x02C, 0x030, 0x034, 24, 4, 31, 0x04, 7),
97762306a36Sopenharmony_ci	/* CLK_CFG_2 */
97862306a36Sopenharmony_ci	MUX_GATE_CLR_SET_UPD(CLK_TOP_CCU, "top_ccu",
97962306a36Sopenharmony_ci			     ccu_parents, 0x038, 0x03C, 0x040, 0, 4, 7, 0x04, 8),
98062306a36Sopenharmony_ci	MUX_GATE_CLR_SET_UPD(CLK_TOP_CCU_AHB, "top_ccu_ahb",
98162306a36Sopenharmony_ci			     ccu_ahb_parents, 0x038, 0x03C, 0x040, 8, 4, 15, 0x04, 9),
98262306a36Sopenharmony_ci	MUX_GATE_CLR_SET_UPD(CLK_TOP_IMG, "top_img",
98362306a36Sopenharmony_ci			     img_parents, 0x038, 0x03C, 0x040, 16, 4, 23, 0x04, 10),
98462306a36Sopenharmony_ci	MUX_GATE_CLR_SET_UPD(CLK_TOP_CAMTM, "top_camtm",
98562306a36Sopenharmony_ci			     camtm_parents, 0x038, 0x03C, 0x040, 24, 4, 31, 0x04, 11),
98662306a36Sopenharmony_ci	/* CLK_CFG_3 */
98762306a36Sopenharmony_ci	MUX_GATE_CLR_SET_UPD(CLK_TOP_DSP, "top_dsp",
98862306a36Sopenharmony_ci			     dsp_parents, 0x044, 0x048, 0x04C, 0, 4, 7, 0x04, 12),
98962306a36Sopenharmony_ci	MUX_GATE_CLR_SET_UPD(CLK_TOP_DSP1, "top_dsp1",
99062306a36Sopenharmony_ci			     dsp1_parents, 0x044, 0x048, 0x04C, 8, 4, 15, 0x04, 13),
99162306a36Sopenharmony_ci	MUX_GATE_CLR_SET_UPD(CLK_TOP_DSP2, "top_dsp2",
99262306a36Sopenharmony_ci			     dsp2_parents, 0x044, 0x048, 0x04C, 16, 4, 23, 0x04, 14),
99362306a36Sopenharmony_ci	MUX_GATE_CLR_SET_UPD(CLK_TOP_DSP3, "top_dsp3",
99462306a36Sopenharmony_ci			     dsp3_parents, 0x044, 0x048, 0x04C, 24, 4, 31, 0x04, 15),
99562306a36Sopenharmony_ci	/* CLK_CFG_4 */
99662306a36Sopenharmony_ci	MUX_GATE_CLR_SET_UPD(CLK_TOP_DSP4, "top_dsp4",
99762306a36Sopenharmony_ci			     dsp4_parents, 0x050, 0x054, 0x058, 0, 4, 7, 0x04, 16),
99862306a36Sopenharmony_ci	MUX_GATE_CLR_SET_UPD(CLK_TOP_DSP5, "top_dsp5",
99962306a36Sopenharmony_ci			     dsp5_parents, 0x050, 0x054, 0x058, 8, 4, 15, 0x04, 17),
100062306a36Sopenharmony_ci	MUX_GATE_CLR_SET_UPD(CLK_TOP_DSP6, "top_dsp6",
100162306a36Sopenharmony_ci			     dsp6_parents, 0x050, 0x054, 0x058, 16, 4, 23, 0x04, 18),
100262306a36Sopenharmony_ci	MUX_GATE_CLR_SET_UPD(CLK_TOP_DSP7, "top_dsp7",
100362306a36Sopenharmony_ci			     dsp7_parents, 0x050, 0x054, 0x058, 24, 4, 31, 0x04, 19),
100462306a36Sopenharmony_ci	/* CLK_CFG_5 */
100562306a36Sopenharmony_ci	MUX_GATE_CLR_SET_UPD(CLK_TOP_MFG_CORE_TMP, "top_mfg_core_tmp",
100662306a36Sopenharmony_ci			     mfg_core_tmp_parents, 0x05C, 0x060, 0x064, 0, 4, 7, 0x04, 20),
100762306a36Sopenharmony_ci	MUX_GATE_CLR_SET_UPD(CLK_TOP_CAMTG, "top_camtg",
100862306a36Sopenharmony_ci			     camtg_parents, 0x05C, 0x060, 0x064, 8, 4, 15, 0x04, 21),
100962306a36Sopenharmony_ci	MUX_GATE_CLR_SET_UPD(CLK_TOP_CAMTG2, "top_camtg2",
101062306a36Sopenharmony_ci			     camtg2_parents, 0x05C, 0x060, 0x064, 16, 4, 23, 0x04, 22),
101162306a36Sopenharmony_ci	MUX_GATE_CLR_SET_UPD(CLK_TOP_CAMTG3, "top_camtg3",
101262306a36Sopenharmony_ci			     camtg3_parents, 0x05C, 0x060, 0x064, 24, 4, 31, 0x04, 23),
101362306a36Sopenharmony_ci	/* CLK_CFG_6 */
101462306a36Sopenharmony_ci	MUX_GATE_CLR_SET_UPD(CLK_TOP_UART, "top_uart",
101562306a36Sopenharmony_ci			     uart_parents, 0x068, 0x06C, 0x070, 0, 4, 7, 0x04, 24),
101662306a36Sopenharmony_ci	MUX_GATE_CLR_SET_UPD(CLK_TOP_SPI, "top_spi",
101762306a36Sopenharmony_ci			     spi_parents, 0x068, 0x06C, 0x070, 8, 4, 15, 0x04, 25),
101862306a36Sopenharmony_ci	MUX_GATE_CLR_SET_UPD_FLAGS(CLK_TOP_MSDC50_0_HCLK, "top_msdc5hclk",
101962306a36Sopenharmony_ci				   msdc5hclk_parents, 0x068, 0x06C, 0x070, 16, 4, 23, 0x04, 26, 0),
102062306a36Sopenharmony_ci	MUX_GATE_CLR_SET_UPD_FLAGS(CLK_TOP_MSDC50_0, "top_msdc50_0",
102162306a36Sopenharmony_ci				   msdc50_0_parents, 0x068, 0x06C, 0x070, 24, 4, 31, 0x04, 27, 0),
102262306a36Sopenharmony_ci	/* CLK_CFG_7 */
102362306a36Sopenharmony_ci	MUX_GATE_CLR_SET_UPD_FLAGS(CLK_TOP_MSDC30_1, "top_msdc30_1",
102462306a36Sopenharmony_ci				   msdc30_1_parents, 0x074, 0x078, 0x07C, 0, 4, 7, 0x04, 28, 0),
102562306a36Sopenharmony_ci	MUX_GATE_CLR_SET_UPD_FLAGS(CLK_TOP_MSDC30_2, "top_msdc30_2",
102662306a36Sopenharmony_ci				   msdc30_2_parents, 0x074, 0x078, 0x07C, 8, 4, 15, 0x04, 29, 0),
102762306a36Sopenharmony_ci	MUX_GATE_CLR_SET_UPD(CLK_TOP_INTDIR, "top_intdir",
102862306a36Sopenharmony_ci			     intdir_parents, 0x074, 0x078, 0x07C, 16, 4, 23, 0x04, 30),
102962306a36Sopenharmony_ci	MUX_GATE_CLR_SET_UPD(CLK_TOP_AUD_INTBUS, "top_aud_intbus",
103062306a36Sopenharmony_ci			     aud_intbus_parents, 0x074, 0x078, 0x07C, 24, 4, 31, 0x04, 31),
103162306a36Sopenharmony_ci	/* CLK_CFG_8 */
103262306a36Sopenharmony_ci	MUX_GATE_CLR_SET_UPD(CLK_TOP_AUDIO_H, "top_audio_h",
103362306a36Sopenharmony_ci			     audio_h_parents, 0x080, 0x084, 0x088, 0, 4, 7, 0x08, 0),
103462306a36Sopenharmony_ci	MUX_GATE_CLR_SET_UPD(CLK_TOP_PWRAP_ULPOSC, "top_pwrap_ulposc",
103562306a36Sopenharmony_ci			     pwrap_ulposc_parents, 0x080, 0x084, 0x088, 8, 4, 15, 0x08, 1),
103662306a36Sopenharmony_ci	MUX_GATE_CLR_SET_UPD(CLK_TOP_ATB, "top_atb",
103762306a36Sopenharmony_ci			     atb_parents, 0x080, 0x084, 0x088, 16, 4, 23, 0x08, 2),
103862306a36Sopenharmony_ci	MUX_GATE_CLR_SET_UPD(CLK_TOP_SSPM, "top_sspm",
103962306a36Sopenharmony_ci			     sspm_parents, 0x080, 0x084, 0x088, 24, 4, 31, 0x08, 3),
104062306a36Sopenharmony_ci	/* CLK_CFG_9 */
104162306a36Sopenharmony_ci	MUX_GATE_CLR_SET_UPD(CLK_TOP_DP, "top_dp",
104262306a36Sopenharmony_ci			     dp_parents, 0x08C, 0x090, 0x094, 0, 4, 7, 0x08, 4),
104362306a36Sopenharmony_ci	MUX_GATE_CLR_SET_UPD(CLK_TOP_EDP, "top_edp",
104462306a36Sopenharmony_ci			     edp_parents, 0x08C, 0x090, 0x094, 8, 4, 15, 0x08, 5),
104562306a36Sopenharmony_ci	MUX_GATE_CLR_SET_UPD(CLK_TOP_DPI, "top_dpi",
104662306a36Sopenharmony_ci			     dpi_parents, 0x08C, 0x090, 0x094, 16, 4, 23, 0x08, 6),
104762306a36Sopenharmony_ci	MUX_GATE_CLR_SET_UPD(CLK_TOP_DISP_PWM0, "top_disp_pwm0",
104862306a36Sopenharmony_ci			     disp_pwm0_parents, 0x08C, 0x090, 0x094, 24, 4, 31, 0x08, 7),
104962306a36Sopenharmony_ci	/* CLK_CFG_10 */
105062306a36Sopenharmony_ci	MUX_GATE_CLR_SET_UPD(CLK_TOP_DISP_PWM1, "top_disp_pwm1",
105162306a36Sopenharmony_ci			     disp_pwm1_parents, 0x098, 0x09C, 0x0A0, 0, 4, 7, 0x08, 8),
105262306a36Sopenharmony_ci	MUX_GATE_CLR_SET_UPD(CLK_TOP_USB_TOP, "top_usb_top",
105362306a36Sopenharmony_ci			     usb_parents, 0x098, 0x09C, 0x0A0, 8, 4, 15, 0x08, 9),
105462306a36Sopenharmony_ci	MUX_GATE_CLR_SET_UPD(CLK_TOP_SSUSB_XHCI, "top_ssusb_xhci",
105562306a36Sopenharmony_ci			     ssusb_xhci_parents, 0x098, 0x09C, 0x0A0, 16, 4, 23, 0x08, 10),
105662306a36Sopenharmony_ci	MUX_GATE_CLR_SET_UPD(CLK_TOP_USB_TOP_2P, "top_usb_top_2p",
105762306a36Sopenharmony_ci			     usb_2p_parents, 0x098, 0x09C, 0x0A0, 24, 4, 31, 0x08, 11),
105862306a36Sopenharmony_ci	/* CLK_CFG_11 */
105962306a36Sopenharmony_ci	MUX_GATE_CLR_SET_UPD(CLK_TOP_SSUSB_XHCI_2P, "top_ssusb_xhci_2p",
106062306a36Sopenharmony_ci			     ssusb_xhci_2p_parents, 0x0A4, 0x0A8, 0x0AC, 0, 4, 7, 0x08, 12),
106162306a36Sopenharmony_ci	MUX_GATE_CLR_SET_UPD(CLK_TOP_USB_TOP_3P, "top_usb_top_3p",
106262306a36Sopenharmony_ci			     usb_3p_parents, 0x0A4, 0x0A8, 0x0AC, 8, 4, 15, 0x08, 13),
106362306a36Sopenharmony_ci	MUX_GATE_CLR_SET_UPD(CLK_TOP_SSUSB_XHCI_3P, "top_ssusb_xhci_3p",
106462306a36Sopenharmony_ci			     ssusb_xhci_3p_parents, 0x0A4, 0x0A8, 0x0AC, 16, 4, 23, 0x08, 14),
106562306a36Sopenharmony_ci	MUX_GATE_CLR_SET_UPD(CLK_TOP_I2C, "top_i2c",
106662306a36Sopenharmony_ci			     i2c_parents, 0x0A4, 0x0A8, 0x0AC, 24, 4, 31, 0x08, 15),
106762306a36Sopenharmony_ci	/* CLK_CFG_12 */
106862306a36Sopenharmony_ci	MUX_GATE_CLR_SET_UPD(CLK_TOP_SENINF, "top_seninf",
106962306a36Sopenharmony_ci			     seninf_parents, 0x0B0, 0x0B4, 0x0B8, 0, 4, 7, 0x08, 16),
107062306a36Sopenharmony_ci	MUX_GATE_CLR_SET_UPD(CLK_TOP_SENINF1, "top_seninf1",
107162306a36Sopenharmony_ci			     seninf1_parents, 0x0B0, 0x0B4, 0x0B8, 8, 4, 15, 0x08, 17),
107262306a36Sopenharmony_ci	MUX_GATE_CLR_SET_UPD(CLK_TOP_GCPU, "top_gcpu",
107362306a36Sopenharmony_ci			     gcpu_parents, 0x0B0, 0x0B4, 0x0B8, 16, 4, 23, 0x08, 18),
107462306a36Sopenharmony_ci	MUX_GATE_CLR_SET_UPD(CLK_TOP_VENC, "top_venc",
107562306a36Sopenharmony_ci			     venc_parents, 0x0B0, 0x0B4, 0x0B8, 24, 4, 31, 0x08, 19),
107662306a36Sopenharmony_ci	/*
107762306a36Sopenharmony_ci	 * CLK_CFG_13
107862306a36Sopenharmony_ci	 * top_mcupm is main clock in co-processor, should not be handled by Linux.
107962306a36Sopenharmony_ci	 */
108062306a36Sopenharmony_ci	MUX_GATE_CLR_SET_UPD(CLK_TOP_VDEC, "top_vdec",
108162306a36Sopenharmony_ci			     vdec_parents, 0x0BC, 0x0C0, 0x0C4, 0, 4, 7, 0x08, 20),
108262306a36Sopenharmony_ci	MUX_GATE_CLR_SET_UPD(CLK_TOP_PWM, "top_pwm",
108362306a36Sopenharmony_ci			     pwm_parents, 0x0BC, 0x0C0, 0x0C4, 8, 4, 15, 0x08, 21),
108462306a36Sopenharmony_ci	MUX_GATE_CLR_SET_UPD_FLAGS(CLK_TOP_MCUPM, "top_mcupm", mcupm_parents,
108562306a36Sopenharmony_ci				   0x0BC, 0x0C0, 0x0C4, 16, 4, 23, 0x08, 22,
108662306a36Sopenharmony_ci				   CLK_IS_CRITICAL | CLK_SET_RATE_PARENT),
108762306a36Sopenharmony_ci	MUX_GATE_CLR_SET_UPD(CLK_TOP_SPMI_P_MST, "top_spmi_p_mst",
108862306a36Sopenharmony_ci			     spmi_p_mst_parents, 0x0BC, 0x0C0, 0x0C4, 24, 4, 31, 0x08, 23),
108962306a36Sopenharmony_ci	/*
109062306a36Sopenharmony_ci	 * CLK_CFG_14
109162306a36Sopenharmony_ci	 * dvfsrc_sel is for internal DVFS usage, should not be handled by Linux.
109262306a36Sopenharmony_ci	 */
109362306a36Sopenharmony_ci	MUX_GATE_CLR_SET_UPD(CLK_TOP_SPMI_M_MST, "top_spmi_m_mst",
109462306a36Sopenharmony_ci			     spmi_m_mst_parents, 0x0C8, 0x0CC, 0x0D0, 0, 4, 7, 0x08, 24),
109562306a36Sopenharmony_ci	MUX_GATE_CLR_SET_UPD_FLAGS(CLK_TOP_DVFSRC, "top_dvfsrc", dvfsrc_parents,
109662306a36Sopenharmony_ci				   0x0C8, 0x0CC, 0x0D0, 8, 4, 15, 0x08, 25,
109762306a36Sopenharmony_ci				   CLK_IS_CRITICAL | CLK_SET_RATE_PARENT),
109862306a36Sopenharmony_ci	MUX_GATE_CLR_SET_UPD(CLK_TOP_TL, "top_tl",
109962306a36Sopenharmony_ci			     tl_parents, 0x0C8, 0x0CC, 0x0D0, 16, 4, 23, 0x08, 26),
110062306a36Sopenharmony_ci	MUX_GATE_CLR_SET_UPD(CLK_TOP_AES_MSDCFDE, "top_aes_msdcfde",
110162306a36Sopenharmony_ci			     aes_msdcfde_parents, 0x0C8, 0x0CC, 0x0D0, 24, 4, 31, 0x08, 27),
110262306a36Sopenharmony_ci	/* CLK_CFG_15 */
110362306a36Sopenharmony_ci	MUX_GATE_CLR_SET_UPD(CLK_TOP_DSI_OCC, "top_dsi_occ",
110462306a36Sopenharmony_ci			     dsi_occ_parents, 0x0D4, 0x0D8, 0x0DC, 0, 4, 7, 0x08, 28),
110562306a36Sopenharmony_ci	MUX_GATE_CLR_SET_UPD(CLK_TOP_WPE_VPP, "top_wpe_vpp",
110662306a36Sopenharmony_ci			     wpe_vpp_parents, 0x0D4, 0x0D8, 0x0DC, 8, 4, 15, 0x08, 29),
110762306a36Sopenharmony_ci	MUX_GATE_CLR_SET_UPD(CLK_TOP_HDCP, "top_hdcp",
110862306a36Sopenharmony_ci			     hdcp_parents, 0x0D4, 0x0D8, 0x0DC, 16, 4, 23, 0x08, 30),
110962306a36Sopenharmony_ci	MUX_GATE_CLR_SET_UPD(CLK_TOP_HDCP_24M, "top_hdcp_24m",
111062306a36Sopenharmony_ci			     hdcp_24m_parents, 0x0D4, 0x0D8, 0x0DC, 24, 4, 31, 0x08, 31),
111162306a36Sopenharmony_ci	/* CLK_CFG_16 */
111262306a36Sopenharmony_ci	MUX_GATE_CLR_SET_UPD(CLK_TOP_HDMI_APB, "top_hdmi_apb",
111362306a36Sopenharmony_ci			     hdmi_apb_parents, 0x0E0, 0x0E4, 0x0E8, 0, 4, 7, 0x0C, 0),
111462306a36Sopenharmony_ci	MUX_GATE_CLR_SET_UPD(CLK_TOP_SNPS_ETH_250M, "top_snps_eth_250m",
111562306a36Sopenharmony_ci			     snps_eth_250m_parents, 0x0E0, 0x0E4, 0x0E8, 8, 4, 15, 0x0C, 1),
111662306a36Sopenharmony_ci	MUX_GATE_CLR_SET_UPD(CLK_TOP_SNPS_ETH_62P4M_PTP, "top_snps_eth_62p4m_ptp",
111762306a36Sopenharmony_ci			     snps_eth_62p4m_ptp_parents, 0x0E0, 0x0E4, 0x0E8, 16, 4, 23, 0x0C, 2),
111862306a36Sopenharmony_ci	MUX_GATE_CLR_SET_UPD(CLK_TOP_SNPS_ETH_50M_RMII, "snps_eth_50m_rmii",
111962306a36Sopenharmony_ci			     snps_eth_50m_rmii_parents, 0x0E0, 0x0E4, 0x0E8, 24, 4, 31, 0x0C, 3),
112062306a36Sopenharmony_ci	/* CLK_CFG_17 */
112162306a36Sopenharmony_ci	MUX_GATE_CLR_SET_UPD(CLK_TOP_ADSP, "top_adsp",
112262306a36Sopenharmony_ci			     adsp_parents, 0x0EC, 0x0F0, 0x0F4, 0, 4, 7, 0x0C, 4),
112362306a36Sopenharmony_ci	MUX_GATE_CLR_SET_UPD(CLK_TOP_AUDIO_LOCAL_BUS, "top_audio_local_bus",
112462306a36Sopenharmony_ci			     audio_local_bus_parents, 0x0EC, 0x0F0, 0x0F4, 8, 4, 15, 0x0C, 5),
112562306a36Sopenharmony_ci	MUX_GATE_CLR_SET_UPD(CLK_TOP_ASM_H, "top_asm_h",
112662306a36Sopenharmony_ci			     asm_h_parents, 0x0EC, 0x0F0, 0x0F4, 16, 4, 23, 0x0C, 6),
112762306a36Sopenharmony_ci	MUX_GATE_CLR_SET_UPD(CLK_TOP_ASM_L, "top_asm_l",
112862306a36Sopenharmony_ci			     asm_l_parents, 0x0EC, 0x0F0, 0x0F4, 24, 4, 31, 0x0C, 7),
112962306a36Sopenharmony_ci	/* CLK_CFG_18 */
113062306a36Sopenharmony_ci	MUX_GATE_CLR_SET_UPD(CLK_TOP_APLL1, "top_apll1",
113162306a36Sopenharmony_ci			     apll1_parents, 0x0F8, 0x0FC, 0x100, 0, 4, 7, 0x0C, 8),
113262306a36Sopenharmony_ci	MUX_GATE_CLR_SET_UPD(CLK_TOP_APLL2, "top_apll2",
113362306a36Sopenharmony_ci			     apll2_parents, 0x0F8, 0x0FC, 0x100, 8, 4, 15, 0x0C, 9),
113462306a36Sopenharmony_ci	MUX_GATE_CLR_SET_UPD(CLK_TOP_APLL3, "top_apll3",
113562306a36Sopenharmony_ci			     apll3_parents, 0x0F8, 0x0FC, 0x100, 16, 4, 23, 0x0C, 10),
113662306a36Sopenharmony_ci	MUX_GATE_CLR_SET_UPD(CLK_TOP_APLL4, "top_apll4",
113762306a36Sopenharmony_ci			     apll4_parents, 0x0F8, 0x0FC, 0x100, 24, 4, 31, 0x0C, 11),
113862306a36Sopenharmony_ci	/* CLK_CFG_19 */
113962306a36Sopenharmony_ci	MUX_GATE_CLR_SET_UPD(CLK_TOP_APLL5, "top_apll5",
114062306a36Sopenharmony_ci			     apll5_parents, 0x0104, 0x0108, 0x010C, 0, 4, 7, 0x0C, 12),
114162306a36Sopenharmony_ci	MUX_GATE_CLR_SET_UPD(CLK_TOP_I2SO1, "top_i2so1",
114262306a36Sopenharmony_ci			     i2so1_parents, 0x0104, 0x0108, 0x010C, 8, 4, 15, 0x0C, 13),
114362306a36Sopenharmony_ci	MUX_GATE_CLR_SET_UPD(CLK_TOP_I2SO2, "top_i2so2",
114462306a36Sopenharmony_ci			     i2so2_parents, 0x0104, 0x0108, 0x010C, 16, 4, 23, 0x0C, 14),
114562306a36Sopenharmony_ci	MUX_GATE_CLR_SET_UPD(CLK_TOP_I2SI1, "top_i2si1",
114662306a36Sopenharmony_ci			     i2si1_parents, 0x0104, 0x0108, 0x010C, 24, 4, 31, 0x0C, 15),
114762306a36Sopenharmony_ci	/* CLK_CFG_20 */
114862306a36Sopenharmony_ci	MUX_GATE_CLR_SET_UPD(CLK_TOP_I2SI2, "top_i2si2",
114962306a36Sopenharmony_ci			     i2si2_parents, 0x0110, 0x0114, 0x0118, 0, 4, 7, 0x0C, 16),
115062306a36Sopenharmony_ci	MUX_GATE_CLR_SET_UPD(CLK_TOP_DPTX, "top_dptx",
115162306a36Sopenharmony_ci			     dptx_parents, 0x0110, 0x0114, 0x0118, 8, 4, 15, 0x0C, 17),
115262306a36Sopenharmony_ci	MUX_GATE_CLR_SET_UPD(CLK_TOP_AUD_IEC, "top_aud_iec",
115362306a36Sopenharmony_ci			     aud_iec_parents, 0x0110, 0x0114, 0x0118, 16, 4, 23, 0x0C, 18),
115462306a36Sopenharmony_ci	MUX_GATE_CLR_SET_UPD(CLK_TOP_A1SYS_HP, "top_a1sys_hp",
115562306a36Sopenharmony_ci			     a1sys_hp_parents, 0x0110, 0x0114, 0x0118, 24, 4, 31, 0x0C, 19),
115662306a36Sopenharmony_ci	/* CLK_CFG_21 */
115762306a36Sopenharmony_ci	MUX_GATE_CLR_SET_UPD(CLK_TOP_A2SYS, "top_a2sys",
115862306a36Sopenharmony_ci			     a2sys_parents, 0x011C, 0x0120, 0x0124, 0, 4, 7, 0x0C, 20),
115962306a36Sopenharmony_ci	MUX_GATE_CLR_SET_UPD(CLK_TOP_A3SYS, "top_a3sys",
116062306a36Sopenharmony_ci			     a3sys_parents, 0x011C, 0x0120, 0x0124, 8, 4, 15, 0x0C, 21),
116162306a36Sopenharmony_ci	MUX_GATE_CLR_SET_UPD(CLK_TOP_A4SYS, "top_a4sys",
116262306a36Sopenharmony_ci			     a4sys_parents, 0x011C, 0x0120, 0x0124, 16, 4, 23, 0x0C, 22),
116362306a36Sopenharmony_ci	MUX_GATE_CLR_SET_UPD(CLK_TOP_ECC, "top_ecc",
116462306a36Sopenharmony_ci			     ecc_parents, 0x011C, 0x0120, 0x0124, 24, 4, 31, 0x0C, 23),
116562306a36Sopenharmony_ci	/*
116662306a36Sopenharmony_ci	 * CLK_CFG_22
116762306a36Sopenharmony_ci	 * top_ulposc/top_srck are clock source of always on co-processor,
116862306a36Sopenharmony_ci	 * should not be closed by Linux.
116962306a36Sopenharmony_ci	 */
117062306a36Sopenharmony_ci	MUX_GATE_CLR_SET_UPD(CLK_TOP_SPINOR, "top_spinor",
117162306a36Sopenharmony_ci			     spinor_parents, 0x0128, 0x012C, 0x0130, 0, 4, 7, 0x0C, 24),
117262306a36Sopenharmony_ci	MUX_GATE_CLR_SET_UPD_FLAGS(CLK_TOP_ULPOSC, "top_ulposc", ulposc_parents,
117362306a36Sopenharmony_ci				   0x0128, 0x012C, 0x0130, 8, 4, 15, 0x0C, 25,
117462306a36Sopenharmony_ci				   CLK_IS_CRITICAL | CLK_SET_RATE_PARENT),
117562306a36Sopenharmony_ci	MUX_GATE_CLR_SET_UPD_FLAGS(CLK_TOP_SRCK, "top_srck", srck_parents,
117662306a36Sopenharmony_ci				   0x0128, 0x012C, 0x0130, 16, 4, 23, 0x0C, 26,
117762306a36Sopenharmony_ci				   CLK_IS_CRITICAL | CLK_SET_RATE_PARENT),
117862306a36Sopenharmony_ci};
117962306a36Sopenharmony_ci
118062306a36Sopenharmony_cistatic const struct mtk_composite top_adj_divs[] = {
118162306a36Sopenharmony_ci	DIV_GATE(CLK_TOP_APLL12_CK_DIV0, "apll12_div0", "top_i2si1", 0x0320, 0, 0x0328, 8, 0),
118262306a36Sopenharmony_ci	DIV_GATE(CLK_TOP_APLL12_CK_DIV1, "apll12_div1", "top_i2si2", 0x0320, 1, 0x0328, 8, 8),
118362306a36Sopenharmony_ci	DIV_GATE(CLK_TOP_APLL12_CK_DIV2, "apll12_div2", "top_i2so1", 0x0320, 2, 0x0328, 8, 16),
118462306a36Sopenharmony_ci	DIV_GATE(CLK_TOP_APLL12_CK_DIV3, "apll12_div3", "top_i2so2", 0x0320, 3, 0x0328, 8, 24),
118562306a36Sopenharmony_ci	DIV_GATE(CLK_TOP_APLL12_CK_DIV4, "apll12_div4", "top_aud_iec", 0x0320, 4, 0x0334, 8, 0),
118662306a36Sopenharmony_ci	DIV_GATE(CLK_TOP_APLL12_CK_DIV9, "apll12_div9", "top_dptx", 0x0320, 9, 0x0338, 8, 8),
118762306a36Sopenharmony_ci};
118862306a36Sopenharmony_cistatic const struct mtk_gate_regs top0_cg_regs = {
118962306a36Sopenharmony_ci	.set_ofs = 0x238,
119062306a36Sopenharmony_ci	.clr_ofs = 0x238,
119162306a36Sopenharmony_ci	.sta_ofs = 0x238,
119262306a36Sopenharmony_ci};
119362306a36Sopenharmony_ci
119462306a36Sopenharmony_cistatic const struct mtk_gate_regs top1_cg_regs = {
119562306a36Sopenharmony_ci	.set_ofs = 0x250,
119662306a36Sopenharmony_ci	.clr_ofs = 0x250,
119762306a36Sopenharmony_ci	.sta_ofs = 0x250,
119862306a36Sopenharmony_ci};
119962306a36Sopenharmony_ci
120062306a36Sopenharmony_ci#define GATE_TOP0(_id, _name, _parent, _shift)			\
120162306a36Sopenharmony_ci	GATE_MTK(_id, _name, _parent, &top0_cg_regs, _shift, &mtk_clk_gate_ops_no_setclr_inv)
120262306a36Sopenharmony_ci
120362306a36Sopenharmony_ci#define GATE_TOP1(_id, _name, _parent, _shift)			\
120462306a36Sopenharmony_ci	GATE_MTK(_id, _name, _parent, &top1_cg_regs, _shift, &mtk_clk_gate_ops_no_setclr_inv)
120562306a36Sopenharmony_ci
120662306a36Sopenharmony_cistatic const struct mtk_gate top_clks[] = {
120762306a36Sopenharmony_ci	/* TOP0 */
120862306a36Sopenharmony_ci	GATE_TOP0(CLK_TOP_CFGREG_CLOCK_EN_VPP0, "cfgreg_clock_vpp0", "top_vpp", 0),
120962306a36Sopenharmony_ci	GATE_TOP0(CLK_TOP_CFGREG_CLOCK_EN_VPP1, "cfgreg_clock_vpp1", "top_vpp", 1),
121062306a36Sopenharmony_ci	GATE_TOP0(CLK_TOP_CFGREG_CLOCK_EN_VDO0, "cfgreg_clock_vdo0", "top_vpp", 2),
121162306a36Sopenharmony_ci	GATE_TOP0(CLK_TOP_CFGREG_CLOCK_EN_VDO1, "cfgreg_clock_vdo1", "top_vpp", 3),
121262306a36Sopenharmony_ci	GATE_TOP0(CLK_TOP_CFGREG_CLOCK_ISP_AXI_GALS, "cfgreg_clock_isp_axi_gals", "top_vpp", 4),
121362306a36Sopenharmony_ci	GATE_TOP0(CLK_TOP_CFGREG_F26M_VPP0, "cfgreg_f26m_vpp0", "clk26m", 5),
121462306a36Sopenharmony_ci	GATE_TOP0(CLK_TOP_CFGREG_F26M_VPP1, "cfgreg_f26m_vpp1", "clk26m", 6),
121562306a36Sopenharmony_ci	GATE_TOP0(CLK_TOP_CFGREG_F26M_VDO0, "cfgreg_f26m_vdo0", "clk26m", 7),
121662306a36Sopenharmony_ci	GATE_TOP0(CLK_TOP_CFGREG_F26M_VDO1, "cfgreg_f26m_vdo1", "clk26m", 8),
121762306a36Sopenharmony_ci	GATE_TOP0(CLK_TOP_CFGREG_AUD_F26M_AUD, "cfgreg_aud_f26m_aud", "clk26m", 9),
121862306a36Sopenharmony_ci	GATE_TOP0(CLK_TOP_CFGREG_UNIPLL_SES, "cfgreg_unipll_ses", "univpll_d2", 15),
121962306a36Sopenharmony_ci	GATE_TOP0(CLK_TOP_CFGREG_F_PCIE_PHY_REF, "cfgreg_f_pcie_phy_ref", "clk26m", 18),
122062306a36Sopenharmony_ci	/* TOP1 */
122162306a36Sopenharmony_ci	GATE_TOP1(CLK_TOP_SSUSB_TOP_REF, "ssusb_ref", "clk26m", 0),
122262306a36Sopenharmony_ci	GATE_TOP1(CLK_TOP_SSUSB_PHY_REF, "ssusb_phy_ref", "clk26m", 1),
122362306a36Sopenharmony_ci	GATE_TOP1(CLK_TOP_SSUSB_TOP_P1_REF, "ssusb_p1_ref", "clk26m", 2),
122462306a36Sopenharmony_ci	GATE_TOP1(CLK_TOP_SSUSB_PHY_P1_REF, "ssusb_phy_p1_ref", "clk26m", 3),
122562306a36Sopenharmony_ci	GATE_TOP1(CLK_TOP_SSUSB_TOP_P2_REF, "ssusb_p2_ref", "clk26m", 4),
122662306a36Sopenharmony_ci	GATE_TOP1(CLK_TOP_SSUSB_PHY_P2_REF, "ssusb_phy_p2_ref", "clk26m", 5),
122762306a36Sopenharmony_ci	GATE_TOP1(CLK_TOP_SSUSB_TOP_P3_REF, "ssusb_p3_ref", "clk26m", 6),
122862306a36Sopenharmony_ci	GATE_TOP1(CLK_TOP_SSUSB_PHY_P3_REF, "ssusb_phy_p3_ref", "clk26m", 7),
122962306a36Sopenharmony_ci};
123062306a36Sopenharmony_ci
123162306a36Sopenharmony_cistatic const struct of_device_id of_match_clk_mt8188_topck[] = {
123262306a36Sopenharmony_ci	{ .compatible = "mediatek,mt8188-topckgen" },
123362306a36Sopenharmony_ci	{ /* sentinel */ }
123462306a36Sopenharmony_ci};
123562306a36Sopenharmony_ciMODULE_DEVICE_TABLE(of, of_match_clk_mt8188_topck);
123662306a36Sopenharmony_ci
123762306a36Sopenharmony_ci/* Register mux notifier for MFG mux */
123862306a36Sopenharmony_cistatic int clk_mt8188_reg_mfg_mux_notifier(struct device *dev, struct clk *clk)
123962306a36Sopenharmony_ci{
124062306a36Sopenharmony_ci	struct mtk_mux_nb *mfg_mux_nb;
124162306a36Sopenharmony_ci
124262306a36Sopenharmony_ci	mfg_mux_nb = devm_kzalloc(dev, sizeof(*mfg_mux_nb), GFP_KERNEL);
124362306a36Sopenharmony_ci	if (!mfg_mux_nb)
124462306a36Sopenharmony_ci		return -ENOMEM;
124562306a36Sopenharmony_ci
124662306a36Sopenharmony_ci	mfg_mux_nb->ops = &clk_mux_ops;
124762306a36Sopenharmony_ci	mfg_mux_nb->bypass_index = 0; /* Bypass to TOP_MFG_CORE_TMP */
124862306a36Sopenharmony_ci
124962306a36Sopenharmony_ci	return devm_mtk_clk_mux_notifier_register(dev, clk, mfg_mux_nb);
125062306a36Sopenharmony_ci}
125162306a36Sopenharmony_ci
125262306a36Sopenharmony_cistatic int clk_mt8188_topck_probe(struct platform_device *pdev)
125362306a36Sopenharmony_ci{
125462306a36Sopenharmony_ci	struct clk_hw_onecell_data *top_clk_data;
125562306a36Sopenharmony_ci	struct device_node *node = pdev->dev.of_node;
125662306a36Sopenharmony_ci	struct clk_hw *hw;
125762306a36Sopenharmony_ci	int r;
125862306a36Sopenharmony_ci	void __iomem *base;
125962306a36Sopenharmony_ci
126062306a36Sopenharmony_ci	top_clk_data = mtk_alloc_clk_data(CLK_TOP_NR_CLK);
126162306a36Sopenharmony_ci	if (!top_clk_data)
126262306a36Sopenharmony_ci		return -ENOMEM;
126362306a36Sopenharmony_ci
126462306a36Sopenharmony_ci	base = devm_platform_ioremap_resource(pdev, 0);
126562306a36Sopenharmony_ci	if (IS_ERR(base)) {
126662306a36Sopenharmony_ci		r = PTR_ERR(base);
126762306a36Sopenharmony_ci		goto free_top_data;
126862306a36Sopenharmony_ci	}
126962306a36Sopenharmony_ci
127062306a36Sopenharmony_ci	r = mtk_clk_register_fixed_clks(top_fixed_clks, ARRAY_SIZE(top_fixed_clks),
127162306a36Sopenharmony_ci					top_clk_data);
127262306a36Sopenharmony_ci	if (r)
127362306a36Sopenharmony_ci		goto free_top_data;
127462306a36Sopenharmony_ci
127562306a36Sopenharmony_ci	r = mtk_clk_register_factors(top_divs, ARRAY_SIZE(top_divs), top_clk_data);
127662306a36Sopenharmony_ci	if (r)
127762306a36Sopenharmony_ci		goto unregister_fixed_clks;
127862306a36Sopenharmony_ci
127962306a36Sopenharmony_ci	r = mtk_clk_register_muxes(&pdev->dev, top_mtk_muxes,
128062306a36Sopenharmony_ci				   ARRAY_SIZE(top_mtk_muxes), node,
128162306a36Sopenharmony_ci				   &mt8188_clk_lock, top_clk_data);
128262306a36Sopenharmony_ci	if (r)
128362306a36Sopenharmony_ci		goto unregister_factors;
128462306a36Sopenharmony_ci
128562306a36Sopenharmony_ci	hw = devm_clk_hw_register_mux(&pdev->dev, "mfg_ck_fast_ref", mfg_fast_ref_parents,
128662306a36Sopenharmony_ci				      ARRAY_SIZE(mfg_fast_ref_parents), CLK_SET_RATE_PARENT,
128762306a36Sopenharmony_ci				      (base + 0x250), 8, 1, 0, &mt8188_clk_lock);
128862306a36Sopenharmony_ci	if (IS_ERR(hw)) {
128962306a36Sopenharmony_ci		r = PTR_ERR(hw);
129062306a36Sopenharmony_ci		goto unregister_muxes;
129162306a36Sopenharmony_ci	}
129262306a36Sopenharmony_ci	top_clk_data->hws[CLK_TOP_MFG_CK_FAST_REF] = hw;
129362306a36Sopenharmony_ci
129462306a36Sopenharmony_ci	r = clk_mt8188_reg_mfg_mux_notifier(&pdev->dev,
129562306a36Sopenharmony_ci					    top_clk_data->hws[CLK_TOP_MFG_CK_FAST_REF]->clk);
129662306a36Sopenharmony_ci	if (r)
129762306a36Sopenharmony_ci		goto unregister_muxes;
129862306a36Sopenharmony_ci
129962306a36Sopenharmony_ci	r = mtk_clk_register_composites(&pdev->dev, top_adj_divs,
130062306a36Sopenharmony_ci					ARRAY_SIZE(top_adj_divs), base,
130162306a36Sopenharmony_ci					&mt8188_clk_lock, top_clk_data);
130262306a36Sopenharmony_ci	if (r)
130362306a36Sopenharmony_ci		goto unregister_muxes;
130462306a36Sopenharmony_ci
130562306a36Sopenharmony_ci	r = mtk_clk_register_gates(&pdev->dev, node, top_clks,
130662306a36Sopenharmony_ci				   ARRAY_SIZE(top_clks), top_clk_data);
130762306a36Sopenharmony_ci	if (r)
130862306a36Sopenharmony_ci		goto unregister_composite_divs;
130962306a36Sopenharmony_ci
131062306a36Sopenharmony_ci	r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, top_clk_data);
131162306a36Sopenharmony_ci	if (r)
131262306a36Sopenharmony_ci		goto unregister_gates;
131362306a36Sopenharmony_ci
131462306a36Sopenharmony_ci	platform_set_drvdata(pdev, top_clk_data);
131562306a36Sopenharmony_ci
131662306a36Sopenharmony_ci	return r;
131762306a36Sopenharmony_ci
131862306a36Sopenharmony_ciunregister_gates:
131962306a36Sopenharmony_ci	mtk_clk_unregister_gates(top_clks, ARRAY_SIZE(top_clks), top_clk_data);
132062306a36Sopenharmony_ciunregister_composite_divs:
132162306a36Sopenharmony_ci	mtk_clk_unregister_composites(top_adj_divs, ARRAY_SIZE(top_adj_divs), top_clk_data);
132262306a36Sopenharmony_ciunregister_muxes:
132362306a36Sopenharmony_ci	mtk_clk_unregister_muxes(top_mtk_muxes, ARRAY_SIZE(top_mtk_muxes), top_clk_data);
132462306a36Sopenharmony_ciunregister_factors:
132562306a36Sopenharmony_ci	mtk_clk_unregister_factors(top_divs, ARRAY_SIZE(top_divs), top_clk_data);
132662306a36Sopenharmony_ciunregister_fixed_clks:
132762306a36Sopenharmony_ci	mtk_clk_unregister_fixed_clks(top_fixed_clks, ARRAY_SIZE(top_fixed_clks), top_clk_data);
132862306a36Sopenharmony_cifree_top_data:
132962306a36Sopenharmony_ci	mtk_free_clk_data(top_clk_data);
133062306a36Sopenharmony_ci	return r;
133162306a36Sopenharmony_ci}
133262306a36Sopenharmony_ci
133362306a36Sopenharmony_cistatic void clk_mt8188_topck_remove(struct platform_device *pdev)
133462306a36Sopenharmony_ci{
133562306a36Sopenharmony_ci	struct clk_hw_onecell_data *top_clk_data = platform_get_drvdata(pdev);
133662306a36Sopenharmony_ci	struct device_node *node = pdev->dev.of_node;
133762306a36Sopenharmony_ci
133862306a36Sopenharmony_ci	of_clk_del_provider(node);
133962306a36Sopenharmony_ci	mtk_clk_unregister_gates(top_clks, ARRAY_SIZE(top_clks), top_clk_data);
134062306a36Sopenharmony_ci	mtk_clk_unregister_composites(top_adj_divs, ARRAY_SIZE(top_adj_divs), top_clk_data);
134162306a36Sopenharmony_ci	mtk_clk_unregister_muxes(top_mtk_muxes, ARRAY_SIZE(top_mtk_muxes), top_clk_data);
134262306a36Sopenharmony_ci	mtk_clk_unregister_factors(top_divs, ARRAY_SIZE(top_divs), top_clk_data);
134362306a36Sopenharmony_ci	mtk_clk_unregister_fixed_clks(top_fixed_clks, ARRAY_SIZE(top_fixed_clks), top_clk_data);
134462306a36Sopenharmony_ci	mtk_free_clk_data(top_clk_data);
134562306a36Sopenharmony_ci}
134662306a36Sopenharmony_ci
134762306a36Sopenharmony_cistatic struct platform_driver clk_mt8188_topck_drv = {
134862306a36Sopenharmony_ci	.probe = clk_mt8188_topck_probe,
134962306a36Sopenharmony_ci	.remove_new = clk_mt8188_topck_remove,
135062306a36Sopenharmony_ci	.driver = {
135162306a36Sopenharmony_ci		.name = "clk-mt8188-topck",
135262306a36Sopenharmony_ci		.of_match_table = of_match_clk_mt8188_topck,
135362306a36Sopenharmony_ci	},
135462306a36Sopenharmony_ci};
135562306a36Sopenharmony_cimodule_platform_driver(clk_mt8188_topck_drv);
135662306a36Sopenharmony_ciMODULE_LICENSE("GPL");
1357