]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
Merge tag 'clk' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc
authorLinus Torvalds <torvalds@linux-foundation.org>
Tue, 24 Jul 2012 00:51:03 +0000 (17:51 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Tue, 24 Jul 2012 00:51:03 +0000 (17:51 -0700)
Pull arm-soc clk changes from Arnd Bergmann:
 "Clock support is moving to the clk subsystem.  These tegra, omap and
  imx changes are for code that is still platform specific and not (yet)
  part of that subsystem."

Fix up conflicts in arch/arm/mach-{imx/clk-imx51-imx53.c,omap2/Makefile}

* tag 'clk' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc: (23 commits)
  ARM: imx: clk-imx31: Fix clock id for rnga driver
  ARM: imx: add missing item to the list of clock event modes
  ARM: i.MX5x CSPI: Fixed clock name for CSPI
  ARM: i.MX5x clocks: Fix GPT clocks
  ARM: i.MX5x clocks: Fix parent for PWM clocks
  ARM: i.MX5x clocks: Add EPIT support
  ARM: mx27: Reenable silicon version print
  ARM: clk-imx27: Fix rtc clock id
  ARM: tegra: Provide clock for only one PWM controller
  ARM: tegra: Fix PWM clock programming
  ARM: OMAP3+: clock33xx: Add AM33XX clock tree data
  ARM: OMAP3+: clock: Move common clksel_rate & clock data to common file
  ARM: tegra: dma: rename driver name for clock to "tegra-apbdma"
  ARM: tegra: Remove second instance of uart clk
  crypto: add clk_prepare/clk_unprepare
  ASoC: tegra: add clk_prepare/clk_unprepare
  staging: nvec: add clk_prepare/clk_unprepare
  spi/tegra: add clk_prepare/clk_unprepare
  Input: tegra-kbc - add clk_prepare/clk_unprepare
  USB: ehci-tegra: add clk_prepare/clk_unprepare
  ...

33 files changed:
arch/arm/mach-imx/clk-imx27.c
arch/arm/mach-imx/clk-imx31.c
arch/arm/mach-imx/clk-imx51-imx53.c
arch/arm/mach-omap2/Makefile
arch/arm/mach-omap2/clock.h
arch/arm/mach-omap2/clock33xx_data.c [new file with mode: 0644]
arch/arm/mach-omap2/clock3xxx_data.c
arch/arm/mach-omap2/clock44xx_data.c
arch/arm/mach-omap2/clock_common_data.c
arch/arm/mach-omap2/io.c
arch/arm/mach-tegra/cpu-tegra.c
arch/arm/mach-tegra/dma.c
arch/arm/mach-tegra/pcie.c
arch/arm/mach-tegra/powergate.c
arch/arm/mach-tegra/tegra2_clocks.c
arch/arm/mach-tegra/tegra30_clocks.c
arch/arm/mach-tegra/timer.c
arch/arm/mach-tegra/usb_phy.c
arch/arm/plat-mxc/devices/platform-spi_imx.c
arch/arm/plat-mxc/time.c
arch/arm/plat-omap/include/plat/clkdev_omap.h
drivers/crypto/tegra-aes.c
drivers/i2c/busses/i2c-tegra.c
drivers/input/keyboard/tegra-kbc.c
drivers/mmc/host/sdhci-tegra.c
drivers/spi/spi-tegra.c
drivers/staging/nvec/nvec.c
drivers/usb/host/ehci-tegra.c
sound/soc/tegra/tegra20_i2s.c
sound/soc/tegra/tegra20_spdif.c
sound/soc/tegra/tegra30_ahub.c
sound/soc/tegra/tegra30_i2s.c
sound/soc/tegra/tegra_asoc_utils.c

index 295cbd7c08dcd9df383b8fd7eb5a1843083e895a..7aa6313fb1671bbf975d6cf6407aad3ecee66498 100644 (file)
@@ -256,7 +256,7 @@ int __init mx27_clocks_init(unsigned long fref)
        clk_register_clkdev(clk[gpio_ipg_gate], "gpio", NULL);
        clk_register_clkdev(clk[brom_ahb_gate], "brom", NULL);
        clk_register_clkdev(clk[ata_ahb_gate], "ata", NULL);
-       clk_register_clkdev(clk[rtc_ipg_gate], "rtc", NULL);
+       clk_register_clkdev(clk[rtc_ipg_gate], NULL, "mxc_rtc");
        clk_register_clkdev(clk[scc_ipg_gate], "scc", NULL);
        clk_register_clkdev(clk[cpu_div], "cpu", NULL);
        clk_register_clkdev(clk[emi_ahb_gate], "emi_ahb" , NULL);
@@ -267,6 +267,8 @@ int __init mx27_clocks_init(unsigned long fref)
 
        clk_prepare_enable(clk[emi_ahb_gate]);
 
+       imx_print_silicon_rev("i.MX27", mx27_revision());
+
        return 0;
 }
 
index f87a48fc74e18e3f0001b61bea1f9d8954783ab1..8e19e70f90f97f121b6379945ebeadc2ae2284ab 100644 (file)
@@ -124,7 +124,7 @@ int __init mx31_clocks_init(unsigned long fref)
        clk_register_clkdev(clk[cspi3_gate], NULL, "imx31-cspi.2");
        clk_register_clkdev(clk[pwm_gate], "pwm", NULL);
        clk_register_clkdev(clk[wdog_gate], NULL, "imx2-wdt.0");
-       clk_register_clkdev(clk[rtc_gate], "rtc", NULL);
+       clk_register_clkdev(clk[rtc_gate], NULL, "mxc_rtc");
        clk_register_clkdev(clk[epit1_gate], "epit", NULL);
        clk_register_clkdev(clk[epit2_gate], "epit", NULL);
        clk_register_clkdev(clk[nfc], NULL, "mxc_nand.0");
@@ -166,7 +166,7 @@ int __init mx31_clocks_init(unsigned long fref)
        clk_register_clkdev(clk[firi_gate], "firi", NULL);
        clk_register_clkdev(clk[ata_gate], NULL, "pata_imx");
        clk_register_clkdev(clk[rtic_gate], "rtic", NULL);
-       clk_register_clkdev(clk[rng_gate], "rng", NULL);
+       clk_register_clkdev(clk[rng_gate], NULL, "mxc_rnga");
        clk_register_clkdev(clk[sdma_gate], NULL, "imx31-sdma");
        clk_register_clkdev(clk[iim_gate], "iim", NULL);
 
