Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

clk: mediatek: Add MT8192 msdc clock support

Add MT8192 msdc and msdc top clock providers

Signed-off-by: Weiyi Lu <weiyi.lu@mediatek.com>
Signed-off-by: Chun-Jie Chen <chun-jie.chen@mediatek.com>
Link: https://lore.kernel.org/r/20210726105719.15793-19-chun-jie.chen@mediatek.com
Reviewed-by: Ikjoon Jang <ikjn@chromium.org>
Signed-off-by: Stephen Boyd <sboyd@kernel.org>

authored by

Chun-Jie Chen and committed by
Stephen Boyd
a1a5b6b0 9d44859b

+92
+6
drivers/clk/mediatek/Kconfig
··· 556 556 help 557 557 This driver supports MediaTek MT8192 mmsys clocks. 558 558 559 + config COMMON_CLK_MT8192_MSDC 560 + bool "Clock driver for MediaTek MT8192 msdc" 561 + depends on COMMON_CLK_MT8192 562 + help 563 + This driver supports MediaTek MT8192 msdc and msdc_top clocks. 564 + 559 565 config COMMON_CLK_MT8516 560 566 bool "Clock driver for MediaTek MT8516" 561 567 depends on ARCH_MEDIATEK || COMPILE_TEST
+1
drivers/clk/mediatek/Makefile
··· 76 76 obj-$(CONFIG_COMMON_CLK_MT8192_MDPSYS) += clk-mt8192-mdp.o 77 77 obj-$(CONFIG_COMMON_CLK_MT8192_MFGCFG) += clk-mt8192-mfg.o 78 78 obj-$(CONFIG_COMMON_CLK_MT8192_MMSYS) += clk-mt8192-mm.o 79 + obj-$(CONFIG_COMMON_CLK_MT8192_MSDC) += clk-mt8192-msdc.o 79 80 obj-$(CONFIG_COMMON_CLK_MT8516) += clk-mt8516.o 80 81 obj-$(CONFIG_COMMON_CLK_MT8516_AUDSYS) += clk-mt8516-aud.o
+85
drivers/clk/mediatek/clk-mt8192-msdc.c
··· 1 + // SPDX-License-Identifier: GPL-2.0-only 2 + // 3 + // Copyright (c) 2021 MediaTek Inc. 4 + // Author: Chun-Jie Chen <chun-jie.chen@mediatek.com> 5 + 6 + #include <linux/clk-provider.h> 7 + #include <linux/of_device.h> 8 + #include <linux/platform_device.h> 9 + 10 + #include "clk-mtk.h" 11 + #include "clk-gate.h" 12 + 13 + #include <dt-bindings/clock/mt8192-clk.h> 14 + 15 + static const struct mtk_gate_regs msdc_cg_regs = { 16 + .set_ofs = 0xb4, 17 + .clr_ofs = 0xb4, 18 + .sta_ofs = 0xb4, 19 + }; 20 + 21 + static const struct mtk_gate_regs msdc_top_cg_regs = { 22 + .set_ofs = 0x0, 23 + .clr_ofs = 0x0, 24 + .sta_ofs = 0x0, 25 + }; 26 + 27 + #define GATE_MSDC(_id, _name, _parent, _shift) \ 28 + GATE_MTK(_id, _name, _parent, &msdc_cg_regs, _shift, &mtk_clk_gate_ops_no_setclr_inv) 29 + 30 + #define GATE_MSDC_TOP(_id, _name, _parent, _shift) \ 31 + GATE_MTK(_id, _name, _parent, &msdc_top_cg_regs, _shift, &mtk_clk_gate_ops_no_setclr_inv) 32 + 33 + static const struct mtk_gate msdc_clks[] = { 34 + GATE_MSDC(CLK_MSDC_AXI_WRAP, "msdc_axi_wrap", "axi_sel", 22), 35 + }; 36 + 37 + static const struct mtk_gate msdc_top_clks[] = { 38 + GATE_MSDC_TOP(CLK_MSDC_TOP_AES_0P, "msdc_top_aes_0p", "aes_msdcfde_sel", 0), 39 + GATE_MSDC_TOP(CLK_MSDC_TOP_SRC_0P, "msdc_top_src_0p", "infra_msdc0_src", 1), 40 + GATE_MSDC_TOP(CLK_MSDC_TOP_SRC_1P, "msdc_top_src_1p", "infra_msdc1_src", 2), 41 + GATE_MSDC_TOP(CLK_MSDC_TOP_SRC_2P, "msdc_top_src_2p", "infra_msdc2_src", 3), 42 + GATE_MSDC_TOP(CLK_MSDC_TOP_P_MSDC0, "msdc_top_p_msdc0", "axi_sel", 4), 43 + GATE_MSDC_TOP(CLK_MSDC_TOP_P_MSDC1, "msdc_top_p_msdc1", "axi_sel", 5), 44 + GATE_MSDC_TOP(CLK_MSDC_TOP_P_MSDC2, "msdc_top_p_msdc2", "axi_sel", 6), 45 + GATE_MSDC_TOP(CLK_MSDC_TOP_P_CFG, "msdc_top_p_cfg", "axi_sel", 7), 46 + GATE_MSDC_TOP(CLK_MSDC_TOP_AXI, "msdc_top_axi", "axi_sel", 8), 47 + GATE_MSDC_TOP(CLK_MSDC_TOP_H_MST_0P, "msdc_top_h_mst_0p", "infra_msdc0", 9), 48 + GATE_MSDC_TOP(CLK_MSDC_TOP_H_MST_1P, "msdc_top_h_mst_1p", "infra_msdc1", 10), 49 + GATE_MSDC_TOP(CLK_MSDC_TOP_H_MST_2P, "msdc_top_h_mst_2p", "infra_msdc2", 11), 50 + GATE_MSDC_TOP(CLK_MSDC_TOP_MEM_OFF_DLY_26M, "msdc_top_mem_off_dly_26m", "clk26m", 12), 51 + GATE_MSDC_TOP(CLK_MSDC_TOP_32K, "msdc_top_32k", "clk32k", 13), 52 + GATE_MSDC_TOP(CLK_MSDC_TOP_AHB2AXI_BRG_AXI, "msdc_top_ahb2axi_brg_axi", "axi_sel", 14), 53 + }; 54 + 55 + static const struct mtk_clk_desc msdc_desc = { 56 + .clks = msdc_clks, 57 + .num_clks = ARRAY_SIZE(msdc_clks), 58 + }; 59 + 60 + static const struct mtk_clk_desc msdc_top_desc = { 61 + .clks = msdc_top_clks, 62 + .num_clks = ARRAY_SIZE(msdc_top_clks), 63 + }; 64 + 65 + static const struct of_device_id of_match_clk_mt8192_msdc[] = { 66 + { 67 + .compatible = "mediatek,mt8192-msdc", 68 + .data = &msdc_desc, 69 + }, { 70 + .compatible = "mediatek,mt8192-msdc_top", 71 + .data = &msdc_top_desc, 72 + }, { 73 + /* sentinel */ 74 + } 75 + }; 76 + 77 + static struct platform_driver clk_mt8192_msdc_drv = { 78 + .probe = mtk_clk_simple_probe, 79 + .driver = { 80 + .name = "clk-mt8192-msdc", 81 + .of_match_table = of_match_clk_mt8192_msdc, 82 + }, 83 + }; 84 + 85 + builtin_platform_driver(clk_mt8192_msdc_drv);