|
@@ -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;
|