1*a677bdf8SChun-Jie Chen // SPDX-License-Identifier: GPL-2.0-only 2*a677bdf8SChun-Jie Chen // 3*a677bdf8SChun-Jie Chen // Copyright (c) 2022 MediaTek Inc. 4*a677bdf8SChun-Jie Chen // Author: Chun-Jie Chen <chun-jie.chen@mediatek.com> 5*a677bdf8SChun-Jie Chen 6*a677bdf8SChun-Jie Chen #include <linux/clk-provider.h> 7*a677bdf8SChun-Jie Chen #include <linux/platform_device.h> 8*a677bdf8SChun-Jie Chen #include <dt-bindings/clock/mt8186-clk.h> 9*a677bdf8SChun-Jie Chen 10*a677bdf8SChun-Jie Chen #include "clk-gate.h" 11*a677bdf8SChun-Jie Chen #include "clk-mtk.h" 12*a677bdf8SChun-Jie Chen 13*a677bdf8SChun-Jie Chen static const struct mtk_gate_regs ipe_cg_regs = { 14*a677bdf8SChun-Jie Chen .set_ofs = 0x4, 15*a677bdf8SChun-Jie Chen .clr_ofs = 0x8, 16*a677bdf8SChun-Jie Chen .sta_ofs = 0x0, 17*a677bdf8SChun-Jie Chen }; 18*a677bdf8SChun-Jie Chen 19*a677bdf8SChun-Jie Chen #define GATE_IPE(_id, _name, _parent, _shift) \ 20*a677bdf8SChun-Jie Chen GATE_MTK(_id, _name, _parent, &ipe_cg_regs, _shift, &mtk_clk_gate_ops_setclr) 21*a677bdf8SChun-Jie Chen 22*a677bdf8SChun-Jie Chen static const struct mtk_gate ipe_clks[] = { 23*a677bdf8SChun-Jie Chen GATE_IPE(CLK_IPE_LARB19, "ipe_larb19", "top_ipe", 0), 24*a677bdf8SChun-Jie Chen GATE_IPE(CLK_IPE_LARB20, "ipe_larb20", "top_ipe", 1), 25*a677bdf8SChun-Jie Chen GATE_IPE(CLK_IPE_SMI_SUBCOM, "ipe_smi_subcom", "top_ipe", 2), 26*a677bdf8SChun-Jie Chen GATE_IPE(CLK_IPE_FD, "ipe_fd", "top_ipe", 3), 27*a677bdf8SChun-Jie Chen GATE_IPE(CLK_IPE_FE, "ipe_fe", "top_ipe", 4), 28*a677bdf8SChun-Jie Chen GATE_IPE(CLK_IPE_RSC, "ipe_rsc", "top_ipe", 5), 29*a677bdf8SChun-Jie Chen GATE_IPE(CLK_IPE_DPE, "ipe_dpe", "top_ipe", 6), 30*a677bdf8SChun-Jie Chen GATE_IPE(CLK_IPE_GALS_IPE, "ipe_gals_ipe", "top_img1", 8), 31*a677bdf8SChun-Jie Chen }; 32*a677bdf8SChun-Jie Chen 33*a677bdf8SChun-Jie Chen static const struct mtk_clk_desc ipe_desc = { 34*a677bdf8SChun-Jie Chen .clks = ipe_clks, 35*a677bdf8SChun-Jie Chen .num_clks = ARRAY_SIZE(ipe_clks), 36*a677bdf8SChun-Jie Chen }; 37*a677bdf8SChun-Jie Chen 38*a677bdf8SChun-Jie Chen static const struct of_device_id of_match_clk_mt8186_ipe[] = { 39*a677bdf8SChun-Jie Chen { 40*a677bdf8SChun-Jie Chen .compatible = "mediatek,mt8186-ipesys", 41*a677bdf8SChun-Jie Chen .data = &ipe_desc, 42*a677bdf8SChun-Jie Chen }, { 43*a677bdf8SChun-Jie Chen /* sentinel */ 44*a677bdf8SChun-Jie Chen } 45*a677bdf8SChun-Jie Chen }; 46*a677bdf8SChun-Jie Chen 47*a677bdf8SChun-Jie Chen static struct platform_driver clk_mt8186_ipe_drv = { 48*a677bdf8SChun-Jie Chen .probe = mtk_clk_simple_probe, 49*a677bdf8SChun-Jie Chen .remove = mtk_clk_simple_remove, 50*a677bdf8SChun-Jie Chen .driver = { 51*a677bdf8SChun-Jie Chen .name = "clk-mt8186-ipe", 52*a677bdf8SChun-Jie Chen .of_match_table = of_match_clk_mt8186_ipe, 53*a677bdf8SChun-Jie Chen }, 54*a677bdf8SChun-Jie Chen }; 55*a677bdf8SChun-Jie Chen builtin_platform_driver(clk_mt8186_ipe_drv); 56