summaryrefslogtreecommitdiff
path: root/drivers/clk/uniphier/clk-uniphier.h
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/clk/uniphier/clk-uniphier.h')
-rw-r--r--drivers/clk/uniphier/clk-uniphier.h46
1 files changed, 28 insertions, 18 deletions
diff --git a/drivers/clk/uniphier/clk-uniphier.h b/drivers/clk/uniphier/clk-uniphier.h
index 0b60337..f9a560e 100644
--- a/drivers/clk/uniphier/clk-uniphier.h
+++ b/drivers/clk/uniphier/clk-uniphier.h
@@ -10,36 +10,46 @@
#include <linux/kernel.h>
+#define UNIPHIER_CLK_MAX_NR_MUXS 8
+
struct uniphier_clk_gate_data {
- int index;
+ unsigned int id;
unsigned int reg;
- u32 mask;
- u32 data;
+ unsigned int bit;
};
-struct uniphier_clk_rate_data {
- int index;
+struct uniphier_clk_mux_data {
+ unsigned int id;
+ unsigned int nr_muxs;
unsigned int reg;
-#define UNIPHIER_CLK_RATE_IS_FIXED UINT_MAX
- u32 mask;
- u32 data;
- unsigned long rate;
+ unsigned int masks[UNIPHIER_CLK_MAX_NR_MUXS];
+ unsigned int vals[UNIPHIER_CLK_MAX_NR_MUXS];
+ unsigned long rates[UNIPHIER_CLK_MAX_NR_MUXS];
};
-struct uniphier_clk_soc_data {
+struct uniphier_clk_data {
const struct uniphier_clk_gate_data *gate;
- unsigned int nr_gate;
- const struct uniphier_clk_rate_data *rate;
- unsigned int nr_rate;
+ const struct uniphier_clk_mux_data *mux;
};
-#define UNIPHIER_CLK_FIXED_RATE(i, f) \
+#define UNIPHIER_CLK_ID_END (unsigned int)(-1)
+
+#define UNIPHIER_CLK_END \
+ { .id = UNIPHIER_CLK_ID_END }
+
+#define UNIPHIER_CLK_GATE(_id, _reg, _bit) \
+ { \
+ .id = (_id), \
+ .reg = (_reg), \
+ .bit = (_bit), \
+ }
+
+#define UNIPHIER_CLK_FIXED_RATE(_id, _rate) \
{ \
- .index = i, \
- .reg = UNIPHIER_CLK_RATE_IS_FIXED, \
- .rate = f, \
+ .id = (_id), \
+ .rates = {(_reg),}, \
}
-extern const struct uniphier_clk_soc_data uniphier_mio_clk_data;
+extern const struct uniphier_clk_data uniphier_mio_clk_data;
#endif /* __CLK_UNIPHIER_H__ */