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 | 136 | struct ltdc_device *ldev = ddev->dev_private; |
| 137 | 137 | struct drm_atomic_state *state; |
| 138 | 138 | |
| 139 | − if (WARN_ON(!ldev->suspend_state)) | |
| 140 | − return -ENOENT; | |
| 139 | + WARN_ON(ldev->suspend_state); | |
| 141 | 140 | |
| 142 | 141 | state = drm_atomic_helper_suspend(ddev); |
| 143 | 142 | if (IS_ERR(state)) |
| @@ -155,15 +154,17 @@ static __maybe_unused int drv_resume(struct device *dev) · 11 unmodified lines | ||
| 155 | 154 | struct ltdc_device *ldev = ddev->dev_private; |
| 156 | 155 | int ret; |
| 157 | 156 | |
| 157 | + if (WARN_ON(!ldev->suspend_state)) | |
| 158 | + return -ENOENT; | |
| 159 | + | |
| 158 | 160 | pm_runtime_force_resume(dev); |
| 159 | 161 | ret = drm_atomic_helper_resume(ddev, ldev->suspend_state); |
| 160 | − if (ret) { | |
| 162 | + if (ret) | |
| 161 | 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 | 170 | static __maybe_unused int drv_runtime_suspend(struct device *dev) |