Merge branch 'power-domains' into for-linus
* power-domains: PM: Fix build issue in clock_ops.c for CONFIG_PM_RUNTIME unset PM: Revert "driver core: platform_bus: allow runtime override of dev_pm_ops" OMAP1 / PM: Use generic clock manipulation routines for runtime PM PM / Runtime: Generic clock manipulation rountines for runtime PM (v6) PM / Runtime: Add subsystem data field to struct dev_pm_info OMAP2+ / PM: move runtime PM implementation to use device power domains PM / Platform: Use generic runtime PM callbacks directly shmobile: Use power domains for platform runtime PM PM: Export platform bus type's default PM callbacks PM: Make power domain callbacks take precedence over subsystem ones
This commit is contained in:
@@ -139,7 +139,7 @@ void platform_pm_runtime_suspend_idle(void)
|
||||
queue_work(pm_wq, &hwblk_work);
|
||||
}
|
||||
|
||||
int platform_pm_runtime_suspend(struct device *dev)
|
||||
static int default_platform_runtime_suspend(struct device *dev)
|
||||
{
|
||||
struct platform_device *pdev = to_platform_device(dev);
|
||||
struct pdev_archdata *ad = &pdev->archdata;
|
||||
@@ -147,7 +147,7 @@ int platform_pm_runtime_suspend(struct device *dev)
|
||||
int hwblk = ad->hwblk_id;
|
||||
int ret = 0;
|
||||
|
||||
dev_dbg(dev, "platform_pm_runtime_suspend() [%d]\n", hwblk);
|
||||
dev_dbg(dev, "%s() [%d]\n", __func__, hwblk);
|
||||
|
||||
/* ignore off-chip platform devices */
|
||||
if (!hwblk)
|
||||
@@ -183,20 +183,20 @@ int platform_pm_runtime_suspend(struct device *dev)
|
||||
mutex_unlock(&ad->mutex);
|
||||
|
||||
out:
|
||||
dev_dbg(dev, "platform_pm_runtime_suspend() [%d] returns %d\n",
|
||||
hwblk, ret);
|
||||
dev_dbg(dev, "%s() [%d] returns %d\n",
|
||||
__func__, hwblk, ret);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
int platform_pm_runtime_resume(struct device *dev)
|
||||
static int default_platform_runtime_resume(struct device *dev)
|
||||
{
|
||||
struct platform_device *pdev = to_platform_device(dev);
|
||||
struct pdev_archdata *ad = &pdev->archdata;
|
||||
int hwblk = ad->hwblk_id;
|
||||
int ret = 0;
|
||||
|
||||
dev_dbg(dev, "platform_pm_runtime_resume() [%d]\n", hwblk);
|
||||
dev_dbg(dev, "%s() [%d]\n", __func__, hwblk);
|
||||
|
||||
/* ignore off-chip platform devices */
|
||||
if (!hwblk)
|
||||
@@ -228,19 +228,19 @@ int platform_pm_runtime_resume(struct device *dev)
|
||||
*/
|
||||
mutex_unlock(&ad->mutex);
|
||||
out:
|
||||
dev_dbg(dev, "platform_pm_runtime_resume() [%d] returns %d\n",
|
||||
hwblk, ret);
|
||||
dev_dbg(dev, "%s() [%d] returns %d\n",
|
||||
__func__, hwblk, ret);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
int platform_pm_runtime_idle(struct device *dev)
|
||||
static int default_platform_runtime_idle(struct device *dev)
|
||||
{
|
||||
struct platform_device *pdev = to_platform_device(dev);
|
||||
int hwblk = pdev->archdata.hwblk_id;
|
||||
int ret = 0;
|
||||
|
||||
dev_dbg(dev, "platform_pm_runtime_idle() [%d]\n", hwblk);
|
||||
dev_dbg(dev, "%s() [%d]\n", __func__, hwblk);
|
||||
|
||||
/* ignore off-chip platform devices */
|
||||
if (!hwblk)
|
||||
@@ -252,10 +252,19 @@ int platform_pm_runtime_idle(struct device *dev)
|
||||
/* suspend synchronously to disable clocks immediately */
|
||||
ret = pm_runtime_suspend(dev);
|
||||
out:
|
||||
dev_dbg(dev, "platform_pm_runtime_idle() [%d] done!\n", hwblk);
|
||||
dev_dbg(dev, "%s() [%d] done!\n", __func__, hwblk);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static struct dev_power_domain default_power_domain = {
|
||||
.ops = {
|
||||
.runtime_suspend = default_platform_runtime_suspend,
|
||||
.runtime_resume = default_platform_runtime_resume,
|
||||
.runtime_idle = default_platform_runtime_idle,
|
||||
USE_PLATFORM_PM_SLEEP_OPS
|
||||
},
|
||||
};
|
||||
|
||||
static int platform_bus_notify(struct notifier_block *nb,
|
||||
unsigned long action, void *data)
|
||||
{
|
||||
@@ -276,6 +285,7 @@ static int platform_bus_notify(struct notifier_block *nb,
|
||||
hwblk_disable(hwblk_info, hwblk);
|
||||
/* make sure driver re-inits itself once */
|
||||
__set_bit(PDEV_ARCHDATA_FLAG_INIT, &pdev->archdata.flags);
|
||||
dev->pwr_domain = &default_power_domain;
|
||||
break;
|
||||
/* TODO: add BUS_NOTIFY_BIND_DRIVER and increase idle count */
|
||||
case BUS_NOTIFY_BOUND_DRIVER:
|
||||
@@ -289,6 +299,7 @@ static int platform_bus_notify(struct notifier_block *nb,
|
||||
__set_bit(PDEV_ARCHDATA_FLAG_INIT, &pdev->archdata.flags);
|
||||
break;
|
||||
case BUS_NOTIFY_DEL_DEVICE:
|
||||
dev->pwr_domain = NULL;
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
|
Reference in New Issue
Block a user