diff options
| -rw-r--r-- | arch/arm/mach-omap2/board-zoom-peripherals.c | 2 | ||||
| -rw-r--r-- | arch/arm/mach-omap2/io.c | 2 | ||||
| -rw-r--r-- | arch/arm/mach-omap2/pm-debug.c | 34 | ||||
| -rw-r--r-- | arch/arm/mach-omap2/pm24xx.c | 34 | ||||
| -rw-r--r-- | arch/arm/mach-omap2/pm34xx.c | 27 | ||||
| -rw-r--r-- | arch/arm/mach-omap2/prcm-common.h | 11 | ||||
| -rw-r--r-- | arch/arm/plat-omap/counter_32k.c | 3 | ||||
| -rw-r--r-- | arch/arm/plat-omap/sram.c | 2 | ||||
| -rw-r--r-- | drivers/mtd/nand/omap2.c | 1 |
9 files changed, 79 insertions, 37 deletions
diff --git a/arch/arm/mach-omap2/board-zoom-peripherals.c b/arch/arm/mach-omap2/board-zoom-peripherals.c index 86c9b210295..9db9203667d 100644 --- a/arch/arm/mach-omap2/board-zoom-peripherals.c +++ b/arch/arm/mach-omap2/board-zoom-peripherals.c | |||
| @@ -216,7 +216,7 @@ static struct omap2_hsmmc_info mmc[] __initdata = { | |||
| 216 | { | 216 | { |
| 217 | .name = "wl1271", | 217 | .name = "wl1271", |
| 218 | .mmc = 3, | 218 | .mmc = 3, |
| 219 | .caps = MMC_CAP_4_BIT_DATA, | 219 | .caps = MMC_CAP_4_BIT_DATA | MMC_CAP_POWER_OFF_CARD, |
| 220 | .gpio_wp = -EINVAL, | 220 | .gpio_wp = -EINVAL, |
| 221 | .gpio_cd = -EINVAL, | 221 | .gpio_cd = -EINVAL, |
| 222 | .nonremovable = true, | 222 | .nonremovable = true, |
diff --git a/arch/arm/mach-omap2/io.c b/arch/arm/mach-omap2/io.c index 40562ddd3ee..a1939b1e6f8 100644 --- a/arch/arm/mach-omap2/io.c +++ b/arch/arm/mach-omap2/io.c | |||
| @@ -297,7 +297,7 @@ static int __init _omap2_init_reprogram_sdrc(void) | |||
| 297 | return 0; | 297 | return 0; |
| 298 | 298 | ||
| 299 | dpll3_m2_ck = clk_get(NULL, "dpll3_m2_ck"); | 299 | dpll3_m2_ck = clk_get(NULL, "dpll3_m2_ck"); |
| 300 | if (!dpll3_m2_ck) | 300 | if (IS_ERR(dpll3_m2_ck)) |
| 301 | return -EINVAL; | 301 | return -EINVAL; |
| 302 | 302 | ||
| 303 | rate = clk_get_rate(dpll3_m2_ck); | 303 | rate = clk_get_rate(dpll3_m2_ck); |
diff --git a/arch/arm/mach-omap2/pm-debug.c b/arch/arm/mach-omap2/pm-debug.c index 5e81517a7af..a8afb610c7d 100644 --- a/arch/arm/mach-omap2/pm-debug.c +++ b/arch/arm/mach-omap2/pm-debug.c | |||
| @@ -161,6 +161,23 @@ void omap2_pm_dump(int mode, int resume, unsigned int us) | |||
| 161 | printk(KERN_INFO "%-20s: 0x%08x\n", regs[i].name, regs[i].val); | 161 | printk(KERN_INFO "%-20s: 0x%08x\n", regs[i].name, regs[i].val); |
| 162 | } | 162 | } |
| 163 | 163 | ||
| 164 | void omap2_pm_wakeup_on_timer(u32 seconds, u32 milliseconds) | ||
| 165 | { | ||
| 166 | u32 tick_rate, cycles; | ||
| 167 | |||
| 168 | if (!seconds && !milliseconds) | ||
| 169 | return; | ||
| 170 | |||
| 171 | tick_rate = clk_get_rate(omap_dm_timer_get_fclk(gptimer_wakeup)); | ||
| 172 | cycles = tick_rate * seconds + tick_rate * milliseconds / 1000; | ||
| 173 | omap_dm_timer_stop(gptimer_wakeup); | ||
| 174 | omap_dm_timer_set_load_start(gptimer_wakeup, 0, 0xffffffff - cycles); | ||
| 175 | |||
| 176 | pr_info("PM: Resume timer in %u.%03u secs" | ||
| 177 | " (%d ticks at %d ticks/sec.)\n", | ||
| 178 | seconds, milliseconds, cycles, tick_rate); | ||
| 179 | } | ||
| 180 | |||
| 164 | #ifdef CONFIG_DEBUG_FS | 181 | #ifdef CONFIG_DEBUG_FS |
| 165 | #include <linux/debugfs.h> | 182 | #include <linux/debugfs.h> |
| 166 | #include <linux/seq_file.h> | 183 | #include <linux/seq_file.h> |
| @@ -354,23 +371,6 @@ void pm_dbg_update_time(struct powerdomain *pwrdm, int prev) | |||
| 354 | pwrdm->timer = t; | 371 | pwrdm->timer = t; |
| 355 | } | 372 | } |
| 356 | 373 | ||
| 357 | void omap2_pm_wakeup_on_timer(u32 seconds, u32 milliseconds) | ||
| 358 | { | ||
| 359 | u32 tick_rate, cycles; | ||
| 360 | |||
| 361 | if (!seconds && !milliseconds) | ||
| 362 | return; | ||
| 363 | |||
| 364 | tick_rate = clk_get_rate(omap_dm_timer_get_fclk(gptimer_wakeup)); | ||
| 365 | cycles = tick_rate * seconds + tick_rate * milliseconds / 1000; | ||
| 366 | omap_dm_timer_stop(gptimer_wakeup); | ||
| 367 | omap_dm_timer_set_load_start(gptimer_wakeup, 0, 0xffffffff - cycles); | ||
| 368 | |||
| 369 | pr_info("PM: Resume timer in %u.%03u secs" | ||
| 370 | " (%d ticks at %d ticks/sec.)\n", | ||
| 371 | seconds, milliseconds, cycles, tick_rate); | ||
| 372 | } | ||
| 373 | |||
| 374 | static int clkdm_dbg_show_counter(struct clockdomain *clkdm, void *user) | 374 | static int clkdm_dbg_show_counter(struct clockdomain *clkdm, void *user) |
| 375 | { | 375 | { |
| 376 | struct seq_file *s = (struct seq_file *)user; | 376 | struct seq_file *s = (struct seq_file *)user; |
diff --git a/arch/arm/mach-omap2/pm24xx.c b/arch/arm/mach-omap2/pm24xx.c index c85923e56b8..aaeea49b9bd 100644 --- a/arch/arm/mach-omap2/pm24xx.c +++ b/arch/arm/mach-omap2/pm24xx.c | |||
| @@ -53,6 +53,19 @@ | |||
| 53 | #include <plat/powerdomain.h> | 53 | #include <plat/powerdomain.h> |
| 54 | #include <plat/clockdomain.h> | 54 | #include <plat/clockdomain.h> |
| 55 | 55 | ||
| 56 | #ifdef CONFIG_SUSPEND | ||
| 57 | static suspend_state_t suspend_state = PM_SUSPEND_ON; | ||
| 58 | static inline bool is_suspending(void) | ||
| 59 | { | ||
| 60 | return (suspend_state != PM_SUSPEND_ON); | ||
| 61 | } | ||
| 62 | #else | ||
| 63 | static inline bool is_suspending(void) | ||
| 64 | { | ||
| 65 | return false; | ||
| 66 | } | ||
| 67 | #endif | ||
| 68 | |||
| 56 | static void (*omap2_sram_idle)(void); | 69 | static void (*omap2_sram_idle)(void); |
| 57 | static void (*omap2_sram_suspend)(u32 dllctrl, void __iomem *sdrc_dlla_ctrl, | 70 | static void (*omap2_sram_suspend)(u32 dllctrl, void __iomem *sdrc_dlla_ctrl, |
| 58 | void __iomem *sdrc_power); | 71 | void __iomem *sdrc_power); |
| @@ -120,8 +133,9 @@ static void omap2_enter_full_retention(void) | |||
| 120 | goto no_sleep; | 133 | goto no_sleep; |
| 121 | 134 | ||
| 122 | /* Block console output in case it is on one of the OMAP UARTs */ | 135 | /* Block console output in case it is on one of the OMAP UARTs */ |
| 123 | if (try_acquire_console_sem()) | 136 | if (!is_suspending()) |
| 124 | goto no_sleep; | 137 | if (try_acquire_console_sem()) |
| 138 | goto no_sleep; | ||
| 125 | 139 | ||
| 126 | omap_uart_prepare_idle(0); | 140 | omap_uart_prepare_idle(0); |
| 127 | omap_uart_prepare_idle(1); | 141 | omap_uart_prepare_idle(1); |
| @@ -136,7 +150,8 @@ static void omap2_enter_full_retention(void) | |||
| 136 | omap_uart_resume_idle(1); | 150 | omap_uart_resume_idle(1); |
| 137 | omap_uart_resume_idle(0); | 151 | omap_uart_resume_idle(0); |
| 138 | 152 | ||
| 139 | release_console_sem(); | 153 | if (!is_suspending()) |
| 154 | release_console_sem(); | ||
| 140 | 155 | ||
| 141 | no_sleep: | 156 | no_sleep: |
| 142 | if (omap2_pm_debug) { | 157 | if (omap2_pm_debug) { |
| @@ -284,6 +299,12 @@ out: | |||
| 284 | local_irq_enable(); | 299 | local_irq_enable(); |
| 285 | } | 300 | } |
| 286 | 301 | ||
| 302 | static int omap2_pm_begin(suspend_state_t state) | ||
| 303 | { | ||
| 304 | suspend_state = state; | ||
| 305 | return 0; | ||
| 306 | } | ||
| 307 | |||
| 287 | static int omap2_pm_prepare(void) | 308 | static int omap2_pm_prepare(void) |
| 288 | { | 309 | { |
| 289 | /* We cannot sleep in idle until we have resumed */ | 310 | /* We cannot sleep in idle until we have resumed */ |
| @@ -333,10 +354,17 @@ static void omap2_pm_finish(void) | |||
| 333 | enable_hlt(); | 354 | enable_hlt(); |
| 334 | } | 355 | } |
| 335 | 356 | ||
| 357 | static void omap2_pm_end(void) | ||
| 358 | { | ||
| 359 | suspend_state = PM_SUSPEND_ON; | ||
| 360 | } | ||
| 361 | |||
| 336 | static struct platform_suspend_ops omap_pm_ops = { | 362 | static struct platform_suspend_ops omap_pm_ops = { |
| 363 | .begin = omap2_pm_begin, | ||
| 337 | .prepare = omap2_pm_prepare, | 364 | .prepare = omap2_pm_prepare, |
| 338 | .enter = omap2_pm_enter, | 365 | .enter = omap2_pm_enter, |
| 339 | .finish = omap2_pm_finish, | 366 | .finish = omap2_pm_finish, |
| 367 | .end = omap2_pm_end, | ||
| 340 | .valid = suspend_valid_only_mem, | 368 | .valid = suspend_valid_only_mem, |
| 341 | }; | 369 | }; |
| 342 | 370 | ||
diff --git a/arch/arm/mach-omap2/pm34xx.c b/arch/arm/mach-omap2/pm34xx.c index 0ec8a04b747..648b8c50d02 100644 --- a/arch/arm/mach-omap2/pm34xx.c +++ b/arch/arm/mach-omap2/pm34xx.c | |||
| @@ -50,6 +50,19 @@ | |||
| 50 | #include "sdrc.h" | 50 | #include "sdrc.h" |
| 51 | #include "control.h" | 51 | #include "control.h" |
| 52 | 52 | ||
| 53 | #ifdef CONFIG_SUSPEND | ||
| 54 | static suspend_state_t suspend_state = PM_SUSPEND_ON; | ||
| 55 | static inline bool is_suspending(void) | ||
| 56 | { | ||
| 57 | return (suspend_state != PM_SUSPEND_ON); | ||
| 58 | } | ||
| 59 | #else | ||
| 60 | static inline bool is_suspending(void) | ||
| 61 | { | ||
| 62 | return false; | ||
| 63 | } | ||
| 64 | #endif | ||
| 65 | |||
| 53 | /* Scratchpad offsets */ | 66 | /* Scratchpad offsets */ |
| 54 | #define OMAP343X_TABLE_ADDRESS_OFFSET 0xc4 | 67 | #define OMAP343X_TABLE_ADDRESS_OFFSET 0xc4 |
| 55 | #define OMAP343X_TABLE_VALUE_OFFSET 0xc0 | 68 | #define OMAP343X_TABLE_VALUE_OFFSET 0xc0 |
| @@ -387,10 +400,11 @@ void omap_sram_idle(void) | |||
| 387 | } | 400 | } |
| 388 | 401 | ||
| 389 | /* Block console output in case it is on one of the OMAP UARTs */ | 402 | /* Block console output in case it is on one of the OMAP UARTs */ |
| 390 | if (per_next_state < PWRDM_POWER_ON || | 403 | if (!is_suspending()) |
| 391 | core_next_state < PWRDM_POWER_ON) | 404 | if (per_next_state < PWRDM_POWER_ON || |
| 392 | if (try_acquire_console_sem()) | 405 | core_next_state < PWRDM_POWER_ON) |
| 393 | goto console_still_active; | 406 | if (try_acquire_console_sem()) |
| 407 | goto console_still_active; | ||
| 394 | 408 | ||
| 395 | /* PER */ | 409 | /* PER */ |
| 396 | if (per_next_state < PWRDM_POWER_ON) { | 410 | if (per_next_state < PWRDM_POWER_ON) { |
| @@ -470,7 +484,8 @@ void omap_sram_idle(void) | |||
| 470 | omap_uart_resume_idle(3); | 484 | omap_uart_resume_idle(3); |
| 471 | } | 485 | } |
| 472 | 486 | ||
| 473 | release_console_sem(); | 487 | if (!is_suspending()) |
| 488 | release_console_sem(); | ||
| 474 | 489 | ||
| 475 | console_still_active: | 490 | console_still_active: |
| 476 | /* Disable IO-PAD and IO-CHAIN wakeup */ | 491 | /* Disable IO-PAD and IO-CHAIN wakeup */ |
| @@ -514,8 +529,6 @@ out: | |||
| 514 | } | 529 | } |
| 515 | 530 | ||
| 516 | #ifdef CONFIG_SUSPEND | 531 | #ifdef CONFIG_SUSPEND |
| 517 | static suspend_state_t suspend_state; | ||
| 518 | |||
| 519 | static int omap3_pm_prepare(void) | 532 | static int omap3_pm_prepare(void) |
| 520 | { | 533 | { |
| 521 | disable_hlt(); | 534 | disable_hlt(); |
diff --git a/arch/arm/mach-omap2/prcm-common.h b/arch/arm/mach-omap2/prcm-common.h index 298a22a754e..f81acee4738 100644 --- a/arch/arm/mach-omap2/prcm-common.h +++ b/arch/arm/mach-omap2/prcm-common.h | |||
| @@ -243,13 +243,14 @@ | |||
| 243 | #define OMAP24XX_EN_GPT1_MASK (1 << 0) | 243 | #define OMAP24XX_EN_GPT1_MASK (1 << 0) |
| 244 | 244 | ||
| 245 | /* PM_WKST_WKUP, CM_IDLEST_WKUP shared bits */ | 245 | /* PM_WKST_WKUP, CM_IDLEST_WKUP shared bits */ |
| 246 | #define OMAP24XX_ST_GPIOS_SHIFT (1 << 2) | 246 | #define OMAP24XX_ST_GPIOS_SHIFT 2 |
| 247 | #define OMAP24XX_ST_GPIOS_MASK 2 | 247 | #define OMAP24XX_ST_GPIOS_MASK (1 << 2) |
| 248 | #define OMAP24XX_ST_GPT1_SHIFT (1 << 0) | 248 | #define OMAP24XX_ST_GPT1_SHIFT 0 |
| 249 | #define OMAP24XX_ST_GPT1_MASK 0 | 249 | #define OMAP24XX_ST_GPT1_MASK (1 << 0) |
| 250 | 250 | ||
| 251 | /* CM_IDLEST_MDM and PM_WKST_MDM shared bits */ | 251 | /* CM_IDLEST_MDM and PM_WKST_MDM shared bits */ |
| 252 | #define OMAP2430_ST_MDM_SHIFT (1 << 0) | 252 | #define OMAP2430_ST_MDM_SHIFT 0 |
| 253 | #define OMAP2430_ST_MDM_MASK (1 << 0) | ||
| 253 | 254 | ||
| 254 | 255 | ||
| 255 | /* 3430 register bits shared between CM & PRM registers */ | 256 | /* 3430 register bits shared between CM & PRM registers */ |
diff --git a/arch/arm/plat-omap/counter_32k.c b/arch/arm/plat-omap/counter_32k.c index 155fe43a672..8722a136f3a 100644 --- a/arch/arm/plat-omap/counter_32k.c +++ b/arch/arm/plat-omap/counter_32k.c | |||
| @@ -16,6 +16,7 @@ | |||
| 16 | #include <linux/init.h> | 16 | #include <linux/init.h> |
| 17 | #include <linux/clk.h> | 17 | #include <linux/clk.h> |
| 18 | #include <linux/io.h> | 18 | #include <linux/io.h> |
| 19 | #include <linux/err.h> | ||
| 19 | 20 | ||
| 20 | #include <plat/common.h> | 21 | #include <plat/common.h> |
| 21 | #include <plat/board.h> | 22 | #include <plat/board.h> |
| @@ -164,7 +165,7 @@ static int __init omap_init_clocksource_32k(void) | |||
| 164 | return -ENODEV; | 165 | return -ENODEV; |
| 165 | 166 | ||
| 166 | sync_32k_ick = clk_get(NULL, "omap_32ksync_ick"); | 167 | sync_32k_ick = clk_get(NULL, "omap_32ksync_ick"); |
| 167 | if (sync_32k_ick) | 168 | if (!IS_ERR(sync_32k_ick)) |
| 168 | clk_enable(sync_32k_ick); | 169 | clk_enable(sync_32k_ick); |
| 169 | 170 | ||
| 170 | clocksource_32k.mult = clocksource_hz2mult(32768, | 171 | clocksource_32k.mult = clocksource_hz2mult(32768, |
diff --git a/arch/arm/plat-omap/sram.c b/arch/arm/plat-omap/sram.c index e2c8eebe6b3..74dac419d32 100644 --- a/arch/arm/plat-omap/sram.c +++ b/arch/arm/plat-omap/sram.c | |||
| @@ -166,7 +166,7 @@ static void __init omap_detect_sram(void) | |||
| 166 | cpu_is_omap1710()) | 166 | cpu_is_omap1710()) |
| 167 | omap_sram_size = 0x4000; /* 16K */ | 167 | omap_sram_size = 0x4000; /* 16K */ |
| 168 | else if (cpu_is_omap1611()) | 168 | else if (cpu_is_omap1611()) |
| 169 | omap_sram_size = 0x3e800; /* 250K */ | 169 | omap_sram_size = SZ_256K; |
| 170 | else { | 170 | else { |
| 171 | printk(KERN_ERR "Could not detect SRAM size\n"); | 171 | printk(KERN_ERR "Could not detect SRAM size\n"); |
| 172 | omap_sram_size = 0x4000; | 172 | omap_sram_size = 0x4000; |
diff --git a/drivers/mtd/nand/omap2.c b/drivers/mtd/nand/omap2.c index cd41c58b5bb..15682ec8530 100644 --- a/drivers/mtd/nand/omap2.c +++ b/drivers/mtd/nand/omap2.c | |||
| @@ -7,7 +7,6 @@ | |||
| 7 | * it under the terms of the GNU General Public License version 2 as | 7 | * it under the terms of the GNU General Public License version 2 as |
| 8 | * published by the Free Software Foundation. | 8 | * published by the Free Software Foundation. |
| 9 | */ | 9 | */ |
| 10 | #define CONFIG_MTD_NAND_OMAP_HWECC | ||
| 11 | 10 | ||
| 12 | #include <linux/platform_device.h> | 11 | #include <linux/platform_device.h> |
| 13 | #include <linux/dma-mapping.h> | 12 | #include <linux/dma-mapping.h> |
