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