|
@@ -0,0 +1,100 @@
|
|
|
+/*
|
|
|
+ * OMAP2420 clock data
|
|
|
+ *
|
|
|
+ * Copyright (C) 2005-2012 Texas Instruments, Inc.
|
|
|
+ * Copyright (C) 2004-2011 Nokia Corporation
|
|
|
+ *
|
|
|
+ * Contacts:
|
|
|
+ * Richard Woodruff <r-woodruff2@ti.com>
|
|
|
+ * Paul Walmsley
|
|
|
+ * Updated to COMMON clk format by Rajendra Nayak <rnayak@ti.com>
|
|
|
+ *
|
|
|
+ * This program is free software; you can redistribute it and/or modify
|
|
|
+ * it under the terms of the GNU General Public License version 2 as
|
|
|
+ * published by the Free Software Foundation.
|
|
|
+ */
|
|
|
+
|
|
|
+#include <linux/kernel.h>
|
|
|
+#include <linux/io.h>
|
|
|
+#include <linux/clk.h>
|
|
|
+#include <linux/clk-private.h>
|
|
|
+#include <linux/list.h>
|
|
|
+
|
|
|
+#include "soc.h"
|
|
|
+#include "iomap.h"
|
|
|
+#include "clock.h"
|
|
|
+#include "clock2xxx.h"
|
|
|
+#include "opp2xxx.h"
|
|
|
+#include "cm2xxx.h"
|
|
|
+#include "prm2xxx.h"
|
|
|
+#include "prm-regbits-24xx.h"
|
|
|
+#include "cm-regbits-24xx.h"
|
|
|
+#include "sdrc.h"
|
|
|
+#include "control.h"
|
|
|
+
|
|
|
+#define OMAP_CM_REGADDR OMAP2420_CM_REGADDR
|
|
|
+
|
|
|
+/*
|
|
|
+ * 2420 clock tree.
|
|
|
+ *
|
|
|
+ * NOTE:In many cases here we are assigning a 'default' parent. In
|
|
|
+ * many cases the parent is selectable. The set parent calls will
|
|
|
+ * also switch sources.
|
|
|
+ *
|
|
|
+ * Several sources are given initial rates which may be wrong, this will
|
|
|
+ * be fixed up in the init func.
|
|
|
+ *
|
|
|
+ * Things are broadly separated below by clock domains. It is
|
|
|
+ * noteworthy that most peripherals have dependencies on multiple clock
|
|
|
+ * domains. Many get their interface clocks from the L4 domain, but get
|
|
|
+ * functional clocks from fixed sources or other core domain derived
|
|
|
+ * clocks.
|
|
|
+ */
|
|
|
+
|
|
|
+DEFINE_CLK_FIXED_RATE(alt_ck, CLK_IS_ROOT, 54000000, 0x0);
|
|
|
+
|
|
|
+DEFINE_CLK_FIXED_RATE(func_32k_ck, CLK_IS_ROOT, 32768, 0x0);
|
|
|
+
|
|
|
+DEFINE_CLK_FIXED_RATE(mcbsp_clks, CLK_IS_ROOT, 0x0, 0x0);
|
|
|
+
|
|
|
+static struct clk osc_ck;
|
|
|
+
|
|
|
+static const struct clk_ops osc_ck_ops = {
|
|
|
+ .recalc_rate = &omap2_osc_clk_recalc,
|
|
|
+};
|
|
|
+
|
|
|
+static struct clk_hw_omap osc_ck_hw = {
|
|
|
+ .hw = {
|
|
|
+ .clk = &osc_ck,
|
|
|
+ },
|
|
|
+};
|
|
|
+
|
|
|
+static struct clk osc_ck = {
|
|
|
+ .name = "osc_ck",
|
|
|
+ .ops = &osc_ck_ops,
|
|
|
+ .hw = &osc_ck_hw.hw,
|
|
|
+ .flags = CLK_IS_ROOT,
|
|
|
+};
|
|
|
+
|
|
|
+DEFINE_CLK_FIXED_RATE(secure_32k_ck, CLK_IS_ROOT, 32768, 0x0);
|
|
|
+
|
|
|
+static struct clk sys_ck;
|
|
|
+
|
|
|
+static const char *sys_ck_parent_names[] = {
|
|
|
+ "osc_ck",
|
|
|
+};
|
|
|
+
|
|
|
+static const struct clk_ops sys_ck_ops = {
|
|
|
+ .init = &omap2_init_clk_clkdm,
|
|
|
+ .recalc_rate = &omap2xxx_sys_clk_recalc,
|
|
|
+};
|
|
|
+
|
|
|
+DEFINE_STRUCT_CLK_HW_OMAP(sys_ck, "wkup_clkdm");
|
|
|
+DEFINE_STRUCT_CLK(sys_ck, sys_ck_parent_names, sys_ck_ops);
|
|
|
+
|
|
|
+static struct dpll_data dpll_dd = {
|
|
|
+ .mult_div1_reg = OMAP_CM_REGADDR(PLL_MOD, CM_CLKSEL1),
|
|
|
+ .mult_mask = OMAP24XX_DPLL_MULT_MASK,
|
|
|
+ .div1_mask = OMAP24XX_DPLL_DIV_MASK,
|
|
|
+ .clk_bypass = &sys_ck,
|
|
|
+ .clk_ref = &sys_ck,
|