brintos

brintos / linux-shallow public Read only

0
0
Text · 2.8 KiB · 011d329 Raw
114 lines · c
1// SPDX-License-Identifier: GPL-2.02//3// Copyright (c) 2018 MediaTek Inc.4// Author: Weiyi Lu <weiyi.lu@mediatek.com>5 6#include <linux/clk-provider.h>7#include <linux/of_platform.h>8#include <linux/platform_device.h>9 10#include "clk-mtk.h"11#include "clk-gate.h"12 13#include <dt-bindings/clock/mt8183-clk.h>14 15static const struct mtk_gate_regs audio0_cg_regs = {16	.set_ofs = 0x0,17	.clr_ofs = 0x0,18	.sta_ofs = 0x0,19};20 21static const struct mtk_gate_regs audio1_cg_regs = {22	.set_ofs = 0x4,23	.clr_ofs = 0x4,24	.sta_ofs = 0x4,25};26 27#define GATE_AUDIO0(_id, _name, _parent, _shift)		\28	GATE_MTK(_id, _name, _parent, &audio0_cg_regs, _shift,	\29		&mtk_clk_gate_ops_no_setclr)30 31#define GATE_AUDIO1(_id, _name, _parent, _shift)		\32	GATE_MTK(_id, _name, _parent, &audio1_cg_regs, _shift,	\33		&mtk_clk_gate_ops_no_setclr)34 35static const struct mtk_gate audio_clks[] = {36	/* AUDIO0 */37	GATE_AUDIO0(CLK_AUDIO_AFE, "aud_afe", "audio_sel",38		2),39	GATE_AUDIO0(CLK_AUDIO_22M, "aud_22m", "aud_eng1_sel",40		8),41	GATE_AUDIO0(CLK_AUDIO_24M, "aud_24m", "aud_eng2_sel",42		9),43	GATE_AUDIO0(CLK_AUDIO_APLL2_TUNER, "aud_apll2_tuner", "aud_eng2_sel",44		18),45	GATE_AUDIO0(CLK_AUDIO_APLL_TUNER, "aud_apll_tuner", "aud_eng1_sel",46		19),47	GATE_AUDIO0(CLK_AUDIO_TDM, "aud_tdm", "apll12_divb",48		20),49	GATE_AUDIO0(CLK_AUDIO_ADC, "aud_adc", "audio_sel",50		24),51	GATE_AUDIO0(CLK_AUDIO_DAC, "aud_dac", "audio_sel",52		25),53	GATE_AUDIO0(CLK_AUDIO_DAC_PREDIS, "aud_dac_predis", "audio_sel",54		26),55	GATE_AUDIO0(CLK_AUDIO_TML, "aud_tml", "audio_sel",56		27),57	/* AUDIO1 */58	GATE_AUDIO1(CLK_AUDIO_I2S1, "aud_i2s1", "audio_sel",59		4),60	GATE_AUDIO1(CLK_AUDIO_I2S2, "aud_i2s2", "audio_sel",61		5),62	GATE_AUDIO1(CLK_AUDIO_I2S3, "aud_i2s3", "audio_sel",63		6),64	GATE_AUDIO1(CLK_AUDIO_I2S4, "aud_i2s4", "audio_sel",65		7),66	GATE_AUDIO1(CLK_AUDIO_PDN_ADDA6_ADC, "aud_pdn_adda6_adc", "audio_sel",67		20),68};69 70static const struct mtk_clk_desc audio_desc = {71	.clks = audio_clks,72	.num_clks = ARRAY_SIZE(audio_clks),73};74 75static int clk_mt8183_audio_probe(struct platform_device *pdev)76{77	int r;78 79	r = mtk_clk_simple_probe(pdev);80	if (r)81		return r;82 83	r = devm_of_platform_populate(&pdev->dev);84	if (r)85		mtk_clk_simple_remove(pdev);86 87	return r;88}89 90static void clk_mt8183_audio_remove(struct platform_device *pdev)91{92	of_platform_depopulate(&pdev->dev);93	mtk_clk_simple_remove(pdev);94}95 96static const struct of_device_id of_match_clk_mt8183_audio[] = {97	{ .compatible = "mediatek,mt8183-audiosys", .data = &audio_desc },98	{ /* sentinel */ }99};100MODULE_DEVICE_TABLE(of, of_match_clk_mt8183_audio);101 102static struct platform_driver clk_mt8183_audio_drv = {103	.probe = clk_mt8183_audio_probe,104	.remove = clk_mt8183_audio_remove,105	.driver = {106		.name = "clk-mt8183-audio",107		.of_match_table = of_match_clk_mt8183_audio,108	},109};110module_platform_driver(clk_mt8183_audio_drv);111 112MODULE_DESCRIPTION("MediaTek MT8183 audio clocks driver");113MODULE_LICENSE("GPL");114