index 4b89fae14a5a272d6c32b0ed34e2d598bae686e2..f6086693ebd2aa665e29fc7a5d5623caeb0d3d53 100644 (file)
@@ -58,7 +58,7 @@ enum imx5_clks {
        tve_s, uart1_ipg_gate, uart1_per_gate, uart2_ipg_gate,
        uart2_per_gate, uart3_ipg_gate, uart3_per_gate, i2c1_gate, i2c2_gate,
        gpt_ipg_gate, pwm1_ipg_gate, pwm1_hf_gate, pwm2_ipg_gate, pwm2_hf_gate,
-       gpt_gate, fec_gate, usboh3_per_gate, esdhc1_ipg_gate, esdhc2_ipg_gate,
+       gpt_hf_gate, fec_gate, usboh3_per_gate, esdhc1_ipg_gate, esdhc2_ipg_gate,
        esdhc3_ipg_gate, esdhc4_ipg_gate, ssi1_ipg_gate, ssi2_ipg_gate,
        ssi3_ipg_gate, ecspi1_ipg_gate, ecspi1_per_gate, ecspi2_ipg_gate,
        ecspi2_per_gate, cspi_ipg_gate, sdma_gate, emi_slow_gate, ipu_s,
@@ -81,6 +81,7 @@ enum imx5_clks {
        ssi1_root_podf, ssi2_root_pred, ssi2_root_podf, ssi_ext1_pred,
        ssi_ext1_podf, ssi_ext2_pred, ssi_ext2_podf, ssi1_root_gate,
        ssi2_root_gate, ssi3_root_gate, ssi_ext1_gate, ssi_ext2_gate,
+       epit1_ipg_gate, epit1_hf_gate, epit2_ipg_gate, epit2_hf_gate,
        clk_max
 };
 
@@ -167,12 +168,12 @@ static void __init mx5_clocks_common_init(unsigned long rate_ckil,
        clk[uart3_per_gate] = imx_clk_gate2("uart3_per_gate", "uart_root", MXC_CCM_CCGR1, 16);
        clk[i2c1_gate] = imx_clk_gate2("i2c1_gate", "per_root", MXC_CCM_CCGR1, 18);
        clk[i2c2_gate] = imx_clk_gate2("i2c2_gate", "per_root", MXC_CCM_CCGR1, 20);
-       clk[gpt_ipg_gate] = imx_clk_gate2("gpt_ipg_gate", "ipg", MXC_CCM_CCGR2, 20);
        clk[pwm1_ipg_gate] = imx_clk_gate2("pwm1_ipg_gate", "ipg", MXC_CCM_CCGR2, 10);
-       clk[pwm1_hf_gate] = imx_clk_gate2("pwm1_hf_gate", "ipg", MXC_CCM_CCGR2, 12);
+       clk[pwm1_hf_gate] = imx_clk_gate2("pwm1_hf_gate", "per_root", MXC_CCM_CCGR2, 12);
        clk[pwm2_ipg_gate] = imx_clk_gate2("pwm2_ipg_gate", "ipg", MXC_CCM_CCGR2, 14);
-       clk[pwm2_hf_gate] = imx_clk_gate2("pwm2_hf_gate", "ipg", MXC_CCM_CCGR2, 16);
-       clk[gpt_gate] = imx_clk_gate2("gpt_gate", "per_root", MXC_CCM_CCGR2, 18);
+       clk[pwm2_hf_gate] = imx_clk_gate2("pwm2_hf_gate", "per_root", MXC_CCM_CCGR2, 16);
+       clk[gpt_ipg_gate] = imx_clk_gate2("gpt_ipg_gate", "ipg", MXC_CCM_CCGR2, 18);
+       clk[gpt_hf_gate] = imx_clk_gate2("gpt_hf_gate", "per_root", MXC_CCM_CCGR2, 20);
        clk[fec_gate] = imx_clk_gate2("fec_gate", "ipg", MXC_CCM_CCGR2, 24);
        clk[usboh3_gate] = imx_clk_gate2("usboh3_gate", "ipg", MXC_CCM_CCGR2, 26);
        clk[usboh3_per_gate] = imx_clk_gate2("usboh3_per_gate", "usboh3_podf", MXC_CCM_CCGR2, 28);
@@ -226,13 +227,17 @@ static void __init mx5_clocks_common_init(unsigned long rate_ckil,
        clk[ssi3_root_gate] = imx_clk_gate2("ssi3_root_gate", "ssi3_root_sel", MXC_CCM_CCGR3, 26);
        clk[ssi_ext1_gate] = imx_clk_gate2("ssi_ext1_gate", "ssi_ext1_com_sel", MXC_CCM_CCGR3, 28);
        clk[ssi_ext2_gate] = imx_clk_gate2("ssi_ext2_gate", "ssi_ext2_com_sel", MXC_CCM_CCGR3, 30);
+       clk[epit1_ipg_gate] = imx_clk_gate2("epit1_ipg_gate", "ipg", MXC_CCM_CCGR2, 2);
+       clk[epit1_hf_gate] = imx_clk_gate2("epit1_hf_gate", "per_root", MXC_CCM_CCGR2, 4);
+       clk[epit2_ipg_gate] = imx_clk_gate2("epit2_ipg_gate", "ipg", MXC_CCM_CCGR2, 6);
+       clk[epit2_hf_gate] = imx_clk_gate2("epit2_hf_gate", "per_root", MXC_CCM_CCGR2, 8);
 
        for (i = 0; i < ARRAY_SIZE(clk); i++)
                if (IS_ERR(clk[i]))
                        pr_err("i.MX5 clk %d: register failed with %ld\n",
                                i, PTR_ERR(clk[i]));
        
-       clk_register_clkdev(clk[gpt_gate], "per", "imx-gpt.0");
+       clk_register_clkdev(clk[gpt_hf_gate], "per", "imx-gpt.0");
        clk_register_clkdev(clk[gpt_ipg_gate], "ipg", "imx-gpt.0");
        clk_register_clkdev(clk[uart1_per_gate], "per", "imx21-uart.0");
        clk_register_clkdev(clk[uart1_ipg_gate], "ipg", "imx21-uart.0");
@@ -248,7 +253,7 @@ static void __init mx5_clocks_common_init(unsigned long rate_ckil,
        clk_register_clkdev(clk[ecspi1_ipg_gate], "ipg", "imx51-ecspi.0");
        clk_register_clkdev(clk[ecspi2_per_gate], "per", "imx51-ecspi.1");
        clk_register_clkdev(clk[ecspi2_ipg_gate], "ipg", "imx51-ecspi.1");
-       clk_register_clkdev(clk[cspi_ipg_gate], NULL, "imx51-cspi.0");
+       clk_register_clkdev(clk[cspi_ipg_gate], NULL, "imx35-cspi.2");
        clk_register_clkdev(clk[pwm1_ipg_gate], "pwm", "mxc_pwm.0");
        clk_register_clkdev(clk[pwm2_ipg_gate], "pwm", "mxc_pwm.1");
        clk_register_clkdev(clk[i2c1_gate], NULL, "imx-i2c.0");
@@ -280,6 +285,10 @@ static void __init mx5_clocks_common_init(unsigned long rate_ckil,
        clk_register_clkdev(clk[tve_gate], NULL, "imx-tve.0");
        clk_register_clkdev(clk[ipu_di1_gate], "di1", "imx-tve.0");
        clk_register_clkdev(clk[gpc_dvfs], "gpc_dvfs", NULL);
+       clk_register_clkdev(clk[epit1_ipg_gate], "ipg", "imx-epit.0");
+       clk_register_clkdev(clk[epit1_hf_gate], "per", "imx-epit.0");
+       clk_register_clkdev(clk[epit2_ipg_gate], "ipg", "imx-epit.1");
+       clk_register_clkdev(clk[epit2_hf_gate], "per", "imx-epit.1");
 
        /* Set SDHC parents to be PLL2 */
        clk_set_parent(clk[esdhc_a_sel], clk[pll2_sw]);
index b7a4ab65faca336ae9f13bae1c504427291f0700..f6a24b3f9c4f7b4dd3e381eb3ff7823444d99e70 100644 (file)
@@ -172,6 +172,7 @@ obj-$(CONFIG_ARCH_OMAP3)            += clkt_iclk.o
 obj-$(CONFIG_ARCH_OMAP4)               += $(clock-common) clock44xx_data.o
 obj-$(CONFIG_ARCH_OMAP4)               += dpll3xxx.o dpll44xx.o
 obj-$(CONFIG_SOC_AM33XX)               += $(clock-common) dpll3xxx.o
+obj-$(CONFIG_SOC_AM33XX)               += clock33xx_data.o
 obj-$(CONFIG_SOC_OMAP5)                        += $(clock-common)
 obj-$(CONFIG_SOC_OMAP5)                        += dpll3xxx.o dpll44xx.o
 
index a1bb23a23351262600d242873d71536c9e4de134..35ec5f3d9a7361ee0b60647002a2a5251880580f 100644 (file)
@@ -155,4 +155,18 @@ extern const struct clkops clkops_omap3_noncore_dpll_ops;
 extern const struct clkops clkops_omap3_core_dpll_ops;
 extern const struct clkops clkops_omap4_dpllmx_ops;
 
+/* clksel_rate blocks shared between OMAP44xx and AM33xx */
+extern const struct clksel_rate div_1_0_rates[];
+extern const struct clksel_rate div_1_1_rates[];
+extern const struct clksel_rate div_1_2_rates[];
+extern const struct clksel_rate div_1_3_rates[];
+extern const struct clksel_rate div_1_4_rates[];
+extern const struct clksel_rate div31_1to31_rates[];
+
+/* clocks shared between various OMAP SoCs */
+extern struct clk virt_19200000_ck;
+extern struct clk virt_26000000_ck;
+
+extern int am33xx_clk_init(void);
+
 #endif
diff --git a/arch/arm/mach-omap2/clock33xx_data.c b/arch/arm/mach-omap2/clock33xx_data.c
new file mode 100644 (file)
index 0000000..25bbcc7
--- /dev/null
@@ -0,0 +1,1105 @@
+/*
+ * AM33XX Clock data
+ *
+ * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com/
+ * Vaibhav Hiremath <hvaibhav@ti.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation version 2.
+ *
+ * This program is distributed "as is" WITHOUT ANY WARRANTY of any
+ * kind, whether express or implied; without even the implied warranty
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ */
+
+#include <linux/kernel.h>
+#include <linux/list.h>
+#include <linux/clk.h>
+#include <plat/clkdev_omap.h>
+#include <plat/am33xx.h>
+
+#include "iomap.h"
+#include "control.h"
+#include "clock.h"
+#include "cm.h"
+#include "cm33xx.h"
+#include "cm-regbits-33xx.h"
+#include "prm.h"
+
+/* Maximum DPLL multiplier, divider values for AM33XX */
+#define AM33XX_MAX_DPLL_MULT           2047
+#define AM33XX_MAX_DPLL_DIV            128
+
+/* Modulemode control */
+#define AM33XX_MODULEMODE_HWCTRL       0
+#define AM33XX_MODULEMODE_SWCTRL       1
+
+/* TRM ERRATA: Timer 3 & 6 default parent (TCLKIN) may not be always
+ *    physically present, in such a case HWMOD enabling of
+ *    clock would be failure with default parent. And timer
+ *    probe thinks clock is already enabled, this leads to
+ *    crash upon accessing timer 3 & 6 registers in probe.
+ *    Fix by setting parent of both these timers to master
+ *    oscillator clock.
+ */
+static inline void am33xx_init_timer_parent(struct clk *clk)
+{
+       omap2_clksel_set_parent(clk, clk->parent);
+}
+
+/* Root clocks */
+
+/* RTC 32k */
+static struct clk clk_32768_ck = {
+       .name           = "clk_32768_ck",
+       .clkdm_name     = "l4_rtc_clkdm",
+       .rate           = 32768,
+       .ops            = &clkops_null,
+};
+
+/* On-Chip 32KHz RC OSC */
+static struct clk clk_rc32k_ck = {
+       .name           = "clk_rc32k_ck",
+       .rate           = 32000,
+       .ops            = &clkops_null,
+};
+
+/* Crystal input clks */
+static struct clk virt_24000000_ck = {
+       .name           = "virt_24000000_ck",
+       .rate           = 24000000,
+       .ops            = &clkops_null,
+};
+
+static struct clk virt_25000000_ck = {
+       .name           = "virt_25000000_ck",
+       .rate           = 25000000,
+       .ops            = &clkops_null,
+};
+
+/* Oscillator clock */
+/* 19.2, 24, 25 or 26 MHz */
+static const struct clksel sys_clkin_sel[] = {
+       { .parent = &virt_19200000_ck, .rates = div_1_0_rates },
+       { .parent = &virt_24000000_ck, .rates = div_1_1_rates },
+       { .parent = &virt_25000000_ck, .rates = div_1_2_rates },
+       { .parent = &virt_26000000_ck, .rates = div_1_3_rates },
+       { .parent = NULL },
+};
+
+/* External clock - 12 MHz */
+static struct clk tclkin_ck = {
+       .name           = "tclkin_ck",
+       .rate           = 12000000,
+       .ops            = &clkops_null,
+};
+
+/*
+ * sys_clk in: input to the dpll and also used as funtional clock for,
+ *   adc_tsc, smartreflex0-1, timer1-7, mcasp0-1, dcan0-1, cefuse
+ *
+ */
+static struct clk sys_clkin_ck = {
+       .name           = "sys_clkin_ck",
+       .parent         = &virt_24000000_ck,
+       .init           = &omap2_init_clksel_parent,
+       .clksel_reg     = AM33XX_CTRL_REGADDR(AM33XX_CONTROL_STATUS),
+       .clksel_mask    = AM33XX_CONTROL_STATUS_SYSBOOT1_MASK,
+       .clksel         = sys_clkin_sel,
+       .ops            = &clkops_null,
+       .recalc         = &omap2_clksel_recalc,
+};
+
+/* DPLL_CORE */
+static struct dpll_data dpll_core_dd = {
+       .mult_div1_reg  = AM33XX_CM_CLKSEL_DPLL_CORE,
+       .clk_bypass     = &sys_clkin_ck,
+       .clk_ref        = &sys_clkin_ck,
+       .control_reg    = AM33XX_CM_CLKMODE_DPLL_CORE,
+       .modes          = (1 << DPLL_LOW_POWER_BYPASS) | (1 << DPLL_LOCKED),
+       .idlest_reg     = AM33XX_CM_IDLEST_DPLL_CORE,
+       .mult_mask      = AM33XX_DPLL_MULT_MASK,
+       .div1_mask      = AM33XX_DPLL_DIV_MASK,
+       .enable_mask    = AM33XX_DPLL_EN_MASK,
+       .idlest_mask    = AM33XX_ST_DPLL_CLK_MASK,
+       .max_multiplier = AM33XX_MAX_DPLL_MULT,
+       .max_divider    = AM33XX_MAX_DPLL_DIV,
+       .min_divider    = 1,
+};
+
+/* CLKDCOLDO output */
+static struct clk dpll_core_ck = {
+       .name           = "dpll_core_ck",
+       .parent         = &sys_clkin_ck,
+       .dpll_data      = &dpll_core_dd,
+       .init           = &omap2_init_dpll_parent,
+       .ops            = &clkops_omap3_core_dpll_ops,
+       .recalc         = &omap3_dpll_recalc,
+};
+
+static struct clk dpll_core_x2_ck = {
+       .name           = "dpll_core_x2_ck",
+       .parent         = &dpll_core_ck,
+       .flags          = CLOCK_CLKOUTX2,
+       .ops            = &clkops_null,
+       .recalc         = &omap3_clkoutx2_recalc,
+};
+
+
+static const struct clksel dpll_core_m4_div[] = {
+       { .parent = &dpll_core_x2_ck, .rates = div31_1to31_rates },
+       { .parent = NULL },
+};
+
+static struct clk dpll_core_m4_ck = {
+       .name           = "dpll_core_m4_ck",
+       .parent         = &dpll_core_x2_ck,
+       .init           = &omap2_init_clksel_parent,
+       .clksel         = dpll_core_m4_div,
+       .clksel_reg     = AM33XX_CM_DIV_M4_DPLL_CORE,
+       .clksel_mask    = AM33XX_HSDIVIDER_CLKOUT1_DIV_MASK,
+       .ops            = &clkops_null,
+       .recalc         = &omap2_clksel_recalc,
+       .round_rate     = &omap2_clksel_round_rate,
+       .set_rate       = &omap2_clksel_set_rate,
+};
+
+static const struct clksel dpll_core_m5_div[] = {
+       { .parent = &dpll_core_x2_ck, .rates = div31_1to31_rates },
+       { .parent = NULL },
+};
+
+static struct clk dpll_core_m5_ck = {
+       .name           = "dpll_core_m5_ck",
+       .parent         = &dpll_core_x2_ck,
+       .init           = &omap2_init_clksel_parent,
+       .clksel         = dpll_core_m5_div,
+       .clksel_reg     = AM33XX_CM_DIV_M5_DPLL_CORE,
+       .clksel_mask    = AM33XX_HSDIVIDER_CLKOUT2_DIV_MASK,
+       .ops            = &clkops_null,
+       .recalc         = &omap2_clksel_recalc,
+       .round_rate     = &omap2_clksel_round_rate,
+       .set_rate       = &omap2_clksel_set_rate,
+};
+
+static const struct clksel dpll_core_m6_div[] = {
+       { .parent = &dpll_core_x2_ck, .rates = div31_1to31_rates },
+       { .parent = NULL },
+};
+
+static struct clk dpll_core_m6_ck = {
+       .name           = "dpll_core_m6_ck",
+       .parent         = &dpll_core_x2_ck,
+       .init           = &omap2_init_clksel_parent,
+       .clksel         = dpll_core_m6_div,
+       .clksel_reg     = AM33XX_CM_DIV_M6_DPLL_CORE,
+       .clksel_mask    = AM33XX_HSDIVIDER_CLKOUT3_DIV_MASK,
+       .ops            = &clkops_null,
+       .recalc         = &omap2_clksel_recalc,
+       .round_rate     = &omap2_clksel_round_rate,
+       .set_rate       = &omap2_clksel_set_rate,
+};
+
+/* DPLL_MPU */
+static struct dpll_data dpll_mpu_dd = {
+       .mult_div1_reg  = AM33XX_CM_CLKSEL_DPLL_MPU,
+       .clk_bypass     = &sys_clkin_ck,
+       .clk_ref        = &sys_clkin_ck,
+       .control_reg    = AM33XX_CM_CLKMODE_DPLL_MPU,
+       .modes          = (1 << DPLL_LOW_POWER_BYPASS) | (1 << DPLL_LOCKED),
+       .idlest_reg     = AM33XX_CM_IDLEST_DPLL_MPU,
+       .mult_mask      = AM33XX_DPLL_MULT_MASK,
+       .div1_mask      = AM33XX_DPLL_DIV_MASK,
+       .enable_mask    = AM33XX_DPLL_EN_MASK,
+       .idlest_mask    = AM33XX_ST_DPLL_CLK_MASK,
+       .max_multiplier = AM33XX_MAX_DPLL_MULT,
+       .max_divider    = AM33XX_MAX_DPLL_DIV,
+       .min_divider    = 1,
+};
+
+/* CLKOUT: fdpll/M2 */
+static struct clk dpll_mpu_ck = {
+       .name           = "dpll_mpu_ck",
+       .parent         = &sys_clkin_ck,
+       .dpll_data      = &dpll_mpu_dd,
+       .init           = &omap2_init_dpll_parent,
+       .ops            = &clkops_omap3_noncore_dpll_ops,
+       .recalc         = &omap3_dpll_recalc,
+       .round_rate     = &omap2_dpll_round_rate,
+       .set_rate       = &omap3_noncore_dpll_set_rate,
+};
+
+/*
+ * TODO: Add clksel here (sys_clkin, CORE_CLKOUTM6, PER_CLKOUTM2
+ * and ALT_CLK1/2)
+ */
+static const struct clksel dpll_mpu_m2_div[] = {
+       { .parent = &dpll_mpu_ck, .rates = div31_1to31_rates },
+       { .parent = NULL },
+};
+
+static struct clk dpll_mpu_m2_ck = {
+       .name           = "dpll_mpu_m2_ck",
+       .clkdm_name     = "mpu_clkdm",
+       .parent         = &dpll_mpu_ck,
+       .clksel         = dpll_mpu_m2_div,
+       .clksel_reg     = AM33XX_CM_DIV_M2_DPLL_MPU,
+       .clksel_mask    = AM33XX_DPLL_CLKOUT_DIV_MASK,
+       .ops            = &clkops_null,
+       .recalc         = &omap2_clksel_recalc,
+       .round_rate     = &omap2_clksel_round_rate,
+       .set_rate       = &omap2_clksel_set_rate,
+};
+
+/* DPLL_DDR */
+static struct dpll_data dpll_ddr_dd = {
+       .mult_div1_reg  = AM33XX_CM_CLKSEL_DPLL_DDR,
+       .clk_bypass     = &sys_clkin_ck,
+       .clk_ref        = &sys_clkin_ck,
+       .control_reg    = AM33XX_CM_CLKMODE_DPLL_DDR,
+       .modes          = (1 << DPLL_LOW_POWER_BYPASS) | (1 << DPLL_LOCKED),
+       .idlest_reg     = AM33XX_CM_IDLEST_DPLL_DDR,
+       .mult_mask      = AM33XX_DPLL_MULT_MASK,
+       .div1_mask      = AM33XX_DPLL_DIV_MASK,
+       .enable_mask    = AM33XX_DPLL_EN_MASK,
+       .idlest_mask    = AM33XX_ST_DPLL_CLK_MASK,
+       .max_multiplier = AM33XX_MAX_DPLL_MULT,
+       .max_divider    = AM33XX_MAX_DPLL_DIV,
+       .min_divider    = 1,
+};
+
+/* CLKOUT: fdpll/M2 */
+static struct clk dpll_ddr_ck = {
+       .name           = "dpll_ddr_ck",
+       .parent         = &sys_clkin_ck,
+       .dpll_data      = &dpll_ddr_dd,
+       .init           = &omap2_init_dpll_parent,
+       .ops            = &clkops_null,
+       .recalc         = &omap3_dpll_recalc,
+};
+
+/*
+ * TODO: Add clksel here (sys_clkin, CORE_CLKOUTM6, PER_CLKOUTM2
+ * and ALT_CLK1/2)
+ */
+static const struct clksel dpll_ddr_m2_div[] = {
+       { .parent = &dpll_ddr_ck, .rates = div31_1to31_rates },
+       { .parent = NULL },
+};
+
+static struct clk dpll_ddr_m2_ck = {
+       .name           = "dpll_ddr_m2_ck",
+       .parent         = &dpll_ddr_ck,
+       .clksel         = dpll_ddr_m2_div,
+       .clksel_reg     = AM33XX_CM_DIV_M2_DPLL_DDR,
+       .clksel_mask    = AM33XX_DPLL_CLKOUT_DIV_MASK,
+       .ops            = &clkops_null,
+       .recalc         = &omap2_clksel_recalc,
+       .round_rate     = &omap2_clksel_round_rate,
+       .set_rate       = &omap2_clksel_set_rate,
+};
+
+/* emif_fck functional clock */
+static struct clk dpll_ddr_m2_div2_ck = {
+       .name           = "dpll_ddr_m2_div2_ck",
+       .clkdm_name     = "l3_clkdm",
+       .parent         = &dpll_ddr_m2_ck,
+       .ops            = &clkops_null,
+       .fixed_div      = 2,
+       .recalc         = &omap_fixed_divisor_recalc,
+};
+
+/* DPLL_DISP */
+static struct dpll_data dpll_disp_dd = {
+       .mult_div1_reg  = AM33XX_CM_CLKSEL_DPLL_DISP,
+       .clk_bypass     = &sys_clkin_ck,
+       .clk_ref        = &sys_clkin_ck,
+       .control_reg    = AM33XX_CM_CLKMODE_DPLL_DISP,
+       .modes          = (1 << DPLL_LOW_POWER_BYPASS) | (1 << DPLL_LOCKED),
+       .idlest_reg     = AM33XX_CM_IDLEST_DPLL_DISP,
+       .mult_mask      = AM33XX_DPLL_MULT_MASK,
+       .div1_mask      = AM33XX_DPLL_DIV_MASK,
+       .enable_mask    = AM33XX_DPLL_EN_MASK,
+       .idlest_mask    = AM33XX_ST_DPLL_CLK_MASK,
+       .max_multiplier = AM33XX_MAX_DPLL_MULT,
+       .max_divider    = AM33XX_MAX_DPLL_DIV,
+       .min_divider    = 1,
+};
+
+/* CLKOUT: fdpll/M2 */
+static struct clk dpll_disp_ck = {
+       .name           = "dpll_disp_ck",
+       .parent         = &sys_clkin_ck,
+       .dpll_data      = &dpll_disp_dd,
+       .init           = &omap2_init_dpll_parent,
+       .ops            = &clkops_null,
+       .recalc         = &omap3_dpll_recalc,
+       .round_rate     = &omap2_dpll_round_rate,
+       .set_rate       = &omap3_noncore_dpll_set_rate,
+};
+
+/*
+ * TODO: Add clksel here (sys_clkin, CORE_CLKOUTM6, PER_CLKOUTM2
+ * and ALT_CLK1/2)
+ */
+static const struct clksel dpll_disp_m2_div[] = {
+       { .parent = &dpll_disp_ck, .rates = div31_1to31_rates },
+       { .parent = NULL },
+};
+
+static struct clk dpll_disp_m2_ck = {
+       .name           = "dpll_disp_m2_ck",
+       .parent         = &dpll_disp_ck,
+       .clksel         = dpll_disp_m2_div,
+       .clksel_reg     = AM33XX_CM_DIV_M2_DPLL_DISP,
+       .clksel_mask    = AM33XX_DPLL_CLKOUT_DIV_MASK,
+       .ops            = &clkops_null,
+       .recalc         = &omap2_clksel_recalc,
+       .round_rate     = &omap2_clksel_round_rate,
+       .set_rate       = &omap2_clksel_set_rate,
+};
+
+/* DPLL_PER */
+static struct dpll_data dpll_per_dd = {
+       .mult_div1_reg  = AM33XX_CM_CLKSEL_DPLL_PERIPH,
+       .clk_bypass     = &sys_clkin_ck,
+       .clk_ref        = &sys_clkin_ck,
+       .control_reg    = AM33XX_CM_CLKMODE_DPLL_PER,
+       .modes          = (1 << DPLL_LOW_POWER_BYPASS) | (1 << DPLL_LOCKED),
+       .idlest_reg     = AM33XX_CM_IDLEST_DPLL_PER,
+       .mult_mask      = AM33XX_DPLL_MULT_PERIPH_MASK,
+       .div1_mask      = AM33XX_DPLL_PER_DIV_MASK,
+       .enable_mask    = AM33XX_DPLL_EN_MASK,
+       .idlest_mask    = AM33XX_ST_DPLL_CLK_MASK,
+       .max_multiplier = AM33XX_MAX_DPLL_MULT,
+       .max_divider    = AM33XX_MAX_DPLL_DIV,
+       .min_divider    = 1,
+       .flags          = DPLL_J_TYPE,
+};
+
+/* CLKDCOLDO */
+static struct clk dpll_per_ck = {
+       .name           = "dpll_per_ck",
+       .parent         = &sys_clkin_ck,
+       .dpll_data      = &dpll_per_dd,
+       .init           = &omap2_init_dpll_parent,
+       .ops            = &clkops_null,
+       .recalc         = &omap3_dpll_recalc,
+       .round_rate     = &omap2_dpll_round_rate,
+       .set_rate       = &omap3_noncore_dpll_set_rate,
+};
+
+/* CLKOUT: fdpll/M2 */
+static const struct clksel dpll_per_m2_div[] = {
+       { .parent = &dpll_per_ck, .rates = div31_1to31_rates },
+       { .parent = NULL },
+};
+
+static struct clk dpll_per_m2_ck = {
+       .name           = "dpll_per_m2_ck",
+       .parent         = &dpll_per_ck,
+       .clksel         = dpll_per_m2_div,
+       .clksel_reg     = AM33XX_CM_DIV_M2_DPLL_PER,
+       .clksel_mask    = AM33XX_DPLL_CLKOUT_DIV_MASK,
+       .ops            = &clkops_null,
+       .recalc         = &omap2_clksel_recalc,
+       .round_rate     = &omap2_clksel_round_rate,
+       .set_rate       = &omap2_clksel_set_rate,
+};
+
+static struct clk dpll_per_m2_div4_wkupdm_ck = {
+       .name           = "dpll_per_m2_div4_wkupdm_ck",
+       .clkdm_name     = "l4_wkup_clkdm",
+       .parent         = &dpll_per_m2_ck,
+       .fixed_div      = 4,
+       .ops            = &clkops_null,
+       .recalc         = &omap_fixed_divisor_recalc,
+};
+
+static struct clk dpll_per_m2_div4_ck = {
+       .name           = "dpll_per_m2_div4_ck",
+       .clkdm_name     = "l4ls_clkdm",
+       .parent         = &dpll_per_m2_ck,
+       .fixed_div      = 4,
+       .ops            = &clkops_null,
+       .recalc         = &omap_fixed_divisor_recalc,
+};
+
+static struct clk l3_gclk = {
+       .name           = "l3_gclk",
+       .clkdm_name     = "l3_clkdm",
+       .parent         = &dpll_core_m4_ck,
+       .ops            = &clkops_null,
+       .recalc         = &followparent_recalc,
+};
+
+static struct clk dpll_core_m4_div2_ck = {
+       .name           = "dpll_core_m4_div2_ck",
+       .clkdm_name     = "l4_wkup_clkdm",
+       .parent         = &dpll_core_m4_ck,
+       .ops            = &clkops_null,
+       .fixed_div      = 2,
+       .recalc         = &omap_fixed_divisor_recalc,
+};
+
+static struct clk l4_rtc_gclk = {
+       .name           = "l4_rtc_gclk",
+       .parent         = &dpll_core_m4_ck,
+       .ops            = &clkops_null,
+       .fixed_div      = 2,
+       .recalc         = &omap_fixed_divisor_recalc,
+};
+
+static struct clk clk_24mhz = {
+       .name           = "clk_24mhz",
+       .parent         = &dpll_per_m2_ck,
+       .fixed_div      = 8,
+       .ops            = &clkops_null,
+       .recalc         = &omap_fixed_divisor_recalc,
+};
+
+/*
+ * Below clock nodes describes clockdomains derived out
+ * of core clock.
+ */
+static struct clk l4hs_gclk = {
+       .name           = "l4hs_gclk",
+       .clkdm_name     = "l4hs_clkdm",
+       .parent         = &dpll_core_m4_ck,
+       .ops            = &clkops_null,
+       .recalc         = &followparent_recalc,
+};
+
+static struct clk l3s_gclk = {
+       .name           = "l3s_gclk",
+       .clkdm_name     = "l3s_clkdm",
+       .parent         = &dpll_core_m4_div2_ck,
+       .ops            = &clkops_null,
+       .recalc         = &followparent_recalc,
+};
+
+static struct clk l4fw_gclk = {
+       .name           = "l4fw_gclk",
+       .clkdm_name     = "l4fw_clkdm",
+       .parent         = &dpll_core_m4_div2_ck,
+       .ops            = &clkops_null,
+       .recalc         = &followparent_recalc,
+};
+
+static struct clk l4ls_gclk = {
+       .name           = "l4ls_gclk",
+       .clkdm_name     = "l4ls_clkdm",
+       .parent         = &dpll_core_m4_div2_ck,
+       .ops            = &clkops_null,
+       .recalc         = &followparent_recalc,
+};
+
+static struct clk sysclk_div_ck = {
+       .name           = "sysclk_div_ck",
+       .parent         = &dpll_core_m4_ck,
+       .ops            = &clkops_null,
+       .recalc         = &followparent_recalc,
+};
+
+/*
+ * In order to match the clock domain with hwmod clockdomain entry,
+ * separate clock nodes is required for the modules which are
+ * directly getting their funtioncal clock from sys_clkin.
+ */
+static struct clk adc_tsc_fck = {
+       .name           = "adc_tsc_fck",
+       .clkdm_name     = "l4_wkup_clkdm",
+       .parent         = &sys_clkin_ck,
+       .ops            = &clkops_null,
+       .recalc         = &followparent_recalc,
+};
+
+static struct clk dcan0_fck = {
+       .name           = "dcan0_fck",
+       .clkdm_name     = "l4ls_clkdm",
+       .parent         = &sys_clkin_ck,
+       .ops            = &clkops_null,
+       .recalc         = &followparent_recalc,
+};
+
+static struct clk dcan1_fck = {
+       .name           = "dcan1_fck",
+       .clkdm_name     = "l4ls_clkdm",
+       .parent         = &sys_clkin_ck,
+       .ops            = &clkops_null,
+       .recalc         = &followparent_recalc,
+};
+
+static struct clk mcasp0_fck = {
+       .name           = "mcasp0_fck",
+       .clkdm_name     = "l3s_clkdm",
+       .parent         = &sys_clkin_ck,
+       .ops            = &clkops_null,
+       .recalc         = &followparent_recalc,
+};
+
+static struct clk mcasp1_fck = {
+       .name           = "mcasp1_fck",
+       .clkdm_name     = "l3s_clkdm",
+       .parent         = &sys_clkin_ck,
+       .ops            = &clkops_null,
+       .recalc         = &followparent_recalc,
+};
+
+static struct clk smartreflex0_fck = {
+       .name           = "smartreflex0_fck",
+       .clkdm_name     = "l4_wkup_clkdm",
+       .parent         = &sys_clkin_ck,
+       .ops            = &clkops_null,
+       .recalc         = &followparent_recalc,
+};
+
+static struct clk smartreflex1_fck = {
+       .name           = "smartreflex1_fck",
+       .clkdm_name     = "l4_wkup_clkdm",
+       .parent         = &sys_clkin_ck,
+       .ops            = &clkops_null,
+       .recalc         = &followparent_recalc,
+};
+
+/*
+ * Modules clock nodes
+ *
+ * The following clock leaf nodes are added for the moment because:
+ *
+ *  - hwmod data is not present for these modules, either hwmod
+ *    control is not required or its not populated.
+ *  - Driver code is not yet migrated to use hwmod/runtime pm
+ *  - Modules outside kernel access (to disable them by default)
+ *
+ *     - debugss
+ *     - mmu (gfx domain)
+ *     - cefuse
+ *     - usbotg_fck (its additional clock and not really a modulemode)
+ *     - ieee5000
+ */
+static struct clk debugss_ick = {
+       .name           = "debugss_ick",
+       .clkdm_name     = "l3_aon_clkdm",
+       .parent         = &dpll_core_m4_ck,
+       .ops            = &clkops_omap2_dflt,
+       .enable_reg     = AM33XX_CM_WKUP_DEBUGSS_CLKCTRL,
+       .enable_bit     = AM33XX_MODULEMODE_SWCTRL,
+       .recalc         = &followparent_recalc,
+};
+
+static struct clk mmu_fck = {
+       .name           = "mmu_fck",
+       .clkdm_name     = "gfx_l3_clkdm",
+       .parent         = &dpll_core_m4_ck,
+       .ops            = &clkops_omap2_dflt,
+       .enable_reg     = AM33XX_CM_GFX_MMUDATA_CLKCTRL,
+       .enable_bit     = AM33XX_MODULEMODE_SWCTRL,
+       .recalc         = &followparent_recalc,
+};
+
+static struct clk cefuse_fck = {
+       .name           = "cefuse_fck",
+       .clkdm_name     = "l4_cefuse_clkdm",
+       .parent         = &sys_clkin_ck,
+       .enable_reg     = AM33XX_CM_CEFUSE_CEFUSE_CLKCTRL,
+       .enable_bit     = AM33XX_MODULEMODE_SWCTRL,
+       .ops            = &clkops_omap2_dflt,
+       .recalc         = &followparent_recalc,
+};
+
+/*
+ * clkdiv32 is generated from fixed division of 732.4219
+ */
+static struct clk clkdiv32k_ick = {
+       .name           = "clkdiv32k_ick",
+       .clkdm_name     = "clk_24mhz_clkdm",
+       .rate           = 32768,
+       .parent         = &clk_24mhz,
+       .enable_reg     = AM33XX_CM_PER_CLKDIV32K_CLKCTRL,
+       .enable_bit     = AM33XX_MODULEMODE_SWCTRL,
+       .ops            = &clkops_omap2_dflt,
+};
+
+static struct clk usbotg_fck = {
+       .name           = "usbotg_fck",
+       .clkdm_name     = "l3s_clkdm",
+       .parent         = &dpll_per_ck,
+       .enable_reg     = AM33XX_CM_CLKDCOLDO_DPLL_PER,
+       .enable_bit     = AM33XX_ST_DPLL_CLKDCOLDO_SHIFT,
+       .ops            = &clkops_omap2_dflt,
+       .recalc         = &followparent_recalc,
+};
+
+static struct clk ieee5000_fck = {
+       .name           = "ieee5000_fck",
+       .clkdm_name     = "l3s_clkdm",
+       .parent         = &dpll_core_m4_div2_ck,
+       .enable_reg     = AM33XX_CM_PER_IEEE5000_CLKCTRL,
+       .enable_bit     = AM33XX_MODULEMODE_SWCTRL,
+       .ops            = &clkops_omap2_dflt,
+       .recalc         = &followparent_recalc,
+};
+
+/* Timers */
+static const struct clksel timer1_clkmux_sel[] = {
+       { .parent = &sys_clkin_ck, .rates = div_1_0_rates },
+       { .parent = &clkdiv32k_ick, .rates = div_1_1_rates },
+       { .parent = &tclkin_ck, .rates = div_1_2_rates },
+       { .parent = &clk_rc32k_ck, .rates = div_1_3_rates },
+       { .parent = &clk_32768_ck, .rates = div_1_4_rates },
+       { .parent = NULL },
+};
+
+static struct clk timer1_fck = {
+       .name           = "timer1_fck",
+       .clkdm_name     = "l4ls_clkdm",
+       .parent         = &sys_clkin_ck,
+       .init           = &omap2_init_clksel_parent,
+       .clksel         = timer1_clkmux_sel,
+       .clksel_reg     = AM33XX_CLKSEL_TIMER1MS_CLK,
+       .clksel_mask    = AM33XX_CLKSEL_0_2_MASK,
+       .ops            = &clkops_null,
+       .recalc         = &omap2_clksel_recalc,
+};
+
+static const struct clksel timer2_to_7_clk_sel[] = {
+       { .parent = &tclkin_ck, .rates = div_1_0_rates },
+       { .parent = &sys_clkin_ck, .rates = div_1_1_rates },
+       { .parent = &clkdiv32k_ick, .rates = div_1_2_rates },
+       { .parent = NULL },
+};
+
+static struct clk timer2_fck = {
+       .name           = "timer2_fck",
+       .clkdm_name     = "l4ls_clkdm",
+       .parent         = &sys_clkin_ck,
+       .init           = &omap2_init_clksel_parent,
+       .clksel         = timer2_to_7_clk_sel,
+       .clksel_reg     = AM33XX_CLKSEL_TIMER2_CLK,
+       .clksel_mask    = AM33XX_CLKSEL_0_1_MASK,
+       .ops            = &clkops_null,
+       .recalc         = &omap2_clksel_recalc,
+};
+
+static struct clk timer3_fck = {
+       .name           = "timer3_fck",
+       .clkdm_name     = "l4ls_clkdm",
+       .parent         = &sys_clkin_ck,
+       .init           = &am33xx_init_timer_parent,
+       .clksel         = timer2_to_7_clk_sel,
+       .clksel_reg     = AM33XX_CLKSEL_TIMER3_CLK,
+       .clksel_mask    = AM33XX_CLKSEL_0_1_MASK,
+       .ops            = &clkops_null,
+       .recalc         = &omap2_clksel_recalc,
+};
+
+static struct clk timer4_fck = {
+       .name           = "timer4_fck",
+       .clkdm_name     = "l4ls_clkdm",
+       .parent         = &sys_clkin_ck,
+       .init           = &omap2_init_clksel_parent,
+       .clksel         = timer2_to_7_clk_sel,
+       .clksel_reg     = AM33XX_CLKSEL_TIMER4_CLK,
+       .clksel_mask    = AM33XX_CLKSEL_0_1_MASK,
+       .ops            = &clkops_null,
+       .recalc         = &omap2_clksel_recalc,
+};
+
+static struct clk timer5_fck = {
+       .name           = "timer5_fck",
+       .clkdm_name     = "l4ls_clkdm",
+       .parent         = &sys_clkin_ck,
+       .init           = &omap2_init_clksel_parent,
+       .clksel         = timer2_to_7_clk_sel,
+       .clksel_reg     = AM33XX_CLKSEL_TIMER5_CLK,
+       .clksel_mask    = AM33XX_CLKSEL_0_1_MASK,
+       .ops            = &clkops_null,
+       .recalc         = &omap2_clksel_recalc,
+};
+
+static struct clk timer6_fck = {
+       .name           = "timer6_fck",
+       .clkdm_name     = "l4ls_clkdm",
+       .parent         = &sys_clkin_ck,
+       .init           = &am33xx_init_timer_parent,
+       .clksel         = timer2_to_7_clk_sel,
+       .clksel_reg     = AM33XX_CLKSEL_TIMER6_CLK,
+       .clksel_mask    = AM33XX_CLKSEL_0_1_MASK,
+       .ops            = &clkops_null,
+       .recalc         = &omap2_clksel_recalc,
+};
+
+static struct clk timer7_fck = {
+       .name           = "timer7_fck",
+       .clkdm_name     = "l4ls_clkdm",
+       .parent         = &sys_clkin_ck,
+       .init           = &omap2_init_clksel_parent,
+       .clksel         = timer2_to_7_clk_sel,
+       .clksel_reg     = AM33XX_CLKSEL_TIMER7_CLK,
+       .clksel_mask    = AM33XX_CLKSEL_0_1_MASK,
+       .ops            = &clkops_null,
+       .recalc         = &omap2_clksel_recalc,
+};
+
+static struct clk cpsw_125mhz_gclk = {
+       .name           = "cpsw_125mhz_gclk",
+       .clkdm_name     = "cpsw_125mhz_clkdm",
+       .parent         = &dpll_core_m5_ck,
+       .ops            = &clkops_null,
+       .fixed_div      = 2,
+       .recalc         = &omap_fixed_divisor_recalc,
+};
+
+static const struct clksel cpsw_cpts_rft_clkmux_sel[] = {
+       { .parent = &dpll_core_m5_ck, .rates = div_1_0_rates },
+       { .parent = &dpll_core_m4_ck, .rates = div_1_1_rates },
+       { .parent = NULL },
+};
+
+static struct clk cpsw_cpts_rft_clk = {
+       .name           = "cpsw_cpts_rft_clk",
+       .clkdm_name     = "cpsw_125mhz_clkdm",
+       .parent         = &dpll_core_m5_ck,
+       .clksel         = cpsw_cpts_rft_clkmux_sel,
+       .clksel_reg     = AM33XX_CM_CPTS_RFT_CLKSEL,
+       .clksel_mask    = AM33XX_CLKSEL_0_0_MASK,
+       .ops            = &clkops_null,
+       .recalc         = &followparent_recalc,
+};
+
+/* gpio */
+static const struct clksel gpio0_dbclk_mux_sel[] = {
+       { .parent = &clk_rc32k_ck, .rates = div_1_0_rates },
+       { .parent = &clk_32768_ck, .rates = div_1_1_rates },
+       { .parent = &clkdiv32k_ick, .rates = div_1_2_rates },
+       { .parent = NULL },
+};
+
+static struct clk gpio0_dbclk_mux_ck = {
+       .name           = "gpio0_dbclk_mux_ck",
+       .clkdm_name     = "l4_wkup_clkdm",
+       .parent         = &clk_rc32k_ck,
+       .init           = &omap2_init_clksel_parent,
+       .clksel         = gpio0_dbclk_mux_sel,
+       .clksel_reg     = AM33XX_CLKSEL_GPIO0_DBCLK,
+       .clksel_mask    = AM33XX_CLKSEL_0_1_MASK,
+       .ops            = &clkops_null,
+       .recalc         = &omap2_clksel_recalc,
+};
+
+static struct clk gpio0_dbclk = {
+       .name           = "gpio0_dbclk",
+       .clkdm_name     = "l4_wkup_clkdm",
+       .parent         = &gpio0_dbclk_mux_ck,
+       .enable_reg     = AM33XX_CM_WKUP_GPIO0_CLKCTRL,
+       .enable_bit     = AM33XX_OPTFCLKEN_GPIO0_GDBCLK_SHIFT,
+       .ops            = &clkops_omap2_dflt,
+       .recalc         = &followparent_recalc,
+};
+
+static struct clk gpio1_dbclk = {
+       .name           = "gpio1_dbclk",
+       .clkdm_name     = "l4ls_clkdm",
+       .parent         = &clkdiv32k_ick,
+       .enable_reg     = AM33XX_CM_PER_GPIO1_CLKCTRL,
+       .enable_bit     = AM33XX_OPTFCLKEN_GPIO_1_GDBCLK_SHIFT,
+       .ops            = &clkops_omap2_dflt,
+       .recalc         = &followparent_recalc,
+};
+
+static struct clk gpio2_dbclk = {
+       .name           = "gpio2_dbclk",
+       .clkdm_name     = "l4ls_clkdm",
+       .parent         = &clkdiv32k_ick,
+       .enable_reg     = AM33XX_CM_PER_GPIO2_CLKCTRL,
+       .enable_bit     = AM33XX_OPTFCLKEN_GPIO_2_GDBCLK_SHIFT,
+       .ops            = &clkops_omap2_dflt,
+       .recalc         = &followparent_recalc,
+};
+
+static struct clk gpio3_dbclk = {
+       .name           = "gpio3_dbclk",
+       .clkdm_name     = "l4ls_clkdm",
+       .parent         = &clkdiv32k_ick,
+       .enable_reg     = AM33XX_CM_PER_GPIO3_CLKCTRL,
+       .enable_bit     = AM33XX_OPTFCLKEN_GPIO_3_GDBCLK_SHIFT,
+       .ops            = &clkops_omap2_dflt,
+       .recalc         = &followparent_recalc,
+};
+
+static const struct clksel pruss_ocp_clk_mux_sel[] = {
+       { .parent = &l3_gclk, .rates = div_1_0_rates },
+       { .parent = &dpll_disp_m2_ck, .rates = div_1_1_rates },
+       { .parent = NULL },
+};
+
+static struct clk pruss_ocp_gclk = {
+       .name           = "pruss_ocp_gclk",
+       .clkdm_name     = "pruss_ocp_clkdm",
+       .parent         = &l3_gclk,
+       .init           = &omap2_init_clksel_parent,
+       .clksel         = pruss_ocp_clk_mux_sel,
+       .clksel_reg     = AM33XX_CLKSEL_PRUSS_OCP_CLK,
+       .clksel_mask    = AM33XX_CLKSEL_0_0_MASK,
+       .ops            = &clkops_null,
+       .recalc         = &followparent_recalc,
+};
+
+static const struct clksel lcd_clk_mux_sel[] = {
+       { .parent = &dpll_disp_m2_ck, .rates = div_1_0_rates },
+       { .parent = &dpll_core_m5_ck, .rates = div_1_1_rates },
+       { .parent = &dpll_per_m2_ck, .rates = div_1_2_rates },
+       { .parent = NULL },
+};
+
+static struct clk lcd_gclk = {
+       .name           = "lcd_gclk",
+       .clkdm_name     = "lcdc_clkdm",
+       .parent         = &dpll_disp_m2_ck,
+       .init           = &omap2_init_clksel_parent,
+       .clksel         = lcd_clk_mux_sel,
+       .clksel_reg     = AM33XX_CLKSEL_LCDC_PIXEL_CLK,
+       .clksel_mask    = AM33XX_CLKSEL_0_1_MASK,
+       .ops            = &clkops_null,
+       .recalc         = &followparent_recalc,
+};
+
+static struct clk mmc_clk = {
+       .name           = "mmc_clk",
+       .clkdm_name     = "l4ls_clkdm",
+       .parent         = &dpll_per_m2_ck,
+       .ops            = &clkops_null,
+       .fixed_div      = 2,
+       .recalc         = &omap_fixed_divisor_recalc,
+};
+
+static struct clk mmc2_fck = {
+       .name           = "mmc2_fck",
+       .clkdm_name     = "l3s_clkdm",
+       .parent         = &mmc_clk,
+       .ops            = &clkops_null,
+       .recalc         = &followparent_recalc,
+};
+
+static const struct clksel gfx_clksel_sel[] = {
+       { .parent = &dpll_core_m4_ck, .rates = div_1_0_rates },
+       { .parent = &dpll_per_m2_ck, .rates = div_1_1_rates },
+       { .parent = NULL },
+};
+
+static struct clk gfx_fclk_clksel_ck = {
+       .name           = "gfx_fclk_clksel_ck",
+       .parent         = &dpll_core_m4_ck,
+       .clksel         = gfx_clksel_sel,
+       .ops            = &clkops_null,
+       .clksel_reg     = AM33XX_CLKSEL_GFX_FCLK,
+       .clksel_mask    = AM33XX_CLKSEL_GFX_FCLK_MASK,
+       .recalc         = &omap2_clksel_recalc,
+};
+
+static const struct clksel_rate div_1_0_2_1_rates[] = {
+       { .div = 1, .val = 0, .flags = RATE_IN_AM33XX },
+       { .div = 2, .val = 1, .flags = RATE_IN_AM33XX },
+       { .div = 0 },
+};
+
+static const struct clksel gfx_div_sel[] = {
+       { .parent = &gfx_fclk_clksel_ck, .rates = div_1_0_2_1_rates },
+       { .parent = NULL },
+};
+
+static struct clk gfx_fck_div_ck = {
+       .name           = "gfx_fck_div_ck",
+       .clkdm_name     = "gfx_l3_clkdm",
+       .parent         = &gfx_fclk_clksel_ck,
+       .init           = &omap2_init_clksel_parent,
+       .clksel         = gfx_div_sel,
+       .clksel_reg     = AM33XX_CLKSEL_GFX_FCLK,
+       .clksel_mask    = AM33XX_CLKSEL_0_0_MASK,
+       .recalc         = &omap2_clksel_recalc,
+       .round_rate     = &omap2_clksel_round_rate,
+       .set_rate       = &omap2_clksel_set_rate,
+       .ops            = &clkops_null,
+};
+
+static const struct clksel sysclkout_pre_sel[] = {
+       { .parent = &clk_32768_ck, .rates = div_1_0_rates },
+       { .parent = &l3_gclk, .rates = div_1_1_rates },
+       { .parent = &dpll_ddr_m2_ck, .rates = div_1_2_rates },
+       { .parent = &dpll_per_m2_ck, .rates = div_1_3_rates },
+       { .parent = &lcd_gclk, .rates = div_1_4_rates },
+       { .parent = NULL },
+};
+
+static struct clk sysclkout_pre_ck = {
+       .name           = "sysclkout_pre_ck",
+       .parent         = &clk_32768_ck,
+       .init           = &omap2_init_clksel_parent,
+       .clksel         = sysclkout_pre_sel,
+       .clksel_reg     = AM33XX_CM_CLKOUT_CTRL,
+       .clksel_mask    = AM33XX_CLKOUT2SOURCE_MASK,
+       .ops            = &clkops_null,
+       .recalc         = &omap2_clksel_recalc,
+};
+
+/* Divide by 8 clock rates with default clock is 1/1*/
+static const struct clksel_rate div8_rates[] = {
+       { .div = 1, .val = 0, .flags = RATE_IN_AM33XX },
+       { .div = 2, .val = 1, .flags = RATE_IN_AM33XX },
+       { .div = 3, .val = 2, .flags = RATE_IN_AM33XX },
+       { .div = 4, .val = 3, .flags = RATE_IN_AM33XX },
+       { .div = 5, .val = 4, .flags = RATE_IN_AM33XX },
+       { .div = 6, .val = 5, .flags = RATE_IN_AM33XX },
+       { .div = 7, .val = 6, .flags = RATE_IN_AM33XX },
+       { .div = 8, .val = 7, .flags = RATE_IN_AM33XX },
+       { .div = 0 },
+};
+
+static const struct clksel clkout2_div[] = {
+       { .parent = &sysclkout_pre_ck, .rates = div8_rates },
+       { .parent = NULL },
+};
+
+static struct clk clkout2_ck = {
+       .name           = "clkout2_ck",
+       .parent         = &sysclkout_pre_ck,
+       .ops            = &clkops_omap2_dflt,
+       .clksel         = clkout2_div,
+       .clksel_reg     = AM33XX_CM_CLKOUT_CTRL,
+       .clksel_mask    = AM33XX_CLKOUT2DIV_MASK,
+       .enable_reg     = AM33XX_CM_CLKOUT_CTRL,
+       .enable_bit     = AM33XX_CLKOUT2EN_SHIFT,
+       .recalc         = &omap2_clksel_recalc,
+       .round_rate     = &omap2_clksel_round_rate,
+       .set_rate       = &omap2_clksel_set_rate,
+};
+
+static const struct clksel wdt_clkmux_sel[] = {
+       { .parent = &clk_rc32k_ck, .rates = div_1_0_rates },
+       { .parent = &clkdiv32k_ick, .rates = div_1_1_rates },
+       { .parent = NULL },
+};
+
+static struct clk wdt1_fck = {
+       .name           = "wdt1_fck",
+       .clkdm_name     = "l4_wkup_clkdm",
+       .parent         = &clk_rc32k_ck,
+       .init           = &omap2_init_clksel_parent,
+       .clksel         = wdt_clkmux_sel,
+       .clksel_reg     = AM33XX_CLKSEL_WDT1_CLK,
+       .clksel_mask    = AM33XX_CLKSEL_0_1_MASK,
+       .ops            = &clkops_null,
+       .recalc         = &omap2_clksel_recalc,
+};
+
+/*
+ * clkdev
+ */
+static struct omap_clk am33xx_clks[] = {
+       CLK(NULL,       "clk_32768_ck",         &clk_32768_ck,  CK_AM33XX),
+       CLK(NULL,       "clk_rc32k_ck",         &clk_rc32k_ck,  CK_AM33XX),
+       CLK(NULL,       "virt_19200000_ck",     &virt_19200000_ck,      CK_AM33XX),
+       CLK(NULL,       "virt_24000000_ck",     &virt_24000000_ck,      CK_AM33XX),
+       CLK(NULL,       "virt_25000000_ck",     &virt_25000000_ck,      CK_AM33XX),
+       CLK(NULL,       "virt_26000000_ck",     &virt_26000000_ck,      CK_AM33XX),
+       CLK(NULL,       "sys_clkin_ck",         &sys_clkin_ck,  CK_AM33XX),
+       CLK(NULL,       "tclkin_ck",            &tclkin_ck,     CK_AM33XX),
+       CLK(NULL,       "dpll_core_ck",         &dpll_core_ck,  CK_AM33XX),
+       CLK(NULL,       "dpll_core_x2_ck",      &dpll_core_x2_ck,       CK_AM33XX),
+       CLK(NULL,       "dpll_core_m4_ck",      &dpll_core_m4_ck,       CK_AM33XX),
+       CLK(NULL,       "dpll_core_m5_ck",      &dpll_core_m5_ck,       CK_AM33XX),
+       CLK(NULL,       "dpll_core_m6_ck",      &dpll_core_m6_ck,       CK_AM33XX),
+       CLK(NULL,       "dpll_mpu_ck",          &dpll_mpu_ck,   CK_AM33XX),
+       CLK(NULL,       "dpll_mpu_m2_ck",       &dpll_mpu_m2_ck,        CK_AM33XX),
+       CLK(NULL,       "dpll_ddr_ck",          &dpll_ddr_ck,   CK_AM33XX),
+       CLK(NULL,       "dpll_ddr_m2_ck",       &dpll_ddr_m2_ck,        CK_AM33XX),
+       CLK(NULL,       "dpll_ddr_m2_div2_ck",  &dpll_ddr_m2_div2_ck,   CK_AM33XX),
+       CLK(NULL,       "dpll_disp_ck",         &dpll_disp_ck,  CK_AM33XX),
+       CLK(NULL,       "dpll_disp_m2_ck",      &dpll_disp_m2_ck,       CK_AM33XX),
+       CLK(NULL,       "dpll_per_ck",          &dpll_per_ck,   CK_AM33XX),
+       CLK(NULL,       "dpll_per_m2_ck",       &dpll_per_m2_ck,        CK_AM33XX),
+       CLK(NULL,       "dpll_per_m2_div4_wkupdm_ck",   &dpll_per_m2_div4_wkupdm_ck,    CK_AM33XX),
+       CLK(NULL,       "dpll_per_m2_div4_ck",  &dpll_per_m2_div4_ck,   CK_AM33XX),
+       CLK(NULL,       "adc_tsc_fck",          &adc_tsc_fck,   CK_AM33XX),
+       CLK(NULL,       "cefuse_fck",           &cefuse_fck,    CK_AM33XX),
+       CLK(NULL,       "clkdiv32k_ick",        &clkdiv32k_ick, CK_AM33XX),
+       CLK(NULL,       "dcan0_fck",            &dcan0_fck,     CK_AM33XX),
+       CLK(NULL,       "dcan1_fck",            &dcan1_fck,     CK_AM33XX),
+       CLK(NULL,       "debugss_ick",          &debugss_ick,   CK_AM33XX),
+       CLK(NULL,       "pruss_ocp_gclk",       &pruss_ocp_gclk,        CK_AM33XX),
+       CLK("davinci-mcasp.0",  NULL,           &mcasp0_fck,    CK_AM33XX),
+       CLK("davinci-mcasp.1",  NULL,           &mcasp1_fck,    CK_AM33XX),
+       CLK("NULL",     "mmc2_fck",             &mmc2_fck,      CK_AM33XX),
+       CLK(NULL,       "mmu_fck",              &mmu_fck,       CK_AM33XX),
+       CLK(NULL,       "smartreflex0_fck",     &smartreflex0_fck,      CK_AM33XX),
+       CLK(NULL,       "smartreflex1_fck",     &smartreflex1_fck,      CK_AM33XX),
+       CLK(NULL,       "gpt1_fck",             &timer1_fck,    CK_AM33XX),
+       CLK(NULL,       "gpt2_fck",             &timer2_fck,    CK_AM33XX),
+       CLK(NULL,       "gpt3_fck",             &timer3_fck,    CK_AM33XX),
+       CLK(NULL,       "gpt4_fck",             &timer4_fck,    CK_AM33XX),
+       CLK(NULL,       "gpt5_fck",             &timer5_fck,    CK_AM33XX),
+       CLK(NULL,       "gpt6_fck",             &timer6_fck,    CK_AM33XX),
+       CLK(NULL,       "gpt7_fck",             &timer7_fck,    CK_AM33XX),
+       CLK(NULL,       "usbotg_fck",           &usbotg_fck,    CK_AM33XX),
+       CLK(NULL,       "ieee5000_fck",         &ieee5000_fck,  CK_AM33XX),
+       CLK(NULL,       "wdt1_fck",             &wdt1_fck,      CK_AM33XX),
+       CLK(NULL,       "l4_rtc_gclk",          &l4_rtc_gclk,   CK_AM33XX),
+       CLK(NULL,       "l3_gclk",              &l3_gclk,       CK_AM33XX),
+       CLK(NULL,       "dpll_core_m4_div2_ck", &dpll_core_m4_div2_ck,  CK_AM33XX),
+       CLK(NULL,       "l4hs_gclk",            &l4hs_gclk,     CK_AM33XX),
+       CLK(NULL,       "l3s_gclk",             &l3s_gclk,      CK_AM33XX),
+       CLK(NULL,       "l4fw_gclk",            &l4fw_gclk,     CK_AM33XX),
+       CLK(NULL,       "l4ls_gclk",            &l4ls_gclk,     CK_AM33XX),
+       CLK(NULL,       "clk_24mhz",            &clk_24mhz,     CK_AM33XX),
+       CLK(NULL,       "sysclk_div_ck",        &sysclk_div_ck, CK_AM33XX),
+       CLK(NULL,       "cpsw_125mhz_gclk",     &cpsw_125mhz_gclk,      CK_AM33XX),
+       CLK(NULL,       "cpsw_cpts_rft_clk",    &cpsw_cpts_rft_clk,     CK_AM33XX),
+       CLK(NULL,       "gpio0_dbclk_mux_ck",   &gpio0_dbclk_mux_ck,    CK_AM33XX),
+       CLK(NULL,       "gpio0_dbclk",          &gpio0_dbclk,   CK_AM33XX),
+       CLK(NULL,       "gpio1_dbclk",          &gpio1_dbclk,   CK_AM33XX),
+       CLK(NULL,       "gpio2_dbclk",          &gpio2_dbclk,   CK_AM33XX),
+       CLK(NULL,       "gpio3_dbclk",          &gpio3_dbclk,   CK_AM33XX),
+       CLK(NULL,       "lcd_gclk",             &lcd_gclk,      CK_AM33XX),
+       CLK(NULL,       "mmc_clk",              &mmc_clk,       CK_AM33XX),
+       CLK(NULL,       "gfx_fclk_clksel_ck",   &gfx_fclk_clksel_ck,    CK_AM33XX),
+       CLK(NULL,       "gfx_fck_div_ck",       &gfx_fck_div_ck,        CK_AM33XX),
+       CLK(NULL,       "sysclkout_pre_ck",     &sysclkout_pre_ck,      CK_AM33XX),
+       CLK(NULL,       "clkout2_ck",           &clkout2_ck,    CK_AM33XX),
+};
+
+int __init am33xx_clk_init(void)
+{
+       struct omap_clk *c;
+       u32 cpu_clkflg;
+
+       if (soc_is_am33xx()) {
+               cpu_mask = RATE_IN_AM33XX;
+               cpu_clkflg = CK_AM33XX;
+       }
+
+       clk_init(&omap2_clk_functions);
+
+       for (c = am33xx_clks; c < am33xx_clks + ARRAY_SIZE(am33xx_clks); c++)
+               clk_preinit(c->lk.clk);
+
+       for (c = am33xx_clks; c < am33xx_clks + ARRAY_SIZE(am33xx_clks); c++) {
+               if (c->cpu & cpu_clkflg) {
+                       clkdev_add(&c->lk);
+                       clk_register(c->lk.clk);
+                       omap2_init_clk_clkdm(c->lk.clk);
+               }
+       }
+
+       recalculate_root_clocks();
+
+       /*
+        * Only enable those clocks we will need, let the drivers
+        * enable other clocks as necessary
+        */
+       clk_enable_init_clocks();
+
+       return 0;
+}
index c3e91d0dd2f273dc185be149c5253ba92a4a380d..91b3d5c60bfe31952e4b91d98a55b597471e6462 100644 (file)
@@ -93,18 +93,6 @@ static struct clk virt_16_8m_ck = {
        .rate           = 16800000,
 };
 
-static struct clk virt_19_2m_ck = {
-       .name           = "virt_19_2m_ck",
-       .ops            = &clkops_null,
-       .rate           = 19200000,
-};
-
-static struct clk virt_26m_ck = {
-       .name           = "virt_26m_ck",
-       .ops            = &clkops_null,
-       .rate           = 26000000,
-};
-
 static struct clk virt_38_4m_ck = {
        .name           = "virt_38_4m_ck",
        .ops            = &clkops_null,
@@ -145,8 +133,8 @@ static const struct clksel osc_sys_clksel[] = {
        { .parent = &virt_12m_ck,   .rates = osc_sys_12m_rates },
        { .parent = &virt_13m_ck,   .rates = osc_sys_13m_rates },
        { .parent = &virt_16_8m_ck, .rates = osc_sys_16_8m_rates },
-       { .parent = &virt_19_2m_ck, .rates = osc_sys_19_2m_rates },
-       { .parent = &virt_26m_ck,   .rates = osc_sys_26m_rates },
+       { .parent = &virt_19200000_ck, .rates = osc_sys_19_2m_rates },
+       { .parent = &virt_26000000_ck,   .rates = osc_sys_26m_rates },
        { .parent = &virt_38_4m_ck, .rates = osc_sys_38_4m_rates },
        { .parent = NULL },
 };
@@ -3234,8 +3222,8 @@ static struct omap_clk omap3xxx_clks[] = {
        CLK(NULL,       "virt_12m_ck",  &virt_12m_ck,   CK_3XXX),
        CLK(NULL,       "virt_13m_ck",  &virt_13m_ck,   CK_3XXX),
        CLK(NULL,       "virt_16_8m_ck", &virt_16_8m_ck, CK_3430ES2PLUS | CK_AM35XX  | CK_36XX),
-       CLK(NULL,       "virt_19_2m_ck", &virt_19_2m_ck, CK_3XXX),
-       CLK(NULL,       "virt_26m_ck",  &virt_26m_ck,   CK_3XXX),
+       CLK(NULL,       "virt_19200000_ck", &virt_19200000_ck, CK_3XXX),
+       CLK(NULL,       "virt_26000000_ck",     &virt_26000000_ck,      CK_3XXX),
        CLK(NULL,       "virt_38_4m_ck", &virt_38_4m_ck, CK_3XXX),
        CLK(NULL,       "osc_sys_ck",   &osc_sys_ck,    CK_3XXX),
        CLK(NULL,       "sys_ck",       &sys_ck,        CK_3XXX),
index 1b0b049fe445a114652e413aef858e7dad6e235f..d7f55e43b76189537ee84e32d5c0965f9e79f487 100644 (file)
@@ -107,18 +107,6 @@ static struct clk virt_16800000_ck = {
        .rate           = 16800000,
 };
 
-static struct clk virt_19200000_ck = {
-       .name           = "virt_19200000_ck",
-       .ops            = &clkops_null,
-       .rate           = 19200000,
-};
-
-static struct clk virt_26000000_ck = {
-       .name           = "virt_26000000_ck",
-       .ops            = &clkops_null,
-       .rate           = 26000000,
-};
-
 static struct clk virt_27000000_ck = {
        .name           = "virt_27000000_ck",
        .ops            = &clkops_null,
@@ -131,31 +119,6 @@ static struct clk virt_38400000_ck = {
        .rate           = 38400000,
 };
 
-static const struct clksel_rate div_1_0_rates[] = {
-       { .div = 1, .val = 0, .flags = RATE_IN_4430 },
-       { .div = 0 },
-};
-
-static const struct clksel_rate div_1_1_rates[] = {
-       { .div = 1, .val = 1, .flags = RATE_IN_4430 },
-       { .div = 0 },
-};
-
-static const struct clksel_rate div_1_2_rates[] = {
-       { .div = 1, .val = 2, .flags = RATE_IN_4430 },
-       { .div = 0 },
-};
-
-static const struct clksel_rate div_1_3_rates[] = {
-       { .div = 1, .val = 3, .flags = RATE_IN_4430 },
-       { .div = 0 },
-};
-
-static const struct clksel_rate div_1_4_rates[] = {
-       { .div = 1, .val = 4, .flags = RATE_IN_4430 },
-       { .div = 0 },
-};
-
 static const struct clksel_rate div_1_5_rates[] = {
        { .div = 1, .val = 5, .flags = RATE_IN_4430 },
        { .div = 0 },
@@ -289,41 +252,6 @@ static struct clk dpll_abe_x2_ck = {
        .recalc         = &omap3_clkoutx2_recalc,
 };
 
-static const struct clksel_rate div31_1to31_rates[] = {
-       { .div = 1, .val = 1, .flags = RATE_IN_4430 },
-       { .div = 2, .val = 2, .flags = RATE_IN_4430 },
-       { .div = 3, .val = 3, .flags = RATE_IN_4430 },
-       { .div = 4, .val = 4, .flags = RATE_IN_4430 },
-       { .div = 5, .val = 5, .flags = RATE_IN_4430 },
-       { .div = 6, .val = 6, .flags = RATE_IN_4430 },
-       { .div = 7, .val = 7, .flags = RATE_IN_4430 },
-       { .div = 8, .val = 8, .flags = RATE_IN_4430 },
-       { .div = 9, .val = 9, .flags = RATE_IN_4430 },
-       { .div = 10, .val = 10, .flags = RATE_IN_4430 },
-       { .div = 11, .val = 11, .flags = RATE_IN_4430 },
-       { .div = 12, .val = 12, .flags = RATE_IN_4430 },
-       { .div = 13, .val = 13, .flags = RATE_IN_4430 },
-       { .div = 14, .val = 14, .flags = RATE_IN_4430 },
-       { .div = 15, .val = 15, .flags = RATE_IN_4430 },
-       { .div = 16, .val = 16, .flags = RATE_IN_4430 },
-       { .div = 17, .val = 17, .flags = RATE_IN_4430 },
-       { .div = 18, .val = 18, .flags = RATE_IN_4430 },
-       { .div = 19, .val = 19, .flags = RATE_IN_4430 },
-       { .div = 20, .val = 20, .flags = RATE_IN_4430 },
-       { .div = 21, .val = 21, .flags = RATE_IN_4430 },
-       { .div = 22, .val = 22, .flags = RATE_IN_4430 },
-       { .div = 23, .val = 23, .flags = RATE_IN_4430 },
-       { .div = 24, .val = 24, .flags = RATE_IN_4430 },
-       { .div = 25, .val = 25, .flags = RATE_IN_4430 },
-       { .div = 26, .val = 26, .flags = RATE_IN_4430 },
-       { .div = 27, .val = 27, .flags = RATE_IN_4430 },
-       { .div = 28, .val = 28, .flags = RATE_IN_4430 },
-       { .div = 29, .val = 29, .flags = RATE_IN_4430 },
-       { .div = 30, .val = 30, .flags = RATE_IN_4430 },
-       { .div = 31, .val = 31, .flags = RATE_IN_4430 },
-       { .div = 0 },
-};
-
 static const struct clksel dpll_abe_m2x2_div[] = {
        { .parent = &dpll_abe_x2_ck, .rates = div31_1to31_rates },
        { .parent = NULL },
index 6424d46be14a69b7fa255df9ec3e1b5c410c6a71..b9f3ba68148c793d368f51174ca164c4a1081c4f 100644 (file)
@@ -43,3 +43,80 @@ const struct clksel_rate dsp_ick_rates[] = {
        { .div = 3, .val = 3, .flags = RATE_IN_243X },
        { .div = 0 },
 };
+
+
+/* clksel_rate blocks shared between OMAP44xx and AM33xx */
+
+const struct clksel_rate div_1_0_rates[] = {
+       { .div = 1, .val = 0, .flags = RATE_IN_4430 | RATE_IN_AM33XX },
+       { .div = 0 },
+};
+
+const struct clksel_rate div_1_1_rates[] = {
+       { .div = 1, .val = 1, .flags = RATE_IN_4430 | RATE_IN_AM33XX },
+       { .div = 0 },
+};
+
+const struct clksel_rate div_1_2_rates[] = {
+       { .div = 1, .val = 2, .flags = RATE_IN_4430 | RATE_IN_AM33XX },
+       { .div = 0 },
+};
+
+const struct clksel_rate div_1_3_rates[] = {
+       { .div = 1, .val = 3, .flags = RATE_IN_4430 | RATE_IN_AM33XX },
+       { .div = 0 },
+};
+
+const struct clksel_rate div_1_4_rates[] = {
+       { .div = 1, .val = 4, .flags = RATE_IN_4430 | RATE_IN_AM33XX },
+       { .div = 0 },
+};
+
+const struct clksel_rate div31_1to31_rates[] = {
+       { .div = 1, .val = 1, .flags = RATE_IN_4430 | RATE_IN_AM33XX },
+       { .div = 2, .val = 2, .flags = RATE_IN_4430 | RATE_IN_AM33XX },
+       { .div = 3, .val = 3, .flags = RATE_IN_4430 | RATE_IN_AM33XX },
+       { .div = 4, .val = 4, .flags = RATE_IN_4430 | RATE_IN_AM33XX },
+       { .div = 5, .val = 5, .flags = RATE_IN_4430 | RATE_IN_AM33XX },
+       { .div = 6, .val = 6, .flags = RATE_IN_4430 | RATE_IN_AM33XX },
+       { .div = 7, .val = 7, .flags = RATE_IN_4430 | RATE_IN_AM33XX },
+       { .div = 8, .val = 8, .flags = RATE_IN_4430 | RATE_IN_AM33XX },
+       { .div = 9, .val = 9, .flags = RATE_IN_4430 | RATE_IN_AM33XX },
+       { .div = 10, .val = 10, .flags = RATE_IN_4430 | RATE_IN_AM33XX },
+       { .div = 11, .val = 11, .flags = RATE_IN_4430 | RATE_IN_AM33XX },
+       { .div = 12, .val = 12, .flags = RATE_IN_4430 | RATE_IN_AM33XX },
+       { .div = 13, .val = 13, .flags = RATE_IN_4430 | RATE_IN_AM33XX },
+       { .div = 14, .val = 14, .flags = RATE_IN_4430 | RATE_IN_AM33XX },
+       { .div = 15, .val = 15, .flags = RATE_IN_4430 | RATE_IN_AM33XX },
+       { .div = 16, .val = 16, .flags = RATE_IN_4430 | RATE_IN_AM33XX },
+       { .div = 17, .val = 17, .flags = RATE_IN_4430 | RATE_IN_AM33XX },
+       { .div = 18, .val = 18, .flags = RATE_IN_4430 | RATE_IN_AM33XX },
+       { .div = 19, .val = 19, .flags = RATE_IN_4430 | RATE_IN_AM33XX },
+       { .div = 20, .val = 20, .flags = RATE_IN_4430 | RATE_IN_AM33XX },
+       { .div = 21, .val = 21, .flags = RATE_IN_4430 | RATE_IN_AM33XX },
+       { .div = 22, .val = 22, .flags = RATE_IN_4430 | RATE_IN_AM33XX },
+       { .div = 23, .val = 23, .flags = RATE_IN_4430 | RATE_IN_AM33XX },
+       { .div = 24, .val = 24, .flags = RATE_IN_4430 | RATE_IN_AM33XX },
+       { .div = 25, .val = 25, .flags = RATE_IN_4430 | RATE_IN_AM33XX },
+       { .div = 26, .val = 26, .flags = RATE_IN_4430 | RATE_IN_AM33XX },
+       { .div = 27, .val = 27, .flags = RATE_IN_4430 | RATE_IN_AM33XX },
+       { .div = 28, .val = 28, .flags = RATE_IN_4430 | RATE_IN_AM33XX },
+       { .div = 29, .val = 29, .flags = RATE_IN_4430 | RATE_IN_AM33XX },
+       { .div = 30, .val = 30, .flags = RATE_IN_4430 | RATE_IN_AM33XX },
+       { .div = 31, .val = 31, .flags = RATE_IN_4430 | RATE_IN_AM33XX },
+       { .div = 0 },
+};
+
+/* Clocks shared between various OMAP SoCs */
+
+struct clk virt_19200000_ck = {
+       .name           = "virt_19200000_ck",
+       .ops            = &clkops_null,
+       .rate           = 19200000,
+};
+
+struct clk virt_26000000_ck = {
+       .name           = "virt_26000000_ck",
+       .ops            = &clkops_null,
+       .rate           = 26000000,
+};
index 8976be90c8e8e27cf07dee9ba3a8ed9ed026dfd1..4d2d981ff5c50839d35714ea7e94cb48d6001ad7 100644 (file)
@@ -38,6 +38,7 @@
 #include "powerdomain.h"
 #include "clockdomain.h"
 #include "common.h"
+#include "clock.h"
 #include "clock2xxx.h"
 #include "clock3xxx.h"
 #include "clock44xx.h"
@@ -522,6 +523,7 @@ void __init am33xx_init_early(void)
        am33xx_voltagedomains_init();
        am33xx_powerdomains_init();
        am33xx_clockdomains_init();
+       am33xx_clk_init();
 }
 #endif
 
index 7a065f0cf6338dfa6566b23d7a48e318c843a1f9..ceb52db1e2f16409729c2ef0205b854163a3fae7 100644 (file)
@@ -189,8 +189,8 @@ static int tegra_cpu_init(struct cpufreq_policy *policy)
                return PTR_ERR(emc_clk);
        }
 
-       clk_enable(emc_clk);
-       clk_enable(cpu_clk);
+       clk_prepare_enable(emc_clk);
+       clk_prepare_enable(cpu_clk);
 
        cpufreq_frequency_table_cpuinfo(policy, freq_table);
        cpufreq_frequency_table_get_attr(freq_table, policy->cpu);
@@ -212,7 +212,7 @@ static int tegra_cpu_init(struct cpufreq_policy *policy)
 static int tegra_cpu_exit(struct cpufreq_policy *policy)
 {
        cpufreq_frequency_table_cpuinfo(policy, freq_table);
-       clk_disable(emc_clk);
+       clk_disable_unprepare(emc_clk);
        clk_put(emc_clk);
        clk_put(cpu_clk);
        return 0;
index abea4f6e2dd5cbc47aeb3a516fea05d27afe08d4..29c5114d607ccc1b651be43381d3e15bf3db7257 100644 (file)
@@ -714,13 +714,13 @@ int __init tegra_dma_init(void)
 
        bitmap_fill(channel_usage, NV_DMA_MAX_CHANNELS);
 
-       c = clk_get_sys("tegra-dma", NULL);
+       c = clk_get_sys("tegra-apbdma", NULL);
        if (IS_ERR(c)) {
                pr_err("Unable to get clock for APB DMA\n");
                ret = PTR_ERR(c);
                goto fail;
        }
-       ret = clk_enable(c);
+       ret = clk_prepare_enable(c);
        if (ret != 0) {
                pr_err("Unable to enable clock for APB DMA\n");
                goto fail;
index 0e09137506ec79890b56f76c47ac9e0bc8b225d9..d3ad5150d6609e135a063421d2c9acad62e204df 100644 (file)
@@ -723,9 +723,9 @@ static int tegra_pcie_power_regate(void)
 
        tegra_pcie_xclk_clamp(false);
 
-       clk_enable(tegra_pcie.afi_clk);
-       clk_enable(tegra_pcie.pex_clk);
-       return clk_enable(tegra_pcie.pll_e);
+       clk_prepare_enable(tegra_pcie.afi_clk);
+       clk_prepare_enable(tegra_pcie.pex_clk);
+       return clk_prepare_enable(tegra_pcie.pll_e);
 }
 
 static int tegra_pcie_clocks_get(void)
index f5b12fb4ff12306563fd5da0152230424118a843..15d506501cccbb64dc25e5a1178bd91d40e94901 100644 (file)
@@ -146,7 +146,7 @@ int tegra_powergate_sequence_power_up(int id, struct clk *clk)
        if (ret)
                goto err_power;
 
-       ret = clk_enable(clk);
+       ret = clk_prepare_enable(clk);
        if (ret)
                goto err_clk;
 
@@ -162,7 +162,7 @@ int tegra_powergate_sequence_power_up(int id, struct clk *clk)
        return 0;
 
 err_clamp:
-       clk_disable(clk);
+       clk_disable_unprepare(clk);
 err_clk:
        tegra_powergate_power_off(id);
 err_power:
index b59315ce3691c8c73fefdccd9e91328b14d07dab..a703844b20612c5231fa580bbf3681fb1640c1fb 100644 (file)
@@ -69,6 +69,8 @@
 
 #define PERIPH_CLK_SOURCE_MASK         (3<<30)
 #define PERIPH_CLK_SOURCE_SHIFT                30
+#define PERIPH_CLK_SOURCE_PWM_MASK     (7<<28)
+#define PERIPH_CLK_SOURCE_PWM_SHIFT    28
 #define PERIPH_CLK_SOURCE_ENABLE       (1<<28)
 #define PERIPH_CLK_SOURCE_DIVU71_MASK  0xFF
 #define PERIPH_CLK_SOURCE_DIVU16_MASK  0xFFFF
@@ -908,9 +910,20 @@ static void tegra2_periph_clk_init(struct clk *c)
        u32 val = clk_readl(c->reg);
        const struct clk_mux_sel *mux = NULL;
        const struct clk_mux_sel *sel;
+       u32 shift;
+       u32 mask;
+
+       if (c->flags & MUX_PWM) {
+               shift = PERIPH_CLK_SOURCE_PWM_SHIFT;
+               mask = PERIPH_CLK_SOURCE_PWM_MASK;
+       } else {
+               shift = PERIPH_CLK_SOURCE_SHIFT;
+               mask = PERIPH_CLK_SOURCE_MASK;
+       }
+
        if (c->flags & MUX) {
                for (sel = c->inputs; sel->input != NULL; sel++) {
-                       if (val >> PERIPH_CLK_SOURCE_SHIFT == sel->value)
+                       if ((val & mask) >> shift == sel->value)
                                mux = sel;
                }
                BUG_ON(!mux);
@@ -1023,12 +1036,23 @@ static int tegra2_periph_clk_set_parent(struct clk *c, struct clk *p)
 {
        u32 val;
        const struct clk_mux_sel *sel;
+       u32 mask, shift;
+
        pr_debug("%s: %s %s\n", __func__, c->name, p->name);
+
+       if (c->flags & MUX_PWM) {
+               shift = PERIPH_CLK_SOURCE_PWM_SHIFT;
+               mask = PERIPH_CLK_SOURCE_PWM_MASK;
+       } else {
+               shift = PERIPH_CLK_SOURCE_SHIFT;
+               mask = PERIPH_CLK_SOURCE_MASK;
+       }
+
        for (sel = c->inputs; sel->input != NULL; sel++) {
                if (sel->input == p) {
                        val = clk_readl(c->reg);
-                       val &= ~PERIPH_CLK_SOURCE_MASK;
-                       val |= (sel->value) << PERIPH_CLK_SOURCE_SHIFT;
+                       val &= ~mask;
+                       val |= (sel->value) << shift;
 
                        if (c->refcnt)
                                clk_enable(p);
@@ -2149,14 +2173,14 @@ static struct clk tegra_clk_emc = {
        }
 
 static struct clk tegra_list_clks[] = {
-       PERIPH_CLK("apbdma",    "tegra-dma",            NULL,   34,     0,      108000000, mux_pclk,                    0),
+       PERIPH_CLK("apbdma",    "tegra-apbdma",         NULL,   34,     0,      108000000, mux_pclk,                    0),
        PERIPH_CLK("rtc",       "rtc-tegra",            NULL,   4,      0,      32768,     mux_clk_32k,                 PERIPH_NO_RESET),
        PERIPH_CLK("timer",     "timer",                NULL,   5,      0,      26000000,  mux_clk_m,                   0),
        PERIPH_CLK("i2s1",      "tegra20-i2s.0",        NULL,   11,     0x100,  26000000,  mux_pllaout0_audio2x_pllp_clkm,      MUX | DIV_U71),
        PERIPH_CLK("i2s2",      "tegra20-i2s.1",        NULL,   18,     0x104,  26000000,  mux_pllaout0_audio2x_pllp_clkm,      MUX | DIV_U71),
        PERIPH_CLK("spdif_out", "spdif_out",            NULL,   10,     0x108,  100000000, mux_pllaout0_audio2x_pllp_clkm,      MUX | DIV_U71),
        PERIPH_CLK("spdif_in",  "spdif_in",             NULL,   10,     0x10c,  100000000, mux_pllp_pllc_pllm,          MUX | DIV_U71),
-       PERIPH_CLK("pwm",       "pwm",                  NULL,   17,     0x110,  432000000, mux_pllp_pllc_audio_clkm_clk32,      MUX | DIV_U71),
+       PERIPH_CLK("pwm",       "tegra-pwm",            NULL,   17,     0x110,  432000000, mux_pllp_pllc_audio_clkm_clk32,      MUX | DIV_U71 | MUX_PWM),
        PERIPH_CLK("spi",       "spi",                  NULL,   43,     0x114,  40000000,  mux_pllp_pllc_pllm_clkm,     MUX | DIV_U71),
        PERIPH_CLK("xio",       "xio",                  NULL,   45,     0x120,  150000000, mux_pllp_pllc_pllm_clkm,     MUX | DIV_U71),
        PERIPH_CLK("twc",       "twc",                  NULL,   16,     0x12c,  150000000, mux_pllp_pllc_pllm_clkm,     MUX | DIV_U71),
@@ -2189,11 +2213,11 @@ static struct clk tegra_list_clks[] = {
        PERIPH_CLK("i2c2_i2c",  "tegra-i2c.1",          "i2c",  0,      0,      72000000,  mux_pllp_out3,                       0),
        PERIPH_CLK("i2c3_i2c",  "tegra-i2c.2",          "i2c",  0,      0,      72000000,  mux_pllp_out3,                       0),
        PERIPH_CLK("dvc_i2c",   "tegra-i2c.3",          "i2c",  0,      0,      72000000,  mux_pllp_out3,                       0),
-       PERIPH_CLK("uarta",     "uart.0",               NULL,   6,      0x178,  600000000, mux_pllp_pllc_pllm_clkm,     MUX),
-       PERIPH_CLK("uartb",     "uart.1",               NULL,   7,      0x17c,  600000000, mux_pllp_pllc_pllm_clkm,     MUX),
-       PERIPH_CLK("uartc",     "uart.2",               NULL,   55,     0x1a0,  600000000, mux_pllp_pllc_pllm_clkm,     MUX),
-       PERIPH_CLK("uartd",     "uart.3",               NULL,   65,     0x1c0,  600000000, mux_pllp_pllc_pllm_clkm,     MUX),
-       PERIPH_CLK("uarte",     "uart.4",               NULL,   66,     0x1c4,  600000000, mux_pllp_pllc_pllm_clkm,     MUX),
+       PERIPH_CLK("uarta",     "tegra-uart.0",         NULL,   6,      0x178,  600000000, mux_pllp_pllc_pllm_clkm,     MUX),
+       PERIPH_CLK("uartb",     "tegra-uart.1",         NULL,   7,      0x17c,  600000000, mux_pllp_pllc_pllm_clkm,     MUX),
+       PERIPH_CLK("uartc",     "tegra-uart.2",         NULL,   55,     0x1a0,  600000000, mux_pllp_pllc_pllm_clkm,     MUX),
+       PERIPH_CLK("uartd",     "tegra-uart.3",         NULL,   65,     0x1c0,  600000000, mux_pllp_pllc_pllm_clkm,     MUX),
+       PERIPH_CLK("uarte",     "tegra-uart.4",         NULL,   66,     0x1c4,  600000000, mux_pllp_pllc_pllm_clkm,     MUX),
        PERIPH_CLK("3d",        "3d",                   NULL,   24,     0x158,  300000000, mux_pllm_pllc_pllp_plla,     MUX | DIV_U71 | PERIPH_MANUAL_RESET), /* scales with voltage and process_id */
        PERIPH_CLK("2d",        "2d",                   NULL,   21,     0x15c,  300000000, mux_pllm_pllc_pllp_plla,     MUX | DIV_U71), /* scales with voltage and process_id */
        PERIPH_CLK("vi",        "tegra_camera",         "vi",   20,     0x148,  150000000, mux_pllm_pllc_pllp_plla,     MUX | DIV_U71), /* scales with voltage and process_id */
@@ -2245,20 +2269,16 @@ static struct clk tegra_list_clks[] = {
  * table under two names.
  */
 static struct clk_duplicate tegra_clk_duplicates[] = {
-       CLK_DUPLICATE("uarta",  "tegra_uart.0", NULL),
-       CLK_DUPLICATE("uartb",  "tegra_uart.1", NULL),
-       CLK_DUPLICATE("uartc",  "tegra_uart.2", NULL),
-       CLK_DUPLICATE("uartd",  "tegra_uart.3", NULL),
-       CLK_DUPLICATE("uarte",  "tegra_uart.4", NULL),
+       CLK_DUPLICATE("uarta",  "serial8250.0", NULL),
+       CLK_DUPLICATE("uartb",  "serial8250.1", NULL),
+       CLK_DUPLICATE("uartc",  "serial8250.2", NULL),
+       CLK_DUPLICATE("uartd",  "serial8250.3", NULL),
+       CLK_DUPLICATE("uarte",  "serial8250.4", NULL),
        CLK_DUPLICATE("usbd", "utmip-pad", NULL),
        CLK_DUPLICATE("usbd", "tegra-ehci.0", NULL),
        CLK_DUPLICATE("usbd", "tegra-otg", NULL),
        CLK_DUPLICATE("hdmi", "tegradc.0", "hdmi"),
        CLK_DUPLICATE("hdmi", "tegradc.1", "hdmi"),
-       CLK_DUPLICATE("pwm", "tegra_pwm.0", NULL),
-       CLK_DUPLICATE("pwm", "tegra_pwm.1", NULL),
-       CLK_DUPLICATE("pwm", "tegra_pwm.2", NULL),
-       CLK_DUPLICATE("pwm", "tegra_pwm.3", NULL),
        CLK_DUPLICATE("host1x", "tegra_grhost", "host1x"),
        CLK_DUPLICATE("2d", "tegra_grhost", "gr2d"),
        CLK_DUPLICATE("3d", "tegra_grhost", "gr3d"),
index e33fe4b14a2a5ab86f674c1848320740448bfa6c..6674f100e16f8076e804a508a488e6c5e36a8a9b 100644 (file)
@@ -2871,7 +2871,7 @@ static struct clk tegra30_clk_twd = {
                },                                      \
        }
 struct clk tegra_list_clks[] = {
-       PERIPH_CLK("apbdma",    "tegra-dma",            NULL,   34,     0,      26000000,  mux_clk_m,                   0),
+       PERIPH_CLK("apbdma",    "tegra-apbdma",         NULL,   34,     0,      26000000,  mux_clk_m,                   0),
        PERIPH_CLK("rtc",       "rtc-tegra",            NULL,   4,      0,      32768,     mux_clk_32k,                 PERIPH_NO_RESET | PERIPH_ON_APB),
        PERIPH_CLK("kbc",       "tegra-kbc",            NULL,   36,     0,      32768,     mux_clk_32k,                 PERIPH_NO_RESET | PERIPH_ON_APB),
        PERIPH_CLK("timer",     "timer",                NULL,   5,      0,      26000000,  mux_clk_m,                   0),
@@ -2886,7 +2886,7 @@ struct clk tegra_list_clks[] = {
        PERIPH_CLK("i2s4",      "tegra30-i2s.4",        NULL,   102,    0x3c0,  26000000,  mux_pllaout0_audio4_2x_pllp_clkm,    MUX | DIV_U71 | PERIPH_ON_APB),
        PERIPH_CLK("spdif_out", "tegra30-spdif",        "spdif_out",    10,     0x108,  100000000, mux_pllaout0_audio_2x_pllp_clkm,     MUX | DIV_U71 | PERIPH_ON_APB),
        PERIPH_CLK("spdif_in",  "tegra30-spdif",        "spdif_in",     10,     0x10c,  100000000, mux_pllp_pllc_pllm,          MUX | DIV_U71 | PERIPH_ON_APB),
-       PERIPH_CLK("pwm",       "pwm",                  NULL,   17,     0x110,  432000000, mux_pllp_pllc_clk32_clkm,    MUX | MUX_PWM | DIV_U71 | PERIPH_ON_APB),
+       PERIPH_CLK("pwm",       "tegra-pwm",            NULL,   17,     0x110,  432000000, mux_pllp_pllc_clk32_clkm,    MUX | MUX_PWM | DIV_U71 | PERIPH_ON_APB),
        PERIPH_CLK("d_audio",   "tegra30-ahub",         "d_audio", 106, 0x3d0,  48000000,  mux_plla_pllc_pllp_clkm,     MUX | DIV_U71),
        PERIPH_CLK("dam0",      "tegra30-dam.0",        NULL,   108,    0x3d8,  48000000,  mux_plla_pllc_pllp_clkm,     MUX | DIV_U71),
        PERIPH_CLK("dam1",      "tegra30-dam.1",        NULL,   109,    0x3dc,  48000000,  mux_plla_pllc_pllp_clkm,     MUX | DIV_U71),
@@ -2924,16 +2924,11 @@ struct clk tegra_list_clks[] = {
        PERIPH_CLK("i2c3",      "tegra-i2c.2",          NULL,   67,     0x1b8,  26000000,  mux_pllp_clkm,               MUX | DIV_U16 | PERIPH_ON_APB),
        PERIPH_CLK("i2c4",      "tegra-i2c.3",          NULL,   103,    0x3c4,  26000000,  mux_pllp_clkm,               MUX | DIV_U16 | PERIPH_ON_APB),
        PERIPH_CLK("i2c5",      "tegra-i2c.4",          NULL,   47,     0x128,  26000000,  mux_pllp_clkm,               MUX | DIV_U16 | PERIPH_ON_APB),
-       PERIPH_CLK("uarta",     "tegra_uart.0",         NULL,   6,      0x178,  800000000, mux_pllp_pllc_pllm_clkm,     MUX | DIV_U71 | DIV_U71_UART | PERIPH_ON_APB),
-       PERIPH_CLK("uartb",     "tegra_uart.1",         NULL,   7,      0x17c,  800000000, mux_pllp_pllc_pllm_clkm,     MUX | DIV_U71 | DIV_U71_UART | PERIPH_ON_APB),
-       PERIPH_CLK("uartc",     "tegra_uart.2",         NULL,   55,     0x1a0,  800000000, mux_pllp_pllc_pllm_clkm,     MUX | DIV_U71 | DIV_U71_UART | PERIPH_ON_APB),
-       PERIPH_CLK("uartd",     "tegra_uart.3",         NULL,   65,     0x1c0,  800000000, mux_pllp_pllc_pllm_clkm,     MUX | DIV_U71 | DIV_U71_UART | PERIPH_ON_APB),
-       PERIPH_CLK("uarte",     "tegra_uart.4",         NULL,   66,     0x1c4,  800000000, mux_pllp_pllc_pllm_clkm,     MUX | DIV_U71 | DIV_U71_UART | PERIPH_ON_APB),
-       PERIPH_CLK("uarta_dbg", "serial8250.0",         "uarta", 6,     0x178,  800000000, mux_pllp_clkm,               MUX | DIV_U71 | DIV_U71_UART | PERIPH_ON_APB),
-       PERIPH_CLK("uartb_dbg", "serial8250.0",         "uartb", 7,     0x17c,  800000000, mux_pllp_clkm,               MUX | DIV_U71 | DIV_U71_UART | PERIPH_ON_APB),
-       PERIPH_CLK("uartc_dbg", "serial8250.0",         "uartc", 55,    0x1a0,  800000000, mux_pllp_clkm,               MUX | DIV_U71 | DIV_U71_UART | PERIPH_ON_APB),
-       PERIPH_CLK("uartd_dbg", "serial8250.0",         "uartd", 65,    0x1c0,  800000000, mux_pllp_clkm,               MUX | DIV_U71 | DIV_U71_UART | PERIPH_ON_APB),
-       PERIPH_CLK("uarte_dbg", "serial8250.0",         "uarte", 66,    0x1c4,  800000000, mux_pllp_clkm,               MUX | DIV_U71 | DIV_U71_UART | PERIPH_ON_APB),
+       PERIPH_CLK("uarta",     "tegra-uart.0",         NULL,   6,      0x178,  800000000, mux_pllp_pllc_pllm_clkm,     MUX | DIV_U71 | DIV_U71_UART | PERIPH_ON_APB),
+       PERIPH_CLK("uartb",     "tegra-uart.1",         NULL,   7,      0x17c,  800000000, mux_pllp_pllc_pllm_clkm,     MUX | DIV_U71 | DIV_U71_UART | PERIPH_ON_APB),
+       PERIPH_CLK("uartc",     "tegra-uart.2",         NULL,   55,     0x1a0,  800000000, mux_pllp_pllc_pllm_clkm,     MUX | DIV_U71 | DIV_U71_UART | PERIPH_ON_APB),
+       PERIPH_CLK("uartd",     "tegra-uart.3",         NULL,   65,     0x1c0,  800000000, mux_pllp_pllc_pllm_clkm,     MUX | DIV_U71 | DIV_U71_UART | PERIPH_ON_APB),
+       PERIPH_CLK("uarte",     "tegra-uart.4",         NULL,   66,     0x1c4,  800000000, mux_pllp_pllc_pllm_clkm,     MUX | DIV_U71 | DIV_U71_UART | PERIPH_ON_APB),
        PERIPH_CLK_EX("vi",     "tegra_camera",         "vi",   20,     0x148,  425000000, mux_pllm_pllc_pllp_plla,     MUX | DIV_U71 | DIV_U71_INT,    &tegra_vi_clk_ops),
        PERIPH_CLK("3d",        "3d",                   NULL,   24,     0x158,  520000000, mux_pllm_pllc_pllp_plla,     MUX | DIV_U71 | DIV_U71_INT | DIV_U71_IDLE | PERIPH_MANUAL_RESET),
        PERIPH_CLK("3d2",       "3d2",                  NULL,   98,     0x3b0,  520000000, mux_pllm_pllc_pllp_plla,     MUX | DIV_U71 | DIV_U71_INT | DIV_U71_IDLE | PERIPH_MANUAL_RESET),
@@ -2983,6 +2978,11 @@ struct clk tegra_list_clks[] = {
  * table under two names.
  */
 struct clk_duplicate tegra_clk_duplicates[] = {
+       CLK_DUPLICATE("uarta",  "serial8250.0", NULL),
+       CLK_DUPLICATE("uartb",  "serial8250.1", NULL),
+       CLK_DUPLICATE("uartc",  "serial8250.2", NULL),
+       CLK_DUPLICATE("uartd",  "serial8250.3", NULL),
+       CLK_DUPLICATE("uarte",  "serial8250.4", NULL),
        CLK_DUPLICATE("usbd", "utmip-pad", NULL),
        CLK_DUPLICATE("usbd", "tegra-ehci.0", NULL),
        CLK_DUPLICATE("usbd", "tegra-otg", NULL),
@@ -2990,10 +2990,6 @@ struct clk_duplicate tegra_clk_duplicates[] = {
        CLK_DUPLICATE("hdmi", "tegradc.1", "hdmi"),
        CLK_DUPLICATE("dsib", "tegradc.0", "dsib"),
        CLK_DUPLICATE("dsia", "tegradc.1", "dsia"),
-       CLK_DUPLICATE("pwm", "tegra_pwm.0", NULL),
-       CLK_DUPLICATE("pwm", "tegra_pwm.1", NULL),
-       CLK_DUPLICATE("pwm", "tegra_pwm.2", NULL),
-       CLK_DUPLICATE("pwm", "tegra_pwm.3", NULL),
        CLK_DUPLICATE("bsev", "tegra-avp", "bsev"),
        CLK_DUPLICATE("bsev", "nvavp", "bsev"),
        CLK_DUPLICATE("vde", "tegra-aes", "vde"),
index 315672c7bd48f09e4c684fdb048cafde0857ab2c..57b5bdc13b9b9525b227e05e85907d508e2617c5 100644 (file)
@@ -189,7 +189,7 @@ static void __init tegra_init_timer(void)
                        " Assuming 12Mhz input clock.\n");
                rate = 12000000;
        } else {
-               clk_enable(clk);
+               clk_prepare_enable(clk);
                rate = clk_get_rate(clk);
        }
 
@@ -201,7 +201,7 @@ static void __init tegra_init_timer(void)
        if (IS_ERR(clk))
                pr_warn("Unable to get rtc-tegra clock\n");
        else
-               clk_enable(clk);
+               clk_prepare_enable(clk);
 
        switch (rate) {
        case 12000000:
index 54e353c8e3042f61e7c487c16f1cd29d22758fb6..022b33a05c3a22f8586d835271d26508abbdbab4 100644 (file)
@@ -247,7 +247,7 @@ static void utmip_pad_power_on(struct tegra_usb_phy *phy)
        unsigned long val, flags;
        void __iomem *base = phy->pad_regs;
 
-       clk_enable(phy->pad_clk);
+       clk_prepare_enable(phy->pad_clk);
 
        spin_lock_irqsave(&utmip_pad_lock, flags);
 
@@ -259,7 +259,7 @@ static void utmip_pad_power_on(struct tegra_usb_phy *phy)
 
        spin_unlock_irqrestore(&utmip_pad_lock, flags);
 
-       clk_disable(phy->pad_clk);
+       clk_disable_unprepare(phy->pad_clk);
 }
 
 static int utmip_pad_power_off(struct tegra_usb_phy *phy)
@@ -272,7 +272,7 @@ static int utmip_pad_power_off(struct tegra_usb_phy *phy)
                return -EINVAL;
        }
 
-       clk_enable(phy->pad_clk);
+       clk_prepare_enable(phy->pad_clk);
 
        spin_lock_irqsave(&utmip_pad_lock, flags);
 
@@ -284,7 +284,7 @@ static int utmip_pad_power_off(struct tegra_usb_phy *phy)
 
        spin_unlock_irqrestore(&utmip_pad_lock, flags);
 
-       clk_disable(phy->pad_clk);
+       clk_disable_unprepare(phy->pad_clk);
 
        return 0;
 }
@@ -580,7 +580,7 @@ static int ulpi_phy_power_on(struct tegra_usb_phy *phy)
        msleep(5);
        gpio_direction_output(config->reset_gpio, 1);
 
-       clk_enable(phy->clk);
+       clk_prepare_enable(phy->clk);
        msleep(1);
 
        val = readl(base + USB_SUSP_CTRL);
@@ -689,7 +689,7 @@ struct tegra_usb_phy *tegra_usb_phy_open(struct device *dev, int instance,
                err = PTR_ERR(phy->pll_u);
                goto err0;
        }
-       clk_enable(phy->pll_u);
+       clk_prepare_enable(phy->pll_u);
 
        parent_rate = clk_get_rate(clk_get_parent(phy->pll_u));
        for (i = 0; i < ARRAY_SIZE(tegra_freq_table); i++) {
@@ -735,7 +735,7 @@ struct tegra_usb_phy *tegra_usb_phy_open(struct device *dev, int instance,
        return phy;
 
 err1:
-       clk_disable(phy->pll_u);
+       clk_disable_unprepare(phy->pll_u);
        clk_put(phy->pll_u);
 err0:
        kfree(phy);
@@ -810,7 +810,7 @@ void tegra_usb_phy_close(struct tegra_usb_phy *phy)
                clk_put(phy->clk);
        else
                utmip_pad_close(phy);
-       clk_disable(phy->pll_u);
+       clk_disable_unprepare(phy->pll_u);
        clk_put(phy->pll_u);
        kfree(phy);
 }
index 9bfae8bd5b8db54e750acf5ef296c220f586a6ab..9c50c14c8f927fbf8e28018f817128e41a70018c 100644 (file)
@@ -95,7 +95,7 @@ const struct imx_spi_imx_data imx51_ecspi_data[] __initconst = {
 #ifdef CONFIG_SOC_IMX53
 /* i.mx53 has the i.mx35 type cspi */
 const struct imx_spi_imx_data imx53_cspi_data __initconst =
-       imx_spi_imx_data_entry_single(MX53, CSPI, "imx35-cspi", 0, , SZ_4K);
+       imx_spi_imx_data_entry_single(MX53, CSPI, "imx35-cspi", 2, , SZ_4K);
 
 /* i.mx53 has the i.mx51 type ecspi */
 const struct imx_spi_imx_data imx53_ecspi_data[] __initconst = {
index 00e8e659e66762104fc487cada9bbd8e81968df8..a17abcf983259064ff2a87664d81d3610b6ef3b1 100644 (file)
@@ -160,7 +160,8 @@ static const char *clock_event_mode_label[] = {
        [CLOCK_EVT_MODE_PERIODIC] = "CLOCK_EVT_MODE_PERIODIC",
        [CLOCK_EVT_MODE_ONESHOT]  = "CLOCK_EVT_MODE_ONESHOT",
        [CLOCK_EVT_MODE_SHUTDOWN] = "CLOCK_EVT_MODE_SHUTDOWN",
-       [CLOCK_EVT_MODE_UNUSED]   = "CLOCK_EVT_MODE_UNUSED"
+       [CLOCK_EVT_MODE_UNUSED]   = "CLOCK_EVT_MODE_UNUSED",
+       [CLOCK_EVT_MODE_RESUME]   = "CLOCK_EVT_MODE_RESUME",
 };
 #endif /* DEBUG */
 
index d0ed8c443a635ebb03be51c3c17843945a1638f8..025d85a3ee866a66f6f4cc39452b99b3e1cba42c 100644 (file)
@@ -39,6 +39,7 @@ struct omap_clk {
 #define CK_443X                (1 << 11)
 #define CK_TI816X      (1 << 12)
 #define CK_446X                (1 << 13)
+#define CK_AM33XX      (1 << 14)       /* AM33xx specific clocks */
 #define CK_1710                (1 << 15)       /* 1710 extra for rate selection */
 
 
index 422a9766c7c9f68b742302d710a79bc578e57aee..ac236f6724f4bf11d1130b1258af8eff0b731044 100644 (file)
@@ -572,7 +572,7 @@ static void aes_workqueue_handler(struct work_struct *work)
        struct tegra_aes_dev *dd = aes_dev;
        int ret;
 
-       ret = clk_enable(dd->aes_clk);
+       ret = clk_prepare_enable(dd->aes_clk);
        if (ret)
                BUG_ON("clock enable failed");
 
@@ -581,7 +581,7 @@ static void aes_workqueue_handler(struct work_struct *work)
                ret = tegra_aes_handle_req(dd);
        } while (!ret);
 
-       clk_disable(dd->aes_clk);
+       clk_disable_unprepare(dd->aes_clk);
 }
 
 static irqreturn_t aes_irq(int irq, void *dev_id)
@@ -673,7 +673,7 @@ static int tegra_aes_get_random(struct crypto_rng *tfm, u8 *rdata,
        /* take mutex to access the aes hw */
        mutex_lock(&aes_lock);
 
-       ret = clk_enable(dd->aes_clk);
+       ret = clk_prepare_enable(dd->aes_clk);
        if (ret)
                return ret;
 
@@ -700,7 +700,7 @@ static int tegra_aes_get_random(struct crypto_rng *tfm, u8 *rdata,
        }
 
 out:
-       clk_disable(dd->aes_clk);
+       clk_disable_unprepare(dd->aes_clk);
        mutex_unlock(&aes_lock);
 
        dev_dbg(dd->dev, "%s: done\n", __func__);
@@ -758,7 +758,7 @@ static int tegra_aes_rng_reset(struct crypto_rng *tfm, u8 *seed,
 
        dd->flags = FLAGS_ENCRYPT | FLAGS_RNG;
 
-       ret = clk_enable(dd->aes_clk);
+       ret = clk_prepare_enable(dd->aes_clk);
        if (ret)
                return ret;
 
@@ -788,7 +788,7 @@ static int tegra_aes_rng_reset(struct crypto_rng *tfm, u8 *seed,
        memcpy(dd->dt, dt, DEFAULT_RNG_BLK_SZ);
 
 out:
-       clk_disable(dd->aes_clk);
+       clk_disable_unprepare(dd->aes_clk);
        mutex_unlock(&aes_lock);
 
        dev_dbg(dd->dev, "%s: done\n", __func__);
index 8b2e555a9563204476be25184d442d0422a49920..3da7ee3eb505e0816d809093958f0259816c3450 100644 (file)
@@ -341,7 +341,7 @@ static int tegra_i2c_init(struct tegra_i2c_dev *i2c_dev)
        u32 val;
        int err = 0;
 
-       clk_enable(i2c_dev->clk);
+       clk_prepare_enable(i2c_dev->clk);
 
        tegra_periph_reset_assert(i2c_dev->clk);
        udelay(2);
@@ -372,7 +372,7 @@ static int tegra_i2c_init(struct tegra_i2c_dev *i2c_dev)
        if (tegra_i2c_flush_fifos(i2c_dev))
                err = -ETIMEDOUT;
 
-       clk_disable(i2c_dev->clk);
+       clk_disable_unprepare(i2c_dev->clk);
 
        if (i2c_dev->irq_disabled) {
                i2c_dev->irq_disabled = 0;
@@ -546,14 +546,14 @@ static int tegra_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg msgs[],
        if (i2c_dev->is_suspended)
                return -EBUSY;
 
-       clk_enable(i2c_dev->clk);
+       clk_prepare_enable(i2c_dev->clk);
        for (i = 0; i < num; i++) {
                int stop = (i == (num - 1)) ? 1  : 0;
                ret = tegra_i2c_xfer_msg(i2c_dev, &msgs[i], stop);
                if (ret)
                        break;
        }
-       clk_disable(i2c_dev->clk);
+       clk_disable_unprepare(i2c_dev->clk);
        return ret ?: i;
 }
 
@@ -666,7 +666,7 @@ static int __devinit tegra_i2c_probe(struct platform_device *pdev)
                goto err_free;
        }
 
-       clk_enable(i2c_dev->i2c_clk);
+       clk_prepare_enable(i2c_dev->i2c_clk);
 
        i2c_set_adapdata(&i2c_dev->adapter, i2c_dev);
        i2c_dev->adapter.owner = THIS_MODULE;
index 4ffe64d53107f48336999d4753299a3cc03fa8ae..2c1c9ed1bd9f6ad194405c73d1d14a368ee3ade9 100644 (file)
@@ -492,7 +492,7 @@ static int tegra_kbc_start(struct tegra_kbc *kbc)
        unsigned int debounce_cnt;
        u32 val = 0;
 
-       clk_enable(kbc->clk);
+       clk_prepare_enable(kbc->clk);
 
        /* Reset the KBC controller to clear all previous status.*/
        tegra_periph_reset_assert(kbc->clk);
@@ -556,7 +556,7 @@ static void tegra_kbc_stop(struct tegra_kbc *kbc)
        disable_irq(kbc->irq);
        del_timer_sync(&kbc->timer);
 
-       clk_disable(kbc->clk);
+       clk_disable_unprepare(kbc->clk);
 }
 
 static int tegra_kbc_open(struct input_dev *dev)
index 6e5338a071cead5569dce9ccdd13d2610534650f..0810ccc23d7e8fb951fecf7b75774b2ae4e5984e 100644 (file)
@@ -337,7 +337,7 @@ static int __devinit sdhci_tegra_probe(struct platform_device *pdev)
                rc = PTR_ERR(clk);
                goto err_clk_get;
        }
-       clk_enable(clk);
+       clk_prepare_enable(clk);
        pltfm_host->clk = clk;
 
        host->mmc->pm_caps = plat->pm_flags;
@@ -352,7 +352,7 @@ static int __devinit sdhci_tegra_probe(struct platform_device *pdev)
        return 0;
 
 err_add_host:
-       clk_disable(pltfm_host->clk);
+       clk_disable_unprepare(pltfm_host->clk);
        clk_put(pltfm_host->clk);
 err_clk_get:
        if (gpio_is_valid(plat->wp_gpio))
@@ -393,7 +393,7 @@ static int __devexit sdhci_tegra_remove(struct platform_device *pdev)
        if (gpio_is_valid(plat->power_gpio))
                gpio_free(plat->power_gpio);
 
-       clk_disable(pltfm_host->clk);
+       clk_disable_unprepare(pltfm_host->clk);
        clk_put(pltfm_host->clk);
 
        sdhci_pltfm_free(pdev);
index ae6d78a3e9129a483ecf60ee5919dc4a685b3235..7f99ff3553a65fa1565aae949fd019d10762a452 100644 (file)
@@ -261,7 +261,7 @@ static void spi_tegra_start_transfer(struct spi_device *spi,
                clk_set_rate(tspi->clk, speed);
 
        if (tspi->cur_speed == 0)
-               clk_enable(tspi->clk);
+               clk_prepare_enable(tspi->clk);
 
        tspi->cur_speed = speed;
 
@@ -373,7 +373,7 @@ static void tegra_spi_rx_dma_complete(struct tegra_dma_req *req)
                        spi = m->state;
                        spi_tegra_start_message(spi, m);
                } else {
-                       clk_disable(tspi->clk);
+                       clk_disable_unprepare(tspi->clk);
                        tspi->cur_speed = 0;
                }
        }
index 3c60088871e0b137dbc0632c634fc86b6aabaf4f..9356886f489bcfd7e3939b4f0c7bf042ed0090d3 100644 (file)
@@ -675,7 +675,7 @@ static void tegra_init_i2c_slave(struct nvec_chip *nvec)
 {
        u32 val;
 
-       clk_enable(nvec->i2c_clk);
+       clk_prepare_enable(nvec->i2c_clk);
 
        tegra_periph_reset_assert(nvec->i2c_clk);
        udelay(2);
@@ -695,14 +695,14 @@ static void tegra_init_i2c_slave(struct nvec_chip *nvec)
 
        enable_irq(nvec->irq);
 
-       clk_disable(nvec->i2c_clk);
+       clk_disable_unprepare(nvec->i2c_clk);
 }
 
 static void nvec_disable_i2c_slave(struct nvec_chip *nvec)
 {
        disable_irq(nvec->irq);
        writel(I2C_SL_NEWSL | I2C_SL_NACK, nvec->base + I2C_SL_CNFG);
-       clk_disable(nvec->i2c_clk);
+       clk_disable_unprepare(nvec->i2c_clk);
 }
 
 static void nvec_power_off(void)
@@ -812,7 +812,7 @@ static int __devinit tegra_nvec_probe(struct platform_device *pdev)
 
        tegra_init_i2c_slave(nvec);
 
-       clk_enable(i2c_clk);
+       clk_prepare_enable(i2c_clk);
 
 
        /* enable event reporting */
index 68548236ec4228ceb224d69845daba6345bf9971..ab8a3bf628e3480cc197e3e2c2e1ea32667bb85d 100644 (file)
@@ -46,8 +46,8 @@ static void tegra_ehci_power_up(struct usb_hcd *hcd)
 {
        struct tegra_ehci_hcd *tegra = dev_get_drvdata(hcd->self.controller);
 
-       clk_enable(tegra->emc_clk);
-       clk_enable(tegra->clk);
+       clk_prepare_enable(tegra->emc_clk);
+       clk_prepare_enable(tegra->clk);
        tegra_usb_phy_power_on(tegra->phy);
        tegra->host_resumed = 1;
 }
@@ -58,8 +58,8 @@ static void tegra_ehci_power_down(struct usb_hcd *hcd)
 
        tegra->host_resumed = 0;
        tegra_usb_phy_power_off(tegra->phy);
-       clk_disable(tegra->clk);
-       clk_disable(tegra->emc_clk);
+       clk_disable_unprepare(tegra->clk);
+       clk_disable_unprepare(tegra->emc_clk);
 }
 
 static int tegra_ehci_internal_port_reset(
@@ -671,7 +671,7 @@ static int tegra_ehci_probe(struct platform_device *pdev)
                goto fail_clk;
        }
 
-       err = clk_enable(tegra->clk);
+       err = clk_prepare_enable(tegra->clk);
        if (err)
                goto fail_clken;
 
@@ -682,7 +682,7 @@ static int tegra_ehci_probe(struct platform_device *pdev)
                goto fail_emc_clk;
        }
 
-       clk_enable(tegra->emc_clk);
+       clk_prepare_enable(tegra->emc_clk);
        clk_set_rate(tegra->emc_clk, 400000000);
 
        res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
@@ -782,10 +782,10 @@ fail:
 fail_phy:
        iounmap(hcd->regs);
 fail_io:
-       clk_disable(tegra->emc_clk);
+       clk_disable_unprepare(tegra->emc_clk);
        clk_put(tegra->emc_clk);
 fail_emc_clk:
-       clk_disable(tegra->clk);
+       clk_disable_unprepare(tegra->clk);
 fail_clken:
        clk_put(tegra->clk);
 fail_clk:
@@ -820,10 +820,10 @@ static int tegra_ehci_remove(struct platform_device *pdev)
        tegra_usb_phy_close(tegra->phy);
        iounmap(hcd->regs);
 
-       clk_disable(tegra->clk);
+       clk_disable_unprepare(tegra->clk);
        clk_put(tegra->clk);
 
-       clk_disable(tegra->emc_clk);
+       clk_disable_unprepare(tegra->emc_clk);
        clk_put(tegra->emc_clk);
 
        kfree(tegra);
index 0c7af63d444b4ba42f8305a8d12392668718e624..1647dbfe74b5f7dd324331ae5d92e8dc4e5b1740 100644 (file)
@@ -62,7 +62,7 @@ static int tegra20_i2s_runtime_suspend(struct device *dev)
 {
        struct tegra20_i2s *i2s = dev_get_drvdata(dev);
 
-       clk_disable(i2s->clk_i2s);
+       clk_disable_unprepare(i2s->clk_i2s);
 
        return 0;
 }
@@ -72,7 +72,7 @@ static int tegra20_i2s_runtime_resume(struct device *dev)
        struct tegra20_i2s *i2s = dev_get_drvdata(dev);
        int ret;
 
-       ret = clk_enable(i2s->clk_i2s);
+       ret = clk_prepare_enable(i2s->clk_i2s);
        if (ret) {
                dev_err(dev, "clk_enable failed: %d\n", ret);
                return ret;
index f9b57418bd088c42f83f7e4bfde699dd7407298d..2262e4fdec2af6f2fc85edb65c3f1cf180643a2c 100644 (file)
@@ -54,7 +54,7 @@ static int tegra20_spdif_runtime_suspend(struct device *dev)
 {
        struct tegra20_spdif *spdif = dev_get_drvdata(dev);
 
-       clk_disable(spdif->clk_spdif_out);
+       clk_disable_unprepare(spdif->clk_spdif_out);
 
        return 0;
 }
@@ -64,7 +64,7 @@ static int tegra20_spdif_runtime_resume(struct device *dev)
        struct tegra20_spdif *spdif = dev_get_drvdata(dev);
        int ret;
 
-       ret = clk_enable(spdif->clk_spdif_out);
+       ret = clk_prepare_enable(spdif->clk_spdif_out);
        if (ret) {
                dev_err(dev, "clk_enable failed: %d\n", ret);
                return ret;
index f43edb364a185de5cb2f3c43aa16850a32c2236e..bf5610122c763b85ec91f7132f6eb00de92a2b06 100644 (file)
@@ -56,8 +56,8 @@ static int tegra30_ahub_runtime_suspend(struct device *dev)
        regcache_cache_only(ahub->regmap_apbif, true);
        regcache_cache_only(ahub->regmap_ahub, true);
 
-       clk_disable(ahub->clk_apbif);
-       clk_disable(ahub->clk_d_audio);
+       clk_disable_unprepare(ahub->clk_apbif);
+       clk_disable_unprepare(ahub->clk_d_audio);
 
        return 0;
 }
@@ -77,12 +77,12 @@ static int tegra30_ahub_runtime_resume(struct device *dev)
 {
        int ret;
 
-       ret = clk_enable(ahub->clk_d_audio);
+       ret = clk_prepare_enable(ahub->clk_d_audio);
        if (ret) {
                dev_err(dev, "clk_enable d_audio failed: %d\n", ret);
                return ret;
        }
-       ret = clk_enable(ahub->clk_apbif);
+       ret = clk_prepare_enable(ahub->clk_apbif);
        if (ret) {
                dev_err(dev, "clk_enable apbif failed: %d\n", ret);
                clk_disable(ahub->clk_d_audio);
index 8596032985dc790e7ca07fc637fd11c36f210cf8..d308faaae148e36fcf83ae8beab5f4abce9ff08d 100644 (file)
@@ -62,7 +62,7 @@ static int tegra30_i2s_runtime_suspend(struct device *dev)
 
        regcache_cache_only(i2s->regmap, true);
 
-       clk_disable(i2s->clk_i2s);
+       clk_disable_unprepare(i2s->clk_i2s);
 
        return 0;
 }
@@ -72,7 +72,7 @@ static int tegra30_i2s_runtime_resume(struct device *dev)
        struct tegra30_i2s *i2s = dev_get_drvdata(dev);
        int ret;
 
-       ret = clk_enable(i2s->clk_i2s);
+       ret = clk_prepare_enable(i2s->clk_i2s);
        if (ret) {
                dev_err(dev, "clk_enable failed: %d\n", ret);
                return ret;
index 9515ce58ea022a11f059edd9f7163ca1b95a1a04..6872c77a1196e948de6827c88581120ec19064f3 100644 (file)
@@ -69,9 +69,9 @@ int tegra_asoc_utils_set_rate(struct tegra_asoc_utils_data *data, int srate,
        data->set_baseclock = 0;
        data->set_mclk = 0;
 
-       clk_disable(data->clk_cdev1);
-       clk_disable(data->clk_pll_a_out0);
-       clk_disable(data->clk_pll_a);
+       clk_disable_unprepare(data->clk_cdev1);
+       clk_disable_unprepare(data->clk_pll_a_out0);
+       clk_disable_unprepare(data->clk_pll_a);
 
        err = clk_set_rate(data->clk_pll_a, new_baseclock);
        if (err) {
@@ -87,19 +87,19 @@ int tegra_asoc_utils_set_rate(struct tegra_asoc_utils_data *data, int srate,
 
        /* Don't set cdev1/extern1 rate; it's locked to pll_a_out0 */
 
-       err = clk_enable(data->clk_pll_a);
+       err = clk_prepare_enable(data->clk_pll_a);
        if (err) {
                dev_err(data->dev, "Can't enable pll_a: %d\n", err);
                return err;
        }
 
-       err = clk_enable(data->clk_pll_a_out0);
+       err = clk_prepare_enable(data->clk_pll_a_out0);
        if (err) {
                dev_err(data->dev, "Can't enable pll_a_out0: %d\n", err);
                return err;
        }
 
-       err = clk_enable(data->clk_cdev1);
+       err = clk_prepare_enable(data->clk_cdev1);
        if (err) {
                dev_err(data->dev, "Can't enable cdev1: %d\n", err);
                return err;