|
@@ -398,3 +398,95 @@ static const struct clk_ops dpll4_m5x2_ck_ops = {
|
|
|
.disable = &omap2_dflt_clk_disable,
|
|
|
.is_enabled = &omap2_dflt_clk_is_enabled,
|
|
|
.recalc_rate = &omap3_clkoutx2_recalc,
|
|
|
+};
|
|
|
+
|
|
|
+static const struct clk_ops dpll4_m5x2_ck_3630_ops = {
|
|
|
+ .init = &omap2_init_clk_clkdm,
|
|
|
+ .enable = &omap36xx_pwrdn_clk_enable_with_hsdiv_restore,
|
|
|
+ .disable = &omap2_dflt_clk_disable,
|
|
|
+ .recalc_rate = &omap3_clkoutx2_recalc,
|
|
|
+};
|
|
|
+
|
|
|
+static struct clk_hw_omap dpll4_m5x2_ck_hw = {
|
|
|
+ .hw = {
|
|
|
+ .clk = &dpll4_m5x2_ck,
|
|
|
+ },
|
|
|
+ .ops = &clkhwops_wait,
|
|
|
+ .enable_reg = OMAP_CM_REGADDR(PLL_MOD, CM_CLKEN),
|
|
|
+ .enable_bit = OMAP3430_PWRDN_CAM_SHIFT,
|
|
|
+ .flags = INVERT_ENABLE,
|
|
|
+ .clkdm_name = "dpll4_clkdm",
|
|
|
+};
|
|
|
+
|
|
|
+DEFINE_STRUCT_CLK(dpll4_m5x2_ck, dpll4_m5x2_ck_parent_names, dpll4_m5x2_ck_ops);
|
|
|
+
|
|
|
+static struct clk dpll4_m5x2_ck_3630 = {
|
|
|
+ .name = "dpll4_m5x2_ck",
|
|
|
+ .hw = &dpll4_m5x2_ck_hw.hw,
|
|
|
+ .parent_names = dpll4_m5x2_ck_parent_names,
|
|
|
+ .num_parents = ARRAY_SIZE(dpll4_m5x2_ck_parent_names),
|
|
|
+ .ops = &dpll4_m5x2_ck_3630_ops,
|
|
|
+};
|
|
|
+
|
|
|
+static struct clk cam_mclk;
|
|
|
+
|
|
|
+static const char *cam_mclk_parent_names[] = {
|
|
|
+ "dpll4_m5x2_ck",
|
|
|
+};
|
|
|
+
|
|
|
+static struct clk_hw_omap cam_mclk_hw = {
|
|
|
+ .hw = {
|
|
|
+ .clk = &cam_mclk,
|
|
|
+ },
|
|
|
+ .enable_reg = OMAP_CM_REGADDR(OMAP3430_CAM_MOD, CM_FCLKEN),
|
|
|
+ .enable_bit = OMAP3430_EN_CAM_SHIFT,
|
|
|
+ .clkdm_name = "cam_clkdm",
|
|
|
+};
|
|
|
+
|
|
|
+DEFINE_STRUCT_CLK(cam_mclk, cam_mclk_parent_names, aes2_ick_ops);
|
|
|
+
|
|
|
+static const struct clksel_rate clkout2_src_core_rates[] = {
|
|
|
+ { .div = 1, .val = 0, .flags = RATE_IN_3XXX },
|
|
|
+ { .div = 0 }
|
|
|
+};
|
|
|
+
|
|
|
+static const struct clksel_rate clkout2_src_sys_rates[] = {
|
|
|
+ { .div = 1, .val = 1, .flags = RATE_IN_3XXX },
|
|
|
+ { .div = 0 }
|
|
|
+};
|
|
|
+
|
|
|
+static const struct clksel_rate clkout2_src_96m_rates[] = {
|
|
|
+ { .div = 1, .val = 2, .flags = RATE_IN_3XXX },
|
|
|
+ { .div = 0 }
|
|
|
+};
|
|
|
+
|
|
|
+DEFINE_CLK_DIVIDER(dpll4_m2_ck, "dpll4_ck", &dpll4_ck, 0x0,
|
|
|
+ OMAP_CM_REGADDR(PLL_MOD, OMAP3430_CM_CLKSEL3),
|
|
|
+ OMAP3430_DIV_96M_SHIFT, OMAP3630_DIV_96M_WIDTH,
|
|
|
+ CLK_DIVIDER_ONE_BASED, NULL);
|
|
|
+
|
|
|
+static struct clk dpll4_m2x2_ck;
|
|
|
+
|
|
|
+static const char *dpll4_m2x2_ck_parent_names[] = {
|
|
|
+ "dpll4_m2_ck",
|
|
|
+};
|
|
|
+
|
|
|
+static struct clk_hw_omap dpll4_m2x2_ck_hw = {
|
|
|
+ .hw = {
|
|
|
+ .clk = &dpll4_m2x2_ck,
|
|
|
+ },
|
|
|
+ .ops = &clkhwops_wait,
|
|
|
+ .enable_reg = OMAP_CM_REGADDR(PLL_MOD, CM_CLKEN),
|
|
|
+ .enable_bit = OMAP3430_PWRDN_96M_SHIFT,
|
|
|
+ .flags = INVERT_ENABLE,
|
|
|
+ .clkdm_name = "dpll4_clkdm",
|
|
|
+};
|
|
|
+
|
|
|
+DEFINE_STRUCT_CLK(dpll4_m2x2_ck, dpll4_m2x2_ck_parent_names, dpll4_m5x2_ck_ops);
|
|
|
+
|
|
|
+static struct clk dpll4_m2x2_ck_3630 = {
|
|
|
+ .name = "dpll4_m2x2_ck",
|
|
|
+ .hw = &dpll4_m2x2_ck_hw.hw,
|
|
|
+ .parent_names = dpll4_m2x2_ck_parent_names,
|
|
|
+ .num_parents = ARRAY_SIZE(dpll4_m2x2_ck_parent_names),
|
|
|
+ .ops = &dpll4_m5x2_ck_3630_ops,
|