diff options
Diffstat (limited to 'arch/arm/plat-omap/counter_32k.c')
-rw-r--r-- | arch/arm/plat-omap/counter_32k.c | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/arch/arm/plat-omap/counter_32k.c b/arch/arm/plat-omap/counter_32k.c index 2132c4f389e1..dbf1e03029a5 100644 --- a/arch/arm/plat-omap/counter_32k.c +++ b/arch/arm/plat-omap/counter_32k.c | |||
@@ -29,7 +29,10 @@ | |||
29 | #include <plat/clock.h> | 29 | #include <plat/clock.h> |
30 | 30 | ||
31 | /* OMAP2_32KSYNCNT_CR_OFF: offset of 32ksync counter register */ | 31 | /* OMAP2_32KSYNCNT_CR_OFF: offset of 32ksync counter register */ |
32 | #define OMAP2_32KSYNCNT_CR_OFF 0x10 | 32 | #define OMAP2_32KSYNCNT_REV_OFF 0x0 |
33 | #define OMAP2_32KSYNCNT_REV_SCHEME (0x3 << 30) | ||
34 | #define OMAP2_32KSYNCNT_CR_OFF_LOW 0x10 | ||
35 | #define OMAP2_32KSYNCNT_CR_OFF_HIGH 0x30 | ||
33 | 36 | ||
34 | /* | 37 | /* |
35 | * 32KHz clocksource ... always available, on pretty most chips except | 38 | * 32KHz clocksource ... always available, on pretty most chips except |
@@ -84,9 +87,16 @@ int __init omap_init_clocksource_32k(void __iomem *vbase) | |||
84 | int ret; | 87 | int ret; |
85 | 88 | ||
86 | /* | 89 | /* |
87 | * 32k sync Counter register offset is at 0x10 | 90 | * 32k sync Counter IP register offsets vary between the |
91 | * highlander version and the legacy ones. | ||
92 | * The 'SCHEME' bits(30-31) of the revision register is used | ||
93 | * to identify the version. | ||
88 | */ | 94 | */ |
89 | sync32k_cnt_reg = vbase + OMAP2_32KSYNCNT_CR_OFF; | 95 | if (__raw_readl(vbase + OMAP2_32KSYNCNT_REV_OFF) & |
96 | OMAP2_32KSYNCNT_REV_SCHEME) | ||
97 | sync32k_cnt_reg = vbase + OMAP2_32KSYNCNT_CR_OFF_HIGH; | ||
98 | else | ||
99 | sync32k_cnt_reg = vbase + OMAP2_32KSYNCNT_CR_OFF_LOW; | ||
90 | 100 | ||
91 | /* | 101 | /* |
92 | * 120000 rough estimate from the calculations in | 102 | * 120000 rough estimate from the calculations in |