1*49c9abe1SGarmin.Chang // SPDX-License-Identifier: GPL-2.0-only 2*49c9abe1SGarmin.Chang /* 3*49c9abe1SGarmin.Chang * Copyright (c) 2022 MediaTek Inc. 4*49c9abe1SGarmin.Chang * Author: Garmin Chang <garmin.chang@mediatek.com> 5*49c9abe1SGarmin.Chang */ 6*49c9abe1SGarmin.Chang 7*49c9abe1SGarmin.Chang #include <dt-bindings/clock/mediatek,mt8188-clk.h> 8*49c9abe1SGarmin.Chang #include <linux/clk-provider.h> 9*49c9abe1SGarmin.Chang #include <linux/platform_device.h> 10*49c9abe1SGarmin.Chang 11*49c9abe1SGarmin.Chang #include "clk-gate.h" 12*49c9abe1SGarmin.Chang #include "clk-mtk.h" 13*49c9abe1SGarmin.Chang 14*49c9abe1SGarmin.Chang static const struct mtk_gate_regs ipe_cg_regs = { 15*49c9abe1SGarmin.Chang .set_ofs = 0x4, 16*49c9abe1SGarmin.Chang .clr_ofs = 0x8, 17*49c9abe1SGarmin.Chang .sta_ofs = 0x0, 18*49c9abe1SGarmin.Chang }; 19*49c9abe1SGarmin.Chang 20*49c9abe1SGarmin.Chang #define GATE_IPE(_id, _name, _parent, _shift) \ 21*49c9abe1SGarmin.Chang GATE_MTK(_id, _name, _parent, &ipe_cg_regs, _shift, &mtk_clk_gate_ops_setclr) 22*49c9abe1SGarmin.Chang 23*49c9abe1SGarmin.Chang static const struct mtk_gate ipe_clks[] = { 24*49c9abe1SGarmin.Chang GATE_IPE(CLK_IPE_DPE, "ipe_dpe", "top_ipe", 0), 25*49c9abe1SGarmin.Chang GATE_IPE(CLK_IPE_FDVT, "ipe_fdvt", "top_ipe", 1), 26*49c9abe1SGarmin.Chang GATE_IPE(CLK_IPE_ME, "ipe_me", "top_ipe", 2), 27*49c9abe1SGarmin.Chang GATE_IPE(CLK_IPESYS_TOP, "ipesys_top", "top_ipe", 3), 28*49c9abe1SGarmin.Chang GATE_IPE(CLK_IPE_SMI_LARB12, "ipe_smi_larb12", "top_ipe", 4), 29*49c9abe1SGarmin.Chang }; 30*49c9abe1SGarmin.Chang 31*49c9abe1SGarmin.Chang static const struct mtk_clk_desc ipe_desc = { 32*49c9abe1SGarmin.Chang .clks = ipe_clks, 33*49c9abe1SGarmin.Chang .num_clks = ARRAY_SIZE(ipe_clks), 34*49c9abe1SGarmin.Chang }; 35*49c9abe1SGarmin.Chang 36*49c9abe1SGarmin.Chang static const struct of_device_id of_match_clk_mt8188_ipe[] = { 37*49c9abe1SGarmin.Chang { .compatible = "mediatek,mt8188-ipesys", .data = &ipe_desc }, 38*49c9abe1SGarmin.Chang { /* sentinel */ } 39*49c9abe1SGarmin.Chang }; 40*49c9abe1SGarmin.Chang MODULE_DEVICE_TABLE(of, of_match_clk_mt8188_ipe); 41*49c9abe1SGarmin.Chang 42*49c9abe1SGarmin.Chang static struct platform_driver clk_mt8188_ipe_drv = { 43*49c9abe1SGarmin.Chang .probe = mtk_clk_simple_probe, 44*49c9abe1SGarmin.Chang .remove_new = mtk_clk_simple_remove, 45*49c9abe1SGarmin.Chang .driver = { 46*49c9abe1SGarmin.Chang .name = "clk-mt8188-ipe", 47*49c9abe1SGarmin.Chang .of_match_table = of_match_clk_mt8188_ipe, 48*49c9abe1SGarmin.Chang }, 49*49c9abe1SGarmin.Chang }; 50*49c9abe1SGarmin.Chang 51*49c9abe1SGarmin.Chang module_platform_driver(clk_mt8188_ipe_drv); 52*49c9abe1SGarmin.Chang MODULE_LICENSE("GPL"); 53