brintos

brintos / linux-shallow public Read only

0
0
Text · 3.1 KiB · dc05ce0 Raw
128 lines · c
1/* SPDX-License-Identifier: GPL-2.0-only */2/*3 * Copyright (c) 2016 Maxime Ripard. All rights reserved.4 */5 6#ifndef _CCU_GATE_H_7#define _CCU_GATE_H_8 9#include <linux/clk-provider.h>10 11#include "ccu_common.h"12 13struct ccu_gate {14	u32			enable;15 16	struct ccu_common	common;17};18 19#define SUNXI_CCU_GATE(_struct, _name, _parent, _reg, _gate, _flags)	\20	struct ccu_gate _struct = {					\21		.enable	= _gate,					\22		.common	= {						\23			.reg		= _reg,				\24			.hw.init	= CLK_HW_INIT(_name,		\25						      _parent,		\26						      &ccu_gate_ops,	\27						      _flags),		\28		}							\29	}30 31#define SUNXI_CCU_GATE_HW(_struct, _name, _parent, _reg, _gate, _flags)	\32	struct ccu_gate _struct = {					\33		.enable	= _gate,					\34		.common	= {						\35			.reg		= _reg,				\36			.hw.init	= CLK_HW_INIT_HW(_name,		\37							 _parent,	\38							 &ccu_gate_ops,	\39							 _flags),	\40		}							\41	}42 43#define SUNXI_CCU_GATE_FW(_struct, _name, _parent, _reg, _gate, _flags)	\44	struct ccu_gate _struct = {					\45		.enable	= _gate,					\46		.common	= {						\47			.reg		= _reg,				\48			.hw.init	= CLK_HW_INIT_FW_NAME(_name,	\49							      _parent,	\50							      &ccu_gate_ops, \51							      _flags),	\52		}							\53	}54 55/*56 * The following macros allow the re-use of the data structure57 * holding the parent info.58 */59#define SUNXI_CCU_GATE_HWS(_struct, _name, _parent, _reg, _gate, _flags) \60	struct ccu_gate _struct = {					\61		.enable	= _gate,					\62		.common	= {						\63			.reg		= _reg,				\64			.hw.init	= CLK_HW_INIT_HWS(_name,	\65							  _parent,	\66							  &ccu_gate_ops, \67							  _flags),	\68		}							\69	}70 71#define SUNXI_CCU_GATE_HWS_WITH_PREDIV(_struct, _name, _parent, _reg,	\72				       _gate, _prediv, _flags)		\73	struct ccu_gate _struct = {					\74		.enable	= _gate,					\75		.common	= {						\76			.reg		= _reg,				\77			.prediv		= _prediv,			\78			.features	= CCU_FEATURE_ALL_PREDIV,	\79			.hw.init	= CLK_HW_INIT_HWS(_name,	\80							  _parent,	\81							  &ccu_gate_ops, \82							  _flags),	\83		}							\84	}85 86#define SUNXI_CCU_GATE_DATA(_struct, _name, _data, _reg, _gate, _flags)	\87	struct ccu_gate _struct = {					\88		.enable	= _gate,					\89		.common	= {						\90			.reg		= _reg,				\91			.hw.init	=				\92				CLK_HW_INIT_PARENTS_DATA(_name,		\93							 _data,		\94							 &ccu_gate_ops,	\95							 _flags),	\96		}							\97	}98 99#define SUNXI_CCU_GATE_DATA_WITH_PREDIV(_struct, _name, _parent, _reg,	\100					_gate, _prediv, _flags)		\101	struct ccu_gate _struct = {					\102		.enable	= _gate,					\103		.common	= {						\104			.reg		= _reg,				\105			.prediv		= _prediv,			\106			.features	= CCU_FEATURE_ALL_PREDIV,	\107			.hw.init	= CLK_HW_INIT_PARENTS_DATA(_name, \108								   _parent, \109								   &ccu_gate_ops, \110								   _flags), \111		}							\112	}113 114static inline struct ccu_gate *hw_to_ccu_gate(struct clk_hw *hw)115{116	struct ccu_common *common = hw_to_ccu_common(hw);117 118	return container_of(common, struct ccu_gate, common);119}120 121void ccu_gate_helper_disable(struct ccu_common *common, u32 gate);122int ccu_gate_helper_enable(struct ccu_common *common, u32 gate);123int ccu_gate_helper_is_enabled(struct ccu_common *common, u32 gate);124 125extern const struct clk_ops ccu_gate_ops;126 127#endif /* _CCU_GATE_H_ */128