/* * * (C) COPYRIGHT 2015 ARM Limited. All rights reserved. * * This program is free software and is provided to you under the terms of the * GNU General Public License version 2 as published by the Free Software * Foundation, and any use by you of this program is subject to the terms * of such GNU licence. * * A copy of the licence is included with the program, and can also be obtained * from Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. * */ #include #include #include #include static int pm_callback_power_on(struct kbase_device *kbdev) { int ret; dev_dbg(kbdev->dev, "pm_callback_power_on %p\n", (void *)kbdev->dev->pm_domain); ret = pm_runtime_get_sync(kbdev->dev); dev_dbg(kbdev->dev, "pm_runtime_get returned %d\n", ret); return 1; } static void pm_callback_power_off(struct kbase_device *kbdev) { dev_dbg(kbdev->dev, "pm_callback_power_off\n"); pm_runtime_put_autosuspend(kbdev->dev); } int kbase_device_runtime_init(struct kbase_device *kbdev) { dev_dbg(kbdev->dev, "kbase_device_runtime_init\n"); pm_runtime_enable(kbdev->dev); return 0; } void kbase_device_runtime_disable(struct kbase_device *kbdev) { dev_dbg(kbdev->dev, "kbase_device_runtime_disable\n"); pm_runtime_disable(kbdev->dev); } static int pm_callback_runtime_on(struct kbase_device *kbdev) { dev_dbg(kbdev->dev, "pm_callback_runtime_on\n"); return 0; } static void pm_callback_runtime_off(struct kbase_device *kbdev) { dev_dbg(kbdev->dev, "pm_callback_runtime_off\n"); } static void pm_callback_resume(struct kbase_device *kbdev) { int ret = pm_callback_runtime_on(kbdev); WARN_ON(ret); } static void pm_callback_suspend(struct kbase_device *kbdev) { pm_callback_runtime_off(kbdev); } struct kbase_pm_callback_conf pm_callbacks = { .power_on_callback = pm_callback_power_on, .power_off_callback = pm_callback_power_off, .power_suspend_callback = pm_callback_suspend, .power_resume_callback = pm_callback_resume, #ifdef KBASE_PM_RUNTIME .power_runtime_init_callback = kbase_device_runtime_init, .power_runtime_term_callback = kbase_device_runtime_disable, .power_runtime_on_callback = pm_callback_runtime_on, .power_runtime_off_callback = pm_callback_runtime_off, #else /* KBASE_PM_RUNTIME */ .power_runtime_init_callback = NULL, .power_runtime_term_callback = NULL, .power_runtime_on_callback = NULL, .power_runtime_off_callback = NULL, #endif /* KBASE_PM_RUNTIME */ };