[ARM] tegra: clock: Rearrange static clock tables
authorColin Cross <ccross@android.com>
Thu, 14 Oct 2010 04:38:28 +0000 (21:38 -0700)
committerColin Cross <ccross@android.com>
Mon, 25 Oct 2010 21:57:39 +0000 (14:57 -0700)
Change-Id: I90078bf5e9eaa0fa64681e2ed77c7ac7f7d31804
Signed-off-by: Colin Cross <ccross@android.com>
arch/arm/mach-tegra/tegra2_clocks.c

index df3eb3c3552bde10a53016f907e464640d5726c6..c638d672e3eca11dc627f93556e60ce1d49b5e7a 100644 (file)
@@ -1767,7 +1767,7 @@ static struct clk_mux_sel mux_clk_32k[] = {
                .max_rate  = _max,                      \
        }
 
-struct clk tegra_periph_clks[] = {
+struct clk tegra_list_clks[] = {
        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",      "i2s.0",                NULL,   11,     0x100,  26000000,  mux_pllaout0_audio2x_pllp_clkm,      MUX | DIV_U71),
@@ -1871,6 +1871,7 @@ struct clk_duplicate tegra_clk_duplicates[] = {
        CLK_DUPLICATE("3d", "tegra_grhost", "gr3d"),
        CLK_DUPLICATE("epp", "tegra_grhost", "epp"),
        CLK_DUPLICATE("mpe", "tegra_grhost", "mpe"),
+       CLK_DUPLICATE("cop", "tegra-avp", "cop"),
 };
 
 #define CLK(dev, con, ck)      \
@@ -1880,71 +1881,67 @@ struct clk_duplicate tegra_clk_duplicates[] = {
                .clk = ck,      \
        }
 
-struct clk_lookup tegra_clk_lookups[] = {
-       /* external root sources */
-       CLK(NULL,       "32k_clk",      &tegra_clk_32k),
-       CLK(NULL,       "pll_s",        &tegra_pll_s),
-       CLK(NULL,       "clk_m",        &tegra_clk_m),
-       CLK(NULL,       "pll_m",        &tegra_pll_m),
-       CLK(NULL,       "pll_m_out1",   &tegra_pll_m_out1),
-       CLK(NULL,       "pll_c",        &tegra_pll_c),
-       CLK(NULL,       "pll_c_out1",   &tegra_pll_c_out1),
-       CLK(NULL,       "pll_p",        &tegra_pll_p),
-       CLK(NULL,       "pll_p_out1",   &tegra_pll_p_out1),
-       CLK(NULL,       "pll_p_out2",   &tegra_pll_p_out2),
-       CLK(NULL,       "pll_p_out3",   &tegra_pll_p_out3),
-       CLK(NULL,       "pll_p_out4",   &tegra_pll_p_out4),
-       CLK(NULL,       "pll_a",        &tegra_pll_a),
-       CLK(NULL,       "pll_a_out0",   &tegra_pll_a_out0),
-       CLK(NULL,       "pll_d",        &tegra_pll_d),
-       CLK(NULL,       "pll_d_out0",   &tegra_pll_d_out0),
-       CLK(NULL,       "pll_u",        &tegra_pll_u),
-       CLK(NULL,       "pll_x",        &tegra_pll_x),
-       CLK(NULL,       "cclk",         &tegra_clk_cclk),
-       CLK(NULL,       "sclk",         &tegra_clk_sclk),
-       CLK(NULL,       "hclk",         &tegra_clk_hclk),
-       CLK(NULL,       "pclk",         &tegra_clk_pclk),
-       CLK(NULL,       "clk_d",        &tegra_clk_d),
-       CLK(NULL,       "clk_dev1",     &tegra_dev1_clk),
-       CLK(NULL,       "clk_dev2",     &tegra_dev2_clk),
-       CLK(NULL,       "cpu",          &tegra_clk_virtual_cpu),
-       CLK(NULL,       "blink",        &tegra_clk_blink),
-       CLK("tegra-avp", "cop",         &tegra_clk_cop),
-};
+struct clk *tegra_ptr_clks[] = {
+       &tegra_clk_32k,
+       &tegra_pll_s,
+       &tegra_clk_m,
+       &tegra_pll_m,
+       &tegra_pll_m_out1,
+       &tegra_pll_c,
+       &tegra_pll_c_out1,
+       &tegra_pll_p,
+       &tegra_pll_p_out1,
+       &tegra_pll_p_out2,
+       &tegra_pll_p_out3,
+       &tegra_pll_p_out4,
+       &tegra_pll_a,
+       &tegra_pll_a_out0,
+       &tegra_pll_d,
+       &tegra_pll_d_out0,
+       &tegra_pll_u,
+       &tegra_pll_x,
+       &tegra_clk_cclk,
+       &tegra_clk_sclk,
+       &tegra_clk_hclk,
+       &tegra_clk_pclk,
+       &tegra_clk_d,
+       &tegra_dev1_clk,
+       &tegra_dev2_clk,
+       &tegra_clk_virtual_cpu,
+       &tegra_clk_blink,
+       &tegra_clk_cop,
+};
+
+static void tegra2_init_one_clock(struct clk *c)
+{
+       clk_init(c);
+       if (!c->lookup.dev_id && !c->lookup.con_id)
+               c->lookup.con_id = c->name;
+       c->lookup.clk = c;
+       clkdev_add(&c->lookup);
+}
 
 void __init tegra2_init_clocks(void)
 {
        int i;
-       struct clk_lookup *cl;
        struct clk *c;
-       struct clk_duplicate *cd;
-
-       for (i = 0; i < ARRAY_SIZE(tegra_clk_lookups); i++) {
-               cl = &tegra_clk_lookups[i];
-               clk_init(cl->clk);
-               clkdev_add(cl);
-       }
 
-       for (i = 0; i < ARRAY_SIZE(tegra_periph_clks); i++) {
-               c = &tegra_periph_clks[i];
-               cl = &c->lookup;
-               cl->clk = c;
+       for (i = 0; i < ARRAY_SIZE(tegra_ptr_clks); i++)
+               tegra2_init_one_clock(tegra_ptr_clks[i]);
 
-               clk_init(cl->clk);
-               clkdev_add(cl);
-       }
+       for (i = 0; i < ARRAY_SIZE(tegra_list_clks); i++)
+               tegra2_init_one_clock(&tegra_list_clks[i]);
 
        for (i = 0; i < ARRAY_SIZE(tegra_clk_duplicates); i++) {
-               cd = &tegra_clk_duplicates[i];
-               c = tegra_get_clock_by_name(cd->name);
-               if (c) {
-                       cl = &cd->lookup;
-                       cl->clk = c;
-                       clkdev_add(cl);
-               } else {
+               c = tegra_get_clock_by_name(tegra_clk_duplicates[i].name);
+               if (!c) {
                        pr_err("%s: Unknown duplicate clock %s\n", __func__,
-                               cd->name);
+                               tegra_clk_duplicates[i].name);
+                       continue;
                }
+
+               tegra_clk_duplicates[i].lookup.clk = c;
+               clkdev_add(&tegra_clk_duplicates[i].lookup);
        }
 
        init_audio_sync_clock_mux();