|
@@ -334,3 +334,129 @@ 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 },
|
|
|
+};
|
|
|
+
|
|
|
+static const char *dss1_fck_parent_names[] = {
|
|
|
+ "sys_ck", "core_ck",
|
|
|
+};
|
|
|
+
|
|
|
+static const struct clk_ops dss1_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,
|
|
|
+ .get_parent = &omap2_clksel_find_parent_index,
|
|
|
+ .set_parent = &omap2_clksel_set_parent,
|
|
|
+};
|
|
|
+
|
|
|
+DEFINE_CLK_OMAP_MUX_GATE(dss1_fck, "dss_clkdm", dss1_fck_clksel,
|
|
|
+ OMAP_CM_REGADDR(CORE_MOD, CM_CLKSEL1),
|
|
|
+ OMAP24XX_CLKSEL_DSS1_MASK,
|
|
|
+ OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
|
|
|
+ OMAP24XX_EN_DSS1_SHIFT, NULL,
|
|
|
+ dss1_fck_parent_names, dss1_fck_ops);
|
|
|
+
|
|
|
+static const struct clksel_rate dss2_fck_sys_rates[] = {
|
|
|
+ { .div = 1, .val = 0, .flags = RATE_IN_24XX },
|
|
|
+ { .div = 0 }
|
|
|
+};
|
|
|
+
|
|
|
+static const struct clksel_rate dss2_fck_48m_rates[] = {
|
|
|
+ { .div = 1, .val = 1, .flags = RATE_IN_24XX },
|
|
|
+ { .div = 0 }
|
|
|
+};
|
|
|
+
|
|
|
+static const struct clksel_rate func_48m_apll96_rates[] = {
|
|
|
+ { .div = 2, .val = 0, .flags = RATE_IN_24XX },
|
|
|
+ { .div = 0 }
|
|
|
+};
|
|
|
+
|
|
|
+static const struct clksel_rate func_48m_alt_rates[] = {
|
|
|
+ { .div = 1, .val = 1, .flags = RATE_IN_24XX },
|
|
|
+ { .div = 0 }
|
|
|
+};
|
|
|
+
|
|
|
+static const struct clksel func_48m_clksel[] = {
|
|
|
+ { .parent = &apll96_ck, .rates = func_48m_apll96_rates },
|
|
|
+ { .parent = &alt_ck, .rates = func_48m_alt_rates },
|
|
|
+ { .parent = NULL },
|
|
|
+};
|
|
|
+
|
|
|
+static const char *func_48m_ck_parent_names[] = {
|
|
|
+ "apll96_ck", "alt_ck",
|
|
|
+};
|
|
|
+
|
|
|
+static struct clk func_48m_ck;
|
|
|
+
|
|
|
+static const struct clk_ops func_48m_ck_ops = {
|
|
|
+ .init = &omap2_init_clk_clkdm,
|
|
|
+ .recalc_rate = &omap2_clksel_recalc,
|
|
|
+ .set_rate = &omap2_clksel_set_rate,
|
|
|
+ .round_rate = &omap2_clksel_round_rate,
|
|
|
+ .get_parent = &omap2_clksel_find_parent_index,
|
|
|
+ .set_parent = &omap2_clksel_set_parent,
|
|
|
+};
|
|
|
+
|
|
|
+static struct clk_hw_omap func_48m_ck_hw = {
|
|
|
+ .hw = {
|
|
|
+ .clk = &func_48m_ck,
|
|
|
+ },
|
|
|
+ .clksel = func_48m_clksel,
|
|
|
+ .clksel_reg = OMAP_CM_REGADDR(PLL_MOD, CM_CLKSEL1),
|
|
|
+ .clksel_mask = OMAP24XX_48M_SOURCE_MASK,
|
|
|
+ .clkdm_name = "wkup_clkdm",
|
|
|
+};
|
|
|
+
|
|
|
+DEFINE_STRUCT_CLK(func_48m_ck, func_48m_ck_parent_names, func_48m_ck_ops);
|
|
|
+
|
|
|
+static const struct clksel dss2_fck_clksel[] = {
|
|
|
+ { .parent = &sys_ck, .rates = dss2_fck_sys_rates },
|
|
|
+ { .parent = &func_48m_ck, .rates = dss2_fck_48m_rates },
|
|
|
+ { .parent = NULL },
|
|
|
+};
|
|
|
+
|
|
|
+static const char *dss2_fck_parent_names[] = {
|
|
|
+ "sys_ck", "func_48m_ck",
|
|
|
+};
|
|
|
+
|
|
|
+DEFINE_CLK_OMAP_MUX_GATE(dss2_fck, "dss_clkdm", dss2_fck_clksel,
|
|
|
+ OMAP_CM_REGADDR(CORE_MOD, CM_CLKSEL1),
|
|
|
+ OMAP24XX_CLKSEL_DSS2_MASK,
|
|
|
+ OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
|
|
|
+ OMAP24XX_EN_DSS2_SHIFT, NULL,
|
|
|
+ dss2_fck_parent_names, dss1_fck_ops);
|
|
|
+
|
|
|
+static const char *func_54m_ck_parent_names[] = {
|
|
|
+ "apll54_ck", "alt_ck",
|
|
|
+};
|
|
|
+
|
|
|
+DEFINE_CLK_MUX(func_54m_ck, func_54m_ck_parent_names, NULL, 0x0,
|
|
|
+ OMAP_CM_REGADDR(PLL_MOD, CM_CLKSEL1),
|
|
|
+ OMAP24XX_54M_SOURCE_SHIFT, OMAP24XX_54M_SOURCE_WIDTH, 0x0, NULL);
|
|
|
+
|
|
|
+static struct clk dss_54m_fck;
|
|
|
+
|
|
|
+static const char *dss_54m_fck_parent_names[] = {
|
|
|
+ "func_54m_ck",
|
|
|
+};
|
|
|
+
|
|
|
+static struct clk_hw_omap dss_54m_fck_hw = {
|
|
|
+ .hw = {
|
|
|
+ .clk = &dss_54m_fck,
|
|
|
+ },
|
|
|
+ .ops = &clkhwops_wait,
|
|
|
+ .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
|
|
|
+ .enable_bit = OMAP24XX_EN_TV_SHIFT,
|
|
|
+ .clkdm_name = "dss_clkdm",
|
|
|
+};
|
|
|
+
|
|
|
+DEFINE_STRUCT_CLK(dss_54m_fck, dss_54m_fck_parent_names, aes_ick_ops);
|
|
|
+
|
|
|
+static struct clk dss_ick;
|
|
|
+
|
|
|
+static struct clk_hw_omap dss_ick_hw = {
|
|
|
+ .hw = {
|
|
|
+ .clk = &dss_ick,
|
|
|
+ },
|
|
|
+ .ops = &clkhwops_iclk,
|