Commit 48cb1258 authored by Tony Lindgren's avatar Tony Lindgren

Merge branch 'for_3.1/pm-misc' of...

Merge branch 'for_3.1/pm-misc' of git://git.kernel.org/pub/scm/linux/kernel/git/khilman/linux-omap-pm into devel-cleanup

Conflicts:
	arch/arm/mach-omap2/pm-debug.c
	arch/arm/mach-omap2/pm.h
parents 332acd9e ec3cdb5b
...@@ -4,14 +4,14 @@ ...@@ -4,14 +4,14 @@
# Common support # Common support
obj-y := io.o id.o sram.o time.o irq.o mux.o flash.o serial.o devices.o dma.o obj-y := io.o id.o sram.o time.o irq.o mux.o flash.o serial.o devices.o dma.o
obj-y += clock.o clock_data.o opp_data.o reset.o obj-y += clock.o clock_data.o opp_data.o reset.o pm_bus.o
obj-$(CONFIG_OMAP_MCBSP) += mcbsp.o obj-$(CONFIG_OMAP_MCBSP) += mcbsp.o
obj-$(CONFIG_OMAP_32K_TIMER) += timer32k.o obj-$(CONFIG_OMAP_32K_TIMER) += timer32k.o
# Power Management # Power Management
obj-$(CONFIG_PM) += pm.o sleep.o pm_bus.o obj-$(CONFIG_PM) += pm.o sleep.o
# DSP # DSP
obj-$(CONFIG_OMAP_MBOX_FWK) += mailbox_mach.o obj-$(CONFIG_OMAP_MBOX_FWK) += mailbox_mach.o
......
...@@ -56,9 +56,13 @@ static struct dev_power_domain default_power_domain = { ...@@ -56,9 +56,13 @@ static struct dev_power_domain default_power_domain = {
USE_PLATFORM_PM_SLEEP_OPS USE_PLATFORM_PM_SLEEP_OPS
}, },
}; };
#define OMAP1_PWR_DOMAIN (&default_power_domain)
#else
#define OMAP1_PWR_DOMAIN NULL
#endif /* CONFIG_PM_RUNTIME */
static struct pm_clk_notifier_block platform_bus_notifier = { static struct pm_clk_notifier_block platform_bus_notifier = {
.pwr_domain = &default_power_domain, .pwr_domain = OMAP1_PWR_DOMAIN,
.con_ids = { "ick", "fck", NULL, }, .con_ids = { "ick", "fck", NULL, },
}; };
...@@ -72,4 +76,4 @@ static int __init omap1_pm_runtime_init(void) ...@@ -72,4 +76,4 @@ static int __init omap1_pm_runtime_init(void)
return 0; return 0;
} }
core_initcall(omap1_pm_runtime_init); core_initcall(omap1_pm_runtime_init);
#endif /* CONFIG_PM_RUNTIME */
...@@ -84,7 +84,8 @@ static struct mtd_partition omap3pandora_nand_partitions[] = { ...@@ -84,7 +84,8 @@ static struct mtd_partition omap3pandora_nand_partitions[] = {
static struct omap_nand_platform_data pandora_nand_data = { static struct omap_nand_platform_data pandora_nand_data = {
.cs = 0, .cs = 0,
.devsize = 1, /* '0' for 8-bit, '1' for 16-bit device */ .devsize = NAND_BUSWIDTH_16,
.xfer_type = NAND_OMAP_PREFETCH_DMA,
.parts = omap3pandora_nand_partitions, .parts = omap3pandora_nand_partitions,
.nr_parts = ARRAY_SIZE(omap3pandora_nand_partitions), .nr_parts = ARRAY_SIZE(omap3pandora_nand_partitions),
}; };
......
This diff is collapsed.
...@@ -61,25 +61,15 @@ extern int omap3_pm_get_suspend_state(struct powerdomain *pwrdm); ...@@ -61,25 +61,15 @@ extern int omap3_pm_get_suspend_state(struct powerdomain *pwrdm);
extern int omap3_pm_set_suspend_state(struct powerdomain *pwrdm, int state); extern int omap3_pm_set_suspend_state(struct powerdomain *pwrdm, int state);
#ifdef CONFIG_PM_DEBUG #ifdef CONFIG_PM_DEBUG
extern void omap2_pm_dump(int mode, int resume, unsigned int us);
extern int omap2_pm_debug;
extern u32 enable_off_mode; extern u32 enable_off_mode;
extern u32 sleep_while_idle;
#else #else
#define omap2_pm_dump(mode, resume, us) do {} while (0);
#define omap2_pm_debug 0
#define enable_off_mode 0 #define enable_off_mode 0
#define sleep_while_idle 0
#endif #endif
#if defined(CONFIG_PM_DEBUG) && defined(CONFIG_DEBUG_FS) #if defined(CONFIG_PM_DEBUG) && defined(CONFIG_DEBUG_FS)
extern void pm_dbg_update_time(struct powerdomain *pwrdm, int prev); extern void pm_dbg_update_time(struct powerdomain *pwrdm, int prev);
extern int pm_dbg_regset_save(int reg_set);
extern int pm_dbg_regset_init(int reg_set);
#else #else
#define pm_dbg_update_time(pwrdm, prev) do {} while (0); #define pm_dbg_update_time(pwrdm, prev) do {} while (0);
#define pm_dbg_regset_save(reg_set) do {} while (0);
#define pm_dbg_regset_init(reg_set) do {} while (0);
#endif /* CONFIG_PM_DEBUG */ #endif /* CONFIG_PM_DEBUG */
extern void omap24xx_idle_loop_suspend(void); extern void omap24xx_idle_loop_suspend(void);
......
...@@ -53,6 +53,8 @@ ...@@ -53,6 +53,8 @@
#include "powerdomain.h" #include "powerdomain.h"
#include "clockdomain.h" #include "clockdomain.h"
static int omap2_pm_debug;
#ifdef CONFIG_SUSPEND #ifdef CONFIG_SUSPEND
static suspend_state_t suspend_state = PM_SUSPEND_ON; static suspend_state_t suspend_state = PM_SUSPEND_ON;
static inline bool is_suspending(void) static inline bool is_suspending(void)
...@@ -123,7 +125,6 @@ static void omap2_enter_full_retention(void) ...@@ -123,7 +125,6 @@ static void omap2_enter_full_retention(void)
omap2_gpio_prepare_for_idle(0); omap2_gpio_prepare_for_idle(0);
if (omap2_pm_debug) { if (omap2_pm_debug) {
omap2_pm_dump(0, 0, 0);
getnstimeofday(&ts_preidle); getnstimeofday(&ts_preidle);
} }
...@@ -160,7 +161,6 @@ static void omap2_enter_full_retention(void) ...@@ -160,7 +161,6 @@ static void omap2_enter_full_retention(void)
getnstimeofday(&ts_postidle); getnstimeofday(&ts_postidle);
ts_idle = timespec_sub(ts_postidle, ts_preidle); ts_idle = timespec_sub(ts_postidle, ts_preidle);
tmp = timespec_to_ns(&ts_idle) * NSEC_PER_USEC; tmp = timespec_to_ns(&ts_idle) * NSEC_PER_USEC;
omap2_pm_dump(0, 1, tmp);
} }
omap2_gpio_resume_after_idle(); omap2_gpio_resume_after_idle();
...@@ -247,7 +247,6 @@ static void omap2_enter_mpu_retention(void) ...@@ -247,7 +247,6 @@ static void omap2_enter_mpu_retention(void)
} }
if (omap2_pm_debug) { if (omap2_pm_debug) {
omap2_pm_dump(only_idle ? 2 : 1, 0, 0);
getnstimeofday(&ts_preidle); getnstimeofday(&ts_preidle);
} }
...@@ -259,7 +258,6 @@ static void omap2_enter_mpu_retention(void) ...@@ -259,7 +258,6 @@ static void omap2_enter_mpu_retention(void)
getnstimeofday(&ts_postidle); getnstimeofday(&ts_postidle);
ts_idle = timespec_sub(ts_postidle, ts_preidle); ts_idle = timespec_sub(ts_postidle, ts_preidle);
tmp = timespec_to_ns(&ts_idle) * NSEC_PER_USEC; tmp = timespec_to_ns(&ts_idle) * NSEC_PER_USEC;
omap2_pm_dump(only_idle ? 2 : 1, 1, tmp);
} }
} }
......
...@@ -497,8 +497,6 @@ void omap_sram_idle(void) ...@@ -497,8 +497,6 @@ void omap_sram_idle(void)
int omap3_can_sleep(void) int omap3_can_sleep(void)
{ {
if (!sleep_while_idle)
return 0;
if (!omap_uart_can_sleep()) if (!omap_uart_can_sleep())
return 0; return 0;
return 1; return 1;
......
...@@ -143,7 +143,7 @@ static irqreturn_t sr_interrupt(int irq, void *data) ...@@ -143,7 +143,7 @@ static irqreturn_t sr_interrupt(int irq, void *data)
sr_write_reg(sr_info, IRQSTATUS, status); sr_write_reg(sr_info, IRQSTATUS, status);
} }
if (sr_class->class_type == SR_CLASS2 && sr_class->notify) if (sr_class->notify)
sr_class->notify(sr_info->voltdm, status); sr_class->notify(sr_info->voltdm, status);
return IRQ_HANDLED; return IRQ_HANDLED;
...@@ -258,9 +258,7 @@ static int sr_late_init(struct omap_sr *sr_info) ...@@ -258,9 +258,7 @@ static int sr_late_init(struct omap_sr *sr_info)
struct resource *mem; struct resource *mem;
int ret = 0; int ret = 0;
if (sr_class->class_type == SR_CLASS2 && if (sr_class->notify && sr_class->notify_flags && sr_info->irq) {
sr_class->notify_flags && sr_info->irq) {
name = kasprintf(GFP_KERNEL, "sr_%s", sr_info->voltdm->name); name = kasprintf(GFP_KERNEL, "sr_%s", sr_info->voltdm->name);
if (name == NULL) { if (name == NULL) {
ret = -ENOMEM; ret = -ENOMEM;
...@@ -270,6 +268,7 @@ static int sr_late_init(struct omap_sr *sr_info) ...@@ -270,6 +268,7 @@ static int sr_late_init(struct omap_sr *sr_info)
0, name, (void *)sr_info); 0, name, (void *)sr_info);
if (ret) if (ret)
goto error; goto error;
disable_irq(sr_info->irq);
} }
if (pdata && pdata->enable_on_init) if (pdata && pdata->enable_on_init)
...@@ -808,10 +807,13 @@ static int omap_sr_autocomp_store(void *data, u64 val) ...@@ -808,10 +807,13 @@ static int omap_sr_autocomp_store(void *data, u64 val)
return -EINVAL; return -EINVAL;
} }
/* control enable/disable only if there is a delta in value */
if (sr_info->autocomp_active != val) {
if (!val) if (!val)
sr_stop_vddautocomp(sr_info); sr_stop_vddautocomp(sr_info);
else else
sr_start_vddautocomp(sr_info); sr_start_vddautocomp(sr_info);
}
return 0; return 0;
} }
......
...@@ -84,6 +84,7 @@ ...@@ -84,6 +84,7 @@
#include <linux/io.h> #include <linux/io.h>
#include <linux/clk.h> #include <linux/clk.h>
#include <linux/clkdev.h> #include <linux/clkdev.h>
#include <linux/pm_runtime.h>
#include <plat/omap_device.h> #include <plat/omap_device.h>
#include <plat/omap_hwmod.h> #include <plat/omap_hwmod.h>
...@@ -539,20 +540,34 @@ int omap_early_device_register(struct omap_device *od) ...@@ -539,20 +540,34 @@ int omap_early_device_register(struct omap_device *od)
static int _od_runtime_suspend(struct device *dev) static int _od_runtime_suspend(struct device *dev)
{ {
struct platform_device *pdev = to_platform_device(dev); struct platform_device *pdev = to_platform_device(dev);
int ret;
ret = pm_generic_runtime_suspend(dev);
if (!ret)
omap_device_idle(pdev);
return ret;
}
return omap_device_idle(pdev); static int _od_runtime_idle(struct device *dev)
{
return pm_generic_runtime_idle(dev);
} }
static int _od_runtime_resume(struct device *dev) static int _od_runtime_resume(struct device *dev)
{ {
struct platform_device *pdev = to_platform_device(dev); struct platform_device *pdev = to_platform_device(dev);
return omap_device_enable(pdev); omap_device_enable(pdev);
return pm_generic_runtime_resume(dev);
} }
static struct dev_power_domain omap_device_power_domain = { static struct dev_power_domain omap_device_power_domain = {
.ops = { .ops = {
.runtime_suspend = _od_runtime_suspend, .runtime_suspend = _od_runtime_suspend,
.runtime_idle = _od_runtime_idle,
.runtime_resume = _od_runtime_resume, .runtime_resume = _od_runtime_resume,
USE_PLATFORM_PM_SLEEP_OPS USE_PLATFORM_PM_SLEEP_OPS
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment