184865Sobrien// SPDX-License-Identifier: GPL-2.0
2130561Sobrien/*
384865Sobrien * Copyright (c) 2020 MediaTek Inc.
484865Sobrien * Copyright (c) 2020 BayLibre, SAS
584865Sobrien * Author: James Liao <jamesjj.liao@mediatek.com>
684865Sobrien *         Fabien Parent <fparent@baylibre.com>
784865Sobrien */
884865Sobrien
984865Sobrien#include <linux/clk-provider.h>
1084865Sobrien#include <linux/mod_devicetable.h>
1184865Sobrien#include <linux/platform_device.h>
1284865Sobrien
1384865Sobrien#include "clk-mtk.h"
1484865Sobrien#include "clk-gate.h"
1584865Sobrien
1684865Sobrien#include <dt-bindings/clock/mt8167-clk.h>
1784865Sobrien
1884865Sobrienstatic const struct mtk_gate_regs img_cg_regs = {
19218822Sdim	.set_ofs = 0x4,
20218822Sdim	.clr_ofs = 0x8,
2184865Sobrien	.sta_ofs = 0x0,
2284865Sobrien};
2384865Sobrien
24130561Sobrien#define GATE_IMG(_id, _name, _parent, _shift)			\
2584865Sobrien	GATE_MTK(_id, _name, _parent, &img_cg_regs, _shift, &mtk_clk_gate_ops_setclr)
2684865Sobrien
2784865Sobrienstatic const struct mtk_gate img_clks[] = {
28130561Sobrien	GATE_IMG(CLK_IMG_LARB1_SMI, "img_larb1_smi", "smi_mm", 0),
2984865Sobrien	GATE_IMG(CLK_IMG_CAM_SMI, "img_cam_smi", "smi_mm", 5),
3084865Sobrien	GATE_IMG(CLK_IMG_CAM_CAM, "img_cam_cam", "smi_mm", 6),
3184865Sobrien	GATE_IMG(CLK_IMG_SEN_TG, "img_sen_tg", "cam_mm", 7),
3284865Sobrien	GATE_IMG(CLK_IMG_SEN_CAM, "img_sen_cam", "smi_mm", 8),
3384865Sobrien	GATE_IMG(CLK_IMG_VENC, "img_venc", "smi_mm", 9),
3484865Sobrien};
3584865Sobrien
3684865Sobrienstatic const struct mtk_clk_desc img_desc = {
37130561Sobrien	.clks = img_clks,
3884865Sobrien	.num_clks = ARRAY_SIZE(img_clks),
3984865Sobrien};
4084865Sobrien
4184865Sobrienstatic const struct of_device_id of_match_clk_mt8167_imgsys[] = {
4284865Sobrien	{ .compatible = "mediatek,mt8167-imgsys", .data = &img_desc },
4384865Sobrien	{ /* sentinel */ }
4484865Sobrien};
4584865SobrienMODULE_DEVICE_TABLE(of, of_match_clk_mt8167_imgsys);
4684865Sobrien
47130561Sobrienstatic struct platform_driver clk_mt8167_imgsys_drv = {
4884865Sobrien	.probe = mtk_clk_simple_probe,
4984865Sobrien	.remove_new = mtk_clk_simple_remove,
5084865Sobrien	.driver = {
51130561Sobrien		.name = "clk-mt8167-imgsys",
52130561Sobrien		.of_match_table = of_match_clk_mt8167_imgsys,
5384865Sobrien	},
5484865Sobrien};
5584865Sobrienmodule_platform_driver(clk_mt8167_imgsys_drv);
5684865SobrienMODULE_LICENSE("GPL");
5784865Sobrien