|
@@ -585,3 +585,193 @@ DEFINE_CLK_OMAP_MUX_GATE(clkout2_src_ck, "core_clkdm",
|
|
|
NULL, clkout2_src_ck_parent_names, clkout2_src_ck_ops);
|
|
|
|
|
|
static const struct clksel_rate omap_48m_cm96m_rates[] = {
|
|
|
+ { .div = 2, .val = 0, .flags = RATE_IN_3XXX },
|
|
|
+ { .div = 0 }
|
|
|
+};
|
|
|
+
|
|
|
+static const struct clksel_rate omap_48m_alt_rates[] = {
|
|
|
+ { .div = 1, .val = 1, .flags = RATE_IN_3XXX },
|
|
|
+ { .div = 0 }
|
|
|
+};
|
|
|
+
|
|
|
+static const struct clksel omap_48m_clksel[] = {
|
|
|
+ { .parent = &cm_96m_fck, .rates = omap_48m_cm96m_rates },
|
|
|
+ { .parent = &sys_altclk, .rates = omap_48m_alt_rates },
|
|
|
+ { .parent = NULL },
|
|
|
+};
|
|
|
+
|
|
|
+static const char *omap_48m_fck_parent_names[] = {
|
|
|
+ "cm_96m_fck", "sys_altclk",
|
|
|
+};
|
|
|
+
|
|
|
+static struct clk omap_48m_fck;
|
|
|
+
|
|
|
+static const struct clk_ops omap_48m_fck_ops = {
|
|
|
+ .recalc_rate = &omap2_clksel_recalc,
|
|
|
+ .get_parent = &omap2_clksel_find_parent_index,
|
|
|
+ .set_parent = &omap2_clksel_set_parent,
|
|
|
+};
|
|
|
+
|
|
|
+static struct clk_hw_omap omap_48m_fck_hw = {
|
|
|
+ .hw = {
|
|
|
+ .clk = &omap_48m_fck,
|
|
|
+ },
|
|
|
+ .clksel = omap_48m_clksel,
|
|
|
+ .clksel_reg = OMAP_CM_REGADDR(PLL_MOD, CM_CLKSEL1),
|
|
|
+ .clksel_mask = OMAP3430_SOURCE_48M_MASK,
|
|
|
+};
|
|
|
+
|
|
|
+DEFINE_STRUCT_CLK(omap_48m_fck, omap_48m_fck_parent_names, omap_48m_fck_ops);
|
|
|
+
|
|
|
+DEFINE_CLK_FIXED_FACTOR(omap_12m_fck, "omap_48m_fck", &omap_48m_fck, 0x0, 1, 4);
|
|
|
+
|
|
|
+static struct clk core_12m_fck;
|
|
|
+
|
|
|
+static const char *core_12m_fck_parent_names[] = {
|
|
|
+ "omap_12m_fck",
|
|
|
+};
|
|
|
+
|
|
|
+DEFINE_STRUCT_CLK_HW_OMAP(core_12m_fck, "core_l4_clkdm");
|
|
|
+DEFINE_STRUCT_CLK(core_12m_fck, core_12m_fck_parent_names, core_l4_ick_ops);
|
|
|
+
|
|
|
+static struct clk core_48m_fck;
|
|
|
+
|
|
|
+static const char *core_48m_fck_parent_names[] = {
|
|
|
+ "omap_48m_fck",
|
|
|
+};
|
|
|
+
|
|
|
+DEFINE_STRUCT_CLK_HW_OMAP(core_48m_fck, "core_l4_clkdm");
|
|
|
+DEFINE_STRUCT_CLK(core_48m_fck, core_48m_fck_parent_names, core_l4_ick_ops);
|
|
|
+
|
|
|
+static const char *omap_96m_fck_parent_names[] = {
|
|
|
+ "cm_96m_fck", "sys_ck",
|
|
|
+};
|
|
|
+
|
|
|
+DEFINE_CLK_MUX(omap_96m_fck, omap_96m_fck_parent_names, NULL, 0x0,
|
|
|
+ OMAP_CM_REGADDR(PLL_MOD, CM_CLKSEL1),
|
|
|
+ OMAP3430_SOURCE_96M_SHIFT, OMAP3430_SOURCE_96M_WIDTH, 0x0, NULL);
|
|
|
+
|
|
|
+static struct clk core_96m_fck;
|
|
|
+
|
|
|
+static const char *core_96m_fck_parent_names[] = {
|
|
|
+ "omap_96m_fck",
|
|
|
+};
|
|
|
+
|
|
|
+DEFINE_STRUCT_CLK_HW_OMAP(core_96m_fck, "core_l4_clkdm");
|
|
|
+DEFINE_STRUCT_CLK(core_96m_fck, core_96m_fck_parent_names, core_l4_ick_ops);
|
|
|
+
|
|
|
+static struct clk core_l3_ick;
|
|
|
+
|
|
|
+static const char *core_l3_ick_parent_names[] = {
|
|
|
+ "l3_ick",
|
|
|
+};
|
|
|
+
|
|
|
+DEFINE_STRUCT_CLK_HW_OMAP(core_l3_ick, "core_l3_clkdm");
|
|
|
+DEFINE_STRUCT_CLK(core_l3_ick, core_l3_ick_parent_names, core_l4_ick_ops);
|
|
|
+
|
|
|
+DEFINE_CLK_FIXED_FACTOR(dpll3_m2x2_ck, "dpll3_m2_ck", &dpll3_m2_ck, 0x0, 2, 1);
|
|
|
+
|
|
|
+static struct clk corex2_fck;
|
|
|
+
|
|
|
+static const char *corex2_fck_parent_names[] = {
|
|
|
+ "dpll3_m2x2_ck",
|
|
|
+};
|
|
|
+
|
|
|
+DEFINE_STRUCT_CLK_HW_OMAP(corex2_fck, NULL);
|
|
|
+DEFINE_STRUCT_CLK(corex2_fck, corex2_fck_parent_names, core_ck_ops);
|
|
|
+
|
|
|
+static struct clk cpefuse_fck;
|
|
|
+
|
|
|
+static struct clk_hw_omap cpefuse_fck_hw = {
|
|
|
+ .hw = {
|
|
|
+ .clk = &cpefuse_fck,
|
|
|
+ },
|
|
|
+ .enable_reg = OMAP_CM_REGADDR(CORE_MOD, OMAP3430ES2_CM_FCLKEN3),
|
|
|
+ .enable_bit = OMAP3430ES2_EN_CPEFUSE_SHIFT,
|
|
|
+ .clkdm_name = "core_l4_clkdm",
|
|
|
+};
|
|
|
+
|
|
|
+DEFINE_STRUCT_CLK(cpefuse_fck, dpll3_ck_parent_names, aes2_ick_ops);
|
|
|
+
|
|
|
+static struct clk csi2_96m_fck;
|
|
|
+
|
|
|
+static const char *csi2_96m_fck_parent_names[] = {
|
|
|
+ "core_96m_fck",
|
|
|
+};
|
|
|
+
|
|
|
+static struct clk_hw_omap csi2_96m_fck_hw = {
|
|
|
+ .hw = {
|
|
|
+ .clk = &csi2_96m_fck,
|
|
|
+ },
|
|
|
+ .enable_reg = OMAP_CM_REGADDR(OMAP3430_CAM_MOD, CM_FCLKEN),
|
|
|
+ .enable_bit = OMAP3430_EN_CSI2_SHIFT,
|
|
|
+ .clkdm_name = "cam_clkdm",
|
|
|
+};
|
|
|
+
|
|
|
+DEFINE_STRUCT_CLK(csi2_96m_fck, csi2_96m_fck_parent_names, aes2_ick_ops);
|
|
|
+
|
|
|
+static struct clk d2d_26m_fck;
|
|
|
+
|
|
|
+static struct clk_hw_omap d2d_26m_fck_hw = {
|
|
|
+ .hw = {
|
|
|
+ .clk = &d2d_26m_fck,
|
|
|
+ },
|
|
|
+ .ops = &clkhwops_wait,
|
|
|
+ .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
|
|
|
+ .enable_bit = OMAP3430ES1_EN_D2D_SHIFT,
|
|
|
+ .clkdm_name = "d2d_clkdm",
|
|
|
+};
|
|
|
+
|
|
|
+DEFINE_STRUCT_CLK(d2d_26m_fck, dpll3_ck_parent_names, aes2_ick_ops);
|
|
|
+
|
|
|
+static struct clk des1_ick;
|
|
|
+
|
|
|
+static struct clk_hw_omap des1_ick_hw = {
|
|
|
+ .hw = {
|
|
|
+ .clk = &des1_ick,
|
|
|
+ },
|
|
|
+ .ops = &clkhwops_iclk_wait,
|
|
|
+ .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2),
|
|
|
+ .enable_bit = OMAP3430_EN_DES1_SHIFT,
|
|
|
+};
|
|
|
+
|
|
|
+DEFINE_STRUCT_CLK(des1_ick, aes1_ick_parent_names, aes1_ick_ops);
|
|
|
+
|
|
|
+static struct clk des2_ick;
|
|
|
+
|
|
|
+static struct clk_hw_omap des2_ick_hw = {
|
|
|
+ .hw = {
|
|
|
+ .clk = &des2_ick,
|
|
|
+ },
|
|
|
+ .ops = &clkhwops_iclk_wait,
|
|
|
+ .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
|
|
|
+ .enable_bit = OMAP3430_EN_DES2_SHIFT,
|
|
|
+ .clkdm_name = "core_l4_clkdm",
|
|
|
+};
|
|
|
+
|
|
|
+DEFINE_STRUCT_CLK(des2_ick, aes2_ick_parent_names, aes2_ick_ops);
|
|
|
+
|
|
|
+DEFINE_CLK_DIVIDER(dpll1_fck, "core_ck", &core_ck, 0x0,
|
|
|
+ OMAP_CM_REGADDR(MPU_MOD, OMAP3430_CM_CLKSEL1_PLL),
|
|
|
+ OMAP3430_MPU_CLK_SRC_SHIFT, OMAP3430_MPU_CLK_SRC_WIDTH,
|
|
|
+ CLK_DIVIDER_ONE_BASED, NULL);
|
|
|
+
|
|
|
+static struct clk dpll2_fck;
|
|
|
+
|
|
|
+static struct dpll_data dpll2_dd = {
|
|
|
+ .mult_div1_reg = OMAP_CM_REGADDR(OMAP3430_IVA2_MOD, OMAP3430_CM_CLKSEL1_PLL),
|
|
|
+ .mult_mask = OMAP3430_IVA2_DPLL_MULT_MASK,
|
|
|
+ .div1_mask = OMAP3430_IVA2_DPLL_DIV_MASK,
|
|
|
+ .clk_bypass = &dpll2_fck,
|
|
|
+ .clk_ref = &sys_ck,
|
|
|
+ .freqsel_mask = OMAP3430_IVA2_DPLL_FREQSEL_MASK,
|
|
|
+ .control_reg = OMAP_CM_REGADDR(OMAP3430_IVA2_MOD, OMAP3430_CM_CLKEN_PLL),
|
|
|
+ .enable_mask = OMAP3430_EN_IVA2_DPLL_MASK,
|
|
|
+ .modes = ((1 << DPLL_LOW_POWER_STOP) | (1 << DPLL_LOCKED) |
|
|
|
+ (1 << DPLL_LOW_POWER_BYPASS)),
|
|
|
+ .auto_recal_bit = OMAP3430_EN_IVA2_DPLL_DRIFTGUARD_SHIFT,
|
|
|
+ .recal_en_bit = OMAP3430_PRM_IRQENABLE_MPU_IVA2_DPLL_RECAL_EN_SHIFT,
|
|
|
+ .recal_st_bit = OMAP3430_PRM_IRQSTATUS_MPU_IVA2_DPLL_ST_SHIFT,
|
|
|
+ .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),
|