// SPDX-License-Identifier: GPL-2.0 // // Spreadtrum composite clock driver // // Copyright (C) 2017 Spreadtrum, Inc. // Author: Chunyan Zhang #ifndef _SPRD_COMPOSITE_H_ #define _SPRD_COMPOSITE_H_ #include "common.h" #include "mux.h" #include "div.h" struct sprd_comp { struct sprd_mux_ssel mux; struct sprd_div_internal div; struct sprd_clk_common common; }; #define SPRD_COMP_CLK_TABLE(_struct, _name, _parent, _reg, _table, \ _mshift, _mwidth, _dshift, _dwidth, _flags) \ struct sprd_comp _struct = { \ .mux = _SPRD_MUX_CLK(_mshift, _mwidth, _table), \ .div = _SPRD_DIV_CLK(_dshift, _dwidth), \ .common = { \ .regmap = NULL, \ .reg = _reg, \ .hw.init = CLK_HW_INIT_PARENTS(_name, \ _parent, \ &sprd_comp_ops, \ _flags), \ } \ } #define SPRD_COMP_CLK(_struct, _name, _parent, _reg, _mshift, \ _mwidth, _dshift, _dwidth, _flags) \ SPRD_COMP_CLK_TABLE(_struct, _name, _parent, _reg, \ NULL, _mshift, _mwidth, \ _dshift, _dwidth, _flags) static inline struct sprd_comp *hw_to_sprd_comp(const struct clk_hw *hw) { struct sprd_clk_common *common = hw_to_sprd_clk_common(hw); return container_of(common, struct sprd_comp, common); } extern const struct clk_ops sprd_comp_ops; #endif /* _SPRD_COMPOSITE_H_ */