|
@@ -177,6 +177,8 @@ static struct rockchip_clk_branch rk3036_clk_branches[] __initdata = {
|
|
|
GATE(0, "gpll_armclk", "gpll", CLK_IGNORE_UNUSED,
|
|
|
RK2928_CLKGATE_CON(0), 6, GFLAGS),
|
|
|
|
|
|
+ FACTOR(0, "xin12m", "xin24m", 0, 1, 2),
|
|
|
+
|
|
|
/*
|
|
|
* Clock-Architecture Diagram 2
|
|
|
*/
|
|
@@ -187,6 +189,7 @@ static struct rockchip_clk_branch rk3036_clk_branches[] __initdata = {
|
|
|
RK2928_CLKGATE_CON(0), 8, GFLAGS),
|
|
|
COMPOSITE_NOGATE(0, "ddrphy2x", mux_ddrphy_p, CLK_IGNORE_UNUSED,
|
|
|
RK2928_CLKSEL_CON(26), 8, 1, MFLAGS, 0, 2, DFLAGS | CLK_DIVIDER_POWER_OF_TWO),
|
|
|
+ FACTOR(0, "ddrphy", "ddrphy2x", 0, 1, 2),
|
|
|
|
|
|
COMPOSITE_NOMUX(0, "pclk_dbg", "armclk", CLK_IGNORE_UNUSED,
|
|
|
RK2928_CLKSEL_CON(1), 0, 4, DFLAGS | CLK_DIVIDER_READ_ONLY,
|
|
@@ -263,6 +266,8 @@ static struct rockchip_clk_branch rk3036_clk_branches[] __initdata = {
|
|
|
COMPOSITE(0, "aclk_vcodec", mux_pll_src_3plls_p, 0,
|
|
|
RK2928_CLKSEL_CON(32), 14, 2, MFLAGS, 8, 5, DFLAGS,
|
|
|
RK2928_CLKGATE_CON(3), 11, GFLAGS),
|
|
|
+ FACTOR_GATE(HCLK_VCODEC, "hclk_vcodec", "aclk_vcodec", 0, 1, 4,
|
|
|
+ RK2928_CLKGATE_CON(3), 12, GFLAGS),
|
|
|
|
|
|
COMPOSITE(0, "aclk_hvec", mux_pll_src_3plls_p, 0,
|
|
|
RK2928_CLKSEL_CON(20), 0, 2, MFLAGS, 2, 5, DFLAGS,
|
|
@@ -351,6 +356,7 @@ static struct rockchip_clk_branch rk3036_clk_branches[] __initdata = {
|
|
|
COMPOSITE_NOMUX(SCLK_MAC, "mac_clk", "mac_clk_ref", 0,
|
|
|
RK2928_CLKSEL_CON(21), 9, 5, DFLAGS,
|
|
|
RK2928_CLKGATE_CON(2), 6, GFLAGS),
|
|
|
+ FACTOR(0, "sclk_macref_out", "hclk_peri_src", 0, 1, 2),
|
|
|
|
|
|
MUX(SCLK_HDMI, "dclk_hdmi", mux_dclk_p, 0,
|
|
|
RK2928_CLKSEL_CON(31), 0, 1, MFLAGS),
|
|
@@ -379,8 +385,6 @@ static struct rockchip_clk_branch rk3036_clk_branches[] __initdata = {
|
|
|
GATE(HCLK_VIO_BUS, "hclk_vio_bus", "hclk_disp_pre", CLK_IGNORE_UNUSED, RK2928_CLKGATE_CON(6), 12, GFLAGS),
|
|
|
GATE(HCLK_LCDC, "hclk_lcdc", "hclk_disp_pre", 0, RK2928_CLKGATE_CON(9), 5, GFLAGS),
|
|
|
|
|
|
- /* hclk_video gates */
|
|
|
- GATE(HCLK_VCODEC, "hclk_vcodec", "hclk_vcodec_pre", 0, RK2928_CLKGATE_CON(3), 12, GFLAGS),
|
|
|
|
|
|
/* xin24m gates */
|
|
|
GATE(SCLK_PVTM_CORE, "sclk_pvtm_core", "xin24m", 0, RK2928_CLKGATE_CON(10), 0, GFLAGS),
|
|
@@ -444,34 +448,11 @@ static void __init rk3036_clk_init(struct device_node *np)
|
|
|
|
|
|
rockchip_clk_init(np, reg_base, CLK_NR_CLKS);
|
|
|
|
|
|
- /* xin12m is created by an cru-internal divider */
|
|
|
- clk = clk_register_fixed_factor(NULL, "xin12m", "xin24m", 0, 1, 2);
|
|
|
- if (IS_ERR(clk))
|
|
|
- pr_warn("%s: could not register clock xin12m: %ld\n",
|
|
|
- __func__, PTR_ERR(clk));
|
|
|
-
|
|
|
clk = clk_register_fixed_factor(NULL, "usb480m", "xin24m", 0, 20, 1);
|
|
|
if (IS_ERR(clk))
|
|
|
pr_warn("%s: could not register clock usb480m: %ld\n",
|
|
|
__func__, PTR_ERR(clk));
|
|
|
|
|
|
- clk = clk_register_fixed_factor(NULL, "ddrphy", "ddrphy2x", 0, 1, 2);
|
|
|
- if (IS_ERR(clk))
|
|
|
- pr_warn("%s: could not register clock ddrphy: %ld\n",
|
|
|
- __func__, PTR_ERR(clk));
|
|
|
-
|
|
|
- clk = clk_register_fixed_factor(NULL, "hclk_vcodec_pre",
|
|
|
- "aclk_vcodec", 0, 1, 4);
|
|
|
- if (IS_ERR(clk))
|
|
|
- pr_warn("%s: could not register clock hclk_vcodec_pre: %ld\n",
|
|
|
- __func__, PTR_ERR(clk));
|
|
|
-
|
|
|
- clk = clk_register_fixed_factor(NULL, "sclk_macref_out",
|
|
|
- "hclk_peri_src", 0, 1, 2);
|
|
|
- if (IS_ERR(clk))
|
|
|
- pr_warn("%s: could not register clock sclk_macref_out: %ld\n",
|
|
|
- __func__, PTR_ERR(clk));
|
|
|
-
|
|
|
rockchip_clk_register_plls(rk3036_pll_clks,
|
|
|
ARRAY_SIZE(rk3036_pll_clks),
|
|
|
RK3036_GRF_SOC_STATUS0);
|