18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */ 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci * Copyright (c) 2014 MediaTek Inc. 48c2ecf20Sopenharmony_ci * Author: James Liao <jamesjj.liao@mediatek.com> 58c2ecf20Sopenharmony_ci */ 68c2ecf20Sopenharmony_ci 78c2ecf20Sopenharmony_ci#ifndef __DRV_CLK_GATE_H 88c2ecf20Sopenharmony_ci#define __DRV_CLK_GATE_H 98c2ecf20Sopenharmony_ci 108c2ecf20Sopenharmony_ci#include <linux/regmap.h> 118c2ecf20Sopenharmony_ci#include <linux/clk-provider.h> 128c2ecf20Sopenharmony_ci 138c2ecf20Sopenharmony_cistruct clk; 148c2ecf20Sopenharmony_ci 158c2ecf20Sopenharmony_cistruct mtk_clk_gate { 168c2ecf20Sopenharmony_ci struct clk_hw hw; 178c2ecf20Sopenharmony_ci struct regmap *regmap; 188c2ecf20Sopenharmony_ci int set_ofs; 198c2ecf20Sopenharmony_ci int clr_ofs; 208c2ecf20Sopenharmony_ci int sta_ofs; 218c2ecf20Sopenharmony_ci u8 bit; 228c2ecf20Sopenharmony_ci}; 238c2ecf20Sopenharmony_ci 248c2ecf20Sopenharmony_cistatic inline struct mtk_clk_gate *to_mtk_clk_gate(struct clk_hw *hw) 258c2ecf20Sopenharmony_ci{ 268c2ecf20Sopenharmony_ci return container_of(hw, struct mtk_clk_gate, hw); 278c2ecf20Sopenharmony_ci} 288c2ecf20Sopenharmony_ci 298c2ecf20Sopenharmony_ciextern const struct clk_ops mtk_clk_gate_ops_setclr; 308c2ecf20Sopenharmony_ciextern const struct clk_ops mtk_clk_gate_ops_setclr_inv; 318c2ecf20Sopenharmony_ciextern const struct clk_ops mtk_clk_gate_ops_no_setclr; 328c2ecf20Sopenharmony_ciextern const struct clk_ops mtk_clk_gate_ops_no_setclr_inv; 338c2ecf20Sopenharmony_ci 348c2ecf20Sopenharmony_cistruct clk *mtk_clk_register_gate( 358c2ecf20Sopenharmony_ci const char *name, 368c2ecf20Sopenharmony_ci const char *parent_name, 378c2ecf20Sopenharmony_ci struct regmap *regmap, 388c2ecf20Sopenharmony_ci int set_ofs, 398c2ecf20Sopenharmony_ci int clr_ofs, 408c2ecf20Sopenharmony_ci int sta_ofs, 418c2ecf20Sopenharmony_ci u8 bit, 428c2ecf20Sopenharmony_ci const struct clk_ops *ops, 438c2ecf20Sopenharmony_ci unsigned long flags, 448c2ecf20Sopenharmony_ci struct device *dev); 458c2ecf20Sopenharmony_ci 468c2ecf20Sopenharmony_ci#define GATE_MTK_FLAGS(_id, _name, _parent, _regs, _shift, \ 478c2ecf20Sopenharmony_ci _ops, _flags) { \ 488c2ecf20Sopenharmony_ci .id = _id, \ 498c2ecf20Sopenharmony_ci .name = _name, \ 508c2ecf20Sopenharmony_ci .parent_name = _parent, \ 518c2ecf20Sopenharmony_ci .regs = _regs, \ 528c2ecf20Sopenharmony_ci .shift = _shift, \ 538c2ecf20Sopenharmony_ci .ops = _ops, \ 548c2ecf20Sopenharmony_ci .flags = _flags, \ 558c2ecf20Sopenharmony_ci } 568c2ecf20Sopenharmony_ci 578c2ecf20Sopenharmony_ci#define GATE_MTK(_id, _name, _parent, _regs, _shift, _ops) \ 588c2ecf20Sopenharmony_ci GATE_MTK_FLAGS(_id, _name, _parent, _regs, _shift, _ops, 0) 598c2ecf20Sopenharmony_ci 608c2ecf20Sopenharmony_ci#endif /* __DRV_CLK_GATE_H */ 61