Linux Audio

Check our new training course

Loading...
Note: File does not exist in v3.5.6.
 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 two 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_DATA(_struct, _name, _data, _reg, _gate, _flags)	\
72	struct ccu_gate _struct = {					\
73		.enable	= _gate,					\
74		.common	= {						\
75			.reg		= _reg,				\
76			.hw.init	=				\
77				CLK_HW_INIT_PARENTS_DATA(_name,		\
78							 _data,		\
79							 &ccu_gate_ops,	\
80							 _flags),	\
81		}							\
82	}
83
84static inline struct ccu_gate *hw_to_ccu_gate(struct clk_hw *hw)
85{
86	struct ccu_common *common = hw_to_ccu_common(hw);
87
88	return container_of(common, struct ccu_gate, common);
89}
90
91void ccu_gate_helper_disable(struct ccu_common *common, u32 gate);
92int ccu_gate_helper_enable(struct ccu_common *common, u32 gate);
93int ccu_gate_helper_is_enabled(struct ccu_common *common, u32 gate);
94
95extern const struct clk_ops ccu_gate_ops;
96
97#endif /* _CCU_GATE_H_ */