154095Ssemenu// SPDX-License-Identifier: GPL-2.0
247060Ssemenu/*
343552Ssemenu * Copyright (c) 2018 MediaTek Inc.
443552Ssemenu * Author: Owen Chen <owen.chen@mediatek.com>
543552Ssemenu */
643552Ssemenu
743552Ssemenu#include <linux/clk-provider.h>
843552Ssemenu#include <linux/platform_device.h>
943552Ssemenu
1043552Ssemenu#include "clk-mtk.h"
1143552Ssemenu#include "clk-gate.h"
1243552Ssemenu
1343552Ssemenu#include <dt-bindings/clock/mt6765-clk.h>
1443552Ssemenu
1543552Ssemenustatic const struct mtk_gate_regs audio0_cg_regs = {
1643552Ssemenu	.set_ofs = 0x0,
1743552Ssemenu	.clr_ofs = 0x0,
1843552Ssemenu	.sta_ofs = 0x0,
1943552Ssemenu};
2043552Ssemenu
2143552Ssemenustatic const struct mtk_gate_regs audio1_cg_regs = {
2243552Ssemenu	.set_ofs = 0x4,
2343552Ssemenu	.clr_ofs = 0x4,
2443552Ssemenu	.sta_ofs = 0x4,
2543552Ssemenu};
2643552Ssemenu
2743552Ssemenu#define GATE_AUDIO0(_id, _name, _parent, _shift)		\
2850477Speter	GATE_MTK(_id, _name, _parent, &audio0_cg_regs, _shift, &mtk_clk_gate_ops_no_setclr)
2943552Ssemenu
3043552Ssemenu#define GATE_AUDIO1(_id, _name, _parent, _shift)		\
3143552Ssemenu	GATE_MTK(_id, _name, _parent, &audio1_cg_regs, _shift, &mtk_clk_gate_ops_no_setclr)
3254095Ssemenu
3354095Ssemenustatic const struct mtk_gate audio_clks[] = {
3454095Ssemenu	/* AUDIO0 */
3543552Ssemenu	GATE_AUDIO0(CLK_AUDIO_AFE, "aud_afe", "audio_ck", 2),
3643552Ssemenu	GATE_AUDIO0(CLK_AUDIO_22M, "aud_22m", "aud_engen1_ck", 8),
3743552Ssemenu	GATE_AUDIO0(CLK_AUDIO_APLL_TUNER, "aud_apll_tuner",
3843552Ssemenu		    "aud_engen1_ck", 19),
3943552Ssemenu	GATE_AUDIO0(CLK_AUDIO_ADC, "aud_adc", "audio_ck", 24),
4043552Ssemenu	GATE_AUDIO0(CLK_AUDIO_DAC, "aud_dac", "audio_ck", 25),
4143552Ssemenu	GATE_AUDIO0(CLK_AUDIO_DAC_PREDIS, "aud_dac_predis",
4243552Ssemenu		    "audio_ck", 26),
4343552Ssemenu	GATE_AUDIO0(CLK_AUDIO_TML, "aud_tml", "audio_ck", 27),
4443552Ssemenu	/* AUDIO1 */
4543552Ssemenu	GATE_AUDIO1(CLK_AUDIO_I2S1_BCLK, "aud_i2s1_bclk",
4643552Ssemenu		    "audio_ck", 4),
4743552Ssemenu	GATE_AUDIO1(CLK_AUDIO_I2S2_BCLK, "aud_i2s2_bclk",
4843552Ssemenu		    "audio_ck", 5),
4943552Ssemenu	GATE_AUDIO1(CLK_AUDIO_I2S3_BCLK, "aud_i2s3_bclk",
5043552Ssemenu		    "audio_ck", 6),
5143552Ssemenu	GATE_AUDIO1(CLK_AUDIO_I2S4_BCLK, "aud_i2s4_bclk",
5243552Ssemenu		    "audio_ck", 7),
5343552Ssemenu};
5443552Ssemenu
5543552Ssemenustatic const struct mtk_clk_desc audio_desc = {
5643552Ssemenu	.clks = audio_clks,
5743552Ssemenu	.num_clks = ARRAY_SIZE(audio_clks),
5843552Ssemenu};
5943552Ssemenu
6043552Ssemenustatic const struct of_device_id of_match_clk_mt6765_audio[] = {
6143552Ssemenu	{
6243552Ssemenu		.compatible = "mediatek,mt6765-audsys",
6343552Ssemenu		.data = &audio_desc,
6443552Ssemenu	}, {
6543552Ssemenu		/* sentinel */
6643552Ssemenu	}
6743552Ssemenu};
6843552SsemenuMODULE_DEVICE_TABLE(of, of_match_clk_mt6765_audio);
6943552Ssemenu
7043552Ssemenustatic struct platform_driver clk_mt6765_audio_drv = {
7143552Ssemenu	.probe = mtk_clk_simple_probe,
7243552Ssemenu	.remove_new = mtk_clk_simple_remove,
7343552Ssemenu	.driver = {
7443552Ssemenu		.name = "clk-mt6765-audio",
7543552Ssemenu		.of_match_table = of_match_clk_mt6765_audio,
7643552Ssemenu	},
7743552Ssemenu};
7843552Ssemenumodule_platform_driver(clk_mt6765_audio_drv);
7943552SsemenuMODULE_LICENSE("GPL");
8043552Ssemenu