forked from ~ljy/RK356X_SDK_RELEASE

hc
2024-02-20 ea08eeccae9297f7aabd2ef7f0c2517ac4549acc
kernel/drivers/clk/sprd/gate.h
....@@ -1,4 +1,4 @@
1
-// SPDX-License-Identifier: GPL-2.0
1
+/* SPDX-License-Identifier: GPL-2.0 */
22 //
33 // Spreadtrum gate clock driver
44 //
....@@ -14,25 +14,54 @@
1414 u32 enable_mask;
1515 u16 flags;
1616 u16 sc_offset;
17
+ u16 udelay;
1718
1819 struct sprd_clk_common common;
1920 };
2021
21
-#define SPRD_SC_GATE_CLK_OPS(_struct, _name, _parent, _reg, _sc_offset, \
22
- _enable_mask, _flags, _gate_flags, _ops) \
22
+/*
23
+ * sprd_gate->flags is used for:
24
+ * CLK_GATE_SET_TO_DISABLE BIT(0)
25
+ * CLK_GATE_HIWORD_MASK BIT(1)
26
+ * CLK_GATE_BIG_ENDIAN BIT(2)
27
+ * so we define new flags from BIT(3)
28
+ */
29
+#define SPRD_GATE_NON_AON BIT(3) /* not alway powered on, check before read */
30
+
31
+#define SPRD_SC_GATE_CLK_HW_INIT_FN(_struct, _name, _parent, _reg, \
32
+ _sc_offset, _enable_mask, _flags, \
33
+ _gate_flags, _udelay, _ops, _fn) \
2334 struct sprd_gate _struct = { \
2435 .enable_mask = _enable_mask, \
2536 .sc_offset = _sc_offset, \
2637 .flags = _gate_flags, \
38
+ .udelay = _udelay, \
2739 .common = { \
2840 .regmap = NULL, \
2941 .reg = _reg, \
30
- .hw.init = CLK_HW_INIT(_name, \
31
- _parent, \
32
- _ops, \
33
- _flags), \
42
+ .hw.init = _fn(_name, _parent, \
43
+ _ops, _flags), \
3444 } \
3545 }
46
+
47
+#define SPRD_SC_GATE_CLK_OPS_UDELAY(_struct, _name, _parent, _reg, \
48
+ _sc_offset, _enable_mask, _flags, \
49
+ _gate_flags, _udelay, _ops) \
50
+ SPRD_SC_GATE_CLK_HW_INIT_FN(_struct, _name, _parent, _reg, \
51
+ _sc_offset, _enable_mask, _flags, \
52
+ _gate_flags, _udelay, _ops, CLK_HW_INIT)
53
+
54
+#define SPRD_SC_GATE_CLK_OPS(_struct, _name, _parent, _reg, _sc_offset, \
55
+ _enable_mask, _flags, _gate_flags, _ops) \
56
+ SPRD_SC_GATE_CLK_OPS_UDELAY(_struct, _name, _parent, _reg, \
57
+ _sc_offset, _enable_mask, _flags, \
58
+ _gate_flags, 0, _ops)
59
+
60
+#define SPRD_SC_GATE_CLK(_struct, _name, _parent, _reg, _sc_offset, \
61
+ _enable_mask, _flags, _gate_flags) \
62
+ SPRD_SC_GATE_CLK_OPS(_struct, _name, _parent, _reg, _sc_offset, \
63
+ _enable_mask, _flags, _gate_flags, \
64
+ &sprd_sc_gate_ops)
3665
3766 #define SPRD_GATE_CLK(_struct, _name, _parent, _reg, \
3867 _enable_mask, _flags, _gate_flags) \
....@@ -40,11 +69,90 @@
4069 _enable_mask, _flags, _gate_flags, \
4170 &sprd_gate_ops)
4271
43
-#define SPRD_SC_GATE_CLK(_struct, _name, _parent, _reg, _sc_offset, \
44
- _enable_mask, _flags, _gate_flags) \
45
- SPRD_SC_GATE_CLK_OPS(_struct, _name, _parent, _reg, _sc_offset, \
72
+#define SPRD_PLL_SC_GATE_CLK(_struct, _name, _parent, _reg, _sc_offset, \
4673 _enable_mask, _flags, _gate_flags, \
47
- &sprd_sc_gate_ops)
74
+ _udelay) \
75
+ SPRD_SC_GATE_CLK_OPS_UDELAY(_struct, _name, _parent, _reg, \
76
+ _sc_offset, _enable_mask, _flags, \
77
+ _gate_flags, _udelay, \
78
+ &sprd_pll_sc_gate_ops)
79
+
80
+
81
+#define SPRD_SC_GATE_CLK_HW_OPS_UDELAY(_struct, _name, _parent, _reg, \
82
+ _sc_offset, _enable_mask, \
83
+ _flags, _gate_flags, \
84
+ _udelay, _ops) \
85
+ SPRD_SC_GATE_CLK_HW_INIT_FN(_struct, _name, _parent, _reg, \
86
+ _sc_offset, _enable_mask, _flags, \
87
+ _gate_flags, _udelay, _ops, \
88
+ CLK_HW_INIT_HW)
89
+
90
+#define SPRD_SC_GATE_CLK_HW_OPS(_struct, _name, _parent, _reg, \
91
+ _sc_offset, _enable_mask, _flags, \
92
+ _gate_flags, _ops) \
93
+ SPRD_SC_GATE_CLK_HW_OPS_UDELAY(_struct, _name, _parent, _reg, \
94
+ _sc_offset, _enable_mask, \
95
+ _flags, _gate_flags, 0, _ops)
96
+
97
+#define SPRD_SC_GATE_CLK_HW(_struct, _name, _parent, _reg, \
98
+ _sc_offset, _enable_mask, _flags, \
99
+ _gate_flags) \
100
+ SPRD_SC_GATE_CLK_HW_OPS(_struct, _name, _parent, _reg, \
101
+ _sc_offset, _enable_mask, _flags, \
102
+ _gate_flags, &sprd_sc_gate_ops)
103
+
104
+#define SPRD_GATE_CLK_HW(_struct, _name, _parent, _reg, \
105
+ _enable_mask, _flags, _gate_flags) \
106
+ SPRD_SC_GATE_CLK_HW_OPS(_struct, _name, _parent, _reg, 0, \
107
+ _enable_mask, _flags, _gate_flags, \
108
+ &sprd_gate_ops)
109
+
110
+#define SPRD_PLL_SC_GATE_CLK_HW(_struct, _name, _parent, _reg, \
111
+ _sc_offset, _enable_mask, _flags, \
112
+ _gate_flags, _udelay) \
113
+ SPRD_SC_GATE_CLK_HW_OPS_UDELAY(_struct, _name, _parent, _reg, \
114
+ _sc_offset, _enable_mask, \
115
+ _flags, _gate_flags, _udelay, \
116
+ &sprd_pll_sc_gate_ops)
117
+
118
+#define SPRD_SC_GATE_CLK_FW_NAME_OPS_UDELAY(_struct, _name, _parent, \
119
+ _reg, _sc_offset, \
120
+ _enable_mask, _flags, \
121
+ _gate_flags, _udelay, _ops) \
122
+ SPRD_SC_GATE_CLK_HW_INIT_FN(_struct, _name, _parent, _reg, \
123
+ _sc_offset, _enable_mask, _flags, \
124
+ _gate_flags, _udelay, _ops, \
125
+ CLK_HW_INIT_FW_NAME)
126
+
127
+#define SPRD_SC_GATE_CLK_FW_NAME_OPS(_struct, _name, _parent, _reg, \
128
+ _sc_offset, _enable_mask, _flags, \
129
+ _gate_flags, _ops) \
130
+ SPRD_SC_GATE_CLK_FW_NAME_OPS_UDELAY(_struct, _name, _parent, \
131
+ _reg, _sc_offset, \
132
+ _enable_mask, _flags, \
133
+ _gate_flags, 0, _ops)
134
+
135
+#define SPRD_SC_GATE_CLK_FW_NAME(_struct, _name, _parent, _reg, \
136
+ _sc_offset, _enable_mask, _flags, \
137
+ _gate_flags) \
138
+ SPRD_SC_GATE_CLK_FW_NAME_OPS(_struct, _name, _parent, _reg, \
139
+ _sc_offset, _enable_mask, _flags, \
140
+ _gate_flags, &sprd_sc_gate_ops)
141
+
142
+#define SPRD_GATE_CLK_FW_NAME(_struct, _name, _parent, _reg, \
143
+ _enable_mask, _flags, _gate_flags) \
144
+ SPRD_SC_GATE_CLK_FW_NAME_OPS(_struct, _name, _parent, _reg, 0, \
145
+ _enable_mask, _flags, _gate_flags, \
146
+ &sprd_gate_ops)
147
+
148
+#define SPRD_PLL_SC_GATE_CLK_FW_NAME(_struct, _name, _parent, _reg, \
149
+ _sc_offset, _enable_mask, _flags, \
150
+ _gate_flags, _udelay) \
151
+ SPRD_SC_GATE_CLK_FW_NAME_OPS_UDELAY(_struct, _name, _parent, \
152
+ _reg, _sc_offset, \
153
+ _enable_mask, _flags, \
154
+ _gate_flags, _udelay, \
155
+ &sprd_pll_sc_gate_ops)
48156
49157 static inline struct sprd_gate *hw_to_sprd_gate(const struct clk_hw *hw)
50158 {
....@@ -55,5 +163,6 @@
55163
56164 extern const struct clk_ops sprd_gate_ops;
57165 extern const struct clk_ops sprd_sc_gate_ops;
166
+extern const struct clk_ops sprd_pll_sc_gate_ops;
58167
59168 #endif /* _SPRD_GATE_H_ */