|
@@ -142,3 +142,195 @@ static const struct clk_ops core_ck_ops = {
|
|
|
|
|
|
DEFINE_STRUCT_CLK_HW_OMAP(core_ck, "wkup_clkdm");
|
|
DEFINE_STRUCT_CLK_HW_OMAP(core_ck, "wkup_clkdm");
|
|
DEFINE_STRUCT_CLK(core_ck, core_ck_parent_names, core_ck_ops);
|
|
DEFINE_STRUCT_CLK(core_ck, core_ck_parent_names, core_ck_ops);
|
|
|
|
+
|
|
|
|
+DEFINE_CLK_DIVIDER(core_l3_ck, "core_ck", &core_ck, 0x0,
|
|
|
|
+ OMAP_CM_REGADDR(CORE_MOD, CM_CLKSEL1),
|
|
|
|
+ OMAP24XX_CLKSEL_L3_SHIFT, OMAP24XX_CLKSEL_L3_WIDTH,
|
|
|
|
+ CLK_DIVIDER_ONE_BASED, NULL);
|
|
|
|
+
|
|
|
|
+DEFINE_CLK_DIVIDER(l4_ck, "core_l3_ck", &core_l3_ck, 0x0,
|
|
|
|
+ OMAP_CM_REGADDR(CORE_MOD, CM_CLKSEL1),
|
|
|
|
+ OMAP24XX_CLKSEL_L4_SHIFT, OMAP24XX_CLKSEL_L4_WIDTH,
|
|
|
|
+ CLK_DIVIDER_ONE_BASED, NULL);
|
|
|
|
+
|
|
|
|
+static struct clk aes_ick;
|
|
|
|
+
|
|
|
|
+static const char *aes_ick_parent_names[] = {
|
|
|
|
+ "l4_ck",
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static const struct clk_ops aes_ick_ops = {
|
|
|
|
+ .init = &omap2_init_clk_clkdm,
|
|
|
|
+ .enable = &omap2_dflt_clk_enable,
|
|
|
|
+ .disable = &omap2_dflt_clk_disable,
|
|
|
|
+ .is_enabled = &omap2_dflt_clk_is_enabled,
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static struct clk_hw_omap aes_ick_hw = {
|
|
|
|
+ .hw = {
|
|
|
|
+ .clk = &aes_ick,
|
|
|
|
+ },
|
|
|
|
+ .ops = &clkhwops_iclk_wait,
|
|
|
|
+ .enable_reg = OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_ICLKEN4),
|
|
|
|
+ .enable_bit = OMAP24XX_EN_AES_SHIFT,
|
|
|
|
+ .clkdm_name = "core_l4_clkdm",
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+DEFINE_STRUCT_CLK(aes_ick, aes_ick_parent_names, aes_ick_ops);
|
|
|
|
+
|
|
|
|
+static struct clk apll54_ck;
|
|
|
|
+
|
|
|
|
+static const struct clk_ops apll54_ck_ops = {
|
|
|
|
+ .init = &omap2_init_clk_clkdm,
|
|
|
|
+ .enable = &omap2_clk_apll54_enable,
|
|
|
|
+ .disable = &omap2_clk_apll54_disable,
|
|
|
|
+ .recalc_rate = &omap2_clk_apll54_recalc,
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static struct clk_hw_omap apll54_ck_hw = {
|
|
|
|
+ .hw = {
|
|
|
|
+ .clk = &apll54_ck,
|
|
|
|
+ },
|
|
|
|
+ .ops = &clkhwops_apll54,
|
|
|
|
+ .enable_reg = OMAP_CM_REGADDR(PLL_MOD, CM_CLKEN),
|
|
|
|
+ .enable_bit = OMAP24XX_EN_54M_PLL_SHIFT,
|
|
|
|
+ .flags = ENABLE_ON_INIT,
|
|
|
|
+ .clkdm_name = "wkup_clkdm",
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+DEFINE_STRUCT_CLK(apll54_ck, dpll_ck_parent_names, apll54_ck_ops);
|
|
|
|
+
|
|
|
|
+static struct clk apll96_ck;
|
|
|
|
+
|
|
|
|
+static const struct clk_ops apll96_ck_ops = {
|
|
|
|
+ .init = &omap2_init_clk_clkdm,
|
|
|
|
+ .enable = &omap2_clk_apll96_enable,
|
|
|
|
+ .disable = &omap2_clk_apll96_disable,
|
|
|
|
+ .recalc_rate = &omap2_clk_apll96_recalc,
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static struct clk_hw_omap apll96_ck_hw = {
|
|
|
|
+ .hw = {
|
|
|
|
+ .clk = &apll96_ck,
|
|
|
|
+ },
|
|
|
|
+ .ops = &clkhwops_apll96,
|
|
|
|
+ .enable_reg = OMAP_CM_REGADDR(PLL_MOD, CM_CLKEN),
|
|
|
|
+ .enable_bit = OMAP24XX_EN_96M_PLL_SHIFT,
|
|
|
|
+ .flags = ENABLE_ON_INIT,
|
|
|
|
+ .clkdm_name = "wkup_clkdm",
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+DEFINE_STRUCT_CLK(apll96_ck, dpll_ck_parent_names, apll96_ck_ops);
|
|
|
|
+
|
|
|
|
+static const char *func_96m_ck_parent_names[] = {
|
|
|
|
+ "apll96_ck", "alt_ck",
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+DEFINE_CLK_MUX(func_96m_ck, func_96m_ck_parent_names, NULL, 0x0,
|
|
|
|
+ OMAP_CM_REGADDR(PLL_MOD, CM_CLKSEL1), OMAP2430_96M_SOURCE_SHIFT,
|
|
|
|
+ OMAP2430_96M_SOURCE_WIDTH, 0x0, NULL);
|
|
|
|
+
|
|
|
|
+static struct clk cam_fck;
|
|
|
|
+
|
|
|
|
+static const char *cam_fck_parent_names[] = {
|
|
|
|
+ "func_96m_ck",
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static struct clk_hw_omap cam_fck_hw = {
|
|
|
|
+ .hw = {
|
|
|
|
+ .clk = &cam_fck,
|
|
|
|
+ },
|
|
|
|
+ .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
|
|
|
|
+ .enable_bit = OMAP24XX_EN_CAM_SHIFT,
|
|
|
|
+ .clkdm_name = "core_l3_clkdm",
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+DEFINE_STRUCT_CLK(cam_fck, cam_fck_parent_names, aes_ick_ops);
|
|
|
|
+
|
|
|
|
+static struct clk cam_ick;
|
|
|
|
+
|
|
|
|
+static struct clk_hw_omap cam_ick_hw = {
|
|
|
|
+ .hw = {
|
|
|
|
+ .clk = &cam_ick,
|
|
|
|
+ },
|
|
|
|
+ .ops = &clkhwops_iclk,
|
|
|
|
+ .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
|
|
|
|
+ .enable_bit = OMAP24XX_EN_CAM_SHIFT,
|
|
|
|
+ .clkdm_name = "core_l4_clkdm",
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+DEFINE_STRUCT_CLK(cam_ick, aes_ick_parent_names, aes_ick_ops);
|
|
|
|
+
|
|
|
|
+static struct clk des_ick;
|
|
|
|
+
|
|
|
|
+static struct clk_hw_omap des_ick_hw = {
|
|
|
|
+ .hw = {
|
|
|
|
+ .clk = &des_ick,
|
|
|
|
+ },
|
|
|
|
+ .ops = &clkhwops_iclk_wait,
|
|
|
|
+ .enable_reg = OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_ICLKEN4),
|
|
|
|
+ .enable_bit = OMAP24XX_EN_DES_SHIFT,
|
|
|
|
+ .clkdm_name = "core_l4_clkdm",
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+DEFINE_STRUCT_CLK(des_ick, aes_ick_parent_names, aes_ick_ops);
|
|
|
|
+
|
|
|
|
+static const struct clksel_rate dsp_fck_core_rates[] = {
|
|
|
|
+ { .div = 1, .val = 1, .flags = RATE_IN_24XX },
|
|
|
|
+ { .div = 2, .val = 2, .flags = RATE_IN_24XX },
|
|
|
|
+ { .div = 3, .val = 3, .flags = RATE_IN_24XX },
|
|
|
|
+ { .div = 4, .val = 4, .flags = RATE_IN_24XX },
|
|
|
|
+ { .div = 0 }
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static const struct clksel dsp_fck_clksel[] = {
|
|
|
|
+ { .parent = &core_ck, .rates = dsp_fck_core_rates },
|
|
|
|
+ { .parent = NULL },
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static const char *dsp_fck_parent_names[] = {
|
|
|
|
+ "core_ck",
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static struct clk dsp_fck;
|
|
|
|
+
|
|
|
|
+static const struct clk_ops dsp_fck_ops = {
|
|
|
|
+ .init = &omap2_init_clk_clkdm,
|
|
|
|
+ .enable = &omap2_dflt_clk_enable,
|
|
|
|
+ .disable = &omap2_dflt_clk_disable,
|
|
|
|
+ .is_enabled = &omap2_dflt_clk_is_enabled,
|
|
|
|
+ .recalc_rate = &omap2_clksel_recalc,
|
|
|
|
+ .set_rate = &omap2_clksel_set_rate,
|
|
|
|
+ .round_rate = &omap2_clksel_round_rate,
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+DEFINE_CLK_OMAP_MUX_GATE(dsp_fck, "dsp_clkdm", dsp_fck_clksel,
|
|
|
|
+ OMAP_CM_REGADDR(OMAP24XX_DSP_MOD, CM_CLKSEL),
|
|
|
|
+ OMAP24XX_CLKSEL_DSP_MASK,
|
|
|
|
+ OMAP_CM_REGADDR(OMAP24XX_DSP_MOD, CM_FCLKEN),
|
|
|
|
+ OMAP24XX_CM_FCLKEN_DSP_EN_DSP_SHIFT, &clkhwops_wait,
|
|
|
|
+ dsp_fck_parent_names, dsp_fck_ops);
|
|
|
|
+
|
|
|
|
+static const struct clksel_rate dss1_fck_sys_rates[] = {
|
|
|
|
+ { .div = 1, .val = 0, .flags = RATE_IN_24XX },
|
|
|
|
+ { .div = 0 }
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static const struct clksel_rate dss1_fck_core_rates[] = {
|
|
|
|
+ { .div = 1, .val = 1, .flags = RATE_IN_24XX },
|
|
|
|
+ { .div = 2, .val = 2, .flags = RATE_IN_24XX },
|
|
|
|
+ { .div = 3, .val = 3, .flags = RATE_IN_24XX },
|
|
|
|
+ { .div = 4, .val = 4, .flags = RATE_IN_24XX },
|
|
|
|
+ { .div = 5, .val = 5, .flags = RATE_IN_24XX },
|
|
|
|
+ { .div = 6, .val = 6, .flags = RATE_IN_24XX },
|
|
|
|
+ { .div = 8, .val = 8, .flags = RATE_IN_24XX },
|
|
|
|
+ { .div = 9, .val = 9, .flags = RATE_IN_24XX },
|
|
|
|
+ { .div = 12, .val = 12, .flags = RATE_IN_24XX },
|
|
|
|
+ { .div = 16, .val = 16, .flags = RATE_IN_24XX },
|
|
|
|
+ { .div = 0 }
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static const struct clksel dss1_fck_clksel[] = {
|
|
|
|
+ { .parent = &sys_ck, .rates = dss1_fck_sys_rates },
|
|
|
|
+ { .parent = &core_ck, .rates = dss1_fck_core_rates },
|
|
|
|
+ { .parent = NULL },
|