aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-pxa/pxa3xx.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arm/mach-pxa/pxa3xx.c')
-rw-r--r--arch/arm/mach-pxa/pxa3xx.c47
1 files changed, 19 insertions, 28 deletions
diff --git a/arch/arm/mach-pxa/pxa3xx.c b/arch/arm/mach-pxa/pxa3xx.c
index 15685d2b8f8c..03cbc38103ed 100644
--- a/arch/arm/mach-pxa/pxa3xx.c
+++ b/arch/arm/mach-pxa/pxa3xx.c
@@ -22,12 +22,13 @@
22#include <linux/io.h> 22#include <linux/io.h>
23#include <linux/sysdev.h> 23#include <linux/sysdev.h>
24 24
25#include <asm/hardware.h> 25#include <mach/hardware.h>
26#include <asm/arch/pxa3xx-regs.h> 26#include <mach/pxa3xx-regs.h>
27#include <asm/arch/ohci.h> 27#include <mach/reset.h>
28#include <asm/arch/pm.h> 28#include <mach/ohci.h>
29#include <asm/arch/dma.h> 29#include <mach/pm.h>
30#include <asm/arch/ssp.h> 30#include <mach/dma.h>
31#include <mach/ssp.h>
31 32
32#include "generic.h" 33#include "generic.h"
33#include "devices.h" 34#include "devices.h"
@@ -109,6 +110,12 @@ unsigned int pxa3xx_get_memclk_frequency_10khz(void)
109 return (clk / 10000); 110 return (clk / 10000);
110} 111}
111 112
113void pxa3xx_clear_reset_status(unsigned int mask)
114{
115 /* RESET_STATUS_* has a 1:1 mapping with ARSR */
116 ARSR = mask;
117}
118
112/* 119/*
113 * Return the current AC97 clock frequency. 120 * Return the current AC97 clock frequency.
114 */ 121 */
@@ -144,7 +151,7 @@ static unsigned long clk_pxa3xx_hsio_getrate(struct clk *clk)
144 return hsio_clk; 151 return hsio_clk;
145} 152}
146 153
147static void clk_pxa3xx_cken_enable(struct clk *clk) 154void clk_pxa3xx_cken_enable(struct clk *clk)
148{ 155{
149 unsigned long mask = 1ul << (clk->cken & 0x1f); 156 unsigned long mask = 1ul << (clk->cken & 0x1f);
150 157
@@ -154,7 +161,7 @@ static void clk_pxa3xx_cken_enable(struct clk *clk)
154 CKENB |= mask; 161 CKENB |= mask;
155} 162}
156 163
157static void clk_pxa3xx_cken_disable(struct clk *clk) 164void clk_pxa3xx_cken_disable(struct clk *clk)
158{ 165{
159 unsigned long mask = 1ul << (clk->cken & 0x1f); 166 unsigned long mask = 1ul << (clk->cken & 0x1f);
160 167
@@ -164,7 +171,7 @@ static void clk_pxa3xx_cken_disable(struct clk *clk)
164 CKENB &= ~mask; 171 CKENB &= ~mask;
165} 172}
166 173
167static const struct clkops clk_pxa3xx_cken_ops = { 174const struct clkops clk_pxa3xx_cken_ops = {
168 .enable = clk_pxa3xx_cken_enable, 175 .enable = clk_pxa3xx_cken_enable,
169 .disable = clk_pxa3xx_cken_disable, 176 .disable = clk_pxa3xx_cken_disable,
170}; 177};
@@ -196,24 +203,6 @@ static const struct clkops clk_pout_ops = {
196 .disable = clk_pout_disable, 203 .disable = clk_pout_disable,
197}; 204};
198 205
199#define PXA3xx_CKEN(_name, _cken, _rate, _delay, _dev) \
200 { \
201 .name = _name, \
202 .dev = _dev, \
203 .ops = &clk_pxa3xx_cken_ops, \
204 .rate = _rate, \
205 .cken = CKEN_##_cken, \
206 .delay = _delay, \
207 }
208
209#define PXA3xx_CK(_name, _cken, _ops, _dev) \
210 { \
211 .name = _name, \
212 .dev = _dev, \
213 .ops = _ops, \
214 .cken = CKEN_##_cken, \
215 }
216
217static struct clk pxa3xx_clks[] = { 206static struct clk pxa3xx_clks[] = {
218 { 207 {
219 .name = "CLK_POUT", 208 .name = "CLK_POUT",
@@ -244,7 +233,6 @@ static struct clk pxa3xx_clks[] = {
244 233
245 PXA3xx_CKEN("MMCCLK", MMC1, 19500000, 0, &pxa_device_mci.dev), 234 PXA3xx_CKEN("MMCCLK", MMC1, 19500000, 0, &pxa_device_mci.dev),
246 PXA3xx_CKEN("MMCCLK", MMC2, 19500000, 0, &pxa3xx_device_mci2.dev), 235 PXA3xx_CKEN("MMCCLK", MMC2, 19500000, 0, &pxa3xx_device_mci2.dev),
247 PXA3xx_CKEN("MMCCLK", MMC3, 19500000, 0, &pxa3xx_device_mci3.dev),
248}; 236};
249 237
250#ifdef CONFIG_PM 238#ifdef CONFIG_PM
@@ -551,6 +539,9 @@ static int __init pxa3xx_init(void)
551 int i, ret = 0; 539 int i, ret = 0;
552 540
553 if (cpu_is_pxa3xx()) { 541 if (cpu_is_pxa3xx()) {
542
543 reset_status = ARSR;
544
554 /* 545 /*
555 * clear RDH bit every time after reset 546 * clear RDH bit every time after reset
556 * 547 *