|
@@ -278,23 +278,26 @@ static void __init spear320_clk_init(void)
|
|
|
clk_register_clkdev(clk, NULL, "a9400000.i2s");
|
|
|
|
|
|
clk = clk_register_mux(NULL, "i2s_ref_clk", i2s_ref_parents,
|
|
|
- ARRAY_SIZE(i2s_ref_parents), 0, SPEAR320_CONTROL_REG,
|
|
|
- I2S_REF_PCLK_SHIFT, I2S_REF_PCLK_MASK, 0, &_lock);
|
|
|
+ ARRAY_SIZE(i2s_ref_parents), CLK_SET_RATE_PARENT,
|
|
|
+ SPEAR320_CONTROL_REG, I2S_REF_PCLK_SHIFT,
|
|
|
+ I2S_REF_PCLK_MASK, 0, &_lock);
|
|
|
clk_register_clkdev(clk, "i2s_ref_clk", NULL);
|
|
|
|
|
|
- clk = clk_register_fixed_factor(NULL, "i2s_sclk", "i2s_ref_clk", 0, 1,
|
|
|
+ clk = clk_register_fixed_factor(NULL, "i2s_sclk", "i2s_ref_clk",
|
|
|
+ CLK_SET_RATE_PARENT, 1,
|
|
|
4);
|
|
|
clk_register_clkdev(clk, "i2s_sclk", NULL);
|
|
|
|
|
|
clk = clk_register_mux(NULL, "rs485_clk", uartx_parents,
|
|
|
- ARRAY_SIZE(uartx_parents), 0, SPEAR320_EXT_CTRL_REG,
|
|
|
- SPEAR320_RS485_PCLK_SHIFT, SPEAR320_UARTX_PCLK_MASK, 0,
|
|
|
- &_lock);
|
|
|
+ ARRAY_SIZE(uartx_parents), CLK_SET_RATE_PARENT,
|
|
|
+ SPEAR320_EXT_CTRL_REG, SPEAR320_RS485_PCLK_SHIFT,
|
|
|
+ SPEAR320_UARTX_PCLK_MASK, 0, &_lock);
|
|
|
clk_register_clkdev(clk, NULL, "a9300000.serial");
|
|
|
|
|
|
clk = clk_register_mux(NULL, "sdhci_clk", sdhci_parents,
|
|
|
- ARRAY_SIZE(sdhci_parents), 0, SPEAR320_CONTROL_REG,
|
|
|
- SDHCI_PCLK_SHIFT, SDHCI_PCLK_MASK, 0, &_lock);
|
|
|
+ ARRAY_SIZE(sdhci_parents), CLK_SET_RATE_PARENT,
|
|
|
+ SPEAR320_CONTROL_REG, SDHCI_PCLK_SHIFT, SDHCI_PCLK_MASK,
|
|
|
+ 0, &_lock);
|
|
|
clk_register_clkdev(clk, NULL, "70000000.sdhci");
|
|
|
|
|
|
clk = clk_register_mux(NULL, "smii_pclk", smii0_parents,
|
|
@@ -306,38 +309,39 @@ static void __init spear320_clk_init(void)
|
|
|
clk_register_clkdev(clk, NULL, "smii");
|
|
|
|
|
|
clk = clk_register_mux(NULL, "uart1_clk", uartx_parents,
|
|
|
- ARRAY_SIZE(uartx_parents), 0, SPEAR320_CONTROL_REG,
|
|
|
- UART1_PCLK_SHIFT, UART1_PCLK_MASK, 0, &_lock);
|
|
|
+ ARRAY_SIZE(uartx_parents), CLK_SET_RATE_PARENT,
|
|
|
+ SPEAR320_CONTROL_REG, UART1_PCLK_SHIFT, UART1_PCLK_MASK,
|
|
|
+ 0, &_lock);
|
|
|
clk_register_clkdev(clk, NULL, "a3000000.serial");
|
|
|
|
|
|
clk = clk_register_mux(NULL, "uart2_clk", uartx_parents,
|
|
|
- ARRAY_SIZE(uartx_parents), 0, SPEAR320_EXT_CTRL_REG,
|
|
|
- SPEAR320_UART2_PCLK_SHIFT, SPEAR320_UARTX_PCLK_MASK, 0,
|
|
|
- &_lock);
|
|
|
+ ARRAY_SIZE(uartx_parents), CLK_SET_RATE_PARENT,
|
|
|
+ SPEAR320_EXT_CTRL_REG, SPEAR320_UART2_PCLK_SHIFT,
|
|
|
+ SPEAR320_UARTX_PCLK_MASK, 0, &_lock);
|
|
|
clk_register_clkdev(clk, NULL, "a4000000.serial");
|
|
|
|
|
|
clk = clk_register_mux(NULL, "uart3_clk", uartx_parents,
|
|
|
- ARRAY_SIZE(uartx_parents), 0, SPEAR320_EXT_CTRL_REG,
|
|
|
- SPEAR320_UART3_PCLK_SHIFT, SPEAR320_UARTX_PCLK_MASK, 0,
|
|
|
- &_lock);
|
|
|
+ ARRAY_SIZE(uartx_parents), CLK_SET_RATE_PARENT,
|
|
|
+ SPEAR320_EXT_CTRL_REG, SPEAR320_UART3_PCLK_SHIFT,
|
|
|
+ SPEAR320_UARTX_PCLK_MASK, 0, &_lock);
|
|
|
clk_register_clkdev(clk, NULL, "a9100000.serial");
|
|
|
|
|
|
clk = clk_register_mux(NULL, "uart4_clk", uartx_parents,
|
|
|
- ARRAY_SIZE(uartx_parents), 0, SPEAR320_EXT_CTRL_REG,
|
|
|
- SPEAR320_UART4_PCLK_SHIFT, SPEAR320_UARTX_PCLK_MASK, 0,
|
|
|
- &_lock);
|
|
|
+ ARRAY_SIZE(uartx_parents), CLK_SET_RATE_PARENT,
|
|
|
+ SPEAR320_EXT_CTRL_REG, SPEAR320_UART4_PCLK_SHIFT,
|
|
|
+ SPEAR320_UARTX_PCLK_MASK, 0, &_lock);
|
|
|
clk_register_clkdev(clk, NULL, "a9200000.serial");
|
|
|
|
|
|
clk = clk_register_mux(NULL, "uart5_clk", uartx_parents,
|
|
|
- ARRAY_SIZE(uartx_parents), 0, SPEAR320_EXT_CTRL_REG,
|
|
|
- SPEAR320_UART5_PCLK_SHIFT, SPEAR320_UARTX_PCLK_MASK, 0,
|
|
|
- &_lock);
|
|
|
+ ARRAY_SIZE(uartx_parents), CLK_SET_RATE_PARENT,
|
|
|
+ SPEAR320_EXT_CTRL_REG, SPEAR320_UART5_PCLK_SHIFT,
|
|
|
+ SPEAR320_UARTX_PCLK_MASK, 0, &_lock);
|
|
|
clk_register_clkdev(clk, NULL, "60000000.serial");
|
|
|
|
|
|
clk = clk_register_mux(NULL, "uart6_clk", uartx_parents,
|
|
|
- ARRAY_SIZE(uartx_parents), 0, SPEAR320_EXT_CTRL_REG,
|
|
|
- SPEAR320_UART6_PCLK_SHIFT, SPEAR320_UARTX_PCLK_MASK, 0,
|
|
|
- &_lock);
|
|
|
+ ARRAY_SIZE(uartx_parents), CLK_SET_RATE_PARENT,
|
|
|
+ SPEAR320_EXT_CTRL_REG, SPEAR320_UART6_PCLK_SHIFT,
|
|
|
+ SPEAR320_UARTX_PCLK_MASK, 0, &_lock);
|
|
|
clk_register_clkdev(clk, NULL, "60100000.serial");
|
|
|
}
|
|
|
#else
|
|
@@ -386,7 +390,8 @@ void __init spear3xx_clk_init(void)
|
|
|
clk_register_clkdev(clk1, "pll2_clk", NULL);
|
|
|
|
|
|
/* clock derived from pll1 clk */
|
|
|
- clk = clk_register_fixed_factor(NULL, "cpu_clk", "pll1_clk", 0, 1, 1);
|
|
|
+ clk = clk_register_fixed_factor(NULL, "cpu_clk", "pll1_clk",
|
|
|
+ CLK_SET_RATE_PARENT, 1, 1);
|
|
|
clk_register_clkdev(clk, "cpu_clk", NULL);
|
|
|
|
|
|
clk = clk_register_divider(NULL, "ahb_clk", "pll1_clk",
|
|
@@ -401,12 +406,14 @@ void __init spear3xx_clk_init(void)
|
|
|
clk_register_clkdev(clk1, "uart_syn_gclk", NULL);
|
|
|
|
|
|
clk = clk_register_mux(NULL, "uart0_mclk", uart0_parents,
|
|
|
- ARRAY_SIZE(uart0_parents), 0, PERIP_CLK_CFG,
|
|
|
- UART_CLK_SHIFT, UART_CLK_MASK, 0, &_lock);
|
|
|
+ ARRAY_SIZE(uart0_parents), CLK_SET_RATE_PARENT,
|
|
|
+ PERIP_CLK_CFG, UART_CLK_SHIFT, UART_CLK_MASK, 0,
|
|
|
+ &_lock);
|
|
|
clk_register_clkdev(clk, "uart0_mclk", NULL);
|
|
|
|
|
|
- clk = clk_register_gate(NULL, "uart0", "uart0_mclk", 0, PERIP1_CLK_ENB,
|
|
|
- UART_CLK_ENB, 0, &_lock);
|
|
|
+ clk = clk_register_gate(NULL, "uart0", "uart0_mclk",
|
|
|
+ CLK_SET_RATE_PARENT, PERIP1_CLK_ENB, UART_CLK_ENB, 0,
|
|
|
+ &_lock);
|
|
|
clk_register_clkdev(clk, NULL, "d0000000.serial");
|
|
|
|
|
|
clk = clk_register_aux("firda_syn_clk", "firda_syn_gclk", "pll1_clk", 0,
|
|
@@ -416,40 +423,44 @@ void __init spear3xx_clk_init(void)
|
|
|
clk_register_clkdev(clk1, "firda_syn_gclk", NULL);
|
|
|
|
|
|
clk = clk_register_mux(NULL, "firda_mclk", firda_parents,
|
|
|
- ARRAY_SIZE(firda_parents), 0, PERIP_CLK_CFG,
|
|
|
- FIRDA_CLK_SHIFT, FIRDA_CLK_MASK, 0, &_lock);
|
|
|
+ ARRAY_SIZE(firda_parents), CLK_SET_RATE_PARENT,
|
|
|
+ PERIP_CLK_CFG, FIRDA_CLK_SHIFT, FIRDA_CLK_MASK, 0,
|
|
|
+ &_lock);
|
|
|
clk_register_clkdev(clk, "firda_mclk", NULL);
|
|
|
|
|
|
- clk = clk_register_gate(NULL, "firda_clk", "firda_mclk", 0,
|
|
|
- PERIP1_CLK_ENB, FIRDA_CLK_ENB, 0, &_lock);
|
|
|
+ clk = clk_register_gate(NULL, "firda_clk", "firda_mclk",
|
|
|
+ CLK_SET_RATE_PARENT, PERIP1_CLK_ENB, FIRDA_CLK_ENB, 0,
|
|
|
+ &_lock);
|
|
|
clk_register_clkdev(clk, NULL, "firda");
|
|
|
|
|
|
/* gpt clocks */
|
|
|
clk_register_gpt("gpt0_syn_clk", "pll1_clk", 0, PRSC0_CLK_CFG, gpt_rtbl,
|
|
|
ARRAY_SIZE(gpt_rtbl), &_lock);
|
|
|
clk = clk_register_mux(NULL, "gpt0_clk", gpt0_parents,
|
|
|
- ARRAY_SIZE(gpt0_parents), 0, PERIP_CLK_CFG,
|
|
|
- GPT0_CLK_SHIFT, GPT_CLK_MASK, 0, &_lock);
|
|
|
+ ARRAY_SIZE(gpt0_parents), CLK_SET_RATE_PARENT,
|
|
|
+ PERIP_CLK_CFG, GPT0_CLK_SHIFT, GPT_CLK_MASK, 0, &_lock);
|
|
|
clk_register_clkdev(clk, NULL, "gpt0");
|
|
|
|
|
|
clk_register_gpt("gpt1_syn_clk", "pll1_clk", 0, PRSC1_CLK_CFG, gpt_rtbl,
|
|
|
ARRAY_SIZE(gpt_rtbl), &_lock);
|
|
|
clk = clk_register_mux(NULL, "gpt1_mclk", gpt1_parents,
|
|
|
- ARRAY_SIZE(gpt1_parents), 0, PERIP_CLK_CFG,
|
|
|
- GPT1_CLK_SHIFT, GPT_CLK_MASK, 0, &_lock);
|
|
|
+ ARRAY_SIZE(gpt1_parents), CLK_SET_RATE_PARENT,
|
|
|
+ PERIP_CLK_CFG, GPT1_CLK_SHIFT, GPT_CLK_MASK, 0, &_lock);
|
|
|
clk_register_clkdev(clk, "gpt1_mclk", NULL);
|
|
|
- clk = clk_register_gate(NULL, "gpt1_clk", "gpt1_mclk", 0,
|
|
|
- PERIP1_CLK_ENB, GPT1_CLK_ENB, 0, &_lock);
|
|
|
+ clk = clk_register_gate(NULL, "gpt1_clk", "gpt1_mclk",
|
|
|
+ CLK_SET_RATE_PARENT, PERIP1_CLK_ENB, GPT1_CLK_ENB, 0,
|
|
|
+ &_lock);
|
|
|
clk_register_clkdev(clk, NULL, "gpt1");
|
|
|
|
|
|
clk_register_gpt("gpt2_syn_clk", "pll1_clk", 0, PRSC2_CLK_CFG, gpt_rtbl,
|
|
|
ARRAY_SIZE(gpt_rtbl), &_lock);
|
|
|
clk = clk_register_mux(NULL, "gpt2_mclk", gpt2_parents,
|
|
|
- ARRAY_SIZE(gpt2_parents), 0, PERIP_CLK_CFG,
|
|
|
- GPT2_CLK_SHIFT, GPT_CLK_MASK, 0, &_lock);
|
|
|
+ ARRAY_SIZE(gpt2_parents), CLK_SET_RATE_PARENT,
|
|
|
+ PERIP_CLK_CFG, GPT2_CLK_SHIFT, GPT_CLK_MASK, 0, &_lock);
|
|
|
clk_register_clkdev(clk, "gpt2_mclk", NULL);
|
|
|
- clk = clk_register_gate(NULL, "gpt2_clk", "gpt2_mclk", 0,
|
|
|
- PERIP1_CLK_ENB, GPT2_CLK_ENB, 0, &_lock);
|
|
|
+ clk = clk_register_gate(NULL, "gpt2_clk", "gpt2_mclk",
|
|
|
+ CLK_SET_RATE_PARENT, PERIP1_CLK_ENB, GPT2_CLK_ENB, 0,
|
|
|
+ &_lock);
|
|
|
clk_register_clkdev(clk, NULL, "gpt2");
|
|
|
|
|
|
/* general synths clocks */
|
|
@@ -587,20 +598,24 @@ void __init spear3xx_clk_init(void)
|
|
|
RAS_CLK_ENB, RAS_48M_CLK_ENB, 0, &_lock);
|
|
|
clk_register_clkdev(clk, "ras_pll3_clk", NULL);
|
|
|
|
|
|
- clk = clk_register_gate(NULL, "ras_syn0_gclk", "gen0_syn_gclk", 0,
|
|
|
- RAS_CLK_ENB, RAS_SYNT0_CLK_ENB, 0, &_lock);
|
|
|
+ clk = clk_register_gate(NULL, "ras_syn0_gclk", "gen0_syn_gclk",
|
|
|
+ CLK_SET_RATE_PARENT, RAS_CLK_ENB, RAS_SYNT0_CLK_ENB, 0,
|
|
|
+ &_lock);
|
|
|
clk_register_clkdev(clk, "ras_syn0_gclk", NULL);
|
|
|
|
|
|
- clk = clk_register_gate(NULL, "ras_syn1_gclk", "gen1_syn_gclk", 0,
|
|
|
- RAS_CLK_ENB, RAS_SYNT1_CLK_ENB, 0, &_lock);
|
|
|
+ clk = clk_register_gate(NULL, "ras_syn1_gclk", "gen1_syn_gclk",
|
|
|
+ CLK_SET_RATE_PARENT, RAS_CLK_ENB, RAS_SYNT1_CLK_ENB, 0,
|
|
|
+ &_lock);
|
|
|
clk_register_clkdev(clk, "ras_syn1_gclk", NULL);
|
|
|
|
|
|
- clk = clk_register_gate(NULL, "ras_syn2_gclk", "gen2_syn_gclk", 0,
|
|
|
- RAS_CLK_ENB, RAS_SYNT2_CLK_ENB, 0, &_lock);
|
|
|
+ clk = clk_register_gate(NULL, "ras_syn2_gclk", "gen2_syn_gclk",
|
|
|
+ CLK_SET_RATE_PARENT, RAS_CLK_ENB, RAS_SYNT2_CLK_ENB, 0,
|
|
|
+ &_lock);
|
|
|
clk_register_clkdev(clk, "ras_syn2_gclk", NULL);
|
|
|
|
|
|
- clk = clk_register_gate(NULL, "ras_syn3_gclk", "gen3_syn_gclk", 0,
|
|
|
- RAS_CLK_ENB, RAS_SYNT3_CLK_ENB, 0, &_lock);
|
|
|
+ clk = clk_register_gate(NULL, "ras_syn3_gclk", "gen3_syn_gclk",
|
|
|
+ CLK_SET_RATE_PARENT, RAS_CLK_ENB, RAS_SYNT3_CLK_ENB, 0,
|
|
|
+ &_lock);
|
|
|
clk_register_clkdev(clk, "ras_syn3_gclk", NULL);
|
|
|
|
|
|
if (of_machine_is_compatible("st,spear300"))
|