aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/clk/hisilicon/clk.h
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/clk/hisilicon/clk.h')
-rw-r--r--drivers/clk/hisilicon/clk.h34
1 files changed, 29 insertions, 5 deletions
diff --git a/drivers/clk/hisilicon/clk.h b/drivers/clk/hisilicon/clk.h
index 20d64afe4ad8..4e1d1affc6f5 100644
--- a/drivers/clk/hisilicon/clk.h
+++ b/drivers/clk/hisilicon/clk.h
@@ -30,6 +30,8 @@
30#include <linux/io.h> 30#include <linux/io.h>
31#include <linux/spinlock.h> 31#include <linux/spinlock.h>
32 32
33struct platform_device;
34
33struct hisi_clock_data { 35struct hisi_clock_data {
34 struct clk_onecell_data clk_data; 36 struct clk_onecell_data clk_data;
35 void __iomem *base; 37 void __iomem *base;
@@ -110,19 +112,41 @@ struct clk *hi6220_register_clkdiv(struct device *dev, const char *name,
110 const char *parent_name, unsigned long flags, void __iomem *reg, 112 const char *parent_name, unsigned long flags, void __iomem *reg,
111 u8 shift, u8 width, u32 mask_bit, spinlock_t *lock); 113 u8 shift, u8 width, u32 mask_bit, spinlock_t *lock);
112 114
115struct hisi_clock_data *hisi_clk_alloc(struct platform_device *, int);
113struct hisi_clock_data *hisi_clk_init(struct device_node *, int); 116struct hisi_clock_data *hisi_clk_init(struct device_node *, int);
114void hisi_clk_register_fixed_rate(const struct hisi_fixed_rate_clock *, 117int hisi_clk_register_fixed_rate(const struct hisi_fixed_rate_clock *,
115 int, struct hisi_clock_data *); 118 int, struct hisi_clock_data *);
116void hisi_clk_register_fixed_factor(const struct hisi_fixed_factor_clock *, 119int hisi_clk_register_fixed_factor(const struct hisi_fixed_factor_clock *,
117 int, struct hisi_clock_data *); 120 int, struct hisi_clock_data *);
118void hisi_clk_register_mux(const struct hisi_mux_clock *, int, 121int hisi_clk_register_mux(const struct hisi_mux_clock *, int,
119 struct hisi_clock_data *); 122 struct hisi_clock_data *);
120void hisi_clk_register_divider(const struct hisi_divider_clock *, 123int hisi_clk_register_divider(const struct hisi_divider_clock *,
121 int, struct hisi_clock_data *); 124 int, struct hisi_clock_data *);
122void hisi_clk_register_gate(const struct hisi_gate_clock *, 125int hisi_clk_register_gate(const struct hisi_gate_clock *,
123 int, struct hisi_clock_data *); 126 int, struct hisi_clock_data *);
124void hisi_clk_register_gate_sep(const struct hisi_gate_clock *, 127void hisi_clk_register_gate_sep(const struct hisi_gate_clock *,
125 int, struct hisi_clock_data *); 128 int, struct hisi_clock_data *);
126void hi6220_clk_register_divider(const struct hi6220_divider_clock *, 129void hi6220_clk_register_divider(const struct hi6220_divider_clock *,
127 int, struct hisi_clock_data *); 130 int, struct hisi_clock_data *);
131
132#define hisi_clk_unregister(type) \
133static inline \
134void hisi_clk_unregister_##type(const struct hisi_##type##_clock *clks, \
135 int nums, struct hisi_clock_data *data) \
136{ \
137 struct clk **clocks = data->clk_data.clks; \
138 int i; \
139 for (i = 0; i < nums; i++) { \
140 int id = clks[i].id; \
141 if (clocks[id]) \
142 clk_unregister_##type(clocks[id]); \
143 } \
144}
145
146hisi_clk_unregister(fixed_rate)
147hisi_clk_unregister(fixed_factor)
148hisi_clk_unregister(mux)
149hisi_clk_unregister(divider)
150hisi_clk_unregister(gate)
151
128#endif /* __HISI_CLK_H */ 152#endif /* __HISI_CLK_H */