166cd0b4bSChun-Jie Chen // SPDX-License-Identifier: GPL-2.0-only
266cd0b4bSChun-Jie Chen //
366cd0b4bSChun-Jie Chen // Copyright (c) 2022 MediaTek Inc.
466cd0b4bSChun-Jie Chen // Author: Chun-Jie Chen <chun-jie.chen@mediatek.com>
566cd0b4bSChun-Jie Chen 
666cd0b4bSChun-Jie Chen #include <linux/clk-provider.h>
766cd0b4bSChun-Jie Chen #include <linux/platform_device.h>
866cd0b4bSChun-Jie Chen #include <dt-bindings/clock/mt8186-clk.h>
966cd0b4bSChun-Jie Chen 
1066cd0b4bSChun-Jie Chen #include "clk-gate.h"
1166cd0b4bSChun-Jie Chen #include "clk-mtk.h"
1266cd0b4bSChun-Jie Chen 
1366cd0b4bSChun-Jie Chen static const struct mtk_gate_regs imp_iic_wrap_cg_regs = {
1466cd0b4bSChun-Jie Chen 	.set_ofs = 0xe08,
1566cd0b4bSChun-Jie Chen 	.clr_ofs = 0xe04,
1666cd0b4bSChun-Jie Chen 	.sta_ofs = 0xe00,
1766cd0b4bSChun-Jie Chen };
1866cd0b4bSChun-Jie Chen 
1966cd0b4bSChun-Jie Chen #define GATE_IMP_IIC_WRAP(_id, _name, _parent, _shift)			\
2066cd0b4bSChun-Jie Chen 	GATE_MTK(_id, _name, _parent, &imp_iic_wrap_cg_regs, _shift, &mtk_clk_gate_ops_setclr)
2166cd0b4bSChun-Jie Chen 
2266cd0b4bSChun-Jie Chen static const struct mtk_gate imp_iic_wrap_clks[] = {
2366cd0b4bSChun-Jie Chen 	GATE_IMP_IIC_WRAP(CLK_IMP_IIC_WRAP_AP_CLOCK_I2C0,
2466cd0b4bSChun-Jie Chen 		"imp_iic_wrap_ap_clock_i2c0", "infra_ao_i2c_ap", 0),
2566cd0b4bSChun-Jie Chen 	GATE_IMP_IIC_WRAP(CLK_IMP_IIC_WRAP_AP_CLOCK_I2C1,
2666cd0b4bSChun-Jie Chen 		"imp_iic_wrap_ap_clock_i2c1", "infra_ao_i2c_ap", 1),
2766cd0b4bSChun-Jie Chen 	GATE_IMP_IIC_WRAP(CLK_IMP_IIC_WRAP_AP_CLOCK_I2C2,
2866cd0b4bSChun-Jie Chen 		"imp_iic_wrap_ap_clock_i2c2", "infra_ao_i2c_ap", 2),
2966cd0b4bSChun-Jie Chen 	GATE_IMP_IIC_WRAP(CLK_IMP_IIC_WRAP_AP_CLOCK_I2C3,
3066cd0b4bSChun-Jie Chen 		"imp_iic_wrap_ap_clock_i2c3", "infra_ao_i2c_ap", 3),
3166cd0b4bSChun-Jie Chen 	GATE_IMP_IIC_WRAP(CLK_IMP_IIC_WRAP_AP_CLOCK_I2C4,
3266cd0b4bSChun-Jie Chen 		"imp_iic_wrap_ap_clock_i2c4", "infra_ao_i2c_ap", 4),
3366cd0b4bSChun-Jie Chen 	GATE_IMP_IIC_WRAP(CLK_IMP_IIC_WRAP_AP_CLOCK_I2C5,
3466cd0b4bSChun-Jie Chen 		"imp_iic_wrap_ap_clock_i2c5", "infra_ao_i2c_ap", 5),
3566cd0b4bSChun-Jie Chen 	GATE_IMP_IIC_WRAP(CLK_IMP_IIC_WRAP_AP_CLOCK_I2C6,
3666cd0b4bSChun-Jie Chen 		"imp_iic_wrap_ap_clock_i2c6", "infra_ao_i2c_ap", 6),
3766cd0b4bSChun-Jie Chen 	GATE_IMP_IIC_WRAP(CLK_IMP_IIC_WRAP_AP_CLOCK_I2C7,
3866cd0b4bSChun-Jie Chen 		"imp_iic_wrap_ap_clock_i2c7", "infra_ao_i2c_ap", 7),
3966cd0b4bSChun-Jie Chen 	GATE_IMP_IIC_WRAP(CLK_IMP_IIC_WRAP_AP_CLOCK_I2C8,
4066cd0b4bSChun-Jie Chen 		"imp_iic_wrap_ap_clock_i2c8", "infra_ao_i2c_ap", 8),
4166cd0b4bSChun-Jie Chen 	GATE_IMP_IIC_WRAP(CLK_IMP_IIC_WRAP_AP_CLOCK_I2C9,
4266cd0b4bSChun-Jie Chen 		"imp_iic_wrap_ap_clock_i2c9", "infra_ao_i2c_ap", 9),
4366cd0b4bSChun-Jie Chen };
4466cd0b4bSChun-Jie Chen 
4566cd0b4bSChun-Jie Chen static const struct mtk_clk_desc imp_iic_wrap_desc = {
4666cd0b4bSChun-Jie Chen 	.clks = imp_iic_wrap_clks,
4766cd0b4bSChun-Jie Chen 	.num_clks = ARRAY_SIZE(imp_iic_wrap_clks),
4866cd0b4bSChun-Jie Chen };
4966cd0b4bSChun-Jie Chen 
5066cd0b4bSChun-Jie Chen static const struct of_device_id of_match_clk_mt8186_imp_iic_wrap[] = {
5166cd0b4bSChun-Jie Chen 	{
5266cd0b4bSChun-Jie Chen 		.compatible = "mediatek,mt8186-imp_iic_wrap",
5366cd0b4bSChun-Jie Chen 		.data = &imp_iic_wrap_desc,
5466cd0b4bSChun-Jie Chen 	}, {
5566cd0b4bSChun-Jie Chen 		/* sentinel */
5666cd0b4bSChun-Jie Chen 	}
5766cd0b4bSChun-Jie Chen };
5865c9ad77SAngeloGioacchino Del Regno MODULE_DEVICE_TABLE(of, of_match_clk_mt8186_imp_iic_wrap);
5966cd0b4bSChun-Jie Chen 
6066cd0b4bSChun-Jie Chen static struct platform_driver clk_mt8186_imp_iic_wrap_drv = {
6166cd0b4bSChun-Jie Chen 	.probe = mtk_clk_simple_probe,
62*61ca6ee7SUwe Kleine-König 	.remove_new = mtk_clk_simple_remove,
6366cd0b4bSChun-Jie Chen 	.driver = {
6466cd0b4bSChun-Jie Chen 		.name = "clk-mt8186-imp_iic_wrap",
6566cd0b4bSChun-Jie Chen 		.of_match_table = of_match_clk_mt8186_imp_iic_wrap,
6666cd0b4bSChun-Jie Chen 	},
6766cd0b4bSChun-Jie Chen };
68164d240dSAngeloGioacchino Del Regno module_platform_driver(clk_mt8186_imp_iic_wrap_drv);
69a451da86SAngeloGioacchino Del Regno MODULE_LICENSE("GPL");
70