diff options
author | Magnus Damm <damm@igel.co.jp> | 2009-07-03 06:15:25 -0400 |
---|---|---|
committer | Paul Mundt <lethal@linux-sh.org> | 2009-07-04 11:28:55 -0400 |
commit | a61c1a636628a28ab5b42a9d36582a8f6a08893a (patch) | |
tree | 23c26c44f8c00a3c90ecb420e5678a6cbb1eca30 /arch/sh/kernel/cpu/sh4a/clock-sh7722.c | |
parent | 79714acbab080ad351acf4bba9a2bbc21d65c93c (diff) |
sh: hwblk for sh7722
This patch contains the sh7722 specific hwblk implementation.
Hwblk ids are added to the processor specific header file,
module stop bits and areas are kept track of as hwblks,
clocks are converted to make use of the shared hwblk code.
Code to determine allowed sleep modes is also added.
Signed-off-by: Magnus Damm <damm@igel.co.jp>
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
Diffstat (limited to 'arch/sh/kernel/cpu/sh4a/clock-sh7722.c')
-rw-r--r-- | arch/sh/kernel/cpu/sh4a/clock-sh7722.c | 60 |
1 files changed, 32 insertions, 28 deletions
diff --git a/arch/sh/kernel/cpu/sh4a/clock-sh7722.c b/arch/sh/kernel/cpu/sh4a/clock-sh7722.c index 40f859354f79..1fa9e1dd1cc8 100644 --- a/arch/sh/kernel/cpu/sh4a/clock-sh7722.c +++ b/arch/sh/kernel/cpu/sh4a/clock-sh7722.c | |||
@@ -22,6 +22,8 @@ | |||
22 | #include <linux/kernel.h> | 22 | #include <linux/kernel.h> |
23 | #include <linux/io.h> | 23 | #include <linux/io.h> |
24 | #include <asm/clock.h> | 24 | #include <asm/clock.h> |
25 | #include <asm/hwblk.h> | ||
26 | #include <cpu/sh7722.h> | ||
25 | 27 | ||
26 | /* SH7722 registers */ | 28 | /* SH7722 registers */ |
27 | #define FRQCR 0xa4150000 | 29 | #define FRQCR 0xa4150000 |
@@ -140,35 +142,37 @@ struct clk div6_clks[] = { | |||
140 | SH_CLK_DIV6("video_clk", &pll_clk, VCLKCR, 0), | 142 | SH_CLK_DIV6("video_clk", &pll_clk, VCLKCR, 0), |
141 | }; | 143 | }; |
142 | 144 | ||
143 | #define MSTP(_str, _parent, _reg, _bit, _flags) \ | 145 | #define R_CLK &r_clk |
144 | SH_CLK_MSTP32(_str, -1, _parent, _reg, _bit, _flags) | 146 | #define P_CLK &div4_clks[DIV4_P] |
147 | #define B_CLK &div4_clks[DIV4_B] | ||
148 | #define U_CLK &div4_clks[DIV4_U] | ||
145 | 149 | ||
146 | static struct clk mstp_clks[] = { | 150 | static struct clk mstp_clks[] = { |
147 | MSTP("uram0", &div4_clks[DIV4_U], MSTPCR0, 28, CLK_ENABLE_ON_INIT), | 151 | SH_HWBLK_CLK("uram0", -1, U_CLK, HWBLK_URAM, CLK_ENABLE_ON_INIT), |
148 | MSTP("xymem0", &div4_clks[DIV4_B], MSTPCR0, 26, CLK_ENABLE_ON_INIT), | 152 | SH_HWBLK_CLK("xymem0", -1, B_CLK, HWBLK_XYMEM, CLK_ENABLE_ON_INIT), |
149 | MSTP("tmu0", &div4_clks[DIV4_P], MSTPCR0, 15, 0), | 153 | SH_HWBLK_CLK("tmu0", -1, P_CLK, HWBLK_TMU, 0), |
150 | MSTP("cmt0", &r_clk, MSTPCR0, 14, 0), | 154 | SH_HWBLK_CLK("cmt0", -1, R_CLK, HWBLK_CMT, 0), |
151 | MSTP("rwdt0", &r_clk, MSTPCR0, 13, 0), | 155 | SH_HWBLK_CLK("rwdt0", -1, R_CLK, HWBLK_RWDT, 0), |
152 | MSTP("flctl0", &div4_clks[DIV4_P], MSTPCR0, 10, 0), | 156 | SH_HWBLK_CLK("flctl0", -1, P_CLK, HWBLK_FLCTL, 0), |
153 | MSTP("scif0", &div4_clks[DIV4_P], MSTPCR0, 7, 0), | 157 | SH_HWBLK_CLK("scif0", -1, P_CLK, HWBLK_SCIF0, 0), |
154 | MSTP("scif1", &div4_clks[DIV4_P], MSTPCR0, 6, 0), | 158 | SH_HWBLK_CLK("scif1", -1, P_CLK, HWBLK_SCIF1, 0), |
155 | MSTP("scif2", &div4_clks[DIV4_P], MSTPCR0, 5, 0), | 159 | SH_HWBLK_CLK("scif2", -1, P_CLK, HWBLK_SCIF2, 0), |
156 | 160 | ||
157 | MSTP("i2c0", &div4_clks[DIV4_P], MSTPCR1, 9, 0), | 161 | SH_HWBLK_CLK("i2c0", -1, P_CLK, HWBLK_IIC, 0), |
158 | MSTP("rtc0", &r_clk, MSTPCR1, 8, 0), | 162 | SH_HWBLK_CLK("rtc0", -1, R_CLK, HWBLK_RTC, 0), |
159 | 163 | ||
160 | MSTP("sdhi0", &div4_clks[DIV4_P], MSTPCR2, 18, 0), | 164 | SH_HWBLK_CLK("sdhi0", -1, P_CLK, HWBLK_SDHI, 0), |
161 | MSTP("keysc0", &r_clk, MSTPCR2, 14, 0), | 165 | SH_HWBLK_CLK("keysc0", -1, R_CLK, HWBLK_KEYSC, 0), |
162 | MSTP("usbf0", &div4_clks[DIV4_P], MSTPCR2, 11, 0), | 166 | SH_HWBLK_CLK("usbf0", -1, P_CLK, HWBLK_USBF, 0), |
163 | MSTP("2dg0", &div4_clks[DIV4_B], MSTPCR2, 9, 0), | 167 | SH_HWBLK_CLK("2dg0", -1, B_CLK, HWBLK_2DG, 0), |
164 | MSTP("siu0", &div4_clks[DIV4_B], MSTPCR2, 8, 0), | 168 | SH_HWBLK_CLK("siu0", -1, B_CLK, HWBLK_SIU, 0), |
165 | MSTP("vou0", &div4_clks[DIV4_B], MSTPCR2, 5, 0), | 169 | SH_HWBLK_CLK("vou0", -1, B_CLK, HWBLK_VOU, 0), |
166 | MSTP("jpu0", &div4_clks[DIV4_B], MSTPCR2, 6, CLK_ENABLE_ON_INIT), | 170 | SH_HWBLK_CLK("jpu0", -1, B_CLK, HWBLK_JPU, CLK_ENABLE_ON_INIT), |
167 | MSTP("beu0", &div4_clks[DIV4_B], MSTPCR2, 4, 0), | 171 | SH_HWBLK_CLK("beu0", -1, B_CLK, HWBLK_BEU, 0), |
168 | MSTP("ceu0", &div4_clks[DIV4_B], MSTPCR2, 3, 0), | 172 | SH_HWBLK_CLK("ceu0", -1, B_CLK, HWBLK_CEU, 0), |
169 | MSTP("veu0", &div4_clks[DIV4_B], MSTPCR2, 2, CLK_ENABLE_ON_INIT), | 173 | SH_HWBLK_CLK("veu0", -1, B_CLK, HWBLK_VEU, CLK_ENABLE_ON_INIT), |
170 | MSTP("vpu0", &div4_clks[DIV4_B], MSTPCR2, 1, CLK_ENABLE_ON_INIT), | 174 | SH_HWBLK_CLK("vpu0", -1, B_CLK, HWBLK_VPU, CLK_ENABLE_ON_INIT), |
171 | MSTP("lcdc0", &div4_clks[DIV4_B], MSTPCR2, 0, 0), | 175 | SH_HWBLK_CLK("lcdc0", -1, P_CLK, HWBLK_LCDC, 0), |
172 | }; | 176 | }; |
173 | 177 | ||
174 | int __init arch_clk_init(void) | 178 | int __init arch_clk_init(void) |
@@ -191,7 +195,7 @@ int __init arch_clk_init(void) | |||
191 | ret = sh_clk_div6_register(div6_clks, ARRAY_SIZE(div6_clks)); | 195 | ret = sh_clk_div6_register(div6_clks, ARRAY_SIZE(div6_clks)); |
192 | 196 | ||
193 | if (!ret) | 197 | if (!ret) |
194 | ret = sh_clk_mstp32_register(mstp_clks, ARRAY_SIZE(mstp_clks)); | 198 | ret = sh_hwblk_clk_register(mstp_clks, ARRAY_SIZE(mstp_clks)); |
195 | 199 | ||
196 | return ret; | 200 | return ret; |
197 | } | 201 | } |