|
@@ -292,71 +292,4 @@ void tinydrm_shutdown(struct tinydrm_device *tdev)
|
|
|
}
|
|
|
EXPORT_SYMBOL(tinydrm_shutdown);
|
|
|
|
|
|
-/**
|
|
|
- * tinydrm_suspend - Suspend tinydrm
|
|
|
- * @tdev: tinydrm device
|
|
|
- *
|
|
|
- * Used in driver PM operations to suspend tinydrm.
|
|
|
- * Suspends fbdev and DRM.
|
|
|
- * Resume with tinydrm_resume().
|
|
|
- *
|
|
|
- * Returns:
|
|
|
- * Zero on success, negative error code on failure.
|
|
|
- */
|
|
|
-int tinydrm_suspend(struct tinydrm_device *tdev)
|
|
|
-{
|
|
|
- struct drm_atomic_state *state;
|
|
|
-
|
|
|
- if (tdev->suspend_state) {
|
|
|
- DRM_ERROR("Failed to suspend: state already set\n");
|
|
|
- return -EINVAL;
|
|
|
- }
|
|
|
-
|
|
|
- drm_fbdev_cma_set_suspend_unlocked(tdev->fbdev_cma, 1);
|
|
|
- state = drm_atomic_helper_suspend(tdev->drm);
|
|
|
- if (IS_ERR(state)) {
|
|
|
- drm_fbdev_cma_set_suspend_unlocked(tdev->fbdev_cma, 0);
|
|
|
- return PTR_ERR(state);
|
|
|
- }
|
|
|
-
|
|
|
- tdev->suspend_state = state;
|
|
|
-
|
|
|
- return 0;
|
|
|
-}
|
|
|
-EXPORT_SYMBOL(tinydrm_suspend);
|
|
|
-
|
|
|
-/**
|
|
|
- * tinydrm_resume - Resume tinydrm
|
|
|
- * @tdev: tinydrm device
|
|
|
- *
|
|
|
- * Used in driver PM operations to resume tinydrm.
|
|
|
- * Suspend with tinydrm_suspend().
|
|
|
- *
|
|
|
- * Returns:
|
|
|
- * Zero on success, negative error code on failure.
|
|
|
- */
|
|
|
-int tinydrm_resume(struct tinydrm_device *tdev)
|
|
|
-{
|
|
|
- struct drm_atomic_state *state = tdev->suspend_state;
|
|
|
- int ret;
|
|
|
-
|
|
|
- if (!state) {
|
|
|
- DRM_ERROR("Failed to resume: state is not set\n");
|
|
|
- return -EINVAL;
|
|
|
- }
|
|
|
-
|
|
|
- tdev->suspend_state = NULL;
|
|
|
-
|
|
|
- ret = drm_atomic_helper_resume(tdev->drm, state);
|
|
|
- if (ret) {
|
|
|
- DRM_ERROR("Error resuming state: %d\n", ret);
|
|
|
- return ret;
|
|
|
- }
|
|
|
-
|
|
|
- drm_fbdev_cma_set_suspend_unlocked(tdev->fbdev_cma, 0);
|
|
|
-
|
|
|
- return 0;
|
|
|
-}
|
|
|
-EXPORT_SYMBOL(tinydrm_resume);
|
|
|
-
|
|
|
MODULE_LICENSE("GPL");
|