Without this fix, the system can not go in "suspend" mode due to an error in drv_suspend function. Fixes: 35ab6cfbf211 ("drm/stm: support runtime power management")
Unified · Split
| @@ -136,8 +136,7 @@ static __maybe_unused int drv_suspend(struct device *dev) · 135 unmodified lines | |||
| 136 | struct ltdc_device *ldev = ddev->dev_private; | 136 | struct ltdc_device *ldev = ddev->dev_private; |
| 137 | struct drm_atomic_state *state; | 137 | struct drm_atomic_state *state; |
| 138 | 138 | ||
| 139 | if (WARN_ON(!ldev->suspend_state)) | 139 | WARN_ON(ldev->suspend_state); |
| 140 | return -ENOENT; | ||
| 141 | 140 | ||
| 142 | state = drm_atomic_helper_suspend(ddev); | 141 | state = drm_atomic_helper_suspend(ddev); |
| 143 | if (IS_ERR(state)) | 142 | if (IS_ERR(state)) |
| @@ -155,15 +154,17 @@ static __maybe_unused int drv_resume(struct device *dev) · 11 unmodified lines | |||
| 155 | struct ltdc_device *ldev = ddev->dev_private; | 154 | struct ltdc_device *ldev = ddev->dev_private; |
| 156 | int ret; | 155 | int ret; |
| 157 | 156 | ||
| 157 | if (WARN_ON(!ldev->suspend_state)) | ||
| 158 | return -ENOENT; | ||
| 159 | |||
| 158 | pm_runtime_force_resume(dev); | 160 | pm_runtime_force_resume(dev); |
| 159 | ret = drm_atomic_helper_resume(ddev, ldev->suspend_state); | 161 | ret = drm_atomic_helper_resume(ddev, ldev->suspend_state); |
| 160 | if (ret) { | 162 | if (ret) |
| 161 | pm_runtime_force_suspend(dev); | 163 | pm_runtime_force_suspend(dev); |
| 162 | ldev->suspend_state = NULL; | ||
| 163 | return ret; | ||
| 164 | } | ||
| 165 | 164 | ||
| 166 | return 0; | 165 | ldev->suspend_state = NULL; |
| 166 | |||
| 167 | return ret; | ||
| 167 | } | 168 | } |
| 168 | 169 | ||
| 169 | static __maybe_unused int drv_runtime_suspend(struct device *dev) | 170 | static __maybe_unused int drv_runtime_suspend(struct device *dev) |