162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * Copyright (c) 2019 MediaTek Inc. 462306a36Sopenharmony_ci * Author: Wendell Lin <wendell.lin@mediatek.com> 562306a36Sopenharmony_ci */ 662306a36Sopenharmony_ci 762306a36Sopenharmony_ci#include <linux/module.h> 862306a36Sopenharmony_ci#include <linux/of.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#include "clk-pll.h" 1562306a36Sopenharmony_ci 1662306a36Sopenharmony_ci#include <dt-bindings/clock/mt6779-clk.h> 1762306a36Sopenharmony_ci 1862306a36Sopenharmony_cistatic DEFINE_SPINLOCK(mt6779_clk_lock); 1962306a36Sopenharmony_ci 2062306a36Sopenharmony_cistatic const struct mtk_fixed_clk top_fixed_clks[] = { 2162306a36Sopenharmony_ci FIXED_CLK(CLK_TOP_CLK26M, "f_f26m_ck", "clk26m", 26000000), 2262306a36Sopenharmony_ci}; 2362306a36Sopenharmony_ci 2462306a36Sopenharmony_cistatic const struct mtk_fixed_factor top_divs[] = { 2562306a36Sopenharmony_ci FACTOR(CLK_TOP_CLK13M, "clk13m", "clk26m", 1, 2), 2662306a36Sopenharmony_ci FACTOR(CLK_TOP_F26M_CK_D2, "csw_f26m_ck_d2", "clk26m", 1, 2), 2762306a36Sopenharmony_ci FACTOR(CLK_TOP_MAINPLL_CK, "mainpll_ck", "mainpll", 1, 1), 2862306a36Sopenharmony_ci FACTOR(CLK_TOP_MAINPLL_D2, "mainpll_d2", "mainpll_ck", 1, 2), 2962306a36Sopenharmony_ci FACTOR(CLK_TOP_MAINPLL_D2_D2, "mainpll_d2_d2", "mainpll_d2", 1, 2), 3062306a36Sopenharmony_ci FACTOR(CLK_TOP_MAINPLL_D2_D4, "mainpll_d2_d4", "mainpll_d2", 1, 4), 3162306a36Sopenharmony_ci FACTOR(CLK_TOP_MAINPLL_D2_D8, "mainpll_d2_d8", "mainpll_d2", 1, 8), 3262306a36Sopenharmony_ci FACTOR(CLK_TOP_MAINPLL_D2_D16, "mainpll_d2_d16", "mainpll_d2", 1, 16), 3362306a36Sopenharmony_ci FACTOR(CLK_TOP_MAINPLL_D3, "mainpll_d3", "mainpll", 1, 3), 3462306a36Sopenharmony_ci FACTOR(CLK_TOP_MAINPLL_D3_D2, "mainpll_d3_d2", "mainpll_d3", 1, 2), 3562306a36Sopenharmony_ci FACTOR(CLK_TOP_MAINPLL_D3_D4, "mainpll_d3_d4", "mainpll_d3", 1, 4), 3662306a36Sopenharmony_ci FACTOR(CLK_TOP_MAINPLL_D3_D8, "mainpll_d3_d8", "mainpll_d3", 1, 8), 3762306a36Sopenharmony_ci FACTOR(CLK_TOP_MAINPLL_D5, "mainpll_d5", "mainpll", 1, 5), 3862306a36Sopenharmony_ci FACTOR(CLK_TOP_MAINPLL_D5_D2, "mainpll_d5_d2", "mainpll_d5", 1, 2), 3962306a36Sopenharmony_ci FACTOR(CLK_TOP_MAINPLL_D5_D4, "mainpll_d5_d4", "mainpll_d5", 1, 4), 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_UNIVPLL_CK, "univpll", "univ2pll", 1, 2), 4462306a36Sopenharmony_ci FACTOR(CLK_TOP_UNIVPLL_D2, "univpll_d2", "univpll", 1, 2), 4562306a36Sopenharmony_ci FACTOR(CLK_TOP_UNIVPLL_D2_D2, "univpll_d2_d2", "univpll_d2", 1, 2), 4662306a36Sopenharmony_ci FACTOR(CLK_TOP_UNIVPLL_D2_D4, "univpll_d2_d4", "univpll_d2", 1, 4), 4762306a36Sopenharmony_ci FACTOR(CLK_TOP_UNIVPLL_D2_D8, "univpll_d2_d8", "univpll_d2", 1, 8), 4862306a36Sopenharmony_ci FACTOR(CLK_TOP_UNIVPLL_D3, "univpll_d3", "univpll", 1, 3), 4962306a36Sopenharmony_ci FACTOR(CLK_TOP_UNIVPLL_D3_D2, "univpll_d3_d2", "univpll_d3", 1, 2), 5062306a36Sopenharmony_ci FACTOR(CLK_TOP_UNIVPLL_D3_D4, "univpll_d3_d4", "univpll_d3", 1, 4), 5162306a36Sopenharmony_ci FACTOR(CLK_TOP_UNIVPLL_D3_D8, "univpll_d3_d8", "univpll_d3", 1, 8), 5262306a36Sopenharmony_ci FACTOR(CLK_TOP_UNIVPLL_D3_D16, "univpll_d3_d16", "univpll_d3", 1, 16), 5362306a36Sopenharmony_ci FACTOR(CLK_TOP_UNIVPLL_D5, "univpll_d5", "univpll", 1, 5), 5462306a36Sopenharmony_ci FACTOR(CLK_TOP_UNIVPLL_D5_D2, "univpll_d5_d2", "univpll_d5", 1, 2), 5562306a36Sopenharmony_ci FACTOR(CLK_TOP_UNIVPLL_D5_D4, "univpll_d5_d4", "univpll_d5", 1, 4), 5662306a36Sopenharmony_ci FACTOR(CLK_TOP_UNIVPLL_D5_D8, "univpll_d5_d8", "univpll_d5", 1, 8), 5762306a36Sopenharmony_ci FACTOR(CLK_TOP_UNIVPLL_D7, "univpll_d7", "univpll", 1, 7), 5862306a36Sopenharmony_ci FACTOR(CLK_TOP_UNIVP_192M_CK, "univpll_192m_ck", "univ2pll", 1, 13), 5962306a36Sopenharmony_ci FACTOR(CLK_TOP_UNIVP_192M_D2, "univpll_192m_d2", "univpll_192m_ck", 6062306a36Sopenharmony_ci 1, 2), 6162306a36Sopenharmony_ci FACTOR(CLK_TOP_UNIVP_192M_D4, "univpll_192m_d4", "univpll_192m_ck", 6262306a36Sopenharmony_ci 1, 4), 6362306a36Sopenharmony_ci FACTOR(CLK_TOP_UNIVP_192M_D8, "univpll_192m_d8", "univpll_192m_ck", 6462306a36Sopenharmony_ci 1, 8), 6562306a36Sopenharmony_ci FACTOR(CLK_TOP_UNIVP_192M_D16, "univpll_192m_d16", "univpll_192m_ck", 6662306a36Sopenharmony_ci 1, 16), 6762306a36Sopenharmony_ci FACTOR(CLK_TOP_UNIVP_192M_D32, "univpll_192m_d32", "univpll_192m_ck", 6862306a36Sopenharmony_ci 1, 32), 6962306a36Sopenharmony_ci FACTOR(CLK_TOP_APLL1_CK, "apll1_ck", "apll1", 1, 1), 7062306a36Sopenharmony_ci FACTOR(CLK_TOP_APLL1_D2, "apll1_d2", "apll1", 1, 2), 7162306a36Sopenharmony_ci FACTOR(CLK_TOP_APLL1_D4, "apll1_d4", "apll1", 1, 4), 7262306a36Sopenharmony_ci FACTOR(CLK_TOP_APLL1_D8, "apll1_d8", "apll1", 1, 8), 7362306a36Sopenharmony_ci FACTOR(CLK_TOP_APLL2_CK, "apll2_ck", "apll2", 1, 1), 7462306a36Sopenharmony_ci FACTOR(CLK_TOP_APLL2_D2, "apll2_d2", "apll2", 1, 2), 7562306a36Sopenharmony_ci FACTOR(CLK_TOP_APLL2_D4, "apll2_d4", "apll2", 1, 4), 7662306a36Sopenharmony_ci FACTOR(CLK_TOP_APLL2_D8, "apll2_d8", "apll2", 1, 8), 7762306a36Sopenharmony_ci FACTOR(CLK_TOP_TVDPLL_CK, "tvdpll_ck", "tvdpll", 1, 1), 7862306a36Sopenharmony_ci FACTOR(CLK_TOP_TVDPLL_D2, "tvdpll_d2", "tvdpll_ck", 1, 2), 7962306a36Sopenharmony_ci FACTOR(CLK_TOP_TVDPLL_D4, "tvdpll_d4", "tvdpll", 1, 4), 8062306a36Sopenharmony_ci FACTOR(CLK_TOP_TVDPLL_D8, "tvdpll_d8", "tvdpll", 1, 8), 8162306a36Sopenharmony_ci FACTOR(CLK_TOP_TVDPLL_D16, "tvdpll_d16", "tvdpll", 1, 16), 8262306a36Sopenharmony_ci FACTOR(CLK_TOP_MMPLL_CK, "mmpll_ck", "mmpll", 1, 1), 8362306a36Sopenharmony_ci FACTOR(CLK_TOP_MMPLL_D4, "mmpll_d4", "mmpll", 1, 4), 8462306a36Sopenharmony_ci FACTOR(CLK_TOP_MMPLL_D4_D2, "mmpll_d4_d2", "mmpll_d4", 1, 2), 8562306a36Sopenharmony_ci FACTOR(CLK_TOP_MMPLL_D4_D4, "mmpll_d4_d4", "mmpll_d4", 1, 4), 8662306a36Sopenharmony_ci FACTOR(CLK_TOP_MMPLL_D5, "mmpll_d5", "mmpll", 1, 5), 8762306a36Sopenharmony_ci FACTOR(CLK_TOP_MMPLL_D5_D2, "mmpll_d5_d2", "mmpll_d5", 1, 2), 8862306a36Sopenharmony_ci FACTOR(CLK_TOP_MMPLL_D5_D4, "mmpll_d5_d4", "mmpll_d5", 1, 4), 8962306a36Sopenharmony_ci FACTOR(CLK_TOP_MMPLL_D6, "mmpll_d6", "mmpll", 1, 6), 9062306a36Sopenharmony_ci FACTOR(CLK_TOP_MMPLL_D7, "mmpll_d7", "mmpll", 1, 7), 9162306a36Sopenharmony_ci FACTOR(CLK_TOP_MFGPLL_CK, "mfgpll_ck", "mfgpll", 1, 1), 9262306a36Sopenharmony_ci FACTOR(CLK_TOP_ADSPPLL_CK, "adsppll_ck", "adsppll", 1, 1), 9362306a36Sopenharmony_ci FACTOR(CLK_TOP_ADSPPLL_D4, "adsppll_d4", "adsppll", 1, 4), 9462306a36Sopenharmony_ci FACTOR(CLK_TOP_ADSPPLL_D5, "adsppll_d5", "adsppll", 1, 5), 9562306a36Sopenharmony_ci FACTOR(CLK_TOP_ADSPPLL_D6, "adsppll_d6", "adsppll", 1, 6), 9662306a36Sopenharmony_ci FACTOR(CLK_TOP_MSDCPLL_CK, "msdcpll_ck", "msdcpll", 1, 1), 9762306a36Sopenharmony_ci FACTOR(CLK_TOP_MSDCPLL_D2, "msdcpll_d2", "msdcpll", 1, 2), 9862306a36Sopenharmony_ci FACTOR(CLK_TOP_MSDCPLL_D4, "msdcpll_d4", "msdcpll", 1, 4), 9962306a36Sopenharmony_ci FACTOR(CLK_TOP_MSDCPLL_D8, "msdcpll_d8", "msdcpll", 1, 8), 10062306a36Sopenharmony_ci FACTOR(CLK_TOP_MSDCPLL_D16, "msdcpll_d16", "msdcpll", 1, 16), 10162306a36Sopenharmony_ci FACTOR(CLK_TOP_AD_OSC_CK, "ad_osc_ck", "osc", 1, 1), 10262306a36Sopenharmony_ci FACTOR(CLK_TOP_OSC_D2, "osc_d2", "osc", 1, 2), 10362306a36Sopenharmony_ci FACTOR(CLK_TOP_OSC_D4, "osc_d4", "osc", 1, 4), 10462306a36Sopenharmony_ci FACTOR(CLK_TOP_OSC_D8, "osc_d8", "osc", 1, 8), 10562306a36Sopenharmony_ci FACTOR(CLK_TOP_OSC_D10, "osc_d10", "osc", 1, 10), 10662306a36Sopenharmony_ci FACTOR(CLK_TOP_OSC_D16, "osc_d16", "osc", 1, 16), 10762306a36Sopenharmony_ci FACTOR(CLK_TOP_AD_OSC2_CK, "ad_osc2_ck", "osc2", 1, 1), 10862306a36Sopenharmony_ci FACTOR(CLK_TOP_OSC2_D2, "osc2_d2", "osc2", 1, 2), 10962306a36Sopenharmony_ci FACTOR(CLK_TOP_OSC2_D3, "osc2_d3", "osc2", 1, 3), 11062306a36Sopenharmony_ci FACTOR(CLK_TOP_TVDPLL_MAINPLL_D2_CK, "tvdpll_mainpll_d2_ck", 11162306a36Sopenharmony_ci "tvdpll", 1, 1), 11262306a36Sopenharmony_ci FACTOR(CLK_TOP_FMEM_466M_CK, "fmem_466m_ck", "fmem", 1, 1), 11362306a36Sopenharmony_ci}; 11462306a36Sopenharmony_ci 11562306a36Sopenharmony_cistatic const char * const axi_parents[] = { 11662306a36Sopenharmony_ci "clk26m", 11762306a36Sopenharmony_ci "mainpll_d2_d4", 11862306a36Sopenharmony_ci "mainpll_d7", 11962306a36Sopenharmony_ci "osc_d4" 12062306a36Sopenharmony_ci}; 12162306a36Sopenharmony_ci 12262306a36Sopenharmony_cistatic const char * const mm_parents[] = { 12362306a36Sopenharmony_ci "clk26m", 12462306a36Sopenharmony_ci "tvdpll_mainpll_d2_ck", 12562306a36Sopenharmony_ci "mmpll_d7", 12662306a36Sopenharmony_ci "mmpll_d5_d2", 12762306a36Sopenharmony_ci "mainpll_d2_d2", 12862306a36Sopenharmony_ci "mainpll_d3_d2" 12962306a36Sopenharmony_ci}; 13062306a36Sopenharmony_ci 13162306a36Sopenharmony_cistatic const char * const scp_parents[] = { 13262306a36Sopenharmony_ci "clk26m", 13362306a36Sopenharmony_ci "univpll_d2_d8", 13462306a36Sopenharmony_ci "mainpll_d2_d4", 13562306a36Sopenharmony_ci "mainpll_d3", 13662306a36Sopenharmony_ci "univpll_d3", 13762306a36Sopenharmony_ci "ad_osc2_ck", 13862306a36Sopenharmony_ci "osc2_d2", 13962306a36Sopenharmony_ci "osc2_d3" 14062306a36Sopenharmony_ci}; 14162306a36Sopenharmony_ci 14262306a36Sopenharmony_cistatic const char * const img_parents[] = { 14362306a36Sopenharmony_ci "clk26m", 14462306a36Sopenharmony_ci "mainpll_d2", 14562306a36Sopenharmony_ci "mainpll_d2", 14662306a36Sopenharmony_ci "univpll_d3", 14762306a36Sopenharmony_ci "mainpll_d3", 14862306a36Sopenharmony_ci "mmpll_d5_d2", 14962306a36Sopenharmony_ci "tvdpll_mainpll_d2_ck", 15062306a36Sopenharmony_ci "mainpll_d5" 15162306a36Sopenharmony_ci}; 15262306a36Sopenharmony_ci 15362306a36Sopenharmony_cistatic const char * const ipe_parents[] = { 15462306a36Sopenharmony_ci "clk26m", 15562306a36Sopenharmony_ci "mainpll_d2", 15662306a36Sopenharmony_ci "mmpll_d7", 15762306a36Sopenharmony_ci "univpll_d3", 15862306a36Sopenharmony_ci "mainpll_d3", 15962306a36Sopenharmony_ci "mmpll_d5_d2", 16062306a36Sopenharmony_ci "mainpll_d2_d2", 16162306a36Sopenharmony_ci "mainpll_d5" 16262306a36Sopenharmony_ci}; 16362306a36Sopenharmony_ci 16462306a36Sopenharmony_cistatic const char * const dpe_parents[] = { 16562306a36Sopenharmony_ci "clk26m", 16662306a36Sopenharmony_ci "mainpll_d2", 16762306a36Sopenharmony_ci "mmpll_d7", 16862306a36Sopenharmony_ci "univpll_d3", 16962306a36Sopenharmony_ci "mainpll_d3", 17062306a36Sopenharmony_ci "mmpll_d5_d2", 17162306a36Sopenharmony_ci "mainpll_d2_d2", 17262306a36Sopenharmony_ci "mainpll_d5" 17362306a36Sopenharmony_ci}; 17462306a36Sopenharmony_ci 17562306a36Sopenharmony_cistatic const char * const cam_parents[] = { 17662306a36Sopenharmony_ci "clk26m", 17762306a36Sopenharmony_ci "mainpll_d2", 17862306a36Sopenharmony_ci "mmpll_d6", 17962306a36Sopenharmony_ci "mainpll_d3", 18062306a36Sopenharmony_ci "mmpll_d7", 18162306a36Sopenharmony_ci "univpll_d3", 18262306a36Sopenharmony_ci "mmpll_d5_d2", 18362306a36Sopenharmony_ci "adsppll_d5", 18462306a36Sopenharmony_ci "tvdpll_mainpll_d2_ck", 18562306a36Sopenharmony_ci "univpll_d3_d2" 18662306a36Sopenharmony_ci}; 18762306a36Sopenharmony_ci 18862306a36Sopenharmony_cistatic const char * const ccu_parents[] = { 18962306a36Sopenharmony_ci "clk26m", 19062306a36Sopenharmony_ci "mainpll_d2", 19162306a36Sopenharmony_ci "mmpll_d6", 19262306a36Sopenharmony_ci "mainpll_d3", 19362306a36Sopenharmony_ci "mmpll_d7", 19462306a36Sopenharmony_ci "univpll_d3", 19562306a36Sopenharmony_ci "mmpll_d5_d2", 19662306a36Sopenharmony_ci "mainpll_d2_d2", 19762306a36Sopenharmony_ci "adsppll_d5", 19862306a36Sopenharmony_ci "univpll_d3_d2" 19962306a36Sopenharmony_ci}; 20062306a36Sopenharmony_ci 20162306a36Sopenharmony_cistatic const char * const dsp_parents[] = { 20262306a36Sopenharmony_ci "clk26m", 20362306a36Sopenharmony_ci "univpll_d3_d8", 20462306a36Sopenharmony_ci "univpll_d3_d4", 20562306a36Sopenharmony_ci "mainpll_d2_d4", 20662306a36Sopenharmony_ci "univpll_d3_d2", 20762306a36Sopenharmony_ci "mainpll_d2_d2", 20862306a36Sopenharmony_ci "univpll_d2_d2", 20962306a36Sopenharmony_ci "mainpll_d3", 21062306a36Sopenharmony_ci "univpll_d3", 21162306a36Sopenharmony_ci "mmpll_d7", 21262306a36Sopenharmony_ci "mmpll_d6", 21362306a36Sopenharmony_ci "adsppll_d5", 21462306a36Sopenharmony_ci "tvdpll_ck", 21562306a36Sopenharmony_ci "tvdpll_mainpll_d2_ck", 21662306a36Sopenharmony_ci "univpll_d2", 21762306a36Sopenharmony_ci "adsppll_d4" 21862306a36Sopenharmony_ci}; 21962306a36Sopenharmony_ci 22062306a36Sopenharmony_cistatic const char * const dsp1_parents[] = { 22162306a36Sopenharmony_ci "clk26m", 22262306a36Sopenharmony_ci "univpll_d3_d8", 22362306a36Sopenharmony_ci "univpll_d3_d4", 22462306a36Sopenharmony_ci "mainpll_d2_d4", 22562306a36Sopenharmony_ci "univpll_d3_d2", 22662306a36Sopenharmony_ci "mainpll_d2_d2", 22762306a36Sopenharmony_ci "univpll_d2_d2", 22862306a36Sopenharmony_ci "mainpll_d3", 22962306a36Sopenharmony_ci "univpll_d3", 23062306a36Sopenharmony_ci "mmpll_d7", 23162306a36Sopenharmony_ci "mmpll_d6", 23262306a36Sopenharmony_ci "adsppll_d5", 23362306a36Sopenharmony_ci "tvdpll_ck", 23462306a36Sopenharmony_ci "tvdpll_mainpll_d2_ck", 23562306a36Sopenharmony_ci "univpll_d2", 23662306a36Sopenharmony_ci "adsppll_d4" 23762306a36Sopenharmony_ci}; 23862306a36Sopenharmony_ci 23962306a36Sopenharmony_cistatic const char * const dsp2_parents[] = { 24062306a36Sopenharmony_ci "clk26m", 24162306a36Sopenharmony_ci "univpll_d3_d8", 24262306a36Sopenharmony_ci "univpll_d3_d4", 24362306a36Sopenharmony_ci "mainpll_d2_d4", 24462306a36Sopenharmony_ci "univpll_d3_d2", 24562306a36Sopenharmony_ci "mainpll_d2_d2", 24662306a36Sopenharmony_ci "univpll_d2_d2", 24762306a36Sopenharmony_ci "mainpll_d3", 24862306a36Sopenharmony_ci "univpll_d3", 24962306a36Sopenharmony_ci "mmpll_d7", 25062306a36Sopenharmony_ci "mmpll_d6", 25162306a36Sopenharmony_ci "adsppll_d5", 25262306a36Sopenharmony_ci "tvdpll_ck", 25362306a36Sopenharmony_ci "tvdpll_mainpll_d2_ck", 25462306a36Sopenharmony_ci "univpll_d2", 25562306a36Sopenharmony_ci "adsppll_d4" 25662306a36Sopenharmony_ci}; 25762306a36Sopenharmony_ci 25862306a36Sopenharmony_cistatic const char * const dsp3_parents[] = { 25962306a36Sopenharmony_ci "clk26m", 26062306a36Sopenharmony_ci "univpll_d3_d8", 26162306a36Sopenharmony_ci "mainpll_d2_d4", 26262306a36Sopenharmony_ci "univpll_d3_d2", 26362306a36Sopenharmony_ci "mainpll_d2_d2", 26462306a36Sopenharmony_ci "univpll_d2_d2", 26562306a36Sopenharmony_ci "mainpll_d3", 26662306a36Sopenharmony_ci "univpll_d3", 26762306a36Sopenharmony_ci "mmpll_d7", 26862306a36Sopenharmony_ci "mmpll_d6", 26962306a36Sopenharmony_ci "mainpll_d2", 27062306a36Sopenharmony_ci "tvdpll_ck", 27162306a36Sopenharmony_ci "tvdpll_mainpll_d2_ck", 27262306a36Sopenharmony_ci "univpll_d2", 27362306a36Sopenharmony_ci "adsppll_d4", 27462306a36Sopenharmony_ci "mmpll_d4" 27562306a36Sopenharmony_ci}; 27662306a36Sopenharmony_ci 27762306a36Sopenharmony_cistatic const char * const ipu_if_parents[] = { 27862306a36Sopenharmony_ci "clk26m", 27962306a36Sopenharmony_ci "univpll_d3_d8", 28062306a36Sopenharmony_ci "univpll_d3_d4", 28162306a36Sopenharmony_ci "mainpll_d2_d4", 28262306a36Sopenharmony_ci "univpll_d3_d2", 28362306a36Sopenharmony_ci "mainpll_d2_d2", 28462306a36Sopenharmony_ci "univpll_d2_d2", 28562306a36Sopenharmony_ci "mainpll_d3", 28662306a36Sopenharmony_ci "univpll_d3", 28762306a36Sopenharmony_ci "mmpll_d7", 28862306a36Sopenharmony_ci "mmpll_d6", 28962306a36Sopenharmony_ci "adsppll_d5", 29062306a36Sopenharmony_ci "tvdpll_ck", 29162306a36Sopenharmony_ci "tvdpll_mainpll_d2_ck", 29262306a36Sopenharmony_ci "univpll_d2", 29362306a36Sopenharmony_ci "adsppll_d4" 29462306a36Sopenharmony_ci}; 29562306a36Sopenharmony_ci 29662306a36Sopenharmony_cistatic const char * const mfg_parents[] = { 29762306a36Sopenharmony_ci "clk26m", 29862306a36Sopenharmony_ci "mfgpll_ck", 29962306a36Sopenharmony_ci "univpll_d3", 30062306a36Sopenharmony_ci "mainpll_d5" 30162306a36Sopenharmony_ci}; 30262306a36Sopenharmony_ci 30362306a36Sopenharmony_cistatic const char * const f52m_mfg_parents[] = { 30462306a36Sopenharmony_ci "clk26m", 30562306a36Sopenharmony_ci "univpll_d3_d2", 30662306a36Sopenharmony_ci "univpll_d3_d4", 30762306a36Sopenharmony_ci "univpll_d3_d8" 30862306a36Sopenharmony_ci}; 30962306a36Sopenharmony_ci 31062306a36Sopenharmony_cistatic const char * const camtg_parents[] = { 31162306a36Sopenharmony_ci "clk26m", 31262306a36Sopenharmony_ci "univpll_192m_d8", 31362306a36Sopenharmony_ci "univpll_d3_d8", 31462306a36Sopenharmony_ci "univpll_192m_d4", 31562306a36Sopenharmony_ci "univpll_d3_d16", 31662306a36Sopenharmony_ci "csw_f26m_ck_d2", 31762306a36Sopenharmony_ci "univpll_192m_d16", 31862306a36Sopenharmony_ci "univpll_192m_d32" 31962306a36Sopenharmony_ci}; 32062306a36Sopenharmony_ci 32162306a36Sopenharmony_cistatic const char * const camtg2_parents[] = { 32262306a36Sopenharmony_ci "clk26m", 32362306a36Sopenharmony_ci "univpll_192m_d8", 32462306a36Sopenharmony_ci "univpll_d3_d8", 32562306a36Sopenharmony_ci "univpll_192m_d4", 32662306a36Sopenharmony_ci "univpll_d3_d16", 32762306a36Sopenharmony_ci "csw_f26m_ck_d2", 32862306a36Sopenharmony_ci "univpll_192m_d16", 32962306a36Sopenharmony_ci "univpll_192m_d32" 33062306a36Sopenharmony_ci}; 33162306a36Sopenharmony_ci 33262306a36Sopenharmony_cistatic const char * const camtg3_parents[] = { 33362306a36Sopenharmony_ci "clk26m", 33462306a36Sopenharmony_ci "univpll_192m_d8", 33562306a36Sopenharmony_ci "univpll_d3_d8", 33662306a36Sopenharmony_ci "univpll_192m_d4", 33762306a36Sopenharmony_ci "univpll_d3_d16", 33862306a36Sopenharmony_ci "csw_f26m_ck_d2", 33962306a36Sopenharmony_ci "univpll_192m_d16", 34062306a36Sopenharmony_ci "univpll_192m_d32" 34162306a36Sopenharmony_ci}; 34262306a36Sopenharmony_ci 34362306a36Sopenharmony_cistatic const char * const camtg4_parents[] = { 34462306a36Sopenharmony_ci "clk26m", 34562306a36Sopenharmony_ci "univpll_192m_d8", 34662306a36Sopenharmony_ci "univpll_d3_d8", 34762306a36Sopenharmony_ci "univpll_192m_d4", 34862306a36Sopenharmony_ci "univpll_d3_d16", 34962306a36Sopenharmony_ci "csw_f26m_ck_d2", 35062306a36Sopenharmony_ci "univpll_192m_d16", 35162306a36Sopenharmony_ci "univpll_192m_d32" 35262306a36Sopenharmony_ci}; 35362306a36Sopenharmony_ci 35462306a36Sopenharmony_cistatic const char * const uart_parents[] = { 35562306a36Sopenharmony_ci "clk26m", 35662306a36Sopenharmony_ci "univpll_d3_d8" 35762306a36Sopenharmony_ci}; 35862306a36Sopenharmony_ci 35962306a36Sopenharmony_cistatic const char * const spi_parents[] = { 36062306a36Sopenharmony_ci "clk26m", 36162306a36Sopenharmony_ci "mainpll_d5_d2", 36262306a36Sopenharmony_ci "mainpll_d3_d4", 36362306a36Sopenharmony_ci "msdcpll_d4" 36462306a36Sopenharmony_ci}; 36562306a36Sopenharmony_ci 36662306a36Sopenharmony_cistatic const char * const msdc50_hclk_parents[] = { 36762306a36Sopenharmony_ci "clk26m", 36862306a36Sopenharmony_ci "mainpll_d2_d2", 36962306a36Sopenharmony_ci "mainpll_d3_d2" 37062306a36Sopenharmony_ci}; 37162306a36Sopenharmony_ci 37262306a36Sopenharmony_cistatic const char * const msdc50_0_parents[] = { 37362306a36Sopenharmony_ci "clk26m", 37462306a36Sopenharmony_ci "msdcpll_ck", 37562306a36Sopenharmony_ci "msdcpll_d2", 37662306a36Sopenharmony_ci "univpll_d2_d4", 37762306a36Sopenharmony_ci "mainpll_d3_d2", 37862306a36Sopenharmony_ci "univpll_d2_d2" 37962306a36Sopenharmony_ci}; 38062306a36Sopenharmony_ci 38162306a36Sopenharmony_cistatic const char * const msdc30_1_parents[] = { 38262306a36Sopenharmony_ci "clk26m", 38362306a36Sopenharmony_ci "univpll_d3_d2", 38462306a36Sopenharmony_ci "mainpll_d3_d2", 38562306a36Sopenharmony_ci "mainpll_d7", 38662306a36Sopenharmony_ci "msdcpll_d2" 38762306a36Sopenharmony_ci}; 38862306a36Sopenharmony_ci 38962306a36Sopenharmony_cistatic const char * const audio_parents[] = { 39062306a36Sopenharmony_ci "clk26m", 39162306a36Sopenharmony_ci "mainpll_d5_d4", 39262306a36Sopenharmony_ci "mainpll_d7_d4", 39362306a36Sopenharmony_ci "mainpll_d2_d16" 39462306a36Sopenharmony_ci}; 39562306a36Sopenharmony_ci 39662306a36Sopenharmony_cistatic const char * const aud_intbus_parents[] = { 39762306a36Sopenharmony_ci "clk26m", 39862306a36Sopenharmony_ci "mainpll_d2_d4", 39962306a36Sopenharmony_ci "mainpll_d7_d2" 40062306a36Sopenharmony_ci}; 40162306a36Sopenharmony_ci 40262306a36Sopenharmony_cistatic const char * const fpwrap_ulposc_parents[] = { 40362306a36Sopenharmony_ci "osc_d10", 40462306a36Sopenharmony_ci "clk26m", 40562306a36Sopenharmony_ci "osc_d4", 40662306a36Sopenharmony_ci "osc_d8", 40762306a36Sopenharmony_ci "osc_d16" 40862306a36Sopenharmony_ci}; 40962306a36Sopenharmony_ci 41062306a36Sopenharmony_cistatic const char * const atb_parents[] = { 41162306a36Sopenharmony_ci "clk26m", 41262306a36Sopenharmony_ci "mainpll_d2_d2", 41362306a36Sopenharmony_ci "mainpll_d5" 41462306a36Sopenharmony_ci}; 41562306a36Sopenharmony_ci 41662306a36Sopenharmony_cistatic const char * const sspm_parents[] = { 41762306a36Sopenharmony_ci "clk26m", 41862306a36Sopenharmony_ci "univpll_d2_d4", 41962306a36Sopenharmony_ci "mainpll_d2_d2", 42062306a36Sopenharmony_ci "univpll_d2_d2", 42162306a36Sopenharmony_ci "mainpll_d3" 42262306a36Sopenharmony_ci}; 42362306a36Sopenharmony_ci 42462306a36Sopenharmony_cistatic const char * const dpi0_parents[] = { 42562306a36Sopenharmony_ci "clk26m", 42662306a36Sopenharmony_ci "tvdpll_d2", 42762306a36Sopenharmony_ci "tvdpll_d4", 42862306a36Sopenharmony_ci "tvdpll_d8", 42962306a36Sopenharmony_ci "tvdpll_d16" 43062306a36Sopenharmony_ci}; 43162306a36Sopenharmony_ci 43262306a36Sopenharmony_cistatic const char * const scam_parents[] = { 43362306a36Sopenharmony_ci "clk26m", 43462306a36Sopenharmony_ci "mainpll_d5_d2" 43562306a36Sopenharmony_ci}; 43662306a36Sopenharmony_ci 43762306a36Sopenharmony_cistatic const char * const disppwm_parents[] = { 43862306a36Sopenharmony_ci "clk26m", 43962306a36Sopenharmony_ci "univpll_d3_d4", 44062306a36Sopenharmony_ci "osc_d2", 44162306a36Sopenharmony_ci "osc_d4", 44262306a36Sopenharmony_ci "osc_d16" 44362306a36Sopenharmony_ci}; 44462306a36Sopenharmony_ci 44562306a36Sopenharmony_cistatic const char * const usb_top_parents[] = { 44662306a36Sopenharmony_ci "clk26m", 44762306a36Sopenharmony_ci "univpll_d5_d4", 44862306a36Sopenharmony_ci "univpll_d3_d4", 44962306a36Sopenharmony_ci "univpll_d5_d2" 45062306a36Sopenharmony_ci}; 45162306a36Sopenharmony_ci 45262306a36Sopenharmony_cistatic const char * const ssusb_top_xhci_parents[] = { 45362306a36Sopenharmony_ci "clk26m", 45462306a36Sopenharmony_ci "univpll_d5_d4", 45562306a36Sopenharmony_ci "univpll_d3_d4", 45662306a36Sopenharmony_ci "univpll_d5_d2" 45762306a36Sopenharmony_ci}; 45862306a36Sopenharmony_ci 45962306a36Sopenharmony_cistatic const char * const spm_parents[] = { 46062306a36Sopenharmony_ci "clk26m", 46162306a36Sopenharmony_ci "osc_d8", 46262306a36Sopenharmony_ci "mainpll_d2_d8" 46362306a36Sopenharmony_ci}; 46462306a36Sopenharmony_ci 46562306a36Sopenharmony_cistatic const char * const i2c_parents[] = { 46662306a36Sopenharmony_ci "clk26m", 46762306a36Sopenharmony_ci "mainpll_d2_d8", 46862306a36Sopenharmony_ci "univpll_d5_d2" 46962306a36Sopenharmony_ci}; 47062306a36Sopenharmony_ci 47162306a36Sopenharmony_cistatic const char * const seninf_parents[] = { 47262306a36Sopenharmony_ci "clk26m", 47362306a36Sopenharmony_ci "univpll_d7", 47462306a36Sopenharmony_ci "univpll_d3_d2", 47562306a36Sopenharmony_ci "univpll_d2_d2", 47662306a36Sopenharmony_ci "mainpll_d3", 47762306a36Sopenharmony_ci "mmpll_d4_d2", 47862306a36Sopenharmony_ci "mmpll_d7", 47962306a36Sopenharmony_ci "mmpll_d6" 48062306a36Sopenharmony_ci}; 48162306a36Sopenharmony_ci 48262306a36Sopenharmony_cistatic const char * const seninf1_parents[] = { 48362306a36Sopenharmony_ci "clk26m", 48462306a36Sopenharmony_ci "univpll_d7", 48562306a36Sopenharmony_ci "univpll_d3_d2", 48662306a36Sopenharmony_ci "univpll_d2_d2", 48762306a36Sopenharmony_ci "mainpll_d3", 48862306a36Sopenharmony_ci "mmpll_d4_d2", 48962306a36Sopenharmony_ci "mmpll_d7", 49062306a36Sopenharmony_ci "mmpll_d6" 49162306a36Sopenharmony_ci}; 49262306a36Sopenharmony_ci 49362306a36Sopenharmony_cistatic const char * const seninf2_parents[] = { 49462306a36Sopenharmony_ci "clk26m", 49562306a36Sopenharmony_ci "univpll_d7", 49662306a36Sopenharmony_ci "univpll_d3_d2", 49762306a36Sopenharmony_ci "univpll_d2_d2", 49862306a36Sopenharmony_ci "mainpll_d3", 49962306a36Sopenharmony_ci "mmpll_d4_d2", 50062306a36Sopenharmony_ci "mmpll_d7", 50162306a36Sopenharmony_ci "mmpll_d6" 50262306a36Sopenharmony_ci}; 50362306a36Sopenharmony_ci 50462306a36Sopenharmony_cistatic const char * const dxcc_parents[] = { 50562306a36Sopenharmony_ci "clk26m", 50662306a36Sopenharmony_ci "mainpll_d2_d2", 50762306a36Sopenharmony_ci "mainpll_d2_d4", 50862306a36Sopenharmony_ci "mainpll_d2_d8" 50962306a36Sopenharmony_ci}; 51062306a36Sopenharmony_ci 51162306a36Sopenharmony_cistatic const char * const aud_engen1_parents[] = { 51262306a36Sopenharmony_ci "clk26m", 51362306a36Sopenharmony_ci "apll1_d2", 51462306a36Sopenharmony_ci "apll1_d4", 51562306a36Sopenharmony_ci "apll1_d8" 51662306a36Sopenharmony_ci}; 51762306a36Sopenharmony_ci 51862306a36Sopenharmony_cistatic const char * const aud_engen2_parents[] = { 51962306a36Sopenharmony_ci "clk26m", 52062306a36Sopenharmony_ci "apll2_d2", 52162306a36Sopenharmony_ci "apll2_d4", 52262306a36Sopenharmony_ci "apll2_d8" 52362306a36Sopenharmony_ci}; 52462306a36Sopenharmony_ci 52562306a36Sopenharmony_cistatic const char * const faes_ufsfde_parents[] = { 52662306a36Sopenharmony_ci "clk26m", 52762306a36Sopenharmony_ci "mainpll_d2", 52862306a36Sopenharmony_ci "mainpll_d2_d2", 52962306a36Sopenharmony_ci "mainpll_d3", 53062306a36Sopenharmony_ci "mainpll_d2_d4", 53162306a36Sopenharmony_ci "univpll_d3" 53262306a36Sopenharmony_ci}; 53362306a36Sopenharmony_ci 53462306a36Sopenharmony_cistatic const char * const fufs_parents[] = { 53562306a36Sopenharmony_ci "clk26m", 53662306a36Sopenharmony_ci "mainpll_d2_d4", 53762306a36Sopenharmony_ci "mainpll_d2_d8", 53862306a36Sopenharmony_ci "mainpll_d2_d16" 53962306a36Sopenharmony_ci}; 54062306a36Sopenharmony_ci 54162306a36Sopenharmony_cistatic const char * const aud_1_parents[] = { 54262306a36Sopenharmony_ci "clk26m", 54362306a36Sopenharmony_ci "apll1_ck" 54462306a36Sopenharmony_ci}; 54562306a36Sopenharmony_ci 54662306a36Sopenharmony_cistatic const char * const aud_2_parents[] = { 54762306a36Sopenharmony_ci "clk26m", 54862306a36Sopenharmony_ci "apll2_ck" 54962306a36Sopenharmony_ci}; 55062306a36Sopenharmony_ci 55162306a36Sopenharmony_cistatic const char * const adsp_parents[] = { 55262306a36Sopenharmony_ci "clk26m", 55362306a36Sopenharmony_ci "mainpll_d3", 55462306a36Sopenharmony_ci "univpll_d2_d4", 55562306a36Sopenharmony_ci "univpll_d2", 55662306a36Sopenharmony_ci "mmpll_d4", 55762306a36Sopenharmony_ci "adsppll_d4", 55862306a36Sopenharmony_ci "adsppll_d6" 55962306a36Sopenharmony_ci}; 56062306a36Sopenharmony_ci 56162306a36Sopenharmony_cistatic const char * const dpmaif_parents[] = { 56262306a36Sopenharmony_ci "clk26m", 56362306a36Sopenharmony_ci "univpll_d2_d4", 56462306a36Sopenharmony_ci "mainpll_d3", 56562306a36Sopenharmony_ci "mainpll_d2_d2", 56662306a36Sopenharmony_ci "univpll_d2_d2", 56762306a36Sopenharmony_ci "univpll_d3" 56862306a36Sopenharmony_ci}; 56962306a36Sopenharmony_ci 57062306a36Sopenharmony_cistatic const char * const venc_parents[] = { 57162306a36Sopenharmony_ci "clk26m", 57262306a36Sopenharmony_ci "mmpll_d7", 57362306a36Sopenharmony_ci "mainpll_d3", 57462306a36Sopenharmony_ci "univpll_d2_d2", 57562306a36Sopenharmony_ci "mainpll_d2_d2", 57662306a36Sopenharmony_ci "univpll_d3", 57762306a36Sopenharmony_ci "mmpll_d6", 57862306a36Sopenharmony_ci "mainpll_d5", 57962306a36Sopenharmony_ci "mainpll_d3_d2", 58062306a36Sopenharmony_ci "mmpll_d4_d2", 58162306a36Sopenharmony_ci "univpll_d2_d4", 58262306a36Sopenharmony_ci "mmpll_d5", 58362306a36Sopenharmony_ci "univpll_192m_d2" 58462306a36Sopenharmony_ci 58562306a36Sopenharmony_ci}; 58662306a36Sopenharmony_ci 58762306a36Sopenharmony_cistatic const char * const vdec_parents[] = { 58862306a36Sopenharmony_ci "clk26m", 58962306a36Sopenharmony_ci "univpll_d2_d4", 59062306a36Sopenharmony_ci "mainpll_d3", 59162306a36Sopenharmony_ci "univpll_d2_d2", 59262306a36Sopenharmony_ci "mainpll_d2_d2", 59362306a36Sopenharmony_ci "univpll_d3", 59462306a36Sopenharmony_ci "univpll_d5", 59562306a36Sopenharmony_ci "univpll_d5_d2", 59662306a36Sopenharmony_ci "mainpll_d2", 59762306a36Sopenharmony_ci "univpll_d2", 59862306a36Sopenharmony_ci "univpll_192m_d2" 59962306a36Sopenharmony_ci}; 60062306a36Sopenharmony_ci 60162306a36Sopenharmony_cistatic const char * const camtm_parents[] = { 60262306a36Sopenharmony_ci "clk26m", 60362306a36Sopenharmony_ci "univpll_d7", 60462306a36Sopenharmony_ci "univpll_d3_d2", 60562306a36Sopenharmony_ci "univpll_d2_d2" 60662306a36Sopenharmony_ci}; 60762306a36Sopenharmony_ci 60862306a36Sopenharmony_cistatic const char * const pwm_parents[] = { 60962306a36Sopenharmony_ci "clk26m", 61062306a36Sopenharmony_ci "univpll_d2_d8" 61162306a36Sopenharmony_ci}; 61262306a36Sopenharmony_ci 61362306a36Sopenharmony_cistatic const char * const audio_h_parents[] = { 61462306a36Sopenharmony_ci "clk26m", 61562306a36Sopenharmony_ci "univpll_d7", 61662306a36Sopenharmony_ci "apll1_ck", 61762306a36Sopenharmony_ci "apll2_ck" 61862306a36Sopenharmony_ci}; 61962306a36Sopenharmony_ci 62062306a36Sopenharmony_cistatic const char * const camtg5_parents[] = { 62162306a36Sopenharmony_ci "clk26m", 62262306a36Sopenharmony_ci "univpll_192m_d8", 62362306a36Sopenharmony_ci "univpll_d3_d8", 62462306a36Sopenharmony_ci "univpll_192m_d4", 62562306a36Sopenharmony_ci "univpll_d3_d16", 62662306a36Sopenharmony_ci "csw_f26m_ck_d2", 62762306a36Sopenharmony_ci "univpll_192m_d16", 62862306a36Sopenharmony_ci "univpll_192m_d32" 62962306a36Sopenharmony_ci}; 63062306a36Sopenharmony_ci 63162306a36Sopenharmony_ci/* 63262306a36Sopenharmony_ci * CRITICAL CLOCK: 63362306a36Sopenharmony_ci * axi_sel is the main bus clock of whole SOC. 63462306a36Sopenharmony_ci * spm_sel is the clock of the always-on co-processor. 63562306a36Sopenharmony_ci * sspm_sel is the clock of the always-on co-processor. 63662306a36Sopenharmony_ci */ 63762306a36Sopenharmony_cistatic const struct mtk_mux top_muxes[] = { 63862306a36Sopenharmony_ci /* CLK_CFG_0 */ 63962306a36Sopenharmony_ci MUX_GATE_CLR_SET_UPD_FLAGS(CLK_TOP_AXI, "axi_sel", axi_parents, 64062306a36Sopenharmony_ci 0x20, 0x24, 0x28, 0, 2, 7, 64162306a36Sopenharmony_ci 0x004, 0, CLK_IS_CRITICAL | CLK_SET_RATE_PARENT), 64262306a36Sopenharmony_ci MUX_GATE_CLR_SET_UPD(CLK_TOP_MM, "mm_sel", mm_parents, 64362306a36Sopenharmony_ci 0x20, 0x24, 0x28, 8, 3, 15, 0x004, 1), 64462306a36Sopenharmony_ci MUX_GATE_CLR_SET_UPD(CLK_TOP_SCP, "scp_sel", scp_parents, 64562306a36Sopenharmony_ci 0x20, 0x24, 0x28, 16, 3, 23, 0x004, 2), 64662306a36Sopenharmony_ci /* CLK_CFG_1 */ 64762306a36Sopenharmony_ci MUX_GATE_CLR_SET_UPD(CLK_TOP_IMG, "img_sel", img_parents, 64862306a36Sopenharmony_ci 0x30, 0x34, 0x38, 0, 3, 7, 0x004, 4), 64962306a36Sopenharmony_ci MUX_GATE_CLR_SET_UPD(CLK_TOP_IPE, "ipe_sel", ipe_parents, 65062306a36Sopenharmony_ci 0x30, 0x34, 0x38, 8, 3, 15, 0x004, 5), 65162306a36Sopenharmony_ci MUX_GATE_CLR_SET_UPD(CLK_TOP_DPE, "dpe_sel", dpe_parents, 65262306a36Sopenharmony_ci 0x30, 0x34, 0x38, 16, 3, 23, 0x004, 6), 65362306a36Sopenharmony_ci MUX_GATE_CLR_SET_UPD(CLK_TOP_CAM, "cam_sel", cam_parents, 65462306a36Sopenharmony_ci 0x30, 0x34, 0x38, 24, 4, 31, 0x004, 7), 65562306a36Sopenharmony_ci /* CLK_CFG_2 */ 65662306a36Sopenharmony_ci MUX_GATE_CLR_SET_UPD(CLK_TOP_CCU, "ccu_sel", ccu_parents, 65762306a36Sopenharmony_ci 0x40, 0x44, 0x48, 0, 4, 7, 0x004, 8), 65862306a36Sopenharmony_ci MUX_GATE_CLR_SET_UPD(CLK_TOP_DSP, "dsp_sel", dsp_parents, 65962306a36Sopenharmony_ci 0x40, 0x44, 0x48, 8, 4, 15, 0x004, 9), 66062306a36Sopenharmony_ci MUX_GATE_CLR_SET_UPD(CLK_TOP_DSP1, "dsp1_sel", dsp1_parents, 66162306a36Sopenharmony_ci 0x40, 0x44, 0x48, 16, 4, 23, 0x004, 10), 66262306a36Sopenharmony_ci MUX_GATE_CLR_SET_UPD(CLK_TOP_DSP2, "dsp2_sel", dsp2_parents, 66362306a36Sopenharmony_ci 0x40, 0x44, 0x48, 24, 4, 31, 0x004, 11), 66462306a36Sopenharmony_ci /* CLK_CFG_3 */ 66562306a36Sopenharmony_ci MUX_GATE_CLR_SET_UPD(CLK_TOP_DSP3, "dsp3_sel", dsp3_parents, 66662306a36Sopenharmony_ci 0x50, 0x54, 0x58, 0, 4, 7, 0x004, 12), 66762306a36Sopenharmony_ci MUX_GATE_CLR_SET_UPD(CLK_TOP_IPU_IF, "ipu_if_sel", ipu_if_parents, 66862306a36Sopenharmony_ci 0x50, 0x54, 0x58, 8, 4, 15, 0x004, 13), 66962306a36Sopenharmony_ci MUX_GATE_CLR_SET_UPD(CLK_TOP_MFG, "mfg_sel", mfg_parents, 67062306a36Sopenharmony_ci 0x50, 0x54, 0x58, 16, 2, 23, 0x004, 14), 67162306a36Sopenharmony_ci MUX_GATE_CLR_SET_UPD(CLK_TOP_F52M_MFG, "f52m_mfg_sel", 67262306a36Sopenharmony_ci f52m_mfg_parents, 0x50, 0x54, 0x58, 67362306a36Sopenharmony_ci 24, 2, 31, 0x004, 15), 67462306a36Sopenharmony_ci /* CLK_CFG_4 */ 67562306a36Sopenharmony_ci MUX_GATE_CLR_SET_UPD(CLK_TOP_CAMTG, "camtg_sel", camtg_parents, 67662306a36Sopenharmony_ci 0x60, 0x64, 0x68, 0, 3, 7, 0x004, 16), 67762306a36Sopenharmony_ci MUX_GATE_CLR_SET_UPD(CLK_TOP_CAMTG2, "camtg2_sel", camtg2_parents, 67862306a36Sopenharmony_ci 0x60, 0x64, 0x68, 8, 3, 15, 0x004, 17), 67962306a36Sopenharmony_ci MUX_GATE_CLR_SET_UPD(CLK_TOP_CAMTG3, "camtg3_sel", camtg3_parents, 68062306a36Sopenharmony_ci 0x60, 0x64, 0x68, 16, 3, 23, 0x004, 18), 68162306a36Sopenharmony_ci MUX_GATE_CLR_SET_UPD(CLK_TOP_CAMTG4, "camtg4_sel", camtg4_parents, 68262306a36Sopenharmony_ci 0x60, 0x64, 0x68, 24, 3, 31, 0x004, 19), 68362306a36Sopenharmony_ci /* CLK_CFG_5 */ 68462306a36Sopenharmony_ci MUX_GATE_CLR_SET_UPD(CLK_TOP_UART, "uart_sel", uart_parents, 68562306a36Sopenharmony_ci 0x70, 0x74, 0x78, 0, 1, 7, 0x004, 20), 68662306a36Sopenharmony_ci MUX_GATE_CLR_SET_UPD(CLK_TOP_SPI, "spi_sel", spi_parents, 68762306a36Sopenharmony_ci 0x70, 0x74, 0x78, 8, 2, 15, 0x004, 21), 68862306a36Sopenharmony_ci MUX_GATE_CLR_SET_UPD_FLAGS(CLK_TOP_MSDC50_0_HCLK, "msdc50_hclk_sel", 68962306a36Sopenharmony_ci msdc50_hclk_parents, 0x70, 0x74, 0x78, 69062306a36Sopenharmony_ci 16, 2, 23, 0x004, 22, 0), 69162306a36Sopenharmony_ci MUX_GATE_CLR_SET_UPD_FLAGS(CLK_TOP_MSDC50_0, "msdc50_0_sel", 69262306a36Sopenharmony_ci msdc50_0_parents, 0x70, 0x74, 0x78, 69362306a36Sopenharmony_ci 24, 3, 31, 0x004, 23, 0), 69462306a36Sopenharmony_ci /* CLK_CFG_6 */ 69562306a36Sopenharmony_ci MUX_GATE_CLR_SET_UPD_FLAGS(CLK_TOP_MSDC30_1, "msdc30_1_sel", 69662306a36Sopenharmony_ci msdc30_1_parents, 0x80, 0x84, 0x88, 69762306a36Sopenharmony_ci 0, 3, 7, 0x004, 24, 0), 69862306a36Sopenharmony_ci MUX_GATE_CLR_SET_UPD(CLK_TOP_AUD, "audio_sel", audio_parents, 69962306a36Sopenharmony_ci 0x80, 0x84, 0x88, 8, 2, 15, 0x004, 25), 70062306a36Sopenharmony_ci MUX_GATE_CLR_SET_UPD(CLK_TOP_AUD_INTBUS, "aud_intbus_sel", 70162306a36Sopenharmony_ci aud_intbus_parents, 0x80, 0x84, 0x88, 70262306a36Sopenharmony_ci 16, 2, 23, 0x004, 26), 70362306a36Sopenharmony_ci MUX_GATE_CLR_SET_UPD(CLK_TOP_FPWRAP_ULPOSC, "fpwrap_ulposc_sel", 70462306a36Sopenharmony_ci fpwrap_ulposc_parents, 0x80, 0x84, 0x88, 70562306a36Sopenharmony_ci 24, 3, 31, 0x004, 27), 70662306a36Sopenharmony_ci /* CLK_CFG_7 */ 70762306a36Sopenharmony_ci MUX_GATE_CLR_SET_UPD(CLK_TOP_ATB, "atb_sel", atb_parents, 70862306a36Sopenharmony_ci 0x90, 0x94, 0x98, 0, 2, 7, 0x004, 28), 70962306a36Sopenharmony_ci MUX_GATE_CLR_SET_UPD_FLAGS(CLK_TOP_SSPM, "sspm_sel", sspm_parents, 71062306a36Sopenharmony_ci 0x90, 0x94, 0x98, 8, 3, 15, 71162306a36Sopenharmony_ci 0x004, 29, CLK_IS_CRITICAL | CLK_SET_RATE_PARENT), 71262306a36Sopenharmony_ci MUX_GATE_CLR_SET_UPD(CLK_TOP_DPI0, "dpi0_sel", dpi0_parents, 71362306a36Sopenharmony_ci 0x90, 0x94, 0x98, 16, 3, 23, 0x004, 30), 71462306a36Sopenharmony_ci MUX_GATE_CLR_SET_UPD(CLK_TOP_SCAM, "scam_sel", scam_parents, 71562306a36Sopenharmony_ci 0x90, 0x94, 0x98, 24, 1, 31, 0x004, 0), 71662306a36Sopenharmony_ci /* CLK_CFG_8 */ 71762306a36Sopenharmony_ci MUX_GATE_CLR_SET_UPD(CLK_TOP_DISP_PWM, "disppwm_sel", 71862306a36Sopenharmony_ci disppwm_parents, 0xa0, 0xa4, 0xa8, 71962306a36Sopenharmony_ci 0, 3, 7, 0x008, 1), 72062306a36Sopenharmony_ci MUX_GATE_CLR_SET_UPD(CLK_TOP_USB_TOP, "usb_top_sel", 72162306a36Sopenharmony_ci usb_top_parents, 0xa0, 0xa4, 0xa8, 72262306a36Sopenharmony_ci 8, 2, 15, 0x008, 2), 72362306a36Sopenharmony_ci MUX_GATE_CLR_SET_UPD(CLK_TOP_SSUSB_TOP_XHCI, "ssusb_top_xhci_sel", 72462306a36Sopenharmony_ci ssusb_top_xhci_parents, 0xa0, 0xa4, 0xa8, 72562306a36Sopenharmony_ci 16, 2, 23, 0x008, 3), 72662306a36Sopenharmony_ci MUX_GATE_CLR_SET_UPD_FLAGS(CLK_TOP_SPM, "spm_sel", spm_parents, 72762306a36Sopenharmony_ci 0xa0, 0xa4, 0xa8, 24, 2, 31, 72862306a36Sopenharmony_ci 0x008, 4, CLK_IS_CRITICAL | CLK_SET_RATE_PARENT), 72962306a36Sopenharmony_ci /* CLK_CFG_9 */ 73062306a36Sopenharmony_ci MUX_GATE_CLR_SET_UPD(CLK_TOP_I2C, "i2c_sel", i2c_parents, 73162306a36Sopenharmony_ci 0xb0, 0xb4, 0xb8, 0, 2, 7, 0x008, 5), 73262306a36Sopenharmony_ci MUX_GATE_CLR_SET_UPD(CLK_TOP_SENINF, "seninf_sel", seninf_parents, 73362306a36Sopenharmony_ci 0xb0, 0xb4, 0xb8, 8, 2, 15, 0x008, 6), 73462306a36Sopenharmony_ci MUX_GATE_CLR_SET_UPD(CLK_TOP_SENINF1, "seninf1_sel", 73562306a36Sopenharmony_ci seninf1_parents, 0xb0, 0xb4, 0xb8, 73662306a36Sopenharmony_ci 16, 2, 23, 0x008, 7), 73762306a36Sopenharmony_ci MUX_GATE_CLR_SET_UPD(CLK_TOP_SENINF2, "seninf2_sel", 73862306a36Sopenharmony_ci seninf2_parents, 0xb0, 0xb4, 0xb8, 73962306a36Sopenharmony_ci 24, 2, 31, 0x008, 8), 74062306a36Sopenharmony_ci /* CLK_CFG_10 */ 74162306a36Sopenharmony_ci MUX_GATE_CLR_SET_UPD(CLK_TOP_DXCC, "dxcc_sel", dxcc_parents, 74262306a36Sopenharmony_ci 0xc0, 0xc4, 0xc8, 0, 2, 7, 0x008, 9), 74362306a36Sopenharmony_ci MUX_GATE_CLR_SET_UPD(CLK_TOP_AUD_ENG1, "aud_eng1_sel", 74462306a36Sopenharmony_ci aud_engen1_parents, 0xc0, 0xc4, 0xc8, 74562306a36Sopenharmony_ci 8, 2, 15, 0x008, 10), 74662306a36Sopenharmony_ci MUX_GATE_CLR_SET_UPD(CLK_TOP_AUD_ENG2, "aud_eng2_sel", 74762306a36Sopenharmony_ci aud_engen2_parents, 0xc0, 0xc4, 0xc8, 74862306a36Sopenharmony_ci 16, 2, 23, 0x008, 11), 74962306a36Sopenharmony_ci MUX_GATE_CLR_SET_UPD(CLK_TOP_FAES_UFSFDE, "faes_ufsfde_sel", 75062306a36Sopenharmony_ci faes_ufsfde_parents, 0xc0, 0xc4, 0xc8, 75162306a36Sopenharmony_ci 24, 3, 31, 75262306a36Sopenharmony_ci 0x008, 12), 75362306a36Sopenharmony_ci /* CLK_CFG_11 */ 75462306a36Sopenharmony_ci MUX_GATE_CLR_SET_UPD(CLK_TOP_FUFS, "fufs_sel", fufs_parents, 75562306a36Sopenharmony_ci 0xd0, 0xd4, 0xd8, 0, 2, 7, 0x008, 13), 75662306a36Sopenharmony_ci MUX_GATE_CLR_SET_UPD(CLK_TOP_AUD_1, "aud_1_sel", aud_1_parents, 75762306a36Sopenharmony_ci 0xd0, 0xd4, 0xd8, 8, 1, 15, 0x008, 14), 75862306a36Sopenharmony_ci MUX_GATE_CLR_SET_UPD(CLK_TOP_AUD_2, "aud_2_sel", aud_2_parents, 75962306a36Sopenharmony_ci 0xd0, 0xd4, 0xd8, 16, 1, 23, 0x008, 15), 76062306a36Sopenharmony_ci MUX_GATE_CLR_SET_UPD(CLK_TOP_ADSP, "adsp_sel", adsp_parents, 76162306a36Sopenharmony_ci 0xd0, 0xd4, 0xd8, 24, 3, 31, 0x008, 16), 76262306a36Sopenharmony_ci /* CLK_CFG_12 */ 76362306a36Sopenharmony_ci MUX_GATE_CLR_SET_UPD(CLK_TOP_DPMAIF, "dpmaif_sel", dpmaif_parents, 76462306a36Sopenharmony_ci 0xe0, 0xe4, 0xe8, 0, 3, 7, 0x008, 17), 76562306a36Sopenharmony_ci MUX_GATE_CLR_SET_UPD(CLK_TOP_VENC, "venc_sel", venc_parents, 76662306a36Sopenharmony_ci 0xe0, 0xe4, 0xe8, 8, 4, 15, 0x008, 18), 76762306a36Sopenharmony_ci MUX_GATE_CLR_SET_UPD(CLK_TOP_VDEC, "vdec_sel", vdec_parents, 76862306a36Sopenharmony_ci 0xe0, 0xe4, 0xe8, 16, 4, 23, 0x008, 19), 76962306a36Sopenharmony_ci MUX_GATE_CLR_SET_UPD(CLK_TOP_CAMTM, "camtm_sel", camtm_parents, 77062306a36Sopenharmony_ci 0xe0, 0xe4, 0xe8, 24, 2, 31, 0x004, 20), 77162306a36Sopenharmony_ci /* CLK_CFG_13 */ 77262306a36Sopenharmony_ci MUX_GATE_CLR_SET_UPD(CLK_TOP_PWM, "pwm_sel", pwm_parents, 77362306a36Sopenharmony_ci 0xf0, 0xf4, 0xf8, 0, 1, 7, 0x008, 21), 77462306a36Sopenharmony_ci MUX_GATE_CLR_SET_UPD(CLK_TOP_AUD_H, "audio_h_sel", 77562306a36Sopenharmony_ci audio_h_parents, 0xf0, 0xf4, 0xf8, 77662306a36Sopenharmony_ci 8, 2, 15, 0x008, 22), 77762306a36Sopenharmony_ci MUX_GATE_CLR_SET_UPD(CLK_TOP_CAMTG5, "camtg5_sel", camtg5_parents, 77862306a36Sopenharmony_ci 0xf0, 0xf4, 0xf8, 24, 3, 31, 0x008, 24), 77962306a36Sopenharmony_ci}; 78062306a36Sopenharmony_ci 78162306a36Sopenharmony_cistatic const char * const i2s0_m_ck_parents[] = { 78262306a36Sopenharmony_ci "aud_1_sel", 78362306a36Sopenharmony_ci "aud_2_sel" 78462306a36Sopenharmony_ci}; 78562306a36Sopenharmony_ci 78662306a36Sopenharmony_cistatic const char * const i2s1_m_ck_parents[] = { 78762306a36Sopenharmony_ci "aud_1_sel", 78862306a36Sopenharmony_ci "aud_2_sel" 78962306a36Sopenharmony_ci}; 79062306a36Sopenharmony_ci 79162306a36Sopenharmony_cistatic const char * const i2s2_m_ck_parents[] = { 79262306a36Sopenharmony_ci "aud_1_sel", 79362306a36Sopenharmony_ci "aud_2_sel" 79462306a36Sopenharmony_ci}; 79562306a36Sopenharmony_ci 79662306a36Sopenharmony_cistatic const char * const i2s3_m_ck_parents[] = { 79762306a36Sopenharmony_ci "aud_1_sel", 79862306a36Sopenharmony_ci "aud_2_sel" 79962306a36Sopenharmony_ci}; 80062306a36Sopenharmony_ci 80162306a36Sopenharmony_cistatic const char * const i2s4_m_ck_parents[] = { 80262306a36Sopenharmony_ci "aud_1_sel", 80362306a36Sopenharmony_ci "aud_2_sel" 80462306a36Sopenharmony_ci}; 80562306a36Sopenharmony_ci 80662306a36Sopenharmony_cistatic const char * const i2s5_m_ck_parents[] = { 80762306a36Sopenharmony_ci "aud_1_sel", 80862306a36Sopenharmony_ci "aud_2_sel" 80962306a36Sopenharmony_ci}; 81062306a36Sopenharmony_ci 81162306a36Sopenharmony_cistatic const struct mtk_composite top_aud_muxes[] = { 81262306a36Sopenharmony_ci MUX(CLK_TOP_I2S0_M_SEL, "i2s0_m_ck_sel", i2s0_m_ck_parents, 81362306a36Sopenharmony_ci 0x320, 8, 1), 81462306a36Sopenharmony_ci MUX(CLK_TOP_I2S1_M_SEL, "i2s1_m_ck_sel", i2s1_m_ck_parents, 81562306a36Sopenharmony_ci 0x320, 9, 1), 81662306a36Sopenharmony_ci MUX(CLK_TOP_I2S2_M_SEL, "i2s2_m_ck_sel", i2s2_m_ck_parents, 81762306a36Sopenharmony_ci 0x320, 10, 1), 81862306a36Sopenharmony_ci MUX(CLK_TOP_I2S3_M_SEL, "i2s3_m_ck_sel", i2s3_m_ck_parents, 81962306a36Sopenharmony_ci 0x320, 11, 1), 82062306a36Sopenharmony_ci MUX(CLK_TOP_I2S4_M_SEL, "i2s4_m_ck_sel", i2s4_m_ck_parents, 82162306a36Sopenharmony_ci 0x320, 12, 1), 82262306a36Sopenharmony_ci MUX(CLK_TOP_I2S5_M_SEL, "i2s5_m_ck_sel", i2s5_m_ck_parents, 82362306a36Sopenharmony_ci 0x328, 20, 1), 82462306a36Sopenharmony_ci}; 82562306a36Sopenharmony_ci 82662306a36Sopenharmony_cistatic struct mtk_composite top_aud_divs[] = { 82762306a36Sopenharmony_ci DIV_GATE(CLK_TOP_APLL12_DIV0, "apll12_div0", "i2s0_m_ck_sel", 82862306a36Sopenharmony_ci 0x320, 2, 0x324, 8, 0), 82962306a36Sopenharmony_ci DIV_GATE(CLK_TOP_APLL12_DIV1, "apll12_div1", "i2s1_m_ck_sel", 83062306a36Sopenharmony_ci 0x320, 3, 0x324, 8, 8), 83162306a36Sopenharmony_ci DIV_GATE(CLK_TOP_APLL12_DIV2, "apll12_div2", "i2s2_m_ck_sel", 83262306a36Sopenharmony_ci 0x320, 4, 0x324, 8, 16), 83362306a36Sopenharmony_ci DIV_GATE(CLK_TOP_APLL12_DIV3, "apll12_div3", "i2s3_m_ck_sel", 83462306a36Sopenharmony_ci 0x320, 5, 0x324, 8, 24), 83562306a36Sopenharmony_ci DIV_GATE(CLK_TOP_APLL12_DIV4, "apll12_div4", "i2s4_m_ck_sel", 83662306a36Sopenharmony_ci 0x320, 6, 0x328, 8, 0), 83762306a36Sopenharmony_ci DIV_GATE(CLK_TOP_APLL12_DIVB, "apll12_divb", "apll12_div4", 83862306a36Sopenharmony_ci 0x320, 7, 0x328, 8, 8), 83962306a36Sopenharmony_ci DIV_GATE(CLK_TOP_APLL12_DIV5, "apll12_div5", "i2s5_m_ck_sel", 84062306a36Sopenharmony_ci 0x328, 16, 0x328, 4, 28), 84162306a36Sopenharmony_ci}; 84262306a36Sopenharmony_ci 84362306a36Sopenharmony_cistatic const struct mtk_gate_regs infra0_cg_regs = { 84462306a36Sopenharmony_ci .set_ofs = 0x80, 84562306a36Sopenharmony_ci .clr_ofs = 0x84, 84662306a36Sopenharmony_ci .sta_ofs = 0x90, 84762306a36Sopenharmony_ci}; 84862306a36Sopenharmony_ci 84962306a36Sopenharmony_cistatic const struct mtk_gate_regs infra1_cg_regs = { 85062306a36Sopenharmony_ci .set_ofs = 0x88, 85162306a36Sopenharmony_ci .clr_ofs = 0x8c, 85262306a36Sopenharmony_ci .sta_ofs = 0x94, 85362306a36Sopenharmony_ci}; 85462306a36Sopenharmony_ci 85562306a36Sopenharmony_cistatic const struct mtk_gate_regs infra2_cg_regs = { 85662306a36Sopenharmony_ci .set_ofs = 0xa4, 85762306a36Sopenharmony_ci .clr_ofs = 0xa8, 85862306a36Sopenharmony_ci .sta_ofs = 0xac, 85962306a36Sopenharmony_ci}; 86062306a36Sopenharmony_ci 86162306a36Sopenharmony_cistatic const struct mtk_gate_regs infra3_cg_regs = { 86262306a36Sopenharmony_ci .set_ofs = 0xc0, 86362306a36Sopenharmony_ci .clr_ofs = 0xc4, 86462306a36Sopenharmony_ci .sta_ofs = 0xc8, 86562306a36Sopenharmony_ci}; 86662306a36Sopenharmony_ci 86762306a36Sopenharmony_ci#define GATE_INFRA0(_id, _name, _parent, _shift) \ 86862306a36Sopenharmony_ci GATE_MTK(_id, _name, _parent, &infra0_cg_regs, _shift, \ 86962306a36Sopenharmony_ci &mtk_clk_gate_ops_setclr) 87062306a36Sopenharmony_ci#define GATE_INFRA1(_id, _name, _parent, _shift) \ 87162306a36Sopenharmony_ci GATE_MTK(_id, _name, _parent, &infra1_cg_regs, _shift, \ 87262306a36Sopenharmony_ci &mtk_clk_gate_ops_setclr) 87362306a36Sopenharmony_ci#define GATE_INFRA2(_id, _name, _parent, _shift) \ 87462306a36Sopenharmony_ci GATE_MTK(_id, _name, _parent, &infra2_cg_regs, _shift, \ 87562306a36Sopenharmony_ci &mtk_clk_gate_ops_setclr) 87662306a36Sopenharmony_ci#define GATE_INFRA3(_id, _name, _parent, _shift) \ 87762306a36Sopenharmony_ci GATE_MTK(_id, _name, _parent, &infra3_cg_regs, _shift, \ 87862306a36Sopenharmony_ci &mtk_clk_gate_ops_setclr) 87962306a36Sopenharmony_ci 88062306a36Sopenharmony_cistatic const struct mtk_gate infra_clks[] = { 88162306a36Sopenharmony_ci GATE_DUMMY(CLK_DUMMY, "ifa_dummy"), 88262306a36Sopenharmony_ci /* INFRA0 */ 88362306a36Sopenharmony_ci GATE_INFRA0(CLK_INFRA_PMIC_TMR, "infra_pmic_tmr", 88462306a36Sopenharmony_ci "axi_sel", 0), 88562306a36Sopenharmony_ci GATE_INFRA0(CLK_INFRA_PMIC_AP, "infra_pmic_ap", 88662306a36Sopenharmony_ci "axi_sel", 1), 88762306a36Sopenharmony_ci GATE_INFRA0(CLK_INFRA_PMIC_MD, "infra_pmic_md", 88862306a36Sopenharmony_ci "axi_sel", 2), 88962306a36Sopenharmony_ci GATE_INFRA0(CLK_INFRA_PMIC_CONN, "infra_pmic_conn", 89062306a36Sopenharmony_ci "axi_sel", 3), 89162306a36Sopenharmony_ci GATE_INFRA0(CLK_INFRA_SCPSYS, "infra_scp", 89262306a36Sopenharmony_ci "axi_sel", 4), 89362306a36Sopenharmony_ci GATE_INFRA0(CLK_INFRA_SEJ, "infra_sej", 89462306a36Sopenharmony_ci "f_f26m_ck", 5), 89562306a36Sopenharmony_ci GATE_INFRA0(CLK_INFRA_APXGPT, "infra_apxgpt", 89662306a36Sopenharmony_ci "axi_sel", 6), 89762306a36Sopenharmony_ci GATE_INFRA0(CLK_INFRA_ICUSB, "infra_icusb", 89862306a36Sopenharmony_ci "axi_sel", 8), 89962306a36Sopenharmony_ci GATE_INFRA0(CLK_INFRA_GCE, "infra_gce", 90062306a36Sopenharmony_ci "axi_sel", 9), 90162306a36Sopenharmony_ci GATE_INFRA0(CLK_INFRA_THERM, "infra_therm", 90262306a36Sopenharmony_ci "axi_sel", 10), 90362306a36Sopenharmony_ci GATE_INFRA0(CLK_INFRA_I2C0, "infra_i2c0", 90462306a36Sopenharmony_ci "i2c_sel", 11), 90562306a36Sopenharmony_ci GATE_INFRA0(CLK_INFRA_I2C1, "infra_i2c1", 90662306a36Sopenharmony_ci "i2c_sel", 12), 90762306a36Sopenharmony_ci GATE_INFRA0(CLK_INFRA_I2C2, "infra_i2c2", 90862306a36Sopenharmony_ci "i2c_sel", 13), 90962306a36Sopenharmony_ci GATE_INFRA0(CLK_INFRA_I2C3, "infra_i2c3", 91062306a36Sopenharmony_ci "i2c_sel", 14), 91162306a36Sopenharmony_ci GATE_INFRA0(CLK_INFRA_PWM_HCLK, "infra_pwm_hclk", 91262306a36Sopenharmony_ci "pwm_sel", 15), 91362306a36Sopenharmony_ci GATE_INFRA0(CLK_INFRA_PWM1, "infra_pwm1", 91462306a36Sopenharmony_ci "pwm_sel", 16), 91562306a36Sopenharmony_ci GATE_INFRA0(CLK_INFRA_PWM2, "infra_pwm2", 91662306a36Sopenharmony_ci "pwm_sel", 17), 91762306a36Sopenharmony_ci GATE_INFRA0(CLK_INFRA_PWM3, "infra_pwm3", 91862306a36Sopenharmony_ci "pwm_sel", 18), 91962306a36Sopenharmony_ci GATE_INFRA0(CLK_INFRA_PWM4, "infra_pwm4", 92062306a36Sopenharmony_ci "pwm_sel", 19), 92162306a36Sopenharmony_ci GATE_INFRA0(CLK_INFRA_PWM, "infra_pwm", 92262306a36Sopenharmony_ci "pwm_sel", 21), 92362306a36Sopenharmony_ci GATE_INFRA0(CLK_INFRA_UART0, "infra_uart0", 92462306a36Sopenharmony_ci "uart_sel", 22), 92562306a36Sopenharmony_ci GATE_INFRA0(CLK_INFRA_UART1, "infra_uart1", 92662306a36Sopenharmony_ci "uart_sel", 23), 92762306a36Sopenharmony_ci GATE_INFRA0(CLK_INFRA_UART2, "infra_uart2", 92862306a36Sopenharmony_ci "uart_sel", 24), 92962306a36Sopenharmony_ci GATE_INFRA0(CLK_INFRA_UART3, "infra_uart3", 93062306a36Sopenharmony_ci "uart_sel", 25), 93162306a36Sopenharmony_ci GATE_INFRA0(CLK_INFRA_GCE_26M, "infra_gce_26m", 93262306a36Sopenharmony_ci "axi_sel", 27), 93362306a36Sopenharmony_ci GATE_INFRA0(CLK_INFRA_CQ_DMA_FPC, "infra_cqdma_fpc", 93462306a36Sopenharmony_ci "axi_sel", 28), 93562306a36Sopenharmony_ci GATE_INFRA0(CLK_INFRA_BTIF, "infra_btif", 93662306a36Sopenharmony_ci "axi_sel", 31), 93762306a36Sopenharmony_ci /* INFRA1 */ 93862306a36Sopenharmony_ci GATE_INFRA1(CLK_INFRA_SPI0, "infra_spi0", 93962306a36Sopenharmony_ci "spi_sel", 1), 94062306a36Sopenharmony_ci GATE_INFRA1(CLK_INFRA_MSDC0, "infra_msdc0", 94162306a36Sopenharmony_ci "msdc50_hclk_sel", 2), 94262306a36Sopenharmony_ci GATE_INFRA1(CLK_INFRA_MSDC1, "infra_msdc1", 94362306a36Sopenharmony_ci "axi_sel", 4), 94462306a36Sopenharmony_ci GATE_INFRA1(CLK_INFRA_MSDC2, "infra_msdc2", 94562306a36Sopenharmony_ci "axi_sel", 5), 94662306a36Sopenharmony_ci GATE_INFRA1(CLK_INFRA_MSDC0_SCK, "infra_msdc0_sck", 94762306a36Sopenharmony_ci "msdc50_0_sel", 6), 94862306a36Sopenharmony_ci GATE_INFRA1(CLK_INFRA_DVFSRC, "infra_dvfsrc", 94962306a36Sopenharmony_ci "f_f26m_ck", 7), 95062306a36Sopenharmony_ci GATE_INFRA1(CLK_INFRA_GCPU, "infra_gcpu", 95162306a36Sopenharmony_ci "axi_sel", 8), 95262306a36Sopenharmony_ci GATE_INFRA1(CLK_INFRA_TRNG, "infra_trng", 95362306a36Sopenharmony_ci "axi_sel", 9), 95462306a36Sopenharmony_ci GATE_INFRA1(CLK_INFRA_AUXADC, "infra_auxadc", 95562306a36Sopenharmony_ci "f_f26m_ck", 10), 95662306a36Sopenharmony_ci GATE_INFRA1(CLK_INFRA_CPUM, "infra_cpum", 95762306a36Sopenharmony_ci "axi_sel", 11), 95862306a36Sopenharmony_ci GATE_INFRA1(CLK_INFRA_CCIF1_AP, "infra_ccif1_ap", 95962306a36Sopenharmony_ci "axi_sel", 12), 96062306a36Sopenharmony_ci GATE_INFRA1(CLK_INFRA_CCIF1_MD, "infra_ccif1_md", 96162306a36Sopenharmony_ci "axi_sel", 13), 96262306a36Sopenharmony_ci GATE_INFRA1(CLK_INFRA_AUXADC_MD, "infra_auxadc_md", 96362306a36Sopenharmony_ci "f_f26m_ck", 14), 96462306a36Sopenharmony_ci GATE_INFRA1(CLK_INFRA_MSDC1_SCK, "infra_msdc1_sck", 96562306a36Sopenharmony_ci "msdc30_1_sel", 16), 96662306a36Sopenharmony_ci GATE_INFRA1(CLK_INFRA_MSDC2_SCK, "infra_msdc2_sck", 96762306a36Sopenharmony_ci "msdc30_2_sel", 17), 96862306a36Sopenharmony_ci GATE_INFRA1(CLK_INFRA_AP_DMA, "infra_apdma", 96962306a36Sopenharmony_ci "axi_sel", 18), 97062306a36Sopenharmony_ci GATE_INFRA1(CLK_INFRA_XIU, "infra_xiu", 97162306a36Sopenharmony_ci "axi_sel", 19), 97262306a36Sopenharmony_ci GATE_INFRA1(CLK_INFRA_DEVICE_APC, "infra_device_apc", 97362306a36Sopenharmony_ci "axi_sel", 20), 97462306a36Sopenharmony_ci GATE_INFRA1(CLK_INFRA_CCIF_AP, "infra_ccif_ap", 97562306a36Sopenharmony_ci "axi_sel", 23), 97662306a36Sopenharmony_ci GATE_INFRA1(CLK_INFRA_DEBUGSYS, "infra_debugsys", 97762306a36Sopenharmony_ci "axi_sel", 24), 97862306a36Sopenharmony_ci GATE_INFRA1(CLK_INFRA_AUD, "infra_audio", 97962306a36Sopenharmony_ci "axi_sel", 25), 98062306a36Sopenharmony_ci GATE_INFRA1(CLK_INFRA_CCIF_MD, "infra_ccif_md", 98162306a36Sopenharmony_ci "axi_sel", 26), 98262306a36Sopenharmony_ci GATE_INFRA1(CLK_INFRA_DXCC_SEC_CORE, "infra_dxcc_sec_core", 98362306a36Sopenharmony_ci "dxcc_sel", 27), 98462306a36Sopenharmony_ci GATE_INFRA1(CLK_INFRA_DXCC_AO, "infra_dxcc_ao", 98562306a36Sopenharmony_ci "dxcc_sel", 28), 98662306a36Sopenharmony_ci GATE_INFRA1(CLK_INFRA_DEVMPU_BCLK, "infra_devmpu_bclk", 98762306a36Sopenharmony_ci "axi_sel", 30), 98862306a36Sopenharmony_ci GATE_INFRA1(CLK_INFRA_DRAMC_F26M, "infra_dramc_f26m", 98962306a36Sopenharmony_ci "f_f26m_ck", 31), 99062306a36Sopenharmony_ci /* INFRA2 */ 99162306a36Sopenharmony_ci GATE_INFRA2(CLK_INFRA_IRTX, "infra_irtx", 99262306a36Sopenharmony_ci "f_f26m_ck", 0), 99362306a36Sopenharmony_ci GATE_INFRA2(CLK_INFRA_USB, "infra_usb", 99462306a36Sopenharmony_ci "usb_top_sel", 1), 99562306a36Sopenharmony_ci GATE_INFRA2(CLK_INFRA_DISP_PWM, "infra_disppwm", 99662306a36Sopenharmony_ci "axi_sel", 2), 99762306a36Sopenharmony_ci GATE_INFRA2(CLK_INFRA_AUD_26M_BCLK, 99862306a36Sopenharmony_ci "infracfg_ao_audio_26m_bclk", "f_f26m_ck", 4), 99962306a36Sopenharmony_ci GATE_INFRA2(CLK_INFRA_SPI1, "infra_spi1", 100062306a36Sopenharmony_ci "spi_sel", 6), 100162306a36Sopenharmony_ci GATE_INFRA2(CLK_INFRA_I2C4, "infra_i2c4", 100262306a36Sopenharmony_ci "i2c_sel", 7), 100362306a36Sopenharmony_ci GATE_INFRA2(CLK_INFRA_MODEM_TEMP_SHARE, "infra_md_tmp_share", 100462306a36Sopenharmony_ci "f_f26m_ck", 8), 100562306a36Sopenharmony_ci GATE_INFRA2(CLK_INFRA_SPI2, "infra_spi2", 100662306a36Sopenharmony_ci "spi_sel", 9), 100762306a36Sopenharmony_ci GATE_INFRA2(CLK_INFRA_SPI3, "infra_spi3", 100862306a36Sopenharmony_ci "spi_sel", 10), 100962306a36Sopenharmony_ci GATE_INFRA2(CLK_INFRA_UNIPRO_SCK, "infra_unipro_sck", 101062306a36Sopenharmony_ci "fufs_sel", 11), 101162306a36Sopenharmony_ci GATE_INFRA2(CLK_INFRA_UNIPRO_TICK, "infra_unipro_tick", 101262306a36Sopenharmony_ci "fufs_sel", 12), 101362306a36Sopenharmony_ci GATE_INFRA2(CLK_INFRA_UFS_MP_SAP_BCLK, "infra_ufs_mp_sap_bck", 101462306a36Sopenharmony_ci "fufs_sel", 13), 101562306a36Sopenharmony_ci GATE_INFRA2(CLK_INFRA_MD32_BCLK, "infra_md32_bclk", 101662306a36Sopenharmony_ci "axi_sel", 14), 101762306a36Sopenharmony_ci GATE_INFRA2(CLK_INFRA_UNIPRO_MBIST, "infra_unipro_mbist", 101862306a36Sopenharmony_ci "axi_sel", 16), 101962306a36Sopenharmony_ci GATE_INFRA2(CLK_INFRA_SSPM_BUS_HCLK, "infra_sspm_bus_hclk", 102062306a36Sopenharmony_ci "axi_sel", 17), 102162306a36Sopenharmony_ci GATE_INFRA2(CLK_INFRA_I2C5, "infra_i2c5", 102262306a36Sopenharmony_ci "i2c_sel", 18), 102362306a36Sopenharmony_ci GATE_INFRA2(CLK_INFRA_I2C5_ARBITER, "infra_i2c5_arbiter", 102462306a36Sopenharmony_ci "i2c_sel", 19), 102562306a36Sopenharmony_ci GATE_INFRA2(CLK_INFRA_I2C5_IMM, "infra_i2c5_imm", 102662306a36Sopenharmony_ci "i2c_sel", 20), 102762306a36Sopenharmony_ci GATE_INFRA2(CLK_INFRA_I2C1_ARBITER, "infra_i2c1_arbiter", 102862306a36Sopenharmony_ci "i2c_sel", 21), 102962306a36Sopenharmony_ci GATE_INFRA2(CLK_INFRA_I2C1_IMM, "infra_i2c1_imm", 103062306a36Sopenharmony_ci "i2c_sel", 22), 103162306a36Sopenharmony_ci GATE_INFRA2(CLK_INFRA_I2C2_ARBITER, "infra_i2c2_arbiter", 103262306a36Sopenharmony_ci "i2c_sel", 23), 103362306a36Sopenharmony_ci GATE_INFRA2(CLK_INFRA_I2C2_IMM, "infra_i2c2_imm", 103462306a36Sopenharmony_ci "i2c_sel", 24), 103562306a36Sopenharmony_ci GATE_INFRA2(CLK_INFRA_SPI4, "infra_spi4", 103662306a36Sopenharmony_ci "spi_sel", 25), 103762306a36Sopenharmony_ci GATE_INFRA2(CLK_INFRA_SPI5, "infra_spi5", 103862306a36Sopenharmony_ci "spi_sel", 26), 103962306a36Sopenharmony_ci GATE_INFRA2(CLK_INFRA_CQ_DMA, "infra_cqdma", 104062306a36Sopenharmony_ci "axi_sel", 27), 104162306a36Sopenharmony_ci GATE_INFRA2(CLK_INFRA_UFS, "infra_ufs", 104262306a36Sopenharmony_ci "fufs_sel", 28), 104362306a36Sopenharmony_ci GATE_INFRA2(CLK_INFRA_AES_UFSFDE, "infra_aes_ufsfde", 104462306a36Sopenharmony_ci "faes_ufsfde_sel", 29), 104562306a36Sopenharmony_ci GATE_INFRA2(CLK_INFRA_UFS_TICK, "infra_ufs_tick", 104662306a36Sopenharmony_ci "fufs_sel", 30), 104762306a36Sopenharmony_ci GATE_INFRA2(CLK_INFRA_SSUSB_XHCI, "infra_ssusb_xhci", 104862306a36Sopenharmony_ci "ssusb_top_xhci_sel", 31), 104962306a36Sopenharmony_ci /* INFRA3 */ 105062306a36Sopenharmony_ci GATE_INFRA3(CLK_INFRA_MSDC0_SELF, "infra_msdc0_self", 105162306a36Sopenharmony_ci "msdc50_0_sel", 0), 105262306a36Sopenharmony_ci GATE_INFRA3(CLK_INFRA_MSDC1_SELF, "infra_msdc1_self", 105362306a36Sopenharmony_ci "msdc50_0_sel", 1), 105462306a36Sopenharmony_ci GATE_INFRA3(CLK_INFRA_MSDC2_SELF, "infra_msdc2_self", 105562306a36Sopenharmony_ci "msdc50_0_sel", 2), 105662306a36Sopenharmony_ci GATE_INFRA3(CLK_INFRA_SSPM_26M_SELF, "infra_sspm_26m_self", 105762306a36Sopenharmony_ci "f_f26m_ck", 3), 105862306a36Sopenharmony_ci GATE_INFRA3(CLK_INFRA_SSPM_32K_SELF, "infra_sspm_32k_self", 105962306a36Sopenharmony_ci "f_f26m_ck", 4), 106062306a36Sopenharmony_ci GATE_INFRA3(CLK_INFRA_UFS_AXI, "infra_ufs_axi", 106162306a36Sopenharmony_ci "axi_sel", 5), 106262306a36Sopenharmony_ci GATE_INFRA3(CLK_INFRA_I2C6, "infra_i2c6", 106362306a36Sopenharmony_ci "i2c_sel", 6), 106462306a36Sopenharmony_ci GATE_INFRA3(CLK_INFRA_AP_MSDC0, "infra_ap_msdc0", 106562306a36Sopenharmony_ci "msdc50_hclk_sel", 7), 106662306a36Sopenharmony_ci GATE_INFRA3(CLK_INFRA_MD_MSDC0, "infra_md_msdc0", 106762306a36Sopenharmony_ci "msdc50_hclk_sel", 8), 106862306a36Sopenharmony_ci GATE_INFRA3(CLK_INFRA_CCIF2_AP, "infra_ccif2_ap", 106962306a36Sopenharmony_ci "axi_sel", 16), 107062306a36Sopenharmony_ci GATE_INFRA3(CLK_INFRA_CCIF2_MD, "infra_ccif2_md", 107162306a36Sopenharmony_ci "axi_sel", 17), 107262306a36Sopenharmony_ci GATE_INFRA3(CLK_INFRA_CCIF3_AP, "infra_ccif3_ap", 107362306a36Sopenharmony_ci "axi_sel", 18), 107462306a36Sopenharmony_ci GATE_INFRA3(CLK_INFRA_CCIF3_MD, "infra_ccif3_md", 107562306a36Sopenharmony_ci "axi_sel", 19), 107662306a36Sopenharmony_ci GATE_INFRA3(CLK_INFRA_SEJ_F13M, "infra_sej_f13m", 107762306a36Sopenharmony_ci "f_f26m_ck", 20), 107862306a36Sopenharmony_ci GATE_INFRA3(CLK_INFRA_AES_BCLK, "infra_aes_bclk", 107962306a36Sopenharmony_ci "axi_sel", 21), 108062306a36Sopenharmony_ci GATE_INFRA3(CLK_INFRA_I2C7, "infra_i2c7", 108162306a36Sopenharmony_ci "i2c_sel", 22), 108262306a36Sopenharmony_ci GATE_INFRA3(CLK_INFRA_I2C8, "infra_i2c8", 108362306a36Sopenharmony_ci "i2c_sel", 23), 108462306a36Sopenharmony_ci GATE_INFRA3(CLK_INFRA_FBIST2FPC, "infra_fbist2fpc", 108562306a36Sopenharmony_ci "msdc50_0_sel", 24), 108662306a36Sopenharmony_ci GATE_INFRA3(CLK_INFRA_DPMAIF_CK, "infra_dpmaif", 108762306a36Sopenharmony_ci "dpmaif_sel", 26), 108862306a36Sopenharmony_ci GATE_INFRA3(CLK_INFRA_FADSP, "infra_fadsp", 108962306a36Sopenharmony_ci "adsp_sel", 27), 109062306a36Sopenharmony_ci GATE_INFRA3(CLK_INFRA_CCIF4_AP, "infra_ccif4_ap", 109162306a36Sopenharmony_ci "axi_sel", 28), 109262306a36Sopenharmony_ci GATE_INFRA3(CLK_INFRA_CCIF4_MD, "infra_ccif4_md", 109362306a36Sopenharmony_ci "axi_sel", 29), 109462306a36Sopenharmony_ci GATE_INFRA3(CLK_INFRA_SPI6, "infra_spi6", 109562306a36Sopenharmony_ci "spi_sel", 30), 109662306a36Sopenharmony_ci GATE_INFRA3(CLK_INFRA_SPI7, "infra_spi7", 109762306a36Sopenharmony_ci "spi_sel", 31), 109862306a36Sopenharmony_ci}; 109962306a36Sopenharmony_ci 110062306a36Sopenharmony_cistatic const struct mtk_gate_regs apmixed_cg_regs = { 110162306a36Sopenharmony_ci .set_ofs = 0x20, 110262306a36Sopenharmony_ci .clr_ofs = 0x20, 110362306a36Sopenharmony_ci .sta_ofs = 0x20, 110462306a36Sopenharmony_ci}; 110562306a36Sopenharmony_ci 110662306a36Sopenharmony_ci#define GATE_APMIXED_FLAGS(_id, _name, _parent, _shift, _flags) \ 110762306a36Sopenharmony_ci GATE_MTK_FLAGS(_id, _name, _parent, &apmixed_cg_regs, \ 110862306a36Sopenharmony_ci _shift, &mtk_clk_gate_ops_no_setclr_inv, _flags) 110962306a36Sopenharmony_ci 111062306a36Sopenharmony_ci#define GATE_APMIXED(_id, _name, _parent, _shift) \ 111162306a36Sopenharmony_ci GATE_APMIXED_FLAGS(_id, _name, _parent, _shift, 0) 111262306a36Sopenharmony_ci 111362306a36Sopenharmony_ci/* 111462306a36Sopenharmony_ci * CRITICAL CLOCK: 111562306a36Sopenharmony_ci * apmixed_appll26m is the toppest clock gate of all PLLs. 111662306a36Sopenharmony_ci */ 111762306a36Sopenharmony_cistatic const struct mtk_gate apmixed_clks[] = { 111862306a36Sopenharmony_ci GATE_APMIXED(CLK_APMIXED_SSUSB26M, "apmixed_ssusb26m", 111962306a36Sopenharmony_ci "f_f26m_ck", 4), 112062306a36Sopenharmony_ci GATE_APMIXED_FLAGS(CLK_APMIXED_APPLL26M, "apmixed_appll26m", 112162306a36Sopenharmony_ci "f_f26m_ck", 5, CLK_IS_CRITICAL), 112262306a36Sopenharmony_ci GATE_APMIXED(CLK_APMIXED_MIPIC0_26M, "apmixed_mipic026m", 112362306a36Sopenharmony_ci "f_f26m_ck", 6), 112462306a36Sopenharmony_ci GATE_APMIXED(CLK_APMIXED_MDPLLGP26M, "apmixed_mdpll26m", 112562306a36Sopenharmony_ci "f_f26m_ck", 7), 112662306a36Sopenharmony_ci GATE_APMIXED(CLK_APMIXED_MM_F26M, "apmixed_mmsys26m", 112762306a36Sopenharmony_ci "f_f26m_ck", 8), 112862306a36Sopenharmony_ci GATE_APMIXED(CLK_APMIXED_UFS26M, "apmixed_ufs26m", 112962306a36Sopenharmony_ci "f_f26m_ck", 9), 113062306a36Sopenharmony_ci GATE_APMIXED(CLK_APMIXED_MIPIC1_26M, "apmixed_mipic126m", 113162306a36Sopenharmony_ci "f_f26m_ck", 11), 113262306a36Sopenharmony_ci GATE_APMIXED(CLK_APMIXED_MEMPLL26M, "apmixed_mempll26m", 113362306a36Sopenharmony_ci "f_f26m_ck", 13), 113462306a36Sopenharmony_ci GATE_APMIXED(CLK_APMIXED_CLKSQ_LVPLL_26M, "apmixed_lvpll26m", 113562306a36Sopenharmony_ci "f_f26m_ck", 14), 113662306a36Sopenharmony_ci GATE_APMIXED(CLK_APMIXED_MIPID0_26M, "apmixed_mipid026m", 113762306a36Sopenharmony_ci "f_f26m_ck", 16), 113862306a36Sopenharmony_ci GATE_APMIXED(CLK_APMIXED_MIPID1_26M, "apmixed_mipid126m", 113962306a36Sopenharmony_ci "f_f26m_ck", 17), 114062306a36Sopenharmony_ci}; 114162306a36Sopenharmony_ci 114262306a36Sopenharmony_ci#define MT6779_PLL_FMAX (3800UL * MHZ) 114362306a36Sopenharmony_ci#define MT6779_PLL_FMIN (1500UL * MHZ) 114462306a36Sopenharmony_ci 114562306a36Sopenharmony_ci#define PLL_B(_id, _name, _reg, _pwr_reg, _en_mask, _flags, \ 114662306a36Sopenharmony_ci _rst_bar_mask, _pcwbits, _pcwibits, _pd_reg, \ 114762306a36Sopenharmony_ci _pd_shift, _tuner_reg, _tuner_en_reg, \ 114862306a36Sopenharmony_ci _tuner_en_bit, _pcw_reg, _pcw_shift, \ 114962306a36Sopenharmony_ci _pcw_chg_reg, _div_table) { \ 115062306a36Sopenharmony_ci .id = _id, \ 115162306a36Sopenharmony_ci .name = _name, \ 115262306a36Sopenharmony_ci .reg = _reg, \ 115362306a36Sopenharmony_ci .pwr_reg = _pwr_reg, \ 115462306a36Sopenharmony_ci .en_mask = _en_mask, \ 115562306a36Sopenharmony_ci .flags = _flags, \ 115662306a36Sopenharmony_ci .rst_bar_mask = _rst_bar_mask, \ 115762306a36Sopenharmony_ci .fmax = MT6779_PLL_FMAX, \ 115862306a36Sopenharmony_ci .fmin = MT6779_PLL_FMIN, \ 115962306a36Sopenharmony_ci .pcwbits = _pcwbits, \ 116062306a36Sopenharmony_ci .pcwibits = _pcwibits, \ 116162306a36Sopenharmony_ci .pd_reg = _pd_reg, \ 116262306a36Sopenharmony_ci .pd_shift = _pd_shift, \ 116362306a36Sopenharmony_ci .tuner_reg = _tuner_reg, \ 116462306a36Sopenharmony_ci .tuner_en_reg = _tuner_en_reg, \ 116562306a36Sopenharmony_ci .tuner_en_bit = _tuner_en_bit, \ 116662306a36Sopenharmony_ci .pcw_reg = _pcw_reg, \ 116762306a36Sopenharmony_ci .pcw_shift = _pcw_shift, \ 116862306a36Sopenharmony_ci .pcw_chg_reg = _pcw_chg_reg, \ 116962306a36Sopenharmony_ci .div_table = _div_table, \ 117062306a36Sopenharmony_ci } 117162306a36Sopenharmony_ci 117262306a36Sopenharmony_ci#define PLL(_id, _name, _reg, _pwr_reg, _en_mask, _flags, \ 117362306a36Sopenharmony_ci _rst_bar_mask, _pcwbits, _pcwibits, _pd_reg, \ 117462306a36Sopenharmony_ci _pd_shift, _tuner_reg, _tuner_en_reg, \ 117562306a36Sopenharmony_ci _tuner_en_bit, _pcw_reg, _pcw_shift, \ 117662306a36Sopenharmony_ci _pcw_chg_reg) \ 117762306a36Sopenharmony_ci PLL_B(_id, _name, _reg, _pwr_reg, _en_mask, _flags, \ 117862306a36Sopenharmony_ci _rst_bar_mask, _pcwbits, _pcwibits, _pd_reg, \ 117962306a36Sopenharmony_ci _pd_shift, _tuner_reg, _tuner_en_reg, \ 118062306a36Sopenharmony_ci _tuner_en_bit, _pcw_reg, _pcw_shift, \ 118162306a36Sopenharmony_ci _pcw_chg_reg, NULL) 118262306a36Sopenharmony_ci 118362306a36Sopenharmony_cistatic const struct mtk_pll_data plls[] = { 118462306a36Sopenharmony_ci PLL(CLK_APMIXED_ARMPLL_LL, "armpll_ll", 0x0200, 0x020C, 0, 118562306a36Sopenharmony_ci PLL_AO, 0, 22, 8, 0x0204, 24, 0, 0, 0, 0x0204, 0, 0), 118662306a36Sopenharmony_ci PLL(CLK_APMIXED_ARMPLL_BL, "armpll_bl", 0x0210, 0x021C, 0, 118762306a36Sopenharmony_ci PLL_AO, 0, 22, 8, 0x0214, 24, 0, 0, 0, 0x0214, 0, 0), 118862306a36Sopenharmony_ci PLL(CLK_APMIXED_CCIPLL, "ccipll", 0x02A0, 0x02AC, 0, 118962306a36Sopenharmony_ci PLL_AO, 0, 22, 8, 0x02A4, 24, 0, 0, 0, 0x02A4, 0, 0), 119062306a36Sopenharmony_ci PLL(CLK_APMIXED_MAINPLL, "mainpll", 0x0230, 0x023C, 0, 119162306a36Sopenharmony_ci (HAVE_RST_BAR), BIT(24), 22, 8, 0x0234, 24, 0, 0, 0, 119262306a36Sopenharmony_ci 0x0234, 0, 0), 119362306a36Sopenharmony_ci PLL(CLK_APMIXED_UNIV2PLL, "univ2pll", 0x0240, 0x024C, 0, 119462306a36Sopenharmony_ci (HAVE_RST_BAR), BIT(24), 22, 8, 0x0244, 24, 119562306a36Sopenharmony_ci 0, 0, 0, 0x0244, 0, 0), 119662306a36Sopenharmony_ci PLL(CLK_APMIXED_MFGPLL, "mfgpll", 0x0250, 0x025C, 0, 119762306a36Sopenharmony_ci 0, 0, 22, 8, 0x0254, 24, 0, 0, 0, 0x0254, 0, 0), 119862306a36Sopenharmony_ci PLL(CLK_APMIXED_MSDCPLL, "msdcpll", 0x0260, 0x026C, 0, 119962306a36Sopenharmony_ci 0, 0, 22, 8, 0x0264, 24, 0, 0, 0, 0x0264, 0, 0), 120062306a36Sopenharmony_ci PLL(CLK_APMIXED_TVDPLL, "tvdpll", 0x0270, 0x027C, 0, 120162306a36Sopenharmony_ci 0, 0, 22, 8, 0x0274, 24, 0, 0, 0, 0x0274, 0, 0), 120262306a36Sopenharmony_ci PLL(CLK_APMIXED_ADSPPLL, "adsppll", 0x02b0, 0x02bC, 0, 120362306a36Sopenharmony_ci (HAVE_RST_BAR), BIT(23), 22, 8, 0x02b4, 24, 120462306a36Sopenharmony_ci 0, 0, 0, 0x02b4, 0, 0), 120562306a36Sopenharmony_ci PLL(CLK_APMIXED_MMPLL, "mmpll", 0x0280, 0x028C, 0, 120662306a36Sopenharmony_ci (HAVE_RST_BAR), BIT(23), 22, 8, 0x0284, 24, 120762306a36Sopenharmony_ci 0, 0, 0, 0x0284, 0, 0), 120862306a36Sopenharmony_ci PLL(CLK_APMIXED_APLL1, "apll1", 0x02C0, 0x02D0, 0, 120962306a36Sopenharmony_ci 0, 0, 32, 8, 0x02C0, 1, 0, 0x14, 0, 0x02C4, 0, 0x2C0), 121062306a36Sopenharmony_ci PLL(CLK_APMIXED_APLL2, "apll2", 0x02D4, 0x02E4, 0, 121162306a36Sopenharmony_ci 0, 0, 32, 8, 0x02D4, 1, 0, 0x14, 1, 0x02D8, 0, 0x02D4), 121262306a36Sopenharmony_ci}; 121362306a36Sopenharmony_ci 121462306a36Sopenharmony_cistatic int clk_mt6779_apmixed_probe(struct platform_device *pdev) 121562306a36Sopenharmony_ci{ 121662306a36Sopenharmony_ci struct clk_hw_onecell_data *clk_data; 121762306a36Sopenharmony_ci struct device_node *node = pdev->dev.of_node; 121862306a36Sopenharmony_ci 121962306a36Sopenharmony_ci clk_data = mtk_alloc_clk_data(CLK_APMIXED_NR_CLK); 122062306a36Sopenharmony_ci if (!clk_data) 122162306a36Sopenharmony_ci return -ENOMEM; 122262306a36Sopenharmony_ci 122362306a36Sopenharmony_ci mtk_clk_register_plls(node, plls, ARRAY_SIZE(plls), clk_data); 122462306a36Sopenharmony_ci 122562306a36Sopenharmony_ci mtk_clk_register_gates(&pdev->dev, node, apmixed_clks, 122662306a36Sopenharmony_ci ARRAY_SIZE(apmixed_clks), clk_data); 122762306a36Sopenharmony_ci 122862306a36Sopenharmony_ci return of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data); 122962306a36Sopenharmony_ci} 123062306a36Sopenharmony_ci 123162306a36Sopenharmony_cistatic int clk_mt6779_top_probe(struct platform_device *pdev) 123262306a36Sopenharmony_ci{ 123362306a36Sopenharmony_ci void __iomem *base; 123462306a36Sopenharmony_ci struct clk_hw_onecell_data *clk_data; 123562306a36Sopenharmony_ci struct device_node *node = pdev->dev.of_node; 123662306a36Sopenharmony_ci 123762306a36Sopenharmony_ci base = devm_platform_ioremap_resource(pdev, 0); 123862306a36Sopenharmony_ci if (IS_ERR(base)) 123962306a36Sopenharmony_ci return PTR_ERR(base); 124062306a36Sopenharmony_ci 124162306a36Sopenharmony_ci clk_data = mtk_alloc_clk_data(CLK_TOP_NR_CLK); 124262306a36Sopenharmony_ci if (!clk_data) 124362306a36Sopenharmony_ci return -ENOMEM; 124462306a36Sopenharmony_ci 124562306a36Sopenharmony_ci mtk_clk_register_fixed_clks(top_fixed_clks, ARRAY_SIZE(top_fixed_clks), 124662306a36Sopenharmony_ci clk_data); 124762306a36Sopenharmony_ci 124862306a36Sopenharmony_ci mtk_clk_register_factors(top_divs, ARRAY_SIZE(top_divs), clk_data); 124962306a36Sopenharmony_ci 125062306a36Sopenharmony_ci mtk_clk_register_muxes(&pdev->dev, top_muxes, 125162306a36Sopenharmony_ci ARRAY_SIZE(top_muxes), node, 125262306a36Sopenharmony_ci &mt6779_clk_lock, clk_data); 125362306a36Sopenharmony_ci 125462306a36Sopenharmony_ci mtk_clk_register_composites(&pdev->dev, top_aud_muxes, 125562306a36Sopenharmony_ci ARRAY_SIZE(top_aud_muxes), base, 125662306a36Sopenharmony_ci &mt6779_clk_lock, clk_data); 125762306a36Sopenharmony_ci 125862306a36Sopenharmony_ci mtk_clk_register_composites(&pdev->dev, top_aud_divs, 125962306a36Sopenharmony_ci ARRAY_SIZE(top_aud_divs), base, 126062306a36Sopenharmony_ci &mt6779_clk_lock, clk_data); 126162306a36Sopenharmony_ci 126262306a36Sopenharmony_ci return of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data); 126362306a36Sopenharmony_ci} 126462306a36Sopenharmony_ci 126562306a36Sopenharmony_cistatic const struct of_device_id of_match_clk_mt6779[] = { 126662306a36Sopenharmony_ci { 126762306a36Sopenharmony_ci .compatible = "mediatek,mt6779-apmixed", 126862306a36Sopenharmony_ci .data = clk_mt6779_apmixed_probe, 126962306a36Sopenharmony_ci }, { 127062306a36Sopenharmony_ci .compatible = "mediatek,mt6779-topckgen", 127162306a36Sopenharmony_ci .data = clk_mt6779_top_probe, 127262306a36Sopenharmony_ci }, { 127362306a36Sopenharmony_ci /* sentinel */ 127462306a36Sopenharmony_ci } 127562306a36Sopenharmony_ci}; 127662306a36Sopenharmony_ci 127762306a36Sopenharmony_cistatic int clk_mt6779_probe(struct platform_device *pdev) 127862306a36Sopenharmony_ci{ 127962306a36Sopenharmony_ci int (*clk_probe)(struct platform_device *pdev); 128062306a36Sopenharmony_ci int r; 128162306a36Sopenharmony_ci 128262306a36Sopenharmony_ci clk_probe = of_device_get_match_data(&pdev->dev); 128362306a36Sopenharmony_ci if (!clk_probe) 128462306a36Sopenharmony_ci return -EINVAL; 128562306a36Sopenharmony_ci 128662306a36Sopenharmony_ci r = clk_probe(pdev); 128762306a36Sopenharmony_ci if (r) 128862306a36Sopenharmony_ci dev_err(&pdev->dev, 128962306a36Sopenharmony_ci "could not register clock provider: %s: %d\n", 129062306a36Sopenharmony_ci pdev->name, r); 129162306a36Sopenharmony_ci 129262306a36Sopenharmony_ci return r; 129362306a36Sopenharmony_ci} 129462306a36Sopenharmony_ci 129562306a36Sopenharmony_cistatic const struct mtk_clk_desc infra_desc = { 129662306a36Sopenharmony_ci .clks = infra_clks, 129762306a36Sopenharmony_ci .num_clks = ARRAY_SIZE(infra_clks), 129862306a36Sopenharmony_ci}; 129962306a36Sopenharmony_ci 130062306a36Sopenharmony_cistatic const struct of_device_id of_match_clk_mt6779_infra[] = { 130162306a36Sopenharmony_ci { .compatible = "mediatek,mt6779-infracfg_ao", .data = &infra_desc }, 130262306a36Sopenharmony_ci { /* sentinel */ } 130362306a36Sopenharmony_ci}; 130462306a36Sopenharmony_ciMODULE_DEVICE_TABLE(of, of_match_clk_mt6779); 130562306a36Sopenharmony_ci 130662306a36Sopenharmony_cistatic struct platform_driver clk_mt6779_infra_drv = { 130762306a36Sopenharmony_ci .probe = mtk_clk_simple_probe, 130862306a36Sopenharmony_ci .remove_new = mtk_clk_simple_remove, 130962306a36Sopenharmony_ci .driver = { 131062306a36Sopenharmony_ci .name = "clk-mt6779-infra", 131162306a36Sopenharmony_ci .of_match_table = of_match_clk_mt6779_infra, 131262306a36Sopenharmony_ci }, 131362306a36Sopenharmony_ci}; 131462306a36Sopenharmony_ci 131562306a36Sopenharmony_cistatic struct platform_driver clk_mt6779_drv = { 131662306a36Sopenharmony_ci .probe = clk_mt6779_probe, 131762306a36Sopenharmony_ci .driver = { 131862306a36Sopenharmony_ci .name = "clk-mt6779", 131962306a36Sopenharmony_ci .of_match_table = of_match_clk_mt6779, 132062306a36Sopenharmony_ci }, 132162306a36Sopenharmony_ci}; 132262306a36Sopenharmony_ci 132362306a36Sopenharmony_cistatic int __init clk_mt6779_init(void) 132462306a36Sopenharmony_ci{ 132562306a36Sopenharmony_ci int ret = platform_driver_register(&clk_mt6779_drv); 132662306a36Sopenharmony_ci 132762306a36Sopenharmony_ci if (ret) 132862306a36Sopenharmony_ci return ret; 132962306a36Sopenharmony_ci return platform_driver_register(&clk_mt6779_infra_drv); 133062306a36Sopenharmony_ci} 133162306a36Sopenharmony_ci 133262306a36Sopenharmony_ciarch_initcall(clk_mt6779_init); 133362306a36Sopenharmony_ciMODULE_LICENSE("GPL"); 1334