File Index
Files and directories
Sign in
FILE

ccu_gate.h

File preview with syntax highlighting.

linux-6.19.14/drivers/clk/sunxi-ng/ccu_gate.h 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 structure
 57 * 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_ */
~/ Read-only file preview.