1 | // SPDX-License-Identifier: GPL-2.0-only |
2 | /* |
3 | * Copyright (c) 2022 MediaTek Inc. |
4 | * Author: Garmin Chang <garmin.chang@mediatek.com> |
5 | */ |
6 | |
7 | #include <dt-bindings/clock/mediatek,mt8188-clk.h> |
8 | #include <linux/clk-provider.h> |
9 | #include <linux/platform_device.h> |
10 | |
11 | #include "clk-gate.h" |
12 | #include "clk-mtk.h" |
13 | |
14 | static const struct mtk_gate_regs peri_ao_cg_regs = { |
15 | .set_ofs = 0x10, |
16 | .clr_ofs = 0x14, |
17 | .sta_ofs = 0x18, |
18 | }; |
19 | |
20 | #define GATE_PERI_AO(_id, _name, _parent, _shift) \ |
21 | GATE_MTK(_id, _name, _parent, &peri_ao_cg_regs, _shift, &mtk_clk_gate_ops_setclr) |
22 | |
23 | static const struct mtk_gate peri_ao_clks[] = { |
24 | GATE_PERI_AO(CLK_PERI_AO_ETHERNET, "peri_ao_ethernet" , "top_axi" , 0), |
25 | GATE_PERI_AO(CLK_PERI_AO_ETHERNET_BUS, "peri_ao_ethernet_bus" , "top_axi" , 1), |
26 | GATE_PERI_AO(CLK_PERI_AO_FLASHIF_BUS, "peri_ao_flashif_bus" , "top_axi" , 3), |
27 | GATE_PERI_AO(CLK_PERI_AO_FLASHIF_26M, "peri_ao_flashif_26m" , "clk26m" , 4), |
28 | GATE_PERI_AO(CLK_PERI_AO_FLASHIFLASHCK, "peri_ao_flashiflashck" , "top_spinor" , 5), |
29 | GATE_PERI_AO(CLK_PERI_AO_SSUSB_2P_BUS, "peri_ao_ssusb_2p_bus" , "top_usb_top_2p" , 9), |
30 | GATE_PERI_AO(CLK_PERI_AO_SSUSB_2P_XHCI, "peri_ao_ssusb_2p_xhci" , "top_ssusb_xhci_2p" , 10), |
31 | GATE_PERI_AO(CLK_PERI_AO_SSUSB_3P_BUS, "peri_ao_ssusb_3p_bus" , "top_usb_top_3p" , 11), |
32 | GATE_PERI_AO(CLK_PERI_AO_SSUSB_3P_XHCI, "peri_ao_ssusb_3p_xhci" , "top_ssusb_xhci_3p" , 12), |
33 | GATE_PERI_AO(CLK_PERI_AO_SSUSB_BUS, "peri_ao_ssusb_bus" , "top_usb_top" , 13), |
34 | GATE_PERI_AO(CLK_PERI_AO_SSUSB_XHCI, "peri_ao_ssusb_xhci" , "top_ssusb_xhci" , 14), |
35 | GATE_PERI_AO(CLK_PERI_AO_ETHERNET_MAC, "peri_ao_ethernet_mac_clk" , "top_snps_eth_250m" , 16), |
36 | GATE_PERI_AO(CLK_PERI_AO_PCIE_P0_FMEM, "peri_ao_pcie_p0_fmem" , "hd_466m_fmem_ck" , 24), |
37 | }; |
38 | |
39 | static const struct mtk_clk_desc peri_ao_desc = { |
40 | .clks = peri_ao_clks, |
41 | .num_clks = ARRAY_SIZE(peri_ao_clks), |
42 | }; |
43 | |
44 | static const struct of_device_id of_match_clk_mt8188_peri_ao[] = { |
45 | { .compatible = "mediatek,mt8188-pericfg-ao" , .data = &peri_ao_desc }, |
46 | { /* sentinel */ } |
47 | }; |
48 | MODULE_DEVICE_TABLE(of, of_match_clk_mt8188_peri_ao); |
49 | |
50 | static struct platform_driver clk_mt8188_peri_ao_drv = { |
51 | .probe = mtk_clk_simple_probe, |
52 | .remove_new = mtk_clk_simple_remove, |
53 | .driver = { |
54 | .name = "clk-mt8188-peri_ao" , |
55 | .of_match_table = of_match_clk_mt8188_peri_ao, |
56 | }, |
57 | }; |
58 | module_platform_driver(clk_mt8188_peri_ao_drv); |
59 | MODULE_LICENSE("GPL" ); |
60 | |