| #ifndef CLOCK_H |
| #define CLOCK_H |
| |
| #ifdef CONFIG_COMMON_CLK |
| /* temporary clock configuration helper for platform devices */ |
| |
| struct clk_name { |
| const char *clk; |
| const char *con_id; |
| const char *dev_id; |
| }; |
| |
| void shmobile_clk_workaround(const struct clk_name *clks, int nr_clks, |
| bool enable); |
| |
| #else /* CONFIG_COMMON_CLK */ |
| /* legacy clock implementation */ |
| |
| struct clk; |
| unsigned long shmobile_fixed_ratio_clk_recalc(struct clk *clk); |
| extern struct sh_clk_ops shmobile_fixed_ratio_clk_ops; |
| |
| /* clock ratio */ |
| struct clk_ratio { |
| int mul; |
| int div; |
| }; |
| |
| #define SH_CLK_RATIO(name, m, d) \ |
| static struct clk_ratio name ##_ratio = { \ |
| .mul = m, \ |
| .div = d, \ |
| } |
| |
| #define SH_FIXED_RATIO_CLKg(name, p, r) \ |
| struct clk name = { \ |
| .parent = &p, \ |
| .ops = &shmobile_fixed_ratio_clk_ops,\ |
| .priv = &r ## _ratio, \ |
| } |
| |
| #define SH_FIXED_RATIO_CLK(name, p, r) \ |
| static SH_FIXED_RATIO_CLKg(name, p, r) |
| |
| #define SH_FIXED_RATIO_CLK_SET(name, p, m, d) \ |
| SH_CLK_RATIO(name, m, d); \ |
| SH_FIXED_RATIO_CLK(name, p, name) |
| |
| #define SH_CLK_SET_RATIO(p, m, d) \ |
| do { \ |
| (p)->mul = m; \ |
| (p)->div = d; \ |
| } while (0) |
| |
| #endif /* CONFIG_COMMON_CLK */ |
| #endif |