xref: /linux/drivers/clk/mediatek/clk-mt8173-vencsys.c (revision 3a39d672e7f48b8d6b91a09afa4b55352773b4b5)
14c02c9afSAngeloGioacchino Del Regno // SPDX-License-Identifier: GPL-2.0-only
24c02c9afSAngeloGioacchino Del Regno /*
34c02c9afSAngeloGioacchino Del Regno  * Copyright (c) 2014 MediaTek Inc.
44c02c9afSAngeloGioacchino Del Regno  * Copyright (c) 2022 Collabora Ltd.
54c02c9afSAngeloGioacchino Del Regno  * Author: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
64c02c9afSAngeloGioacchino Del Regno  */
74c02c9afSAngeloGioacchino Del Regno 
84c02c9afSAngeloGioacchino Del Regno #include <dt-bindings/clock/mt8173-clk.h>
94c02c9afSAngeloGioacchino Del Regno #include <linux/module.h>
104c02c9afSAngeloGioacchino Del Regno #include <linux/platform_device.h>
114c02c9afSAngeloGioacchino Del Regno #include "clk-gate.h"
124c02c9afSAngeloGioacchino Del Regno #include "clk-mtk.h"
134c02c9afSAngeloGioacchino Del Regno 
144c02c9afSAngeloGioacchino Del Regno static const struct mtk_gate_regs venc_cg_regs = {
154c02c9afSAngeloGioacchino Del Regno 	.set_ofs = 0x4,
164c02c9afSAngeloGioacchino Del Regno 	.clr_ofs = 0x8,
174c02c9afSAngeloGioacchino Del Regno 	.sta_ofs = 0x0,
184c02c9afSAngeloGioacchino Del Regno };
194c02c9afSAngeloGioacchino Del Regno 
204c02c9afSAngeloGioacchino Del Regno #define GATE_VENC(_id, _name, _parent, _shift)			\
214c02c9afSAngeloGioacchino Del Regno 	GATE_MTK(_id, _name, _parent, &venc_cg_regs, _shift, &mtk_clk_gate_ops_setclr_inv)
224c02c9afSAngeloGioacchino Del Regno 
234c02c9afSAngeloGioacchino Del Regno static const struct mtk_gate venc_clks[] = {
244c02c9afSAngeloGioacchino Del Regno 	GATE_DUMMY(CLK_DUMMY, "venc_dummy"),
254c02c9afSAngeloGioacchino Del Regno 	GATE_VENC(CLK_VENC_CKE0, "venc_cke0", "mm_sel", 0),
264c02c9afSAngeloGioacchino Del Regno 	GATE_VENC(CLK_VENC_CKE1, "venc_cke1", "venc_sel", 4),
274c02c9afSAngeloGioacchino Del Regno 	GATE_VENC(CLK_VENC_CKE2, "venc_cke2", "venc_sel", 8),
284c02c9afSAngeloGioacchino Del Regno 	GATE_VENC(CLK_VENC_CKE3, "venc_cke3", "venc_sel", 12),
294c02c9afSAngeloGioacchino Del Regno };
304c02c9afSAngeloGioacchino Del Regno 
314c02c9afSAngeloGioacchino Del Regno static const struct mtk_gate venclt_clks[] = {
324c02c9afSAngeloGioacchino Del Regno 	GATE_DUMMY(CLK_DUMMY, "venclt_dummy"),
334c02c9afSAngeloGioacchino Del Regno 	GATE_VENC(CLK_VENCLT_CKE0, "venclt_cke0", "mm_sel", 0),
344c02c9afSAngeloGioacchino Del Regno 	GATE_VENC(CLK_VENCLT_CKE1, "venclt_cke1", "venclt_sel", 4),
354c02c9afSAngeloGioacchino Del Regno };
364c02c9afSAngeloGioacchino Del Regno 
374c02c9afSAngeloGioacchino Del Regno static const struct mtk_clk_desc venc_desc = {
384c02c9afSAngeloGioacchino Del Regno 	.clks = venc_clks,
394c02c9afSAngeloGioacchino Del Regno 	.num_clks = ARRAY_SIZE(venc_clks),
404c02c9afSAngeloGioacchino Del Regno };
414c02c9afSAngeloGioacchino Del Regno 
424c02c9afSAngeloGioacchino Del Regno static const struct mtk_clk_desc venc_lt_desc = {
434c02c9afSAngeloGioacchino Del Regno 	.clks = venclt_clks,
444c02c9afSAngeloGioacchino Del Regno 	.num_clks = ARRAY_SIZE(venclt_clks),
454c02c9afSAngeloGioacchino Del Regno };
464c02c9afSAngeloGioacchino Del Regno 
474c02c9afSAngeloGioacchino Del Regno static const struct of_device_id of_match_clk_mt8173_vencsys[] = {
484c02c9afSAngeloGioacchino Del Regno 	{ .compatible = "mediatek,mt8173-vencsys", .data = &venc_desc },
494c02c9afSAngeloGioacchino Del Regno 	{ .compatible = "mediatek,mt8173-vencltsys", .data = &venc_lt_desc },
504c02c9afSAngeloGioacchino Del Regno 	{ /* sentinel */ }
514c02c9afSAngeloGioacchino Del Regno };
5265c9ad77SAngeloGioacchino Del Regno MODULE_DEVICE_TABLE(of, of_match_clk_mt8173_vencsys);
534c02c9afSAngeloGioacchino Del Regno 
544c02c9afSAngeloGioacchino Del Regno static struct platform_driver clk_mt8173_vencsys_drv = {
554c02c9afSAngeloGioacchino Del Regno 	.driver = {
564c02c9afSAngeloGioacchino Del Regno 		.name = "clk-mt8173-vencsys",
574c02c9afSAngeloGioacchino Del Regno 		.of_match_table = of_match_clk_mt8173_vencsys,
584c02c9afSAngeloGioacchino Del Regno 	},
594c02c9afSAngeloGioacchino Del Regno 	.probe = mtk_clk_simple_probe,
60*f00b45dbSUwe Kleine-König 	.remove = mtk_clk_simple_remove,
614c02c9afSAngeloGioacchino Del Regno };
624c02c9afSAngeloGioacchino Del Regno module_platform_driver(clk_mt8173_vencsys_drv);
634c02c9afSAngeloGioacchino Del Regno 
644c02c9afSAngeloGioacchino Del Regno MODULE_DESCRIPTION("MediaTek MT8173 vencsys clocks driver");
654c02c9afSAngeloGioacchino Del Regno MODULE_LICENSE("GPL");
66