|
@@ -70,3 +70,75 @@ static struct clk_hw_omap osc_ck_hw = {
|
|
|
};
|
|
|
|
|
|
static struct clk osc_ck = {
|
|
|
+ .name = "osc_ck",
|
|
|
+ .ops = &osc_ck_ops,
|
|
|
+ .hw = &osc_ck_hw.hw,
|
|
|
+ .flags = CLK_IS_ROOT,
|
|
|
+};
|
|
|
+
|
|
|
+DEFINE_CLK_FIXED_RATE(secure_32k_ck, CLK_IS_ROOT, 32768, 0x0);
|
|
|
+
|
|
|
+static struct clk sys_ck;
|
|
|
+
|
|
|
+static const char *sys_ck_parent_names[] = {
|
|
|
+ "osc_ck",
|
|
|
+};
|
|
|
+
|
|
|
+static const struct clk_ops sys_ck_ops = {
|
|
|
+ .init = &omap2_init_clk_clkdm,
|
|
|
+ .recalc_rate = &omap2xxx_sys_clk_recalc,
|
|
|
+};
|
|
|
+
|
|
|
+DEFINE_STRUCT_CLK_HW_OMAP(sys_ck, "wkup_clkdm");
|
|
|
+DEFINE_STRUCT_CLK(sys_ck, sys_ck_parent_names, sys_ck_ops);
|
|
|
+
|
|
|
+static struct dpll_data dpll_dd = {
|
|
|
+ .mult_div1_reg = OMAP_CM_REGADDR(PLL_MOD, CM_CLKSEL1),
|
|
|
+ .mult_mask = OMAP24XX_DPLL_MULT_MASK,
|
|
|
+ .div1_mask = OMAP24XX_DPLL_DIV_MASK,
|
|
|
+ .clk_bypass = &sys_ck,
|
|
|
+ .clk_ref = &sys_ck,
|
|
|
+ .control_reg = OMAP_CM_REGADDR(PLL_MOD, CM_CLKEN),
|
|
|
+ .enable_mask = OMAP24XX_EN_DPLL_MASK,
|
|
|
+ .max_multiplier = 1023,
|
|
|
+ .min_divider = 1,
|
|
|
+ .max_divider = 16,
|
|
|
+};
|
|
|
+
|
|
|
+static struct clk dpll_ck;
|
|
|
+
|
|
|
+static const char *dpll_ck_parent_names[] = {
|
|
|
+ "sys_ck",
|
|
|
+};
|
|
|
+
|
|
|
+static const struct clk_ops dpll_ck_ops = {
|
|
|
+ .init = &omap2_init_clk_clkdm,
|
|
|
+ .get_parent = &omap2_init_dpll_parent,
|
|
|
+ .recalc_rate = &omap2_dpllcore_recalc,
|
|
|
+ .round_rate = &omap2_dpll_round_rate,
|
|
|
+ .set_rate = &omap2_reprogram_dpllcore,
|
|
|
+};
|
|
|
+
|
|
|
+static struct clk_hw_omap dpll_ck_hw = {
|
|
|
+ .hw = {
|
|
|
+ .clk = &dpll_ck,
|
|
|
+ },
|
|
|
+ .ops = &clkhwops_omap2xxx_dpll,
|
|
|
+ .dpll_data = &dpll_dd,
|
|
|
+ .clkdm_name = "wkup_clkdm",
|
|
|
+};
|
|
|
+
|
|
|
+DEFINE_STRUCT_CLK(dpll_ck, dpll_ck_parent_names, dpll_ck_ops);
|
|
|
+
|
|
|
+static struct clk core_ck;
|
|
|
+
|
|
|
+static const char *core_ck_parent_names[] = {
|
|
|
+ "dpll_ck",
|
|
|
+};
|
|
|
+
|
|
|
+static const struct clk_ops core_ck_ops = {
|
|
|
+ .init = &omap2_init_clk_clkdm,
|
|
|
+};
|
|
|
+
|
|
|
+DEFINE_STRUCT_CLK_HW_OMAP(core_ck, "wkup_clkdm");
|
|
|
+DEFINE_STRUCT_CLK(core_ck, core_ck_parent_names, core_ck_ops);
|