|
@@ -1537,3 +1537,75 @@ DEFINE_CLK_MUX(pmd_trace_clk_mux_ck, pmd_stm_clock_mux_ck_parents, NULL, 0x0,
|
|
OMAP4430_CM_EMU_DEBUGSS_CLKCTRL,
|
|
OMAP4430_CM_EMU_DEBUGSS_CLKCTRL,
|
|
OMAP4430_PMD_TRACE_MUX_CTRL_SHIFT,
|
|
OMAP4430_PMD_TRACE_MUX_CTRL_SHIFT,
|
|
OMAP4430_PMD_TRACE_MUX_CTRL_WIDTH, 0x0, NULL);
|
|
OMAP4430_PMD_TRACE_MUX_CTRL_WIDTH, 0x0, NULL);
|
|
|
|
+
|
|
|
|
+DEFINE_CLK_DIVIDER(stm_clk_div_ck, "pmd_stm_clock_mux_ck",
|
|
|
|
+ &pmd_stm_clock_mux_ck, 0x0, OMAP4430_CM_EMU_DEBUGSS_CLKCTRL,
|
|
|
|
+ OMAP4430_CLKSEL_PMD_STM_CLK_SHIFT,
|
|
|
|
+ OMAP4430_CLKSEL_PMD_STM_CLK_WIDTH, CLK_DIVIDER_POWER_OF_TWO,
|
|
|
|
+ NULL);
|
|
|
|
+
|
|
|
|
+static const char *trace_clk_div_ck_parents[] = {
|
|
|
|
+ "pmd_trace_clk_mux_ck",
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static const struct clksel trace_clk_div_div[] = {
|
|
|
|
+ { .parent = &pmd_trace_clk_mux_ck, .rates = div3_1to4_rates },
|
|
|
|
+ { .parent = NULL },
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static struct clk trace_clk_div_ck;
|
|
|
|
+
|
|
|
|
+static const struct clk_ops trace_clk_div_ck_ops = {
|
|
|
|
+ .recalc_rate = &omap2_clksel_recalc,
|
|
|
|
+ .set_rate = &omap2_clksel_set_rate,
|
|
|
|
+ .round_rate = &omap2_clksel_round_rate,
|
|
|
|
+ .init = &omap2_init_clk_clkdm,
|
|
|
|
+ .enable = &omap2_clkops_enable_clkdm,
|
|
|
|
+ .disable = &omap2_clkops_disable_clkdm,
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static struct clk_hw_omap trace_clk_div_ck_hw = {
|
|
|
|
+ .hw = {
|
|
|
|
+ .clk = &trace_clk_div_ck,
|
|
|
|
+ },
|
|
|
|
+ .clkdm_name = "emu_sys_clkdm",
|
|
|
|
+ .clksel = trace_clk_div_div,
|
|
|
|
+ .clksel_reg = OMAP4430_CM_EMU_DEBUGSS_CLKCTRL,
|
|
|
|
+ .clksel_mask = OMAP4430_CLKSEL_PMD_TRACE_CLK_MASK,
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+DEFINE_STRUCT_CLK(trace_clk_div_ck, trace_clk_div_ck_parents,
|
|
|
|
+ trace_clk_div_ck_ops);
|
|
|
|
+
|
|
|
|
+/* SCRM aux clk nodes */
|
|
|
|
+
|
|
|
|
+static const struct clksel auxclk_src_sel[] = {
|
|
|
|
+ { .parent = &sys_clkin_ck, .rates = div_1_0_rates },
|
|
|
|
+ { .parent = &dpll_core_m3x2_ck, .rates = div_1_1_rates },
|
|
|
|
+ { .parent = &dpll_per_m3x2_ck, .rates = div_1_2_rates },
|
|
|
|
+ { .parent = NULL },
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static const char *auxclk_src_ck_parents[] = {
|
|
|
|
+ "sys_clkin_ck", "dpll_core_m3x2_ck", "dpll_per_m3x2_ck",
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static const struct clk_ops auxclk_src_ck_ops = {
|
|
|
|
+ .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,
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+DEFINE_CLK_OMAP_MUX_GATE(auxclk0_src_ck, NULL, auxclk_src_sel,
|
|
|
|
+ OMAP4_SCRM_AUXCLK0, OMAP4_SRCSELECT_MASK,
|
|
|
|
+ OMAP4_SCRM_AUXCLK0, OMAP4_ENABLE_SHIFT, NULL,
|
|
|
|
+ auxclk_src_ck_parents, auxclk_src_ck_ops);
|
|
|
|
+
|
|
|
|
+DEFINE_CLK_DIVIDER(auxclk0_ck, "auxclk0_src_ck", &auxclk0_src_ck, 0x0,
|
|
|
|
+ OMAP4_SCRM_AUXCLK0, OMAP4_CLKDIV_SHIFT, OMAP4_CLKDIV_WIDTH,
|
|
|
|
+ 0x0, NULL);
|
|
|
|
+
|
|
|
|
+DEFINE_CLK_OMAP_MUX_GATE(auxclk1_src_ck, NULL, auxclk_src_sel,
|
|
|
|
+ OMAP4_SCRM_AUXCLK1, OMAP4_SRCSELECT_MASK,
|