aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-omap2/clock2420_data.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arm/mach-omap2/clock2420_data.c')
-rw-r--r--arch/arm/mach-omap2/clock2420_data.c287
1 files changed, 173 insertions, 114 deletions
diff --git a/arch/arm/mach-omap2/clock2420_data.c b/arch/arm/mach-omap2/clock2420_data.c
index 37d65d62ed8f..2926d028b6e9 100644
--- a/arch/arm/mach-omap2/clock2420_data.c
+++ b/arch/arm/mach-omap2/clock2420_data.c
@@ -1,12 +1,12 @@
1/* 1/*
2 * linux/arch/arm/mach-omap2/clock2420_data.c 2 * OMAP2420 clock data
3 * 3 *
4 * Copyright (C) 2005-2009 Texas Instruments, Inc. 4 * Copyright (C) 2005-2009 Texas Instruments, Inc.
5 * Copyright (C) 2004-2010 Nokia Corporation 5 * Copyright (C) 2004-2011 Nokia Corporation
6 * 6 *
7 * Contacts: 7 * Contacts:
8 * Richard Woodruff <r-woodruff2@ti.com> 8 * Richard Woodruff <r-woodruff2@ti.com>
9 * Paul Walmsley 9 * Paul Walmsley
10 * 10 *
11 * This program is free software; you can redistribute it and/or modify 11 * This program is free software; you can redistribute it and/or modify
12 * it under the terms of the GNU General Public License version 2 as 12 * it under the terms of the GNU General Public License version 2 as
@@ -22,29 +22,27 @@
22#include "clock.h" 22#include "clock.h"
23#include "clock2xxx.h" 23#include "clock2xxx.h"
24#include "opp2xxx.h" 24#include "opp2xxx.h"
25#include "prm.h" 25#include "cm2xxx_3xxx.h"
26#include "cm.h" 26#include "prm2xxx_3xxx.h"
27#include "prm-regbits-24xx.h" 27#include "prm-regbits-24xx.h"
28#include "cm-regbits-24xx.h" 28#include "cm-regbits-24xx.h"
29#include "sdrc.h" 29#include "sdrc.h"
30#include "control.h"
30 31
31#define OMAP_CM_REGADDR OMAP2420_CM_REGADDR 32#define OMAP_CM_REGADDR OMAP2420_CM_REGADDR
32 33
33/* 34/*
34 * 2420 clock tree. 35 * 2420 clock tree.
35 * 36 *
36 * NOTE:In many cases here we are assigning a 'default' parent. In many 37 * NOTE:In many cases here we are assigning a 'default' parent. In
37 * cases the parent is selectable. The get/set parent calls will also 38 * many cases the parent is selectable. The set parent calls will
38 * switch sources. 39 * also switch sources.
39 *
40 * Many some clocks say always_enabled, but they can be auto idled for
41 * power savings. They will always be available upon clock request.
42 * 40 *
43 * Several sources are given initial rates which may be wrong, this will 41 * Several sources are given initial rates which may be wrong, this will
44 * be fixed up in the init func. 42 * be fixed up in the init func.
45 * 43 *
46 * Things are broadly separated below by clock domains. It is 44 * Things are broadly separated below by clock domains. It is
47 * noteworthy that most periferals have dependencies on multiple clock 45 * noteworthy that most peripherals have dependencies on multiple clock
48 * domains. Many get their interface clocks from the L4 domain, but get 46 * domains. Many get their interface clocks from the L4 domain, but get
49 * functional clocks from fixed sources or other core domain derived 47 * functional clocks from fixed sources or other core domain derived
50 * clocks. 48 * clocks.
@@ -54,7 +52,7 @@
54static struct clk func_32k_ck = { 52static struct clk func_32k_ck = {
55 .name = "func_32k_ck", 53 .name = "func_32k_ck",
56 .ops = &clkops_null, 54 .ops = &clkops_null,
57 .rate = 32000, 55 .rate = 32768,
58 .clkdm_name = "wkup_clkdm", 56 .clkdm_name = "wkup_clkdm",
59}; 57};
60 58
@@ -89,6 +87,12 @@ static struct clk alt_ck = { /* Typical 54M or 48M, may not exist */
89 .clkdm_name = "wkup_clkdm", 87 .clkdm_name = "wkup_clkdm",
90}; 88};
91 89
90/* Optional external clock input for McBSP CLKS */
91static struct clk mcbsp_clks = {
92 .name = "mcbsp_clks",
93 .ops = &clkops_null,
94};
95
92/* 96/*
93 * Analog domain root source clocks 97 * Analog domain root source clocks
94 */ 98 */
@@ -109,7 +113,6 @@ static struct dpll_data dpll_dd = {
109 .max_multiplier = 1023, 113 .max_multiplier = 1023,
110 .min_divider = 1, 114 .min_divider = 1,
111 .max_divider = 16, 115 .max_divider = 16,
112 .rate_tolerance = DEFAULT_DPLL_RATE_TOLERANCE
113}; 116};
114 117
115/* 118/*
@@ -118,7 +121,7 @@ static struct dpll_data dpll_dd = {
118 */ 121 */
119static struct clk dpll_ck = { 122static struct clk dpll_ck = {
120 .name = "dpll_ck", 123 .name = "dpll_ck",
121 .ops = &clkops_null, 124 .ops = &clkops_omap2xxx_dpll_ops,
122 .parent = &sys_ck, /* Can be func_32k also */ 125 .parent = &sys_ck, /* Can be func_32k also */
123 .dpll_data = &dpll_dd, 126 .dpll_data = &dpll_dd,
124 .clkdm_name = "wkup_clkdm", 127 .clkdm_name = "wkup_clkdm",
@@ -448,36 +451,22 @@ static struct clk dsp_fck = {
448 .recalc = &omap2_clksel_recalc, 451 .recalc = &omap2_clksel_recalc,
449}; 452};
450 453
451/* DSP interface clock */ 454static const struct clksel dsp_ick_clksel[] = {
452static const struct clksel_rate dsp_irate_ick_rates[] = { 455 { .parent = &dsp_fck, .rates = dsp_ick_rates },
453 { .div = 1, .val = 1, .flags = RATE_IN_24XX },
454 { .div = 2, .val = 2, .flags = RATE_IN_24XX },
455 { .div = 0 },
456};
457
458static const struct clksel dsp_irate_ick_clksel[] = {
459 { .parent = &dsp_fck, .rates = dsp_irate_ick_rates },
460 { .parent = NULL } 456 { .parent = NULL }
461}; 457};
462 458
463/* This clock does not exist as such in the TRM. */
464static struct clk dsp_irate_ick = {
465 .name = "dsp_irate_ick",
466 .ops = &clkops_null,
467 .parent = &dsp_fck,
468 .clksel_reg = OMAP_CM_REGADDR(OMAP24XX_DSP_MOD, CM_CLKSEL),
469 .clksel_mask = OMAP24XX_CLKSEL_DSP_IF_MASK,
470 .clksel = dsp_irate_ick_clksel,
471 .recalc = &omap2_clksel_recalc,
472};
473
474/* 2420 only */
475static struct clk dsp_ick = { 459static struct clk dsp_ick = {
476 .name = "dsp_ick", /* apparently ipi and isp */ 460 .name = "dsp_ick", /* apparently ipi and isp */
477 .ops = &clkops_omap2_dflt_wait, 461 .ops = &clkops_omap2_iclk_dflt_wait,
478 .parent = &dsp_irate_ick, 462 .parent = &dsp_fck,
463 .clkdm_name = "dsp_clkdm",
479 .enable_reg = OMAP_CM_REGADDR(OMAP24XX_DSP_MOD, CM_ICLKEN), 464 .enable_reg = OMAP_CM_REGADDR(OMAP24XX_DSP_MOD, CM_ICLKEN),
480 .enable_bit = OMAP2420_EN_DSP_IPI_SHIFT, /* for ipi */ 465 .enable_bit = OMAP2420_EN_DSP_IPI_SHIFT, /* for ipi */
466 .clksel_reg = OMAP_CM_REGADDR(OMAP24XX_DSP_MOD, CM_CLKSEL),
467 .clksel_mask = OMAP24XX_CLKSEL_DSP_IF_MASK,
468 .clksel = dsp_ick_clksel,
469 .recalc = &omap2_clksel_recalc,
481}; 470};
482 471
483/* 472/*
@@ -572,7 +561,7 @@ static const struct clksel usb_l4_ick_clksel[] = {
572/* It is unclear from TRM whether usb_l4_ick is really in L3 or L4 clkdm */ 561/* It is unclear from TRM whether usb_l4_ick is really in L3 or L4 clkdm */
573static struct clk usb_l4_ick = { /* FS-USB interface clock */ 562static struct clk usb_l4_ick = { /* FS-USB interface clock */
574 .name = "usb_l4_ick", 563 .name = "usb_l4_ick",
575 .ops = &clkops_omap2_dflt_wait, 564 .ops = &clkops_omap2_iclk_dflt_wait,
576 .parent = &core_l3_ck, 565 .parent = &core_l3_ck,
577 .clkdm_name = "core_l4_clkdm", 566 .clkdm_name = "core_l4_clkdm",
578 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2), 567 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2),
@@ -654,7 +643,7 @@ static struct clk ssi_ssr_sst_fck = {
654 */ 643 */
655static struct clk ssi_l4_ick = { 644static struct clk ssi_l4_ick = {
656 .name = "ssi_l4_ick", 645 .name = "ssi_l4_ick",
657 .ops = &clkops_omap2_dflt_wait, 646 .ops = &clkops_omap2_iclk_dflt_wait,
658 .parent = &l4_ck, 647 .parent = &l4_ck,
659 .clkdm_name = "core_l4_clkdm", 648 .clkdm_name = "core_l4_clkdm",
660 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2), 649 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2),
@@ -709,6 +698,7 @@ static struct clk gfx_2d_fck = {
709 .recalc = &omap2_clksel_recalc, 698 .recalc = &omap2_clksel_recalc,
710}; 699};
711 700
701/* This interface clock does not have a CM_AUTOIDLE bit */
712static struct clk gfx_ick = { 702static struct clk gfx_ick = {
713 .name = "gfx_ick", /* From l3 */ 703 .name = "gfx_ick", /* From l3 */
714 .ops = &clkops_omap2_dflt_wait, 704 .ops = &clkops_omap2_dflt_wait,
@@ -756,7 +746,7 @@ static const struct clksel dss1_fck_clksel[] = {
756 746
757static struct clk dss_ick = { /* Enables both L3,L4 ICLK's */ 747static struct clk dss_ick = { /* Enables both L3,L4 ICLK's */
758 .name = "dss_ick", 748 .name = "dss_ick",
759 .ops = &clkops_omap2_dflt, 749 .ops = &clkops_omap2_iclk_dflt,
760 .parent = &l4_ck, /* really both l3 and l4 */ 750 .parent = &l4_ck, /* really both l3 and l4 */
761 .clkdm_name = "dss_clkdm", 751 .clkdm_name = "dss_clkdm",
762 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 752 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
@@ -805,7 +795,7 @@ static struct clk dss2_fck = { /* Alt clk used in power management */
805 .clksel_reg = OMAP_CM_REGADDR(CORE_MOD, CM_CLKSEL1), 795 .clksel_reg = OMAP_CM_REGADDR(CORE_MOD, CM_CLKSEL1),
806 .clksel_mask = OMAP24XX_CLKSEL_DSS2_MASK, 796 .clksel_mask = OMAP24XX_CLKSEL_DSS2_MASK,
807 .clksel = dss2_fck_clksel, 797 .clksel = dss2_fck_clksel,
808 .recalc = &followparent_recalc, 798 .recalc = &omap2_clksel_recalc,
809}; 799};
810 800
811static struct clk dss_54m_fck = { /* Alt clk used in power management */ 801static struct clk dss_54m_fck = { /* Alt clk used in power management */
@@ -818,6 +808,14 @@ static struct clk dss_54m_fck = { /* Alt clk used in power management */
818 .recalc = &followparent_recalc, 808 .recalc = &followparent_recalc,
819}; 809};
820 810
811static struct clk wu_l4_ick = {
812 .name = "wu_l4_ick",
813 .ops = &clkops_null,
814 .parent = &sys_ck,
815 .clkdm_name = "wkup_clkdm",
816 .recalc = &followparent_recalc,
817};
818
821/* 819/*
822 * CORE power domain ICLK & FCLK defines. 820 * CORE power domain ICLK & FCLK defines.
823 * Many of the these can have more than one possible parent. Entries 821 * Many of the these can have more than one possible parent. Entries
@@ -838,9 +836,9 @@ static const struct clksel omap24xx_gpt_clksel[] = {
838 836
839static struct clk gpt1_ick = { 837static struct clk gpt1_ick = {
840 .name = "gpt1_ick", 838 .name = "gpt1_ick",
841 .ops = &clkops_omap2_dflt_wait, 839 .ops = &clkops_omap2_iclk_dflt_wait,
842 .parent = &l4_ck, 840 .parent = &wu_l4_ick,
843 .clkdm_name = "core_l4_clkdm", 841 .clkdm_name = "wkup_clkdm",
844 .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN), 842 .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN),
845 .enable_bit = OMAP24XX_EN_GPT1_SHIFT, 843 .enable_bit = OMAP24XX_EN_GPT1_SHIFT,
846 .recalc = &followparent_recalc, 844 .recalc = &followparent_recalc,
@@ -864,7 +862,7 @@ static struct clk gpt1_fck = {
864 862
865static struct clk gpt2_ick = { 863static struct clk gpt2_ick = {
866 .name = "gpt2_ick", 864 .name = "gpt2_ick",
867 .ops = &clkops_omap2_dflt_wait, 865 .ops = &clkops_omap2_iclk_dflt_wait,
868 .parent = &l4_ck, 866 .parent = &l4_ck,
869 .clkdm_name = "core_l4_clkdm", 867 .clkdm_name = "core_l4_clkdm",
870 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 868 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
@@ -888,7 +886,7 @@ static struct clk gpt2_fck = {
888 886
889static struct clk gpt3_ick = { 887static struct clk gpt3_ick = {
890 .name = "gpt3_ick", 888 .name = "gpt3_ick",
891 .ops = &clkops_omap2_dflt_wait, 889 .ops = &clkops_omap2_iclk_dflt_wait,
892 .parent = &l4_ck, 890 .parent = &l4_ck,
893 .clkdm_name = "core_l4_clkdm", 891 .clkdm_name = "core_l4_clkdm",
894 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 892 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
@@ -912,7 +910,7 @@ static struct clk gpt3_fck = {
912 910
913static struct clk gpt4_ick = { 911static struct clk gpt4_ick = {
914 .name = "gpt4_ick", 912 .name = "gpt4_ick",
915 .ops = &clkops_omap2_dflt_wait, 913 .ops = &clkops_omap2_iclk_dflt_wait,
916 .parent = &l4_ck, 914 .parent = &l4_ck,
917 .clkdm_name = "core_l4_clkdm", 915 .clkdm_name = "core_l4_clkdm",
918 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 916 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
@@ -936,7 +934,7 @@ static struct clk gpt4_fck = {
936 934
937static struct clk gpt5_ick = { 935static struct clk gpt5_ick = {
938 .name = "gpt5_ick", 936 .name = "gpt5_ick",
939 .ops = &clkops_omap2_dflt_wait, 937 .ops = &clkops_omap2_iclk_dflt_wait,
940 .parent = &l4_ck, 938 .parent = &l4_ck,
941 .clkdm_name = "core_l4_clkdm", 939 .clkdm_name = "core_l4_clkdm",
942 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 940 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
@@ -960,7 +958,7 @@ static struct clk gpt5_fck = {
960 958
961static struct clk gpt6_ick = { 959static struct clk gpt6_ick = {
962 .name = "gpt6_ick", 960 .name = "gpt6_ick",
963 .ops = &clkops_omap2_dflt_wait, 961 .ops = &clkops_omap2_iclk_dflt_wait,
964 .parent = &l4_ck, 962 .parent = &l4_ck,
965 .clkdm_name = "core_l4_clkdm", 963 .clkdm_name = "core_l4_clkdm",
966 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 964 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
@@ -984,8 +982,9 @@ static struct clk gpt6_fck = {
984 982
985static struct clk gpt7_ick = { 983static struct clk gpt7_ick = {
986 .name = "gpt7_ick", 984 .name = "gpt7_ick",
987 .ops = &clkops_omap2_dflt_wait, 985 .ops = &clkops_omap2_iclk_dflt_wait,
988 .parent = &l4_ck, 986 .parent = &l4_ck,
987 .clkdm_name = "core_l4_clkdm",
989 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 988 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
990 .enable_bit = OMAP24XX_EN_GPT7_SHIFT, 989 .enable_bit = OMAP24XX_EN_GPT7_SHIFT,
991 .recalc = &followparent_recalc, 990 .recalc = &followparent_recalc,
@@ -1007,7 +1006,7 @@ static struct clk gpt7_fck = {
1007 1006
1008static struct clk gpt8_ick = { 1007static struct clk gpt8_ick = {
1009 .name = "gpt8_ick", 1008 .name = "gpt8_ick",
1010 .ops = &clkops_omap2_dflt_wait, 1009 .ops = &clkops_omap2_iclk_dflt_wait,
1011 .parent = &l4_ck, 1010 .parent = &l4_ck,
1012 .clkdm_name = "core_l4_clkdm", 1011 .clkdm_name = "core_l4_clkdm",
1013 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 1012 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
@@ -1031,7 +1030,7 @@ static struct clk gpt8_fck = {
1031 1030
1032static struct clk gpt9_ick = { 1031static struct clk gpt9_ick = {
1033 .name = "gpt9_ick", 1032 .name = "gpt9_ick",
1034 .ops = &clkops_omap2_dflt_wait, 1033 .ops = &clkops_omap2_iclk_dflt_wait,
1035 .parent = &l4_ck, 1034 .parent = &l4_ck,
1036 .clkdm_name = "core_l4_clkdm", 1035 .clkdm_name = "core_l4_clkdm",
1037 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 1036 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
@@ -1055,7 +1054,7 @@ static struct clk gpt9_fck = {
1055 1054
1056static struct clk gpt10_ick = { 1055static struct clk gpt10_ick = {
1057 .name = "gpt10_ick", 1056 .name = "gpt10_ick",
1058 .ops = &clkops_omap2_dflt_wait, 1057 .ops = &clkops_omap2_iclk_dflt_wait,
1059 .parent = &l4_ck, 1058 .parent = &l4_ck,
1060 .clkdm_name = "core_l4_clkdm", 1059 .clkdm_name = "core_l4_clkdm",
1061 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 1060 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
@@ -1079,7 +1078,7 @@ static struct clk gpt10_fck = {
1079 1078
1080static struct clk gpt11_ick = { 1079static struct clk gpt11_ick = {
1081 .name = "gpt11_ick", 1080 .name = "gpt11_ick",
1082 .ops = &clkops_omap2_dflt_wait, 1081 .ops = &clkops_omap2_iclk_dflt_wait,
1083 .parent = &l4_ck, 1082 .parent = &l4_ck,
1084 .clkdm_name = "core_l4_clkdm", 1083 .clkdm_name = "core_l4_clkdm",
1085 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 1084 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
@@ -1103,7 +1102,7 @@ static struct clk gpt11_fck = {
1103 1102
1104static struct clk gpt12_ick = { 1103static struct clk gpt12_ick = {
1105 .name = "gpt12_ick", 1104 .name = "gpt12_ick",
1106 .ops = &clkops_omap2_dflt_wait, 1105 .ops = &clkops_omap2_iclk_dflt_wait,
1107 .parent = &l4_ck, 1106 .parent = &l4_ck,
1108 .clkdm_name = "core_l4_clkdm", 1107 .clkdm_name = "core_l4_clkdm",
1109 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 1108 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
@@ -1127,7 +1126,7 @@ static struct clk gpt12_fck = {
1127 1126
1128static struct clk mcbsp1_ick = { 1127static struct clk mcbsp1_ick = {
1129 .name = "mcbsp1_ick", 1128 .name = "mcbsp1_ick",
1130 .ops = &clkops_omap2_dflt_wait, 1129 .ops = &clkops_omap2_iclk_dflt_wait,
1131 .parent = &l4_ck, 1130 .parent = &l4_ck,
1132 .clkdm_name = "core_l4_clkdm", 1131 .clkdm_name = "core_l4_clkdm",
1133 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 1132 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
@@ -1135,19 +1134,39 @@ static struct clk mcbsp1_ick = {
1135 .recalc = &followparent_recalc, 1134 .recalc = &followparent_recalc,
1136}; 1135};
1137 1136
1137static const struct clksel_rate common_mcbsp_96m_rates[] = {
1138 { .div = 1, .val = 0, .flags = RATE_IN_24XX },
1139 { .div = 0 }
1140};
1141
1142static const struct clksel_rate common_mcbsp_mcbsp_rates[] = {
1143 { .div = 1, .val = 1, .flags = RATE_IN_24XX },
1144 { .div = 0 }
1145};
1146
1147static const struct clksel mcbsp_fck_clksel[] = {
1148 { .parent = &func_96m_ck, .rates = common_mcbsp_96m_rates },
1149 { .parent = &mcbsp_clks, .rates = common_mcbsp_mcbsp_rates },
1150 { .parent = NULL }
1151};
1152
1138static struct clk mcbsp1_fck = { 1153static struct clk mcbsp1_fck = {
1139 .name = "mcbsp1_fck", 1154 .name = "mcbsp1_fck",
1140 .ops = &clkops_omap2_dflt_wait, 1155 .ops = &clkops_omap2_dflt_wait,
1141 .parent = &func_96m_ck, 1156 .parent = &func_96m_ck,
1157 .init = &omap2_init_clksel_parent,
1142 .clkdm_name = "core_l4_clkdm", 1158 .clkdm_name = "core_l4_clkdm",
1143 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1), 1159 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
1144 .enable_bit = OMAP24XX_EN_MCBSP1_SHIFT, 1160 .enable_bit = OMAP24XX_EN_MCBSP1_SHIFT,
1145 .recalc = &followparent_recalc, 1161 .clksel_reg = OMAP242X_CTRL_REGADDR(OMAP2_CONTROL_DEVCONF0),
1162 .clksel_mask = OMAP2_MCBSP1_CLKS_MASK,
1163 .clksel = mcbsp_fck_clksel,
1164 .recalc = &omap2_clksel_recalc,
1146}; 1165};
1147 1166
1148static struct clk mcbsp2_ick = { 1167static struct clk mcbsp2_ick = {
1149 .name = "mcbsp2_ick", 1168 .name = "mcbsp2_ick",
1150 .ops = &clkops_omap2_dflt_wait, 1169 .ops = &clkops_omap2_iclk_dflt_wait,
1151 .parent = &l4_ck, 1170 .parent = &l4_ck,
1152 .clkdm_name = "core_l4_clkdm", 1171 .clkdm_name = "core_l4_clkdm",
1153 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 1172 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
@@ -1159,15 +1178,19 @@ static struct clk mcbsp2_fck = {
1159 .name = "mcbsp2_fck", 1178 .name = "mcbsp2_fck",
1160 .ops = &clkops_omap2_dflt_wait, 1179 .ops = &clkops_omap2_dflt_wait,
1161 .parent = &func_96m_ck, 1180 .parent = &func_96m_ck,
1181 .init = &omap2_init_clksel_parent,
1162 .clkdm_name = "core_l4_clkdm", 1182 .clkdm_name = "core_l4_clkdm",
1163 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1), 1183 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
1164 .enable_bit = OMAP24XX_EN_MCBSP2_SHIFT, 1184 .enable_bit = OMAP24XX_EN_MCBSP2_SHIFT,
1165 .recalc = &followparent_recalc, 1185 .clksel_reg = OMAP242X_CTRL_REGADDR(OMAP2_CONTROL_DEVCONF0),
1186 .clksel_mask = OMAP2_MCBSP2_CLKS_MASK,
1187 .clksel = mcbsp_fck_clksel,
1188 .recalc = &omap2_clksel_recalc,
1166}; 1189};
1167 1190
1168static struct clk mcspi1_ick = { 1191static struct clk mcspi1_ick = {
1169 .name = "mcspi1_ick", 1192 .name = "mcspi1_ick",
1170 .ops = &clkops_omap2_dflt_wait, 1193 .ops = &clkops_omap2_iclk_dflt_wait,
1171 .parent = &l4_ck, 1194 .parent = &l4_ck,
1172 .clkdm_name = "core_l4_clkdm", 1195 .clkdm_name = "core_l4_clkdm",
1173 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 1196 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
@@ -1187,7 +1210,7 @@ static struct clk mcspi1_fck = {
1187 1210
1188static struct clk mcspi2_ick = { 1211static struct clk mcspi2_ick = {
1189 .name = "mcspi2_ick", 1212 .name = "mcspi2_ick",
1190 .ops = &clkops_omap2_dflt_wait, 1213 .ops = &clkops_omap2_iclk_dflt_wait,
1191 .parent = &l4_ck, 1214 .parent = &l4_ck,
1192 .clkdm_name = "core_l4_clkdm", 1215 .clkdm_name = "core_l4_clkdm",
1193 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 1216 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
@@ -1207,7 +1230,7 @@ static struct clk mcspi2_fck = {
1207 1230
1208static struct clk uart1_ick = { 1231static struct clk uart1_ick = {
1209 .name = "uart1_ick", 1232 .name = "uart1_ick",
1210 .ops = &clkops_omap2_dflt_wait, 1233 .ops = &clkops_omap2_iclk_dflt_wait,
1211 .parent = &l4_ck, 1234 .parent = &l4_ck,
1212 .clkdm_name = "core_l4_clkdm", 1235 .clkdm_name = "core_l4_clkdm",
1213 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 1236 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
@@ -1227,7 +1250,7 @@ static struct clk uart1_fck = {
1227 1250
1228static struct clk uart2_ick = { 1251static struct clk uart2_ick = {
1229 .name = "uart2_ick", 1252 .name = "uart2_ick",
1230 .ops = &clkops_omap2_dflt_wait, 1253 .ops = &clkops_omap2_iclk_dflt_wait,
1231 .parent = &l4_ck, 1254 .parent = &l4_ck,
1232 .clkdm_name = "core_l4_clkdm", 1255 .clkdm_name = "core_l4_clkdm",
1233 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 1256 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
@@ -1247,7 +1270,7 @@ static struct clk uart2_fck = {
1247 1270
1248static struct clk uart3_ick = { 1271static struct clk uart3_ick = {
1249 .name = "uart3_ick", 1272 .name = "uart3_ick",
1250 .ops = &clkops_omap2_dflt_wait, 1273 .ops = &clkops_omap2_iclk_dflt_wait,
1251 .parent = &l4_ck, 1274 .parent = &l4_ck,
1252 .clkdm_name = "core_l4_clkdm", 1275 .clkdm_name = "core_l4_clkdm",
1253 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2), 1276 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2),
@@ -1267,9 +1290,9 @@ static struct clk uart3_fck = {
1267 1290
1268static struct clk gpios_ick = { 1291static struct clk gpios_ick = {
1269 .name = "gpios_ick", 1292 .name = "gpios_ick",
1270 .ops = &clkops_omap2_dflt_wait, 1293 .ops = &clkops_omap2_iclk_dflt_wait,
1271 .parent = &l4_ck, 1294 .parent = &wu_l4_ick,
1272 .clkdm_name = "core_l4_clkdm", 1295 .clkdm_name = "wkup_clkdm",
1273 .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN), 1296 .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN),
1274 .enable_bit = OMAP24XX_EN_GPIOS_SHIFT, 1297 .enable_bit = OMAP24XX_EN_GPIOS_SHIFT,
1275 .recalc = &followparent_recalc, 1298 .recalc = &followparent_recalc,
@@ -1287,9 +1310,9 @@ static struct clk gpios_fck = {
1287 1310
1288static struct clk mpu_wdt_ick = { 1311static struct clk mpu_wdt_ick = {
1289 .name = "mpu_wdt_ick", 1312 .name = "mpu_wdt_ick",
1290 .ops = &clkops_omap2_dflt_wait, 1313 .ops = &clkops_omap2_iclk_dflt_wait,
1291 .parent = &l4_ck, 1314 .parent = &wu_l4_ick,
1292 .clkdm_name = "core_l4_clkdm", 1315 .clkdm_name = "wkup_clkdm",
1293 .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN), 1316 .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN),
1294 .enable_bit = OMAP24XX_EN_MPU_WDT_SHIFT, 1317 .enable_bit = OMAP24XX_EN_MPU_WDT_SHIFT,
1295 .recalc = &followparent_recalc, 1318 .recalc = &followparent_recalc,
@@ -1307,10 +1330,10 @@ static struct clk mpu_wdt_fck = {
1307 1330
1308static struct clk sync_32k_ick = { 1331static struct clk sync_32k_ick = {
1309 .name = "sync_32k_ick", 1332 .name = "sync_32k_ick",
1310 .ops = &clkops_omap2_dflt_wait, 1333 .ops = &clkops_omap2_iclk_dflt_wait,
1311 .parent = &l4_ck, 1334 .parent = &wu_l4_ick,
1335 .clkdm_name = "wkup_clkdm",
1312 .flags = ENABLE_ON_INIT, 1336 .flags = ENABLE_ON_INIT,
1313 .clkdm_name = "core_l4_clkdm",
1314 .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN), 1337 .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN),
1315 .enable_bit = OMAP24XX_EN_32KSYNC_SHIFT, 1338 .enable_bit = OMAP24XX_EN_32KSYNC_SHIFT,
1316 .recalc = &followparent_recalc, 1339 .recalc = &followparent_recalc,
@@ -1318,9 +1341,9 @@ static struct clk sync_32k_ick = {
1318 1341
1319static struct clk wdt1_ick = { 1342static struct clk wdt1_ick = {
1320 .name = "wdt1_ick", 1343 .name = "wdt1_ick",
1321 .ops = &clkops_omap2_dflt_wait, 1344 .ops = &clkops_omap2_iclk_dflt_wait,
1322 .parent = &l4_ck, 1345 .parent = &wu_l4_ick,
1323 .clkdm_name = "core_l4_clkdm", 1346 .clkdm_name = "wkup_clkdm",
1324 .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN), 1347 .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN),
1325 .enable_bit = OMAP24XX_EN_WDT1_SHIFT, 1348 .enable_bit = OMAP24XX_EN_WDT1_SHIFT,
1326 .recalc = &followparent_recalc, 1349 .recalc = &followparent_recalc,
@@ -1328,10 +1351,10 @@ static struct clk wdt1_ick = {
1328 1351
1329static struct clk omapctrl_ick = { 1352static struct clk omapctrl_ick = {
1330 .name = "omapctrl_ick", 1353 .name = "omapctrl_ick",
1331 .ops = &clkops_omap2_dflt_wait, 1354 .ops = &clkops_omap2_iclk_dflt_wait,
1332 .parent = &l4_ck, 1355 .parent = &wu_l4_ick,
1356 .clkdm_name = "wkup_clkdm",
1333 .flags = ENABLE_ON_INIT, 1357 .flags = ENABLE_ON_INIT,
1334 .clkdm_name = "core_l4_clkdm",
1335 .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN), 1358 .enable_reg = OMAP_CM_REGADDR(WKUP_MOD, CM_ICLKEN),
1336 .enable_bit = OMAP24XX_EN_OMAPCTRL_SHIFT, 1359 .enable_bit = OMAP24XX_EN_OMAPCTRL_SHIFT,
1337 .recalc = &followparent_recalc, 1360 .recalc = &followparent_recalc,
@@ -1339,7 +1362,7 @@ static struct clk omapctrl_ick = {
1339 1362
1340static struct clk cam_ick = { 1363static struct clk cam_ick = {
1341 .name = "cam_ick", 1364 .name = "cam_ick",
1342 .ops = &clkops_omap2_dflt, 1365 .ops = &clkops_omap2_iclk_dflt,
1343 .parent = &l4_ck, 1366 .parent = &l4_ck,
1344 .clkdm_name = "core_l4_clkdm", 1367 .clkdm_name = "core_l4_clkdm",
1345 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 1368 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
@@ -1364,7 +1387,7 @@ static struct clk cam_fck = {
1364 1387
1365static struct clk mailboxes_ick = { 1388static struct clk mailboxes_ick = {
1366 .name = "mailboxes_ick", 1389 .name = "mailboxes_ick",
1367 .ops = &clkops_omap2_dflt_wait, 1390 .ops = &clkops_omap2_iclk_dflt_wait,
1368 .parent = &l4_ck, 1391 .parent = &l4_ck,
1369 .clkdm_name = "core_l4_clkdm", 1392 .clkdm_name = "core_l4_clkdm",
1370 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 1393 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
@@ -1374,7 +1397,7 @@ static struct clk mailboxes_ick = {
1374 1397
1375static struct clk wdt4_ick = { 1398static struct clk wdt4_ick = {
1376 .name = "wdt4_ick", 1399 .name = "wdt4_ick",
1377 .ops = &clkops_omap2_dflt_wait, 1400 .ops = &clkops_omap2_iclk_dflt_wait,
1378 .parent = &l4_ck, 1401 .parent = &l4_ck,
1379 .clkdm_name = "core_l4_clkdm", 1402 .clkdm_name = "core_l4_clkdm",
1380 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 1403 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
@@ -1394,7 +1417,7 @@ static struct clk wdt4_fck = {
1394 1417
1395static struct clk wdt3_ick = { 1418static struct clk wdt3_ick = {
1396 .name = "wdt3_ick", 1419 .name = "wdt3_ick",
1397 .ops = &clkops_omap2_dflt_wait, 1420 .ops = &clkops_omap2_iclk_dflt_wait,
1398 .parent = &l4_ck, 1421 .parent = &l4_ck,
1399 .clkdm_name = "core_l4_clkdm", 1422 .clkdm_name = "core_l4_clkdm",
1400 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 1423 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
@@ -1414,7 +1437,7 @@ static struct clk wdt3_fck = {
1414 1437
1415static struct clk mspro_ick = { 1438static struct clk mspro_ick = {
1416 .name = "mspro_ick", 1439 .name = "mspro_ick",
1417 .ops = &clkops_omap2_dflt_wait, 1440 .ops = &clkops_omap2_iclk_dflt_wait,
1418 .parent = &l4_ck, 1441 .parent = &l4_ck,
1419 .clkdm_name = "core_l4_clkdm", 1442 .clkdm_name = "core_l4_clkdm",
1420 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 1443 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
@@ -1434,7 +1457,7 @@ static struct clk mspro_fck = {
1434 1457
1435static struct clk mmc_ick = { 1458static struct clk mmc_ick = {
1436 .name = "mmc_ick", 1459 .name = "mmc_ick",
1437 .ops = &clkops_omap2_dflt_wait, 1460 .ops = &clkops_omap2_iclk_dflt_wait,
1438 .parent = &l4_ck, 1461 .parent = &l4_ck,
1439 .clkdm_name = "core_l4_clkdm", 1462 .clkdm_name = "core_l4_clkdm",
1440 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 1463 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
@@ -1454,7 +1477,7 @@ static struct clk mmc_fck = {
1454 1477
1455static struct clk fac_ick = { 1478static struct clk fac_ick = {
1456 .name = "fac_ick", 1479 .name = "fac_ick",
1457 .ops = &clkops_omap2_dflt_wait, 1480 .ops = &clkops_omap2_iclk_dflt_wait,
1458 .parent = &l4_ck, 1481 .parent = &l4_ck,
1459 .clkdm_name = "core_l4_clkdm", 1482 .clkdm_name = "core_l4_clkdm",
1460 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 1483 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
@@ -1474,7 +1497,7 @@ static struct clk fac_fck = {
1474 1497
1475static struct clk eac_ick = { 1498static struct clk eac_ick = {
1476 .name = "eac_ick", 1499 .name = "eac_ick",
1477 .ops = &clkops_omap2_dflt_wait, 1500 .ops = &clkops_omap2_iclk_dflt_wait,
1478 .parent = &l4_ck, 1501 .parent = &l4_ck,
1479 .clkdm_name = "core_l4_clkdm", 1502 .clkdm_name = "core_l4_clkdm",
1480 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 1503 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
@@ -1494,7 +1517,7 @@ static struct clk eac_fck = {
1494 1517
1495static struct clk hdq_ick = { 1518static struct clk hdq_ick = {
1496 .name = "hdq_ick", 1519 .name = "hdq_ick",
1497 .ops = &clkops_omap2_dflt_wait, 1520 .ops = &clkops_omap2_iclk_dflt_wait,
1498 .parent = &l4_ck, 1521 .parent = &l4_ck,
1499 .clkdm_name = "core_l4_clkdm", 1522 .clkdm_name = "core_l4_clkdm",
1500 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 1523 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
@@ -1514,7 +1537,7 @@ static struct clk hdq_fck = {
1514 1537
1515static struct clk i2c2_ick = { 1538static struct clk i2c2_ick = {
1516 .name = "i2c2_ick", 1539 .name = "i2c2_ick",
1517 .ops = &clkops_omap2_dflt_wait, 1540 .ops = &clkops_omap2_iclk_dflt_wait,
1518 .parent = &l4_ck, 1541 .parent = &l4_ck,
1519 .clkdm_name = "core_l4_clkdm", 1542 .clkdm_name = "core_l4_clkdm",
1520 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 1543 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
@@ -1534,7 +1557,7 @@ static struct clk i2c2_fck = {
1534 1557
1535static struct clk i2c1_ick = { 1558static struct clk i2c1_ick = {
1536 .name = "i2c1_ick", 1559 .name = "i2c1_ick",
1537 .ops = &clkops_omap2_dflt_wait, 1560 .ops = &clkops_omap2_iclk_dflt_wait,
1538 .parent = &l4_ck, 1561 .parent = &l4_ck,
1539 .clkdm_name = "core_l4_clkdm", 1562 .clkdm_name = "core_l4_clkdm",
1540 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 1563 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
@@ -1552,12 +1575,18 @@ static struct clk i2c1_fck = {
1552 .recalc = &followparent_recalc, 1575 .recalc = &followparent_recalc,
1553}; 1576};
1554 1577
1578/*
1579 * The enable_reg/enable_bit in this clock is only used for CM_AUTOIDLE
1580 * accesses derived from this data.
1581 */
1555static struct clk gpmc_fck = { 1582static struct clk gpmc_fck = {
1556 .name = "gpmc_fck", 1583 .name = "gpmc_fck",
1557 .ops = &clkops_null, /* RMK: missing? */ 1584 .ops = &clkops_omap2_iclk_idle_only,
1558 .parent = &core_l3_ck, 1585 .parent = &core_l3_ck,
1559 .flags = ENABLE_ON_INIT, 1586 .flags = ENABLE_ON_INIT,
1560 .clkdm_name = "core_l3_clkdm", 1587 .clkdm_name = "core_l3_clkdm",
1588 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN3),
1589 .enable_bit = OMAP24XX_AUTO_GPMC_SHIFT,
1561 .recalc = &followparent_recalc, 1590 .recalc = &followparent_recalc,
1562}; 1591};
1563 1592
@@ -1569,17 +1598,38 @@ static struct clk sdma_fck = {
1569 .recalc = &followparent_recalc, 1598 .recalc = &followparent_recalc,
1570}; 1599};
1571 1600
1601/*
1602 * The enable_reg/enable_bit in this clock is only used for CM_AUTOIDLE
1603 * accesses derived from this data.
1604 */
1572static struct clk sdma_ick = { 1605static struct clk sdma_ick = {
1573 .name = "sdma_ick", 1606 .name = "sdma_ick",
1574 .ops = &clkops_null, /* RMK: missing? */ 1607 .ops = &clkops_omap2_iclk_idle_only,
1575 .parent = &l4_ck, 1608 .parent = &core_l3_ck,
1609 .clkdm_name = "core_l3_clkdm",
1610 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN3),
1611 .enable_bit = OMAP24XX_AUTO_SDMA_SHIFT,
1612 .recalc = &followparent_recalc,
1613};
1614
1615/*
1616 * The enable_reg/enable_bit in this clock is only used for CM_AUTOIDLE
1617 * accesses derived from this data.
1618 */
1619static struct clk sdrc_ick = {
1620 .name = "sdrc_ick",
1621 .ops = &clkops_omap2_iclk_idle_only,
1622 .parent = &core_l3_ck,
1623 .flags = ENABLE_ON_INIT,
1576 .clkdm_name = "core_l3_clkdm", 1624 .clkdm_name = "core_l3_clkdm",
1625 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN3),
1626 .enable_bit = OMAP24XX_AUTO_SDRC_SHIFT,
1577 .recalc = &followparent_recalc, 1627 .recalc = &followparent_recalc,
1578}; 1628};
1579 1629
1580static struct clk vlynq_ick = { 1630static struct clk vlynq_ick = {
1581 .name = "vlynq_ick", 1631 .name = "vlynq_ick",
1582 .ops = &clkops_omap2_dflt_wait, 1632 .ops = &clkops_omap2_iclk_dflt_wait,
1583 .parent = &core_l3_ck, 1633 .parent = &core_l3_ck,
1584 .clkdm_name = "core_l3_clkdm", 1634 .clkdm_name = "core_l3_clkdm",
1585 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1), 1635 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
@@ -1628,7 +1678,7 @@ static struct clk vlynq_fck = {
1628 1678
1629static struct clk des_ick = { 1679static struct clk des_ick = {
1630 .name = "des_ick", 1680 .name = "des_ick",
1631 .ops = &clkops_omap2_dflt_wait, 1681 .ops = &clkops_omap2_iclk_dflt_wait,
1632 .parent = &l4_ck, 1682 .parent = &l4_ck,
1633 .clkdm_name = "core_l4_clkdm", 1683 .clkdm_name = "core_l4_clkdm",
1634 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_ICLKEN4), 1684 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_ICLKEN4),
@@ -1638,7 +1688,7 @@ static struct clk des_ick = {
1638 1688
1639static struct clk sha_ick = { 1689static struct clk sha_ick = {
1640 .name = "sha_ick", 1690 .name = "sha_ick",
1641 .ops = &clkops_omap2_dflt_wait, 1691 .ops = &clkops_omap2_iclk_dflt_wait,
1642 .parent = &l4_ck, 1692 .parent = &l4_ck,
1643 .clkdm_name = "core_l4_clkdm", 1693 .clkdm_name = "core_l4_clkdm",
1644 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_ICLKEN4), 1694 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_ICLKEN4),
@@ -1648,7 +1698,7 @@ static struct clk sha_ick = {
1648 1698
1649static struct clk rng_ick = { 1699static struct clk rng_ick = {
1650 .name = "rng_ick", 1700 .name = "rng_ick",
1651 .ops = &clkops_omap2_dflt_wait, 1701 .ops = &clkops_omap2_iclk_dflt_wait,
1652 .parent = &l4_ck, 1702 .parent = &l4_ck,
1653 .clkdm_name = "core_l4_clkdm", 1703 .clkdm_name = "core_l4_clkdm",
1654 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_ICLKEN4), 1704 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_ICLKEN4),
@@ -1658,7 +1708,7 @@ static struct clk rng_ick = {
1658 1708
1659static struct clk aes_ick = { 1709static struct clk aes_ick = {
1660 .name = "aes_ick", 1710 .name = "aes_ick",
1661 .ops = &clkops_omap2_dflt_wait, 1711 .ops = &clkops_omap2_iclk_dflt_wait,
1662 .parent = &l4_ck, 1712 .parent = &l4_ck,
1663 .clkdm_name = "core_l4_clkdm", 1713 .clkdm_name = "core_l4_clkdm",
1664 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_ICLKEN4), 1714 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_ICLKEN4),
@@ -1668,7 +1718,7 @@ static struct clk aes_ick = {
1668 1718
1669static struct clk pka_ick = { 1719static struct clk pka_ick = {
1670 .name = "pka_ick", 1720 .name = "pka_ick",
1671 .ops = &clkops_omap2_dflt_wait, 1721 .ops = &clkops_omap2_iclk_dflt_wait,
1672 .parent = &l4_ck, 1722 .parent = &l4_ck,
1673 .clkdm_name = "core_l4_clkdm", 1723 .clkdm_name = "core_l4_clkdm",
1674 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_ICLKEN4), 1724 .enable_reg = OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_ICLKEN4),
@@ -1721,6 +1771,9 @@ static struct omap_clk omap2420_clks[] = {
1721 CLK(NULL, "osc_ck", &osc_ck, CK_242X), 1771 CLK(NULL, "osc_ck", &osc_ck, CK_242X),
1722 CLK(NULL, "sys_ck", &sys_ck, CK_242X), 1772 CLK(NULL, "sys_ck", &sys_ck, CK_242X),
1723 CLK(NULL, "alt_ck", &alt_ck, CK_242X), 1773 CLK(NULL, "alt_ck", &alt_ck, CK_242X),
1774 CLK("omap-mcbsp.1", "pad_fck", &mcbsp_clks, CK_242X),
1775 CLK("omap-mcbsp.2", "pad_fck", &mcbsp_clks, CK_242X),
1776 CLK(NULL, "mcbsp_clks", &mcbsp_clks, CK_242X),
1724 /* internal analog sources */ 1777 /* internal analog sources */
1725 CLK(NULL, "dpll_ck", &dpll_ck, CK_242X), 1778 CLK(NULL, "dpll_ck", &dpll_ck, CK_242X),
1726 CLK(NULL, "apll96_ck", &apll96_ck, CK_242X), 1779 CLK(NULL, "apll96_ck", &apll96_ck, CK_242X),
@@ -1728,6 +1781,8 @@ static struct omap_clk omap2420_clks[] = {
1728 /* internal prcm root sources */ 1781 /* internal prcm root sources */
1729 CLK(NULL, "func_54m_ck", &func_54m_ck, CK_242X), 1782 CLK(NULL, "func_54m_ck", &func_54m_ck, CK_242X),
1730 CLK(NULL, "core_ck", &core_ck, CK_242X), 1783 CLK(NULL, "core_ck", &core_ck, CK_242X),
1784 CLK("omap-mcbsp.1", "prcm_fck", &func_96m_ck, CK_242X),
1785 CLK("omap-mcbsp.2", "prcm_fck", &func_96m_ck, CK_242X),
1731 CLK(NULL, "func_96m_ck", &func_96m_ck, CK_242X), 1786 CLK(NULL, "func_96m_ck", &func_96m_ck, CK_242X),
1732 CLK(NULL, "func_48m_ck", &func_48m_ck, CK_242X), 1787 CLK(NULL, "func_48m_ck", &func_48m_ck, CK_242X),
1733 CLK(NULL, "func_12m_ck", &func_12m_ck, CK_242X), 1788 CLK(NULL, "func_12m_ck", &func_12m_ck, CK_242X),
@@ -1741,7 +1796,6 @@ static struct omap_clk omap2420_clks[] = {
1741 CLK(NULL, "mpu_ck", &mpu_ck, CK_242X), 1796 CLK(NULL, "mpu_ck", &mpu_ck, CK_242X),
1742 /* dsp domain clocks */ 1797 /* dsp domain clocks */
1743 CLK(NULL, "dsp_fck", &dsp_fck, CK_242X), 1798 CLK(NULL, "dsp_fck", &dsp_fck, CK_242X),
1744 CLK(NULL, "dsp_irate_ick", &dsp_irate_ick, CK_242X),
1745 CLK(NULL, "dsp_ick", &dsp_ick, CK_242X), 1799 CLK(NULL, "dsp_ick", &dsp_ick, CK_242X),
1746 CLK(NULL, "iva1_ifck", &iva1_ifck, CK_242X), 1800 CLK(NULL, "iva1_ifck", &iva1_ifck, CK_242X),
1747 CLK(NULL, "iva1_mpu_int_ifck", &iva1_mpu_int_ifck, CK_242X), 1801 CLK(NULL, "iva1_mpu_int_ifck", &iva1_mpu_int_ifck, CK_242X),
@@ -1750,10 +1804,10 @@ static struct omap_clk omap2420_clks[] = {
1750 CLK(NULL, "gfx_2d_fck", &gfx_2d_fck, CK_242X), 1804 CLK(NULL, "gfx_2d_fck", &gfx_2d_fck, CK_242X),
1751 CLK(NULL, "gfx_ick", &gfx_ick, CK_242X), 1805 CLK(NULL, "gfx_ick", &gfx_ick, CK_242X),
1752 /* DSS domain clocks */ 1806 /* DSS domain clocks */
1753 CLK("omapdss", "ick", &dss_ick, CK_242X), 1807 CLK("omapdss_dss", "ick", &dss_ick, CK_242X),
1754 CLK("omapdss", "dss1_fck", &dss1_fck, CK_242X), 1808 CLK("omapdss_dss", "fck", &dss1_fck, CK_242X),
1755 CLK("omapdss", "dss2_fck", &dss2_fck, CK_242X), 1809 CLK("omapdss_dss", "sys_clk", &dss2_fck, CK_242X),
1756 CLK("omapdss", "tv_fck", &dss_54m_fck, CK_242X), 1810 CLK("omapdss_dss", "tv_clk", &dss_54m_fck, CK_242X),
1757 /* L3 domain clocks */ 1811 /* L3 domain clocks */
1758 CLK(NULL, "core_l3_ck", &core_l3_ck, CK_242X), 1812 CLK(NULL, "core_l3_ck", &core_l3_ck, CK_242X),
1759 CLK(NULL, "ssi_fck", &ssi_ssr_sst_fck, CK_242X), 1813 CLK(NULL, "ssi_fck", &ssi_ssr_sst_fck, CK_242X),
@@ -1761,6 +1815,7 @@ static struct omap_clk omap2420_clks[] = {
1761 /* L4 domain clocks */ 1815 /* L4 domain clocks */
1762 CLK(NULL, "l4_ck", &l4_ck, CK_242X), 1816 CLK(NULL, "l4_ck", &l4_ck, CK_242X),
1763 CLK(NULL, "ssi_l4_ick", &ssi_l4_ick, CK_242X), 1817 CLK(NULL, "ssi_l4_ick", &ssi_l4_ick, CK_242X),
1818 CLK(NULL, "wu_l4_ick", &wu_l4_ick, CK_242X),
1764 /* virtual meta-group clock */ 1819 /* virtual meta-group clock */
1765 CLK(NULL, "virt_prcm_set", &virt_prcm_set, CK_242X), 1820 CLK(NULL, "virt_prcm_set", &virt_prcm_set, CK_242X),
1766 /* general l4 interface ck, multi-parent functional clk */ 1821 /* general l4 interface ck, multi-parent functional clk */
@@ -1826,22 +1881,23 @@ static struct omap_clk omap2420_clks[] = {
1826 CLK(NULL, "eac_fck", &eac_fck, CK_242X), 1881 CLK(NULL, "eac_fck", &eac_fck, CK_242X),
1827 CLK("omap_hdq.0", "ick", &hdq_ick, CK_242X), 1882 CLK("omap_hdq.0", "ick", &hdq_ick, CK_242X),
1828 CLK("omap_hdq.1", "fck", &hdq_fck, CK_242X), 1883 CLK("omap_hdq.1", "fck", &hdq_fck, CK_242X),
1829 CLK("i2c_omap.1", "ick", &i2c1_ick, CK_242X), 1884 CLK("omap_i2c.1", "ick", &i2c1_ick, CK_242X),
1830 CLK("i2c_omap.1", "fck", &i2c1_fck, CK_242X), 1885 CLK("omap_i2c.1", "fck", &i2c1_fck, CK_242X),
1831 CLK("i2c_omap.2", "ick", &i2c2_ick, CK_242X), 1886 CLK("omap_i2c.2", "ick", &i2c2_ick, CK_242X),
1832 CLK("i2c_omap.2", "fck", &i2c2_fck, CK_242X), 1887 CLK("omap_i2c.2", "fck", &i2c2_fck, CK_242X),
1833 CLK(NULL, "gpmc_fck", &gpmc_fck, CK_242X), 1888 CLK(NULL, "gpmc_fck", &gpmc_fck, CK_242X),
1834 CLK(NULL, "sdma_fck", &sdma_fck, CK_242X), 1889 CLK(NULL, "sdma_fck", &sdma_fck, CK_242X),
1835 CLK(NULL, "sdma_ick", &sdma_ick, CK_242X), 1890 CLK(NULL, "sdma_ick", &sdma_ick, CK_242X),
1891 CLK(NULL, "sdrc_ick", &sdrc_ick, CK_242X),
1836 CLK(NULL, "vlynq_ick", &vlynq_ick, CK_242X), 1892 CLK(NULL, "vlynq_ick", &vlynq_ick, CK_242X),
1837 CLK(NULL, "vlynq_fck", &vlynq_fck, CK_242X), 1893 CLK(NULL, "vlynq_fck", &vlynq_fck, CK_242X),
1838 CLK(NULL, "des_ick", &des_ick, CK_242X), 1894 CLK(NULL, "des_ick", &des_ick, CK_242X),
1839 CLK("omap-sham", "ick", &sha_ick, CK_242X), 1895 CLK("omap-sham", "ick", &sha_ick, CK_242X),
1840 CLK("omap_rng", "ick", &rng_ick, CK_242X), 1896 CLK("omap_rng", "ick", &rng_ick, CK_242X),
1841 CLK(NULL, "aes_ick", &aes_ick, CK_242X), 1897 CLK("omap-aes", "ick", &aes_ick, CK_242X),
1842 CLK(NULL, "pka_ick", &pka_ick, CK_242X), 1898 CLK(NULL, "pka_ick", &pka_ick, CK_242X),
1843 CLK(NULL, "usb_fck", &usb_fck, CK_242X), 1899 CLK(NULL, "usb_fck", &usb_fck, CK_242X),
1844 CLK("musb_hdrc", "fck", &osc_ck, CK_242X), 1900 CLK("musb-hdrc", "fck", &osc_ck, CK_242X),
1845}; 1901};
1846 1902
1847/* 1903/*
@@ -1877,6 +1933,9 @@ int __init omap2420_clk_init(void)
1877 omap2_init_clk_clkdm(c->lk.clk); 1933 omap2_init_clk_clkdm(c->lk.clk);
1878 } 1934 }
1879 1935
1936 /* Disable autoidle on all clocks; let the PM code enable it later */
1937 omap_clk_disable_autoidle_all();
1938
1880 /* Check the MPU rate set by bootloader */ 1939 /* Check the MPU rate set by bootloader */
1881 clkrate = omap2xxx_clk_get_core_rate(&dpll_ck); 1940 clkrate = omap2xxx_clk_get_core_rate(&dpll_ck);
1882 for (prcm = rate_table; prcm->mpu_speed; prcm++) { 1941 for (prcm = rate_table; prcm->mpu_speed; prcm++) {