diff options
| -rw-r--r-- | drivers/clocksource/tegra20_timer.c | 67 |
1 files changed, 26 insertions, 41 deletions
diff --git a/drivers/clocksource/tegra20_timer.c b/drivers/clocksource/tegra20_timer.c index b3396ab15f63..15cc723f699f 100644 --- a/drivers/clocksource/tegra20_timer.c +++ b/drivers/clocksource/tegra20_timer.c | |||
| @@ -154,28 +154,12 @@ static struct irqaction tegra_timer_irq = { | |||
| 154 | .dev_id = &tegra_clockevent, | 154 | .dev_id = &tegra_clockevent, |
| 155 | }; | 155 | }; |
| 156 | 156 | ||
| 157 | static const struct of_device_id timer_match[] __initconst = { | ||
| 158 | { .compatible = "nvidia,tegra20-timer" }, | ||
| 159 | {} | ||
| 160 | }; | ||
| 161 | |||
| 162 | static const struct of_device_id rtc_match[] __initconst = { | ||
| 163 | { .compatible = "nvidia,tegra20-rtc" }, | ||
| 164 | {} | ||
| 165 | }; | ||
| 166 | |||
| 167 | static void __init tegra20_init_timer(struct device_node *np) | 157 | static void __init tegra20_init_timer(struct device_node *np) |
| 168 | { | 158 | { |
| 169 | struct clk *clk; | 159 | struct clk *clk; |
| 170 | unsigned long rate; | 160 | unsigned long rate; |
| 171 | int ret; | 161 | int ret; |
| 172 | 162 | ||
| 173 | np = of_find_matching_node(NULL, timer_match); | ||
| 174 | if (!np) { | ||
| 175 | pr_err("Failed to find timer DT node\n"); | ||
| 176 | BUG(); | ||
| 177 | } | ||
| 178 | |||
| 179 | timer_reg_base = of_iomap(np, 0); | 163 | timer_reg_base = of_iomap(np, 0); |
| 180 | if (!timer_reg_base) { | 164 | if (!timer_reg_base) { |
| 181 | pr_err("Can't map timer registers\n"); | 165 | pr_err("Can't map timer registers\n"); |
| @@ -199,30 +183,6 @@ static void __init tegra20_init_timer(struct device_node *np) | |||
| 199 | 183 | ||
| 200 | of_node_put(np); | 184 | of_node_put(np); |
| 201 | 185 | ||
| 202 | np = of_find_matching_node(NULL, rtc_match); | ||
| 203 | if (!np) { | ||
| 204 | pr_err("Failed to find RTC DT node\n"); | ||
| 205 | BUG(); | ||
| 206 | } | ||
| 207 | |||
| 208 | rtc_base = of_iomap(np, 0); | ||
| 209 | if (!rtc_base) { | ||
| 210 | pr_err("Can't map RTC registers"); | ||
| 211 | BUG(); | ||
| 212 | } | ||
| 213 | |||
| 214 | /* | ||
| 215 | * rtc registers are used by read_persistent_clock, keep the rtc clock | ||
| 216 | * enabled | ||
| 217 | */ | ||
| 218 | clk = clk_get_sys("rtc-tegra", NULL); | ||
| 219 | if (IS_ERR(clk)) | ||
| 220 | pr_warn("Unable to get rtc-tegra clock\n"); | ||
| 221 | else | ||
| 222 | clk_prepare_enable(clk); | ||
| 223 | |||
| 224 | of_node_put(np); | ||
| 225 | |||
| 226 | switch (rate) { | 186 | switch (rate) { |
| 227 | case 12000000: | 187 | case 12000000: |
| 228 | timer_writel(0x000b, TIMERUS_USEC_CFG); | 188 | timer_writel(0x000b, TIMERUS_USEC_CFG); |
| @@ -261,9 +221,34 @@ static void __init tegra20_init_timer(struct device_node *np) | |||
| 261 | #ifdef CONFIG_HAVE_ARM_TWD | 221 | #ifdef CONFIG_HAVE_ARM_TWD |
| 262 | twd_local_timer_of_register(); | 222 | twd_local_timer_of_register(); |
| 263 | #endif | 223 | #endif |
| 224 | } | ||
| 225 | CLOCKSOURCE_OF_DECLARE(tegra20_timer, "nvidia,tegra20-timer", tegra20_init_timer); | ||
| 226 | |||
| 227 | static void __init tegra20_init_rtc(struct device_node *np) | ||
| 228 | { | ||
| 229 | struct clk *clk; | ||
| 230 | |||
| 231 | rtc_base = of_iomap(np, 0); | ||
| 232 | if (!rtc_base) { | ||
| 233 | pr_err("Can't map RTC registers"); | ||
| 234 | BUG(); | ||
| 235 | } | ||
| 236 | |||
| 237 | /* | ||
| 238 | * rtc registers are used by read_persistent_clock, keep the rtc clock | ||
| 239 | * enabled | ||
| 240 | */ | ||
| 241 | clk = clk_get_sys("rtc-tegra", NULL); | ||
| 242 | if (IS_ERR(clk)) | ||
| 243 | pr_warn("Unable to get rtc-tegra clock\n"); | ||
| 244 | else | ||
| 245 | clk_prepare_enable(clk); | ||
| 246 | |||
| 247 | of_node_put(np); | ||
| 248 | |||
| 264 | register_persistent_clock(NULL, tegra_read_persistent_clock); | 249 | register_persistent_clock(NULL, tegra_read_persistent_clock); |
| 265 | } | 250 | } |
| 266 | CLOCKSOURCE_OF_DECLARE(tegra20, "nvidia,tegra20-timer", tegra20_init_timer); | 251 | CLOCKSOURCE_OF_DECLARE(tegra20_rtc, "nvidia,tegra20-rtc", tegra20_init_rtc); |
| 267 | 252 | ||
| 268 | #ifdef CONFIG_PM | 253 | #ifdef CONFIG_PM |
| 269 | static u32 usec_config; | 254 | static u32 usec_config; |
