|
@@ -775,3 +775,189 @@ static struct dpll_data dpll2_dd = {
|
|
|
.autoidle_reg = OMAP_CM_REGADDR(OMAP3430_IVA2_MOD, OMAP3430_CM_AUTOIDLE_PLL),
|
|
|
.autoidle_mask = OMAP3430_AUTO_IVA2_DPLL_MASK,
|
|
|
.idlest_reg = OMAP_CM_REGADDR(OMAP3430_IVA2_MOD, OMAP3430_CM_IDLEST_PLL),
|
|
|
+ .idlest_mask = OMAP3430_ST_IVA2_CLK_MASK,
|
|
|
+ .max_multiplier = OMAP3_MAX_DPLL_MULT,
|
|
|
+ .min_divider = 1,
|
|
|
+ .max_divider = OMAP3_MAX_DPLL_DIV,
|
|
|
+};
|
|
|
+
|
|
|
+static struct clk dpll2_ck;
|
|
|
+
|
|
|
+static struct clk_hw_omap dpll2_ck_hw = {
|
|
|
+ .hw = {
|
|
|
+ .clk = &dpll2_ck,
|
|
|
+ },
|
|
|
+ .ops = &clkhwops_omap3_dpll,
|
|
|
+ .dpll_data = &dpll2_dd,
|
|
|
+ .clkdm_name = "dpll2_clkdm",
|
|
|
+};
|
|
|
+
|
|
|
+DEFINE_STRUCT_CLK(dpll2_ck, dpll3_ck_parent_names, dpll1_ck_ops);
|
|
|
+
|
|
|
+DEFINE_CLK_DIVIDER(dpll2_fck, "core_ck", &core_ck, 0x0,
|
|
|
+ OMAP_CM_REGADDR(OMAP3430_IVA2_MOD, OMAP3430_CM_CLKSEL1_PLL),
|
|
|
+ OMAP3430_IVA2_CLK_SRC_SHIFT, OMAP3430_IVA2_CLK_SRC_WIDTH,
|
|
|
+ CLK_DIVIDER_ONE_BASED, NULL);
|
|
|
+
|
|
|
+DEFINE_CLK_DIVIDER(dpll2_m2_ck, "dpll2_ck", &dpll2_ck, 0x0,
|
|
|
+ OMAP_CM_REGADDR(OMAP3430_IVA2_MOD, OMAP3430_CM_CLKSEL2_PLL),
|
|
|
+ OMAP3430_IVA2_DPLL_CLKOUT_DIV_SHIFT,
|
|
|
+ OMAP3430_IVA2_DPLL_CLKOUT_DIV_WIDTH,
|
|
|
+ CLK_DIVIDER_ONE_BASED, NULL);
|
|
|
+
|
|
|
+DEFINE_CLK_DIVIDER(dpll3_m3_ck, "dpll3_ck", &dpll3_ck, 0x0,
|
|
|
+ OMAP_CM_REGADDR(OMAP3430_EMU_MOD, CM_CLKSEL1),
|
|
|
+ OMAP3430_DIV_DPLL3_SHIFT, OMAP3430_DIV_DPLL3_WIDTH,
|
|
|
+ CLK_DIVIDER_ONE_BASED, NULL);
|
|
|
+
|
|
|
+static struct clk dpll3_m3x2_ck;
|
|
|
+
|
|
|
+static const char *dpll3_m3x2_ck_parent_names[] = {
|
|
|
+ "dpll3_m3_ck",
|
|
|
+};
|
|
|
+
|
|
|
+static struct clk_hw_omap dpll3_m3x2_ck_hw = {
|
|
|
+ .hw = {
|
|
|
+ .clk = &dpll3_m3x2_ck,
|
|
|
+ },
|
|
|
+ .ops = &clkhwops_wait,
|
|
|
+ .enable_reg = OMAP_CM_REGADDR(PLL_MOD, CM_CLKEN),
|
|
|
+ .enable_bit = OMAP3430_PWRDN_EMU_CORE_SHIFT,
|
|
|
+ .flags = INVERT_ENABLE,
|
|
|
+ .clkdm_name = "dpll3_clkdm",
|
|
|
+};
|
|
|
+
|
|
|
+DEFINE_STRUCT_CLK(dpll3_m3x2_ck, dpll3_m3x2_ck_parent_names, dpll4_m5x2_ck_ops);
|
|
|
+
|
|
|
+static struct clk dpll3_m3x2_ck_3630 = {
|
|
|
+ .name = "dpll3_m3x2_ck",
|
|
|
+ .hw = &dpll3_m3x2_ck_hw.hw,
|
|
|
+ .parent_names = dpll3_m3x2_ck_parent_names,
|
|
|
+ .num_parents = ARRAY_SIZE(dpll3_m3x2_ck_parent_names),
|
|
|
+ .ops = &dpll4_m5x2_ck_3630_ops,
|
|
|
+};
|
|
|
+
|
|
|
+DEFINE_CLK_FIXED_FACTOR(dpll3_x2_ck, "dpll3_ck", &dpll3_ck, 0x0, 2, 1);
|
|
|
+
|
|
|
+DEFINE_CLK_DIVIDER(dpll4_m4_ck, "dpll4_ck", &dpll4_ck, 0x0,
|
|
|
+ OMAP_CM_REGADDR(OMAP3430_DSS_MOD, CM_CLKSEL),
|
|
|
+ OMAP3430_CLKSEL_DSS1_SHIFT, OMAP3630_CLKSEL_DSS1_WIDTH,
|
|
|
+ CLK_DIVIDER_ONE_BASED, NULL);
|
|
|
+
|
|
|
+static struct clk dpll4_m4x2_ck;
|
|
|
+
|
|
|
+static const char *dpll4_m4x2_ck_parent_names[] = {
|
|
|
+ "dpll4_m4_ck",
|
|
|
+};
|
|
|
+
|
|
|
+static struct clk_hw_omap dpll4_m4x2_ck_hw = {
|
|
|
+ .hw = {
|
|
|
+ .clk = &dpll4_m4x2_ck,
|
|
|
+ },
|
|
|
+ .ops = &clkhwops_wait,
|
|
|
+ .enable_reg = OMAP_CM_REGADDR(PLL_MOD, CM_CLKEN),
|
|
|
+ .enable_bit = OMAP3430_PWRDN_DSS1_SHIFT,
|
|
|
+ .flags = INVERT_ENABLE,
|
|
|
+ .clkdm_name = "dpll4_clkdm",
|
|
|
+};
|
|
|
+
|
|
|
+DEFINE_STRUCT_CLK(dpll4_m4x2_ck, dpll4_m4x2_ck_parent_names, dpll4_m5x2_ck_ops);
|
|
|
+
|
|
|
+static struct clk dpll4_m4x2_ck_3630 = {
|
|
|
+ .name = "dpll4_m4x2_ck",
|
|
|
+ .hw = &dpll4_m4x2_ck_hw.hw,
|
|
|
+ .parent_names = dpll4_m4x2_ck_parent_names,
|
|
|
+ .num_parents = ARRAY_SIZE(dpll4_m4x2_ck_parent_names),
|
|
|
+ .ops = &dpll4_m5x2_ck_3630_ops,
|
|
|
+};
|
|
|
+
|
|
|
+DEFINE_CLK_DIVIDER(dpll4_m6_ck, "dpll4_ck", &dpll4_ck, 0x0,
|
|
|
+ OMAP_CM_REGADDR(OMAP3430_EMU_MOD, CM_CLKSEL1),
|
|
|
+ OMAP3430_DIV_DPLL4_SHIFT, OMAP3630_DIV_DPLL4_WIDTH,
|
|
|
+ CLK_DIVIDER_ONE_BASED, NULL);
|
|
|
+
|
|
|
+static struct clk dpll4_m6x2_ck;
|
|
|
+
|
|
|
+static const char *dpll4_m6x2_ck_parent_names[] = {
|
|
|
+ "dpll4_m6_ck",
|
|
|
+};
|
|
|
+
|
|
|
+static struct clk_hw_omap dpll4_m6x2_ck_hw = {
|
|
|
+ .hw = {
|
|
|
+ .clk = &dpll4_m6x2_ck,
|
|
|
+ },
|
|
|
+ .ops = &clkhwops_wait,
|
|
|
+ .enable_reg = OMAP_CM_REGADDR(PLL_MOD, CM_CLKEN),
|
|
|
+ .enable_bit = OMAP3430_PWRDN_EMU_PERIPH_SHIFT,
|
|
|
+ .flags = INVERT_ENABLE,
|
|
|
+ .clkdm_name = "dpll4_clkdm",
|
|
|
+};
|
|
|
+
|
|
|
+DEFINE_STRUCT_CLK(dpll4_m6x2_ck, dpll4_m6x2_ck_parent_names, dpll4_m5x2_ck_ops);
|
|
|
+
|
|
|
+static struct clk dpll4_m6x2_ck_3630 = {
|
|
|
+ .name = "dpll4_m6x2_ck",
|
|
|
+ .hw = &dpll4_m6x2_ck_hw.hw,
|
|
|
+ .parent_names = dpll4_m6x2_ck_parent_names,
|
|
|
+ .num_parents = ARRAY_SIZE(dpll4_m6x2_ck_parent_names),
|
|
|
+ .ops = &dpll4_m5x2_ck_3630_ops,
|
|
|
+};
|
|
|
+
|
|
|
+DEFINE_CLK_FIXED_FACTOR(dpll4_x2_ck, "dpll4_ck", &dpll4_ck, 0x0, 2, 1);
|
|
|
+
|
|
|
+static struct dpll_data dpll5_dd = {
|
|
|
+ .mult_div1_reg = OMAP_CM_REGADDR(PLL_MOD, OMAP3430ES2_CM_CLKSEL4),
|
|
|
+ .mult_mask = OMAP3430ES2_PERIPH2_DPLL_MULT_MASK,
|
|
|
+ .div1_mask = OMAP3430ES2_PERIPH2_DPLL_DIV_MASK,
|
|
|
+ .clk_bypass = &sys_ck,
|
|
|
+ .clk_ref = &sys_ck,
|
|
|
+ .freqsel_mask = OMAP3430ES2_PERIPH2_DPLL_FREQSEL_MASK,
|
|
|
+ .control_reg = OMAP_CM_REGADDR(PLL_MOD, OMAP3430ES2_CM_CLKEN2),
|
|
|
+ .enable_mask = OMAP3430ES2_EN_PERIPH2_DPLL_MASK,
|
|
|
+ .modes = (1 << DPLL_LOW_POWER_STOP) | (1 << DPLL_LOCKED),
|
|
|
+ .auto_recal_bit = OMAP3430ES2_EN_PERIPH2_DPLL_DRIFTGUARD_SHIFT,
|
|
|
+ .recal_en_bit = OMAP3430ES2_SND_PERIPH_DPLL_RECAL_EN_SHIFT,
|
|
|
+ .recal_st_bit = OMAP3430ES2_SND_PERIPH_DPLL_ST_SHIFT,
|
|
|
+ .autoidle_reg = OMAP_CM_REGADDR(PLL_MOD, OMAP3430ES2_CM_AUTOIDLE2_PLL),
|
|
|
+ .autoidle_mask = OMAP3430ES2_AUTO_PERIPH2_DPLL_MASK,
|
|
|
+ .idlest_reg = OMAP_CM_REGADDR(PLL_MOD, CM_IDLEST2),
|
|
|
+ .idlest_mask = OMAP3430ES2_ST_PERIPH2_CLK_MASK,
|
|
|
+ .max_multiplier = OMAP3_MAX_DPLL_MULT,
|
|
|
+ .min_divider = 1,
|
|
|
+ .max_divider = OMAP3_MAX_DPLL_DIV,
|
|
|
+};
|
|
|
+
|
|
|
+static struct clk dpll5_ck;
|
|
|
+
|
|
|
+static struct clk_hw_omap dpll5_ck_hw = {
|
|
|
+ .hw = {
|
|
|
+ .clk = &dpll5_ck,
|
|
|
+ },
|
|
|
+ .ops = &clkhwops_omap3_dpll,
|
|
|
+ .dpll_data = &dpll5_dd,
|
|
|
+ .clkdm_name = "dpll5_clkdm",
|
|
|
+};
|
|
|
+
|
|
|
+DEFINE_STRUCT_CLK(dpll5_ck, dpll3_ck_parent_names, dpll1_ck_ops);
|
|
|
+
|
|
|
+DEFINE_CLK_DIVIDER(dpll5_m2_ck, "dpll5_ck", &dpll5_ck, 0x0,
|
|
|
+ OMAP_CM_REGADDR(PLL_MOD, OMAP3430ES2_CM_CLKSEL5),
|
|
|
+ OMAP3430ES2_DIV_120M_SHIFT, OMAP3430ES2_DIV_120M_WIDTH,
|
|
|
+ CLK_DIVIDER_ONE_BASED, NULL);
|
|
|
+
|
|
|
+static struct clk dss1_alwon_fck_3430es1;
|
|
|
+
|
|
|
+static const char *dss1_alwon_fck_3430es1_parent_names[] = {
|
|
|
+ "dpll4_m4x2_ck",
|
|
|
+};
|
|
|
+
|
|
|
+static struct clk_hw_omap dss1_alwon_fck_3430es1_hw = {
|
|
|
+ .hw = {
|
|
|
+ .clk = &dss1_alwon_fck_3430es1,
|
|
|
+ },
|
|
|
+ .enable_reg = OMAP_CM_REGADDR(OMAP3430_DSS_MOD, CM_FCLKEN),
|
|
|
+ .enable_bit = OMAP3430_EN_DSS1_SHIFT,
|
|
|
+ .clkdm_name = "dss_clkdm",
|
|
|
+};
|
|
|
+
|
|
|
+DEFINE_STRUCT_CLK(dss1_alwon_fck_3430es1, dss1_alwon_fck_3430es1_parent_names,
|