brintos

brintos / linux-shallow public Read only

0
0
Text · 2.7 KiB · 15cec97 Raw
87 lines · c
1/* SPDX-License-Identifier: GPL-2.0 */2//3// Spreadtrum composite clock driver4//5// Copyright (C) 2017 Spreadtrum, Inc.6// Author: Chunyan Zhang <chunyan.zhang@spreadtrum.com>7 8#ifndef _SPRD_COMPOSITE_H_9#define _SPRD_COMPOSITE_H_10 11#include "common.h"12#include "mux.h"13#include "div.h"14 15struct sprd_comp {16	struct sprd_mux_ssel	mux;17	struct sprd_div_internal	div;18	struct sprd_clk_common	common;19};20 21#define SPRD_COMP_CLK_HW_INIT_FN(_struct, _name, _parent, _reg, _table,	\22				 _mshift, _mwidth, _doffset, _dshift,	\23				 _dwidth, _flags, _fn)			\24	struct sprd_comp _struct = {					\25		.mux	= _SPRD_MUX_CLK(_mshift, _mwidth, _table),	\26		.div	= _SPRD_DIV_CLK(_doffset, _dshift, _dwidth),	\27		.common = {						\28			.regmap		= NULL,				\29			.reg		= _reg,				\30			.hw.init = _fn(_name, _parent,			\31				       &sprd_comp_ops, _flags),		\32		}							\33	}34 35#define SPRD_COMP_CLK_TABLE(_struct, _name, _parent, _reg, _table,	\36			    _mshift, _mwidth, _dshift, _dwidth, _flags)	\37	SPRD_COMP_CLK_HW_INIT_FN(_struct, _name, _parent, _reg, _table,	\38				 _mshift, _mwidth, 0x0, _dshift,	\39				 _dwidth, _flags, CLK_HW_INIT_PARENTS)40 41#define SPRD_COMP_CLK(_struct, _name, _parent, _reg, _mshift,		\42		      _mwidth, _dshift, _dwidth, _flags)		\43	SPRD_COMP_CLK_TABLE(_struct, _name, _parent, _reg, NULL,	\44			    _mshift, _mwidth, _dshift, _dwidth, _flags)45 46#define SPRD_COMP_CLK_DATA_TABLE(_struct, _name, _parent, _reg, _table,	\47				 _mshift, _mwidth, _dshift,		\48				 _dwidth, _flags)			\49	SPRD_COMP_CLK_HW_INIT_FN(_struct, _name, _parent, _reg, _table,	\50				 _mshift, _mwidth, 0x0, _dshift,	\51				 _dwidth, _flags,			\52				 CLK_HW_INIT_PARENTS_DATA)53 54#define SPRD_COMP_CLK_DATA(_struct, _name, _parent, _reg, _mshift,	\55			   _mwidth, _dshift, _dwidth, _flags)		\56	SPRD_COMP_CLK_DATA_TABLE(_struct, _name, _parent, _reg, NULL,	\57				 _mshift, _mwidth, _dshift, _dwidth,	\58				 _flags)59 60#define SPRD_COMP_CLK_DATA_TABLE_OFFSET(_struct, _name, _parent, _reg,	\61					_table, _mshift, _mwidth,	\62					_doffset, _dshift, _dwidth,	\63					_flags)				\64	SPRD_COMP_CLK_HW_INIT_FN(_struct, _name, _parent, _reg, _table,	\65				 _mshift, _mwidth, _doffset, _dshift,	\66				 _dwidth, _flags,			\67				 CLK_HW_INIT_PARENTS_DATA)68 69#define SPRD_COMP_CLK_DATA_OFFSET(_struct, _name, _parent, _reg,	\70				  _mshift, _mwidth, _doffset, _dshift,	\71				  _dwidth, _flags)			\72	SPRD_COMP_CLK_DATA_TABLE_OFFSET(_struct, _name, _parent, _reg,	\73					NULL, _mshift, _mwidth,		\74					_doffset, _dshift, _dwidth,	\75					_flags)76 77static inline struct sprd_comp *hw_to_sprd_comp(const struct clk_hw *hw)78{79	struct sprd_clk_common *common = hw_to_sprd_clk_common(hw);80 81	return container_of(common, struct sprd_comp, common);82}83 84extern const struct clk_ops sprd_comp_ops;85 86#endif /* _SPRD_COMPOSITE_H_ */87